]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd-delete-route-on-invalid-nh.patch
authorDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 20 May 2015 00:47:25 +0000 (17:47 -0700)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 20 May 2015 00:47:25 +0000 (17:47 -0700)
BGPd: Delete the route from the kernel when a valid NH changes to invalid NH

A route has been announced by a BGP peer with a valid NH and has been
populated into the kernel. Now, if the NH announced changes (say via routemap)
to an invalid NH, the route is marked as inactive/inaccessible inside Quagga,
but is not deleted from the kernel. This patch fixes that issue.

The problem is caused by BGP losing the old valid NH and using the new, invalid
NH to delete the now-inaccessible route. However, the kernel/zebra has the
route using the old NH and so they reject the delete. Fix involves not sending
the invalid NH when its the only NH. Things worked fine if the route had BGP
multipath.

bgpd/bgp_zebra.c

index bd63c6790c12fd8d0844d3d238da04e21329d6f7..3c81d638ce5f745d8ead5f385937fe48db49730d 100644 (file)
@@ -1312,8 +1312,8 @@ bgp_zebra_withdraw (struct prefix *p, struct bgp_info *info, safi_t safi)
       api.message = 0;
       api.safi = safi;
       SET_FLAG (api.message, ZAPI_MESSAGE_NEXTHOP);
-      api.nexthop_num = 1;
-      api.nexthop = &nexthop;
+      api.nexthop_num = 0;
+      api.nexthop = NULL;
       api.ifindex_num = 0;
       SET_FLAG (api.message, ZAPI_MESSAGE_METRIC);
       api.metric = info->attr->med;