Merge pull request #14109 from taspelund/noreset_update_src

bgpd: skip reset when removing dup update-source
This commit is contained in:
Donatas Abraitis 2023-07-31 10:03:28 +03:00 committed by GitHub
commit 1aa34e5fb7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -5393,16 +5393,29 @@ void peer_update_source_unset(struct peer *peer)
{ {
struct peer *member; struct peer *member;
struct listnode *node, *nnode; struct listnode *node, *nnode;
bool src_unchanged = false;
if (!CHECK_FLAG(peer->flags, PEER_FLAG_UPDATE_SOURCE)) if (!CHECK_FLAG(peer->flags, PEER_FLAG_UPDATE_SOURCE))
return; return;
/* Inherit configuration from peer-group if peer is member. */ /* Inherit configuration from peer-group if peer is member. */
if (peer_group_active(peer)) { if (peer_group_active(peer)) {
/* Don't reset peer if the update_source we'll inherit from
* the peer-group matches the peer's existing update_source
*/
src_unchanged =
(peer->update_source &&
peer->group->conf->update_source &&
sockunion_cmp(peer->update_source,
peer->group->conf->update_source) == 0);
peer_flag_inherit(peer, PEER_FLAG_UPDATE_SOURCE); peer_flag_inherit(peer, PEER_FLAG_UPDATE_SOURCE);
PEER_SU_ATTR_INHERIT(peer, peer->group, update_source); PEER_SU_ATTR_INHERIT(peer, peer->group, update_source);
PEER_STR_ATTR_INHERIT(peer, peer->group, update_if, PEER_STR_ATTR_INHERIT(peer, peer->group, update_if,
MTYPE_PEER_UPDATE_SOURCE); MTYPE_PEER_UPDATE_SOURCE);
if (src_unchanged)
return;
} else { } else {
/* Otherwise remove flag and configuration from peer. */ /* Otherwise remove flag and configuration from peer. */
peer_flag_unset(peer, PEER_FLAG_UPDATE_SOURCE); peer_flag_unset(peer, PEER_FLAG_UPDATE_SOURCE);