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.
This commit is contained in:
Thomas Haller 2023-02-17 11:35:19 +01:00
parent 6ca537fa6a
commit 1d69b41db9
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
2 changed files with 22 additions and 9 deletions

View file

@ -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;

View file

@ -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);
}