summaryrefslogtreecommitdiffstats
path: root/isisd/isis_circuit.c
diff options
context:
space:
mode:
authorRenato Westphal <renato@opensourcerouting.org>2016-11-25 00:28:03 +0100
committerDonald Sharp <sharpd@cumulusnetworks.com>2016-11-25 01:56:59 +0100
commit18653436b7e7e5cb7a3ea8ba8a182598cbfbd247 (patch)
tree5b5a790b69a416ba82bc6f2b59f1b7aacb0e679a /isisd/isis_circuit.c
parentlib: Fix nexthop strings to coincide with enum (diff)
downloadfrr-18653436b7e7e5cb7a3ea8ba8a182598cbfbd247.tar.xz
frr-18653436b7e7e5cb7a3ea8ba8a182598cbfbd247.zip
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 <renato@opensourcerouting.org>
Diffstat (limited to 'isisd/isis_circuit.c')
-rw-r--r--isisd/isis_circuit.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c
index c2b7ec750..0332023f3 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 ();