network: make log_link_message_full_errno() take format string

This commit is contained in:
Yu Watanabe
2025-05-05 01:33:05 +09:00
parent 3d026764f1
commit d28746ef55
15 changed files with 88 additions and 66 deletions

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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,

View File

@@ -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;

View File

@@ -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);

View File

@@ -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) {

View File

@@ -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 ? " " : "");
}

View File

@@ -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__)