interface-ip: use metric when looking for a route
authorLuiz Angelo Daros de Luca <luizluca@gmail.com>
Tue, 23 Nov 2021 02:04:51 +0000 (23:04 -0300)
committerHans Dedecker <dedeckeh@gmail.com>
Fri, 26 Nov 2021 19:38:52 +0000 (20:38 +0100)
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>
interface-ip.c

index 648f521c407f3cde8c4eed7f4de29666b9012fd0..7b63ef923f8609adc5abf9509d0d84c45b28b0f1 100644 (file)
@@ -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;
        }
 }