[PATCH] babel: Rework seqno request handling to track sender, not destination
Juliusz Chroboczek
jch at irif.fr
Sat Dec 17 15:54:32 CET 2022
>> This paragraph is not entirely clear to me. Do you mean that the
>> neighbour on behalf of which we're forwarding the request has gone away?
> Yes.
[...]
> Oh, and the reason we don't need to keep track of all neighbours is that
> when we satisfy a request we just trigger a global (multicast) update
> for the prefix instead of sending it individually to all neighbours we
> forwarded requests on behalf of.
Right. Babeld does the same.
But in that case, I don't understand why you need to keep track of the
neighbour in the first place. I haven't looked at this code in some time,
but I seem to recall that in babeld, we simply retain the information that
there's a pending request, we don't need to know on whose behalf it's
being made.
> Hmm, right, well my reasoning was also that receiving an unfeasible
> update is not as "urgent" because we most likely have another route for
> the same prefix that is feasible already. Or is this intuition not
> correct?
Consider the case of a well-connected cloud that is connected to the
source through just one router:
B1
/ |
/ |
S ---- A --B2
\ |
\ |
B3
If the metric of the route S-A increases by more than max_i(d(A,B_i)),
then all of the updates sent by A become unfeasible for all of the B_i.
Hence, all of the B_i remain unreachable until S originates a new seqno.
A will forward a request on behalf of the B_i, and due to duplicate
suppression, it will be forwarded only once. If the request A->B is lost,
then you're waiting until the next unfeasible update sent by A.
-- Juliusz
More information about the Bird-users
mailing list