#include <ulogd/ipfix_protocol.h>
enum output_keys {
+ KEY_OOB_FAMILY,
KEY_IP_SADDR,
KEY_IP_DADDR,
KEY_IP_PROTOCOL,
};
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,
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 (family) {
- case AF_INET:
- return _interp_iphdr(pi, len);
- case AF_INET6:
- return _interp_ipv6hdr(pi, len);
+ 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;
}
+
return 0;
}
.vendor = IPFIX_VENDOR_NETFILTER,
.field_id = IPFIX_NF_rawpacket_length,
},
- },
- {
- .type = ULOGD_RET_UINT8,
- .name = "oob.family",
}
};
.options = CONFIG_OPT_NONE,
.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,
NFLOG_KEY_RAW_MAC_LEN,
NFLOG_KEY_OOB_SEQ_LOCAL,
NFLOG_KEY_OOB_SEQ_GLOBAL,
- NFLOG_KEY_OOB_FAMILY,
NFLOG_KEY_OOB_PROTOCOL,
};
.field_id = IPFIX_NF_seq_global,
},
},
- {
- .type = ULOGD_RET_UINT8,
- .flags = ULOGD_RETF_NONE,
- .name = "oob.family",
- },
{
.type = ULOGD_RET_UINT16,
.flags = ULOGD_RETF_NONE,
u_int32_t outdev = nflog_get_outdev(ldata);
u_int32_t seq;
- 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;
ULOG_KEY_OOB_IN,
ULOG_KEY_OOB_OUT,
ULOG_KEY_RAW_MAC_LEN,
- ULOG_KEY_OOB_FAMILY,
ULOG_KEY_OOB_PROTOCOL,
};
.flags = ULOGD_RETF_NONE,
.name = "raw.mac_len",
},
- {
- .type = ULOGD_RET_UINT8,
- .flags = ULOGD_RETF_NONE,
- .name = "oob.family",
- },
{
.type = ULOGD_RET_UINT16,
.flags = ULOGD_RETF_NONE,
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;