summaryrefslogtreecommitdiffstats
path: root/bgpd/bgp_zebra.c
diff options
context:
space:
mode:
authoranlan_cs <vic.lan@pica8.com>2022-03-04 14:52:27 +0100
committeranlan_cs <anlan_cs@tom.com>2023-10-07 04:06:39 +0200
commitb580c52698287c24e41b6c5b190c2ddddc336f4c (patch)
tree34f270ed0e4bc62a5ae7724f3dd07d3b91bec608 /bgpd/bgp_zebra.c
parentMerge pull request #13814 from pguibert6WIND/comm_list_expanded_match_no_exact (diff)
downloadfrr-b580c52698287c24e41b6c5b190c2ddddc336f4c.tar.xz
frr-b580c52698287c24e41b6c5b190c2ddddc336f4c.zip
*: remove ZEBRA_INTERFACE_VRF_UPDATE
Currently when one interface changes its VRF, zebra will send these messages to all daemons in *order*: 1) `ZEBRA_INTERFACE_DELETE` ( notify them delete from old VRF ) 2) `ZEBRA_INTERFACE_VRF_UPDATE` ( notify them move from old to new VRF ) 3) `ZEBRA_INTERFACE_ADD` ( notify them added into new VRF ) When daemons deal with `VRF_UPDATE`, they use `zebra_interface_vrf_update_read()->if_lookup_by_name()` to check the interface exist or not in old VRF. This check will always return *NULL* because `DELETE` ( deleted from old VRF ) is already done, so can't find this interface in old VRF. Send `VRF_UPDATE` is redundant and unuseful. `DELETE` and `ADD` are enough, they will deal with RB tree, so don't send this `VRF_UPDATE` message when vrf changes. Since all daemons have good mechanism to deal with changing vrf, and don't use this `VRF_UPDATE` mechanism. So, it is safe to completely remove all the code with `VRF_UPDATE`. Signed-off-by: anlan_cs <anlan_cs@tom.com>
Diffstat (limited to 'bgpd/bgp_zebra.c')
-rw-r--r--bgpd/bgp_zebra.c61
1 files changed, 0 insertions, 61 deletions
diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c
index 741542f9b..a04d54fa9 100644
--- a/bgpd/bgp_zebra.c
+++ b/bgpd/bgp_zebra.c
@@ -477,66 +477,6 @@ static int bgp_interface_nbr_address_delete(ZAPI_CALLBACK_ARGS)
return 0;
}
-/* VRF update for an interface. */
-static int bgp_interface_vrf_update(ZAPI_CALLBACK_ARGS)
-{
- struct interface *ifp;
- vrf_id_t new_vrf_id;
- struct connected *c;
- struct nbr_connected *nc;
- struct listnode *node, *nnode;
- struct bgp *bgp;
- struct peer *peer;
-
- ifp = zebra_interface_vrf_update_read(zclient->ibuf, vrf_id,
- &new_vrf_id);
- if (!ifp)
- return 0;
-
- if (BGP_DEBUG(zebra, ZEBRA))
- zlog_debug("Rx Intf VRF change VRF %u IF %s NewVRF %u", vrf_id,
- ifp->name, new_vrf_id);
-
- bgp = bgp_lookup_by_vrf_id(vrf_id);
-
- if (bgp) {
- for (ALL_LIST_ELEMENTS(ifp->connected, node, nnode, c))
- bgp_connected_delete(bgp, c);
-
- for (ALL_LIST_ELEMENTS(ifp->nbr_connected, node, nnode, nc))
- bgp_nbr_connected_delete(bgp, nc, 1);
-
- /* Fast external-failover */
- if (!CHECK_FLAG(bgp->flags, BGP_FLAG_NO_FAST_EXT_FAILOVER)) {
- for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
- if ((peer->ttl != BGP_DEFAULT_TTL)
- && (peer->gtsm_hops
- != BGP_GTSM_HOPS_CONNECTED))
- continue;
-
- if (ifp == peer->nexthop.ifp)
- BGP_EVENT_ADD(peer->connection,
- BGP_Stop);
- }
- }
- }
-
- if_update_to_new_vrf(ifp, new_vrf_id);
-
- bgp = bgp_lookup_by_vrf_id(new_vrf_id);
- if (!bgp)
- return 0;
-
- for (ALL_LIST_ELEMENTS(ifp->connected, node, nnode, c))
- bgp_connected_add(bgp, c);
-
- for (ALL_LIST_ELEMENTS(ifp->nbr_connected, node, nnode, nc))
- bgp_nbr_connected_add(bgp, nc);
-
- hook_call(bgp_vrf_status_changed, bgp, ifp);
- return 0;
-}
-
/* Zebra route add and delete treatment. */
static int zebra_read_route(ZAPI_CALLBACK_ARGS)
{
@@ -3401,7 +3341,6 @@ static zclient_handler *const bgp_handlers[] = {
[ZEBRA_INTERFACE_ADDRESS_DELETE] = bgp_interface_address_delete,
[ZEBRA_INTERFACE_NBR_ADDRESS_ADD] = bgp_interface_nbr_address_add,
[ZEBRA_INTERFACE_NBR_ADDRESS_DELETE] = bgp_interface_nbr_address_delete,
- [ZEBRA_INTERFACE_VRF_UPDATE] = bgp_interface_vrf_update,
[ZEBRA_REDISTRIBUTE_ROUTE_ADD] = zebra_read_route,
[ZEBRA_REDISTRIBUTE_ROUTE_DEL] = zebra_read_route,
[ZEBRA_NEXTHOP_UPDATE] = bgp_read_nexthop_update,