Capability

Test BGP capability options for neighbor sessions. BGP capabilities are negotiated during session establishment to determine what features both peers support. The dynamic option enables renegotiation of capabilities without tearing down the BGP session, allowing new features or address families to be added on-the-fly. The orf prefix-list option enables Outbound Route Filtering, which allows a router to send its inbound prefix-list filters to a neighbor so the neighbor can apply them as outbound filters. This reduces bandwidth and processing overhead by filtering unwanted routes at the source instead of receiving and then discarding them. ORF requires one peer configured in send mode to push its import filter, and the other peer in receive mode to accept and apply it as an export filter.

Test iBGP - Capability dynamic negotiation

Description

Test BGP capability dynamic which enables dynamic capability negotiation. When enabled, both peers advertise the dynamic capability during session setup. This allows future capability changes without resetting the session. The test verifies that the capability is successfully negotiated between both peers.

Scenario

Step 1: Set the following configuration in DUT0 :

set interfaces ethernet eth0 address 10.10.0.100/24
set protocols bgp 20 neighbor peer capability dynamic
set protocols bgp 20 neighbor peer remote-address 10.10.0.200
set protocols bgp 20 neighbor peer remote-as 20
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Step 2: Set the following configuration in DUT1 :

set interfaces dummy dum0 address 1.1.1.1/24
set interfaces ethernet eth0 address 10.10.0.200/24
set protocols bgp 20 neighbor peer capability dynamic
set protocols bgp 20 neighbor peer remote-address 10.10.0.100
set protocols bgp 20 neighbor peer remote-as 20
set protocols bgp 20 redistribute connected
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Attention

Verify iBGP session establishes with dynamic capability.

Step 3: Run command protocols bgp show ip summary at DUT0 and check if output matches the following regular expressions:

10.10.0.200.*Established
Show output
IPv4 Unicast Summary:
BGP router identifier 10.10.0.100, local AS number 20 VRF default vrf-id 0
BGP table version 2
RIB entries 3, using 384 bytes of memory
Peers 1, using 24 KiB of memory

Neighbor        LocalAddr       V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down        State   PfxRcd   PfxSnt Desc
10.10.0.200     10.10.0.100     4         20         5         4        2    0    0 00:00:01  Established        2        0 FRRouting/10.4.1

Total number of neighbors 1

Attention

Verify dynamic capability is advertised and received by both peers.

Step 4: Run command protocols bgp show ip neighbors at DUT0 and check if output matches the following regular expressions:

Dynamic: advertised and received
Show output
BGP neighbor is 10.10.0.200, remote AS 20, local AS 20, internal link
  Local Role: undefined
  Remote Role: undefined
Hostname: osdx
  BGP version 4, remote router ID 10.10.0.200, local router ID 10.10.0.100
  BGP state = Established, up for 00:00:01
  Last read 00:00:00, Last write 00:00:00
  Hold time is 90 seconds, keepalive interval is 30 seconds
  Configured hold time is 90 seconds, keepalive interval is 30 seconds
  Configured tcp-mss is 0, synced tcp-mss is 1448
  Configured conditional advertisements interval is 60 seconds
  Neighbor capabilities:
    4 Byte AS: advertised and received
    AddPath:
      IPv4 Unicast: RX advertised and received
    Paths-Limit:
      IPv4 Unicast: advertised (0) and received (0)
    Dynamic: advertised and received
    Long-lived Graceful Restart: advertised and received
      Address families by peer:
    Route refresh: advertised and received
    Enhanced Route Refresh: advertised and received
    Address Family IPv4 Unicast: advertised and received
    Hostname Capability: advertised (name: osdx,domain name: n/a) received (name: osdx,domain name: n/a)
    Version Capability: advertised software version (FRRouting/10.4.1) received software version (FRRouting/10.4.1)
    Link-Local Next Hop Capability: not advertised not received
    Graceful Restart Capability: advertised and received
      Remote Restart timer is 120 seconds
      Address families by peer:
        none
  Graceful restart information:
    End-of-RIB send: IPv4 Unicast
    End-of-RIB received: IPv4 Unicast
    Local GR Mode: Helper*
    Remote GR Mode: Helper
    R bit: True
    N bit: True
    Timers:
      Configured Restart Time(sec): 120
      Received Restart Time(sec): 120
      Configured LLGR Stale Path Time(sec): 0
    IPv4 Unicast:
      F bit: False
      End-of-RIB sent: Yes
      End-of-RIB sent after update: Yes
      End-of-RIB received: Yes
      Timers:
        Configured Stale Path Time(sec): 360
        LLGR Stale Path Time(sec): 0
  Message statistics:
    Inq depth is 0
    Outq depth is 0
                         Sent       Rcvd
    Opens:                  2          1
    Notifications:          0          0
    Updates:                1          3
    Keepalives:             1          1
    Route Refresh:          0          0
    Capability:             0          0
    Total:                  4          5

  Prefix statistics:
    Inbound filtered: 0
    AS-PATH loop: 0
    Originator loop: 0
    Cluster loop: 0
    Invalid next-hop: 0
    Withdrawn: 0
    Attributes discarded: 0

  Minimum time between advertisement runs is 0 seconds

 For address family: IPv4 Unicast
  Update group 1, subgroup 1
  Packet Queue length 0
  Community attribute sent to this neighbor(all)
  2 accepted, 0 sent prefixes

  Connections established 1; dropped 0
  Last reset 00:00:03,  Waiting for peer OPEN (FRRouting/10.4.1)
  Internal BGP neighbor may be up to 255 hops away.
Local host: 10.10.0.100, Local port: 179
Foreign host: 10.10.0.200, Foreign port: 42710
Nexthop: 10.10.0.100
Nexthop global: fe80::dcad:beff:feef:6c00
Nexthop local: fe80::dcad:beff:feef:6c00
BGP connection: shared network
BGP Connect Retry Timer in Seconds: 30
Estimated round trip time: 0 ms
Read thread: on  Write thread: on  FD used: 25

Attention

Verify routes are exchanged normally with dynamic capability enabled.

Step 5: Run command protocols bgp show ip at DUT0 and check if output matches the following regular expressions:

1.1.1.0/24
Show output
BGP table version is 2, local router ID is 10.10.0.100, vrf id 0
Default local pref 100, local AS 20
local address -
Status codes:  s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *ui 1.1.1.0/24       10.10.0.200              0    100      0 ?
 *ui 10.10.0.0/24     10.10.0.200              0    100      0 ?

Displayed 2 routes and 2 total paths

Test iBGP - Without ORF receives all routes

Description

Baseline test without ORF to demonstrate default behavior. DUT1 advertises two networks (1.1.1.0/24 and 2.2.2.0/24) and DUT0 receives both of them. This serves as a comparison point for the ORF test that follows.

Scenario

Step 1: Set the following configuration in DUT0 :

set interfaces ethernet eth0 address 10.10.0.100/24
set protocols bgp 20 neighbor peer remote-address 10.10.0.200
set protocols bgp 20 neighbor peer remote-as 20
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Step 2: Set the following configuration in DUT1 :

set interfaces dummy dum0 address 1.1.1.1/24
set interfaces dummy dum1 address 2.2.2.1/24
set interfaces ethernet eth0 address 10.10.0.200/24
set protocols bgp 20 neighbor peer remote-address 10.10.0.100
set protocols bgp 20 neighbor peer remote-as 20
set protocols bgp 20 redistribute connected
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Attention

Verify iBGP session establishes.

Step 3: Run command protocols bgp show ip summary at DUT0 and check if output matches the following regular expressions:

10.10.0.200.*Established
Show output
IPv4 Unicast Summary:
BGP router identifier 10.10.0.100, local AS number 20 VRF default vrf-id 0
BGP table version 3
RIB entries 5, using 640 bytes of memory
Peers 1, using 24 KiB of memory

Neighbor        LocalAddr       V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down        State   PfxRcd   PfxSnt Desc
10.10.0.200     10.10.0.100     4         20         6         4        3    0    0 00:00:02  Established        3        0 FRRouting/10.4.1

Total number of neighbors 1

Attention

Verify DUT0 receives routes 1.1.1.0/24 and 2.2.2.0/24 from DUT1 (no filtering).

Step 4: Run command protocols bgp show ip at DUT0 and check if output matches the following regular expressions:

1.1.1.0/24[\s\S]*2.2.2.0/24
Show output
BGP table version is 3, local router ID is 10.10.0.100, vrf id 0
Default local pref 100, local AS 20
local address -
Status codes:  s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *ui 1.1.1.0/24       10.10.0.200              0    100      0 ?
 *ui 2.2.2.0/24       10.10.0.200              0    100      0 ?
 *ui 10.10.0.0/24     10.10.0.200              0    100      0 ?

Displayed 3 routes and 3 total paths

Test iBGP - Capability ORF prefix-list filters routes at source

Description

Test BGP capability orf prefix-list which enables Outbound Route Filtering. DUT0 is configured with ORF send mode and has a prefix-list that only permits 1.1.1.0/24. DUT0 sends this filter to DUT1 via ORF. DUT1 is configured with ORF receive mode, so it accepts the filter and applies it to its outbound updates. As a result, DUT1 only sends 1.1.1.0/24 to DUT0, even though it has both 1.1.1.0/24 and 2.2.2.0/24 in its routing table. This demonstrates how ORF reduces unnecessary route advertisements by filtering at the source.

Scenario

Step 1: Set the following configuration in DUT0 :

set interfaces ethernet eth0 address 10.10.0.100/24
set protocols bgp 20 neighbor peer capability orf prefix-list send
set protocols bgp 20 neighbor peer prefix-list import ALLOW-NET1
set protocols bgp 20 neighbor peer remote-address 10.10.0.200
set protocols bgp 20 neighbor peer remote-as 20
set protocols ip prefix-list ALLOW-NET1 rule 1 action permit
set protocols ip prefix-list ALLOW-NET1 rule 1 prefix 1.1.1.0/24
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Step 2: Set the following configuration in DUT1 :

set interfaces dummy dum0 address 1.1.1.1/24
set interfaces dummy dum1 address 2.2.2.1/24
set interfaces ethernet eth0 address 10.10.0.200/24
set protocols bgp 20 neighbor peer capability orf prefix-list receive
set protocols bgp 20 neighbor peer remote-address 10.10.0.100
set protocols bgp 20 neighbor peer remote-as 20
set protocols bgp 20 redistribute connected
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Attention

Verify iBGP session establishes with ORF capability.

Step 3: Run command protocols bgp show ip summary at DUT0 and check if output matches the following regular expressions:

10.10.0.200.*Established
Show output
IPv4 Unicast Summary:
BGP router identifier 10.10.0.100, local AS number 20 VRF default vrf-id 0
BGP table version 1
RIB entries 1, using 128 bytes of memory
Peers 1, using 24 KiB of memory

Neighbor        LocalAddr       V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down        State   PfxRcd   PfxSnt Desc
10.10.0.200     10.10.0.100     4         20         7         5        1    0    0 00:00:01  Established        1        0 FRRouting/10.4.1

Total number of neighbors 1

Attention

Verify ORF prefix-list capability is negotiated between peers.

Step 4: Run command protocols bgp show ip neighbors at DUT0 and check if output matches the following regular expressions:

Outbound Route Filter \(ORF\): sent
Show output
BGP neighbor is 10.10.0.200, remote AS 20, local AS 20, internal link
  Local Role: undefined
  Remote Role: undefined
Hostname: osdx
  BGP version 4, remote router ID 10.10.0.200, local router ID 10.10.0.100
  BGP state = Established, up for 00:00:02
  Last read 00:00:01, Last write 00:00:01
  Hold time is 90 seconds, keepalive interval is 30 seconds
  Configured hold time is 90 seconds, keepalive interval is 30 seconds
  Configured tcp-mss is 0, synced tcp-mss is 1448
  Configured conditional advertisements interval is 60 seconds
  Neighbor capabilities:
    4 Byte AS: advertised and received
    AddPath:
      IPv4 Unicast: RX advertised and received
    Paths-Limit:
      IPv4 Unicast: advertised (0) and received (0)
    Long-lived Graceful Restart: advertised and received
      Address families by peer:
    Route refresh: advertised and received
    Enhanced Route Refresh: advertised and received
    Address Family IPv4 Unicast: advertised and received
    Hostname Capability: advertised (name: osdx,domain name: n/a) received (name: osdx,domain name: n/a)
    Version Capability: advertised software version (FRRouting/10.4.1) received software version (FRRouting/10.4.1)
    Link-Local Next Hop Capability: not advertised not received
    Graceful Restart Capability: advertised and received
      Remote Restart timer is 120 seconds
      Address families by peer:
        none
  Graceful restart information:
    End-of-RIB send: IPv4 Unicast
    End-of-RIB received: IPv4 Unicast
    Local GR Mode: Helper*
    Remote GR Mode: Helper
    R bit: True
    N bit: True
    Timers:
      Configured Restart Time(sec): 120
      Received Restart Time(sec): 120
      Configured LLGR Stale Path Time(sec): 0
    IPv4 Unicast:
      F bit: False
      End-of-RIB sent: Yes
      End-of-RIB sent after update: Yes
      End-of-RIB received: Yes
      Timers:
        Configured Stale Path Time(sec): 360
        LLGR Stale Path Time(sec): 0
  Message statistics:
    Inq depth is 0
    Outq depth is 0
                         Sent       Rcvd
    Opens:                  2          1
    Notifications:          0          0
    Updates:                1          3
    Keepalives:             1          1
    Route Refresh:          1          2
    Capability:             0          0
    Total:                  5          7

  Prefix statistics:
    Inbound filtered: 0
    AS-PATH loop: 0
    Originator loop: 0
    Cluster loop: 0
    Invalid next-hop: 0
    Withdrawn: 0
    Attributes discarded: 0

  Minimum time between advertisement runs is 0 seconds

 For address family: IPv4 Unicast
  Update group 1, subgroup 1
  Packet Queue length 0
  AF-dependant capabilities:
    Outbound Route Filter (ORF) type (64) Prefix-list:
      Send-mode: advertised
      Receive-mode: received
  Outbound Route Filter (ORF): sent;
  Community attribute sent to this neighbor(all)
  Inbound path policy configured
  Incoming update prefix filter list is *ALLOW-NET1
  1 accepted, 0 sent prefixes

  Connections established 1; dropped 0
  Last reset never
  Internal BGP neighbor may be up to 255 hops away.
Local host: 10.10.0.100, Local port: 179
Foreign host: 10.10.0.200, Foreign port: 44760
Nexthop: 10.10.0.100
Nexthop global: fe80::dcad:beff:feef:6c00
Nexthop local: fe80::dcad:beff:feef:6c00
BGP connection: shared network
BGP Connect Retry Timer in Seconds: 30
Estimated round trip time: 0 ms
Read thread: on  Write thread: on  FD used: 25

Attention

Verify DUT0 receives the permitted route 1.1.1.0/24.

Step 5: Run command protocols bgp show ip at DUT0 and check if output matches the following regular expressions:

1.1.1.0/24
Show output
BGP table version is 1, local router ID is 10.10.0.100, vrf id 0
Default local pref 100, local AS 20
local address -
Status codes:  s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>i 1.1.1.0/24       10.10.0.200              0    100      0 ?

Displayed 1 routes and 1 total paths

Attention

Verify DUT0 does NOT receive 2.2.2.0/24 because ORF filters it at DUT1.

Step 6: Run command protocols bgp show ip at DUT0 and check if output does not match the following regular expressions:

2.2.2.0/24
Show output
BGP table version is 1, local router ID is 10.10.0.100, vrf id 0
Default local pref 100, local AS 20
local address -
Status codes:  s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>i 1.1.1.0/24       10.10.0.200              0    100      0 ?

Displayed 1 routes and 1 total paths