summaryrefslogtreecommitdiffhomepage
path: root/pkg/tcpip/header/checksum.go
diff options
context:
space:
mode:
authorBhasker Hariharan <bhaskerh@google.com>2020-01-27 05:33:03 -0800
committergVisor bot <gvisor-bot@google.com>2020-01-27 05:34:34 -0800
commit6b43cf791a74a746443f70f98d859c1246f87e2a (patch)
treeaf4ef0d22e2e32eed3395f7836f18e9dd62c26fc /pkg/tcpip/header/checksum.go
parent68514d4ba3f7c06a89a8d0cd79327ede62dae65b (diff)
Replace calculateChecksum w/ the unrolled version.
Fixes #1656 PiperOrigin-RevId: 291703760
Diffstat (limited to 'pkg/tcpip/header/checksum.go')
-rw-r--r--pkg/tcpip/header/checksum.go15
1 files changed, 9 insertions, 6 deletions
diff --git a/pkg/tcpip/header/checksum.go b/pkg/tcpip/header/checksum.go
index ce57b581a..204285576 100644
--- a/pkg/tcpip/header/checksum.go
+++ b/pkg/tcpip/header/checksum.go
@@ -160,20 +160,23 @@ func unrolledCalculateChecksum(buf []byte, odd bool, initial uint32) (uint16, bo
return ChecksumCombine(uint16(v), uint16(v>>16)), odd
}
-// Checksum calculates the checksum (as defined in RFC 1071) of the bytes in the
-// given byte array.
+// ChecksumOld calculates the checksum (as defined in RFC 1071) of the bytes in
+// the given byte array. This function uses a non-optimized implementation. Its
+// only retained for reference and to use as a benchmark/test. Most code should
+// use the header.Checksum function.
//
// The initial checksum must have been computed on an even number of bytes.
-func Checksum(buf []byte, initial uint16) uint16 {
+func ChecksumOld(buf []byte, initial uint16) uint16 {
s, _ := calculateChecksum(buf, false, uint32(initial))
return s
}
-// UnrolledChecksum calculates the checksum (as defined in RFC 1071) of the
-// bytes in the given byte array.
+// Checksum calculates the checksum (as defined in RFC 1071) of the bytes in the
+// given byte array. This function uses an optimized unrolled version of the
+// checksum algorithm.
//
// The initial checksum must have been computed on an even number of bytes.
-func UnrolledChecksum(buf []byte, initial uint16) uint16 {
+func Checksum(buf []byte, initial uint16) uint16 {
s, _ := unrolledCalculateChecksum(buf, false, uint32(initial))
return s
}