Commit da6a4c01d0 for frr
commit da6a4c01d05432d009e180f61d62959c6018ac88
Author: Enke Chen <enchen@paloaltonetworks.com>
Date: Thu Nov 12 12:54:02 2026 -0800
bgpd: separate update-groups by extended link-bandwidth encoding
Peers that differ in PEER_FLAG_EXTENDED_LINK_BANDWIDTH use different
link-bandwidth community entry sizes: 20 bytes for the extended form
vs 8 bytes for the regular form. The in-place stream rewriting in
bpacket_reformat_for_peer() requires a consistent entry size across
all peers in a subgroup, so peers with different values of this flag
must land in separate update-groups.
PEER_FLAG_DISABLE_LINK_BW_ENCODING_IEEE, which only changes the
encoding of the 4-byte bandwidth value within the 8-byte regular
form, does not require update-group separation: bpacket_reformat_
for_peer() reads that flag per-peer and encodes the value correctly.
Add PEER_FLAG_EXTENDED_LINK_BANDWIDTH to PEER_UPDGRP_FLAGS and
change its session action to peer_change_reset so that a live flag
change triggers a session reset, ensuring the peer rejoins the
correct update-group under the new flag value.
Signed-off-by: Enke Chen <enchen@paloaltonetworks.com>
diff --git a/bgpd/bgp_updgrp.h b/bgpd/bgp_updgrp.h
index 9779a34924..3b27d1a3fc 100644
--- a/bgpd/bgp_updgrp.h
+++ b/bgpd/bgp_updgrp.h
@@ -38,7 +38,8 @@
#define PEER_UPDGRP_FLAGS \
(PEER_FLAG_LOCAL_AS_NO_PREPEND | PEER_FLAG_LOCAL_AS_REPLACE_AS | \
- PEER_FLAG_AS_LOOP_DETECTION | PEER_FLAG_SEND_NHC_ATTRIBUTE | PEER_FLAG_AIGP)
+ PEER_FLAG_AS_LOOP_DETECTION | PEER_FLAG_SEND_NHC_ATTRIBUTE | PEER_FLAG_AIGP | \
+ PEER_FLAG_EXTENDED_LINK_BANDWIDTH)
#define PEER_UPDGRP_AF_FLAGS \
(PEER_FLAG_SEND_COMMUNITY | PEER_FLAG_SEND_EXT_COMMUNITY | \
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
index 7445a5c420..f3a39f234a 100644
--- a/bgpd/bgpd.c
+++ b/bgpd/bgpd.c
@@ -5674,7 +5674,7 @@ static const struct peer_flag_action peer_flag_action_list[] = {
{ PEER_FLAG_CAPABILITY_SOFT_VERSION_NEW, 0, peer_change_none },
{ PEER_FLAG_CAPABILITY_FQDN, 0, peer_change_none },
{ PEER_FLAG_AS_LOOP_DETECTION, 0, peer_change_reset },
- { PEER_FLAG_EXTENDED_LINK_BANDWIDTH, 0, peer_change_none },
+ { PEER_FLAG_EXTENDED_LINK_BANDWIDTH, 0, peer_change_reset },
{ PEER_FLAG_LONESOUL, 0, peer_change_reset_out },
{ PEER_FLAG_TCP_MSS, 0, peer_change_none },
{ PEER_FLAG_CAPABILITY_LINK_LOCAL, 0, peer_change_none },