From c6b8755b29e9dd4067a4c9031226f214af8ead30 Mon Sep 17 00:00:00 2001 From: Jeremy Sowden Date: Mon, 21 Aug 2023 20:42:34 +0100 Subject: gprint, oprint: add support for printing ipv6 addresses Signed-off-by: Jeremy Sowden Signed-off-by: Florian Westphal --- output/ulogd_output_GPRINT.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'output/ulogd_output_GPRINT.c') diff --git a/output/ulogd_output_GPRINT.c b/output/ulogd_output_GPRINT.c index 093d3ea..37829fa 100644 --- a/output/ulogd_output_GPRINT.c +++ b/output/ulogd_output_GPRINT.c @@ -155,7 +155,10 @@ static int gprint_interp(struct ulogd_pluginstance *upi) size += ret; break; 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) @@ -163,8 +166,17 @@ static int gprint_interp(struct ulogd_pluginstance *upi) rem -= ret; size += ret; - ipv4addr.s_addr = key->u.value.ui32; - if (!inet_ntop(AF_INET, &ipv4addr, buf + size, rem)) + 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); -- cgit v1.2.3