diff options
author | Jeremy Sowden <jeremy@azazel.net> | 2023-08-21 20:42:34 +0100 |
---|---|---|
committer | Florian Westphal <fw@strlen.de> | 2023-09-14 14:22:49 +0200 |
commit | c6b8755b29e9dd4067a4c9031226f214af8ead30 (patch) | |
tree | 39dfffdf170b21e5533c5d60b5831f8d3eac3147 /output/ulogd_output_OPRINT.c | |
parent | f04bf6794d1153abd2c3b0bfededd9403d79acf6 (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.c | 21 |
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); |