• Salil's avatar
    net: hns: Fix to conditionally convey RX checksum flag to stack · 862b3d20
    Salil authored
    This patch introduces the RX checksum function to check the
    status of the hardware calculated checksum and its error and
    appropriately convey status to the upper stack in skb->ip_summed
    field.
    
    In hardware, we only support checksum for the following
    protocols:
    1) IPv4,
    2) TCP(over IPv4 or IPv6),
    3) UDP(over IPv4 or IPv6),
    4) SCTP(over IPv4 or IPv6)
    but we support many L3(IPv4, IPv6, MPLS, PPPoE etc) and
    L4(TCP, UDP, GRE, SCTP, IGMP, ICMP etc.) protocols.
    
    Hardware limitation:
    Our present hardware RX Descriptor lacks L3/L4 checksum
    "Status & Error" bit (which usually can be used to indicate whether
    checksum was calculated by the hardware and if there was any error
    encountered during checksum calculation).
    
    Software workaround:
    We do get info within the RX descriptor about the kind of
    L3/L4 protocol coming in the packet and the error status. These
    errors might not just be checksum errors but could be related to
    version, length of IPv4, UDP, TCP etc.
    Because there is no-way of knowing if it is a L3/L4 error due
    to bad checksum or any other L3/L4 error, we will not (cannot)
    convey hardware checksum status(CHECKSUM_UNNECESSARY) for such
    cases to upper stack and will not maintain the RX L3/L4 checksum
    counters as well.
    Signed-off-by: default avatarSalil Mehta <salil.mehta@huawei.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    862b3d20
hns_enet.c 56.3 KB