route: treat nhid changes as full route replacements
When updating a route targeting a nexthoup group with id changing its nexthop to a single nexthop, we treat this as an update and instead add that nexthop to the group instead of replacing the route in the cache.
So e.g. with
nexthop id 10 fe80::1 dev eth1 nexthop id 11 fe80::2 dev eth2 nexthop id 12 fe80::3 dev eth3 nexthop id 20 grp 10/11
adding a route dst 2001:db8:1:/64 nhid 20
libnl will store this as 2001:db8:1:/64 via fe80::1, fe80::2
if we now update the route with
dst 2001:db8:1:/64 nhid 12
libnl will see a new route with a single nexthop. Since the existing route for dst 2001:db8:1:/64 is a multipath route, and the new route has a single nexthop, libnl assumes this is a new nexthop for the route, and merges it to 2001:db8:1:/64 via fe80::1, fe80::2, fe80::3 instead of replacing it.
Fix this by checking the nhid of the routes, and only merge if they match.
Fixes: 29b71371e764 (“route cache: Fix handling of ipv6 multipath routes”) Signed-off-by: Jonas Gorski jonas.gorski@bisdn.de
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802032778号