[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