]> git.proxmox.com Git - mirror_frr.git/commitdiff
isisd: Always set `circuit->isis` on creation
authorDonald Sharp <sharpd@nvidia.com>
Fri, 9 Oct 2020 12:10:20 +0000 (08:10 -0400)
committerDonald Sharp <sharpd@nvidia.com>
Fri, 9 Oct 2020 12:14:00 +0000 (08:14 -0400)
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 <sharpd@nvidia.com>
isisd/isis_circuit.c
isisd/isis_circuit.h
isisd/isis_csm.c

index d6988095e536c5f032683b59aa819e08de209b3b..4883e012a2dc3ef26ed1aba347438e926b1b11e2 100644 (file)
@@ -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
         */
index ec5d738ce67cb3ce01b9cb12ffdb7983448cc936..48afd24b6d8216412bfa30e07d2a144610e46e43 100644 (file)
@@ -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);
index f5ad0aff4818b03903fdb147782021c1ea76dc34..736d8d63f93c34efc0b58662740fb91d245bcffe 100644 (file)
@@ -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);