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 GlobalRoutingConfig resource exists and shows a successful status.

Procedure

  1. Enable BGP Unnumbered in the controller. See enable-unnumbered-vlan-with-flo or enable-unnumbered-vlan-with-helm for instructions.

  2. 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"
    
  3. Create a routing template for BGP Unnumbered. Include the unnumbered configuration blocks in your RoutingTemplate. Use the interface field instead of ip to 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
    
  4. Create a GlobalRoutingConfig with 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"]
    
  5. 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

  1. Open the CNEInstance configuration file.

  2. Add the ENABLE_UNNUMBERED_VLAN environment variable under spec.advanced.cneController.env:

    spec:
      advanced:
        cneController:
          env:
          - name: ENABLE_UNNUMBERED_VLAN
            value: "true"
    
  3. Save the file and apply the updated configuration.

Enable unnumbered VLAN with Helm

  1. Open the values.yaml file for your Helm deployment.

  2. Set unnumberedBgpEnabled to true and platformType to “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.