network,udev: several improvements for logging (#37337)

No functional changes. Continuation of #37269.
This commit is contained in:
Yu Watanabe
2025-05-06 12:43:15 +09:00
committed by GitHub
17 changed files with 181 additions and 130 deletions
+7 -5
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;
+1 -1
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);
@@ -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;
+4 -3
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;
+2 -1
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;
+2 -1
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;
+1 -1
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;
}
+6 -3
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;
+33 -15
View File
@@ -458,9 +458,30 @@ static int nexthop_acquire_id(Manager *manager, NextHop *nexthop) {
return -EBUSY;
}
void log_nexthop_debug(const NextHop *nexthop, const char *str, Manager *manager) {
_cleanup_free_ char *state = NULL, *group = NULL, *flags = NULL;
static int nexthop_to_string(const NextHop *nexthop, Manager *manager, char **ret) {
_cleanup_free_ char *group = NULL, *flags = NULL;
assert(nexthop);
assert(manager);
assert(ret);
(void) route_flags_to_string_alloc(nexthop->flags, &flags);
struct nexthop_grp *nhg;
HASHMAP_FOREACH(nhg, nexthop->group)
(void) strextendf_with_separator(&group, ",", "%"PRIu32":%"PRIu32, nhg->id, nhg->weight+1u);
if (asprintf(ret, "id: %"PRIu32", gw: %s, blackhole: %s, group: %s, flags: %s",
nexthop->id,
IN_ADDR_TO_STRING(nexthop->family, &nexthop->gw.address),
yes_no(nexthop->blackhole), strna(group), strna(flags)) < 0)
return -ENOMEM;
return 0;
}
void log_nexthop_debug(const NextHop *nexthop, const char *str, Manager *manager) {
_cleanup_free_ char *state = NULL, *nexthop_str = NULL;
Link *link = NULL;
assert(nexthop);
@@ -472,16 +493,10 @@ void log_nexthop_debug(const NextHop *nexthop, const char *str, Manager *manager
(void) link_get_by_index(manager, nexthop->ifindex, &link);
(void) network_config_state_to_string_alloc(nexthop->state, &state);
(void) route_flags_to_string_alloc(nexthop->flags, &flags);
(void) nexthop_to_string(nexthop, manager, &nexthop_str);
HASHMAP_FOREACH(nhg, nexthop->group)
(void) strextendf_with_separator(&group, ",", "%"PRIu32":%"PRIu32, nhg->id, nhg->weight+1u);
log_link_debug(link, "%s %s nexthop (%s): id: %"PRIu32", gw: %s, blackhole: %s, group: %s, flags: %s",
str, strna(network_config_source_to_string(nexthop->source)), strna(state),
nexthop->id,
IN_ADDR_TO_STRING(nexthop->family, &nexthop->gw.address),
yes_no(nexthop->blackhole), strna(group), strna(flags));
log_link_debug(link, "%s %s nexthop (%s): %s",
str, strna(network_config_source_to_string(nexthop->source)), strna(state), strna(nexthop_str));
}
static void nexthop_forget_dependents(NextHop *nexthop, Manager *manager) {
@@ -672,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;
}
@@ -694,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;
+1 -1
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,
+43 -23
View File
@@ -417,22 +417,14 @@ int route_dup(const Route *src, const RouteNextHop *nh, Route **ret) {
return 0;
}
void log_route_debug(const Route *route, const char *str, Manager *manager) {
_cleanup_free_ char *state = NULL, *nexthop = NULL, *prefsrc = NULL,
static int route_to_string(const Route *route, Manager *manager, char **ret) {
_cleanup_free_ char *nexthop = NULL, *prefsrc = NULL,
*table = NULL, *scope = NULL, *proto = NULL, *flags = NULL;
const char *dst, *src;
Link *link = NULL;
assert(route);
assert(str);
assert(manager);
if (!DEBUG_LOGGING)
return;
(void) route_get_link(manager, route, &link);
(void) network_config_state_to_string_alloc(route->state, &state);
assert(ret);
dst = in_addr_is_set(route->family, &route->dst) || route->dst_prefixlen > 0 ?
IN_ADDR_PREFIX_TO_STRING(route->family, &route->dst, route->dst_prefixlen) : NULL;
@@ -448,14 +440,37 @@ void log_route_debug(const Route *route, const char *str, Manager *manager) {
(void) route_protocol_full_to_string_alloc(route->protocol, &proto);
(void) route_flags_to_string_alloc(route->flags, &flags);
log_link_debug(link,
"%s %s route (%s): dst: %s, src: %s, %s, prefsrc: %s, "
"table: %s, priority: %"PRIu32", "
"proto: %s, scope: %s, type: %s, flags: %s",
str, strna(network_config_source_to_string(route->source)), strna(state),
strna(dst), strna(src), strna(nexthop), strna(prefsrc),
strna(table), route->priority,
strna(proto), strna(scope), strna(route_type_to_string(route->type)), strna(flags));
if (asprintf(ret,
"dst: %s, src: %s, %s, prefsrc: %s, "
"table: %s, priority: %"PRIu32", "
"proto: %s, scope: %s, "
"type: %s, flags: %s",
strna(dst), strna(src), strna(nexthop), strna(prefsrc),
strna(table), route->priority,
strna(proto), strna(scope),
strna(route_type_to_string(route->type)), strna(flags)) < 0)
return -ENOMEM;
return 0;
}
void log_route_debug(const Route *route, const char *str, Manager *manager) {
_cleanup_free_ char *state = NULL, *route_str = NULL;
Link *link = NULL;
assert(route);
assert(str);
assert(manager);
if (!DEBUG_LOGGING)
return;
(void) route_get_link(manager, route, &link);
(void) network_config_state_to_string_alloc(route->state, &state);
(void) route_to_string(route, manager, &route_str);
log_link_debug(link, "%s %s route (%s): %s",
str, strna(network_config_source_to_string(route->source)), strna(state), strna(route_str));
}
static void route_forget(Manager *manager, Route *route, const char *msg) {
@@ -768,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);
@@ -791,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;
}
@@ -1015,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;
+1 -1
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);
+8 -11
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) {
+8 -5
View File
@@ -17,7 +17,9 @@ static int sr_iov_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req,
r = sd_netlink_message_get_errno(m);
if (r < 0)
log_link_message_warning_errno(link, m, r, "Failed to set up SR-IOV virtual function, ignoring");
log_link_message_warning_errno(link, m, r, "Failed to set up %s for SR-IOV virtual function %"PRIu32", ignoring",
sr_iov_attribute_to_string(req->type - _REQUEST_TYPE_SRIOV_BASE),
sr_iov->vf);
if (link->sr_iov_messages == 0) {
log_link_debug(link, "Applied settings for SR-IOV virtual functions.");
@@ -70,7 +72,8 @@ static int sr_iov_process_request(Request *req, Link *link, SRIOV *sr_iov) {
r = sr_iov_configure(sr_iov, link, req);
if (r < 0)
return log_link_warning_errno(link, r,
"Failed to set up SR-IOV virtual function %"PRIu32": %m",
"Failed to set up %s for SR-IOV virtual function %"PRIu32": %m",
sr_iov_attribute_to_string(req->type - _REQUEST_TYPE_SRIOV_BASE),
sr_iov->vf);
return 1;
@@ -103,8 +106,8 @@ int link_request_sr_iov_vfs(Link *link) {
NULL);
if (r < 0)
return log_link_warning_errno(link, r,
"Failed to request to set up SR-IOV virtual function %"PRIu32": %m",
sr_iov->vf);
"Failed to request to set up %s for SR-IOV virtual function %"PRIu32": %m",
sr_iov_attribute_to_string(attr), sr_iov->vf);
}
}
@@ -112,7 +115,7 @@ int link_request_sr_iov_vfs(Link *link) {
link->sr_iov_configured = true;
link_check_ready(link);
} else
log_link_debug(link, "Setting up SR-IOV virtual functions.");
log_link_debug(link, "Applying settings for SR-IOV virtual functions.");
return 0;
}
-14
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 ? " " : "");
}
+31 -12
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__)
+25 -29
View File
@@ -854,38 +854,32 @@ static int link_generate_alternative_names(Link *link) {
return 0;
}
static int sr_iov_configure(Link *link, sd_netlink **rtnl, SRIOV *sr_iov) {
static int sr_iov_configure(Link *link, sd_netlink **rtnl, SRIOV *sr_iov, SRIOVAttribute attr) {
int r;
assert(link);
assert(rtnl);
assert(link->ifindex > 0);
for (SRIOVAttribute attr = 0; attr < _SR_IOV_ATTRIBUTE_MAX; attr++) {
if (!sr_iov_has_config(sr_iov, attr))
continue;
if (!sr_iov_has_config(sr_iov, attr))
return 0;
if (!*rtnl) {
r = sd_netlink_open(rtnl);
if (r < 0)
return r;
}
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
r = sd_rtnl_message_new_link(*rtnl, &req, RTM_SETLINK, link->ifindex);
if (r < 0)
return r;
r = sr_iov_set_netlink_message(sr_iov, attr, req);
if (r < 0)
return r;
r = sd_netlink_call(*rtnl, req, 0, NULL);
if (!*rtnl) {
r = sd_netlink_open(rtnl);
if (r < 0)
return r;
}
return 0;
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
r = sd_rtnl_message_new_link(*rtnl, &req, RTM_SETLINK, link->ifindex);
if (r < 0)
return r;
r = sr_iov_set_netlink_message(sr_iov, attr, req);
if (r < 0)
return r;
return sd_netlink_call(*rtnl, req, 0, NULL);
}
static int link_apply_sr_iov_config(Link *link) {
@@ -911,25 +905,27 @@ static int link_apply_sr_iov_config(Link *link) {
r = sr_iov_get_num_vfs(link->event->dev, &n);
if (r < 0) {
log_link_warning_errno(link, r, "Failed to get the number of SR-IOV virtual functions, ignoring [SR-IOV] sections: %m");
log_link_warning_errno(link, r, "Failed to get the number of SR-IOV virtual functions, ignoring all [SR-IOV] sections: %m");
return 0;
}
if (n == 0) {
log_link_warning(link, "No SR-IOV virtual function exists, ignoring [SR-IOV] sections: %m");
log_link_warning(link, "No SR-IOV virtual function exists, ignoring all [SR-IOV] sections: %m");
return 0;
}
ORDERED_HASHMAP_FOREACH(sr_iov, link->config->sr_iov_by_section) {
if (sr_iov->vf >= n) {
log_link_warning(link, "SR-IOV virtual function %"PRIu32" does not exist, ignoring.", sr_iov->vf);
log_link_warning(link, "SR-IOV virtual function %"PRIu32" does not exist, ignoring [SR-IOV] section for the virtual function.", sr_iov->vf);
continue;
}
r = sr_iov_configure(link, &link->event->rtnl, sr_iov);
if (r < 0)
log_link_warning_errno(link, r,
"Failed to set up SR-IOV virtual function %"PRIu32", ignoring: %m",
sr_iov->vf);
for (SRIOVAttribute attr = 0; attr < _SR_IOV_ATTRIBUTE_MAX; attr++) {
r = sr_iov_configure(link, &link->event->rtnl, sr_iov, attr);
if (r < 0)
log_link_warning_errno(link, r,
"Failed to set up %s for SR-IOV virtual function %"PRIu32", ignoring: %m",
sr_iov_attribute_to_string(attr), sr_iov->vf);
}
}
return 0;