From: Yu Watanabe Date: Sat, 13 Jan 2024 02:18:53 +0000 (+0900) Subject: network/route-nexthop: store ifindex of the assigned interface in Route.nexthop.ifindex X-Git-Tag: v256-rc1~1152^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b9e1caf64a44381c6cdfd41efa00a35dde83cde9;p=thirdparty%2Fsystemd.git network/route-nexthop: store ifindex of the assigned interface in Route.nexthop.ifindex And use it if set on building netlink message. --- diff --git a/src/network/networkd-route-nexthop.c b/src/network/networkd-route-nexthop.c index 028504537c2..43ff790f04a 100644 --- a/src/network/networkd-route-nexthop.c +++ b/src/network/networkd-route-nexthop.c @@ -365,8 +365,7 @@ int route_nexthops_set_netlink_message(Link *link, const Route *route, sd_netlin return r; } - assert(link); - return sd_netlink_message_append_u32(message, RTA_OIF, link->ifindex); + return sd_netlink_message_append_u32(message, RTA_OIF, route->nexthop.ifindex > 0 ? route->nexthop.ifindex : ASSERT_PTR(link)->ifindex); } return netlink_message_append_multipath_route(link, route, message); @@ -474,12 +473,14 @@ int route_nexthops_read_netlink_message(Route *route, sd_netlink_message *messag * routes. Hence, skip reading of RTA_OIF. */ return 0; - uint32_t ifindex = 0; + uint32_t ifindex; r = sd_netlink_message_read_u32(message, RTA_OIF, &ifindex); - if (r < 0 && r != -ENODATA) + if (r >= 0) + route->nexthop.ifindex = (int) ifindex; + else if (r != -ENODATA) return log_warning_errno(r, "rtnl: could not get ifindex from route message, ignoring: %m"); - if (ifindex > 0) { + if (route->nexthop.ifindex > 0) { r = netlink_message_read_in_addr_union(message, RTA_GATEWAY, route->family, &route->nexthop.gw); if (r >= 0) { route->nexthop.family = route->family;