[ovs-discuss] [OVS v2.4.0] - VXLAN UDP port configuration is not notified to L2 driver/interface.

Manish Chopra manish.chopra at qlogic.com
Wed Sep 9 20:06:15 UTC 2015


> -----Original Message-----
> From: Jesse Gross [mailto:jesse at nicira.com]
> Sent: Wednesday, September 09, 2015 10:41 PM
> To: Manish Chopra
> Cc: bugs at openvswitch.org; pshelar at nicira.com; Yuval Mintz; Ashish Kumar
> Subject: Re: [OVS v2.4.0] - VXLAN UDP port configuration is not notified to L2
> driver/interface.
>
> On Wed, Sep 9, 2015 at 3:03 AM, Manish Chopra <manish.chopra at qlogic.com>
> wrote:
> > Hi,
> >
> > Detailed Description :
> >
> > I am trying to test VXLAN with OVS bridge with L2 driver. With OVS
> > release version [2.4.0] package VXLAN udp port configuration is not
> > notified to L2 driver
> >
> > via ndo_add_vxlan_port interface. Due to this hardware is not able to
> > do offload of features [like checksum etc.], Hence TCP/IP traffic with
> > encapsulated offload enabled on NIC is not working.
>
> You mean offloads aren't being performed and therefore things are slower than
> if it was done in hardware or traffic doesn't flow?
> Offloads should never be mandatory.
>
> What is the base kernel version?

Traffic doesn't flow at all. Our hardware is supportive for encap offloads only when UDP port is configured on hardware.

We claim to support below features for encapsulation  -
ndev->hw_enc_features = NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM

If we remove these features from "ndev->hw_enc_features" then traffic works fine.
Base kernel version is 3.10.0-229.el7.x86_64.

With earlier version of OVS,  UDP port used to be arrived to the L2 driver which used to configure given UDP port on hardware, hence traffic was working fine with above features
enabled in " ndev->hw_enc_features ".

Using our driver with just VXLAN module works fine as VXLAN module layer always notify UDP port to the driver. Please see below code snippet.
The only problem we see is with OVS environment and that too with latest OVS released package.

/* Notify netdevs that UDP port started listening */
static void vxlan_notify_add_rx_port(struct vxlan_sock *vs)
{
        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;
        int err;

        if (sa_family == AF_INET) {
                err = udp_add_offload(&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) {
                if (dev->netdev_ops->ndo_add_vxlan_port)
                        dev->netdev_ops->ndo_add_vxlan_port(dev, sa_family,
                                                            port);
        }
        rcu_read_unlock();
}

Thanks.





________________________________

This message and any attached documents contain information from the sending company or its parent company(s), subsidiaries, divisions or branch offices that may be confidential. If you are not the intended recipient, you may not read, copy, distribute, or use this information. If you have received this transmission in error, please notify the sender immediately by reply e-mail and then delete this message.


More information about the discuss mailing list