summaryrefslogtreecommitdiffstats
path: root/output/ulogd_output_GPRINT.c
diff options
context:
space:
mode:
Diffstat (limited to 'output/ulogd_output_GPRINT.c')
-rw-r--r--output/ulogd_output_GPRINT.c38
1 files changed, 26 insertions, 12 deletions
diff --git a/output/ulogd_output_GPRINT.c b/output/ulogd_output_GPRINT.c
index bc7aa34..37829fa 100644
--- a/output/ulogd_output_GPRINT.c
+++ b/output/ulogd_output_GPRINT.c
@@ -27,6 +27,8 @@
#include <time.h>
#include <errno.h>
#include <inttypes.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
#include <ulogd/ulogd.h>
#include <ulogd/conffile.h>
@@ -69,12 +71,6 @@ static struct config_keyset gprint_kset = {
},
};
-#define NIPQUAD(addr) \
- ((unsigned char *)&addr)[0], \
- ((unsigned char *)&addr)[1], \
- ((unsigned char *)&addr)[2], \
- ((unsigned char *)&addr)[3]
-
static int gprint_interp(struct ulogd_pluginstance *upi)
{
struct gprint_priv *opi = (struct gprint_priv *) &upi->private;
@@ -127,13 +123,15 @@ static int gprint_interp(struct ulogd_pluginstance *upi)
case ULOGD_RET_INT8:
case ULOGD_RET_INT16:
case ULOGD_RET_INT32:
+ case ULOGD_RET_INT64:
ret = snprintf(buf+size, rem, "%s=", key->name);
if (ret < 0)
break;
rem -= ret;
size += ret;
- ret = snprintf(buf+size, rem, "%d,", key->u.value.i32);
+ ret = snprintf(buf+size, rem, "%" PRId64 ",",
+ key->u.value.i64);
if (ret < 0)
break;
rem -= ret;
@@ -156,20 +154,36 @@ static int gprint_interp(struct ulogd_pluginstance *upi)
rem -= ret;
size += ret;
break;
- case ULOGD_RET_IPADDR:
+ case ULOGD_RET_IPADDR: {
+ struct in6_addr ipv6addr;
+ struct in_addr ipv4addr;
+ int family;
+ void *addr;
+
ret = snprintf(buf+size, rem, "%s=", key->name);
if (ret < 0)
break;
rem -= ret;
size += ret;
- ret = snprintf(buf+size, rem, "%u.%u.%u.%u,",
- NIPQUAD(key->u.value.ui32));
- if (ret < 0)
+ if (key->len == sizeof(ipv6addr)) {
+ memcpy(ipv6addr.s6_addr, key->u.value.ui128,
+ sizeof(ipv6addr.s6_addr));
+ addr = &ipv6addr;
+ family = AF_INET6;
+ } else {
+ ipv4addr.s_addr = key->u.value.ui32;
+ addr = &ipv4addr;
+ family = AF_INET;
+ }
+ if (!inet_ntop(family, addr, buf + size, rem))
break;
+ ret = strlen(buf + size);
+
rem -= ret;
size += ret;
break;
+ }
default:
/* don't know how to interpret this key. */
break;
@@ -249,7 +263,7 @@ static int gprint_fini(struct ulogd_pluginstance *pi)
static struct ulogd_plugin gprint_plugin = {
.name = "GPRINT",
.input = {
- .type = ULOGD_DTYPE_PACKET | ULOGD_DTYPE_FLOW | ULOGD_DTYPE_SUM,
+ .type = ULOGD_DTYPE_RAW | ULOGD_DTYPE_PACKET | ULOGD_DTYPE_FLOW | ULOGD_DTYPE_SUM,
},
.output = {
.type = ULOGD_DTYPE_SINK,