net/netvsc: fix the calculation of checksums based on mbuf flag
PATCH 1/1 net/netvsc: fix the calculation of checksums based on mbuf flag
From: Long Li <[email protected]>
The netvsc should use RTE_MBUF_F_TX_L4_MASK and check the value to decide the correct way to calculate checksums.
--- drivers/net/netvsc/hn_rxtx.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)
drivers/net/netvsc/hn_rxtx.c +9 -4
@@ -1348,8 +1348,11 @@ static void hn_encap(struct rndis_packet_msg *pkt, *pi_data =NDIS_LSO2_INFO_MAKEIPV4 (hlen, m->tso_segsz); } - }else if (m->ol_flags & - (RTE_MBUF_F_TX_TCP_CKSUM |RTE_MBUF_F_TX_UDP_CKSUM |RTE_MBUF_F_TX_IP_CKSUM )) { + }else if ((m->ol_flags &RTE_MBUF_F_TX_L4_MASK ) == +RTE_MBUF_F_TX_TCP_CKSUM || + (m->ol_flags &RTE_MBUF_F_TX_L4_MASK ) == +RTE_MBUF_F_TX_UDP_CKSUM || + (m->ol_flags &RTE_MBUF_F_TX_IP_CKSUM )) { pi_data =hn_rndis_pktinfo_append (pkt,NDIS_TXCSUM_INFO_SIZE ,NDIS_PKTINFO_TYPE_CSUM ); *pi_data =0 ;
@@ -1363,9 +1366,11 @@ static void hn_encap(struct rndis_packet_msg *pkt, *pi_data |=NDIS_TXCSUM_INFO_IPCS ; } -if (m->ol_flags &RTE_MBUF_F_TX_TCP_CKSUM ) +if ((m->ol_flags &RTE_MBUF_F_TX_L4_MASK ) == +RTE_MBUF_F_TX_TCP_CKSUM ) *pi_data |=NDIS_TXCSUM_INFO_MKTCPCS (hlen); -else if (m->ol_flags &RTE_MBUF_F_TX_UDP_CKSUM ) +else if ((m->ol_flags &RTE_MBUF_F_TX_L4_MASK ) == +RTE_MBUF_F_TX_UDP_CKSUM ) *pi_data |=NDIS_TXCSUM_INFO_MKUDPCS (hlen); }
Signature · 1 line
2.32.0
Quoted 5 lines · On Wed, Mar 23, 2022 at 5:28 AM <[email protected]> wrote:
From: Long Li <[email protected]>
The netvsc should use
RTE_MBUF_F_TX_L4_MASKand check the value to decide the correct way to calculate checksums.
It's better to describe what the impact for an application is. Do I understand correctly that UDP checksum offloading was broken?
I guess you want this backported.
Quoted 41 lines
Signed-off-by Long Li <[email protected]>--- drivers/net/netvsc/hn_rxtx.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)drivers/net/netvsc/hn_rxtx.c +9
-5@@ -1348,8 +1348,11 @@ static void hn_encap(struct rndis_packet_msg *pkt, *pi_data =NDIS_LSO2_INFO_MAKEIPV4 (hlen, m->tso_segsz); } - }else if (m->ol_flags & - (RTE_MBUF_F_TX_TCP_CKSUM |RTE_MBUF_F_TX_UDP_CKSUM |RTE_MBUF_F_TX_IP_CKSUM )) { + }else if ((m->ol_flags &RTE_MBUF_F_TX_L4_MASK ) == +RTE_MBUF_F_TX_TCP_CKSUM || + (m->ol_flags &RTE_MBUF_F_TX_L4_MASK ) == +RTE_MBUF_F_TX_UDP_CKSUM || + (m->ol_flags &RTE_MBUF_F_TX_IP_CKSUM )) { pi_data =hn_rndis_pktinfo_append (pkt,NDIS_TXCSUM_INFO_SIZE ,NDIS_PKTINFO_TYPE_CSUM ); *pi_data =0 ;@@ -1363,9 +1366,11 @@ static void hn_encap(struct rndis_packet_msg *pkt, *pi_data |=NDIS_TXCSUM_INFO_IPCS ; } -if (m->ol_flags &RTE_MBUF_F_TX_TCP_CKSUM ) +if ((m->ol_flags &RTE_MBUF_F_TX_L4_MASK ) == +RTE_MBUF_F_TX_TCP_CKSUM ) *pi_data |=NDIS_TXCSUM_INFO_MKTCPCS (hlen); -else if (m->ol_flags &RTE_MBUF_F_TX_UDP_CKSUM ) +else if ((m->ol_flags &RTE_MBUF_F_TX_L4_MASK ) == +RTE_MBUF_F_TX_UDP_CKSUM ) *pi_data |=NDIS_TXCSUM_INFO_MKUDPCS (hlen); } --2.32.0
Signature · 1 line
David Marchand
Quoted 10 lines
Subject: Re: [PATCH] net/netvsc: fix the calculation of checksums based on mbuf flag
Quoted 5 lines · On Wed, Mar 23, 2022 at 5:28 AM <[email protected]> wrote:
From: Long Li <[email protected]>
The netvsc should use
RTE_MBUF_F_TX_L4_MASKand check the value to decide the correct way to calculate checksums.
Quoted 7 lines
It's better to describe what the impact for an application is. Do I understand correctly that UDP checksum offloading was broken?
I guess you want this backported.
Fixes 4e9c73e96e83 ("net/netvsc: add Hyper-V network device")
I'm sending V2 with the Fixes tag.
Thanks,
Long
Quoted 51 lines
drivers/net/netvsc/hn_rxtx.c static void hn_encap(struct rndis_packet_msg
Quoted 13 lines
Signed-off-by Long Li <[email protected]>--- drivers/net/netvsc/hn_rxtx.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)(quoted diff) +0
-0
b/drivers/net/netvsc/hn_rxtx.cindex028f176c7e..34f40be5b8100644drivers/net/netvsc/hn_rxtx.c +0
-0@@ -1348,8 +1348,11 @@ static void hn_encap(struct rndis_packet_msg*pkt,
drivers/net/netvsc/hn_rxtx.c static void hn_encap(struct rndis_packet_msg *pkt,
Quoted 5 lines
drivers/net/netvsc/hn_rxtx.c +0
-2*pi_data =NDIS_LSO2_INFO_MAKEIPV4 (hlen, m->tso_segsz); } - } else if (m->ol_flags & - (RTE_MBUF_F_TX_TCP_CKSUM |
RTE_MBUF_F_TX_UDP_CKSUM|RTE_MBUF_F_TX_IP_CKSUM)) {drivers/net/netvsc/hn_rxtx.c static void hn_encap(struct rndis_packet_msg *pkt,
Quoted 6 lines
drivers/net/netvsc/hn_rxtx.c +5
-0+ }else if ((m->ol_flags &RTE_MBUF_F_TX_L4_MASK ) == +RTE_MBUF_F_TX_TCP_CKSUM || + (m->ol_flags &RTE_MBUF_F_TX_L4_MASK ) == +RTE_MBUF_F_TX_UDP_CKSUM || + (m->ol_flags &RTE_MBUF_F_TX_IP_CKSUM )) { pi_data = hn_rndis_pktinfo_append(pkt,
NDIS_TXCSUM_INFO_SIZE,drivers/net/netvsc/hn_rxtx.c static void hn_encap(struct rndis_packet_msg
Quoted 3 lines
drivers/net/netvsc/hn_rxtx.c +0
-0NDIS_PKTINFO_TYPE_CSUM); *pi_data =0 ;@@ -1363,9 +1366,11 @@ static void hn_encap(struct rndis_packet_msg*pkt,
Quoted 14 lines
drivers/net/netvsc/hn_rxtx.c +4
-3*pi_data |=NDIS_TXCSUM_INFO_IPCS ; } -if (m->ol_flags &RTE_MBUF_F_TX_TCP_CKSUM ) +if ((m->ol_flags &RTE_MBUF_F_TX_L4_MASK ) == +RTE_MBUF_F_TX_TCP_CKSUM ) *pi_data |=NDIS_TXCSUM_INFO_MKTCPCS (hlen); -else if (m->ol_flags &RTE_MBUF_F_TX_UDP_CKSUM ) +else if ((m->ol_flags &RTE_MBUF_F_TX_L4_MASK ) == +RTE_MBUF_F_TX_UDP_CKSUM ) *pi_data |=NDIS_TXCSUM_INFO_MKUDPCS (hlen); } --Quoted 2 lines
2.32.0
--
David Marchand
Quoted 6 lines · On Tue, 22 Mar 2022 21:28:07 -0700 [email protected] wrote:
From: Long Li <[email protected]>
The netvsc should use
RTE_MBUF_F_TX_L4_MASKand check the value to decide the correct way to calculate checksums.Signed-off-by Long Li <[email protected]>