summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuiz Angelo Daros de Luca <luizluca@gmail.com>2021-11-22 23:04:51 -0300
committerHans Dedecker <dedeckeh@gmail.com>2021-11-26 20:38:52 +0100
commite589c0580dcb9031faec2b8106925874b5d648a1 (patch)
treec92acbd5cf3a3b55d421015b551bf7f704b6f05d
parentb54ffdef48ed200b332aa18e8bccfb9df5f7b1ea (diff)
downloadnetifd-e589c0580dcb9031faec2b8106925874b5d648a1.tar.gz
interface-ip: use metric when looking for a route
When there were multiple routes with the same target but different metrics, __find_ip_route_target was returning the first one, independently of the metric. Signed-off-by: Luiz Angelo Daros de Luca <luizluca@gmail.com>
-rw-r--r--interface-ip.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/interface-ip.c b/interface-ip.c
index 648f521..7b63ef9 100644
--- a/interface-ip.c
+++ b/interface-ip.c
@@ -234,7 +234,9 @@ __find_ip_route_target(struct interface_ip_settings *ip, union if_addr *a,
if (route->flags & DEVROUTE_TABLE)
continue;
- if (!*res || route->mask > (*res)->mask)
+ if (!*res || route->mask > (*res)->mask ||
+ ((route->mask == (*res)->mask) && (route->flags & DEVROUTE_METRIC)
+ && (route->metric < (*res)->metric)))
*res = route;
}
}