The last parameter of THREAD_TIMER_ON() is the timeout, and we were
using circuit->fd for that. So, when a circuit was brought up, isisd
would miss all received packets on this circuit for quite a few seconds,
slowing down the convergence process.
To fix this, use the same logic we use in isis_receive() to calculate
this timeout.
This bug doesn't happen on Linux, which uses a different method to read
packets from the network.
Fixes the following ANVL tests on FreeBSD: ISIS-17.1, ISIS-18.6 (and
probably others too).
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
THREAD_READ_ON (master, circuit->t_read, isis_receive, circuit,
circuit->fd);
#else
- THREAD_TIMER_ON (master, circuit->t_read, isis_receive, circuit,
- circuit->fd);
+ THREAD_TIMER_MSEC_ON (master, circuit->t_read, isis_receive, circuit,
+ listcount (circuit->area->circuit_list) * 100);
#endif
circuit->lsp_queue = list_new ();