]> git.puffer.fish Git - mirror/frr.git/commitdiff
isisd: deregister vrf from zebra when vrf is disabled
authorIgor Ryzhov <iryzhov@nfware.com>
Tue, 4 May 2021 18:58:23 +0000 (21:58 +0300)
committerIgor Ryzhov <iryzhov@nfware.com>
Fri, 14 May 2021 14:12:33 +0000 (17:12 +0300)
Currently the VRF is deregistered only when it is re-enabled again.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
isisd/isis_zebra.c
isisd/isis_zebra.h
isisd/isisd.c

index 4bd42ead86d15de95c0e0af1f69bf284b5b388dc..9c80f4e836038f6dcf270851a00e224fb6749b11 100644 (file)
@@ -724,6 +724,18 @@ void isis_zebra_vrf_register(struct isis *isis)
        }
 }
 
+void isis_zebra_vrf_deregister(struct isis *isis)
+{
+       if (!zclient || zclient->sock < 0 || !isis)
+               return;
+
+       if (isis->vrf_id != VRF_UNKNOWN) {
+               if (IS_DEBUG_EVENTS)
+                       zlog_debug("%s: Deregister VRF %s id %u", __func__,
+                                  isis->name, isis->vrf_id);
+               zclient_send_dereg_requests(zclient, isis->vrf_id);
+       }
+}
 
 static void isis_zebra_connected(struct zclient *zclient)
 {
index b44ec4f085484708d00ff670c29ee507237efd9a..006f020757bfc3542aff8a5ee0757b2afec50afb 100644 (file)
@@ -66,5 +66,6 @@ int isis_zebra_label_manager_connect(void);
 int isis_zebra_request_label_range(uint32_t base, uint32_t chunk_size);
 int isis_zebra_release_label_range(uint32_t start, uint32_t end);
 void isis_zebra_vrf_register(struct isis *isis);
+void isis_zebra_vrf_deregister(struct isis *isis);
 
 #endif /* _ZEBRA_ISIS_ZEBRA_H */
index cb3734bd41bed05e1f3a29f5d0b967d9cc1851bc..4f276901975cbbe50fd8393f00ea809e28f78cbe 100644 (file)
@@ -614,13 +614,8 @@ static int isis_vrf_enable(struct vrf *vrf)
                                "%s: isis linked to vrf %s vrf_id %u (old id %u)",
                                __func__, vrf->name, isis->vrf_id, old_vrf_id);
                if (old_vrf_id != isis->vrf_id) {
-                       frr_with_privs (&isisd_privs) {
-                               /* stop zebra redist to us for old vrf */
-                               zclient_send_dereg_requests(zclient,
-                                                           old_vrf_id);
-                               /* start zebra redist to us for new vrf */
-                               isis_zebra_vrf_register(isis);
-                       }
+                       /* start zebra redist to us for new vrf */
+                       isis_zebra_vrf_register(isis);
                }
        }
 
@@ -642,6 +637,8 @@ static int isis_vrf_disable(struct vrf *vrf)
        if (isis) {
                old_vrf_id = isis->vrf_id;
 
+               isis_zebra_vrf_deregister(isis);
+
                /* We have instance configured, unlink
                 * from VRF and make it "down".
                 */