donatas abraitis

Unnecessary Updates in BGP

It is well known that BGP, as a distance-vector protocol, suffers from path exploration: For every withdrawn route (AS path or any other mandatory attribute change), the next best, supposedly valid route is selected and announced, until there are no more candidates left in the router’s RIB.

BGP routers can generate multiple identical announcements with empty community attributes if stripped at egress. This is an undesired behavior. Why do we need to send an UPDATE if this is not an actual change?

Imagine a topology below: BGP Unnecessary Updates

Assume a converged network. In order to induce updates for prefix p, we disable the link between Y1 and Y2 and wait for arriving updates at collector C1.

I have FRRouting configuration at X1:

router bgp 65002
  no bgp ebgp-requires-policy
  neighbor 10.0.1.1 remote-as external
  neighbor 10.0.1.1 timers 3 10
  neighbor 10.0.2.2 remote-as external
  neighbor 10.0.2.2 timers 3 10
  address-family ipv4 unicast
    redistribute connected
    neighbor 10.0.1.1 route-map c1 out
  exit-address-family
!
bgp community-list standard c1 seq 1 permit 65004:2
bgp community-list standard c1 seq 2 permit 65004:3
!
route-map c1 permit 10
  set comm-list c1 delete
!

X1 receives paths with communities 65004:2 and 65004:3 from Y1 because those paths are tagged at Y2 and Y3 appropriately.

When X1 sends the best path to C1 it generates duplicate updates because of attribute change (community, 65004:2 -> 65004:3). But since we strip all communities at egress, it’s absolutely not necessary sending duplicates towards C1 because the Adj-Rib-Out wasn’t changed.

I developed a patch for FRRouting, which prevents sending duplicate updates if the path actually not changed. This is valid for all attributes.

For more detailed information and experiments, please read at https://www.cmand.org/communityexploration/. You will find more configuration examples for other routers (Cisco, Juniper, Nokia) and other software routing daemons (Bird, OpenBGPD, Quagga).