diff options
author | Simon Glass <sjg@chromium.org> | 2015-01-19 22:16:07 -0700 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2015-01-23 21:44:59 -0700 |
commit | 9b0e35cb4889eb04a7ea5dd648d73df0bf37cc68 (patch) | |
tree | 5e3b454e1d4d9a07de41419d56c62b40633adddf /include/net.h | |
parent | 5da38086bd6c39efd09e57900702b99541844339 (diff) | |
download | u-boot-9b0e35cb4889eb04a7ea5dd648d73df0bf37cc68.tar.gz u-boot-9b0e35cb4889eb04a7ea5dd648d73df0bf37cc68.tar.bz2 u-boot-9b0e35cb4889eb04a7ea5dd648d73df0bf37cc68.zip |
net: Add a separate file for IP checksumming
Move the checksum code out into its own file so it can be used elsewhere.
Also use a new version which supports a length which is not a multiple of
2 and add a new function to add two checksums.
Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'include/net.h')
-rw-r--r-- | include/net.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/include/net.h b/include/net.h index 3da35fe981..73ea88b42d 100644 --- a/include/net.h +++ b/include/net.h @@ -482,6 +482,36 @@ extern void net_set_ip_header(uchar *pkt, IPaddr_t dest, IPaddr_t source); extern void net_set_udp_header(uchar *pkt, IPaddr_t dest, int dport, int sport, int len); +/** + * compute_ip_checksum() - Compute IP checksum + * + * @addr: Address to check (must be 16-bit aligned) + * @nbytes: Number of bytes to check (normally a multiple of 2) + * @return 16-bit IP checksum + */ +unsigned compute_ip_checksum(const void *addr, unsigned nbytes); + +/** + * add_ip_checksums() - add two IP checksums + * + * @offset: Offset of first sum (if odd we do a byte-swap) + * @sum: First checksum + * @new_sum: New checksum to add + * @return updated 16-bit IP checksum + */ +unsigned add_ip_checksums(unsigned offset, unsigned sum, unsigned new_sum); + +/** + * ip_checksum_ok() - check if a checksum is correct + * + * This works by making sure the checksum sums to 0 + * + * @addr: Address to check (must be 16-bit aligned) + * @nbytes: Number of bytes to check (normally a multiple of 2) + * @return true if the checksum matches, false if not + */ +int ip_checksum_ok(const void *addr, unsigned nbytes); + /* Checksum */ extern int NetCksumOk(uchar *, int); /* Return true if cksum OK */ extern uint NetCksum(uchar *, int); /* Calculate the checksum */ |