Skip to content

Commit cfc5b5e

Browse files
authored
Set checksum field to zero before performing SW checksum (#5122)
* Set 0 before xsum calculation
1 parent 2e4a9f0 commit cfc5b5e

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

src/platform/datapath_raw_socket.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -769,12 +769,14 @@ CxPlatFramingWriteHeaders(
769769
IPv4->HeaderChecksum = 0;
770770
CxPlatDpRawTxSetL3ChecksumOffload(SendData);
771771
} else {
772+
*((volatile uint16_t*)(&IPv4->HeaderChecksum)) = 0;
772773
IPv4->HeaderChecksum = ~CxPlatFramingChecksum((uint8_t*)IPv4, sizeof(IPV4_HEADER), 0);
773774
}
774775
EthType = ETHERNET_TYPE_IPV4;
775776
Ethernet = (ETHERNET_HEADER*)(((uint8_t*)IPv4) - sizeof(ETHERNET_HEADER));
776777
IpHeaderLen = sizeof(IPV4_HEADER);
777778
if (Route->UseQTIP) {
779+
*((volatile uint16_t*)(&TCP->Checksum)) = 0;
778780
TCP->Checksum =
779781
CxPlatFramingTransportChecksum(
780782
IPv4->Source, IPv4->Destination,
@@ -783,6 +785,7 @@ CxPlatFramingWriteHeaders(
783785
(uint8_t*)TCP, sizeof(TCP_HEADER) + Buffer->Length,
784786
SkipTransportLayerXsum);
785787
} else {
788+
*((volatile uint16_t*)(&UDP->Checksum)) = 0;
786789
UDP->Checksum =
787790
CxPlatFramingTransportChecksum(
788791
IPv4->Source, IPv4->Destination,
@@ -827,6 +830,7 @@ CxPlatFramingWriteHeaders(
827830
Ethernet = (ETHERNET_HEADER*)(((uint8_t*)IPv6) - sizeof(ETHERNET_HEADER));
828831
IpHeaderLen = sizeof(IPV6_HEADER);
829832
if (Route->UseQTIP) {
833+
*((volatile uint16_t*)(&TCP->Checksum)) = 0;
830834
TCP->Checksum =
831835
CxPlatFramingTransportChecksum(
832836
IPv6->Source, IPv6->Destination,
@@ -835,6 +839,7 @@ CxPlatFramingWriteHeaders(
835839
(uint8_t*)TCP, sizeof(TCP_HEADER) + Buffer->Length,
836840
SkipTransportLayerXsum);
837841
} else {
842+
*((volatile uint16_t*)(&UDP->Checksum)) = 0;
838843
UDP->Checksum =
839844
CxPlatFramingTransportChecksum(
840845
IPv6->Source, IPv6->Destination,

0 commit comments

Comments
 (0)