]> git.ipfire.org Git - thirdparty/bird.git/commit
Babel: Rework seqno request handling
authorToke Høiland-Jørgensen <toke@toke.dk>
Sat, 24 Dec 2022 14:47:11 +0000 (15:47 +0100)
committerIgor Putovny <igor.putovny@nic.cz>
Thu, 30 May 2024 10:29:59 +0000 (12:29 +0200)
commitf41fed59e18abcd16aa594ccdacecbd843c7b85b
tree31e2cb353835ab6b3a7e4c533ca74ada37553f48
parenta6b6a82b5825a4acf2e7c3c7ac749cf36075a04b
Babel: Rework seqno request handling

The seqno request retransmission handling was tracking the destination
that a forwarded request was being sent to and always retransmitting to
that same destination. This is unnecessary because we only need to
retransmit requests we originate ourselves, not those we forward on
behalf of others; in fact retransmitting on behalf of others can lead to
exponential multiplication of requests, which would be bad.

So rework the seqno request tracking so that instead of storing the
destination of a request, we just track whether it was a request that we
forwarded on behalf of another node, or if it was a request we originated
ourselves. Forwarded requests are not retransmitted, they are only used
for duplicate suppression, and for triggering an update when satisfied.
If we end up originating a request that we previously forwarded, we
"upgrade" the old request and restart the retransmit counter.

One complication with this is that requests sent in response to unfeasible
updates (section 3.8.2.2 of the RFC) have to be sent as unicast to a
particular peer. However, we don't really need to retransmit those as
there's no starvation when sending such a request; so we just change
such requests to be one-off unicast requests that are not subject to
retransmission or duplicate suppression. This is the same behaviour as
babeld has for such requests.

Minor changes from committer.
proto/babel/babel.c
proto/babel/babel.h