From c6215d902f02d08a59567f3f788caa0e03508c0d Mon Sep 17 00:00:00 2001 From: Dave Barach Date: Thu, 14 Jun 2018 18:05:30 -0400 Subject: ip checksum multiarch support, cleanup When computing tcp/udp checksums across large amounts of data - e.g. when NIC h/w checksum offload is not available - it's worth providing arch-dependent code; if only to compile the code w/ -O3. Fix calculation when data is fully unaligned / on an odd byte boundary. Add a buffer alignment test vector. Change-Id: I7644e2276ac6cbc3f575bf61746a6ffedbbb6150 Signed-off-by: Dave Barach --- src/vnet/ip/ip_packet.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src/vnet/ip/ip_packet.h') diff --git a/src/vnet/ip/ip_packet.h b/src/vnet/ip/ip_packet.h index d3f3de771bc..3c532f10ffe 100644 --- a/src/vnet/ip/ip_packet.h +++ b/src/vnet/ip/ip_packet.h @@ -156,9 +156,13 @@ ip_csum_fold (ip_csum_t c) return c; } -/* Copy data and checksum at the same time. */ -ip_csum_t ip_csum_and_memcpy (ip_csum_t sum, void *dst, void *src, - uword n_bytes); +extern ip_csum_t (*vnet_incremental_checksum_fp) (ip_csum_t, void *, uword); + +always_inline ip_csum_t +ip_incremental_checksum (ip_csum_t sum, void *_data, uword n_bytes) +{ + return (*vnet_incremental_checksum_fp) (sum, _data, n_bytes); +} always_inline u16 ip_csum_and_memcpy_fold (ip_csum_t sum, void *dst) -- cgit 1.2.3-korg