On 1-jun-2005, at 23:01, Erik Nordmark wrote:
What I propose is a mechanism that purely looks whether traffic is flowing in both directions. This doesn't require parsing any headers except source and destination addresses which the shim must look at anyway.
I guess I don't understand what this would add beyond what your proposed negative advice already can do.
Perhaps you can explain how this would work in this example: A is using locator pair <A1, B1> and B is using <B1, A1>. TCP is sending data from A to B, with B responding with ACKs.
The path from B->A fails.
The shim layer on A observes this because it stops receiving packets.
(But TCP on A also starts retransmitting.)
The shim layer on B thinks everything is fine because it sees the packets from A, and it sees the ACKs that B is sending back to A.
But how about this: each side tells the other side a timeout value: after not having seen any traffic from A, B starts probing. Now one of three situations can happen:
But doesn't this lead to a choice between having to send probes when there is no ULP traffic, or having a long timer resulting in a long time until a failure would be detected?
- regular traffic: the timer is restarted before it expires by regular
traffic, so the timer never expires and there are no probes
- irregular traffic: in order to make sure the timer doesn't expire if
there isn't any traffic for some time, the sender injects keepalives
so there are no probes
The shim on the sender? Or the ULP? In either case, you end up adding packets when things would have otherwise been idle.
The shim.
- no traffic: the sender sets the timer to a very large value or infinity, so there are no probes
If the timer has been set to e.g. 5 minutes, how quickly can the shim detect a failure?
I'm assuming that when reachability probes are sent, probes with different address pairs are sent until a working pair is found in both directions, or it is determined that there is no bidirectional connectivity anymore. So B would be informed unless there is no longer any reachability possible.
Yes, but it takes much longer time for B to be informed, because B will not know there is a problem until A manages to get its first probe through to B.
If B has data driven probes (suppressed when there is positive advice from the ULP), then it can find out sooner.
But I think probing that is suppressed when the ULP doesn't send anything is a useful approach, because it avoids adding any probes or keepalives when the ULP is silent.
Agree.
Hm, ok. But we have to be careful about mandating continuous communication between layers. In a properly layered implementation, this type of communication can be quite expensive (context switches and so on).
FWIW the implementation of this that I know the best doesn't add any communication events between the layers. When TCP goes to send a packet to the IPv6 layer it can set a single flag "positive reachability advise" as part of the packet that goes down to the IPv6 transmit routine.