]> git.ipfire.org Git - thirdparty/ulogd2.git/commitdiff
revert r7348
author/C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org </C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org>
Sun, 10 Feb 2008 02:07:42 +0000 (02:07 +0000)
committer/C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org </C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org>
Sun, 10 Feb 2008 02:07:42 +0000 (02:07 +0000)
filter/raw2packet/ulogd_raw2packet_BASE.c
input/packet/ulogd_inppkt_NFLOG.c
input/packet/ulogd_inppkt_ULOG.c

index 62a9a8727d0a5556f6eff869c1af43db4504bb15..48f29935bde489aeb78acd2a32d59bd02e887b3a 100644 (file)
@@ -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",
        }
 };
 
index 8b6811c29a7140e2d0d376810a00db01f4fca9a7..3f013ccf8e983f5f1d48ab60292f57495333f80d 100644 (file)
@@ -54,6 +54,12 @@ static struct config_keyset libulog_kset = {
                        .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,
@@ -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,
 };
@@ -224,6 +231,11 @@ static struct ulogd_key output_keys[] = {
                        .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,
@@ -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;
index 77087a449abe7e89839023ed3b53881441e0e322..cf4447400019fff6ebe929bb2b4e9f13fd8bc239 100644 (file)
@@ -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,
 };
 
@@ -146,6 +147,11 @@ static struct ulogd_key output_keys[] = {
                .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,
@@ -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;