summaryrefslogtreecommitdiff
path: root/lib/command_py.c
diff options
context:
space:
mode:
authorAnuradha Karuppiah <anuradhak@cumulusnetworks.com>2018-10-15 08:16:51 -0700
committerDonald Sharp <sharpd@cumulusnetworks.com>2018-10-31 06:23:32 -0400
commit6d8c603a930f229aac931aac2f556f79f4b7b437 (patch)
tree321c85931f8fd3e28a575e42162b6875fe8bb881 /lib/command_py.c
parent3e3aa88e5fbd6a19e37b7c211013b8dc73d61ef7 (diff)
bgpd: use IP address as tie breaker if the MM seq number is the same
Same sequence number handling is specified by RFC 7432 - [ If two (or more) PEs advertise the same MAC address with the same sequence number but different Ethernet segment identifiers, a PE that receives these routes selects the route advertised by the PE with the lowest IP address as the best route. If the PE is the originator of the MAC route and it receives the same MAC address with the same sequence number that it generated, it will compare its own IP address with the IP address of the remote PE and will select the lowest IP. If its own route is not the best one, it will withdraw the route. ] To implement that specification this commit uses nexthop IP as a tie breaker between two paths of equal seq number with lower IP winning. Now if a local path already exists with the same sequence number but higher (local-VTEP) IP it is evicted (deleted and withdrawn from the peers) and the winning new remote path is installed in zebra. This is existing code and handled implicitly via evpn_route_select_install. If a local path is rxed from zebra with the same sequence as the current remote winner it is rejected (not installed in the bgp routing tables) and zebra is asked to re-install the older/remote winner. This is a race condition that can only happen if bgp's add and zebra's add cross paths. Additional handling has been added in this commit via evpn_cleanup_local_non_best_route to take care of the race condition. Ticket: CM-22674 Reviewed By: CCR-7937 Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
Diffstat (limited to 'lib/command_py.c')
0 files changed, 0 insertions, 0 deletions