Hello
I am hoping someone will give me some pointers towards adding an
optional semi-reliable data delivery mode to openvpn.
I would like to set up OpenVPN on an international link that has a
~500ms round trip time, and a round trip packet loss of 50% to 60%
(i.e. around 20% to 30% probability of loss in one direction).
The design is currently like this:
1. Data packets are incrementally numbered (e.g. 16 bits). Each
sender maintains a buffer of packets sent
2. Each packet is sent with information about data-packets received:
Last received data-packet sequence number
History of packets received: e.g. 16 bits, 1=received, 0=packet not
seen
3. When data packets are received, confirmations of received packets
are tallied. If a packet is confirmed un-delivered after a
configurable timeout, it is retransmitted a maximum of 2 times
(higher level protocols can handle duplicates and loss beyond this -
that's their domain).
4. A packet about which no further information is received is assumed
to have been delivered.
Now, questions:
- Should I define a separate data protocol for semi-reliable
delivery? (e.g. P_DATA_RETRY_V1) - or would it be possible to extend
P_DATA_V1?
- Where would I add code? - I think encrypt_sign() function in
forward.c for a start, but pointers to other places would be welcome.
- Is there an existing sequence number for the data packets that I
can re-use?
- Should I use/adapt the existing reliable transport code?
&:-)
--
I don't believe in evolution or microsoft outlook