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 <rzalamena@opensourcerouting.org>
This commit is contained in:
Rafael Zalamena 2017-12-11 18:25:06 -02:00
parent 013b29d7ea
commit c60158ae6b
3 changed files with 5 additions and 4 deletions

View File

@ -676,7 +676,8 @@ int isis_circuit_up(struct isis_circuit *circuit)
circuit->lsp_queue = list_new(); circuit->lsp_queue = list_new();
circuit->lsp_hash = isis_lsp_hash_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; return ISIS_OK;
} }

View File

@ -84,7 +84,7 @@ struct isis_circuit {
struct thread *t_send_lsp; struct thread *t_send_lsp;
struct list *lsp_queue; /* LSPs to be txed (both levels) */ struct list *lsp_queue; /* LSPs to be txed (both levels) */
struct isis_lsp_hash *lsp_hash; /* Hashtable synchronized with lsp_queue */ 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; * interval;
* for scalability, use one timestamp per * for scalability, use one timestamp per
* circuit, instead of one per lsp per * circuit, instead of one per lsp per

View File

@ -1873,12 +1873,12 @@ int lsp_tick(struct thread *thread)
if (!circuit->lsp_queue) if (!circuit->lsp_queue)
continue; continue;
if (now - circuit->lsp_queue_last_push if (now - circuit->lsp_queue_last_push[level]
< MIN_LSP_RETRANS_INTERVAL) { < MIN_LSP_RETRANS_INTERVAL) {
continue; continue;
} }
circuit->lsp_queue_last_push = now; circuit->lsp_queue_last_push[level] = now;
for (ALL_LIST_ELEMENTS_RO( for (ALL_LIST_ELEMENTS_RO(
lsp_list, lspnode, lsp)) { lsp_list, lspnode, lsp)) {