summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@nvidia.com>2021-10-24 15:02:11 -0400
committerDonald Sharp <sharpd@nvidia.com>2021-10-24 15:09:30 -0400
commit6e26b2e21f1f742bd0b4f40b4535c75b03b49a89 (patch)
tree3d056262300ad99ba16d7c653c5b5473c98dfa03
parentcbdf0306139d64f3967e8f8ba321a39f32281b56 (diff)
bgpd: When issuing `no ... ebgp-multihop` always resets
When removing the command `no neighbor <X> ebgp-multihop <Y>` the bgp code was always resetting the connection even if the command would do nothing. Fixes: #6464 Signed-off-by: Donald Sharp <sharpd@nvidia.com>
-rw-r--r--bgpd/bgpd.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
index b191029d2f..c5a5e49a48 100644
--- a/bgpd/bgpd.c
+++ b/bgpd/bgpd.c
@@ -4775,6 +4775,7 @@ int peer_ebgp_multihop_unset(struct peer *peer)
{
struct peer_group *group;
struct listnode *node, *nnode;
+ int ttl;
if (peer->sort == BGP_PEER_IBGP)
return 0;
@@ -4783,9 +4784,14 @@ int peer_ebgp_multihop_unset(struct peer *peer)
return BGP_ERR_NO_EBGP_MULTIHOP_WITH_TTLHACK;
if (peer_group_active(peer))
- peer->ttl = peer->group->conf->ttl;
+ ttl = peer->group->conf->ttl;
else
- peer->ttl = BGP_DEFAULT_TTL;
+ ttl = BGP_DEFAULT_TTL;
+
+ if (ttl == peer->ttl)
+ return 0;
+
+ peer->ttl = ttl;
if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP)) {
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->status))