[ovs-dev] [PATCH] datapath: Fix build errors for 4.9.172+ kernels

Yifeng Sun pkusunyifeng at gmail.com
Mon May 20 23:58:43 UTC 2019


4.9.172+ kernel backported upstream patch 70b095c843266
("ipv6: remove dependency of nf_defrag_ipv6 on ipv6 module")
and this caused compilation errors of OVS kernel module.

This patch fixes it by checking and using new functions
introduced by the upstream patch.

Travis tests passed at
https://travis-ci.org/yifsun/ovs-travis/builds/535047469
with latest Linux kernel version.

Signed-off-by: Yifeng Sun <pkusunyifeng at gmail.com>
---
 datapath/linux/compat/nf_conntrack_reasm.c | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/datapath/linux/compat/nf_conntrack_reasm.c b/datapath/linux/compat/nf_conntrack_reasm.c
index 9d77d982712c..ac5ec6dd30ab 100644
--- a/datapath/linux/compat/nf_conntrack_reasm.c
+++ b/datapath/linux/compat/nf_conntrack_reasm.c
@@ -41,6 +41,7 @@
 #include <net/inet_frag.h>
 
 #include <net/ipv6.h>
+#include <net/ipv6_frag.h>
 #include <net/protocol.h>
 #include <net/transp_v6.h>
 #include <net/rawv6.h>
@@ -138,8 +139,12 @@ static void nf_ct_frag6_expire(unsigned long data)
 #ifdef HAVE_INET_FRAGS_RND
 	ip6_expire_frag_queue(net, fq, &nf_frags);
 #else
+#ifdef HAVE_IPV6_FRAG_H
+	ip6frag_expire_frag_queue(net, fq);
+#else
 	ip6_expire_frag_queue(net, fq);
 #endif
+#endif /* HAVE_INET_FRAGS_RND */
 }
 
 #ifdef HAVE_INET_FRAGS_RND
@@ -673,6 +678,16 @@ static struct pernet_operations nf_ct_net_ops = {
 	.exit = nf_ct_net_exit,
 };
 
+#ifdef HAVE_IPV6_FRAG_H
+static const struct rhashtable_params nfct_rhash_params = {
+	.head_offset		= offsetof(struct inet_frag_queue, node),
+	.hashfn			= ip6frag_key_hashfn,
+	.obj_hashfn		= ip6frag_obj_hashfn,
+	.obj_cmpfn		= ip6frag_obj_cmpfn,
+	.automatic_shrinking	= true,
+};
+#endif
+
 int rpl_nf_ct_frag6_init(void)
 {
 	int ret = 0;
@@ -684,9 +699,14 @@ int rpl_nf_ct_frag6_init(void)
 	nf_frags.hashfn = nf_hashfn;
 	nf_frags.match = ip6_frag_match;
 #else
+#ifdef HAVE_IPV6_FRAG_H
+	nf_frags.rhash_params = nfct_rhash_params;
+	nf_frags.constructor = ip6frag_init;
+#else
 	nf_frags.rhash_params = ip6_rhash_params;
-#endif
 	nf_frags.constructor = ip6_frag_init;
+#endif
+#endif /* HAVE_INET_FRAGS_RND */
 	nf_frags.destructor = NULL;
 	nf_frags.qsize = sizeof(struct frag_queue);
 	nf_frags.frag_expire = nf_ct_frag6_expire;
-- 
2.7.4



More information about the dev mailing list