summaryrefslogtreecommitdiffstats
path: root/output/ulogd_output_OPRINT.c
diff options
context:
space:
mode:
authorJeremy Sowden <jeremy@azazel.net>2023-08-21 20:42:34 +0100
committerFlorian Westphal <fw@strlen.de>2023-09-14 14:22:49 +0200
commitc6b8755b29e9dd4067a4c9031226f214af8ead30 (patch)
tree39dfffdf170b21e5533c5d60b5831f8d3eac3147 /output/ulogd_output_OPRINT.c
parentf04bf6794d1153abd2c3b0bfededd9403d79acf6 (diff)
gprint, oprint: add support for printing ipv6 addresses
Signed-off-by: Jeremy Sowden <jeremy@azazel.net> Signed-off-by: Florian Westphal <fw@strlen.de>
Diffstat (limited to 'output/ulogd_output_OPRINT.c')
-rw-r--r--output/ulogd_output_OPRINT.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/output/ulogd_output_OPRINT.c b/output/ulogd_output_OPRINT.c
index b5586e8..13934ff 100644
--- a/output/ulogd_output_OPRINT.c
+++ b/output/ulogd_output_OPRINT.c
@@ -76,12 +76,23 @@ static int oprint_interp(struct ulogd_pluginstance *upi)
fprintf(opi->of, "%" PRIu64 "\n", ret->u.value.ui64);
break;
case ULOGD_RET_IPADDR: {
- char addrbuf[INET_ADDRSTRLEN + 1] = "";
+ char addrbuf[INET6_ADDRSTRLEN + 1] = "";
+ struct in6_addr ipv6addr;
struct in_addr ipv4addr;
-
- ipv4addr.s_addr = ret->u.value.ui32;
- if (!inet_ntop(AF_INET, &ipv4addr, addrbuf,
- sizeof(addrbuf)))
+ int family;
+ void *addr;
+
+ if (ret->len == sizeof(ipv6addr)) {
+ memcpy(ipv6addr.s6_addr, ret->u.value.ui128,
+ sizeof(ipv6addr.s6_addr));
+ addr = &ipv6addr;
+ family = AF_INET6;
+ } else {
+ ipv4addr.s_addr = ret->u.value.ui32;
+ addr = &ipv4addr;
+ family = AF_INET;
+ }
+ if (!inet_ntop(family, addr, addrbuf, sizeof(addrbuf)))
break;
fprintf(opi->of, "%s\n", addrbuf);