• Xin Long's avatar
    ip_gre: add csum offload support for gre header · efa1a65c
    Xin Long authored
    This patch is to add csum offload support for gre header:
    
    On the TX path in gre_build_header(), when CHECKSUM_PARTIAL's set
    for inner proto, it will calculate the csum for outer proto, and
    inner csum will be offloaded later. Otherwise, CHECKSUM_PARTIAL
    and csum_start/offset will be set for outer proto, and the outer
    csum will be offloaded later.
    
    On the GSO path in gre_gso_segment(), when CHECKSUM_PARTIAL is
    not set for inner proto and the hardware supports csum offload,
    CHECKSUM_PARTIAL and csum_start/offset will be set for outer
    proto, and outer csum will be offloaded later. Otherwise, it
    will do csum for outer proto by calling gso_make_checksum().
    
    Note that SCTP has to do the csum by itself for non GSO path in
    sctp_packet_pack(), as gre_build_header() can't handle the csum
    with CHECKSUM_PARTIAL set for SCTP CRC csum offload.
    
    v1->v2:
      - remove the SCTP part, as GRE dev doesn't support SCTP CRC CSUM
        and it will always do checksum for SCTP in sctp_packet_pack()
        when it's not a GSO packet.
    Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    efa1a65c
gre_offload.c 7.24 KB