Bidirectional Forwarding Detection (BFD)

Hi,

what are the disadvantages of using bfd.
also it would be helpful if you post an article on troubleshooting bfd.

Apurva,
There are a few reasons you might not want to use BFD:

  1. If your equipment is already under resource stress, the additional resources BFD demands (mostly CPU) might be too much. In this case, you should probably replace the device anyway.

  2. Lack of support for your device model or interface type. Not every piece of Cisco gear supports BFD, and even with those that do, some interface types are not supported until recently (SVIs for example)

  3. You have an environment with Etherchannel that requires failure detection: BFD is not visible by link aggregation protocols.

Andrew ,
BFD works on port-channels on the Nexus line of hardware. Not sure on IOS.

Hi Rene
I do not see you turn on -if)#bfd echo
In the show command we see echo seems to be on (below)
Is the echo function on by default?

R1#show bfd neighbors details 

NeighAddr                         LD/RD    RH/RS     State     Int
..
Session state is UP and using echo function with 50 ms interval.
..
END

Thanks

Hi Rene
Cisco documentation speaks of BFD clients which I think are routing protocols or HSRP/VRRP etc. that use BFD.
Is there any point in running BFD without a client?
So for example over an Ethernet connection with no client, would BFD take the interface down?
Thanks…

Hi Shaunl,

BFD clients are indeed (routing) protocols that use the information from BFD. For example: OSPF or EIGRP.

BFD detects a failure but you need a BFD client to take action upon it. BFD without any clients won’t do you much good.

It seems echo is the default, keep in mind that default settings sometimes are different depending on the IOS version.

Rene

19 posts were merged into an existing topic: Bidirectional Forwarding Detection (BFD)

BFD does not work in GNS3. I was using 7200 with IOS 15.x. Checking on forums the consensus is a GNS3 bug. Does anyone have a workaround for this?

Hostname R1
!
interface FastEthernet0/0
 ip address 10.0.0.9 255.255.255.252
 ip ospf 10 area 0
 duplex full
 bfd interval 500 min_rx 500 multiplier 3
!
router ospf 10
 router-id 10.0.0.1
 bfd all-interfaces

-

Hostname R2
!
interface FastEthernet0/0
 ip address 10.0.0.10 255.255.255.252
 ip ospf 10 area 0
 duplex full
 bfd interval 500 min_rx 500 multiplier 3
!
router ospf 10
 router-id 10.0.0.1
 bfd all-interfaces

-

R1#ping 10.0.0.10 repeat 10
Type escape sequence to abort.
Sending 10, 100-byte ICMP Echos to 10.0.0.10, timeout is 2 seconds:
!!!!!!!!!!
Success rate is 100 percent (10/10), round-trip min/avg/max = 20/20/20 ms

-

R2#ping 10.0.0.9 repeat 10
Type escape sequence to abort.
Sending 10, 100-byte ICMP Echos to 10.0.0.9, timeout is 2 seconds:
!!!!!!!!!!
Success rate is 100 percent (10/10), round-trip min/avg/max = 8/12/20 ms

-

R1#
*Feb 27 09:11:39.335: %SCHED-5-INT_DISABLED_BEFORE_PREEMPTION: Detected interrupts being disabled in preemption handler. schedflag = (1)  forkx = (EnvMon)  preempted process = (<Null>) preempted_process_epc = (0x63267C7C) preemption_forced_suspend_level = (1) current interrupt level = (0)  getinterruptindex() = (0) onintstack() = (FALSE)
-Traceback=

-

R2#
*Feb 27 09:11:26.863: %SCHED-5-INT_DISABLED_BEFORE_PREEMPTION: Detected interrupts being disabled in preemption handler. schedflag = (1)  forkx = (BFD PP Process)  preempted process = (<Null>) preempted_process_epc = (0x63267C7C) preemption_forced_suspend_level = (1) current interrupt level = (0)  getinterruptindex() = (0) onintstack() = (FALSE)
-Traceback=

Hi Rene

is it possible to configure two neigbors peers as below? what will happen in this case as the Minimum time R2 is expecting to recive a packet is larger than the time it takes for R1 to send. Tried this in GNS but my router crashed based on the bug

R1 (config)# bfd interval 300 min_rx 300 multiplier 3 
R2 (config)# bfd interval 999 min_rx 999 multiplier 3

Hi @tadeosho70,

With echo mode, this is no problem. The packets you send are echoed back to you. For example, take a look at this output:

R1(config)#interface FastEthernet 0/0
R1(config-if)#bfd interval 300 min_rx 300 multiplier 3 

R2(config)#interface FastEthernet 0/0
R2(config-if)#bfd interval 300 min_rx 600 multiplier 3 

The min_rx is set to 300 on R1 and 600 on R2. Here’s the output of R1 showing the 600 ms of R2:

R1#show bfd neighbors details 

NeighAddr                         LD/RD    RH/RS     State     Int
192.168.12.2                       1/1     Up        Up        Fa0/0
Session state is UP and using echo function with 600 ms interval.
OurAddr: 192.168.12.1   
Local Diag: 0, Demand mode: 0, Poll bit: 0
MinTxInt: 1000000, MinRxInt: 1000000, Multiplier: 3
Received MinRxInt: 1000000, Received Multiplier: 3
Holddown (hits): 0(0), Hello (hits): 1000(571)
Rx Count: 578, Rx Interval (ms) min/max/avg: 1/1000/867 last: 396 ms ago
Tx Count: 580, Tx Interval (ms) min/max/avg: 1/1000/865 last: 276 ms ago
Elapsed time watermarks: 0 0 (last: 0)
Registered protocols: OSPF
Uptime: 00:08:21
Last packet: Version: 1                  - Diagnostic: 0
             State bit: Up               - Demand bit: 0
             Poll bit: 0                 - Final bit: 0
             Multiplier: 3               - Length: 24
             My Discr.: 1                - Your Discr.: 1
             Min tx interval: 1000000    - Min rx interval: 1000000
             Min Echo interval: 600000 

and R2:

R2#show bfd neighbors details 

NeighAddr                         LD/RD    RH/RS     State     Int
192.168.12.1                       1/1     Up        Up        Fa0/0
Session state is UP and using echo function with 300 ms interval.
OurAddr: 192.168.12.2   
Local Diag: 0, Demand mode: 0, Poll bit: 0
MinTxInt: 1000000, MinRxInt: 1000000, Multiplier: 3
Received MinRxInt: 1000000, Received Multiplier: 3
Holddown (hits): 0(0), Hello (hits): 1000(575)
Rx Count: 584, Rx Interval (ms) min/max/avg: 1/1000/865 last: 700 ms ago
Tx Count: 583, Tx Interval (ms) min/max/avg: 1/1000/868 last: 12 ms ago
Elapsed time watermarks: 0 0 (last: 0)
Registered protocols: OSPF
Uptime: 00:08:25
Last packet: Version: 1                  - Diagnostic: 0
             State bit: Up               - Demand bit: 0
             Poll bit: 0                 - Final bit: 0
             Multiplier: 3               - Length: 24
             My Discr.: 1                - Your Discr.: 1
             Min tx interval: 1000000    - Min rx interval: 1000000
             Min Echo interval: 300000 

Keep in mind that your own packets are echoed back to you, it’s not like OSPF or EIGRP where you need to receive a hello packet from your neighbor.

Hello Team
Insted of use BFD, why not reduce OSPF timers ?

Cordially

Hello Fabrice

The main advantage of BFD is that it is exceptionally fast in detecting link failures. Failures can be detected within milliseconds ore microseconds. This is especially useful on high performance networks carrying exceptionally large amounts of real-time traffic such as VoIP or video conferencing conversations. Of course you can reduce the OSPF dead interval timer to a value of one second, but you can’t get any smaller than that.

OSPF, EIGRP and other IGPs were not designed for such quick failovers. For this reason BFD can work with these routing protocols providing the “link failure alarm” so to speak in a fraction of the time, and then letting the routing protocol do its thing.

I hope this has been helpful!

Laz

2 Likes

You can also use BFD to support static routing - worth a lesson IMO (button still broken):

2 Likes

Thanks Lagapides

It is very helpful

1 Like

I wonder if you can explain the “admin down” state? I believe that BFD will be “down” initially, until the other side is configured?

Hello Chris

The Admin Down state is a state that is used to intentionally bring down a BFD link gracefully in such a way so that the network will not be affected. In other words, the network will have to “know” that such a “link failure” is intentional and that the normal BFD mechanisms should not kick in once the link is disconnected.

When the BFD enters the admin down state, it notifies the new state to its peer for failure detection time and after the time expires, the client stops transmitting packets. At this point the BFD link is broken, and normal routing protocol convergence takes place. I was unable to find much info on this from a Cisco perspective, although it is documented generically.

I hope this has been helpful!

Laz

Hello Rene/Networklesson team.

I have a question related to how routers lose their adjacency. In this lesson you correctly put a switch in the middle of the routers and thats the reason why the other router dont see the interface goes down, and thats the justification of using BFD, all correct.
However in EIGRP graceful shutdown lesson you just put two routers together ( with no switch in the middle) and the lesson said that when one of the routers shutdown their interface the other router dont realize and it has to wait to holdtime interval in order to drop the adjacency, and you recommend again BFD. My question is if the router is connected directly to the other, it will notice that the interface goes down as well and the adjacency will go down directly without waiting holdtime. Am I correct? If not is it different for OSPF than for EIGRP?

Hello Ignacio

Indeed, if two routers are connected directly to each other, and they have either an EIGRP adjacency or an OSPF adjacency, if the interface of one of those routers goes down, then both the EIGRP and the OSPF adjacencies are dropped immediately on both ends. I’ve labbed it up just to be sure.

I will let Rene know to clarify this in the lesson.

Thanks again!

Laz

Hi Ignacio,

You are correct, we need a switch in between here as well. Just updated the picture. Thanks for letting us know!

Rene

Rene,
what is state for BFD for initial ?
Admin/down or Intit ? which one.

Thanks,
Rene