]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: Force BGP updates when triggering reset out 7838/head
authorDonatas Abraitis <donatas.abraitis@gmail.com>
Fri, 8 Jan 2021 15:03:39 +0000 (17:03 +0200)
committerDonatas Abraitis <donatas.abraitis@gmail.com>
Fri, 8 Jan 2021 16:04:18 +0000 (18:04 +0200)
When adding/removing some peer's flag we need to make sure we FORCE updates
to avoid suppressing critical updates.

Like entering `no neighbor x.x.x.x send-community large` would suppress
updates by default and another side will have stale large communities.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
bgpd/bgpd.c

index b6afa391f34528e8d6ecf0b60d9aba71e2cb4c32..2149b14585d20d07c2edcebb3c87b5fcd14c75ab 100644 (file)
@@ -3990,6 +3990,8 @@ bool peer_active_nego(struct peer *peer)
 void peer_change_action(struct peer *peer, afi_t afi, safi_t safi,
                               enum peer_change_type type)
 {
+       struct peer_af *paf;
+
        if (CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP))
                return;
 
@@ -4022,7 +4024,12 @@ void peer_change_action(struct peer *peer, afi_t afi, safi_t safi,
                                        BGP_NOTIFY_CEASE_CONFIG_CHANGE);
                }
        } else if (type == peer_change_reset_out) {
-               update_group_adjust_peer(peer_af_find(peer, afi, safi));
+               paf = peer_af_find(peer, afi, safi);
+               if (paf && paf->subgroup)
+                       SET_FLAG(paf->subgroup->sflags,
+                                SUBGRP_STATUS_FORCE_UPDATES);
+
+               update_group_adjust_peer(paf);
                bgp_announce_route(peer, afi, safi);
        }
 }