parsed_route_lookup() is supposed to find an existing route that
matches a new route by comparing all fields. The nexthop comparison
uses ipv6_addr_equals() to check whether two non-NULL nexthops differ,
but the condition skips the candidate on equal nexthops instead of
on unequal ones. The continue should fire when the nexthops do not
match, so negate the equality test.
Before this fix, any two routes with non-NULL but equal nexthops would
never be considered a match, causing the caller to treat unchanged
routes as deleted and re-created on every rebuild.
Fixes: f8924740f26e ("northd: Move connected routes to route engine.")
Signed-off-by: Dmitrii Shcherbakov <[email protected]>
---
northd/northd.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/northd/northd.c b/northd/northd.c
index 66b26e657..264cdd7a6 100644
--- a/northd/northd.c
+++ b/northd/northd.c
@@ -12315,7 +12315,7 @@ parsed_route_lookup(struct hmap *routes, size_t hash,
continue;
}
- if (pr->nexthop && ipv6_addr_equals(pr->nexthop, new_pr->nexthop)) {
+ if (pr->nexthop && !ipv6_addr_equals(pr->nexthop, new_pr->nexthop)) {
continue;
}
--
2.53.0
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev