platform/netlink: extend nl_nlmsghdr_to_str() for genl messages
Print more details for generic netlink messages. Also, pass the group that we obtained via NETLINK_PKTINFO. Also, factor out simple to-string methods.
This commit is contained in:
@@ -7052,7 +7052,7 @@ _rtnl_handle_msg(NMPlatform *platform, const struct nl_msg_lite *msg, gboolean h
|
|||||||
obj = nmp_object_new_from_nl(platform, cache, msg, is_del, &parse_nlmsg_iter);
|
obj = nmp_object_new_from_nl(platform, cache, msg, is_del, &parse_nlmsg_iter);
|
||||||
if (!obj) {
|
if (!obj) {
|
||||||
_LOGT("event-notification: %s: ignore",
|
_LOGT("event-notification: %s: ignore",
|
||||||
nl_nlmsghdr_to_str(NETLINK_ROUTE, msghdr, buf_nlmsghdr, sizeof(buf_nlmsghdr)));
|
nl_nlmsghdr_to_str(NETLINK_ROUTE, 0, msghdr, buf_nlmsghdr, sizeof(buf_nlmsghdr)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -7070,7 +7070,7 @@ _rtnl_handle_msg(NMPlatform *platform, const struct nl_msg_lite *msg, gboolean h
|
|||||||
}
|
}
|
||||||
|
|
||||||
_LOGT("event-notification: %s%s: %s",
|
_LOGT("event-notification: %s%s: %s",
|
||||||
nl_nlmsghdr_to_str(NETLINK_ROUTE, msghdr, buf_nlmsghdr, sizeof(buf_nlmsghdr)),
|
nl_nlmsghdr_to_str(NETLINK_ROUTE, 0, msghdr, buf_nlmsghdr, sizeof(buf_nlmsghdr)),
|
||||||
is_dump ? ", in-dump" : "",
|
is_dump ? ", in-dump" : "",
|
||||||
nmp_object_to_string(obj,
|
nmp_object_to_string(obj,
|
||||||
is_del ? NMP_OBJECT_TO_STRING_ID : NMP_OBJECT_TO_STRING_PUBLIC,
|
is_del ? NMP_OBJECT_TO_STRING_ID : NMP_OBJECT_TO_STRING_PUBLIC,
|
||||||
@@ -9297,7 +9297,11 @@ continue_reading:
|
|||||||
|
|
||||||
_LOGt("%s: recvmsg: new message %s",
|
_LOGt("%s: recvmsg: new message %s",
|
||||||
log_prefix,
|
log_prefix,
|
||||||
nl_nlmsghdr_to_str(netlink_protocol, msg.nm_nlh, buf_nlmsghdr, sizeof(buf_nlmsghdr)));
|
nl_nlmsghdr_to_str(netlink_protocol,
|
||||||
|
0,
|
||||||
|
msg.nm_nlh,
|
||||||
|
buf_nlmsghdr,
|
||||||
|
sizeof(buf_nlmsghdr)));
|
||||||
|
|
||||||
if (msg.nm_nlh->nlmsg_flags & NLM_F_MULTI)
|
if (msg.nm_nlh->nlmsg_flags & NLM_F_MULTI)
|
||||||
multipart = TRUE;
|
multipart = TRUE;
|
||||||
|
@@ -80,10 +80,57 @@ NM_UTILS_FLAGS2STR_DEFINE(nl_nlmsg_flags2str,
|
|||||||
NM_UTILS_FLAGS2STR(NLM_F_CREATE, "CREATE"),
|
NM_UTILS_FLAGS2STR(NLM_F_CREATE, "CREATE"),
|
||||||
NM_UTILS_FLAGS2STR(NLM_F_APPEND, "APPEND"), );
|
NM_UTILS_FLAGS2STR(NLM_F_APPEND, "APPEND"), );
|
||||||
|
|
||||||
|
static NM_UTILS_LOOKUP_STR_DEFINE(_rtnl_type_to_str,
|
||||||
|
guint16,
|
||||||
|
NM_UTILS_LOOKUP_DEFAULT(NULL),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(RTM_GETLINK, "RTM_GETLINK"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(RTM_NEWLINK, "RTM_NEWLINK"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(RTM_DELLINK, "RTM_DELLINK"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(RTM_SETLINK, "RTM_SETLINK"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(RTM_GETADDR, "RTM_GETADDR"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(RTM_NEWADDR, "RTM_NEWADDR"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(RTM_DELADDR, "RTM_DELADDR"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(RTM_GETROUTE, "RTM_GETROUTE"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(RTM_NEWROUTE, "RTM_NEWROUTE"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(RTM_DELROUTE, "RTM_DELROUTE"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(RTM_GETRULE, "RTM_GETRULE"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(RTM_NEWRULE, "RTM_NEWRULE"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(RTM_DELRULE, "RTM_DELRULE"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(RTM_GETQDISC, "RTM_GETQDISC"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(RTM_NEWQDISC, "RTM_NEWQDISC"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(RTM_DELQDISC, "RTM_DELQDISC"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(RTM_GETTFILTER, "RTM_GETTFILTER"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(RTM_NEWTFILTER, "RTM_NEWTFILTER"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(RTM_DELTFILTER, "RTM_DELTFILTER"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(NLMSG_NOOP, "NLMSG_NOOP"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(NLMSG_ERROR, "NLMSG_ERROR"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(NLMSG_DONE, "NLMSG_DONE"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(NLMSG_OVERRUN, "NLMSG_OVERRUN"), );
|
||||||
|
|
||||||
|
static NM_UTILS_LOOKUP_STR_DEFINE(
|
||||||
|
_genl_ctrl_cmd_to_str,
|
||||||
|
guint8,
|
||||||
|
NM_UTILS_LOOKUP_DEFAULT(NULL),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(CTRL_CMD_UNSPEC, "CTRL_CMD_UNSPEC"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(CTRL_CMD_NEWFAMILY, "CTRL_CMD_NEWFAMILY"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(CTRL_CMD_DELFAMILY, "CTRL_CMD_DELFAMILY"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(CTRL_CMD_GETFAMILY, "CTRL_CMD_GETFAMILY"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(CTRL_CMD_NEWOPS, "CTRL_CMD_NEWOPS"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(CTRL_CMD_DELOPS, "CTRL_CMD_DELOPS"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(CTRL_CMD_GETOPS, "CTRL_CMD_GETOPS"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(CTRL_CMD_NEWMCAST_GRP, "CTRL_CMD_NEWMCAST_GRP"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(CTRL_CMD_DELMCAST_GRP, "CTRL_CMD_DELMCAST_GRP"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(CTRL_CMD_GETMCAST_GRP, "CTRL_CMD_GETMCAST_GRP"),
|
||||||
|
NM_UTILS_LOOKUP_STR_ITEM(CTRL_CMD_GETPOLICY, "CTRL_CMD_GETPOLICY"), );
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
nl_nlmsghdr_to_str(int netlink_protocol, const struct nlmsghdr *hdr, char *buf, gsize len)
|
nl_nlmsghdr_to_str(int netlink_protocol,
|
||||||
|
guint32 pktinfo_group,
|
||||||
|
const struct nlmsghdr *hdr,
|
||||||
|
char *buf,
|
||||||
|
gsize len)
|
||||||
{
|
{
|
||||||
const char *b;
|
const char *b;
|
||||||
const char *s = NULL;
|
const char *s = NULL;
|
||||||
@@ -97,87 +144,44 @@ nl_nlmsghdr_to_str(int netlink_protocol, const struct nlmsghdr *hdr, char *buf,
|
|||||||
|
|
||||||
switch (netlink_protocol) {
|
switch (netlink_protocol) {
|
||||||
case NETLINK_ROUTE:
|
case NETLINK_ROUTE:
|
||||||
switch (hdr->nlmsg_type) {
|
s = _rtnl_type_to_str(hdr->nlmsg_type);
|
||||||
case RTM_GETLINK:
|
if (s)
|
||||||
s = "RTM_GETLINK";
|
nm_strbuf_append_str(&buf, &len, s);
|
||||||
break;
|
else
|
||||||
case RTM_NEWLINK:
|
nm_strbuf_append(&buf, &len, "(%u)", (unsigned) hdr->nlmsg_type);
|
||||||
s = "RTM_NEWLINK";
|
break;
|
||||||
break;
|
default:
|
||||||
case RTM_DELLINK:
|
nm_assert_not_reached();
|
||||||
s = "RTM_DELLINK";
|
/* fall-through */
|
||||||
break;
|
case NETLINK_GENERIC:
|
||||||
case RTM_SETLINK:
|
if (pktinfo_group == 0)
|
||||||
s = "RTM_SETLINK";
|
nm_strbuf_append(&buf, &len, "group:unicast");
|
||||||
break;
|
else
|
||||||
case RTM_GETADDR:
|
nm_strbuf_append(&buf, &len, "group:multicast(%u)", (unsigned) pktinfo_group);
|
||||||
s = "RTM_GETADDR";
|
|
||||||
break;
|
s = NULL;
|
||||||
case RTM_NEWADDR:
|
if (hdr->nlmsg_type == GENL_ID_CTRL)
|
||||||
s = "RTM_NEWADDR";
|
s = "GENL_ID_CTRL";
|
||||||
break;
|
if (s)
|
||||||
case RTM_DELADDR:
|
nm_strbuf_append(&buf, &len, ", msg-type:%s", s);
|
||||||
s = "RTM_DELADDR";
|
else
|
||||||
break;
|
nm_strbuf_append(&buf, &len, ", msg-type:(%u)", (unsigned) hdr->nlmsg_type);
|
||||||
case RTM_GETROUTE:
|
|
||||||
s = "RTM_GETROUTE";
|
if (genlmsg_valid_hdr(hdr, 0)) {
|
||||||
break;
|
const struct genlmsghdr *ghdr;
|
||||||
case RTM_NEWROUTE:
|
|
||||||
s = "RTM_NEWROUTE";
|
ghdr = nlmsg_data(hdr);
|
||||||
break;
|
s = NULL;
|
||||||
case RTM_DELROUTE:
|
if (hdr->nlmsg_type == GENL_ID_CTRL)
|
||||||
s = "RTM_DELROUTE";
|
s = _genl_ctrl_cmd_to_str(ghdr->cmd);
|
||||||
break;
|
if (s)
|
||||||
case RTM_GETRULE:
|
nm_strbuf_append(&buf, &len, ", cmd:%s", s);
|
||||||
s = "RTM_GETRULE";
|
else
|
||||||
break;
|
nm_strbuf_append(&buf, &len, ", cmd:(%u)", (unsigned) ghdr->cmd);
|
||||||
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;
|
break;
|
||||||
case NETLINK_GENERIC:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s)
|
|
||||||
nm_strbuf_append_str(&buf, &len, s);
|
|
||||||
else
|
|
||||||
nm_strbuf_append(&buf, &len, "(%u)", (unsigned) hdr->nlmsg_type);
|
|
||||||
|
|
||||||
flags = hdr->nlmsg_flags;
|
flags = hdr->nlmsg_flags;
|
||||||
|
|
||||||
if (!flags) {
|
if (!flags) {
|
||||||
|
@@ -69,8 +69,11 @@ 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_nlmsg_flags2str(int flags, char *buf, size_t len);
|
||||||
|
|
||||||
const char *
|
const char *nl_nlmsghdr_to_str(int netlink_protocol,
|
||||||
nl_nlmsghdr_to_str(int netlink_protocol, const struct nlmsghdr *hdr, char *buf, gsize len);
|
guint32 pktinfo_group,
|
||||||
|
const struct nlmsghdr *hdr,
|
||||||
|
char *buf,
|
||||||
|
gsize len);
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user