From 99d2c956659aee63b497f3f6bbc6a1147e329c8a Mon Sep 17 00:00:00 2001 From: Igor Ryzhov Date: Tue, 4 May 2021 21:58:23 +0300 Subject: [PATCH] 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 --- isisd/isis_zebra.c | 12 ++++++++++++ isisd/isis_zebra.h | 1 + isisd/isisd.c | 11 ++++------- 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". */ -- 2.39.5