]> git.puffer.fish Git - matthieu/frr.git/commitdiff
isisd: check for circuit existence on interface addr change
authorIgor Ryzhov <iryzhov@nfware.com>
Thu, 8 Oct 2020 17:05:08 +0000 (20:05 +0300)
committerIgor Ryzhov <iryzhov@nfware.com>
Sat, 10 Oct 2020 09:53:40 +0000 (12:53 +0300)
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
isisd/isis_zebra.c

index a50eb607d9fbeb46448281d3d4ea77569e2a388c..882e54418245f346e174eb1d1df9ae9d1ffd460c 100644 (file)
@@ -84,6 +84,7 @@ static int isis_router_id_update_zebra(ZAPI_CALLBACK_ARGS)
 
 static int isis_zebra_if_address_add(ZAPI_CALLBACK_ARGS)
 {
+       struct isis_circuit *circuit;
        struct connected *c;
        struct prefix *p;
        char buf[PREFIX2STR_BUFFER];
@@ -103,16 +104,20 @@ static int isis_zebra_if_address_add(ZAPI_CALLBACK_ARGS)
        if (p->family == AF_INET6)
                zlog_debug("connected IPv6 address %s", buf);
 #endif /* EXTREME_DEBUG */
-       if (if_is_operative(c->ifp))
-               isis_circuit_add_addr(circuit_scan_by_ifp(c->ifp), c);
+
+       if (if_is_operative(c->ifp)) {
+               circuit = circuit_scan_by_ifp(c->ifp);
+               if (circuit)
+                       isis_circuit_add_addr(circuit, c);
+       }
 
        return 0;
 }
 
 static int isis_zebra_if_address_del(ZAPI_CALLBACK_ARGS)
 {
+       struct isis_circuit *circuit;
        struct connected *c;
-       struct interface *ifp;
 #ifdef EXTREME_DEBUG
        struct prefix *p;
        char buf[PREFIX2STR_BUFFER];
@@ -124,8 +129,6 @@ static int isis_zebra_if_address_del(ZAPI_CALLBACK_ARGS)
        if (c == NULL)
                return 0;
 
-       ifp = c->ifp;
-
 #ifdef EXTREME_DEBUG
        p = c->address;
        prefix2str(p, buf, sizeof(buf));
@@ -136,8 +139,12 @@ static int isis_zebra_if_address_del(ZAPI_CALLBACK_ARGS)
                zlog_debug("disconnected IPv6 address %s", buf);
 #endif /* EXTREME_DEBUG */
 
-       if (if_is_operative(ifp))
-               isis_circuit_del_addr(circuit_scan_by_ifp(ifp), c);
+       if (if_is_operative(c->ifp)) {
+               circuit = circuit_scan_by_ifp(c->ifp);
+               if (circuit)
+                       isis_circuit_del_addr(circuit, c);
+       }
+
        connected_free(&c);
 
        return 0;