Interface metric needs to be assigned to the route metric parameter at route creation time. Otherwise if the interface metric is different from 0 route_cmp will wrongly conclude the routes are different.
In this case the route will be added/deleted and could end up with the route missing in the kernel depending on the add/delete order.
Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
if ((cur = tb[ROUTE_METRIC]) != NULL) {
route->metric = blobmsg_get_u32(cur);
route->flags |= DEVROUTE_METRIC;
if ((cur = tb[ROUTE_METRIC]) != NULL) {
route->metric = blobmsg_get_u32(cur);
route->flags |= DEVROUTE_METRIC;
+ } else
+ route->metric = iface->metric;
if ((cur = tb[ROUTE_MTU]) != NULL) {
route->mtu = blobmsg_get_u32(cur);
if ((cur = tb[ROUTE_MTU]) != NULL) {
route->mtu = blobmsg_get_u32(cur);
if (node_new) {
bool _enabled = enable_route(ip, route_new);
if (node_new) {
bool _enabled = enable_route(ip, route_new);
- if (!(route_new->flags & DEVROUTE_METRIC))
- route_new->metric = iface->metric;
-
if (!(route_new->flags & DEVADDR_EXTERNAL) && !keep && _enabled)
if (system_add_route(dev, route_new))
route_new->failed = true;
if (!(route_new->flags & DEVADDR_EXTERNAL) && !keep && _enabled)
if (system_add_route(dev, route_new))
route_new->failed = true;