public icon indicating copy to clipboard operation
public copied to clipboard

Add BGP cumulative link-bandwidth

Open dplore opened this issue 8 months ago • 7 comments

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

dplore avatar Jun 14 '24 01:06 dplore