From 5346acec2da716599e2d141f8160a1c8444293a4 Mon Sep 17 00:00:00 2001 From: Christian Franke Date: Wed, 10 Oct 2018 16:00:16 +0200 Subject: [PATCH] isisd: trigger hellos on adjacency state change Signed-off-by: Christian Franke --- isisd/isis_adjacency.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/isisd/isis_adjacency.c b/isisd/isis_adjacency.c index 9013c7c19b..b0f2947ec6 100644 --- a/isisd/isis_adjacency.c +++ b/isisd/isis_adjacency.c @@ -215,21 +215,24 @@ void isis_adj_process_threeway(struct isis_adjacency *adj, } } + if (adj->threeway_state != next_tw_state) { + send_hello_sched(adj->circuit, 0, TRIGGERED_IIH_DELAY); + } + adj->threeway_state = next_tw_state; } void isis_adj_state_change(struct isis_adjacency *adj, enum isis_adj_state new_state, const char *reason) { - int old_state; - int level; - struct isis_circuit *circuit; + enum isis_adj_state old_state = adj->adj_state; + struct isis_circuit *circuit = adj->circuit; bool del; - old_state = adj->adj_state; adj->adj_state = new_state; - - circuit = adj->circuit; + if (new_state != old_state) { + send_hello_sched(circuit, adj->level, TRIGGERED_IIH_DELAY); + } if (isis->debugs & DEBUG_ADJ_PACKETS) { zlog_debug("ISIS-Adj (%s): Adjacency state change %d->%d: %s", @@ -257,7 +260,7 @@ void isis_adj_state_change(struct isis_adjacency *adj, if (circuit->circ_type == CIRCUIT_T_BROADCAST) { del = false; - for (level = IS_LEVEL_1; level <= IS_LEVEL_2; level++) { + for (int level = IS_LEVEL_1; level <= IS_LEVEL_2; level++) { if ((adj->level & level) == 0) continue; if (new_state == ISIS_ADJ_UP) { @@ -298,16 +301,13 @@ void isis_adj_state_change(struct isis_adjacency *adj, } else if (circuit->circ_type == CIRCUIT_T_P2P) { del = false; - for (level = IS_LEVEL_1; level <= IS_LEVEL_2; level++) { + for (int level = IS_LEVEL_1; level <= IS_LEVEL_2; level++) { if ((adj->level & level) == 0) continue; if (new_state == ISIS_ADJ_UP) { circuit->upadjcount[level - 1]++; hook_call(isis_adj_state_change_hook, adj); - if (adj->sys_type == ISIS_SYSTYPE_UNKNOWN) - send_hello(circuit, level); - /* update counter & timers for debugging * purposes */ adj->last_flap = time(NULL); @@ -337,8 +337,6 @@ void isis_adj_state_change(struct isis_adjacency *adj, if (del) isis_delete_adj(adj); } - - return; } -- 2.39.5