Bidirectional Forwarding Detection (BFD)
BFD Overview
When a link fails, with routing protocols we need to wait until hold time or dead-interval expires then we recalculate the route to the destination. We could lower the hello packet as well as dead-interval timers to expedite the convergence. However, not only we are still talking about some seconds of downtime but also we increase the CPU overhead.
BDF is a very small packet at hardware level which can detect subsecond failures between two neighbors. Speaking of the neighbors, you need to configure BFD on both devices which are going to form BFD adjacency.
Once BFD enabled on the interface and on the routing protocol, NX-OS creates BFD session and sends BFD hello packets (like IGP hello packets) every mintx interval. The device expects to receive hello messages in min_rx intervals. If the BFD does not receive any hello message in multiplier value, the local device assumes a fault in the path.
In the example below:
- Desired minimum transmit interval = 300
- Required minimum receive interval = 300
- Detect multiplier = 3
switch(config)# feature bfd Please disable the ICMP / ICMPv6 redirects on all IPv4 and IPv6 interfaces running BFD sessions using the commands below 'no ip redirects ' 'no ipv6 redirects ' Please configure relaxed BFD intervals when scaling above a total of 128 BFD sessions on Cloudscale platforms using the commands below 'bfd interval 300 min_rx 300 multiplier 3' 'bfd multihop interval 999 min_rx 999 multiplier 10'
Once BFD detects a failure, it reports it to the BFD-enabled protocol. Then the routing protocol tears down the neighbor relationship then it starts calculating the best path selection according to it is topology/database table if there is no alternative path.
N9K01(config)# feature bfd N9K01(config)# bfd interval 999 min_rx 999 multiplier 9 N9K01(config)# interface e0/0 N9K01(config-if)# ip ospf bfd N9K01(config-if)# no ip redirects N9K01(config-if)# no ipv6 redirects
Here is an example of BGP and BFD
N9K01(config)# feature bfd N9K01(config)# interface Ethernet1/1 N9K01(config-if)# bfd interval 100 min_rx 100 multiplier 5 N9K01(config-if)# feature bgp N9K01(config)# router bgp 65000 N9K01(config-router)# neighbor 172.16.2.1 remote-as 65000 N9K01(config-router-neighbor)# bfd N9K01(config-router-neighbor)# update-source ethernet 1/1