diff options
Diffstat (limited to 'isisd/isis_zebra.c')
| -rw-r--r-- | isisd/isis_zebra.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/isisd/isis_zebra.c b/isisd/isis_zebra.c index 4bd42ead86..0142e30b2b 100644 --- a/isisd/isis_zebra.c +++ b/isisd/isis_zebra.c @@ -523,24 +523,24 @@ int isis_distribute_list_update(int routetype) return 0; } -void isis_zebra_redistribute_set(afi_t afi, int type) +void isis_zebra_redistribute_set(afi_t afi, int type, vrf_id_t vrf_id) { if (type == DEFAULT_ROUTE) zclient_redistribute_default(ZEBRA_REDISTRIBUTE_DEFAULT_ADD, - zclient, afi, VRF_DEFAULT); + zclient, afi, vrf_id); else zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, afi, type, - 0, VRF_DEFAULT); + 0, vrf_id); } -void isis_zebra_redistribute_unset(afi_t afi, int type) +void isis_zebra_redistribute_unset(afi_t afi, int type, vrf_id_t vrf_id) { if (type == DEFAULT_ROUTE) zclient_redistribute_default(ZEBRA_REDISTRIBUTE_DEFAULT_DELETE, - zclient, afi, VRF_DEFAULT); + zclient, afi, vrf_id); else zclient_redistribute(ZEBRA_REDISTRIBUTE_DELETE, zclient, afi, - type, 0, VRF_DEFAULT); + type, 0, vrf_id); } /** @@ -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) { |
