From c60158ae6b572c342212a145ab1c4891b83dcd72 Mon Sep 17 00:00:00 2001 From: Rafael Zalamena Date: Mon, 11 Dec 2017 18:25:06 -0200 Subject: [PATCH] isisd: fix l2 neighbor formations Add a timestamp information for level 2 circuits, otherwise if the circuit is marked as already processed on level 1 we will not process level 2 areas. Signed-off-by: Rafael Zalamena --- isisd/isis_circuit.c | 3 ++- isisd/isis_circuit.h | 2 +- isisd/isis_lsp.c | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c index 30679367c..0b7dc86ad 100644 --- a/isisd/isis_circuit.c +++ b/isisd/isis_circuit.c @@ -676,7 +676,8 @@ int isis_circuit_up(struct isis_circuit *circuit) circuit->lsp_queue = list_new(); circuit->lsp_hash = isis_lsp_hash_new(); - circuit->lsp_queue_last_push = monotime(NULL); + circuit->lsp_queue_last_push[0] = circuit->lsp_queue_last_push[1] = + monotime(NULL); return ISIS_OK; } diff --git a/isisd/isis_circuit.h b/isisd/isis_circuit.h index ac1e15f6b..ab181189a 100644 --- a/isisd/isis_circuit.h +++ b/isisd/isis_circuit.h @@ -84,7 +84,7 @@ struct isis_circuit { struct thread *t_send_lsp; struct list *lsp_queue; /* LSPs to be txed (both levels) */ struct isis_lsp_hash *lsp_hash; /* Hashtable synchronized with lsp_queue */ - time_t lsp_queue_last_push; /* timestamp used to enforce transmit + time_t lsp_queue_last_push[2]; /* timestamp used to enforce transmit * interval; * for scalability, use one timestamp per * circuit, instead of one per lsp per diff --git a/isisd/isis_lsp.c b/isisd/isis_lsp.c index ff9114c50..614f46c78 100644 --- a/isisd/isis_lsp.c +++ b/isisd/isis_lsp.c @@ -1873,12 +1873,12 @@ int lsp_tick(struct thread *thread) if (!circuit->lsp_queue) continue; - if (now - circuit->lsp_queue_last_push + if (now - circuit->lsp_queue_last_push[level] < MIN_LSP_RETRANS_INTERVAL) { continue; } - circuit->lsp_queue_last_push = now; + circuit->lsp_queue_last_push[level] = now; for (ALL_LIST_ELEMENTS_RO( lsp_list, lspnode, lsp)) { -- 2.39.5