On Thu, Jul 7, 2016 at 5:23 PM, Pravin B Shelar <pshe...@ovn.org> wrote: > diff --git a/datapath/linux/compat/include/linux/udp.h > b/datapath/linux/compat/include/linux/udp.h > new file mode 100644 > index 0000000..31ae022 > --- /dev/null > +++ b/datapath/linux/compat/include/linux/udp.h > @@ -0,0 +1,33 @@ > +#ifndef __LINUX_UDP_WRAPPER_H > +#define __LINUX_UDP_WRAPPER_H 1 > + > +#include_next <linux/udp.h> > +#include <linux/ipv6.h> > + > +#ifndef HAVE_NO_CHECK6_TX > +static inline void udp_set_no_check6_tx(struct sock *sk, bool val) > +{ > +#ifdef HAVE_SK_NO_CHECK_TX > + sk->sk_no_check_tx = val; > +#else > + /* since netwroking stack is not checking for zero UDP checksum > + * check it in OVS module. */ > + #define OVS_CHECK_UDP_TUNNEL_ZERO_CSUM > +#endif > +} > + > +static inline void udp_set_no_check6_rx(struct sock *sk, bool val) > +{ > +#ifdef HAVE_SK_NO_CHECK_TX > + sk->sk_no_check_rx = val; > +#endif > +} > +#endif
I guess it probably makes more sense to #define OVS_CHECK_UDP_TUNNEL_ZERO_CSUM in udp_set_no_check6_rx() since it is receive side issue, though functionally it doesn't make a difference. > diff --git a/datapath/linux/compat/vxlan.c b/datapath/linux/compat/vxlan.c > index d45125d..3776990 100644 > --- a/datapath/linux/compat/vxlan.c > +++ b/datapath/linux/compat/vxlan.c > @@ -850,6 +850,13 @@ static void vxlan_rcv(struct vxlan_sock *vs, struct > sk_buff *skb, > oip6 = ipv6_hdr(skb); > saddr.sin6.sin6_addr = oip6->saddr; > saddr.sa.sa_family = AF_INET6; > +#ifdef OVS_CHECK_UDP_TUNNEL_ZERO_CSUM > + if (!udp_hdr(skb)->check && > + !(vs->flags & VXLAN_F_UDP_ZERO_CSUM6_RX)) { > + udp6_csum_zero_error(skb); > + goto drop; > + } > +#endif > #endif Do we need a version of this for Geneve as well? _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev