]> granicus.if.org Git - strace/commitdiff
netlink: decode NETLINK_NETFILTER netlink message types
authorJingPiao Chen <chenjingpiao@gmail.com>
Sat, 9 Sep 2017 09:42:41 +0000 (17:42 +0800)
committerDmitry V. Levin <ldv@altlinux.org>
Sun, 24 Sep 2017 10:07:57 +0000 (10:07 +0000)
* netlink.c: Include "xlat/nf_acct_msg_types.h",
"xlat/nf_cthelper_msg_types.h", "xlat/nf_ctnetlink_exp_msg_types.h",
"xlat/nf_ctnetlink_msg_types.h", "xlat/nf_cttimeout_msg_types.h",
"xlat/nf_ipset_msg_types.h", "xlat/nf_nft_compat_msg_types.h",
"xlat/nf_nftables_msg_types.h", "xlat/nf_osf_msg_types.h",
"xlat/nf_queue_msg_types.h", and "xlat/nf_ulog_msg_types.h".
(nf_nlmsg_types): New array.
(decode_nlmsg_type_netfilter): Use it.
* NEWS: Mention this.
* xlat/nf_acct_msg_types.in: New file.
* xlat/nf_cthelper_msg_types.in: Likewise.
* xlat/nf_ctnetlink_exp_msg_types.in: Likewise.
* xlat/nf_ctnetlink_msg_types.in: Likewise.
* xlat/nf_cttimeout_msg_types.in: Likewise.
* xlat/nf_ipset_msg_types.in: Likewise.
* xlat/nf_nft_compat_msg_types.in: Likewise.
* xlat/nf_nftables_msg_types.in: Likewise.
* xlat/nf_osf_msg_types.in: Likewise.
* xlat/nf_queue_msg_types.in: Likewise.
* xlat/nf_ulog_msg_types.in: Likewise.
* tests/netlink_netfilter.c (test_nlmsg_type): Update expected output.

14 files changed:
NEWS
netlink.c
tests/netlink_netfilter.c
xlat/nf_acct_msg_types.in [new file with mode: 0644]
xlat/nf_cthelper_msg_types.in [new file with mode: 0644]
xlat/nf_ctnetlink_exp_msg_types.in [new file with mode: 0644]
xlat/nf_ctnetlink_msg_types.in [new file with mode: 0644]
xlat/nf_cttimeout_msg_types.in [new file with mode: 0644]
xlat/nf_ipset_msg_types.in [new file with mode: 0644]
xlat/nf_nft_compat_msg_types.in [new file with mode: 0644]
xlat/nf_nftables_msg_types.in [new file with mode: 0644]
xlat/nf_osf_msg_types.in [new file with mode: 0644]
xlat/nf_queue_msg_types.in [new file with mode: 0644]
xlat/nf_ulog_msg_types.in [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 6c7f1876123bae862ef93be2492da74c876fa75d..36b26a739848355e4d406c1d4200c2070ed5530a 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,7 @@ Noteworthy changes in release ?.?? (????-??-??)
 ===============================================
 
 * Improvements
+  * Implemented decoding of NETLINK_NETFILTER netlink message types.
   * Updated lists of ARPHRD_*, BPF_*, ETH_P_*, LOOP_*, MADV_*,
     MEMBARRIER_CMD_*, MFD_*, SO_*, SOL_*, TCP_*, and UFFD_FEATURE_* constants.
   * Updated lists of ioctl commands from Linux 4.14.
index ab40b1420c4b42e70e5a9460c85a81e5ee0f716c..cdfe4ee8afa22934fe6a323f3384392280526e9a 100644 (file)
--- a/netlink.c
+++ b/netlink.c
 #include "xlat/netlink_new_flags.h"
 #include "xlat/netlink_protocols.h"
 #include "xlat/netlink_types.h"
+#include "xlat/nf_acct_msg_types.h"
+#include "xlat/nf_cthelper_msg_types.h"
+#include "xlat/nf_ctnetlink_exp_msg_types.h"
+#include "xlat/nf_ctnetlink_msg_types.h"
+#include "xlat/nf_cttimeout_msg_types.h"
+#include "xlat/nf_ipset_msg_types.h"
+#include "xlat/nf_nft_compat_msg_types.h"
+#include "xlat/nf_nftables_msg_types.h"
+#include "xlat/nf_osf_msg_types.h"
+#include "xlat/nf_queue_msg_types.h"
+#include "xlat/nf_ulog_msg_types.h"
 #include "xlat/nl_audit_types.h"
 #include "xlat/nl_crypto_types.h"
 #include "xlat/nl_netfilter_msg_types.h"
@@ -110,6 +121,38 @@ decode_nlmsg_type_generic(const struct xlat *const xlat,
        printxval(genl_families_xlat(), type, dflt);
 }
 
+static const struct {
+       const struct xlat *const xlat;
+       const char *const dflt;
+} nf_nlmsg_types[] = {
+       [NFNL_SUBSYS_CTNETLINK] = {
+               nf_ctnetlink_msg_types,
+               "IPCTNL_MSG_CT_???"
+       },
+       [NFNL_SUBSYS_CTNETLINK_EXP] = {
+               nf_ctnetlink_exp_msg_types,
+               "IPCTNL_MSG_EXP_???"
+       },
+       [NFNL_SUBSYS_QUEUE] = { nf_queue_msg_types, "NFQNL_MSG_???" },
+       [NFNL_SUBSYS_ULOG] = { nf_ulog_msg_types, "NFULNL_MSG_???" },
+       [NFNL_SUBSYS_OSF] = { nf_osf_msg_types, "OSF_MSG_???" },
+       [NFNL_SUBSYS_IPSET] = { nf_ipset_msg_types, "IPSET_CMD_???" },
+       [NFNL_SUBSYS_ACCT] = { nf_acct_msg_types, "NFNL_MSG_ACCT_???" },
+       [NFNL_SUBSYS_CTNETLINK_TIMEOUT] = {
+               nf_cttimeout_msg_types,
+               "IPCTNL_MSG_TIMEOUT_???"
+       },
+       [NFNL_SUBSYS_CTHELPER] = {
+               nf_cthelper_msg_types,
+               "NFNL_MSG_CTHELPER_???"
+       },
+       [NFNL_SUBSYS_NFTABLES] = { nf_nftables_msg_types, "NFT_MSG_???" },
+       [NFNL_SUBSYS_NFT_COMPAT] = {
+               nf_nft_compat_msg_types,
+               "NFNL_MSG_COMPAT_???"
+       }
+};
+
 static void
 decode_nlmsg_type_netfilter(const struct xlat *const xlat,
                            const uint16_t type,
@@ -131,11 +174,12 @@ decode_nlmsg_type_netfilter(const struct xlat *const xlat,
 
        printxval(xlat, subsys_id, dflt);
 
-       /*
-        * The type is subsystem specific,
-        * print it in numeric format for now.
-        */
-       tprintf("<<8|%#x", msg_type);
+       tprints("<<8|");
+       if (subsys_id < ARRAY_SIZE(nf_nlmsg_types))
+               printxval(nf_nlmsg_types[subsys_id].xlat,
+                         msg_type, nf_nlmsg_types[subsys_id].dflt);
+       else
+               tprintf("%#x", msg_type);
 }
 
 typedef void (*nlmsg_types_decoder_t)(const struct xlat *,
index 2907c26124f09cf1a7f21f7b4a1237578de1bdd4..db2622eb766fc3a30c285e51f7a47173193c539a 100644 (file)
@@ -52,19 +52,19 @@ test_nlmsg_type(const int fd)
               ", flags=NLM_F_REQUEST, seq=0, pid=0}"
               ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
               fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
+# endif
 
-       nlh.nlmsg_type = (NFNL_SUBSYS_CTNETLINK << 8) | NFNL_MSG_BATCH_BEGIN;
+       nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK << 8 | 0xff;
        rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
-       printf("sendto(%d, {len=%u, type=NFNL_SUBSYS_CTNETLINK<<8|%#x"
+       printf("sendto(%d, {len=%u"
+              ", type=NFNL_SUBSYS_CTNETLINK<<8|0xff /* IPCTNL_MSG_CT_??? */"
               ", flags=NLM_F_REQUEST, seq=0, pid=0}"
               ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
-              fd, nlh.nlmsg_len, NFNL_MSG_BATCH_BEGIN,
-              (unsigned) sizeof(nlh), sprintrc(rc));
-# endif
+              fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
 
-       nlh.nlmsg_type = (NFNL_SUBSYS_CTNETLINK << 8);
+       nlh.nlmsg_type = 0xffff;
        rc = sendto(fd, &nlh, sizeof(nlh), MSG_DONTWAIT, NULL, 0);
-       printf("sendto(%d, {len=%u, type=NFNL_SUBSYS_CTNETLINK<<8|0"
+       printf("sendto(%d, {len=%u, type=0xff /* NFNL_SUBSYS_??? */<<8|0xff"
               ", flags=NLM_F_REQUEST, seq=0, pid=0}"
               ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
               fd, nlh.nlmsg_len, (unsigned) sizeof(nlh), sprintrc(rc));
diff --git a/xlat/nf_acct_msg_types.in b/xlat/nf_acct_msg_types.in
new file mode 100644 (file)
index 0000000..3384ee0
--- /dev/null
@@ -0,0 +1,5 @@
+NFNL_MSG_ACCT_NEW              0
+NFNL_MSG_ACCT_GET              1
+NFNL_MSG_ACCT_GET_CTRZERO      2
+NFNL_MSG_ACCT_DEL              3
+NFNL_MSG_ACCT_OVERQUOTA                4
diff --git a/xlat/nf_cthelper_msg_types.in b/xlat/nf_cthelper_msg_types.in
new file mode 100644 (file)
index 0000000..bbee697
--- /dev/null
@@ -0,0 +1,3 @@
+NFNL_MSG_CTHELPER_NEW  0
+NFNL_MSG_CTHELPER_GET  1
+NFNL_MSG_CTHELPER_DEL  2
diff --git a/xlat/nf_ctnetlink_exp_msg_types.in b/xlat/nf_ctnetlink_exp_msg_types.in
new file mode 100644 (file)
index 0000000..8236e06
--- /dev/null
@@ -0,0 +1,4 @@
+IPCTNL_MSG_EXP_NEW             0
+IPCTNL_MSG_EXP_GET             1
+IPCTNL_MSG_EXP_DELETE          2
+IPCTNL_MSG_EXP_GET_STATS_CPU   3
diff --git a/xlat/nf_ctnetlink_msg_types.in b/xlat/nf_ctnetlink_msg_types.in
new file mode 100644 (file)
index 0000000..2dab169
--- /dev/null
@@ -0,0 +1,8 @@
+IPCTNL_MSG_CT_NEW              0
+IPCTNL_MSG_CT_GET              1
+IPCTNL_MSG_CT_DELETE           2
+IPCTNL_MSG_CT_GET_CTRZERO      3
+IPCTNL_MSG_CT_GET_STATS_CPU    4
+IPCTNL_MSG_CT_GET_STATS                5
+IPCTNL_MSG_CT_GET_DYING                6
+IPCTNL_MSG_CT_GET_UNCONFIRMED  7
diff --git a/xlat/nf_cttimeout_msg_types.in b/xlat/nf_cttimeout_msg_types.in
new file mode 100644 (file)
index 0000000..bf6c529
--- /dev/null
@@ -0,0 +1,5 @@
+IPCTNL_MSG_TIMEOUT_NEW         0
+IPCTNL_MSG_TIMEOUT_GET         1
+IPCTNL_MSG_TIMEOUT_DELETE      2
+IPCTNL_MSG_TIMEOUT_DEFAULT_SET 3
+IPCTNL_MSG_TIMEOUT_DEFAULT_GET 4
diff --git a/xlat/nf_ipset_msg_types.in b/xlat/nf_ipset_msg_types.in
new file mode 100644 (file)
index 0000000..a61d906
--- /dev/null
@@ -0,0 +1,21 @@
+IPSET_CMD_NONE         0
+IPSET_CMD_PROTOCOL     1
+IPSET_CMD_CREATE       2
+IPSET_CMD_DESTROY      3
+IPSET_CMD_FLUSH                4
+IPSET_CMD_RENAME       5
+IPSET_CMD_SWAP         6
+IPSET_CMD_LIST         7
+IPSET_CMD_SAVE         8
+IPSET_CMD_ADD          9
+IPSET_CMD_DEL          10
+IPSET_CMD_TEST         11
+IPSET_CMD_HEADER       12
+IPSET_CMD_TYPE         13
+
+IPSET_CMD_RESTORE      14
+IPSET_CMD_HELP         15
+IPSET_CMD_VERSION      16
+IPSET_CMD_QUIT         17
+
+IPSET_CMD_COMMIT       18
diff --git a/xlat/nf_nft_compat_msg_types.in b/xlat/nf_nft_compat_msg_types.in
new file mode 100644 (file)
index 0000000..e2f7da1
--- /dev/null
@@ -0,0 +1 @@
+NFNL_MSG_COMPAT_GET    0
diff --git a/xlat/nf_nftables_msg_types.in b/xlat/nf_nftables_msg_types.in
new file mode 100644 (file)
index 0000000..eb1e773
--- /dev/null
@@ -0,0 +1,22 @@
+NFT_MSG_NEWTABLE       0
+NFT_MSG_GETTABLE       1
+NFT_MSG_DELTABLE       2
+NFT_MSG_NEWCHAIN       3
+NFT_MSG_GETCHAIN       4
+NFT_MSG_DELCHAIN       5
+NFT_MSG_NEWRULE                6
+NFT_MSG_GETRULE                7
+NFT_MSG_DELRULE                8
+NFT_MSG_NEWSET         9
+NFT_MSG_GETSET         10
+NFT_MSG_DELSET         11
+NFT_MSG_NEWSETELEM     12
+NFT_MSG_GETSETELEM     13
+NFT_MSG_DELSETELEM     14
+NFT_MSG_NEWGEN         15
+NFT_MSG_GETGEN         16
+NFT_MSG_TRACE          17
+NFT_MSG_NEWOBJ         18
+NFT_MSG_GETOBJ         19
+NFT_MSG_DELOBJ         20
+NFT_MSG_GETOBJ_RESET   21
diff --git a/xlat/nf_osf_msg_types.in b/xlat/nf_osf_msg_types.in
new file mode 100644 (file)
index 0000000..636c932
--- /dev/null
@@ -0,0 +1,2 @@
+OSF_MSG_ADD    0
+OSF_MSG_REMOVE 1
diff --git a/xlat/nf_queue_msg_types.in b/xlat/nf_queue_msg_types.in
new file mode 100644 (file)
index 0000000..65c7bdd
--- /dev/null
@@ -0,0 +1,4 @@
+NFQNL_MSG_PACKET       0
+NFQNL_MSG_VERDICT      1
+NFQNL_MSG_CONFIG       2
+NFQNL_MSG_VERDICT_BATCH        3
diff --git a/xlat/nf_ulog_msg_types.in b/xlat/nf_ulog_msg_types.in
new file mode 100644 (file)
index 0000000..13ff42f
--- /dev/null
@@ -0,0 +1,2 @@
+NFULNL_MSG_PACKET      0
+NFULNL_MSG_CONFIG      1