From e4f0bd0a93e4777abea99fe7a33d50fd74b57aba Mon Sep 17 00:00:00 2001 From: "/C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org" Date: Tue, 29 Apr 2008 14:34:30 +0000 Subject: This patchset adds support for the "numeric_label" option. For instance, it can be used to determine if the packet has been dropped, rejected or accepted. The meaning of label is completely user-defined. Signed-off-by: Eric Leblond --- input/packet/ulogd_inppkt_NFLOG.c | 20 +++++++++++++++++++- input/packet/ulogd_inppkt_ULOG.c | 18 +++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) (limited to 'input') diff --git a/input/packet/ulogd_inppkt_NFLOG.c b/input/packet/ulogd_inppkt_NFLOG.c index 9887e86..bb69bb6 100644 --- a/input/packet/ulogd_inppkt_NFLOG.c +++ b/input/packet/ulogd_inppkt_NFLOG.c @@ -34,7 +34,7 @@ struct nflog_input { /* configuration entries */ static struct config_keyset libulog_kset = { - .num_ces = 7, + .num_ces = 8, .ces = { { .key = "bufsize", @@ -78,6 +78,13 @@ static struct config_keyset libulog_kset = { .options = CONFIG_OPT_NONE, .u.value = 0, }, + { + .key = "numeric_label", + .type = CONFIG_TYPE_INT, + .options = CONFIG_OPT_NONE, + .u.value = 0, + }, + } }; @@ -88,6 +95,7 @@ static struct config_keyset libulog_kset = { #define unbind_ce(x) (x->ces[4]) #define seq_ce(x) (x->ces[5]) #define seq_global_ce(x) (x->ces[6]) +#define label_ce(x) (x->ces[7]) enum nflog_keys { NFLOG_KEY_RAW_MAC = 0, @@ -108,6 +116,7 @@ enum nflog_keys { NFLOG_KEY_OOB_PROTOCOL, NFLOG_KEY_OOB_UID, NFLOG_KEY_OOB_GID, + NFLOG_KEY_RAW_LABEL, }; static struct ulogd_key output_keys[] = { @@ -252,6 +261,12 @@ static struct ulogd_key output_keys[] = { .flags = ULOGD_RETF_NONE, .name = "oob.gid", }, + { + .type = ULOGD_RET_UINT8, + .flags = ULOGD_RETF_NONE, + .name = "raw.label", + }, + }; static inline int @@ -275,6 +290,9 @@ interp_packet(struct ulogd_pluginstance *upi, struct nflog_data *ldata) ret[NFLOG_KEY_OOB_FAMILY].u.value.ui8 = af_ce(upi->config_kset).u.value; ret[NFLOG_KEY_OOB_FAMILY].flags |= ULOGD_RETF_VALID; + ret[NFLOG_KEY_RAW_LABEL].u.value.ui8 = label_ce(upi->config_kset).u.value; + ret[NFLOG_KEY_RAW_LABEL].flags |= ULOGD_RETF_VALID; + if (ph) { /* FIXME */ ret[NFLOG_KEY_OOB_HOOK].u.value.ui8 = ph->hook; diff --git a/input/packet/ulogd_inppkt_ULOG.c b/input/packet/ulogd_inppkt_ULOG.c index 5112281..253bbe0 100644 --- a/input/packet/ulogd_inppkt_ULOG.c +++ b/input/packet/ulogd_inppkt_ULOG.c @@ -34,7 +34,7 @@ struct ulog_input { /* configuration entries */ static struct config_keyset libulog_kset = { - .num_ces = 3, + .num_ces = 4, .ces = { { .key = "bufsize", @@ -54,6 +54,13 @@ static struct config_keyset libulog_kset = { .options = CONFIG_OPT_NONE, .u.value = ULOGD_RMEM_DEFAULT, }, + { + .key = "numeric_label", + .type = CONFIG_TYPE_INT, + .options = CONFIG_OPT_NONE, + .u.value = 0, + }, + } }; enum ulog_keys { @@ -71,6 +78,7 @@ enum ulog_keys { ULOG_KEY_RAW_MAC_LEN, ULOG_KEY_OOB_FAMILY, ULOG_KEY_OOB_PROTOCOL, + ULOG_KEY_RAW_LABEL, }; static struct ulogd_key output_keys[] = { @@ -167,6 +175,11 @@ static struct ulogd_key output_keys[] = { .flags = ULOGD_RETF_NONE, .name = "oob.protocol", }, + { + .type = ULOGD_RET_UINT8, + .flags = ULOGD_RETF_NONE, + .name = "raw.label", + }, }; @@ -181,6 +194,9 @@ static int interp_packet(struct ulogd_pluginstance *ip, ulog_packet_msg_t *pkt) ret[ULOG_KEY_RAW_MAC_LEN].flags |= ULOGD_RETF_VALID; } + ret[ULOG_KEY_RAW_LABEL].u.value.ui8 = ip->config_kset->ces[3].u.value; + ret[ULOG_KEY_RAW_LABEL].flags |= ULOGD_RETF_VALID; + /* include pointer to raw ipv4 packet */ ret[ULOG_KEY_RAW_PCKT].u.value.ptr = pkt->payload; ret[ULOG_KEY_RAW_PCKT].flags |= ULOGD_RETF_VALID; -- cgit v1.2.3