]> git.puffer.fish Git - matthieu/frr.git/commitdiff
Revert "bgpd: optimize bgp_interface_address_del"
authorDonatas Abraitis <donatas@opensourcerouting.org>
Wed, 14 Aug 2024 17:15:22 +0000 (20:15 +0300)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Wed, 14 Aug 2024 17:15:22 +0000 (20:15 +0300)
This reverts commit fc1dd2e5060b6e470daa203080bdb9473a637407.

bgpd/bgp_zebra.c

index d4a0209ea2f0edc1744ba0892ca70b247fa4ea49..c3b93adc2688f0b66a7428526f1fda4e90057e9f 100644 (file)
@@ -389,8 +389,6 @@ static int bgp_interface_address_delete(ZAPI_CALLBACK_ARGS)
        struct peer *peer;
        struct bgp *bgp;
        struct prefix *addr;
-       afi_t afi;
-       safi_t safi;
 
        bgp = bgp_lookup_by_vrf_id(vrf_id);
 
@@ -409,8 +407,7 @@ static int bgp_interface_address_delete(ZAPI_CALLBACK_ARGS)
 
        addr = ifc->address;
 
-       if (bgp && addr->family == AF_INET6 &&
-           !IN6_IS_ADDR_LINKLOCAL(&addr->u.prefix)) {
+       if (bgp) {
                /*
                 * When we are using the v6 global as part of the peering
                 * nexthops and we are removing it, then we need to
@@ -419,10 +416,17 @@ static int bgp_interface_address_delete(ZAPI_CALLBACK_ARGS)
                 * we do not want the peering to bounce.
                 */
                for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
-                       if (IPV6_ADDR_SAME(&peer->nexthop.v6_global,
-                                          &addr->u.prefix6)) {
-                               memset(&peer->nexthop.v6_global, 0,
-                                      IPV6_MAX_BYTELEN);
+                       afi_t afi;
+                       safi_t safi;
+
+                       if (addr->family == AF_INET)
+                               continue;
+
+                       if (!IN6_IS_ADDR_LINKLOCAL(&addr->u.prefix6)
+                           && memcmp(&peer->nexthop.v6_global,
+                                     &addr->u.prefix6, 16)
+                                      == 0) {
+                               memset(&peer->nexthop.v6_global, 0, 16);
                                FOREACH_AFI_SAFI (afi, safi)
                                        bgp_announce_route(peer, afi, safi,
                                                           true);