]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: Fix default-originate clearing from peer-groups.
authorzyxwvu Shi <shiyuchen.syc@bytedance.com>
Tue, 5 Jan 2021 06:15:07 +0000 (06:15 +0000)
committerIgor Ryzhov <iryzhov@nfware.com>
Wed, 20 Jan 2021 15:55:47 +0000 (18:55 +0300)
Fix `peer_default_originate_unset` so default route can be withdrawn
when `default-originate` option is being unset from a peer-group.

The loop calling `bgp_default_originate` is clearing default-originate
from the peer-group peer `peer` instead of the peer-group member peer
`member`.

Signed-off-by: zyxwvu Shi <shiyuchen.syc@bytedance.com>
bgpd/bgpd.c

index deab6e1bfbc077783c11465325c1885dedadd701..561878d01dc2e710329f8b580bdd1cd8b3deea03 100644 (file)
@@ -4883,20 +4883,20 @@ int peer_default_originate_unset(struct peer *peer, afi_t afi, safi_t safi)
                        continue;
 
                /* Remove flag and configuration on peer-group member. */
-               UNSET_FLAG(peer->af_flags[afi][safi],
+               UNSET_FLAG(member->af_flags[afi][safi],
                           PEER_FLAG_DEFAULT_ORIGINATE);
-               if (peer->default_rmap[afi][safi].name)
+               if (member->default_rmap[afi][safi].name)
                        XFREE(MTYPE_ROUTE_MAP_NAME,
-                             peer->default_rmap[afi][safi].name);
-               route_map_counter_decrement(peer->default_rmap[afi][safi].map);
-               peer->default_rmap[afi][safi].name = NULL;
-               peer->default_rmap[afi][safi].map = NULL;
+                             member->default_rmap[afi][safi].name);
+               route_map_counter_decrement(member->default_rmap[afi][safi].map);
+               member->default_rmap[afi][safi].name = NULL;
+               member->default_rmap[afi][safi].map = NULL;
 
                /* Update peer route announcements. */
-               if (peer->status == Established && peer->afc_nego[afi][safi]) {
-                       update_group_adjust_peer(peer_af_find(peer, afi, safi));
-                       bgp_default_originate(peer, afi, safi, 1);
-                       bgp_announce_route(peer, afi, safi);
+               if (member->status == Established && member->afc_nego[afi][safi]) {
+                       update_group_adjust_peer(peer_af_find(member, afi, safi));
+                       bgp_default_originate(member, afi, safi, 1);
+                       bgp_announce_route(member, afi, safi);
                }
        }