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

Reply via email to