From bfa514575764378008ef87e7bb0f15022ab02364 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Fri, 9 Oct 2020 08:10:20 -0400 Subject: [PATCH] isisd: Always set `circuit->isis` on creation There are code paths where we were not always setting the circuit->isis on creation. Fix that up so it will always happen. Signed-off-by: Donald Sharp --- isisd/isis_circuit.c | 3 ++- isisd/isis_circuit.h | 2 +- isisd/isis_csm.c | 14 +++++++------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c index d6988095e5..4883e012a2 100644 --- a/isisd/isis_circuit.c +++ b/isisd/isis_circuit.c @@ -71,13 +71,14 @@ DEFINE_HOOK(isis_if_new_hook, (struct interface *ifp), (ifp)) int isis_if_new_hook(struct interface *); int isis_if_delete_hook(struct interface *); -struct isis_circuit *isis_circuit_new(void) +struct isis_circuit *isis_circuit_new(struct isis *isis) { struct isis_circuit *circuit; int i; circuit = XCALLOC(MTYPE_ISIS_CIRCUIT, sizeof(struct isis_circuit)); + circuit->isis = isis; /* * Default values */ diff --git a/isisd/isis_circuit.h b/isisd/isis_circuit.h index ec5d738ce6..48afd24b6d 100644 --- a/isisd/isis_circuit.h +++ b/isisd/isis_circuit.h @@ -164,7 +164,7 @@ struct isis_circuit { DECLARE_QOBJ_TYPE(isis_circuit) void isis_circuit_init(void); -struct isis_circuit *isis_circuit_new(void); +struct isis_circuit *isis_circuit_new(struct isis *isis); void isis_circuit_del(struct isis_circuit *circuit); struct isis_circuit *circuit_lookup_by_ifp(struct interface *ifp, struct list *list); diff --git a/isisd/isis_csm.c b/isisd/isis_csm.c index f5ad0aff48..736d8d63f9 100644 --- a/isisd/isis_csm.c +++ b/isisd/isis_csm.c @@ -65,6 +65,7 @@ isis_csm_state_change(int event, struct isis_circuit *circuit, void *arg) { int old_state; struct isis *isis = NULL; + struct isis_area *area = NULL; old_state = circuit ? circuit->state : C_STATE_NA; if (IS_DEBUG_EVENTS) @@ -77,9 +78,10 @@ isis_csm_state_change(int event, struct isis_circuit *circuit, void *arg) assert(circuit == NULL); switch (event) { case ISIS_ENABLE: - circuit = isis_circuit_new(); - isis_circuit_configure(circuit, - (struct isis_area *)arg); + area = arg; + + circuit = isis_circuit_new(area->isis); + isis_circuit_configure(circuit, area); circuit->state = C_STATE_CONF; break; case IF_UP_FROM_Z: @@ -90,10 +92,9 @@ isis_csm_state_change(int event, struct isis_circuit *circuit, void *arg) __func__); break; } - circuit = isis_circuit_new(); + circuit = isis_circuit_new(isis); isis_circuit_if_add(circuit, (struct interface *)arg); listnode_add(isis->init_circ_list, circuit); - circuit->isis = isis; circuit->state = C_STATE_INIT; break; case ISIS_DISABLE: @@ -178,7 +179,7 @@ isis_csm_state_change(int event, struct isis_circuit *circuit, void *arg) zlog_warn("circuit already connected"); break; case ISIS_DISABLE: - isis = circuit->area->isis; + isis = circuit->isis; isis_circuit_down(circuit); isis_circuit_deconfigure(circuit, (struct isis_area *)arg); @@ -186,7 +187,6 @@ isis_csm_state_change(int event, struct isis_circuit *circuit, void *arg) isis_event_circuit_state_change( circuit, (struct isis_area *)arg, 0); listnode_add(isis->init_circ_list, circuit); - circuit->isis = isis; break; case IF_DOWN_FROM_Z: isis_circuit_down(circuit); -- 2.39.5