Same as earlier patch this fixes vxlan recieve offload implementation. Signed-off-by: Pravin B Shelar <pshe...@ovn.org> --- datapath/linux/compat/vxlan.c | 43 +++++++++++++++++-------------------------- 1 file changed, 17 insertions(+), 26 deletions(-)
diff --git a/datapath/linux/compat/vxlan.c b/datapath/linux/compat/vxlan.c index cec8740..9964be1 100644 --- a/datapath/linux/compat/vxlan.c +++ b/datapath/linux/compat/vxlan.c @@ -373,65 +373,56 @@ static int vxlan_gro_complete(struct sk_buff *skb, int nhoff, /* Notify netdevs that UDP port started listening */ static void vxlan_notify_add_rx_port(struct vxlan_sock *vs) { -#ifdef HAVE_NDO_ADD_VXLAN_PORT struct net_device *dev; struct sock *sk = vs->sock->sk; struct net *net = sock_net(sk); sa_family_t sa_family = vxlan_get_sk_family(vs); - __be16 port = inet_sk(sk)->inet_sport; - - rcu_read_lock(); - for_each_netdev_rcu(net, dev) { - if (dev->netdev_ops->ndo_add_vxlan_port) - dev->netdev_ops->ndo_add_vxlan_port(dev, sa_family, - port); - } - rcu_read_unlock(); -#else -#ifdef HAVE_UDP_OFFLOAD - struct net_device *dev; - struct sock *sk = vs->sock->sk; - sa_family_t sa_family = vxlan_get_sk_family(vs); if (sa_family == AF_INET) { int err; - err = udp_add_offload(&vs->udp_offloads); + err = udp_add_offload(net, &vs->udp_offloads); if (err) pr_warn("vxlan: udp_add_offload failed with status %d\n", err); } + rcu_read_lock(); + for_each_netdev_rcu(net, dev) { +#ifdef HAVE_NDO_ADD_VXLAN_PORT + __be16 port = inet_sk(sk)->inet_sport; + + if (dev->netdev_ops->ndo_add_vxlan_port) + dev->netdev_ops->ndo_add_vxlan_port(dev, sa_family, + port); #endif -#endif + } + rcu_read_unlock(); } /* Notify netdevs that UDP port is no more listening */ static void vxlan_notify_del_rx_port(struct vxlan_sock *vs) { -#ifdef HAVE_NDO_ADD_VXLAN_PORT struct net_device *dev; struct sock *sk = vs->sock->sk; struct net *net = sock_net(sk); sa_family_t sa_family = vxlan_get_sk_family(vs); - __be16 port = inet_sk(sk)->inet_sport; rcu_read_lock(); for_each_netdev_rcu(net, dev) { +#ifdef HAVE_NDO_ADD_VXLAN_PORT + __be16 port = inet_sk(sk)->inet_sport; + if (dev->netdev_ops->ndo_del_vxlan_port) dev->netdev_ops->ndo_del_vxlan_port(dev, sa_family, - port); + port); +#endif } rcu_read_unlock(); -#else -#ifdef HAVE_UDP_OFFLOAD - struct sock *sk = vs->sock->sk; - sa_family_t sa_family = vxlan_get_sk_family(vs); if (sa_family == AF_INET) { udp_del_offload(&vs->udp_offloads); -#endif -#endif + } } /* See if multicast group is already in use by other ID */ -- 1.8.3.1 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev