summaryrefslogtreecommitdiffhomepage
path: root/pkg/tcpip/transport
diff options
context:
space:
mode:
authorAndrei Vagin <avagin@google.com>2019-03-26 17:14:04 -0700
committerShentubot <shentubot@google.com>2019-03-26 17:15:13 -0700
commit654e878abba174d8f7d588f38ecfd5a020bf581e (patch)
tree0119b118423522981de149a475b64829c3bed882 /pkg/tcpip/transport
parent06ec97a3f823f1f5d928fc9c2beb3a11c2c88487 (diff)
netstack: Don't exclude length when a pseudo-header checksum is calculated
This is a preparation for GSO changes (cl/234508902). RELNOTES[gofers]: Refactor checksum code to include length, which it already did, but in a convoluted way. Should be a no-op. PiperOrigin-RevId: 240460794 Change-Id: I537381bc670b5a9f5d70a87aa3eb7252e8f5ace2
Diffstat (limited to 'pkg/tcpip/transport')
-rw-r--r--pkg/tcpip/transport/tcp/connect.go4
-rw-r--r--pkg/tcpip/transport/tcp/testing/context/context.go6
-rw-r--r--pkg/tcpip/transport/udp/endpoint.go4
-rw-r--r--pkg/tcpip/transport/udp/udp_test.go6
4 files changed, 8 insertions, 12 deletions
diff --git a/pkg/tcpip/transport/tcp/connect.go b/pkg/tcpip/transport/tcp/connect.go
index 4d352b23c..c4353718e 100644
--- a/pkg/tcpip/transport/tcp/connect.go
+++ b/pkg/tcpip/transport/tcp/connect.go
@@ -589,10 +589,10 @@ func sendTCP(r *stack.Route, id stack.TransportEndpointID, data buffer.Vectorise
// Only calculate the checksum if offloading isn't supported.
if r.Capabilities()&stack.CapabilityChecksumOffload == 0 {
length := uint16(hdr.UsedLength() + data.Size())
- xsum := r.PseudoHeaderChecksum(ProtocolNumber)
+ xsum := r.PseudoHeaderChecksum(ProtocolNumber, length)
xsum = header.ChecksumVV(data, xsum)
- tcp.SetChecksum(^tcp.CalculateChecksum(xsum, length))
+ tcp.SetChecksum(^tcp.CalculateChecksum(xsum))
}
r.Stats().TCP.SegmentsSent.Increment()
diff --git a/pkg/tcpip/transport/tcp/testing/context/context.go b/pkg/tcpip/transport/tcp/testing/context/context.go
index fb4ae4a1b..aa2a73829 100644
--- a/pkg/tcpip/transport/tcp/testing/context/context.go
+++ b/pkg/tcpip/transport/tcp/testing/context/context.go
@@ -332,9 +332,8 @@ func (c *Context) BuildSegment(payload []byte, h *Headers) buffer.VectorisedView
xsum = header.Checksum([]byte{0, uint8(tcp.ProtocolNumber)}, xsum)
// Calculate the TCP checksum and set it.
- length := uint16(header.TCPMinimumSize + len(h.TCPOpts) + len(payload))
xsum = header.Checksum(payload, xsum)
- t.SetChecksum(^t.CalculateChecksum(xsum, length))
+ t.SetChecksum(^t.CalculateChecksum(xsum))
// Inject packet.
return buf.ToVectorisedView()
@@ -487,9 +486,8 @@ func (c *Context) SendV6Packet(payload []byte, h *Headers) {
xsum = header.Checksum([]byte{0, uint8(tcp.ProtocolNumber)}, xsum)
// Calculate the TCP checksum and set it.
- length := uint16(header.TCPMinimumSize + len(payload))
xsum = header.Checksum(payload, xsum)
- t.SetChecksum(^t.CalculateChecksum(xsum, length))
+ t.SetChecksum(^t.CalculateChecksum(xsum))
// Inject packet.
c.linkEP.Inject(ipv6.ProtocolNumber, buf.ToVectorisedView())
diff --git a/pkg/tcpip/transport/udp/endpoint.go b/pkg/tcpip/transport/udp/endpoint.go
index 82d7f80a3..b68ed8561 100644
--- a/pkg/tcpip/transport/udp/endpoint.go
+++ b/pkg/tcpip/transport/udp/endpoint.go
@@ -641,11 +641,11 @@ func sendUDP(r *stack.Route, data buffer.VectorisedView, localPort, remotePort u
// Only calculate the checksum if offloading isn't supported.
if r.Capabilities()&stack.CapabilityChecksumOffload == 0 {
- xsum := r.PseudoHeaderChecksum(ProtocolNumber)
+ xsum := r.PseudoHeaderChecksum(ProtocolNumber, length)
for _, v := range data.Views() {
xsum = header.Checksum(v, xsum)
}
- udp.SetChecksum(^udp.CalculateChecksum(xsum, length))
+ udp.SetChecksum(^udp.CalculateChecksum(xsum))
}
// Track count of packets sent.
diff --git a/pkg/tcpip/transport/udp/udp_test.go b/pkg/tcpip/transport/udp/udp_test.go
index 884a76b04..0d5871615 100644
--- a/pkg/tcpip/transport/udp/udp_test.go
+++ b/pkg/tcpip/transport/udp/udp_test.go
@@ -200,9 +200,8 @@ func (c *testContext) sendV6Packet(payload []byte, h *headers) {
xsum = header.Checksum([]byte{0, uint8(udp.ProtocolNumber)}, xsum)
// Calculate the UDP checksum and set it.
- length := uint16(header.UDPMinimumSize + len(payload))
xsum = header.Checksum(payload, xsum)
- u.SetChecksum(^u.CalculateChecksum(xsum, length))
+ u.SetChecksum(^u.CalculateChecksum(xsum))
// Inject packet.
c.linkEP.Inject(ipv6.ProtocolNumber, buf.ToVectorisedView())
@@ -239,9 +238,8 @@ func (c *testContext) sendPacket(payload []byte, h *headers) {
xsum = header.Checksum([]byte{0, uint8(udp.ProtocolNumber)}, xsum)
// Calculate the UDP checksum and set it.
- length := uint16(header.UDPMinimumSize + len(payload))
xsum = header.Checksum(payload, xsum)
- u.SetChecksum(^u.CalculateChecksum(xsum, length))
+ u.SetChecksum(^u.CalculateChecksum(xsum))
// Inject packet.
c.linkEP.Inject(ipv4.ProtocolNumber, buf.ToVectorisedView())