From 6106111972b44d5ebe29c4a3e8479c783b6ec1b7 Mon Sep 17 00:00:00 2001
From: Thomas Bernard <miniupnp@free.fr>
Date: Sun, 3 Feb 2019 13:26:27 +0100
Subject: [PATCH] netfilter: build with linux kernel 5.0

should fix #346
---
 Changelog.txt       |  3 +++
 netfilter/iptcrdr.c | 38 +++++++++++++++++++++++++----------
 2 files changed, 30 insertions(+), 11 deletions(-)

--- a/Changelog.txt
+++ b/Changelog.txt
@@ -1,5 +1,8 @@
 $Id: Changelog.txt,v 1.431 2017/04/21 11:30:23 nanard Exp $
 
+2019/02/03:
+  netfilter: fix build with linux kernel 5.0
+
 2017/03/13:
   default to client address for AddPortMapping when <NewInternalClient>
     is empty
--- a/netfilter/iptcrdr.c
+++ b/netfilter/iptcrdr.c
@@ -1,7 +1,7 @@
 /* $Id: iptcrdr.c,v 1.59 2016/03/08 09:23:52 nanard Exp $ */
 /* MiniUPnP project
  * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
- * (c) 2006-2016 Thomas Bernard
+ * (c) 2006-2019 Thomas Bernard
  * This software is subject to the conditions detailed
  * in the LICENCE file provided within the distribution */
 #include <stdio.h>
@@ -1116,9 +1116,11 @@ addnatrule(int proto, unsigned short epo
 	} else {
 		match = get_udp_match(eport, 0);
 	}
-	e->nfcache = NFC_IP_DST_PT;
+	e->nfcache = NFC_UNKNOWN;
 	target = get_dnat_target(iaddr, iport);
-	e->nfcache |= NFC_UNKNOWN;
+#ifdef NFC_IP_DST_PT
+	e->nfcache |= NFC_IP_DST_PT;
+#endif
 	tmp = realloc(e, sizeof(struct ipt_entry)
 	               + match->u.match_size
 				   + target->u.target_size);
@@ -1186,9 +1188,11 @@ addmasqueraderule(int proto,
 	} else {
 		match = get_udp_match(0, iport);
 	}
-	e->nfcache = NFC_IP_DST_PT;
+	e->nfcache = NFC_UNKNOWN;
 	target = get_masquerade_target(eport);
-	e->nfcache |= NFC_UNKNOWN;
+#ifdef NFC_IP_DST_PT
+	e->nfcache |= NFC_IP_DST_PT;
+#endif
 	tmp = realloc(e, sizeof(struct ipt_entry)
 	               + match->u.match_size
 				   + target->u.target_size);
@@ -1266,9 +1270,14 @@ addpeernatrule(int proto,
 	} else {
 		match = get_udp_match(rport, iport);
 	}
-	e->nfcache = NFC_IP_DST_PT | NFC_IP_SRC_PT;
+	e->nfcache = NFC_UNKNOWN;
 	target = get_snat_target(eaddr, eport);
-	e->nfcache |= NFC_UNKNOWN;
+#ifdef NFC_IP_DST_PT
+	e->nfcache |= NFC_IP_DST_PT;
+#endif
+#ifdef NFC_IP_SRC_PT
+	e->nfcache |= NFC_IP_SRC_PT;
+#endif
 	tmp = realloc(e, sizeof(struct ipt_entry)
 	               + match->u.match_size
 				   + target->u.target_size);
@@ -1337,9 +1346,14 @@ addpeerdscprule(int proto, unsigned char
 	} else {
 		match = get_udp_match(rport, iport);
 	}
-	e->nfcache = NFC_IP_DST_PT | NFC_IP_SRC_PT;
+	e->nfcache = NFC_UNKNOWN;
 	target = get_dscp_target(dscp);
-	e->nfcache |= NFC_UNKNOWN;
+#ifdef NFC_IP_DST_PT
+	e->nfcache |= NFC_IP_DST_PT;
+#endif
+#ifdef NFC_IP_SRC_PT
+	e->nfcache |= NFC_IP_SRC_PT;
+#endif
 	tmp = realloc(e, sizeof(struct ipt_entry)
 	               + match->u.match_size
 				   + target->u.target_size);
@@ -1420,11 +1434,13 @@ add_filter_rule(int proto, const char *
 	} else {
 		match = get_udp_match(iport,0);
 	}
-	e->nfcache = NFC_IP_DST_PT;
 	e->ip.dst.s_addr = inet_addr(iaddr);
 	e->ip.dmsk.s_addr = INADDR_NONE;
+	e->nfcache = NFC_UNKNOWN;
 	target = get_accept_target();
-	e->nfcache |= NFC_UNKNOWN;
+#ifdef NFC_IP_DST_PT
+	e->nfcache |= NFC_IP_DST_PT;
+#endif
 	tmp = realloc(e, sizeof(struct ipt_entry)
 	               + match->u.match_size
 				   + target->u.target_size);
