FWIW, this issue has broken OpenStack CI with OVN. It was also reported here:
http://openvswitch.org/pipermail/dev/2016-March/067987.html On Thu, Mar 17, 2016 at 9:27 AM, Ben Pfaff <b...@ovn.org> wrote: > Hi Zoltán. It looks like this is really a build problem against a > particular kernel instead of anything to do with Debian packaging. I'm > concerned that the kernel developers might skip over it because it > sounds packaging-specific, so I'm following up with an updated subject > line. > > On Thu, Mar 17, 2016 at 04:03:54PM +0000, Zoltán Balogh wrote: > > Hi, > > > > Recently, I upgraded to Linux kernel version 3.13.0-83-generic from > version 3.13.0-79-generic. Then I rebuilt the debian packages and tried to > install them. Installing the datapath-dkms package failed. > > > > make -C /lib/modules/3.13.0-83-generic/build > M=/var/lib/dkms/openvswitch/2.5.0.dpdk2.2/build/datapath/linux modules > > make[1]: Entering directory `/usr/src/linux-headers-3.13.0-83-generic' > > CC [M] > /var/lib/dkms/openvswitch/2.5.0.dpdk2.2/build/datapath/linux/actions.o > > /var/lib/dkms/openvswitch/2.5.0.dpdk2.2/build/datapath/linux/actions.c: > In function 'ovs_fragment': > > > /var/lib/dkms/openvswitch/2.5.0.dpdk2.2/build/datapath/linux/actions.c:730:3: > warning: passing argument 1 of 'v6ops->fragment' from incompatible pointer > type [enabled by default] > > v6ops->fragment(skb->sk, skb, ovs_vport_output); > > ^ > > > /var/lib/dkms/openvswitch/2.5.0.dpdk2.2/build/datapath/linux/actions.c:730:3: > note: expected 'struct sk_buff *' but argument is of type 'struct sock *' > > > /var/lib/dkms/openvswitch/2.5.0.dpdk2.2/build/datapath/linux/actions.c:730:3: > warning: passing argument 2 of 'v6ops->fragment' from incompatible pointer > type [enabled by default] > > > /var/lib/dkms/openvswitch/2.5.0.dpdk2.2/build/datapath/linux/actions.c:730:3: > note: expected 'int (*)(struct sk_buff *)' but argument is of type 'struct > sk_buff *' > > > /var/lib/dkms/openvswitch/2.5.0.dpdk2.2/build/datapath/linux/actions.c:730:3: > error: too many arguments to function 'v6ops->fragment' > > make[2]: *** > [/var/lib/dkms/openvswitch/2.5.0.dpdk2.2/build/datapath/linux/actions.o] > Error 1 > > make[1]: *** > [_module_/var/lib/dkms/openvswitch/2.5.0.dpdk2.2/build/datapath/linux] > Error 2 > > make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-83-generic' > > make: *** [default] Error 2 > > make: Leaving directory > `/var/lib/dkms/openvswitch/2.5.0.dpdk2.2/build/datapath/linux' > > > > I compared the include/linux/netfilter_ipv6.h files of the two kernel > sources: > > > > diff > /usr/src/linux-headers-3.13.0-83-generic/include/linux/netfilter_ipv6.h > /usr/src/linux-headers-3.13.0-79-generic/include/linux/netfilter_ipv6.h > > 28d27 > > < int (*fragment)(struct sk_buff *skb, int (*output)(struct > sk_buff *)); > > > > It seems the new struct member fragment was introduced in nf_ipv6_ops in > version 3.13.0-83-general: > > > > /* > > * Hook functions for ipv6 to allow xt_* modules to be built-in even > > * if IPv6 is a module. > > */ > > struct nf_ipv6_ops { > > int (*chk_addr)(struct net *net, const struct in6_addr *addr, > > const struct net_device *dev, int strict); > > int (*fragment)(struct sk_buff *skb, int (*output)(struct sk_buff > *)); > > }; > > > > While the ovs code defines fragment with three arguments in > netfilter_ipv6.h and ip6_route.h: > > > > #ifndef HAVE_NF_IPV6_OPS_FRAGMENT > > /* Try to minimise changes required to the actions.c code for calling > IPv6 > > * fragmentation. We can keep the fragment() API mostly the same, except > that > > * the callback parameter needs to be in the form that older kernels > accept. > > * We don't backport the other ipv6_ops as they're currently unused by > OVS. */ > > struct ovs_nf_ipv6_ops { > > int (*fragment)(struct sock *sk, struct sk_buff *skb, > > int (*output)(OVS_VPORT_OUTPUT_PARAMS)); > > }; > > #define nf_ipv6_ops ovs_nf_ipv6_ops > > > > #if defined(OVS_FRAGMENT_BACKPORT) > > static struct ovs_nf_ipv6_ops ovs_ipv6_ops = { > > .fragment = ip6_fragment, > > }; > > > > static inline struct ovs_nf_ipv6_ops *ovs_nf_get_ipv6_ops(void) > > { > > return &ovs_ipv6_ops; > > } > > #else /* !OVS_FRAGMENT_BACKPORT */ > > static inline const struct ovs_nf_ipv6_ops *ovs_nf_get_ipv6_ops(void) > > { > > return NULL; > > } > > #endif > > #define nf_get_ipv6_ops ovs_nf_get_ipv6_ops > > > > --- > > > > #ifndef HAVE_NF_IPV6_OPS_FRAGMENT > > #ifdef OVS_FRAGMENT_BACKPORT > > int rpl_ip6_fragment(struct sock *sk, struct sk_buff *skb, > > int (*output)(OVS_VPORT_OUTPUT_PARAMS)); > > #else > > static inline int rpl_ip6_fragment(struct sock *sk, struct sk_buff *skb, > > int (*output)(struct sk_buff *)) > > { > > kfree_skb(skb); > > return -ENOTSUPP; > > } > > #endif /* OVS_FRAGMENT_BACKPORT */ > > #define ip6_fragment rpl_ip6_fragment > > #endif /* HAVE_NF_IPV6_OPS_FRAGMENT */ > > > > Best regards, > > Zoltán > > > > _______________________________________________ > > discuss mailing list > > discuss@openvswitch.org > > http://openvswitch.org/mailman/listinfo/discuss > _______________________________________________ > discuss mailing list > discuss@openvswitch.org > http://openvswitch.org/mailman/listinfo/discuss > -- Russell Bryant
_______________________________________________ discuss mailing list discuss@openvswitch.org http://openvswitch.org/mailman/listinfo/discuss