diff options
| author | Emanuele Di Pascale <emanuele@voltanet.io> | 2020-09-11 11:07:37 +0200 | 
|---|---|---|
| committer | Igor Ryzhov <iryzhov@nfware.com> | 2020-10-06 15:54:24 +0300 | 
| commit | dbced16a98ad39d289af388416f05fca2320677d (patch) | |
| tree | 2d22ba2cf90660f5dcad8b8d2985bad263d37a06 /isisd | |
| parent | fde0cf6df77de9622b7c6419746018e40c65f7b8 (diff) | |
isisd: fix pseudonode LSP bug
Currently, when the is-type of an area is changed and its circuits resign,
we are not resetting the DIS flag. Consequently, if the area type is reverted
we are not running the DR election and not regenerating the pseudonode LSP.
Also adding event debug logs for circuit commence/resign.
Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
Diffstat (limited to 'isisd')
| -rw-r--r-- | isisd/isis_events.c | 13 | 
1 files changed, 13 insertions, 0 deletions
diff --git a/isisd/isis_events.c b/isisd/isis_events.c index f330407bf5..717a5fd046 100644 --- a/isisd/isis_events.c +++ b/isisd/isis_events.c @@ -76,6 +76,12 @@ void isis_event_circuit_state_change(struct isis_circuit *circuit,  static void circuit_commence_level(struct isis_circuit *circuit, int level)  { +	if (IS_DEBUG_EVENTS) +		zlog_debug( +			"ISIS-Evt (%s) circuit %u on iface %s commencing on L%d", +			circuit->area->area_tag, circuit->circuit_id, +			circuit->interface->name, level); +  	if (!circuit->is_passive) {  		if (level == 1) {  			thread_add_timer(master, send_l1_psnp, circuit, @@ -105,6 +111,12 @@ static void circuit_resign_level(struct isis_circuit *circuit, int level)  {  	int idx = level - 1; +	if (IS_DEBUG_EVENTS) +		zlog_debug( +			"ISIS-Evt (%s) circuit %u on iface %s resigning on L%d", +			circuit->area->area_tag, circuit->circuit_id, +			circuit->interface->name, level); +  	THREAD_TIMER_OFF(circuit->t_send_csnp[idx]);  	THREAD_TIMER_OFF(circuit->t_send_psnp[idx]); @@ -114,6 +126,7 @@ static void circuit_resign_level(struct isis_circuit *circuit, int level)  		THREAD_TIMER_OFF(circuit->u.bc.t_refresh_pseudo_lsp[idx]);  		circuit->lsp_regenerate_pending[idx] = 0;  		circuit->u.bc.run_dr_elect[idx] = 0; +		circuit->u.bc.is_dr[idx] = 0;  		if (circuit->u.bc.lan_neighs[idx] != NULL)  			list_delete(&circuit->u.bc.lan_neighs[idx]);  	}  | 
