On Thu, Jan 10, 2019 at 2:09 PM Greg Rose <gvrose8...@gmail.com> wrote: > > Upstream commit 648700f76b03 ("inet: frags: use rhashtables...") changed > how ipv6 fragmentation is implemented. This patch was backported to > the upstream stable 4.9.x kernel starting at 4.9.135. > > This patch creates the compatibility layer changes required to both > compile and also operate correctly with ipv6 fragmentation on these > kernels. Check if the inet_frags 'rnd' field is present to key on > whether the upstream patch is present. Also update Travis to the > latest 4.9 kernel release so that this patch is compile tested. > > Passes Travis: > https://travis-ci.org/gvrose8192/ovs-experimental/builds/478033409 > > Cc: William Tu <u9012...@gmail.com> > Cc: Yi-Hung Wei <yihung....@gmail.com> > Cc: Yifeng Sun <pkusunyif...@gmail.com> > Signed-off-by: Greg Rose <gvrose8...@gmail.com> > --- Thanks Greg for the patch. In general, it looks good to me, I only have two small questions as below. I tested it on 4.10.17 stable kernel from linux-stable tree. The compilation is passed, and the relevant IPv6 fragmentation system traffic tests are passed.
> @@ -614,10 +658,12 @@ void ovs_netns_frags6_init(struct net *net) > > void ovs_netns_frags6_exit(struct net *net) > { > +#ifdef HAVE_INET_FRAGS_RND > struct netns_frags *frags; > > frags = get_netns_frags6_from_net(net); > inet_frags_exit_net(frags, &nf_frags); > +#endif > } Don't we need to do inet_frags_exit_net() if HAVE_INET_FRAGS_RND is false? >From ./net/ipv6/netfilter/nf_conntrack_reasm.c in the linux-stable branch 4.10.y, it looks like inet_frags_exit_net() is still be used. > > static struct pernet_operations nf_ct_net_ops = { > @@ -634,13 +680,17 @@ int rpl_nf_ct_frag6_init(void) > #ifndef HAVE_DEFRAG_ENABLE_TAKES_NET > nf_defrag_ipv6_enable(); > #endif > +#ifdef HAVE_INET_FRAGS_RND > nf_frags.hashfn = nf_hashfn; > + nf_frags.match = ip6_frag_match; > +#else > + nf_frags.rhash_params = ip6_rhash_params; > +#endif > nf_frags.constructor = ip6_frag_init; > nf_frags.destructor = NULL; > nf_frags.qsize = sizeof(struct frag_queue); > - nf_frags.match = ip6_frag_match; > nf_frags.frag_expire = nf_ct_frag6_expire; ..... > -#ifdef HAVE_INET_FRAGS_WITH_FRAGS_WORK > +#if defined(HAVE_INET_FRAGS_WITH_FRAGS_WORK) || !defined(HAVE_INET_FRAGS_RND) > nf_frags.frags_cache_name = nf_frags_cache_name; > #endif Not sure if this changed is needed? It seems to me that it depends on HAVE_INET_FRAGS_WITH_FRAGS_WORK but not on HAVE_INET_FRAGS_RND? Thanks, -Yi-Hung _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev