netfilter-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Eric Leblond <eric@inl.fr>
To: netfilter-devel@vger.kernel.org
Cc: pablo@netfilter.org, Eric Leblond <eric@inl.fr>
Subject: [ULOGD2 PATCH 03/18] Get rid of addressfamily variable in NFLOG input plugin
Date: Mon,  1 Dec 2008 22:36:01 +0100	[thread overview]
Message-ID: <1228167376-22101-4-git-send-email-eric@inl.fr> (raw)
In-Reply-To: <1228167376-22101-1-git-send-email-eric@inl.fr>

The addressfamily configuration variable for NFLOG is used as param
for nflog_bind_pf. This function is used to claim the fetching of
kernel message sent via nf_log_packet() function.

As all kernel messages are sent to the group 0, it is useless to
call nflog_bind_pf when nflog group of the input plugin is not 0.
Furthermore, as only one plugin can be bound to nflog group 0, it
is mandatory to call nflog_bind_pf for all pf family when the group
is 0.

To sum up, this patch suppress the adressfamily parameter (which
simplify the configuration file) and call nflog_bind_pf for all
pf family when the nflog group of the instance is 0.

Signed-off-by: Eric Leblond <eric@inl.fr>
---
 input/packet/ulogd_inppkt_NFLOG.c |   59 ++++++++++++++++++-------------------
 1 files changed, 29 insertions(+), 30 deletions(-)

diff --git a/input/packet/ulogd_inppkt_NFLOG.c b/input/packet/ulogd_inppkt_NFLOG.c
index 647b61c..e27355d 100644
--- a/input/packet/ulogd_inppkt_NFLOG.c
+++ b/input/packet/ulogd_inppkt_NFLOG.c
@@ -46,12 +46,6 @@ static struct config_keyset libulog_kset = {
 			.u.value = NFLOG_GROUP_DEFAULT,
 		},
 		{
-			.key 	 = "addressfamily",
-			.type	 = CONFIG_TYPE_INT,
-			.options = CONFIG_OPT_NONE,
-			.u.value = AF_INET,
-		},
-		{
 			.key	 = "unbind",
 			.type	 = CONFIG_TYPE_INT,
 			.options = CONFIG_OPT_NONE,
@@ -92,13 +86,12 @@ static struct config_keyset libulog_kset = {
 
 #define bufsiz_ce(x)	(x->ces[0])
 #define group_ce(x)	(x->ces[1])
-#define af_ce(x)	(x->ces[2])
-#define unbind_ce(x)	(x->ces[3])
-#define seq_ce(x)	(x->ces[4])
-#define seq_global_ce(x)	(x->ces[5])
-#define label_ce(x)	(x->ces[6])
-#define nlsockbufsize_ce(x) (x->ces[7])
-#define nlsockbufmaxsize_ce(x) (x->ces[8])
+#define unbind_ce(x)	(x->ces[2])
+#define seq_ce(x)	(x->ces[3])
+#define seq_global_ce(x)	(x->ces[4])
+#define label_ce(x)	(x->ces[5])
+#define nlsockbufsize_ce(x) (x->ces[6])
+#define nlsockbufmaxsize_ce(x) (x->ces[7])
 
 enum nflog_keys {
 	NFLOG_KEY_RAW_MAC = 0,
@@ -293,7 +286,8 @@ static struct ulogd_key output_keys[] = {
 };
 
 static inline int
-interp_packet(struct ulogd_pluginstance *upi, struct nflog_data *ldata)
+interp_packet(struct ulogd_pluginstance *upi, u_int8_t pf_family,
+	      struct nflog_data *ldata)
 {
 	struct ulogd_key *ret = upi->output.keys;
 
@@ -311,7 +305,7 @@ interp_packet(struct ulogd_pluginstance *upi, struct nflog_data *ldata)
 	u_int32_t gid;
 
 	okey_set_u8(&ret[NFLOG_KEY_OOB_FAMILY], 
-		    af_ce(upi->config_kset).u.value);
+		    pf_family);
 	okey_set_u8(&ret[NFLOG_KEY_RAW_LABEL],
 		    label_ce(upi->config_kset).u.value);
 
@@ -446,11 +440,11 @@ static int msg_cb(struct nflog_g_handle *gh, struct nfgenmsg *nfmsg,
 	/* since we support the re-use of one instance in several 
 	 * different stacks, we duplicate the message to let them know */
 	llist_for_each_entry(npi, &upi->plist, plist) {
-		ret = interp_packet(npi, nfa);
+		ret = interp_packet(npi, nfmsg->nfgen_family, nfa);
 		if (ret != 0)
 			return ret;
 	}
-	return interp_packet(upi, nfa);
+	return interp_packet(upi, nfmsg->nfgen_family, nfa);
 }
 
 static int configure(struct ulogd_pluginstance *upi,
@@ -463,28 +457,26 @@ static int configure(struct ulogd_pluginstance *upi,
 	return 0;
 }
 
-static int become_system_logging(struct ulogd_pluginstance *upi)
+static int become_system_logging(struct ulogd_pluginstance *upi, u_int8_t pf)
 {
 	struct nflog_input *ui = (struct nflog_input *) upi->private;
 
 	if (unbind_ce(upi->config_kset).u.value > 0) {
 		ulogd_log(ULOGD_NOTICE, "forcing unbind of existing log "
 				"handler for protocol %d\n",
-				af_ce(upi->config_kset).u.value);
-		if (nflog_unbind_pf(ui->nful_h,
-					af_ce(upi->config_kset).u.value) < 0) {
+				pf);
+		if (nflog_unbind_pf(ui->nful_h, pf) < 0) {
 			ulogd_log(ULOGD_ERROR, "unable to force-unbind "
 					"existing log handler for protocol %d\n",
-					af_ce(upi->config_kset).u.value);
+					pf);
 			return -1;
 		}
 	}
 
-	ulogd_log(ULOGD_DEBUG, "binding to protocol family %d\n",
-			af_ce(upi->config_kset).u.value);
-	if (nflog_bind_pf(ui->nful_h, af_ce(upi->config_kset).u.value) < 0) {
-		ulogd_log(ULOGD_ERROR, "unable to bind to protocol family %d\n",
-				af_ce(upi->config_kset).u.value);
+	ulogd_log(ULOGD_DEBUG, "binding to protocol family %d\n", pf);
+	if (nflog_bind_pf(ui->nful_h, pf) < 0) {
+		ulogd_log(ULOGD_ERROR, "unable to bind to"
+				" protocol family %d\n", pf);
 		return -1;
 	}
 	return 0;
@@ -506,7 +498,11 @@ static int start(struct ulogd_pluginstance *upi)
 
 	/* This is the system logging (conntrack, ...) facility */
 	if (group_ce(upi->config_kset).u.value == 0) {
-		if (become_system_logging(upi) == -1)
+		if (become_system_logging(upi, AF_INET) == -1)
+			goto out_handle;
+		if (become_system_logging(upi, AF_INET6) == -1)
+			goto out_handle;
+		if (become_system_logging(upi, AF_BRIDGE) == -1)
 			goto out_handle;
 	}
 
@@ -554,8 +550,11 @@ static int start(struct ulogd_pluginstance *upi)
 
 out_bind:
 	nflog_close(ui->nful_h);
-	if (group_ce(upi->config_kset).u.value == 0)
-		nflog_unbind_pf(ui->nful_h, af_ce(upi->config_kset).u.value);
+	if (group_ce(upi->config_kset).u.value == 0) {
+		nflog_unbind_pf(ui->nful_h, AF_INET);
+		nflog_unbind_pf(ui->nful_h, AF_INET6);
+		nflog_unbind_pf(ui->nful_h, AF_BRIDGE);
+	}
 out_handle:
 	free(ui->nfulog_buf);
 out_buf:
-- 
1.5.6.3


  parent reply	other threads:[~2008-12-01 21:36 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-12-01 21:35 [ULOGD2 PATCH 0/18] Code cleaning, SCTP support, NFLOG logic fix Eric Leblond
2008-12-01 21:35 ` [ULOGD2 PATCH 01/18] add ukey_* function for key assignation Eric Leblond
2008-12-01 21:36 ` [ULOGD2 PATCH 02/18] Modify usage of nflog_bind_pf function Eric Leblond
2008-12-01 21:36 ` Eric Leblond [this message]
2008-12-01 21:36 ` [ULOGD2 PATCH 04/18] Document group 0 usage and suppress address_family Eric Leblond
2008-12-01 21:36 ` [ULOGD2 PATCH 05/18] Add SCTP support to BASE plugin Eric Leblond
2008-12-01 21:36 ` [ULOGD2 PATCH 06/18] SCTP support for PRINTPKT Eric Leblond
2008-12-01 21:36 ` [ULOGD2 PATCH 07/18] Add SCTP support to MySQL and PGSQL output Eric Leblond
2008-12-01 21:36 ` [ULOGD2 PATCH 08/18] Treat nice function return Eric Leblond
2008-12-01 21:36 ` [ULOGD2 PATCH 09/18] Fix stop function of NFCT plugin Eric Leblond
2008-12-01 21:36 ` [ULOGD2 PATCH 10/18] Don't free pluginstance when leaving Eric Leblond
2008-12-01 21:36 ` [ULOGD2 PATCH 11/18] Fix minor memory leak in NFLOG plugin Eric Leblond
2008-12-01 21:36 ` [ULOGD2 PATCH 12/18] Call pluginstance stop function when exiting Eric Leblond
2008-12-01 21:36 ` [ULOGD2 PATCH 13/18] Add SIGINT to list of terminal signal Eric Leblond
2008-12-01 21:36 ` [ULOGD2 PATCH 14/18] Unload plugins when quitting Eric Leblond
2008-12-01 21:36 ` [ULOGD2 PATCH 15/18] Introduce config_stop() function Eric Leblond
2008-12-01 21:36 ` [ULOGD2 PATCH 16/18] Free stacks when exiting Eric Leblond
2008-12-01 21:36 ` [ULOGD2 PATCH 17/18] Fix memory leak in destructor_nfct() Eric Leblond
2008-12-01 21:36 ` [ULOGD2 PATCH 18/18] Add valgrind compilation option Eric Leblond
2008-12-10 11:07 ` [ULOGD2 PATCH 0/18] Code cleaning, SCTP support, NFLOG logic fix Eric Leblond

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=1228167376-22101-4-git-send-email-eric@inl.fr \
    --to=eric@inl.fr \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).