From: Yu Watanabe Date: Mon, 29 Nov 2021 10:38:24 +0000 (+0900) Subject: network: route: read RTA_TABLE attribute to get route table X-Git-Tag: v250-rc1~107^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5e82a6137546d3a2ac403df261732076130356a8;p=thirdparty%2Fsystemd.git network: route: read RTA_TABLE attribute to get route table If the table of a route is larger than 255, then the value is stored in RTA_TABLE attribute. But the attribute is not supported by old kernels. So, first try to read the value from RTA_TABLE attribute, then fallback to the value in the message header. --- diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c index 23716342826..6bda0833609 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c @@ -1723,12 +1723,16 @@ int manager_rtnl_process_route(sd_netlink *rtnl, sd_netlink_message *message, Ma return 0; } - r = sd_rtnl_message_route_get_table(message, &table); + r = sd_netlink_message_read_u32(message, RTA_TABLE, &tmp->table); + if (r == -ENODATA) { + r = sd_rtnl_message_route_get_table(message, &table); + if (r >= 0) + tmp->table = table; + } if (r < 0) { log_link_warning_errno(link, r, "rtnl: received route message with invalid table, ignoring: %m"); return 0; } - tmp->table = table; r = sd_netlink_message_read_u32(message, RTA_PRIORITY, &tmp->priority); if (r < 0 && r != -ENODATA) {