From 6486afe8d5c729e582d381eb15cfc695d6ad1d6e Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Sun, 21 Apr 2024 14:16:49 +0300 Subject: [PATCH 1/4] bgpd: Inherit `enforce-first-as` flag from the peer-group Signed-off-by: Donatas Abraitis --- bgpd/bgpd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index 5fd4ebe8cc..8495f28fb7 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -1539,7 +1539,7 @@ struct peer *peer_new(struct bgp *bgp) SET_FLAG(peer->sflags, PEER_STATUS_CAPABILITY_OPEN); if (CHECK_FLAG(bgp->flags, BGP_FLAG_ENFORCE_FIRST_AS)) - SET_FLAG(peer->flags, PEER_FLAG_ENFORCE_FIRST_AS); + peer_flag_set(peer, PEER_FLAG_ENFORCE_FIRST_AS); if (CHECK_FLAG(bgp->flags, BGP_FLAG_SOFT_VERSION_CAPABILITY)) SET_FLAG(peer->flags, PEER_FLAG_CAPABILITY_SOFT_VERSION); From 9c9f9ce3c11c16c9b43ed719137b3a2a57b7eee8 Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Sun, 21 Apr 2024 14:18:39 +0300 Subject: [PATCH 2/4] bgpd: Inherit `capability software-version` flag from the peer-group Signed-off-by: Donatas Abraitis --- bgpd/bgpd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index 8495f28fb7..06e59dfc87 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -1542,7 +1542,7 @@ struct peer *peer_new(struct bgp *bgp) peer_flag_set(peer, PEER_FLAG_ENFORCE_FIRST_AS); if (CHECK_FLAG(bgp->flags, BGP_FLAG_SOFT_VERSION_CAPABILITY)) - SET_FLAG(peer->flags, PEER_FLAG_CAPABILITY_SOFT_VERSION); + peer_flag_set(peer, PEER_FLAG_CAPABILITY_SOFT_VERSION); if (CHECK_FLAG(bgp->flags, BGP_FLAG_DYNAMIC_CAPABILITY)) SET_FLAG(peer->flags, PEER_FLAG_DYNAMIC_CAPABILITY); From 70631acbb82e5a53967a2e64476c379e4d21c7d1 Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Sun, 21 Apr 2024 14:19:12 +0300 Subject: [PATCH 3/4] bgpd: Inherit `capability dynamic` flag from the peer-group Signed-off-by: Donatas Abraitis --- bgpd/bgpd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index 06e59dfc87..0f97b76b5f 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -1545,7 +1545,7 @@ struct peer *peer_new(struct bgp *bgp) peer_flag_set(peer, PEER_FLAG_CAPABILITY_SOFT_VERSION); if (CHECK_FLAG(bgp->flags, BGP_FLAG_DYNAMIC_CAPABILITY)) - SET_FLAG(peer->flags, PEER_FLAG_DYNAMIC_CAPABILITY); + peer_flag_set(peer, PEER_FLAG_DYNAMIC_CAPABILITY); SET_FLAG(peer->flags_invert, PEER_FLAG_CAPABILITY_FQDN); SET_FLAG(peer->flags, PEER_FLAG_CAPABILITY_FQDN); From 83109e3f6662af0b153a650617260234ed2606ed Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Sun, 21 Apr 2024 22:29:32 +0300 Subject: [PATCH 4/4] bgpd: Do not reset the session when toggling dynamic capability Signed-off-by: Donatas Abraitis --- bgpd/bgpd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index 0f97b76b5f..95d949343c 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -4599,7 +4599,7 @@ static const struct peer_flag_action peer_flag_action_list[] = { {PEER_FLAG_DONT_CAPABILITY, 0, peer_change_none}, {PEER_FLAG_OVERRIDE_CAPABILITY, 0, peer_change_none}, {PEER_FLAG_STRICT_CAP_MATCH, 0, peer_change_none}, - {PEER_FLAG_DYNAMIC_CAPABILITY, 0, peer_change_reset}, + {PEER_FLAG_DYNAMIC_CAPABILITY, 0, peer_change_none}, {PEER_FLAG_DISABLE_CONNECTED_CHECK, 0, peer_change_reset}, {PEER_FLAG_CAPABILITY_ENHE, 0, peer_change_reset}, {PEER_FLAG_ENFORCE_FIRST_AS, 0, peer_change_reset_in},