When a route is created while the interface has no link, we get a
notification with the route and the nexthop having the flag LINKDOWN.
If the interface later gets a link, we do not get a route notification
about it, so the route and nexthop stay at LINKDOWN in the libnl cache.
If the route then gets removed again, the to be removed route will not
have the LINKDOWN flag anymore, which then can break comparison of the
nexthop(s).
So add a new helper for ignoring FLAGS and WEIGHT for nexthops, and use it
everywhere we want to tell if it's the same nexthop, but not necessarily
in the same state.
For loose comparisons, we still need to use the old function, as else e.g.
route lookup will require specifying exact nexthops, and just filtering for
all routes on a certain interfaces would break.
When a route is created while the interface has no link, we get a notification with the route and the nexthop having the flag
LINKDOWN
.If the interface later gets a link, we do not get a route notification about it, so the route and nexthop stay at
LINKDOWN
in the libnl cache.If the route then gets removed again, the to be removed route will not have the
LINKDOWN
flag anymore, which then can break comparison of the nexthop(s).So add a new helper for ignoring FLAGS and WEIGHT for nexthops, and use it everywhere we want to tell if it's the same nexthop, but not necessarily in the same state.
For loose comparisons, we still need to use the old function, as else e.g. route lookup will require specifying exact nexthops, and just filtering for all routes on a certain interfaces would break.