Juliusz Chroboczek <j...@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