]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network/nexthop: check if nexthop is really configured without ID 30550/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 14 Dec 2023 21:35:50 +0000 (06:35 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 20 Dec 2023 19:22:46 +0000 (04:22 +0900)
src/network/networkd-nexthop.c

index 4a9c84e5e761805f8788d03fd24e36626c4c8cdd..b4c101f2e853f3d00343c3cbc9bcae7dec88d36b 100644 (file)
@@ -251,6 +251,11 @@ static int nexthop_get(Link *link, const NextHop *in, NextHop **ret) {
                 if (nexthop_compare_full(nexthop, in) != 0)
                         continue;
 
+                /* Even if the configuration matches, it may be configured with another [NextHop] section
+                 * that has an explicit ID. If so, the assigned nexthop is not the one we are looking for. */
+                if (set_contains(link->manager->nexthop_ids, UINT32_TO_PTR(nexthop->id)))
+                        continue;
+
                 if (ret)
                         *ret = nexthop;
                 return 0;
@@ -307,6 +312,11 @@ static int nexthop_get_request(Link *link, const NextHop *in, Request **ret) {
                 if (nexthop_compare_full(nexthop, in) != 0)
                         continue;
 
+                /* Even if the configuration matches, it may be requested by another [NextHop] section
+                 * that has an explicit ID. If so, the request is not the one we are looking for. */
+                if (set_contains(link->manager->nexthop_ids, UINT32_TO_PTR(nexthop->id)))
+                        continue;
+
                 if (ret)
                         *ret = req;
                 return 0;