> -----Original Message-----
> From: Jesse Gross [mailto:[email protected]]
> Sent: Wednesday, September 09, 2015 10:41 PM
> To: Manish Chopra
> Cc: [email protected]; [email protected]; 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 <[email protected]>
> 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.
_______________________________________________
discuss mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/discuss

Reply via email to