From 7ae7fa15f805bae9b15d7dc9c011fc02a4d3ddbb Mon Sep 17 00:00:00 2001 From: Denis Ovsienko Date: Sat, 11 Feb 2023 19:01:01 +0000 Subject: NFLOG: Use correct AF code points on all OSes. On Haiku R1/beta4 "make check" failed the "nglog-e" test case because the printer did not recognize address family 2 as IPv4: - 1 18:31:59.615994 version 0, resource ID 20, family IPv4 (2), + 1 18:31:59.615994 version 0, resource ID 20, family Unknown (2), Fix print-nflog.c to use the wire encoding AF code points rather than the OS libc AF constants. This fixes "make check" on Haiku and likely fixes IPv6 NFLOG decoding on a few non-Linux OSes. --- print-nflog.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'print-nflog.c') diff --git a/print-nflog.c b/print-nflog.c index 1e75561b..bbe4ccfc 100644 --- a/print-nflog.c +++ b/print-nflog.c @@ -103,9 +103,19 @@ typedef struct nflog_timestamp { #define NFULA_HWHEADER 16 /* skbuff's MAC-layer header */ #define NFULA_HWLEN 17 /* length of skbuff's MAC-layer header */ +/* + * Define two constants specifically for the two AF code points from the + * LINKTYPE_NFLOG specification above and use these constants instead of + * AF_INET and AF_INET6. This is the only way to dissect the "wire" encoding + * correctly because some BSD systems define AF_INET6 differently from Linux + * (see af.h) and Haiku defines both AF_INET and AF_INET6 differently from + * Linux. + */ +#define NFLOG_AF_INET 2 +#define NFLOG_AF_INET6 10 static const struct tok nflog_values[] = { - { AF_INET, "IPv4" }, - { AF_INET6, "IPv6" }, + { NFLOG_AF_INET, "IPv4" }, + { NFLOG_AF_INET6, "IPv6" }, { 0, NULL } }; @@ -203,11 +213,11 @@ nflog_if_print(netdissect_options *ndo, switch (GET_U_1(hdr->nflog_family)) { - case AF_INET: + case NFLOG_AF_INET: ip_print(ndo, p, length); break; - case AF_INET6: + case NFLOG_AF_INET6: ip6_print(ndo, p, length); break; -- cgit v1.2.1