mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-04 22:14:49 +00:00
zebra: Only send down pertinent information on RTM_DELROUTE
Background: v6 does not have route replace semantics. If you want to add a nexthop to an existing route, you just send RTM_NEWROUTE and the new nexthop. If you want to delete a nexthop you should just send RTM_DELROUTE with the removed nexthop. This leads to situations where if zebra is processing a route and has lost track of intermediate nexthops( yes this sucks ) then v6 routes will get out of sync when we try to implement route replace semantics. So notice when we are doing a route delete and the route is not being updated, just send the prefix and tell it too delete. Ticket: CM-20391 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
45df4e9667
commit
c1d63a9346
@ -1319,7 +1319,6 @@ static int netlink_route_multipath(int cmd, struct prefix *p,
|
||||
struct sockaddr_nl snl;
|
||||
struct nexthop *nexthop = NULL;
|
||||
unsigned int nexthop_num;
|
||||
int discard = 0;
|
||||
int family = PREFIX_FAMILY(p);
|
||||
const char *routedesc;
|
||||
int setsrc = 0;
|
||||
@ -1380,7 +1379,13 @@ static int netlink_route_multipath(int cmd, struct prefix *p,
|
||||
|
||||
_netlink_route_debug(cmd, p, family, zvrf, re->table);
|
||||
|
||||
if (discard)
|
||||
/*
|
||||
* If we are not updating the route and we have received
|
||||
* a route delete, then all we need to fill in is the
|
||||
* prefix information to tell the kernel to schwack
|
||||
* it.
|
||||
*/
|
||||
if (!update && cmd == RTM_DELROUTE)
|
||||
goto skip;
|
||||
|
||||
if (re->mtu || re->nexthop_mtu) {
|
||||
|
Loading…
Reference in New Issue
Block a user