Juliusz Chroboczek <jch@irif.fr> writes:
Introduce a strict-inequality version of the modulo-comparison for this purpose.
Thanks.
I'm a little worried about the code around line 1017:
struct babel_source *s = babel_get_source(p, e, e->router_id); s->expires = current_time() + BABEL_GARBAGE_INTERVAL;
if (gt_mod64k(msg.update.seqno, s->seqno) || ((msg.update.seqno == s->seqno) && (msg.update.metric < s->metric))) { s->seqno = msg.update.seqno; s->metric = msg.update.metric; }
If the source is just being created, then the function babel_get_source will initialise s->seqno to 0. If msg.update.seqno happens to be in the interval [0x8000,0xFFFF], then the conditional at line 1020 will fail to trigger, and s->seqno will not be updated until msg.updae.seqno catches up with 0.
I think that babel_get_source should take an extra argument, the initial seqno in case the source does not exist, and it should be called with msg.update.seqno. This corresponds to RFC 8966 Section 3.5.3.
Ah, I see the problem. You're right, of course, sorry for not catching your meaning the first time around. I'll send (another) patch :) -Toke