From: Ken-ichirou MATSUZAWA <chamaken@gmail.com>
To: Pablo Neira Ayuso <pablo@netfilter.org>
Cc: netfilter-devel@vger.kernel.org
Subject: [PATCH lnf-log 3/3] utils: nf-log: attaching a conntrack information
Date: Fri, 11 Sep 2015 12:15:35 +0900 [thread overview]
Message-ID: <20150911031535.GG7380@gmail.com> (raw)
In-Reply-To: <20150911030530.GA7380@gmail.com>
This patch enables nf-log in utils directory to show conntrack
information if libnetfilter_conntrack exists.
Signed-off-by: Ken-ichirou MATSUZAWA <chamas@h4.dion.ne.jp>
---
configure.ac | 5 +++
utils/Makefile.am | 3 ++
utils/nf-log.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
3 files changed, 110 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index ead9399..7d58f09 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,6 +4,7 @@ AC_INIT([libnetfilter_log], [1.0.1])
AC_CONFIG_AUX_DIR([build-aux])
AC_CANONICAL_HOST
AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([-Wall foreign subdir-objects
tar-pax no-dist-gzip dist-bzip2 1.6])
@@ -31,6 +32,10 @@ AM_CONDITIONAL([BUILD_IPULOG], [test "x$with_ipulog" != xno])
dnl Dependencies
PKG_CHECK_MODULES([LIBNFNETLINK], [libnfnetlink >= 0.0.41])
PKG_CHECK_MODULES([LIBMNL], [libmnl >= 1.0.3])
+PKG_CHECK_MODULES([LIBNETFILTER_CONNTRACK], [libnetfilter_conntrack >= 1.0.2],
+ [AC_DEFINE([BUILD_NFCT], [1], [building nfct integration example]) HAVE_LNFCT=1],
+ [HAVE_LNFCT=0])
+AM_CONDITIONAL([BUILD_NFCT], [test "$HAVE_LNFCT" -eq 1])
dnl Output the makefile
AC_CONFIG_FILES([Makefile src/Makefile include/Makefile
diff --git a/utils/Makefile.am b/utils/Makefile.am
index dfe5f34..baef81a 100644
--- a/utils/Makefile.am
+++ b/utils/Makefile.am
@@ -9,6 +9,9 @@ nfulnl_test_LDFLAGS = -dynamic
nf_log_SOURCES = nf-log.c
nf_log_LDADD = ../src/libnetfilter_log.la
nf_log_LDFLAGS = -dynamic -lmnl
+if BUILD_NFCT
+nf_log_LDFLAGS += $(LIBNETFILTER_CONNTRACK_LIBS)
+endif
if BUILD_IPULOG
check_PROGRAMS += ulog_test
diff --git a/utils/nf-log.c b/utils/nf-log.c
index 5f2a192..1418af4 100644
--- a/utils/nf-log.c
+++ b/utils/nf-log.c
@@ -3,15 +3,108 @@
#include <stdlib.h>
#include <arpa/inet.h>
-#include <linux/netfilter/nfnetlink_log.h>
+/* #include <linux/netfilter/nfnetlink_log.h> */
+#include <libnetfilter_log/linux_nfnetlink_log.h>
#include <libmnl/libmnl.h>
#include <libnetfilter_log/libnetfilter_log.h>
+#include "../config.h"
+#ifdef BUILD_NFCT
+#include <linux/netfilter/nf_conntrack_common.h>
+#include <libnetfilter_conntrack/libnetfilter_conntrack.h>
+#endif
+
+#ifdef BUILD_NFCT
+static int print_ctinfo(const struct nlattr *const attr)
+{
+ char *s = NULL;
+
+ if (attr == NULL)
+ return MNL_CB_OK;
+
+ switch (ntohl(mnl_attr_get_u32(attr))) {
+ case IP_CT_ESTABLISHED:
+ s = "IP_CT_ESTABLISHED";
+ break;
+ case IP_CT_RELATED:
+ s = "IP_CT_RELATED";
+ break;
+ case IP_CT_NEW:
+ s = "IP_CT_NEW";
+ break;
+ case IP_CT_IS_REPLY:
+ s = "IP_CT_IS_REPLY";
+ break;
+ /* case IP_CT_ESTABLISHED_REPLY: == IP_CT_IS_REPLY
+ * s = "IP_CT_ESTABLISHED_REPLY";
+ * break;
+ */
+ case IP_CT_RELATED_REPLY:
+ s = "IP_CT_RELATED_REPLY";
+ break;
+ case IP_CT_NEW_REPLY:
+ s = "IP_CT_NEW_REPLY";
+ break;
+ /* case IP_CT_NUMBER: == IP_CT_NEW_REPLY
+ * s ="IP_CT_NUMBER";
+ * break;
+ */
+ default:
+ return MNL_CB_ERROR;
+ }
+
+ printf(" ip_conntrack_info: %s\n", s);
+ return MNL_CB_OK;
+}
+
+static int print_nfct(uint8_t family,
+ const struct nlattr *const info_attr,
+ const struct nlattr *const ct_attr)
+{
+ char buf[4096];
+ struct nf_conntrack *ct = NULL;
+
+ if (info_attr != NULL)
+ print_ctinfo(info_attr);
+
+ if (ct_attr == NULL)
+ return MNL_CB_OK;
+
+ ct = nfct_new();
+ if (ct == NULL) {
+ perror("nfct_new");
+ return MNL_CB_ERROR;
+ }
+
+ if (nfct_payload_parse(mnl_attr_get_payload(ct_attr),
+ mnl_attr_get_payload_len(ct_attr),
+ family, ct) < 0) {
+ perror("nfct_payload_parse");
+ nfct_destroy(ct);
+ return MNL_CB_ERROR;
+ }
+
+ nfct_snprintf(buf, sizeof(buf), ct, 0, NFCT_O_DEFAULT, 0);
+ printf(" %s\n", buf);
+ nfct_destroy(ct);
+
+ return MNL_CB_OK;
+}
+#else
+static int print_nfct(uint8_t family,
+ const struct nlattr *const info_attr,
+ const struct nlattr *const ct_attr)
+{
+ return MNL_CB_OK;
+}
+#endif
+
static int log_cb(const struct nlmsghdr *nlh, void *data)
{
struct nlattr *attrs[NFULA_MAX + 1] = { NULL };
struct nfulnl_msg_packet_hdr *ph = NULL;
+ struct nfgenmsg *nfg;
const char *prefix = NULL;
uint32_t mark = 0;
char buf[4096];
@@ -21,6 +114,8 @@ static int log_cb(const struct nlmsghdr *nlh, void *data)
if (ret != MNL_CB_OK)
return ret;
+ nfg = mnl_nlmsg_get_payload(nlh);
+
if (attrs[NFULA_PACKET_HDR])
ph = mnl_attr_get_payload(attrs[NFULA_PACKET_HDR]);
if (attrs[NFULA_PREFIX])
@@ -38,6 +133,8 @@ static int log_cb(const struct nlmsghdr *nlh, void *data)
return MNL_CB_ERROR;
printf("%s (ret=%d)\n", buf, ret);
+ print_nfct(nfg->nfgen_family, attrs[NFULA_CT_INFO], attrs[NFULA_CT]);
+
return MNL_CB_OK;
}
@@ -108,6 +205,10 @@ int main(int argc, char *argv[])
exit(EXIT_FAILURE);
}
+#ifdef BUILD_NFCT
+ mnl_attr_put_u16(nlh, NFULA_CFG_FLAGS, htons(NFULNL_CFG_F_CONNTRACK));
+#endif
+
if (mnl_socket_sendto(nl, nlh, nlh->nlmsg_len) < 0) {
perror("mnl_socket_sendto");
exit(EXIT_FAILURE);
--
2.1.4
next prev parent reply other threads:[~2015-09-11 3:15 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-08 16:54 [PATCH RFC 0/3] Rework nfnetlink_queue conntrack support Pablo Neira Ayuso
2015-09-08 16:54 ` [PATCH RFC 1/3] netfilter: ctnetlink: remove ctnetlink_nfqueue_build_size() Pablo Neira Ayuso
2015-09-09 9:53 ` Ken-ichirou MATSUZAWA
2015-09-10 0:12 ` Pablo Neira Ayuso
2015-09-08 16:54 ` [PATCH RFC 2/3] netfilter: nfnetlink_queue: get rid of nfnetlink_queue_ct.c Pablo Neira Ayuso
2015-09-08 16:54 ` [PATCH RFC 3/3] netfilter: rename nfnetlink_queue_core.c to nfnetlink_queue.c Pablo Neira Ayuso
2015-09-09 9:55 ` Ken-ichirou MATSUZAWA
2015-09-10 0:09 ` Pablo Neira Ayuso
2015-09-10 8:02 ` nfqueue batch verdict with conntrack (was [PATCH RFC 3/3] netfilter: rename nfnetlink_queue_core.c to nfnetlink_queue.c) Ken-ichirou MATSUZAWA
2015-09-10 9:20 ` [PATCH nf-next 0/1] netfilter: nfnetlink_queue: return -EOPNOTSUPP if QUEUE_CT is disabled Ken-ichirou MATSUZAWA
2015-09-10 9:24 ` [PATCH nf-next 1/1] " Ken-ichirou MATSUZAWA
2015-09-09 9:50 ` [PATCH RFC 0/3] Rework nfnetlink_queue conntrack support Ken-ichirou MATSUZAWA
2015-09-09 9:58 ` [PATCH lnf-queue] examples: attaching a conntrack information Ken-ichirou MATSUZAWA
2015-09-09 20:29 ` Florian Westphal
2015-09-09 22:22 ` Ken-ichirou MATSUZAWA
2015-09-09 22:58 ` Florian Westphal
2015-09-10 0:02 ` Pablo Neira Ayuso
2015-09-10 2:26 ` [PATCHv2 " Ken-ichirou MATSUZAWA
2015-09-10 8:58 ` [PATCH " Ken-ichirou MATSUZAWA
2015-09-10 0:06 ` [PATCH RFC 0/3] Rework nfnetlink_queue conntrack support Pablo Neira Ayuso
2015-09-11 3:05 ` Ken-ichirou MATSUZAWA
2015-09-11 3:07 ` [PATCH nf-next 1/3] netfilter: nfnetlink_queue: rename related to nfqueue attaching conntrack info Ken-ichirou MATSUZAWA
2015-09-30 22:03 ` Pablo Neira Ayuso
2015-09-11 3:09 ` [PATCH nf-next 2/3] netfilter: nf_conntrack_netlink: add const qualifier to nfnl_hook Ken-ichirou MATSUZAWA
2015-09-11 3:10 ` [PATCH nf-next 3/3] netfilter: nfnetlink_log: allow to attach conntrack Ken-ichirou MATSUZAWA
2015-09-30 22:10 ` Pablo Neira Ayuso
2015-09-11 3:12 ` [PATCH lnf-log 1/3] include: Sync with kernel headers Ken-ichirou MATSUZAWA
2015-10-12 15:21 ` Pablo Neira Ayuso
2015-09-11 3:14 ` [PATCH lnf-log 2/3] nlmsg: Add NFULA_CT and NFULA_CT_INFO attributes support Ken-ichirou MATSUZAWA
2015-10-12 15:21 ` Pablo Neira Ayuso
2015-09-11 3:15 ` Ken-ichirou MATSUZAWA [this message]
2015-10-12 15:26 ` [PATCH lnf-log 3/3] utils: nf-log: attaching a conntrack information Pablo Neira Ayuso
2015-10-15 4:35 ` Ken-ichirou MATSUZAWA
2015-10-15 4:39 ` [PATCHv2 lnf-log] " Ken-ichirou MATSUZAWA
2015-10-16 16:59 ` Pablo Neira Ayuso
2016-11-15 7:36 ` Ken-ichirou MATSUZAWA
2016-11-15 7:38 ` Ken-ichirou MATSUZAWA
2016-11-24 11:54 ` Pablo Neira Ayuso
2016-11-24 13:15 ` Pablo Neira Ayuso
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150911031535.GG7380@gmail.com \
--to=chamaken@gmail.com \
--cc=netfilter-devel@vger.kernel.org \
--cc=pablo@netfilter.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.