summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Ryzhov <iryzhov@nfware.com>2021-05-04 21:58:23 +0300
committerIgor Ryzhov <iryzhov@nfware.com>2021-05-14 17:12:33 +0300
commit164ab8965e442d42710da6a94c537452ce0d51a0 (patch)
tree18d5ba4b4a3959311a7bc280b400230c6938aee2
parenta63273a5b48bcae375af39928bafafadc6a31e0c (diff)
isisd: deregister vrf from zebra when vrf is disabled
Currently the VRF is deregistered only when it is re-enabled again. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
-rw-r--r--isisd/isis_zebra.c12
-rw-r--r--isisd/isis_zebra.h1
-rw-r--r--isisd/isisd.c11
3 files changed, 17 insertions, 7 deletions
diff --git a/isisd/isis_zebra.c b/isisd/isis_zebra.c
index 4bd42ead86..9c80f4e836 100644
--- a/isisd/isis_zebra.c
+++ b/isisd/isis_zebra.c
@@ -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)
{
diff --git a/isisd/isis_zebra.h b/isisd/isis_zebra.h
index b44ec4f085..006f020757 100644
--- a/isisd/isis_zebra.h
+++ b/isisd/isis_zebra.h
@@ -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 */
diff --git a/isisd/isisd.c b/isisd/isisd.c
index cb3734bd41..4f27690197 100644
--- a/isisd/isisd.c
+++ b/isisd/isisd.c
@@ -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".
*/