From 3d8ccb44a6a3dc74b9bf7b765c7a2ae41f771d40 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Wed, 19 Oct 2022 11:43:48 +1100 Subject: Add csum_ip4_header() helper to calculate IPv4 header checksums We calculate IPv4 header checksums in at least two places, in dhcp() and in tap_ip_send. Add a helper to handle this calculation in both places. Signed-off-by: David Gibson Signed-off-by: Stefano Brivio --- checksum.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'checksum.c') diff --git a/checksum.c b/checksum.c index cf6fc31..7b83196 100644 --- a/checksum.c +++ b/checksum.c @@ -115,6 +115,16 @@ uint16_t csum_unaligned(const void *buf, size_t len, uint32_t init) return (uint16_t)~csum_fold(sum_16b(buf, len) + init); } +/** + * csum_ip4_header() - Calculate and set IPv4 header checksum + * @ip4h: IPv4 header + */ +void csum_ip4_header(struct iphdr *ip4h) +{ + ip4h->check = 0; + ip4h->check = csum_unaligned(ip4h, (size_t)ip4h->ihl * 4, 0); +} + /** * csum_udp4() - Calculate and set checksum for a UDP over IPv4 packet * @udp4hr: UDP header, initialised apart from checksum -- cgit v1.2.3