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;
}
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;
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);
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;
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;
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;
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;
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;
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;
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;
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;
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;
}
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;
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;
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;
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;
}
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;
}
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,
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);
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;
}
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;
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);
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);
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) {
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);
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) {
}
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) {
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 ? " " : "");
-}
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__)