summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--filter/raw2packet/ulogd_raw2packet_BASE.c32
-rw-r--r--input/packet/ulogd_inppkt_NFLOG.c15
-rw-r--r--input/packet/ulogd_inppkt_ULOG.c9
3 files changed, 33 insertions, 23 deletions
diff --git a/filter/raw2packet/ulogd_raw2packet_BASE.c b/filter/raw2packet/ulogd_raw2packet_BASE.c
index 62a9a87..48f2993 100644
--- a/filter/raw2packet/ulogd_raw2packet_BASE.c
+++ b/filter/raw2packet/ulogd_raw2packet_BASE.c
@@ -44,7 +44,6 @@
#include <ulogd/ipfix_protocol.h>
enum output_keys {
- KEY_OOB_FAMILY,
KEY_IP_SADDR,
KEY_IP_DADDR,
KEY_IP_PROTOCOL,
@@ -99,11 +98,6 @@ enum output_keys {
};
static struct ulogd_key iphdr_rets[] = {
- [KEY_OOB_FAMILY] = {
- .type = ULOGD_RET_UINT8,
- .flags = ULOGD_RETF_NONE,
- .name = "oob.family",
- },
[KEY_IP_SADDR] = {
.type = ULOGD_RET_IPADDR,
.flags = ULOGD_RETF_NONE,
@@ -825,27 +819,15 @@ out:
static int _interp_pkt(struct ulogd_pluginstance *pi)
{
- struct ulogd_key *ret = pi->output.keys;
- struct iphdr *iph = pi->input.keys[0].u.source->u.value.ptr;
u_int32_t len = pi->input.keys[1].u.source->u.value.ui32;
u_int8_t family = pi->input.keys[2].u.source->u.value.ui8;
- switch (iph->version) {
- case 4:
- ret[KEY_OOB_FAMILY].u.value.ui8 = AF_INET;
- ret[KEY_OOB_FAMILY].flags |= ULOGD_RETF_VALID;
-
- return _interp_iphdr(pi, len);
- case 6:
- ret[KEY_OOB_FAMILY].u.value.ui8 = AF_INET6;
- ret[KEY_OOB_FAMILY].flags |= ULOGD_RETF_VALID;
-
- return _interp_ipv6hdr(pi, len);
- default:
- /* unknown protocol */
- return 0;
+ switch (family) {
+ case AF_INET:
+ return _interp_iphdr(pi, len);
+ case AF_INET6:
+ return _interp_ipv6hdr(pi, len);
}
-
return 0;
}
@@ -865,6 +847,10 @@ static struct ulogd_key base_inp[] = {
.vendor = IPFIX_VENDOR_NETFILTER,
.field_id = IPFIX_NF_rawpacket_length,
},
+ },
+ {
+ .type = ULOGD_RET_UINT8,
+ .name = "oob.family",
}
};
diff --git a/input/packet/ulogd_inppkt_NFLOG.c b/input/packet/ulogd_inppkt_NFLOG.c
index 8b6811c..3f013cc 100644
--- a/input/packet/ulogd_inppkt_NFLOG.c
+++ b/input/packet/ulogd_inppkt_NFLOG.c
@@ -55,6 +55,12 @@ static struct config_keyset libulog_kset = {
.u.value = NFLOG_RMEM_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,
@@ -98,6 +104,7 @@ enum nflog_keys {
NFLOG_KEY_RAW_MAC_LEN,
NFLOG_KEY_OOB_SEQ_LOCAL,
NFLOG_KEY_OOB_SEQ_GLOBAL,
+ NFLOG_KEY_OOB_FAMILY,
NFLOG_KEY_OOB_PROTOCOL,
NFLOG_KEY_OOB_UID,
};
@@ -225,6 +232,11 @@ static struct ulogd_key output_keys[] = {
},
},
{
+ .type = ULOGD_RET_UINT8,
+ .flags = ULOGD_RETF_NONE,
+ .name = "oob.family",
+ },
+ {
.type = ULOGD_RET_UINT16,
.flags = ULOGD_RETF_NONE,
.name = "oob.protocol",
@@ -255,6 +267,9 @@ interp_packet(struct ulogd_pluginstance *upi, struct nflog_data *ldata)
u_int32_t uid;
+ ret[NFLOG_KEY_OOB_FAMILY].u.value.ui8 = af_ce(upi->config_kset).u.value;
+ ret[NFLOG_KEY_OOB_FAMILY].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 77087a4..cf44474 100644
--- a/input/packet/ulogd_inppkt_ULOG.c
+++ b/input/packet/ulogd_inppkt_ULOG.c
@@ -68,6 +68,7 @@ enum ulog_keys {
ULOG_KEY_OOB_IN,
ULOG_KEY_OOB_OUT,
ULOG_KEY_RAW_MAC_LEN,
+ ULOG_KEY_OOB_FAMILY,
ULOG_KEY_OOB_PROTOCOL,
};
@@ -147,6 +148,11 @@ static struct ulogd_key output_keys[] = {
.name = "raw.mac_len",
},
{
+ .type = ULOGD_RET_UINT8,
+ .flags = ULOGD_RETF_NONE,
+ .name = "oob.family",
+ },
+ {
.type = ULOGD_RET_UINT16,
.flags = ULOGD_RETF_NONE,
.name = "oob.protocol",
@@ -195,6 +201,9 @@ static int interp_packet(struct ulogd_pluginstance *ip, ulog_packet_msg_t *pkt)
ret[ULOG_KEY_OOB_OUT].u.value.ptr = pkt->outdev_name;
ret[ULOG_KEY_OOB_OUT].flags |= ULOGD_RETF_VALID;
+ /* ULOG is IPv4 only */
+ ret[ULOG_KEY_OOB_FAMILY].u.value.ui8 = AF_INET;
+ ret[ULOG_KEY_OOB_FAMILY].flags |= ULOGD_RETF_VALID;
/* Undef in ULOG but necessary */
ret[ULOG_KEY_OOB_PROTOCOL].u.value.ui16 = 0;
ret[ULOG_KEY_OOB_PROTOCOL].flags |= ULOGD_RETF_VALID;