mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 11:18:43 +00:00
isisd: don't crash when isis_sock_init fails
When isis_sock_init fails in isis_circuit_up, isis_circuit_down would be called to cancel timers which were scheduled. However isis_circuit_down would immediately return, since the state had not been changed to 'UP' yet. Fix this by having isis_circuit_down always cancel all the timers. Signed-off-by: Christian Franke <chris@opensourcerouting.org>
This commit is contained in:
parent
d1a85fe40d
commit
d4670f515b
@ -638,7 +638,7 @@ int isis_circuit_up(struct isis_circuit *circuit)
|
|||||||
thread_add_timer(master, isis_run_dr_l2, circuit,
|
thread_add_timer(master, isis_run_dr_l2, circuit,
|
||||||
2 * circuit->hello_interval[1],
|
2 * circuit->hello_interval[1],
|
||||||
&circuit->u.bc.t_run_dr[1]);
|
&circuit->u.bc.t_run_dr[1]);
|
||||||
} else {
|
} else if (circuit->circ_type == CIRCUIT_T_P2P) {
|
||||||
/* initializing the hello send threads
|
/* initializing the hello send threads
|
||||||
* for a ptp IF
|
* for a ptp IF
|
||||||
*/
|
*/
|
||||||
@ -682,9 +682,6 @@ int isis_circuit_up(struct isis_circuit *circuit)
|
|||||||
|
|
||||||
void isis_circuit_down(struct isis_circuit *circuit)
|
void isis_circuit_down(struct isis_circuit *circuit)
|
||||||
{
|
{
|
||||||
if (circuit->state != C_STATE_UP)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Clear the flags for all the lsps of the circuit. */
|
/* Clear the flags for all the lsps of the circuit. */
|
||||||
isis_circuit_update_all_srmflags(circuit, 0);
|
isis_circuit_update_all_srmflags(circuit, 0);
|
||||||
|
|
||||||
@ -756,10 +753,12 @@ void isis_circuit_down(struct isis_circuit *circuit)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* send one gratuitous hello to spead up convergence */
|
/* send one gratuitous hello to spead up convergence */
|
||||||
if (circuit->is_type & IS_LEVEL_1)
|
if (circuit->state == C_STATE_UP) {
|
||||||
send_hello(circuit, IS_LEVEL_1);
|
if (circuit->is_type & IS_LEVEL_1)
|
||||||
if (circuit->is_type & IS_LEVEL_2)
|
send_hello(circuit, IS_LEVEL_1);
|
||||||
send_hello(circuit, IS_LEVEL_2);
|
if (circuit->is_type & IS_LEVEL_2)
|
||||||
|
send_hello(circuit, IS_LEVEL_2);
|
||||||
|
}
|
||||||
|
|
||||||
circuit->upadjcount[0] = 0;
|
circuit->upadjcount[0] = 0;
|
||||||
circuit->upadjcount[1] = 0;
|
circuit->upadjcount[1] = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user