r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST) {
- log_link_warning_errno(link, r, "could not set address label: %m");
+ log_link_message_warning_errno(link, m, r, "Could not set address label");
link_enter_failed(link);
return 1;
} else if (r >= 0)
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EADDRNOTAVAIL)
- log_link_warning_errno(link, r, "Could not drop address: %m");
+ log_link_message_warning_errno(link, m, r, "Could not drop address");
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST)
- log_link_error_errno(link, r, "Could not add VLAN to bridge port: %m");
+ log_link_message_warning_errno(link, m, r, "Could not add VLAN to bridge port");
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0)
/* we warn but don't fail the link, as it may be brought up later */
- log_link_warning_errno(link, r, "Could not bring up interface: %m");
+ log_link_message_warning_errno(link, m, r, "Could not bring up interface");
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST) {
- log_link_error_errno(link, r, "Failed to configure CAN link: %m");
+ log_link_message_warning_errno(link, m, r, "Failed to configure CAN link");
link_enter_failed(link);
}
r = sd_netlink_message_get_errno(m);
if (r < 0) {
- log_link_warning_errno(link, r, "Could not bring down interface: %m");
+ log_link_message_warning_errno(link, m, r, "Could not bring down interface");
link_enter_failed(link);
return 1;
}
/* It seems kernel does not support that the prefix route cannot be configured with
* route table. Let's once drop the config and reconfigure them later. */
- log_link_debug_errno(link, r, "Could not set DHCPv4 route, retrying later: %m");
+ log_link_message_debug_errno(link, m, r, "Could not set DHCPv4 route, retrying later: %m");
link->dhcp4_route_failed = true;
link->manager->dhcp4_prefix_root_cannot_set_table = true;
} else if (r < 0 && r != -EEXIST) {
- log_link_error_errno(link, r, "Could not set DHCPv4 route: %m");
+ log_link_message_warning_errno(link, m, r, "Could not set DHCPv4 route: %m");
link_enter_failed(link);
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0)
- log_link_debug_errno(link, r, "Failed to remove DHCPv4 address, ignoring: %m");
+ log_link_message_warning_errno(link, m, r, "Failed to remove DHCPv4 address, ignoring");
else
(void) manager_rtnl_process_address(rtnl, m, link->manager);
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST) {
- log_link_error_errno(link, r, "Could not set DHCPv4 address: %m");
+ log_link_message_warning_errno(link, m, r, "Could not set DHCPv4 address");
link_enter_failed(link);
return 1;
} else if (r >= 0)
r = sd_netlink_message_get_errno(m);
if (r < 0)
- log_link_debug_errno(link, r, "Received error on unreachable route removal for DHCPv6 delegated subnet: %m");
+ log_link_message_warning_errno(link, m, r, "Received error on unreachable route removal for DHCPv6 delegated subnet");
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST)
- log_link_debug_errno(link, r, "Received error when adding unreachable route for DHCPv6 delegated subnet: %m");
+ log_link_message_warning_errno(link, m, r, "Received error when adding unreachable route for DHCPv6 delegated subnet");
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST) {
- log_link_error_errno(link, r, "Could not set DHCPv6 address: %m");
+ log_link_message_warning_errno(link, m, r, "Could not set DHCPv6 address");
link_enter_failed(link);
return 1;
} else if (r >= 0)
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST) {
- log_link_debug_errno(link, r, "Received error adding DHCPv6 Prefix Delegation route: %m");
+ log_link_message_warning_errno(link, m, r, "Received error adding DHCPv6 Prefix Delegation route");
link_enter_failed(link);
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0) {
- log_link_debug_errno(link, r, "Received error on DHCPv6 Prefix Delegation route removal: %m");
+ log_link_message_warning_errno(link, m, r, "Received error on DHCPv6 Prefix Delegation route removal");
link_enter_failed(link);
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST) {
- log_link_error_errno(link, r, "Could not add FDB entry: %m");
+ log_link_message_warning_errno(link, m, r, "Could not add FDB entry");
link_enter_failed(link);
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST) {
- log_link_error_errno(link, r, "could not set ipv4ll address: %m");
+ log_link_message_warning_errno(link, m, r, "could not set ipv4ll address");
link_enter_failed(link);
return 1;
} else if (r >= 0)
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST)
- log_link_error_errno(link, r, "Could not add IPv6 proxy ndp address entry: %m");
+ log_link_message_warning_errno(link, m, r, "Could not add IPv6 proxy ndp address entry, ignoring");
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST) {
- log_link_warning_errno(link, r, "Could not set nexthop: %m");
+ log_link_message_warning_errno(link, m, r, "Could not set nexthop");
link_enter_failed(link);
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST) {
- log_link_warning_errno(link, r, "Could not set route: %m");
+ log_link_message_warning_errno(link, m, r, "Could not set route");
link_enter_failed(link);
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST) {
- log_link_warning_errno(link, r, "could not set address: %m");
+ log_link_message_warning_errno(link, m, r, "Could not set address");
link_enter_failed(link);
return 1;
} else if (r >= 0)
r = sd_netlink_message_get_errno(m);
if (r < 0)
- log_link_warning_errno(link, r, "Could not set MTU, ignoring: %m");
+ log_link_message_warning_errno(link, m, r, "Could not set MTU, ignoring");
else
log_link_debug(link, "Setting MTU done.");
r = sd_netlink_message_get_errno(m);
if (r < 0)
- log_link_warning_errno(link, r, "Could not set link flags, ignoring: %m");
+ log_link_message_warning_errno(link, m, r, "Could not set link flags, ignoring");
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0)
- log_link_warning_errno(link, r, "Could not set address genmode for interface, ignoring: %m");
+ log_link_message_warning_errno(link, m, r, "Could not set address genmode for interface, ignoring");
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0)
/* we warn but don't fail the link, as it may be brought up later */
- log_link_warning_errno(link, r, "Could not bring up interface: %m");
+ log_link_message_warning_errno(link, m, r, "Could not bring up interface");
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0)
- log_link_warning_errno(link, r, "Could not bring down interface: %m");
+ log_link_message_warning_errno(link, m, r, "Could not bring down interface");
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST) {
- log_link_error_errno(link, r, "Could not join netdev: %m");
+ log_link_message_warning_errno(link, m, r, "Could not join netdev");
link_enter_failed(link);
return 1;
}
};
DEFINE_STRING_TABLE_LOOKUP(link_state, LinkState);
+
+int log_link_message_full_errno(Link *link, sd_netlink_message *m, int level, int err, const char *msg) {
+ const char *err_msg = NULL;
+
+ (void) sd_netlink_message_read_string(m, NLMSGERR_ATTR_MSG, &err_msg);
+ return log_link_full(link, level, err, "%s: %s%s%m", msg, strempty(err_msg), err_msg ? " " : "");
+}
int link_reconfigure(Link *link, bool force);
+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 ADDRESS_FMT_VAL(address) \
be32toh((address).s_addr) >> 24, \
(be32toh((address).s_addr) >> 16) & 0xFFu, \
/* use 8 MB for receive socket kernel queue. */
#define RCVBUF_SIZE (8*1024*1024)
+static int log_message_warning_errno(sd_netlink_message *m, int err, const char *msg) {
+ const char *err_msg = NULL;
+
+ (void) sd_netlink_message_read_string(m, NLMSGERR_ATTR_MSG, &err_msg);
+ return log_warning_errno(err, "%s: %s%s%m", msg, strempty(err_msg), err_msg ? " " : "");
+}
+
static int setup_default_address_pool(Manager *m) {
AddressPool *p;
int r;
if (sd_netlink_message_is_error(message)) {
r = sd_netlink_message_get_errno(message);
if (r < 0)
- log_warning_errno(r, "rtnl: failed to receive route message, ignoring: %m");
+ log_message_warning_errno(message, r, "rtnl: failed to receive route message, ignoring");
return 0;
}
if (sd_netlink_message_is_error(message)) {
r = sd_netlink_message_get_errno(message);
if (r < 0)
- log_warning_errno(r, "rtnl: failed to receive neighbor message, ignoring: %m");
+ log_message_warning_errno(message, r, "rtnl: failed to receive neighbor message, ignoring");
return 0;
}
if (sd_netlink_message_is_error(message)) {
r = sd_netlink_message_get_errno(message);
if (r < 0)
- log_warning_errno(r, "rtnl: failed to receive address message, ignoring: %m");
+ log_message_warning_errno(message, r, "rtnl: failed to receive address message, ignoring");
return 0;
}
if (sd_netlink_message_is_error(message)) {
r = sd_netlink_message_get_errno(message);
if (r < 0)
- log_warning_errno(r, "rtnl: Could not receive link message, ignoring: %m");
+ log_message_warning_errno(message, r, "rtnl: Could not receive link message, ignoring");
return 0;
}
if (sd_netlink_message_is_error(message)) {
r = sd_netlink_message_get_errno(message);
if (r < 0)
- log_warning_errno(r, "rtnl: failed to receive rule message, ignoring: %m");
+ log_message_warning_errno(message, r, "rtnl: failed to receive rule message, ignoring");
return 0;
}
if (sd_netlink_message_is_error(message)) {
r = sd_netlink_message_get_errno(message);
if (r < 0)
- log_warning_errno(r, "rtnl: failed to receive rule message, ignoring: %m");
+ log_message_warning_errno(message, r, "rtnl: failed to receive rule message, ignoring");
return 0;
}
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST) {
- log_link_error_errno(link, r, "Could not set NDisc route or address: %m");
+ log_link_message_error_errno(link, m, r, "Could not set NDisc route or address");
link_enter_failed(link);
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST) {
- log_link_error_errno(link, r, "Could not set NDisc route or address: %m");
+ log_link_message_error_errno(link, m, r, "Could not set NDisc route or address");
link_enter_failed(link);
return 1;
} else if (r >= 0)
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST)
/* Neighbor may not exist yet. So, do not enter failed state here. */
- log_link_warning_errno(link, r, "Could not set neighbor, ignoring: %m");
+ log_link_message_warning_errno(link, m, r, "Could not set neighbor, ignoring");
if (link->neighbor_messages == 0) {
log_link_debug(link, "Neighbors set");
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -ESRCH)
/* Neighbor may not exist because it already got deleted, ignore that. */
- log_link_warning_errno(link, r, "Could not remove neighbor: %m");
+ log_link_message_warning_errno(link, m, r, "Could not remove neighbor");
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -ESRCH)
- log_link_warning_errno(link, r, "Could not drop nexthop: %m");
+ log_link_message_warning_errno(link, m, r, "Could not drop nexthop, ignoring");
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -ESRCH)
- log_link_warning_errno(link, r, "Could not drop route: %m");
+ log_link_message_warning_errno(link, m, r, "Could not drop route, ignoring");
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0)
- log_link_warning_errno(link, r, "Could not drop routing policy rule: %m");
+ log_link_message_warning_errno(link, m, r, "Could not drop routing policy rule");
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST) {
- log_link_warning_errno(link, r, "Could not add routing policy rule: %m");
+ log_link_message_warning_errno(link, m, r, "Could not add routing policy rule");
link_enter_failed(link);
return 1;
}
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST) {
- log_link_error_errno(link, r, "Could not set QDisc: %m");
+ log_link_message_error_errno(link, m, r, "Could not set QDisc: %m");
link_enter_failed(link);
return 1;
}