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