diff options
author | Luiz Angelo Daros de Luca <luizluca@gmail.com> | 2021-11-22 23:04:51 -0300 |
---|---|---|
committer | Hans Dedecker <dedeckeh@gmail.com> | 2021-11-26 20:38:52 +0100 |
commit | e589c0580dcb9031faec2b8106925874b5d648a1 (patch) | |
tree | c92acbd5cf3a3b55d421015b551bf7f704b6f05d /interface-ip.c | |
parent | b54ffdef48ed200b332aa18e8bccfb9df5f7b1ea (diff) | |
download | netifd-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>
Diffstat (limited to 'interface-ip.c')
-rw-r--r-- | interface-ip.c | 4 |
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; } } |