[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Flow label versus Extension header - protocol itself
Hi Erik,
Erik Nordmark wrote:
Greg Daley wrote:
The original assumption was that flow labels (in general, rather than in
shim) would be sender selected. Marcelo has mentioned that there may
therefore be pre-shim flow labels in existence at negotiation time.
I think it will be possible to accomodate these pre-existing labels
for the path between the original source and destination while still
allowing receiver selected flow labels for all other paths (and maybe
replace the original label on the home path after flow state timeout).
This is an interesting suggestion. I don't think there is anything which
prevents using a different flow label for the communication between ULID
A and ULID B, and the communication that is using a different locator
pair, but is part of the same upper layer communication. Any devices on
the paths would need to identify the flow based on <source locator,
destination locator, flow label>, thus when the shim switches to a
different locator pair, if an explicit flow signaling protocol is used,
it would need to signal something along the new path.
So I think we can make it so that the hosts start communicating using
the ULID pair A, B, and a flow label F1 (which could be zero; it isn't
used by the shim, but the shim preserves it e2e).
Thus F1 is sender allocated as today. (And for the packets from B to A,
B could have picked flow label F2.)
When the shim sets up the context, then each receiver allocates a
separate flow label, and uses this to identify the shim state.
Thus B would allocate F3 and send it to A, and A would allocate F4 and
send it to B.
When the ULP sends packets from A to B before a shim failover, the
packets have
source locator A1
destination locator B1
flow label F1
After a failure, the shim would send packets with replaced values
source locator A2
destination locator B2
flow label F3
and the receiver would use this to find the context state, so that the
packet is passes to the ULP has <A1, A2, F1>.
Well, it could even be before failure, so long as it's on a
different path.
I agree though.
I don't think it makes sense switching from F1 to a different locator
for the "main" path as you parenthetically suggest, though.
Fair enough. The main value of retaining the flow label F1 though,
is for applications which are interested in flow identification.
In the distant future, if someone returns to a path they've not visited
there's not going to be any retained state in the routers.
It doesn't seriously harm things to retain the flow label for that
pair of <source,dest,flow> triples.
The benefits of this hybrid is that the flow label that is used to
identify the shim state can be receiver allocated, which means that the
receiver can easily ensure that the flow label uniquely identifies its
context state (for all its current and future locators). Thus the
receiver might only need to lookup <destination locator, flow label> to
find the context state.
It might even be possible for the receiver to reuse flow labels for
different senders, because the context state setup can exchange the
unique ids that Iljitsch suggested recently. (But in such a case, the
receiver needs to use the source in the lookup.)
I was talking with Marcelo on this before, and he seemed less interested
in non-unique labels (comments Marcelo?). I think was largely an issue
if the label could be moved to a new source address before signaling
started.
The only difference between this and using the same flow label for the
communication before and after the locator switch, is a slight change
for explicit flow signaling protocols. In either case, initially the
signaling protocol setups flow state for <A1, B1, F1> (and <B1, A1, F2>
for the reverse path).
If we use the same flow label, then after a locator switch, the
signaling protocol needs to signal <A2, B2, F1>.
If we use a different (receiver allocated label), it needs to signal
<A2, B2, F3> instead.
Doesn't seem like a big difference to me.
The main thing I guess is that it doesn't break any existing flows while
the flow remains on the original path.
Greg