From: Yu Watanabe Date: Sun, 4 May 2025 16:33:05 +0000 (+0900) Subject: network: make log_link_message_full_errno() take format string X-Git-Tag: v258-rc1~692^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d28746ef552b11cba8890963f49ce3e0082e6053;p=thirdparty%2Fsystemd.git network: make log_link_message_full_errno() take format string --- diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index 979890f9a57..027e89ca69a 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -1472,17 +1472,18 @@ int link_drop_static_addresses(Link *link) { return r; } -int address_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *error_msg) { +int address_configure_handler_internal(sd_netlink_message *m, Link *link, Address *address) { int r; - assert(rtnl); assert(m); assert(link); - assert(error_msg); + assert(address); r = sd_netlink_message_get_errno(m); if (r < 0 && r != -EEXIST) { - log_link_message_warning_errno(link, m, r, error_msg); + log_link_message_warning_errno(link, m, r, "Failed to set %s address %s", + network_config_source_to_string(address->source), + IN_ADDR_TO_STRING(address->family, &address->in_addr)); link_enter_failed(link); return 0; } @@ -1725,8 +1726,9 @@ static int static_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Reque int r; assert(link); + assert(address); - r = address_configure_handler_internal(rtnl, m, link, "Failed to set static address"); + r = address_configure_handler_internal(m, link, address); if (r <= 0) return r; diff --git a/src/network/networkd-address.h b/src/network/networkd-address.h index f8d6b6c3a1e..1c171a476a2 100644 --- a/src/network/networkd-address.h +++ b/src/network/networkd-address.h @@ -103,7 +103,7 @@ int address_new(Address **ret); int address_new_static(Network *network, const char *filename, unsigned section_line, Address **ret); int address_get(Link *link, const Address *in, Address **ret); int address_get_harder(Link *link, const Address *in, Address **ret); -int address_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *error_msg); +int address_configure_handler_internal(sd_netlink_message *m, Link *link, Address *address); int address_remove(Address *address, Link *link); int address_remove_and_cancel(Address *address, Link *link); int address_dup(const Address *src, Address **ret); diff --git a/src/network/networkd-dhcp-prefix-delegation.c b/src/network/networkd-dhcp-prefix-delegation.c index 41f215ba532..e519896fa07 100644 --- a/src/network/networkd-dhcp-prefix-delegation.c +++ b/src/network/networkd-dhcp-prefix-delegation.c @@ -271,8 +271,9 @@ static int dhcp_pd_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Reques assert(req); assert(link); + assert(route); - r = route_configure_handler_internal(rtnl, m, req, "Failed to add prefix route for DHCP delegated subnet prefix"); + r = route_configure_handler_internal(m, req, route); if (r <= 0) return r; @@ -328,8 +329,9 @@ static int dhcp_pd_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Requ int r; assert(link); + assert(address); - r = address_configure_handler_internal(rtnl, m, link, "Could not set DHCP-PD address"); + r = address_configure_handler_internal(m, link, address); if (r <= 0) return r; @@ -698,8 +700,9 @@ static int dhcp4_unreachable_route_handler(sd_netlink *rtnl, sd_netlink_message assert(req); assert(link); + assert(route); - r = route_configure_handler_internal(rtnl, m, req, "Failed to set unreachable route for DHCPv4 delegated prefix"); + r = route_configure_handler_internal(m, req, route); if (r <= 0) return r; @@ -715,8 +718,9 @@ static int dhcp6_unreachable_route_handler(sd_netlink *rtnl, sd_netlink_message assert(req); assert(link); + assert(route); - r = route_configure_handler_internal(rtnl, m, req, "Failed to set unreachable route for DHCPv6 delegated prefix"); + r = route_configure_handler_internal(m, req, route); if (r <= 0) return r; diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index 96b82a447ce..b94935ebd99 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -341,11 +341,11 @@ int dhcp4_check_ready(Link *link) { static int dhcp4_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, Route *route) { int r; - assert(m); assert(req); assert(link); + assert(route); - r = route_configure_handler_internal(rtnl, m, req, "Could not set DHCPv4 route"); + r = route_configure_handler_internal(m, req, route); if (r <= 0) return r; @@ -897,8 +897,9 @@ static int dhcp4_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Reques int r; assert(link); + assert(address); - r = address_configure_handler_internal(rtnl, m, link, "Could not set DHCPv4 address"); + r = address_configure_handler_internal(m, link, address); if (r <= 0) return r; diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c index 90b4b33bbc9..222d791e4b4 100644 --- a/src/network/networkd-dhcp6.c +++ b/src/network/networkd-dhcp6.c @@ -134,8 +134,9 @@ static int dhcp6_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Reques int r; assert(link); + assert(address); - r = address_configure_handler_internal(rtnl, m, link, "Could not set DHCPv6 address"); + r = address_configure_handler_internal(m, link, address); if (r <= 0) return r; diff --git a/src/network/networkd-ipv4ll.c b/src/network/networkd-ipv4ll.c index d154574a3ff..7c20c7f49f0 100644 --- a/src/network/networkd-ipv4ll.c +++ b/src/network/networkd-ipv4ll.c @@ -80,8 +80,9 @@ static int ipv4ll_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Reque assert(link); assert(!link->ipv4ll_address_configured); + assert(address); - r = address_configure_handler_internal(rtnl, m, link, "Could not set ipv4ll address"); + r = address_configure_handler_internal(m, link, address); if (r <= 0) return r; diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 0bd27a45c89..d58b21da9e2 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -2914,7 +2914,7 @@ int link_getlink_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link r = sd_netlink_message_get_errno(m); if (r < 0) { - log_link_message_warning_errno(link, m, r, error_msg); + log_link_message_warning_errno(link, m, r, "%s", error_msg); link_enter_failed(link); return 0; } diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c index 26d5611ba38..4b988dcaf49 100644 --- a/src/network/networkd-ndisc.c +++ b/src/network/networkd-ndisc.c @@ -370,8 +370,9 @@ static int ndisc_nexthop_handler(sd_netlink *rtnl, sd_netlink_message *m, Reques int r; assert(link); + assert(nexthop); - r = nexthop_configure_handler_internal(m, link, "Could not set NDisc route"); + r = nexthop_configure_handler_internal(m, link, nexthop); if (r <= 0) return r; @@ -441,8 +442,9 @@ static int ndisc_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Request assert(req); assert(link); + assert(route); - r = route_configure_handler_internal(rtnl, m, req, "Could not set NDisc route"); + r = route_configure_handler_internal(m, req, route); if (r <= 0) return r; @@ -670,8 +672,9 @@ static int ndisc_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Reques int r; assert(link); + assert(address); - r = address_configure_handler_internal(rtnl, m, link, "Could not set NDisc address"); + r = address_configure_handler_internal(m, link, address); if (r <= 0) return r; diff --git a/src/network/networkd-nexthop.c b/src/network/networkd-nexthop.c index 68bcd44ca5b..87056882a8c 100644 --- a/src/network/networkd-nexthop.c +++ b/src/network/networkd-nexthop.c @@ -687,16 +687,19 @@ static int nexthop_configure(NextHop *nexthop, Link *link, Request *req) { return request_call_netlink_async(link->manager->rtnl, m, req); } -int nexthop_configure_handler_internal(sd_netlink_message *m, Link *link, const char *error_msg) { +int nexthop_configure_handler_internal(sd_netlink_message *m, Link *link, NextHop *nexthop) { int r; assert(m); assert(link); - assert(error_msg); + assert(nexthop); r = sd_netlink_message_get_errno(m); if (r < 0 && r != -EEXIST) { - log_link_message_warning_errno(link, m, r, error_msg); + _cleanup_free_ char *str = NULL; + (void) nexthop_to_string(nexthop, link->manager, &str); + log_link_message_warning_errno(link, m, r, "Failed to set %s nexthop (%s)", + network_config_source_to_string(nexthop->source), strna(str)); link_enter_failed(link); return 0; } @@ -709,7 +712,7 @@ static int static_nexthop_handler(sd_netlink *rtnl, sd_netlink_message *m, Reque assert(link); - r = nexthop_configure_handler_internal(m, link, "Failed to set static nexthop"); + r = nexthop_configure_handler_internal(m, link, nexthop); if (r <= 0) return r; diff --git a/src/network/networkd-nexthop.h b/src/network/networkd-nexthop.h index 1b0679fc37f..8e345c6d53e 100644 --- a/src/network/networkd-nexthop.h +++ b/src/network/networkd-nexthop.h @@ -76,7 +76,7 @@ static inline int link_drop_static_nexthops(Link *link) { } void link_forget_nexthops(Link *link); -int nexthop_configure_handler_internal(sd_netlink_message *m, Link *link, const char *error_msg); +int nexthop_configure_handler_internal(sd_netlink_message *m, Link *link, NextHop *nexthop); int link_request_nexthop( Link *link, const NextHop *nexthop, diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c index 281433619ce..665155e1ba0 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c @@ -783,12 +783,12 @@ static int route_update_on_existing(Request *req) { return 0; } -int route_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Request *req, const char *error_msg) { +int route_configure_handler_internal(sd_netlink_message *m, Request *req, Route *route) { int r; assert(m); assert(req); - assert(error_msg); + assert(route); Link *link = ASSERT_PTR(req->link); @@ -806,7 +806,10 @@ int route_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Re return 1; } if (r < 0) { - log_link_message_warning_errno(link, m, r, error_msg); + _cleanup_free_ char *str = NULL; + (void) route_to_string(route, link->manager, &str); + log_link_message_warning_errno(link, m, r, "Failed to configure %s route (%s)", + network_config_source_to_string(route->source), strna(str)); link_enter_failed(link); return 0; } @@ -1030,9 +1033,11 @@ int link_request_route( static int static_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, Route *route) { int r; + assert(req); assert(link); + assert(route); - r = route_configure_handler_internal(rtnl, m, req, "Could not set static route"); + r = route_configure_handler_internal(m, req, route); if (r <= 0) return r; diff --git a/src/network/networkd-route.h b/src/network/networkd-route.h index 5dba22b4475..4ce81342a78 100644 --- a/src/network/networkd-route.h +++ b/src/network/networkd-route.h @@ -96,7 +96,7 @@ int route_new(Route **ret); int route_new_static(Network *network, const char *filename, unsigned section_line, Route **ret); int route_dup(const Route *src, const RouteNextHop *nh, Route **ret); -int route_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Request *req, const char *error_msg); +int route_configure_handler_internal(sd_netlink_message *m, Request *req, Route *route); int route_remove(Route *route, Manager *manager); int route_remove_and_cancel(Route *route, Manager *manager); diff --git a/src/network/networkd-setlink.c b/src/network/networkd-setlink.c index 9c4dbc74f75..255ad5a271e 100644 --- a/src/network/networkd-setlink.c +++ b/src/network/networkd-setlink.c @@ -56,10 +56,9 @@ static int set_link_handler_internal( r = sd_netlink_message_get_errno(m); if (r < 0) { - const char *error_msg; - - error_msg = strjoina("Failed to set ", request_type_to_string(req->type), ignore ? ", ignoring" : ""); - log_link_message_warning_errno(link, m, r, error_msg); + log_link_message_warning_errno(link, m, r, "Failed to set %s%s", + request_type_to_string(req->type), + ignore ? ", ignoring" : ""); if (!ignore) link_enter_failed(link); @@ -1073,9 +1072,7 @@ static int link_up_or_down_handler(sd_netlink *rtnl, sd_netlink_message *m, Requ if (r == -ENETDOWN && up && link_up_dsa_slave(link) > 0) log_link_message_debug_errno(link, m, r, "Could not bring up dsa slave, retrying again after dsa master becomes up"); else if (r < 0) - log_link_message_warning_errno(link, m, r, up ? - "Could not bring up interface, ignoring" : - "Could not bring down interface, ignoring"); + log_link_message_warning_errno(link, m, r, "Could not bring %s interface, ignoring", up ? "up" : "down"); r = link_call_getlink(link, get_link_update_flag_handler); if (r < 0) { @@ -1277,7 +1274,7 @@ int link_request_to_bring_up_or_down(Link *link, bool up) { return 0; } -static int link_up_or_down_now_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *msg) { +static int link_up_or_down_now_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link, bool up) { int r; assert(m); @@ -1291,7 +1288,7 @@ static int link_up_or_down_now_handler(sd_netlink *rtnl, sd_netlink_message *m, r = sd_netlink_message_get_errno(m); if (r < 0) - log_link_message_warning_errno(link, m, r, msg); + log_link_message_warning_errno(link, m, r, "Could not bring %s interface, ignoring", up ? "up" : "down"); r = link_call_getlink(link, get_link_update_flag_handler); if (r < 0) { @@ -1304,11 +1301,11 @@ static int link_up_or_down_now_handler(sd_netlink *rtnl, sd_netlink_message *m, } static int link_up_now_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) { - return link_up_or_down_now_handler(rtnl, m, link, "Could not bring up interface, ignoring"); + return link_up_or_down_now_handler(rtnl, m, link, /* up = */ true); } static int link_down_now_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) { - return link_up_or_down_now_handler(rtnl, m, link, "Could not bring down interface, ignoring"); + return link_up_or_down_now_handler(rtnl, m, link, /* up = */ false); } int link_up_or_down_now(Link *link, bool up) { diff --git a/src/network/networkd-util.c b/src/network/networkd-util.c index 80cce4dcdc9..87139ba47f4 100644 --- a/src/network/networkd-util.c +++ b/src/network/networkd-util.c @@ -233,17 +233,3 @@ int config_parse_mud_url( return free_and_replace(*url, unescaped); } - -int log_link_message_full_errno(Link *link, sd_netlink_message *m, int level, int err, const char *msg) { - const char *err_msg = NULL; - - /* link may be NULL. */ - - (void) sd_netlink_message_read_string(m, NLMSGERR_ATTR_MSG, &err_msg); - return log_link_full_errno(link, level, err, - "%s: %s%s%s%m", - msg, - strempty(err_msg), - err_msg && !endswith(err_msg, ".") ? "." : "", - err_msg ? " " : ""); -} diff --git a/src/network/networkd-util.h b/src/network/networkd-util.h index 2a3b5683fad..ea600043cff 100644 --- a/src/network/networkd-util.h +++ b/src/network/networkd-util.h @@ -153,15 +153,34 @@ sd_dhcp_lease_server_type_t dhcp_lease_server_type_from_string(const char *s) _p bool link_should_mark_config(Link *link, bool only_static, NetworkConfigSource source, uint8_t protocol); -int log_link_message_full_errno(Link *link, sd_netlink_message *m, int level, int err, const char *msg); -#define log_link_message_error_errno(link, m, err, msg) log_link_message_full_errno(link, m, LOG_ERR, err, msg) -#define log_link_message_warning_errno(link, m, err, msg) log_link_message_full_errno(link, m, LOG_WARNING, err, msg) -#define log_link_message_notice_errno(link, m, err, msg) log_link_message_full_errno(link, m, LOG_NOTICE, err, msg) -#define log_link_message_info_errno(link, m, err, msg) log_link_message_full_errno(link, m, LOG_INFO, err, msg) -#define log_link_message_debug_errno(link, m, err, msg) log_link_message_full_errno(link, m, LOG_DEBUG, err, msg) -#define log_message_full_errno(m, level, err, msg) log_link_message_full_errno(NULL, m, level, err, msg) -#define log_message_error_errno(m, err, msg) log_message_full_errno(m, LOG_ERR, err, msg) -#define log_message_warning_errno(m, err, msg) log_message_full_errno(m, LOG_WARNING, err, msg) -#define log_message_notice_errno(m, err, msg) log_message_full_errno(m, LOG_NOTICE, err, msg) -#define log_message_info_errno(m, err, msg) log_message_full_errno(m, LOG_INFO, err, msg) -#define log_message_debug_errno(m, err, msg) log_message_full_errno(m, LOG_DEBUG, err, msg) +#define _log_link_message_full_errno(link, link_u, message, error_msg, level, level_u, error, error_u, format, ...) \ + ({ \ + Link *link_u = (link); \ + int level_u = (level); \ + int error_u = (error); \ + \ + const char *error_msg = NULL; \ + if (message) \ + (void) sd_netlink_message_read_string(message, NLMSGERR_ATTR_MSG, &error_msg); \ + \ + error_msg ? \ + log_link_full_errno(link_u, level_u, error_u, format ": %s%s %m", ##__VA_ARGS__, \ + error_msg, endswith(error_msg, ".") ? "" : ".") : \ + log_link_full_errno(link_u, level_u, error_u, format ": %m", ##__VA_ARGS__); \ + }) + + +#define log_link_message_full_errno(link, message, level, error, format, ...) \ + _log_link_message_full_errno(link, UNIQ_T(lnk, UNIQ), message, UNIQ_T(emsg, UNIQ), level, UNIQ_T(lvl, UNIQ), error, UNIQ_T(err, UNIQ), format, ##__VA_ARGS__) + +#define log_link_message_error_errno(link, m, err, fmt, ...) log_link_message_full_errno(link, m, LOG_ERR, err, fmt, ##__VA_ARGS__) +#define log_link_message_warning_errno(link, m, err, fmt, ...) log_link_message_full_errno(link, m, LOG_WARNING, err, fmt, ##__VA_ARGS__) +#define log_link_message_notice_errno(link, m, err, fmt, ...) log_link_message_full_errno(link, m, LOG_NOTICE, err, fmt, ##__VA_ARGS__) +#define log_link_message_info_errno(link, m, err, fmt, ...) log_link_message_full_errno(link, m, LOG_INFO, err, fmt, ##__VA_ARGS__) +#define log_link_message_debug_errno(link, m, err, fmt, ...) log_link_message_full_errno(link, m, LOG_DEBUG, err, fmt, ##__VA_ARGS__) +#define log_message_full_errno(m, level, err, fmt, ...) log_link_message_full_errno(NULL, m, level, err, fmt, ##__VA_ARGS__) +#define log_message_error_errno(m, err, fmt, ...) log_message_full_errno(m, LOG_ERR, err, fmt, ##__VA_ARGS__) +#define log_message_warning_errno(m, err, fmt, ...) log_message_full_errno(m, LOG_WARNING, err, fmt, ##__VA_ARGS__) +#define log_message_notice_errno(m, err, fmt, ...) log_message_full_errno(m, LOG_NOTICE, err, fmt, ##__VA_ARGS__) +#define log_message_info_errno(m, err, fmt, ...) log_message_full_errno(m, LOG_INFO, err, fmt, ##__VA_ARGS__) +#define log_message_debug_errno(m, err, fmt, ...) log_message_full_errno(m, LOG_DEBUG, err, fmt, ##__VA_ARGS__)