lkml.org 
[lkml]   [2020]   [Sep]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.8 073/177] net: hns3: Fix for geneve tx checksum bug
    Date
    From: Yi Li <yili@winhong.com>

    [ Upstream commit a156998fc92d3859c8e820f1583f6d0541d643c3 ]

    when skb->encapsulation is 0, skb->ip_summed is CHECKSUM_PARTIAL
    and it is udp packet, which has a dest port as the IANA assigned.
    the hardware is expected to do the checksum offload, but the
    hardware will not do the checksum offload when udp dest port is
    6081.

    This patch fixes it by doing the checksum in software.

    Reported-by: Li Bing <libing@winhong.com>
    Signed-off-by: Yi Li <yili@winhong.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 6 ++++--
    1 file changed, 4 insertions(+), 2 deletions(-)

    diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
    index 71ed4c54f6d5d..eaadcc7043349 100644
    --- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
    +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
    @@ -20,6 +20,7 @@
    #include <net/pkt_cls.h>
    #include <net/tcp.h>
    #include <net/vxlan.h>
    +#include <net/geneve.h>

    #include "hnae3.h"
    #include "hns3_enet.h"
    @@ -780,7 +781,7 @@ static int hns3_get_l4_protocol(struct sk_buff *skb, u8 *ol4_proto,
    * and it is udp packet, which has a dest port as the IANA assigned.
    * the hardware is expected to do the checksum offload, but the
    * hardware will not do the checksum offload when udp dest port is
    - * 4789.
    + * 4789 or 6081.
    */
    static bool hns3_tunnel_csum_bug(struct sk_buff *skb)
    {
    @@ -789,7 +790,8 @@ static bool hns3_tunnel_csum_bug(struct sk_buff *skb)
    l4.hdr = skb_transport_header(skb);

    if (!(!skb->encapsulation &&
    - l4.udp->dest == htons(IANA_VXLAN_UDP_PORT)))
    + (l4.udp->dest == htons(IANA_VXLAN_UDP_PORT) ||
    + l4.udp->dest == htons(GENEVE_UDP_PORT))))
    return false;

    skb_checksum_help(skb);
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-09-16 01:32    [W:4.185 / U:0.140 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site