Ping > 在 2016年5月23日,下午12:26,Ru Jia <[email protected]> 写道: > > Signed-off-by: Ru Jia <[email protected]> > --- > helper/test/Makefile.am | 4 +- > helper/test/iplookuptable.c | 173 ++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 176 insertions(+), 1 deletion(-) > create mode 100644 helper/test/iplookuptable.c > > diff --git a/helper/test/Makefile.am b/helper/test/Makefile.am > index 7f0b67d..e8524e7 100644 > --- a/helper/test/Makefile.am > +++ b/helper/test/Makefile.am > @@ -9,7 +9,8 @@ EXECUTABLES = chksum$(EXEEXT) \ > thread$(EXEEXT) \ > parse$(EXEEXT)\ > process$(EXEEXT)\ > - table$(EXEEXT) > + table$(EXEEXT)\ > + iplookuptable$(EXEEXT) > > COMPILE_ONLY = > > @@ -31,3 +32,4 @@ dist_process_SOURCES = process.c > dist_parse_SOURCES = parse.c > process_LDADD = $(LIB)/libodphelper-linux.la $(LIB)/libodp-linux.la > dist_table_SOURCES = table.c > +dist_iplookuptable_SOURCES = iplookuptable.c > diff --git a/helper/test/iplookuptable.c b/helper/test/iplookuptable.c > new file mode 100644 > index 0000000..b915d2d > --- /dev/null > +++ b/helper/test/iplookuptable.c > @@ -0,0 +1,173 @@ > +/* Copyright (c) 2015, Linaro Limited > + * All rights reserved. > + * > + * SPDX-License-Identifier: BSD-3-Clause > + */ > + > +#include <stdio.h> > +#include <stdint.h> > +#include <string.h> > +#include <stdlib.h> > +#include <errno.h> > + > +#include <odp_api.h> > +#include <test_debug.h> > +#include <../odph_iplookuptable.h> > +#include <odp/helper/ip.h> > + > +static void print_prefix_info( > + const char *msg, uint32_t ip, uint8_t cidr) > +{ > + int i = 0; > + uint8_t *ptr = (uint8_t *)(&ip); > + > + printf("%s IP prefix: ", msg); > + for (i = 3; i >= 0; i--) { > + if (i != 3) > + printf("."); > + printf("%d", ptr[i]); > + } > + printf("/%d\n", cidr); > +} > + > +/* > + * Basic sequence of operations for a single key: > + * - put short prefix > + * - put long prefix > + * - get (hit long prefix) > + * - remove long prefix > + * - get (hit short prefix) > + */ > +static int test_ip_lookup_table(void) > +{ > + odph_iplookup_prefix_t prefix1, prefix2; > + odph_table_t table; > + int ret; > + uint32_t value1 = 1, value2 = 2, result = 0, lkp_ip = 0; > + > + table = odph_iplookup_table_create( > + "prefix_test", 0, 0, sizeof(uint32_t)); > + if (table == NULL) { > + printf("IP prefix lookup table creation failed\n"); > + return -1; > + } > + > + ret = odph_ipv4_addr_parse(&prefix1.ip, "192.168.0.0"); > + if (ret < 0) { > + printf("Failed to get IP addr from str\n"); > + odph_iplookup_table_destroy(table); > + return -1; > + } > + prefix1.cidr = 11; > + > + ret = odph_ipv4_addr_parse(&prefix2.ip, "192.168.0.0"); > + if (ret < 0) { > + printf("Failed to get IP addr from str\n"); > + odph_iplookup_table_destroy(table); > + return -1; > + } > + prefix2.cidr = 24; > + > + ret = odph_ipv4_addr_parse(&lkp_ip, "192.168.0.1"); > + if (ret < 0) { > + printf("Failed to get IP addr from str\n"); > + odph_iplookup_table_destroy(table); > + return -1; > + } > + > + /* test with standard put/get/remove functions */ > + ret = odph_iplookup_table_put_value(table, &prefix1, &value1); > + print_prefix_info("Add", prefix1.ip, prefix1.cidr); > + if (ret < 0) { > + printf("Failed to add ip prefix\n"); > + odph_iplookup_table_destroy(table); > + return -1; > + } > + > + ret = odph_iplookup_table_get_value(table, &lkp_ip, &result, 0); > + print_prefix_info("Lkp", lkp_ip, 32); > + if (ret < 0 || result != 1) { > + printf("Failed to find longest prefix\n"); > + odph_iplookup_table_destroy(table); > + return -1; > + } > + > + /* add a longer prefix */ > + ret = odph_iplookup_table_put_value(table, &prefix2, &value2); > + print_prefix_info("Add", prefix2.ip, prefix2.cidr); > + if (ret < 0) { > + printf("Failed to add ip prefix\n"); > + odph_iplookup_table_destroy(table); > + return -1; > + } > + > + ret = odph_iplookup_table_get_value(table, &lkp_ip, &result, 0); > + print_prefix_info("Lkp", lkp_ip, 32); > + if (ret < 0 || result != 2) { > + printf("Failed to find longest prefix\n"); > + odph_iplookup_table_destroy(table); > + return -1; > + } > + > + ret = odph_iplookup_table_remove_value(table, &prefix2); > + print_prefix_info("Del", prefix2.ip, prefix2.cidr); > + if (ret < 0) { > + printf("Failed to delete ip prefix\n"); > + odph_iplookup_table_destroy(table); > + return -1; > + } > + > + ret = odph_iplookup_table_get_value(table, &lkp_ip, &result, 0); > + print_prefix_info("Lkp", lkp_ip, 32); > + if (ret < 0 || result != 1) { > + printf("Error: found result ater deleting\n"); > + odph_iplookup_table_destroy(table); > + return -1; > + } > + > + ret = odph_iplookup_table_remove_value(table, &prefix1); > + print_prefix_info("Del", prefix1.ip, prefix1.cidr); > + if (ret < 0) { > + printf("Failed to delete prefix\n"); > + odph_iplookup_table_destroy(table); > + return -1; > + } > + > + odph_iplookup_table_destroy(table); > + return 0; > +} > + > +int main(int argc TEST_UNUSED, char *argv[] TEST_UNUSED) > +{ > + odp_instance_t instance; > + int ret = 0; > + > + ret = odp_init_global(&instance, NULL, NULL); > + if (ret != 0) { > + fprintf(stderr, "Error: ODP global init failed.\n"); > + exit(EXIT_FAILURE); > + } > + > + ret = odp_init_local(instance, ODP_THREAD_WORKER); > + if (ret != 0) { > + fprintf(stderr, "Error: ODP local init failed.\n"); > + exit(EXIT_FAILURE); > + } > + > + if (test_ip_lookup_table() < 0) > + printf("Test failed\n"); > + else > + printf("All tests passed\n"); > + > + if (odp_term_local()) { > + fprintf(stderr, "Error: ODP local term failed.\n"); > + exit(EXIT_FAILURE); > + } > + > + if (odp_term_global(instance)) { > + fprintf(stderr, "Error: ODP global term failed.\n"); > + exit(EXIT_FAILURE); > + } > + > + return ret; > +} > -- > 1.9.1 > > > _______________________________________________ > lng-odp mailing list > [email protected] > https://lists.linaro.org/mailman/listinfo/lng-odp
_______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
