Configure BGP Unnumbered¶
Overview¶
BGP Unnumbered simplifies BGP peering by using IPv6 link-local addresses (LLAs) instead of assigned IP addresses. This is useful in large data center fabrics where interface-based BGP sessions reduce configuration overhead.
Before you begin¶
IPv6 is enabled on the interface you plan to use for BGP peering.
The BGP Unnumbered peering interface does not have any IP addresses assigned. The controller identifies VLANs without self IPs as BGP Unnumbered interfaces.
The
GlobalRoutingConfigresource exists and shows a successful status.
Procedure¶
Enable BGP Unnumbered in the controller. See
enable-unnumbered-vlan-with-floorenable-unnumbered-vlan-with-helmfor instructions.Create a VLAN without self IPs. Create a VLAN CR without any self IP addresses.
Example
apiVersion: "k8s.f5net.com/v1" kind: F5SPKVlan metadata: name: "f5-vlan-tmm-spine1" spec: name: tmm-spine1 interfaces: - "1.3" tag: 2222 auto_lasthop: "AUTO_LASTHOP_ENABLED"
Create a routing template for BGP Unnumbered. Include the unnumbered configuration blocks in your
RoutingTemplate. Use theinterfacefield instead ofipto identify neighbors:apiVersion: k8s.f5net.com/v1alpha1 kind: RoutingTemplate metadata: name: demo-temp spec: body: | router bgp {{ .global.spec.bgp.startASN }} {{- range $nbr := .global.spec.bgp.neighbors }} {{- $peerId := (or $nbr.ip $nbr.interface) }} neighbor {{ $peerId }} remote-as {{ $nbr.remoteAs }} {{- range $fam := $nbr.families }} {{- if eq $fam "unnumbered-v4" }} bgp unnumbered-mode neighbor {{ $peerId }} remote-as external exit-unnumbered-mode address-family ipv4 unicast bgp v4-unnumbered-mode neighbor {{ $peerId }} activate exit-v4-unnumbered-mode exit-address-family {{- end }} {{- end }} {{- end }} exit
Create a
GlobalRoutingConfigwith an interface-based neighbor. Use the interface field instead of ip for the BGP Unnumbered neighbor.apiVersion: k8s.f5net.com/v1alpha1 kind: GlobalRoutingConfig metadata: name: global-config spec: templateRef: name: demo-temp bgp: startASN: 65001 neighbors: - interface: tmm-spine1 remoteAs: 65000 families: ["unnumbered-v4"]
Verify BGP session establishment.
Example 1
$ kubectl exec -it ds/f5-tmm -c f5-tmm-routing -- cmlsh -e "show bgp summary"
Output
BGP router identifier 22.22.22.1, local AS number 2202 BGP table version is 26 4 BGP AS-PATH entries 0 BGP community entries Neighbor V AS MsgRcv MsgSen TblVer InQ OutQ Up/Down State/PfxRcd Desc tmm-spine1(fe80::c4ad:6ff:fefa:5d36) 4 65000 517 579 26 0 0 01:30:16 4 tmm-spine2(fe80::84c6:c2ff:fe62:37be) 4 65000 42 35 26 0 0 00:03:56 6 Total number of neighbors 2 Total number of Established sessions 2
Example 2
$ kubectl exec -it ds/f5-tmm -c f5-tmm-routing -- cmlsh -e "show ip bgp"
Output
BGP table version is 26, local router ID is 22.22.22.1 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, l - labeled, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Description : Ext-Color - Extended community color Network Next Hop Metric LocPrf Weight Path Ext-Color *> 1.1.1.0/24 fe80::84c6:c2ff:fe62:37be 0 100 0 65000 2203 i * fe80::c4ad:6ff:fefa:5d36 0 100 0 65000 2203 i *> 2.2.2.0/24 fe80::84c6:c2ff:fe62:37be 0 100 0 65000 2203 i * fe80::c4ad:6ff:fefa:5d36 0 100 0 65000 2203 i *> 3.3.3.0/24 fe80::84c6:c2ff:fe62:37be 0 100 0 65000 2204 i *> 4.4.4.0/24 fe80::84c6:c2ff:fe62:37be 0 100 0 65000 2204 i *> 5.5.5.0/24 fe80::84c6:c2ff:fe62:37be 0 100 0 65000 2205 i * fe80::c4ad:6ff:fefa:5d36 0 100 0 65000 2205 i *> 6.6.6.0/24 fe80::84c6:c2ff:fe62:37be 0 100 0 65000 2205 i * fe80::c4ad:6ff:fefa:5d36 0 100 0 65000 2205 i *> 44.44.44.1/32 0.0.0.0 0 100 32768 ? *> 44.44.44.4/32 0.0.0.0 0 100 32768 ? *> 44.44.44.10/32 0.0.0.0 0 100 32768 ? *> 44.44.44.40/32 0.0.0.0 0 100 32768 ? Total number of prefixes 10
Enable unnumbered VLAN with FLO¶
Open the CNEInstance configuration file.
Add the
ENABLE_UNNUMBERED_VLANenvironment variable underspec.advanced.cneController.env:spec: advanced: cneController: env: - name: ENABLE_UNNUMBERED_VLAN value: "true"
Save the file and apply the updated configuration.
Enable unnumbered VLAN with Helm¶
Open the
values.yamlfile for your Helm deployment.Set
unnumberedBgpEnabledto true andplatformTypeto “other” under the global section:global: platformType: "other" unnumberedBgpEnabled: true
3.Apply the updated values by upgrading the Helm release:
shell helm upgrade <release-name> <chart> -f values.yaml
How BGP Unnumbered works¶
The controller identifies VLANs without self IPs as BGP Unnumbered interfaces.
TMM sends periodic Router Advertisements (RAs) on these interfaces (minimum interval: 10 seconds, maximum: 60 seconds).
Remote peers respond with their own RAs. TMM receives the link-local address and forwards it to tmrouted.
Tmrouted forwards the neighbor information to OcNOS.
OcNOS establishes the BGP session using IPv6 link-local addresses.
Limitations¶
BGP Unnumbered works only on point-to-point links. It does not support multi-access networks or multiple TMM deployments on the same link.
Only IPv4 routes can be advertised over a BGP Unnumbered session. OcNOS does not support activating unnumbered neighbors under the IPv6 address family.
The RA interval is not user-configurable.
If you add self IPs to a VLAN that was previously used for BGP Unnumbered, the RA configuration is not automatically removed. You must clean it up manually.