Convergence: BFD and Dual-Stack LFA on Both Providers

After the BGP stage, every iBGP session on both providers is “Established” and carries zero prefixes. This stage adds BFD to every IGP adjacency on both providers except the two toward the route reflectors, and IPv6 fast reroute where the image has it. The IPv4 LFA from the LDP and Segment Routing stages stays as it is.

This is B-P1’s IPv6 BFD table once the stage is applied:

RP/0/RP0/CPU0:B-P1#show bfd ipv6 session 
Wed Sep 23 13:13:57.453 UTC
Interface           Dest Addr      
                                        Local det time(int*mult)      State     
H/W                 NPU             Echo             Async           
------------------- --------------- ---------------- ---------------- ----------
Gi0/0/0/0           fe80::e00:87ff:fe4f:4801                      
No                  n/a             0s(0s*0)         15s(5s*3)        UP        
Gi0/0/0/6           fe80::e00:50ff:fe18:d605                      
No                  n/a             0s(0s*0)         15s(5s*3)        UP        
Gi0/0/0/5           fe80::e00:3ff:fec5:fb01                       
No                  n/a             0s(0s*0)         15s(5s*3)        UP        
Gi0/0/0/3           fe80::e00:eff:fe83:aa01                       
No                  n/a             0s(0s*0)         15s(5s*3)        UP        
Gi0/0/0/2           fe80::e00:b3ff:fe6f:9f01                      
No                  n/a             0s(0s*0)         15s(5s*3)        UP        
Gi0/0/0/1           fe80::e00:12ff:fe3c:401                       
No                  n/a             0s(0s*0)         15s(5s*3)        UP        

Six sessions, one per IS-IS neighbor. Gi0/0/0/4 is absent because it faces B-RR, which carries no BFD in this stage.

Topology file: topology.clab.yml · Addressing: ipam.md · Stage configs, 14 nodes across both providers: stage_configs/lab01-s4-convergence/

Where BFD Attaches

On IOS-XE the timers sit on the interface and the binding sits under the routing process. Every SP-A transit interface carries bfd interval 500 min_rx 500 multiplier 3 and no bfd echo. OSPFv2 and OSPFv3 are two processes, so bfd all-interfaces goes under router ospf 1 and again under router ospfv3 1. A-P1’s Gi6 faces A-RR and is excluded with ip ospf bfd disable and ospfv3 bfd disable. This is A-P1, one transit interface, Gi6 and the two processes:

interface GigabitEthernet2
 bfd interval 500 min_rx 500 multiplier 3
 no bfd echo
!
interface GigabitEthernet6
 ip ospf bfd disable
 ospfv3 bfd disable
!
router ospf 1
 bfd all-interfaces
!
router ospfv3 1
 bfd all-interfaces
!

On the SP-B IOS-XE nodes, the same interface timers are bound under router isis, and IS-IS binds BFD per topology. The process-level line arms the IPv4 topology; the IPv6 topology takes its own line under address-family ipv6:

router isis
 bfd all-interfaces
 address-family ipv6
  bfd all-interfaces
 exit-address-family
!

IOS-XR binds BFD per interface under the IS-IS process and per address family: bfd fast-detect ipv4 and bfd fast-detect ipv6 are two commands. The timers on the XRv9k nodes are bfd minimum-interval 5000 and bfd multiplier 3. The IPv6 fast reroute is the per-interface form the Segment Routing stage used for IPv4, under address-family ipv6 unicast. This is B-P1’s Gi0/0/0/0, toward B-P2:

router isis 1
 interface GigabitEthernet0/0/0/0
  bfd minimum-interval 5000
  bfd multiplier 3
  bfd fast-detect ipv4
  bfd fast-detect ipv6
  address-family ipv6 unicast
   fast-reroute per-prefix
   fast-reroute per-prefix ti-lfa
  !
 !

Gi0/0/0/4 faces B-RR and carries the fast-reroute lines with no BFD:

 interface GigabitEthernet0/0/0/4
  address-family ipv6 unicast
   fast-reroute per-prefix
   fast-reroute per-prefix ti-lfa
  !
 !

Both blocks above are one interface out of seven; the full file is B-P1.ios. A-RR and B-RR get no configuration in this stage.

SP-A: One Session per Process

A-P1 has five transit links and Gi6 toward the reflector. In the output below, it shows five active IPv4 and five IPv6 sessions:

A-P1#show bfd neighbors 

IPv4 Sessions
NeighAddr                              LD/RD         RH/RS     State     Int
10.1.1.2                             4097/4097       Up        Up        Gi2
10.1.1.14                            4099/4097       Up        Up        Gi4
10.1.1.18                            4098/4097       Up        Up        Gi3
10.1.1.22                               2/4097       Up        Up        Gi5
10.1.1.42                            4100/4097       Up        Up        Gi7

IPv6 Sessions
NeighAddr                              LD/RD         RH/RS     State     Int
FE80::E00:4CFF:FE61:8401                6/4          Up        Up        Gi3
FE80::E00:58FF:FE3D:FC01                8/2          Up        Up        Gi5
FE80::E00:6BFF:FE4D:EA01                5/4          Up        Up        Gi4
FE80::E00:7DFF:FE23:D01                 7/3          Up        Up        Gi2
FE80::E00:ABFF:FE81:4401                3/2          Up        Up        Gi7

Each OSPF process reports its own session on each neighbor:

A-P1#show ip ospf neighbor detail | include BFD
    BFD enabled, BFD session UP
    BFD enabled, BFD session UP
    BFD enabled, BFD session UP
    BFD enabled, BFD session UP
    BFD enabled, BFD session UP
A-P1#show ospfv3 neighbor detail | include BFD
    BFD enabled, BFD session UP
    BFD enabled, BFD session UP
    BFD enabled, BFD session UP
    BFD enabled, BFD session UP
    BFD enabled, BFD session UP

The BFD configuration was applied to the OSPF processes and the related interfaces, so it didn’t affect the previously configured BGP:

A-PE1#show bgp all summary
For address family: VPNv4 Unicast
BGP router identifier 10.1.0.5, local AS number 64501
BGP table version is 1, main routing table version 1

Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.1.0.7        4        64501    3499    3860        1    0    0 2d10h           0

For address family: VPNv6 Unicast
BGP router identifier 10.1.0.5, local AS number 64501
BGP table version is 1, main routing table version 1

Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.1.0.7        4        64501    3499    3860        1    0    0 2d10h           0
A-PE1#

SP-B: IS-IS BFD per Topology

The IPv4 sessions sit on the same six interfaces:

RP/0/RP0/CPU0:B-P1#show bfd session                        
Thu Jun 18 13:23:55.602 UTC
Interface           Dest Addr           Local det time(int*mult)      State     
                                    Echo             Async   H/W   NPU     
------------------- --------------- ---------------- ---------------- ----------
Gi0/0/0/0           10.2.1.2        0s(0s*0)         15s(5s*3)        UP        
                                                             No    n/a            
Gi0/0/0/6           10.2.1.50       0s(0s*0)         15s(5s*3)        UP        
                                                             No    n/a            
Gi0/0/0/5           10.2.1.42       0s(0s*0)         15s(5s*3)        UP        
                                                             No    n/a            
Gi0/0/0/3           10.2.1.22       0s(0s*0)         15s(5s*3)        UP        
                                                             No    n/a            
Gi0/0/0/2           10.2.1.14       0s(0s*0)         15s(5s*3)        UP        
                                                             No    n/a            
Gi0/0/0/1           10.2.1.18       0s(0s*0)         15s(5s*3)        UP        
                                                             No    n/a            

B-RR is still an IS-IS neighbor on Gi0/0/0/4:

B-RR           Gi0/0/0/4        *PtoP*         Up    28       L2   Capable 
  Area Address(es): 49.0001
  IPv4 Address(es): 10.2.1.38*
  IPv6 Address(es): fe80::a8c1:abff:fe23:8410*
  Topologies: 'IPv4 Unicast' 'IPv6 Unicast'
  Uptime: 23:22:29

On the IOS-XE side, show clns is-neighbors detail names the topology each BFD session is bound to. B-P2, with three adjacencies:

B-P2#show clns is-neighbors detail | include BFD
  BFD enabled: (MTID:0, ipv4) (MTID:2, ipv6)
  BFD enabled: (MTID:0, ipv4) (MTID:2, ipv6)
  BFD enabled: (MTID:0, ipv4) (MTID:2, ipv6)

MTID:0 is the IPv4 unicast topology and MTID:2 the IPv6 one. B-ASBR’s unfiltered output shows the same pair on each of its two adjacencies, under the Topology: IPv4, IPv6 line the adjacency itself carries:

B-ASBR#show clns is-neighbors detail 

Tag null:
System Id       Interface     State  Type Priority  Circuit Id         Format
B-P1            Gi2           Up     L2   0         00                 Phase V
  Area Address(es): 49.0001
  IP Address(es):  10.2.1.41*
  IPv6 Address(es): FE80::E00:31FF:FE21:2606
  Uptime: 1w0d
  NSF capable
  BFD enabled: (MTID:0, ipv4) (MTID:2, ipv6)
  Topology: IPv4, IPv6
  Interface name: GigabitEthernet2
B-P4            Gi3           Up     L2   0         00                 Phase V
  Area Address(es): 49.0001
  IP Address(es):  10.2.1.45*
  IPv6 Address(es): FE80::E00:25FF:FEC1:8E04
  Uptime: 1w0d
  NSF capable
  BFD enabled: (MTID:0, ipv4) (MTID:2, ipv6)
  Topology: IPv4, IPv6
  Interface name: GigabitEthernet3

The IOS-XE session tables hold both families. B-P2 again:

B-P2#show bfd neighbors 

IPv4 Sessions
NeighAddr                              LD/RD         RH/RS     State     Int
10.2.1.1                                2/2148532227 Up        Up        Gi2
10.2.1.6                                1/1          Up        Up        Gi3
10.2.1.26                               3/2148532225 Up        Up        Gi4

IPv6 Sessions
NeighAddr                              LD/RD         RH/RS     State     Int
FE80::E00:38FF:FEC8:BD01                7/2148532228 Up        Up        Gi2
FE80::E00:A0FF:FEDA:C102                8/6          Up        Up        Gi3
FE80::E00:E9FF:FE9D:9702                9/2148532226 Up        Up        Gi4

B-PE1 has two IS-IS adjacencies and B-PE2 three:

RP/0/RP0/CPU0:B-PE1#show bfd ipv6 session
Wed Sep 23 13:28:41.636 UTC
Interface           Dest Addr      
                                        Local det time(int*mult)      State     
H/W                 NPU             Echo             Async           
------------------- --------------- ---------------- ---------------- ----------
Gi0/0/0/0           fe80::e00:4aff:fee8:4204                      
No                  n/a             0s(0s*0)         15s(5s*3)        UP        
Gi0/0/0/1           fe80::e00:7dff:feae:ed03                      
No                  n/a             0s(0s*0)         15s(5s*3)        UP        
RP/0/RP0/CPU0:B-PE2#show bfd ipv6 session
Wed Sep 23 13:28:49.413 UTC
Interface           Dest Addr      
                                        Local det time(int*mult)      State     
H/W                 NPU             Echo             Async           
------------------- --------------- ---------------- ---------------- ----------
Gi0/0/0/0           fe80::e00:dff:fe49:d804                       
No                  n/a             0s(0s*0)         15s(5s*3)        UP        
Gi0/0/0/4           fe80::e00:1bff:febd:b907                      
No                  n/a             0s(0s*0)         15s(5s*3)        UP        
Gi0/0/0/1           fe80::e00:b6ff:fe7a:cf03                      
No                  n/a             0s(0s*0)         15s(5s*3)        UP

The lab was redeployed a couple of times while this stage was configured and the outputs collected, so the IPv6 link-local addresses differ between captures.

Timers: 500 ms on XE, 5 s on XR

The IOS-XE interfaces run 500 ms x 3 and the XRv9k nodes 5000 ms x 3. Every session shows 15s(5s*3), including IOS-XE devices. BFD negotiates to the slower of the two ends, so the XR timer sets detection in both directions.

IPv6 Fast Reroute on the XR Nodes

B-PE1 and B-PE2 have two uplinks each and protect all seven IPv6 loopbacks:

RP/0/RP0/CPU0:B-PE1#show isis ipv6 fast-reroute summary
Thu Jun 18 13:29:14.399 UTC

IS-IS 1 IPv6 Unicast FRR summary

                          Critical   High       Medium     Low        Total     
                          Priority   Priority   Priority   Priority             
Prefixes reachable in L2
  All paths protected     0          0          7          0          7         
  Some paths protected    0          0          0          0          0         
  Unprotected             0          0          0          0          0         
  Protection coverage     0.00%      0.00%      100.00%    0.00%      100.00%   

B-P1 protects six of seven for IPv6, the same 85.71% as for IPv4:

RP/0/RP0/CPU0:B-P1#show isis ipv4 fast-reroute summary
Thu Jun 18 13:24:13.564 UTC

IS-IS 1 IPv4 Unicast FRR summary

                          Critical   High       Medium     Low        Total     
                          Priority   Priority   Priority   Priority             
Prefixes reachable in L2
  All paths protected     0          0          6          0          6         
  Some paths protected    0          0          0          0          0         
  Unprotected             0          0          1          0          1         
  Protection coverage     0.00%      0.00%      85.71%     0.00%      85.71%    
RP/0/RP0/CPU0:B-P1#show isis ipv6 fast-reroute summary
Thu Jun 18 13:24:18.416 UTC

IS-IS 1 IPv6 Unicast FRR summary

                          Critical   High       Medium     Low        Total     
                          Priority   Priority   Priority   Priority             
Prefixes reachable in L2
  All paths protected     0          0          6          0          6         
  Some paths protected    0          0          0          0          0         
  Unprotected             0          0          1          0          1         
  Protection coverage     0.00%      0.00%      85.71%     0.00%      85.71%    

The unprotected prefix is B-RR’s loopback, reachable over one link, as in the Segment Routing stage. The detail for B-PE2’s loopback shows the repair path:

RP/0/RP0/CPU0:B-P1#show isis ipv6 fast-reroute 2001:db8:2::6/128 detail
Thu Jun 18 13:24:29.784 UTC

L2 2001:db8:2::6/128 [10/115] Label: None, medium priority
   Installed Jun 17 15:05:33.898 for 22:18:56
     via fe80::e00:faff:fe13:ee05, GigabitEthernet0/0/0/6, B-PE2, SRGB Base: 16000, Weight: 0
       Backup path: LFA, via fe80::e00:2cff:fe6e:e901, GigabitEthernet0/0/0/2, B-P4, SRGB Base: 16000, Weight: 0, Metric: 20
       P: No, TM: 20, LC: No, NP: No, D: No, SRLG: Yes
     src B-PE2.00-00, 2001:db8:2::6

The primary is the direct link on Gi0/0/0/6 and the backup is a plain LFA through B-P4 on Gi0/0/0/2 at metric 20. Label: None: the IPv6 address family has no prefix-SID in this lab, so the repair path is an IPv6 next-hop with no label.

On my IOS-XE version, the parser rejects the IPv6 fast-reroute show commands. A-P1:

A-P1#show ospfv3 ipv6 fast-reroute
                       ^
% Invalid input detected at '^' marker.

B-P2’s IS-IS summary has one section, IPv4, and the IPv6 form of the command is rejected:

B-P2#show isis fast-reroute summary 

Microloop Avoidance State: Disabled
Segment-Routing Microloop Avoidance State: Disabled
IPv4 Fast-Reroute Protection Summary:

 Prefix Counts:          Total      Protected    Coverage
   High priority:        0          0            0%
   Normal priority:      7          7            100%
   Total:                7          7            100%

B-P2#
B-P2#
B-P2#show isis ipv6 fast-reroute summary 
% Ambiguous command:  "show isis ipv6 fast-reroute summary "

B-P2 and B-ASBR still report 7 of 7 for IPv4, and A-P1’s show ip ospf fast-reroute still lists the policy from the LDP stage.

The Route Reflectors

A-RR and B-RR run the XRd control-plane image, so in my case it doesn’t support BFD:

RP/0/RP0/CPU0:A-RR#show bfd session
Thu Jun 18 13:22:16.723 UTC


RP/0/RP0/CPU0:A-RR#show ospf neigh
Thu Jun 18 13:22:20.673 UTC

* Indicates MADJ interface
# Indicates Neighbor awaiting BFD session up

Neighbors for OSPF 1

Neighbor ID     Pri   State           Dead Time   Address         Interface
10.1.0.1        1     FULL/  -        00:00:32    10.1.1.37       GigabitEthernet0/0/0/0
    Neighbor is up for 7w4d

B-RR behaves the same way.

Verification

The commands behind this post, as run:

A-P1#show bfd neighbors 
A-P1#show ip ospf neighbor detail | include BFD
A-P1#show ospfv3 neighbor detail | include BFD
A-P1#show ospfv3 ipv6 fast-reroute
A-PE1#show bgp all summary
RP/0/RP0/CPU0:A-RR#show bfd session
RP/0/RP0/CPU0:B-P1#show bfd session                        
RP/0/RP0/CPU0:B-P1#show bfd ipv6 session                   
RP/0/RP0/CPU0:B-P1#show isis ipv6 fast-reroute summary
RP/0/RP0/CPU0:B-P1#show isis ipv6 fast-reroute 2001:db8:2::6/128 detail
B-P2#show clns is-neighbors detail | include BFD
B-P2#show isis fast-reroute summary 
B-P2#show isis ipv6 fast-reroute summary 
B-ASBR#show clns is-neighbors detail

What’s Next

The next stage is the L3VPN: VRFs on the PEs, PE-CE routing and the first VPN prefixes through the reflectors.

Leave a comment