summaryrefslogtreecommitdiff
path: root/src/lib/compute_ip_checksum.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/compute_ip_checksum.c')
-rw-r--r--src/lib/compute_ip_checksum.c53
1 files changed, 0 insertions, 53 deletions
diff --git a/src/lib/compute_ip_checksum.c b/src/lib/compute_ip_checksum.c
deleted file mode 100644
index 913f25c10c..0000000000
--- a/src/lib/compute_ip_checksum.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <stdint.h>
-#include <ip_checksum.h>
-
-unsigned long compute_ip_checksum(const void *addr, unsigned long length)
-{
- const uint8_t *ptr;
- volatile union {
- uint8_t byte[2];
- uint16_t word;
- } value;
- unsigned long sum;
- unsigned long i;
- /* In the most straight forward way possible,
- * compute an ip style checksum.
- */
- sum = 0;
- ptr = addr;
- for (i = 0; i < length; i++) {
- unsigned long v;
- v = ptr[i];
- if (i & 1)
- v <<= 8;
- /* Add the new value */
- sum += v;
- /* Wrap around the carry */
- if (sum > 0xFFFF)
- sum = (sum + (sum >> 16)) & 0xFFFF;
- }
- value.byte[0] = sum & 0xff;
- value.byte[1] = (sum >> 8) & 0xff;
- return (~value.word) & 0xFFFF;
-}
-
-unsigned long add_ip_checksums(unsigned long offset, unsigned long sum,
- unsigned long new)
-{
- unsigned long checksum;
- sum = ~sum & 0xFFFF;
- new = ~new & 0xFFFF;
- if (offset & 1) {
- /* byte swap the sum if it came from an odd offset
- * since the computation is endian independent this
- * works.
- */
- new = ((new >> 8) & 0xff) | ((new << 8) & 0xff00);
- }
- checksum = sum + new;
- if (checksum > 0xFFFF)
- checksum -= 0xFFFF;
- return (~checksum) & 0xFFFF;
-}