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

Reply via email to