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
next prev 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).