• Nick Nunley's avatar
    ice: Implement flow for IPv6 next header (extension header) · 1b0b0b58
    Nick Nunley authored
    This patch is based on a similar change to i40e by Slawomir Laba:
    "i40e: Implement flow for IPv6 next header (extension header)".
    
    When a packet contains an IPv6 header with next header which is
    an extension header and not a protocol one, the kernel function
    skb_transport_header called with such sk_buff will return a
    pointer to the extension header and not to the TCP one.
    
    The above explained call caused a problem with packet processing
    for skb with encapsulation for tunnel with ICE_TX_CTX_EIPT_IPV6.
    The extension header was not skipped at all.
    
    The ipv6_skip_exthdr function does check if next header of the IPV6
    header is an extension header and doesn't modify the l4_proto pointer
    if it points to a protocol header value so its safe to omit the
    comparison of exthdr and l4.hdr pointers. The ipv6_skip_exthdr can
    return value -1. This means that the skipping process failed
    and there is something wrong with the packet so it will be dropped.
    
    Fixes: a4e82a81 ("ice: Add support for tunnel offloads")
    Signed-off-by: default avatarNick Nunley <nicholas.d.nunley@intel.com>
    Tested-by: default avatarTony Brelinski <tonyx.brelinski@intel.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    1b0b0b58
ice_txrx.c 70.8 KB