summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2022-06-17 10:26:47 +0200
committerThomas Haller <thaller@redhat.com>2022-06-17 19:40:37 +0200
commitf5d94284688f9e739658b73809335f3057360db0 (patch)
treec1be9d23ef336911384ba178de4cca1803d41662
parent3ab66fd341c77d54c87d637fadb809e28663b946 (diff)
downloadNetworkManager-f5d94284688f9e739658b73809335f3057360db0.tar.gz
platform/netlink: add netlink_protocol argument to nl_nlmsghdr_to_str()
The meaning of the header depends on the netlink protocol. Add that parameter, so we can also handle genl.
-rw-r--r--src/libnm-platform/nm-linux-platform.c6
-rw-r--r--src/libnm-platform/nm-netlink.c194
-rw-r--r--src/libnm-platform/nm-netlink.h3
3 files changed, 105 insertions, 98 deletions
diff --git a/src/libnm-platform/nm-linux-platform.c b/src/libnm-platform/nm-linux-platform.c
index 767e957cfd..15c5c6db7c 100644
--- a/src/libnm-platform/nm-linux-platform.c
+++ b/src/libnm-platform/nm-linux-platform.c
@@ -7053,7 +7053,7 @@ event_valid_msg(NMPlatform *platform, struct nl_msg *msg, gboolean handle_events
obj = nmp_object_new_from_nl(platform, cache, msg, is_del, &parse_nlmsg_iter);
if (!obj) {
_LOGT("event-notification: %s: ignore",
- nl_nlmsghdr_to_str(msghdr, buf_nlmsghdr, sizeof(buf_nlmsghdr)));
+ nl_nlmsghdr_to_str(NETLINK_ROUTE, msghdr, buf_nlmsghdr, sizeof(buf_nlmsghdr)));
return;
}
@@ -7071,7 +7071,7 @@ event_valid_msg(NMPlatform *platform, struct nl_msg *msg, gboolean handle_events
}
_LOGT("event-notification: %s%s: %s",
- nl_nlmsghdr_to_str(msghdr, buf_nlmsghdr, sizeof(buf_nlmsghdr)),
+ nl_nlmsghdr_to_str(NETLINK_ROUTE, msghdr, buf_nlmsghdr, sizeof(buf_nlmsghdr)),
is_dump ? ", in-dump" : "",
nmp_object_to_string(obj,
is_del ? NMP_OBJECT_TO_STRING_ID : NMP_OBJECT_TO_STRING_PUBLIC,
@@ -9289,7 +9289,7 @@ continue_reading:
}
_LOGt("netlink: recvmsg: new message %s",
- nl_nlmsghdr_to_str(hdr, buf_nlmsghdr, sizeof(buf_nlmsghdr)));
+ nl_nlmsghdr_to_str(NETLINK_ROUTE, hdr, buf_nlmsghdr, sizeof(buf_nlmsghdr)));
nlmsg_set_creds(msg, &creds);
diff --git a/src/libnm-platform/nm-netlink.c b/src/libnm-platform/nm-netlink.c
index 4c55679983..05790cb054 100644
--- a/src/libnm-platform/nm-netlink.c
+++ b/src/libnm-platform/nm-netlink.c
@@ -84,10 +84,10 @@ NM_UTILS_FLAGS2STR_DEFINE(nl_nlmsg_flags2str,
/*****************************************************************************/
const char *
-nl_nlmsghdr_to_str(const struct nlmsghdr *hdr, char *buf, gsize len)
+nl_nlmsghdr_to_str(int netlink_protocol, const struct nlmsghdr *hdr, char *buf, gsize len)
{
const char *b;
- const char *s;
+ const char *s = NULL;
guint flags, flags_before;
const char *prefix;
@@ -96,78 +96,81 @@ nl_nlmsghdr_to_str(const struct nlmsghdr *hdr, char *buf, gsize len)
b = buf;
- switch (hdr->nlmsg_type) {
- case RTM_GETLINK:
- s = "RTM_GETLINK";
- break;
- case RTM_NEWLINK:
- s = "RTM_NEWLINK";
- break;
- case RTM_DELLINK:
- s = "RTM_DELLINK";
- break;
- case RTM_SETLINK:
- s = "RTM_SETLINK";
- break;
- case RTM_GETADDR:
- s = "RTM_GETADDR";
- break;
- case RTM_NEWADDR:
- s = "RTM_NEWADDR";
- break;
- case RTM_DELADDR:
- s = "RTM_DELADDR";
- break;
- case RTM_GETROUTE:
- s = "RTM_GETROUTE";
- break;
- case RTM_NEWROUTE:
- s = "RTM_NEWROUTE";
- break;
- case RTM_DELROUTE:
- s = "RTM_DELROUTE";
- break;
- case RTM_GETRULE:
- s = "RTM_GETRULE";
- break;
- case RTM_NEWRULE:
- s = "RTM_NEWRULE";
- break;
- case RTM_DELRULE:
- s = "RTM_DELRULE";
- break;
- case RTM_GETQDISC:
- s = "RTM_GETQDISC";
- break;
- case RTM_NEWQDISC:
- s = "RTM_NEWQDISC";
- break;
- case RTM_DELQDISC:
- s = "RTM_DELQDISC";
- break;
- case RTM_GETTFILTER:
- s = "RTM_GETTFILTER";
- break;
- case RTM_NEWTFILTER:
- s = "RTM_NEWTFILTER";
- break;
- case RTM_DELTFILTER:
- s = "RTM_DELTFILTER";
- break;
- case NLMSG_NOOP:
- s = "NLMSG_NOOP";
- break;
- case NLMSG_ERROR:
- s = "NLMSG_ERROR";
- break;
- case NLMSG_DONE:
- s = "NLMSG_DONE";
- break;
- case NLMSG_OVERRUN:
- s = "NLMSG_OVERRUN";
+ switch (netlink_protocol) {
+ case NETLINK_ROUTE:
+ switch (hdr->nlmsg_type) {
+ case RTM_GETLINK:
+ s = "RTM_GETLINK";
+ break;
+ case RTM_NEWLINK:
+ s = "RTM_NEWLINK";
+ break;
+ case RTM_DELLINK:
+ s = "RTM_DELLINK";
+ break;
+ case RTM_SETLINK:
+ s = "RTM_SETLINK";
+ break;
+ case RTM_GETADDR:
+ s = "RTM_GETADDR";
+ break;
+ case RTM_NEWADDR:
+ s = "RTM_NEWADDR";
+ break;
+ case RTM_DELADDR:
+ s = "RTM_DELADDR";
+ break;
+ case RTM_GETROUTE:
+ s = "RTM_GETROUTE";
+ break;
+ case RTM_NEWROUTE:
+ s = "RTM_NEWROUTE";
+ break;
+ case RTM_DELROUTE:
+ s = "RTM_DELROUTE";
+ break;
+ case RTM_GETRULE:
+ s = "RTM_GETRULE";
+ break;
+ case RTM_NEWRULE:
+ s = "RTM_NEWRULE";
+ break;
+ case RTM_DELRULE:
+ s = "RTM_DELRULE";
+ break;
+ case RTM_GETQDISC:
+ s = "RTM_GETQDISC";
+ break;
+ case RTM_NEWQDISC:
+ s = "RTM_NEWQDISC";
+ break;
+ case RTM_DELQDISC:
+ s = "RTM_DELQDISC";
+ break;
+ case RTM_GETTFILTER:
+ s = "RTM_GETTFILTER";
+ break;
+ case RTM_NEWTFILTER:
+ s = "RTM_NEWTFILTER";
+ break;
+ case RTM_DELTFILTER:
+ s = "RTM_DELTFILTER";
+ break;
+ case NLMSG_NOOP:
+ s = "NLMSG_NOOP";
+ break;
+ case NLMSG_ERROR:
+ s = "NLMSG_ERROR";
+ break;
+ case NLMSG_DONE:
+ s = "NLMSG_DONE";
+ break;
+ case NLMSG_OVERRUN:
+ s = "NLMSG_OVERRUN";
+ break;
+ }
break;
- default:
- s = NULL;
+ case NETLINK_GENERIC:
break;
}
@@ -208,27 +211,30 @@ nl_nlmsghdr_to_str(const struct nlmsghdr *hdr, char *buf, gsize len)
if (flags_before != flags)
prefix = ";";
- switch (hdr->nlmsg_type) {
- case RTM_NEWLINK:
- case RTM_NEWADDR:
- case RTM_NEWROUTE:
- case RTM_NEWQDISC:
- case RTM_NEWTFILTER:
- _F(NLM_F_REPLACE, "replace");
- _F(NLM_F_EXCL, "excl");
- _F(NLM_F_CREATE, "create");
- _F(NLM_F_APPEND, "append");
- break;
- case RTM_GETLINK:
- case RTM_GETADDR:
- case RTM_GETROUTE:
- case RTM_DELQDISC:
- case RTM_DELTFILTER:
- _F(NLM_F_DUMP, "dump");
- _F(NLM_F_ROOT, "root");
- _F(NLM_F_MATCH, "match");
- _F(NLM_F_ATOMIC, "atomic");
- break;
+ switch (netlink_protocol) {
+ case NETLINK_ROUTE:
+ switch (hdr->nlmsg_type) {
+ case RTM_NEWLINK:
+ case RTM_NEWADDR:
+ case RTM_NEWROUTE:
+ case RTM_NEWQDISC:
+ case RTM_NEWTFILTER:
+ _F(NLM_F_REPLACE, "replace");
+ _F(NLM_F_EXCL, "excl");
+ _F(NLM_F_CREATE, "create");
+ _F(NLM_F_APPEND, "append");
+ break;
+ case RTM_GETLINK:
+ case RTM_GETADDR:
+ case RTM_GETROUTE:
+ case RTM_DELQDISC:
+ case RTM_DELTFILTER:
+ _F(NLM_F_DUMP, "dump");
+ _F(NLM_F_ROOT, "root");
+ _F(NLM_F_MATCH, "match");
+ _F(NLM_F_ATOMIC, "atomic");
+ break;
+ }
}
#undef _F
diff --git a/src/libnm-platform/nm-netlink.h b/src/libnm-platform/nm-netlink.h
index 441a123333..11dd559766 100644
--- a/src/libnm-platform/nm-netlink.h
+++ b/src/libnm-platform/nm-netlink.h
@@ -49,7 +49,8 @@ const char *nl_nlmsgtype2str(int type, char *buf, size_t size);
const char *nl_nlmsg_flags2str(int flags, char *buf, size_t len);
-const char *nl_nlmsghdr_to_str(const struct nlmsghdr *hdr, char *buf, gsize len);
+const char *
+nl_nlmsghdr_to_str(int netlink_protocol, const struct nlmsghdr *hdr, char *buf, gsize len);
/*****************************************************************************/