]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
monitor: add debug messages
authorArturo Borrero Gonzalez <arturo@netfilter.org>
Wed, 12 Jul 2017 11:29:49 +0000 (13:29 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 17 Jul 2017 15:20:34 +0000 (17:20 +0200)
Add some debug messages in the monitor/trace code paths to ease development
and debugging in case of errors.

After this patch, running 'nft monitor --debug=mnl,netlink' is more verbose.

Signed-off-by: Arturo Borrero Gonzalez <arturo@netfilter.org>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/mnl.c
src/netlink.c

index da7c090674921f40474654cf52f71cfdb9969fe9..cf060a40a96f3823c052347ccf79c9f0f89935e5 100644 (file)
--- a/src/mnl.c
+++ b/src/mnl.c
@@ -1139,6 +1139,13 @@ int mnl_nft_event_listener(struct mnl_socket *nf_sock,
                        fprintf(stdout, "# ERROR: %s\n", strerror(errno));
                        break;
                }
+
+#ifdef DEBUG
+               if (debug_level & DEBUG_MNL) {
+                       mnl_nlmsg_fprintf(stdout, buf, sizeof(buf),
+                                         sizeof(struct nfgenmsg));
+               }
+#endif /* DEBUG */
                ret = mnl_cb_run(buf, ret, 0, 0, cb, cb_data);
                if (ret <= 0)
                        break;
index 8bf90b20383085fa3d6fe9b6434130195f1e164b..7355036b5d9e2c582b9dc19718766d27a780d94c 100644 (file)
@@ -2879,12 +2879,51 @@ static int netlink_events_trace_cb(const struct nlmsghdr *nlh, int type,
        return MNL_CB_OK;
 }
 
+#ifdef DEBUG
+/* only those which could be useful listening to events */
+static const char *const nftnl_msg_types[NFT_MSG_MAX] = {
+       [NFT_MSG_NEWTABLE]      = "NFT_MSG_NEWTABLE",
+       [NFT_MSG_DELTABLE]      = "NFT_MSG_DELTABLE",
+       [NFT_MSG_NEWCHAIN]      = "NFT_MSG_NEWCHAIN",
+       [NFT_MSG_DELCHAIN]      = "NFT_MSG_DELCHAIN",
+       [NFT_MSG_NEWSET]        = "NFT_MSG_NEWSET",
+       [NFT_MSG_DELSET]        = "NFT_MSG_DELSET",
+       [NFT_MSG_NEWSETELEM]    = "NFT_MSG_NEWSETELEM",
+       [NFT_MSG_DELSETELEM]    = "NFT_MSG_DELSETELEM",
+       [NFT_MSG_NEWRULE]       = "NFT_MSG_NEWRULE",
+       [NFT_MSG_DELRULE]       = "NFT_MSG_DELRULE",
+       [NFT_MSG_TRACE]         = "NFT_MSG_TRACE",
+       [NFT_MSG_NEWGEN]        = "NFT_MSG_NEWGEN",
+       [NFT_MSG_NEWOBJ]        = "NFT_MSG_NEWOBJ",
+       [NFT_MSG_DELOBJ]        = "NFT_MSG_DELOBJ",
+};
+
+static const char *nftnl_msgtype2str(uint16_t type)
+{
+       if (type >= NFT_MSG_MAX || !nftnl_msg_types[type])
+               return "unknown";
+
+       return nftnl_msg_types[type];
+}
+#endif /* DEBUG */
+
+static void netlink_events_debug(uint16_t type)
+{
+#ifdef DEBUG
+       if (!(debug_level & DEBUG_NETLINK))
+               return;
+
+       printf("netlink event: %s\n", nftnl_msgtype2str(type));
+#endif /* DEBUG */
+}
+
 static int netlink_events_cb(const struct nlmsghdr *nlh, void *data)
 {
        int ret = MNL_CB_OK;
        uint16_t type = NFNL_MSG_TYPE(nlh->nlmsg_type);
        struct netlink_mon_handler *monh = (struct netlink_mon_handler *)data;
 
+       netlink_events_debug(type);
        netlink_events_cache_update(monh, nlh, type);
 
        if (!(monh->monitor_flags & (1 << type)))