summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2023-02-17 11:35:19 +0100
committerThomas Haller <thaller@redhat.com>2023-02-28 12:08:06 +0100
commit1d69b41db92b084ac248e25d45d850c457833bd0 (patch)
treec07525f398a6c7beb800f0383b8c481767778b39
parent6ca537fa6a1af8338da4d4ca0e872445e9bb9f53 (diff)
downloadNetworkManager-1d69b41db92b084ac248e25d45d850c457833bd0.tar.gz
platform: log extack warning messages for netlink requests
The extack can also be returned on success. In that case, they are warnings. Log them, it might be useful.
-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);
}