]> git.ipfire.org Git - thirdparty/ulogd2.git/commitdiff
gprint, oprint: add support for printing ipv6 addresses
authorJeremy Sowden <jeremy@azazel.net>
Mon, 21 Aug 2023 19:42:34 +0000 (20:42 +0100)
committerFlorian Westphal <fw@strlen.de>
Thu, 14 Sep 2023 12:22:49 +0000 (14:22 +0200)
Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
output/ulogd_output_GPRINT.c
output/ulogd_output_OPRINT.c

index 093d3ea2b254f6781383d9899faf1dc0b446466d..37829fa49e9d9b0156d4349375e012a5627d3b99 100644 (file)
@@ -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);
 
index b5586e850aa4d5f9dcc640627139c868d4de2cb4..13934ff19efbc38e4473d780e7016f5cf8f8fa74 100644 (file)
@@ -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);