This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "".
The branch, api-next has been updated via a2e288f35da1f3838f0650157932a93091e6c3f4 (commit) via 7ea3096a0b64b605fd14d654a6b1f644ea72ba3d (commit) via 458683cb05ecdf60c38d2827e8f6241ab4afa8e4 (commit) via 9695d43dc1afa2baf968c97f1afff11e381408aa (commit) via a63f25ff2994b2df78c24f1f8b63d0e06628eb68 (commit) via 34884aa91524c4329e4ea1a9b312538d8f7dd187 (commit) from d74515dcb08a8f15ffee5fca621bd8dc1742a9f5 (commit)
Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below.
- Log ----------------------------------------------------------------- commit a2e288f35da1f3838f0650157932a93091e6c3f4 Author: Petri Savolainen petri.savolainen@linaro.org Date: Fri Sep 15 15:15:19 2017 +0300
validation: chksum: add test chksum suite
Create chksum test suite and ones complement sum test in there.
Signed-off-by: Petri Savolainen petri.savolainen@linaro.org Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/test/common_plat/m4/configure.m4 b/test/common_plat/m4/configure.m4 index 13a13bd5..c06daea2 100644 --- a/test/common_plat/m4/configure.m4 +++ b/test/common_plat/m4/configure.m4 @@ -11,6 +11,7 @@ AC_CONFIG_FILES([test/common_plat/Makefile test/common_plat/validation/api/atomic/Makefile test/common_plat/validation/api/barrier/Makefile test/common_plat/validation/api/buffer/Makefile + test/common_plat/validation/api/chksum/Makefile test/common_plat/validation/api/classification/Makefile test/common_plat/validation/api/cpumask/Makefile test/common_plat/validation/api/crypto/Makefile diff --git a/test/common_plat/validation/api/Makefile.am b/test/common_plat/validation/api/Makefile.am index b00fb2e9..65b2e3b9 100644 --- a/test/common_plat/validation/api/Makefile.am +++ b/test/common_plat/validation/api/Makefile.am @@ -1,6 +1,7 @@ ODP_MODULES = atomic \ barrier \ buffer \ + chksum \ classification \ cpumask \ crypto \ diff --git a/test/common_plat/validation/api/chksum/.gitignore b/test/common_plat/validation/api/chksum/.gitignore new file mode 100644 index 00000000..c69e8c47 --- /dev/null +++ b/test/common_plat/validation/api/chksum/.gitignore @@ -0,0 +1 @@ +chksum_main diff --git a/test/common_plat/validation/api/chksum/Makefile.am b/test/common_plat/validation/api/chksum/Makefile.am new file mode 100644 index 00000000..46f3643e --- /dev/null +++ b/test/common_plat/validation/api/chksum/Makefile.am @@ -0,0 +1,5 @@ +include ../Makefile.inc + +test_PROGRAMS = chksum_main$(EXEEXT) +chksum_main_SOURCES = chksum_main.c chksum.c chksum.h +chksum_main_LDADD = $(LIBCUNIT_COMMON) $(LIBODP) diff --git a/test/common_plat/validation/api/chksum/chksum.c b/test/common_plat/validation/api/chksum/chksum.c new file mode 100644 index 00000000..b05f3bf0 --- /dev/null +++ b/test/common_plat/validation/api/chksum/chksum.c @@ -0,0 +1,134 @@ +/* Copyright (c) 2017, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include <odp_api.h> +#include <odp_cunit_common.h> +#include "chksum.h" + +#define NUM_IP_HDR 5 +#define IP_HDR_LEN 20 + +#define NUM_UDP 4 +#define MAX_UDP_LEN 128 + +uint8_t ip_hdr_test_vect[NUM_IP_HDR][IP_HDR_LEN] ODP_ALIGNED(4) = { + { 0x45, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x40, 0x11, + 0xAB, 0x33, 0xC0, 0xA8, 0x2C, 0xA2, 0xC0, 0xA8, 0x21, 0x99 + }, + { 0x45, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x40, 0x11, + 0xAB, 0xCA, 0xC0, 0xA8, 0x2C, 0x5E, 0xC0, 0xA8, 0x21, 0x46 + }, + { 0x45, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x40, 0x11, + 0xAB, 0x64, 0xC0, 0xA8, 0x2C, 0x20, 0xC0, 0xA8, 0x21, 0xEA + }, + { 0x45, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x40, 0x11, + 0xAB, 0x59, 0xC0, 0xA8, 0x2C, 0xD2, 0xC0, 0xA8, 0x21, 0x43 + }, + { 0x45, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x40, 0x11, + 0xAC, 0x06, 0xC0, 0xA8, 0x2C, 0x5C, 0xC0, 0xA8, 0x21, 0x0C + } +}; + +struct udp_test_vect_s { + uint32_t len; + + uint8_t data[MAX_UDP_LEN]; +}; + +struct udp_test_vect_s udp_test_vect[NUM_UDP] ODP_ALIGNED(4) = { + {.len = 38, + .data = { 0x00, 0x11, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x1A, 0xFF, 0x3C, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0xC7, 0xBF + } }, + + {.len = 39, + .data = { 0x00, 0x11, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x40, 0x09, 0x35, 0x00, 0x1B, 0xD6, 0x43, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0xBF, 0xB7 + } }, + + {.len = 59, + .data = { 0x00, 0x11, 0x00, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x32, 0x5F, 0x01, 0x71, 0x00, 0x2F, 0xCB, 0xC0, + 0x09, 0x8B, 0x61, 0x3E, 0x3A, 0x7F, 0x30, 0x0F, 0x4D, 0xEE, + 0x2D, 0x7D, 0x11, 0xBB, 0xBB, 0x34, 0x0E, 0x9E, 0xC5, 0x3D, + 0xBB, 0x81, 0x9A, 0x7F, 0xF2, 0x2A, 0xFC, 0x85, 0xA0, 0x1B, + 0x73, 0x81, 0xC1, 0xB6, 0xE8, 0x91, 0x8C, 0xD8, 0x7F + } }, + + {.len = 109, + .data = { 0x00, 0x11, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x32, 0x5F, 0x01, 0x71, 0x00, 0x61, 0xCB, 0x5C, + 0x61, 0xAD, 0xFD, 0xE7, 0x4E, 0x98, 0x69, 0x59, 0x12, 0x3F, + 0xDF, 0xF6, 0x79, 0x8B, 0xB3, 0x94, 0x94, 0x9F, 0x8C, 0x0B, + 0x67, 0xBA, 0xBA, 0x3C, 0xE2, 0x5F, 0xCA, 0x52, 0x13, 0xB4, + 0x57, 0x48, 0x99, 0x29, 0x23, 0xAC, 0x5C, 0x59, 0x66, 0xA2, + 0x7B, 0x35, 0x65, 0x2B, 0x86, 0x5F, 0x47, 0xA7, 0xEE, 0xD4, + 0x24, 0x99, 0xB9, 0xCE, 0x60, 0xAB, 0x7A, 0xE9, 0x37, 0xF2, + 0x81, 0x84, 0x98, 0x72, 0x4F, 0x6A, 0x37, 0xE5, 0x4D, 0xB2, + 0xDE, 0xB8, 0xBD, 0xE3, 0x03, 0x57, 0xF0, 0x5C, 0xA0, 0xAA, + 0xB9, 0xF3, 0x3F, 0xDF, 0x23, 0xDD, 0x54, 0x2F, 0xCE + } } +}; + +/* Test ones complement sum with IPv4 headers */ +void chksum_ones_complement_ip(void) +{ + int i; + uint16_t sum, res; + + for (i = 0; i < NUM_IP_HDR; i++) { + sum = odp_chksum_ones_comp16(ip_hdr_test_vect[i], IP_HDR_LEN); + res = ~sum; + + CU_ASSERT(res == 0); + } +} + +/* Test ones complement sum with various length pseudo UDP packets */ +void chksum_ones_complement_udp(void) +{ + int i; + uint16_t sum, res; + + for (i = 0; i < NUM_UDP; i++) { + sum = odp_chksum_ones_comp16(udp_test_vect[i].data, + udp_test_vect[i].len); + res = ~sum; + + CU_ASSERT(res == 0); + } +} + +odp_testinfo_t chksum_suite[] = { + ODP_TEST_INFO(chksum_ones_complement_ip), + ODP_TEST_INFO(chksum_ones_complement_udp), + ODP_TEST_INFO_NULL, +}; + +odp_suiteinfo_t chksum_suites[] = { + {"Checksum", NULL, NULL, chksum_suite}, + ODP_SUITE_INFO_NULL +}; + +int chksum_main(int argc, char *argv[]) +{ + int ret; + + /* parse common options: */ + if (odp_cunit_parse_options(argc, argv)) + return -1; + + ret = odp_cunit_register(chksum_suites); + + if (ret == 0) + ret = odp_cunit_run(); + + return ret; +} diff --git a/test/common_plat/validation/api/chksum/chksum.h b/test/common_plat/validation/api/chksum/chksum.h new file mode 100644 index 00000000..886f15c2 --- /dev/null +++ b/test/common_plat/validation/api/chksum/chksum.h @@ -0,0 +1,25 @@ +/* Copyright (c) 2017, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _ODP_TEST_CHKSUM_H_ +#define _ODP_TEST_CHKSUM_H_ + +#include <odp_cunit_common.h> + +/* test functions: */ +void chksum_ones_complement_ip(void); +void chksum_ones_complement_udp(void); + +/* test arrays: */ +extern odp_testinfo_t chksum_suite[]; + +/* test registry: */ +extern odp_suiteinfo_t chksum_suites[]; + +/* main test program: */ +int chksum_main(int argc, char *argv[]); + +#endif diff --git a/test/common_plat/validation/api/chksum/chksum_main.c b/test/common_plat/validation/api/chksum/chksum_main.c new file mode 100644 index 00000000..bec10ddd --- /dev/null +++ b/test/common_plat/validation/api/chksum/chksum_main.c @@ -0,0 +1,12 @@ +/* Copyright (c) 2017, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "chksum.h" + +int main(int argc, char *argv[]) +{ + return chksum_main(argc, argv); +} diff --git a/test/linux-generic/Makefile.am b/test/linux-generic/Makefile.am index 4be5d94e..0d363588 100644 --- a/test/linux-generic/Makefile.am +++ b/test/linux-generic/Makefile.am @@ -13,6 +13,7 @@ TESTS = validation/api/pktio/pktio_run.sh \ $(ALL_API_VALIDATION_DIR)/atomic/atomic_main$(EXEEXT) \ $(ALL_API_VALIDATION_DIR)/barrier/barrier_main$(EXEEXT) \ $(ALL_API_VALIDATION_DIR)/buffer/buffer_main$(EXEEXT) \ + $(ALL_API_VALIDATION_DIR)/chksum/chksum_main$(EXEEXT) \ $(ALL_API_VALIDATION_DIR)/classification/classification_main$(EXEEXT) \ $(ALL_API_VALIDATION_DIR)/cpumask/cpumask_main$(EXEEXT) \ $(ALL_API_VALIDATION_DIR)/crypto/crypto_main$(EXEEXT) \
commit 7ea3096a0b64b605fd14d654a6b1f644ea72ba3d Author: Petri Savolainen petri.savolainen@linaro.org Date: Fri Sep 15 14:33:00 2017 +0300
linux-gen: chksum: implement ones complement sum
Add implementation of 16 bit ones complement sum function. This is non-performance optimized but simple and based on RFC 1071 and its errata.
Signed-off-by: Petri Savolainen petri.savolainen@linaro.org Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am index 3e439df6..eb49f455 100644 --- a/platform/linux-generic/Makefile.am +++ b/platform/linux-generic/Makefile.am @@ -208,6 +208,7 @@ __LIB__libodp_linux_la_SOURCES = \ odp_bitmap.c \ odp_buffer.c \ odp_byteorder.c \ + odp_chksum.c \ odp_classification.c \ odp_cpu.c \ odp_cpumask.c \ diff --git a/platform/linux-generic/odp_chksum.c b/platform/linux-generic/odp_chksum.c new file mode 100644 index 00000000..349bdaf4 --- /dev/null +++ b/platform/linux-generic/odp_chksum.c @@ -0,0 +1,36 @@ +/* Copyright (c) 2017, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include <odp/api/chksum.h> +#include <odp/api/std_types.h> + +/* Simple implementation of ones complement sum. + * Based on RFC1071 and its errata. + */ +uint16_t odp_chksum_ones_comp16(const void *p, uint32_t len) +{ + uint32_t sum = 0; + const uint16_t *data = p; + + while (len > 1) { + sum += *data++; + len -= 2; + } + + /* Add left-over byte, if any */ + if (len > 0) { + uint16_t left_over; + + *(uint8_t *)&left_over = *(const uint8_t *)data; + sum += left_over; + } + + /* Fold 32-bit sum to 16 bits */ + while (sum >> 16) + sum = (sum & 0xffff) + (sum >> 16); + + return sum; +}
commit 458683cb05ecdf60c38d2827e8f6241ab4afa8e4 Author: Petri Savolainen petri.savolainen@linaro.org Date: Fri Sep 15 11:48:42 2017 +0300
api: chksum: add ones complement sum function
This is a low level function for IP/UDP/TCP checksum calculations on SW. HW cannot always calculate checksums, for that or other reasons application may need calculate ones compelement sums.
This kind of low level function is easy to optimize e.g. with CPU vector instructions. In addition to this, there may be higher (packet) level functions introduced later.
Signed-off-by: Petri Savolainen petri.savolainen@linaro.org Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/include/odp/api/spec/chksum.h b/include/odp/api/spec/chksum.h new file mode 100644 index 00000000..e523ac28 --- /dev/null +++ b/include/odp/api/spec/chksum.h @@ -0,0 +1,53 @@ +/* Copyright (c) 2017, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file + * + * ODP Hash functions + */ + +#ifndef ODP_API_CHKSUM_H_ +#define ODP_API_CHKSUM_H_ +#include <odp/visibility_begin.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#include <odp/api/std_types.h> + +/** @defgroup odp_chksum ODP CHECKSUM + * ODP checksum functions + * @{ + */ + +/** + * Ones' complement sum of 16-bit words + * + * Calculates 16-bit ones' complement sum over the data. In case of odd number + * of bytes, calculation uses a zero byte as padding at the end. This algorithm + * may be used as part of e.g. IPv4/UDP/TCP checksum generation and checking. + * + * @param data Pointer to data. Data address must be 16-bit aligned + * in minimum. + * @param data_len Data length in bytes. In case of an odd number, calculation + * includes one byte of padding. + * + * @return Ones' complement sum + */ +uint16_t odp_chksum_ones_comp16(const void *data, uint32_t data_len); + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#include <odp/visibility_end.h> +#endif diff --git a/include/odp_api.h b/include/odp_api.h index 86232ee1..069ec9d1 100644 --- a/include/odp_api.h +++ b/include/odp_api.h @@ -24,6 +24,7 @@ extern "C" { #include <odp/api/compiler.h> #include <odp/api/align.h> #include <odp/api/hash.h> +#include <odp/api/chksum.h> #include <odp/api/hints.h> #include <odp/api/debug.h> #include <odp/api/byteorder.h> diff --git a/platform/Makefile.inc b/platform/Makefile.inc index efd3a664..e76c6bc6 100644 --- a/platform/Makefile.inc +++ b/platform/Makefile.inc @@ -22,6 +22,7 @@ odpapispecinclude_HEADERS = \ $(top_srcdir)/include/odp/api/spec/barrier.h \ $(top_srcdir)/include/odp/api/spec/buffer.h \ $(top_srcdir)/include/odp/api/spec/byteorder.h \ + $(top_srcdir)/include/odp/api/spec/chksum.h \ $(top_srcdir)/include/odp/api/spec/classification.h \ $(top_srcdir)/include/odp/api/spec/compiler.h \ $(top_srcdir)/include/odp/api/spec/cpu.h \ diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am index 05456681..3e439df6 100644 --- a/platform/linux-generic/Makefile.am +++ b/platform/linux-generic/Makefile.am @@ -37,6 +37,7 @@ odpapiinclude_HEADERS = \ $(srcdir)/include/odp/api/byteorder.h \ $(srcdir)/include/odp/api/classification.h \ $(srcdir)/include/odp/api/compiler.h \ + $(srcdir)/include/odp/api/chksum.h \ $(srcdir)/include/odp/api/cpu.h \ $(srcdir)/include/odp/api/cpumask.h \ $(srcdir)/include/odp/api/crypto.h \ diff --git a/platform/linux-generic/include/odp/api/chksum.h b/platform/linux-generic/include/odp/api/chksum.h new file mode 100644 index 00000000..18dcb6d1 --- /dev/null +++ b/platform/linux-generic/include/odp/api/chksum.h @@ -0,0 +1,34 @@ +/* Copyright (c) 2017, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file + * + * ODP checksum functions + */ + +#ifndef ODP_PLAT_CHKSUM_H_ +#define ODP_PLAT_CHKSUM_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** @ingroup odp_chksum + * @{ + */ + +/** + * @} + */ + +#include <odp/api/spec/chksum.h> + +#ifdef __cplusplus +} +#endif + +#endif
commit 9695d43dc1afa2baf968c97f1afff11e381408aa Merge: d74515dc a63f25ff Author: Maxim Uvarov maxim.uvarov@linaro.org Date: Fri Oct 6 11:36:56 2017 +0300
Merge branch 'master' into api-next
-----------------------------------------------------------------------
Summary of changes: .travis.yml | 16 +-- include/odp/api/spec/chksum.h | 53 ++++++++ include/odp_api.h | 1 + platform/Makefile.inc | 1 + platform/linux-generic/Makefile.am | 2 + .../include/odp/api/{feature.h => chksum.h} | 10 +- platform/linux-generic/odp_chksum.c | 36 ++++++ test/common_plat/m4/configure.m4 | 1 + test/common_plat/validation/api/Makefile.am | 1 + test/common_plat/validation/api/chksum/.gitignore | 1 + test/common_plat/validation/api/chksum/Makefile.am | 5 + test/common_plat/validation/api/chksum/chksum.c | 134 +++++++++++++++++++++ test/common_plat/validation/api/chksum/chksum.h | 25 ++++ .../{ipsec/ipsec_main.c => chksum/chksum_main.c} | 4 +- test/linux-generic/Makefile.am | 1 + 15 files changed, 277 insertions(+), 14 deletions(-) create mode 100644 include/odp/api/spec/chksum.h copy platform/linux-generic/include/odp/api/{feature.h => chksum.h} (63%) create mode 100644 platform/linux-generic/odp_chksum.c create mode 100644 test/common_plat/validation/api/chksum/.gitignore create mode 100644 test/common_plat/validation/api/chksum/Makefile.am create mode 100644 test/common_plat/validation/api/chksum/chksum.c create mode 100644 test/common_plat/validation/api/chksum/chksum.h copy test/common_plat/validation/api/{ipsec/ipsec_main.c => chksum/chksum_main.c} (74%)
hooks/post-receive