• Alexander Duyck's avatar
    i40e/i40evf: Fix i40e_rx_checksum · 858296c8
    Alexander Duyck authored
    There are a couple of issues I found in i40e_rx_checksum while doing some
    recent testing.  As a result I have found the Rx checksum logic is pretty
    much broken and returning that the checksum is valid for tunnels in cases
    where it is not.
    
    First the inner types are not the correct values to use to test for if a
    tunnel is present or not.  In addition the inner protocol types are not a
    bitmask as such performing an OR of the values doesn't make sense.  I have
    instead changed the code so that the inner protocol types are used to
    determine if we report CHECKSUM_UNNECESSARY or not.  For anything that does
    not end in UDP, TCP, or SCTP it doesn't make much sense to report a
    checksum offload since it won't contain a checksum anyway.
    
    This leaves us with the need to set the csum_level based on some value.
    For that purpose I am using the tunnel_type field.  If the tunnel type is
    GRENAT or greater then this means we have a GRE or UDP tunnel with an inner
    header.  In the case of GRE or UDP we will have a possible checksum present
    so for this reason it should be safe to set the csum_level to 1 to indicate
    that we are reporting the state of the inner header.
    Signed-off-by: default avatarAlexander Duyck <aduyck@mirantis.com>
    Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    858296c8
i40e_txrx.c 83.4 KB