diff options
-rw-r--r-- | src/libnm-platform/nm-linux-platform.c | 16 | ||||
-rw-r--r-- | src/libnm-platform/nm-netlink.c | 15 |
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); } |