summaryrefslogtreecommitdiff
path: root/print-nflog.c
diff options
context:
space:
mode:
authorDenis Ovsienko <denis@ovsienko.info>2023-02-11 19:01:01 +0000
committerDenis Ovsienko <denis@ovsienko.info>2023-02-11 19:07:11 +0000
commit7ae7fa15f805bae9b15d7dc9c011fc02a4d3ddbb (patch)
tree84e63408003e4953781b1558cbaa3aaebf939a42 /print-nflog.c
parent472926044516097afda36e4e6f07423587a05b92 (diff)
downloadtcpdump-7ae7fa15f805bae9b15d7dc9c011fc02a4d3ddbb.tar.gz
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.
Diffstat (limited to 'print-nflog.c')
-rw-r--r--print-nflog.c18
1 files changed, 14 insertions, 4 deletions
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;