summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libnm-platform/nm-linux-platform.c16
-rw-r--r--src/libnm-platform/nm-netlink.c15
2 files changed, 22 insertions, 9 deletions
diff --git a/src/libnm-platform/nm-linux-platform.c b/src/libnm-platform/nm-linux-platform.c
index d99c7e3005..04ac89cc89 100644
--- a/src/libnm-platform/nm-linux-platform.c
+++ b/src/libnm-platform/nm-linux-platform.c
@@ -10176,9 +10176,16 @@ continue_reading:
int errsv;
errsv = nlmsg_parse_error(msg.nm_nlh, &extack_msg);
- if (errsv == 0)
+ if (errsv == 0) {
seq_result = WAIT_FOR_NL_RESPONSE_RESULT_RESPONSE_OK;
- else {
+ if (extack_msg) {
+ _LOGD("%s: recvmsg: warning message from kernel: %s%s%s for request %d",
+ log_prefix,
+ NM_PRINT_FMT_QUOTE_STRING(extack_msg),
+ msg.nm_nlh->nlmsg_seq);
+ extack_msg = NULL;
+ }
+ } else {
_LOGD("%s: recvmsg: error message from kernel: %s (%d)%s%s%s for request %d",
log_prefix,
nm_strerror(errsv),
@@ -10636,9 +10643,10 @@ mptcp_addr_update(NMPlatform *platform, NMOptionBool add, const NMPlatformMptcpA
return nle;
}
- _LOGT("mptcp: %s address %s: success",
+ _LOGT("mptcp: %s address %s: success%s%s%s",
cmd_str,
- nm_platform_mptcp_addr_to_string(addr, sbuf, sizeof(sbuf)));
+ nm_platform_mptcp_addr_to_string(addr, sbuf, sizeof(sbuf)),
+ NM_PRINT_FMT_QUOTED(extack_msg[0] != '\0', " Warning: \"", extack_msg, "\"", ""));
return 0;
diff --git a/src/libnm-platform/nm-netlink.c b/src/libnm-platform/nm-netlink.c
index de042f8e90..e95768465a 100644
--- a/src/libnm-platform/nm-netlink.c
+++ b/src/libnm-platform/nm-netlink.c
@@ -313,9 +313,6 @@ nlmsg_parse_error(const struct nlmsghdr *nlh, const char **out_extack_msg)
e = nlmsg_data(nlh);
- if (!e->error)
- return 0;
-
if (NM_FLAGS_HAS(nlh->nlmsg_flags, NLM_F_ACK_TLVS) && out_extack_msg
&& nlh->nlmsg_len >= sizeof(*e) + e->msg.nlmsg_len) {
static const struct nla_policy policy[] = {
@@ -328,11 +325,19 @@ nlmsg_parse_error(const struct nlmsghdr *nlh, const char **out_extack_msg)
tlvs = NM_CAST_ALIGN(struct nlattr,
(((char *) e) + sizeof(*e) + e->msg.nlmsg_len - NLMSG_HDRLEN));
if (nla_parse_arr(tb, tlvs, nlh->nlmsg_len - sizeof(*e) - e->msg.nlmsg_len, policy) >= 0) {
- if (tb[NLMSGERR_ATTR_MSG])
- *out_extack_msg = nla_get_string(tb[NLMSGERR_ATTR_MSG]);
+ if (tb[NLMSGERR_ATTR_MSG]) {
+ const char *s;
+
+ s = nla_get_string(tb[NLMSGERR_ATTR_MSG]);
+ if (s[0] != '\0')
+ *out_extack_msg = s;
+ }
}
}
+ if (!e->error)
+ return 0;
+
return -nm_errno_from_native(e->error);
}