summaryrefslogtreecommitdiffstats
path: root/output/ipfix
diff options
context:
space:
mode:
Diffstat (limited to 'output/ipfix')
-rw-r--r--output/ipfix/ipfix.c6
-rw-r--r--output/ipfix/ipfix.h8
-rw-r--r--output/ipfix/ulogd_output_IPFIX.c3
3 files changed, 8 insertions, 9 deletions
diff --git a/output/ipfix/ipfix.c b/output/ipfix/ipfix.c
index 4bb432a..e0b3440 100644
--- a/output/ipfix/ipfix.c
+++ b/output/ipfix/ipfix.c
@@ -8,8 +8,6 @@
/* These forward declarations are needed since ulogd.h doesn't like to be the first */
#include <ulogd/linuxlist.h>
-#define __packed __attribute__((packed))
-
#include "ipfix.h"
#include <ulogd/ulogd.h>
@@ -85,8 +83,7 @@ struct ipfix_msg *ipfix_msg_alloc(size_t len, uint32_t oid, int tid)
(len < IPFIX_HDRLEN + IPFIX_SET_HDRLEN))
return NULL;
- msg = malloc(sizeof(struct ipfix_msg) + len);
- memset(msg, 0, sizeof(struct ipfix_msg));
+ msg = calloc(1, sizeof(struct ipfix_msg) + len);
msg->tid = tid;
msg->end = msg->data + len;
msg->tail = msg->data + IPFIX_HDRLEN;
@@ -95,7 +92,6 @@ struct ipfix_msg *ipfix_msg_alloc(size_t len, uint32_t oid, int tid)
/* Initialize message header */
hdr = ipfix_msg_hdr(msg);
- memset(hdr, 0, IPFIX_HDRLEN);
hdr->version = htons(IPFIX_VERSION);
hdr->oid = htonl(oid);
diff --git a/output/ipfix/ipfix.h b/output/ipfix/ipfix.h
index 93945fb..b0f3ae6 100644
--- a/output/ipfix/ipfix.h
+++ b/output/ipfix/ipfix.h
@@ -19,7 +19,7 @@ struct ipfix_hdr {
uint32_t seqno;
uint32_t oid; /* Observation Domain ID */
uint8_t data[];
-} __packed;
+} __attribute__((packed));
#define IPFIX_HDRLEN sizeof(struct ipfix_hdr)
@@ -32,7 +32,7 @@ struct ipfix_templ_hdr {
uint16_t tid;
uint16_t cnt;
uint8_t data[];
-} __packed;
+} __attribute__((packed));
#define IPFIX_TEMPL_HDRLEN(nfields) sizeof(struct ipfix_templ_hdr) + (sizeof(uint16_t) * 2 * nfields)
@@ -42,7 +42,7 @@ struct ipfix_set_hdr {
uint16_t id;
uint16_t len;
uint8_t data[];
-} __packed;
+} __attribute__((packed));
#define IPFIX_SET_HDRLEN sizeof(struct ipfix_set_hdr)
@@ -67,7 +67,7 @@ struct vy_ipfix_data {
uint16_t dport;
uint8_t l4_proto;
uint32_t aid; /* Application ID */
-} __packed;
+} __attribute__((packed));
#define VY_IPFIX_SID 256
diff --git a/output/ipfix/ulogd_output_IPFIX.c b/output/ipfix/ulogd_output_IPFIX.c
index 4863d00..1c0f730 100644
--- a/output/ipfix/ulogd_output_IPFIX.c
+++ b/output/ipfix/ulogd_output_IPFIX.c
@@ -426,6 +426,9 @@ static int ipfix_interp(struct ulogd_pluginstance *pi)
if (!(GET_FLAGS(pi->input.keys, InIpSaddr) & ULOGD_RETF_VALID))
return ULOGD_IRET_OK;
+ if (GET_LENGTH(pi->input.keys, InIpSaddr) != sizeof(data->saddr))
+ return ULOGD_IRET_OK;
+
oid = oid_ce(pi->config_kset).u.value;
mtu = mtu_ce(pi->config_kset).u.value;
send_template = send_template_ce(pi->config_kset).u.string;