lkml.org 
[lkml]   [2022]   [Aug]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.19 230/365] i40e: Fix tunnel checksum offload with fragmented traffic
    Date
    From: Przemyslaw Patynowski <przemyslawx.patynowski@intel.com>

    commit 2c6482091f01ba104cf8ee549aa5c717e80d43ea upstream.

    Fix checksum offload on VXLAN tunnels.
    In case, when mpls protocol is not used, set l4 header to transport
    header of skb. This fixes case, when user tries to offload checksums
    of VXLAN tunneled traffic.

    Steps for reproduction (requires link partner with tunnels):
    ip l s enp130s0f0 up
    ip a f enp130s0f0
    ip a a 10.10.110.2/24 dev enp130s0f0
    ip l s enp130s0f0 mtu 1600
    ip link add vxlan12_sut type vxlan id 12 group 238.168.100.100 dev \
    enp130s0f0 dstport 4789
    ip l s vxlan12_sut up
    ip a a 20.10.110.2/24 dev vxlan12_sut
    iperf3 -c 20.10.110.1 #should connect

    Without this patch, TX descriptor was using wrong data, due to
    l4 header pointing wrong address. NIC would then drop those packets
    internally, due to incorrect TX descriptor data, which increased
    GLV_TEPC register.

    Fixes: b4fb2d33514a ("i40e: Add support for MPLS + TSO")
    Signed-off-by: Przemyslaw Patynowski <przemyslawx.patynowski@intel.com>
    Signed-off-by: Mateusz Palczewski <mateusz.palczewski@intel.com>
    Tested-by: Marek Szlosek <marek.szlosek@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/intel/i40e/i40e_txrx.c | 8 +++++---
    1 file changed, 5 insertions(+), 3 deletions(-)

    --- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c
    +++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
    @@ -3204,11 +3204,13 @@ static int i40e_tx_enable_csum(struct sk

    protocol = vlan_get_protocol(skb);

    - if (eth_p_mpls(protocol))
    + if (eth_p_mpls(protocol)) {
    ip.hdr = skb_inner_network_header(skb);
    - else
    + l4.hdr = skb_checksum_start(skb);
    + } else {
    ip.hdr = skb_network_header(skb);
    - l4.hdr = skb_checksum_start(skb);
    + l4.hdr = skb_transport_header(skb);
    + }

    /* set the tx_flags to indicate the IP protocol type. this is
    * required so that checksum header computation below is accurate.

    \
     
     \ /
      Last update: 2022-08-23 11:08    [W:4.051 / U:0.172 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site