Using BFD to reduce BGP convergence
Overview
Given the following topology:
By enabling bfd
on an eBGP session between the edge-2
and isp-1
routers, BGP convergence (route withdrawl) on a failed link is reduced from 150 seconds to less then 1 second.
Details
To automate counting the number of seconds before the routes are withdrawn, I run a tcl
script (because Cisco only supports TCL scripting even though it is 2021) on the router. Run the script by typing tclsh
and pasting the script below:
set x 0
while "1" {
set x [expr {$x + 1}]
puts "x is $x"
set results [show ip route 1.1.243.1]
puts "$results"
after 1000
}
Configuration
Enable BFD on the edge-2 interface to isp-1. Note, BFD must be configured on a BGP neighbor (see below) before it will establish an active session with the neighbor:
interface GigabitEthernet4
description to isp1 gi1
ip address 192.168.0.0 255.255.255.254
negotiation auto
bfd interval 50 min_rx 50 multiplier 5
no mop enabled
no mop sysid
end
Enable BFD in the BGP instance on edge-2:
router bgp 65000
bgp router-id interface Loopback0
bgp log-neighbor-changes
neighbor 192.168.0.1 remote-as 65200
neighbor 192.168.0.1 fall-over bfd
!
address-family ipv4
network 192.168.0.0 mask 255.255.0.0
neighbor 192.168.0.1 activate
exit-address-family
Enable BFD on the isp-1 interface to edge-2. Note, BFD must be configured on a BGP neighbor (see below) before it will establish an active session with the neighbor:
interface GigabitEthernet1
description to GigabitEthernet4.edge-2
ip address 192.168.0.1 255.255.255.254
shutdown
negotiation auto
bfd interval 50 min_rx 50 multiplier 5
no mop enabled
no mop sysid
end
Enable BFD in the BGP instance on isp-1:
router bgp 65200
bgp router-id interface Loopback0
bgp log-neighbor-changes
neighbor 172.16.200.2 remote-as 65300
neighbor 192.168.0.0 remote-as 65000
neighbor 192.168.0.0 fall-over bfd
!
address-family ipv4
network 172.16.0.0 mask 255.240.0.0
neighbor 172.16.200.2 activate
neighbor 192.168.0.0 activate
neighbor 192.168.0.0 default-originate
exit-address-family
Testing / Validation
Validate a bfd
session is established between the routers:
edge-2#show bfd neighbors
IPv4 Sessions
NeighAddr LD/RD RH/RS State Int
192.168.0.1 4097/4097 Up Up Gi4
Run the test script, then shut
the gi2
interface on isp-1:
edge-2#tclsh
edge-2(tcl)#set x 0
0
edge-2(tcl)#while "1" {
+> set x [expr {$x + 1}]
+> puts "x is $x"
+> set results [show ip route 1.1.243.1]
+> puts "$results"
+> after 1000
+>}
x is 1
Routing entry for 1.1.243.0/24
Known via "bgp 65000", distance 200, metric 0
Tag 65200, type internal
Last update from 192.168.0.3 00:00:03 ago
Routing Descriptor Blocks:
* 192.168.0.3, from 192.168.200.1, 00:00:03 ago
Route metric is 0, traffic share count is 1
AS Hops 5
Route tag 65200
MPLS label: none
x is 2
% Network not in table
Summary
In a production environments run bfd
on all links.