public
public copied to clipboard
Add BGP cumulative link-bandwidth
Change Scope
-
Extend configuration of BGP global and peer-groups to permit cumulative link bandwidth and transitive behavior as per draft-ietf-bess-ebgp-dmz.
-
Also add link-bandwidth parameters to BGP neighbor configuration and state. (Previously these were only defined at the global and peer-group levels)
-
This change only adds leafs and is backwards compatible.
-
Example flattened paths:
Prefix: /network-instances/network-instance/protocols/protocol/bgp/
bgp/global/afi-safis/afi-safi/link-bw/config/send-cumulative=true
bgp/global/afi-safis/afi-safi/link-bw/config/non-transitive-ebgp=true
bgp/global/afi-safis/afi-safi/link-bw/config/divide=false
Platform Implementations
On Cisco IOS XR, there is no special configuration needed other than link-bandwidth-ext-community/config/enabled
. The OS implicitly sums up the link-bandwidth of ECMP bgp paths.
Arista EOS expects an 'aggregate' configuration option on top of enabling link-bandwidth to be added on a per neighbor basis. They further support 'divide' and 'equal' options.
JunOS expects configuration of a BGP policy statement to enable 'aggregate-bandwidth' and additional options for transitive/non-transitive and a 'divide-equal' option. There is also a configuration item, set per bgp neighbor or peer to allow link-bandwidth community to be sent via eBGP (ie: allow sending BGP link-bandwidth which was defined as non-transitive in draft-ietf-idr-link-bandwidth, but then updated by draft-ietf-bess-ebgp-dmz to be transitive.
Tree view
This common stanza of changes is added at each level of BGP configuration: bgp/global bgp/peer-group bgp/neighbor bgp/global/afi-safis bgp/peer-group/afi-safis bgp/neighbor/afi-safis
dloher$ diff -U 20 ~/master-tree.txt ~/bess-tree.txt
--- /Users/dloher/master-tree.txt 2024-08-16 18:03:37
+++ /Users/dloher/bess-tree.txt 2024-08-19 18:38:34
@@ -3733,40 +3733,49 @@
| | | | | +--rw link-bandwidth-ext-community
| | | | | | +--rw config
| | | | | | | +--rw enabled? boolean
| | | | | | +--ro state
| | | | | | +--ro enabled? boolean
| | | | | +--rw config
| | | | | | +--rw maximum-paths? uint32
| | | | | +--ro state
| | | | | +--ro maximum-paths? uint32
| | | | +--rw add-paths
| | | | | +--rw config
| | | | | | +--rw receive? boolean
| | | | | | +--rw send? boolean
| | | | | | +--rw send-max? uint8
| | | | | | +--rw eligible-prefix-policy? -> /oc-rpol:routing-policy/policy-definitions/policy-definition/name
| | | | | +--ro state
| | | | | +--ro receive? boolean
| | | | | +--ro send? boolean
| | | | | +--ro send-max? uint8
| | | | | +--ro eligible-prefix-policy? -> /oc-rpol:routing-policy/policy-definitions/policy-definition/name
+ | | | | +--rw link-bw
+ | | | | | +--rw config
+ | | | | | | +--rw send-cumulative? boolean
+ | | | | | | +--rw non-transitive-ebgp? boolean
+ | | | | | | +--rw divide? boolean
+ | | | | | +--ro state
+ | | | | | +--ro send-cumulative? boolean
+ | | | | | +--ro non-transitive-ebgp? boolean
+ | | | | | +--ro divide? boolean
| | | | +--rw ipv4-unicast
| | | | | +--rw prefix-limit
| | | | | | +--rw config
| | | | | | | +--rw max-prefixes? uint32
| | | | | | | +--rw prevent-teardown? boolean
| | | | | | | +--rw warning-threshold-pct? oc-types:percentage