diff options
author | Toke Høiland-Jørgensen <toke@toke.dk> | 2022-12-24 15:47:11 +0100 |
---|---|---|
committer | Ondrej Zajicek <santiago@crfreenet.org> | 2022-12-24 15:52:12 +0100 |
commit | 8b06a4d8af46511f0f8dbb8905afa88590a831b6 (patch) | |
tree | b2b3048c84185161759332776a95b3ebbf1ec9c7 /lib/ip_test.c | |
parent | 2b7643e1f8ecb0bd4cf9af4183b4fd53b655d19c (diff) |
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.
Diffstat (limited to 'lib/ip_test.c')
0 files changed, 0 insertions, 0 deletions