From 18653436b7e7e5cb7a3ea8ba8a182598cbfbd247 Mon Sep 17 00:00:00 2001 From: Renato Westphal Date: Thu, 24 Nov 2016 21:28:03 -0200 Subject: [PATCH] isisd: fix loss of packets after circuit is brought up 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 --- isisd/isis_circuit.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c index c2b7ec7507..0332023f34 100644 --- a/isisd/isis_circuit.c +++ b/isisd/isis_circuit.c @@ -720,8 +720,8 @@ isis_circuit_up (struct isis_circuit *circuit) 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 (); -- 2.39.5