X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest%2Ftest_table_combined.c;h=f72b634bff709063c8c1990f8ca06aca35908025;hb=a617494eeb01ff;hp=8bf4aeb0c22e1c4333da7fb54adad56becd20c88;hpb=fc6bcc6fee46616729160720e06baef13e7447e4;p=dpdk.git diff --git a/app/test/test_table_combined.c b/app/test/test_table_combined.c index 8bf4aeb0c2..f72b634bff 100644 --- a/app/test/test_table_combined.c +++ b/app/test/test_table_combined.c @@ -1,34 +1,5 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2010-2016 Intel Corporation */ #include @@ -69,6 +40,7 @@ combined_table_test table_tests_combined[] = { test_table_hash16ext, test_table_hash32lru, test_table_hash32ext, + test_table_hash_cuckoo_combined, }; unsigned n_table_tests_combined = RTE_DIM(table_tests_combined); @@ -110,8 +82,10 @@ test_table_type(struct rte_table_ops *table_ops, void *table_args, }; if (rte_pipeline_port_in_create(pipeline, &ring_in_params, - &ring_in_id) != 0) + &ring_in_id) != 0) { + rte_pipeline_free(pipeline); return -CHECK_TABLE_PORT_CONFIG; + } /* Create table */ struct rte_pipeline_table_params table_params = { @@ -123,8 +97,11 @@ test_table_type(struct rte_table_ops *table_ops, void *table_args, .action_data_size = 0, }; - if (rte_pipeline_table_create(pipeline, &table_params, &table_id) != 0) + if (rte_pipeline_table_create(pipeline, &table_params, + &table_id) != 0) { + rte_pipeline_free(pipeline); return -CHECK_TABLE_TABLE_CONFIG; + } /* Create output ports */ ring_params_tx.ring = RING_TX; @@ -136,14 +113,18 @@ test_table_type(struct rte_table_ops *table_ops, void *table_args, }; if (rte_pipeline_port_out_create(pipeline, &ring_out_params, - &ring_out_id) != 0) + &ring_out_id) != 0) { + rte_pipeline_free(pipeline); return -CHECK_TABLE_PORT_CONFIG; + } ring_params_tx.ring = RING_TX_2; if (rte_pipeline_port_out_create(pipeline, &ring_out_params, - &ring_out_2_id) != 0) + &ring_out_2_id) != 0) { + rte_pipeline_free(pipeline); return -CHECK_TABLE_PORT_CONFIG; + } /* Add entry to the table */ struct rte_pipeline_table_entry default_entry = { @@ -161,24 +142,34 @@ test_table_type(struct rte_table_ops *table_ops, void *table_args, int key_found; if (rte_pipeline_table_default_entry_add(pipeline, table_id, - &default_entry, &default_entry_ptr) != 0) + &default_entry, &default_entry_ptr) != 0) { + rte_pipeline_free(pipeline); return -CHECK_TABLE_DEFAULT_ENTRY_ADD; + } if (rte_pipeline_table_entry_add(pipeline, table_id, key ? key : &table_entry, &table_entry, &key_found, - &entry_ptr) != 0) + &entry_ptr) != 0) { + rte_pipeline_free(pipeline); return -CHECK_TABLE_ENTRY_ADD; + } /* Create connections and check consistency */ if (rte_pipeline_port_in_connect_to_table(pipeline, ring_in_id, - table_id) != 0) + table_id) != 0) { + rte_pipeline_free(pipeline); return -CHECK_TABLE_CONNECT; + } - if (rte_pipeline_port_in_enable(pipeline, ring_in_id) != 0) + if (rte_pipeline_port_in_enable(pipeline, ring_in_id) != 0) { + rte_pipeline_free(pipeline); return -CHECK_TABLE_PORT_ENABLE; + } - if (rte_pipeline_check(pipeline) != 0) + if (rte_pipeline_check(pipeline) != 0) { + rte_pipeline_free(pipeline); return -CHECK_TABLE_CONSISTENCY; + } @@ -234,13 +225,17 @@ test_table_type(struct rte_table_ops *table_ops, void *table_args, table_entry.table_id = ring_out_2_id; if (rte_pipeline_table_default_entry_add(pipeline, table_id, - &default_entry, &default_entry_ptr) != 0) + &default_entry, &default_entry_ptr) != 0) { + rte_pipeline_free(pipeline); return -CHECK_TABLE_ENTRY_ADD; + } if (rte_pipeline_table_entry_add(pipeline, table_id, key ? key : &table_entry, &table_entry, &key_found, - &entry_ptr) != 0) + &entry_ptr) != 0) { + rte_pipeline_free(pipeline); return -CHECK_TABLE_ENTRY_ADD; + } /* Check that traffic destination has changed */ if (table_packets->n_hit_packets) { @@ -295,6 +290,8 @@ test_table_lpm_combined(void) struct rte_table_lpm_params lpm_params = { .name = "LPM", .n_rules = 1 << 16, + .number_tbl8s = 1 << 8, + .flags = 0, .entry_unique_size = 8, .offset = APP_METADATA_OFFSET(0), }; @@ -415,12 +412,15 @@ test_table_hash8lru(void) int status, i; /* Traffic flow */ - struct rte_table_hash_key8_lru_params key8lru_params = { - .n_entries = 1<<24, - .f_hash = pipeline_test_hash, - .signature_offset = APP_METADATA_OFFSET(0), + struct rte_table_hash_params key8lru_params = { + .name = "TABLE", + .key_size = 8, .key_offset = APP_METADATA_OFFSET(32), .key_mask = NULL, + .n_keys = 1 << 16, + .n_buckets = 1 << 16, + .f_hash = pipeline_test_hash, + .seed = 0, }; uint8_t key8lru[8]; @@ -449,14 +449,14 @@ test_table_hash8lru(void) VERIFY(status, CHECK_TABLE_OK); /* Invalid parameters */ - key8lru_params.n_entries = 0; + key8lru_params.n_keys = 0; status = test_table_type(&rte_table_hash_key8_lru_ops, (void *)&key8lru_params, (void *)key8lru, &table_packets, NULL, 0); VERIFY(status, CHECK_TABLE_TABLE_CONFIG); - key8lru_params.n_entries = 1<<16; + key8lru_params.n_keys = 1<<16; key8lru_params.f_hash = NULL; status = test_table_type(&rte_table_hash_key8_lru_ops, @@ -473,13 +473,15 @@ test_table_hash16lru(void) int status, i; /* Traffic flow */ - struct rte_table_hash_key16_lru_params key16lru_params = { - .n_entries = 1<<16, - .f_hash = pipeline_test_hash, - .seed = 0, - .signature_offset = APP_METADATA_OFFSET(0), + struct rte_table_hash_params key16lru_params = { + .name = "TABLE", + .key_size = 16, .key_offset = APP_METADATA_OFFSET(32), .key_mask = NULL, + .n_keys = 1 << 16, + .n_buckets = 1 << 16, + .f_hash = pipeline_test_hash, + .seed = 0, }; uint8_t key16lru[16]; @@ -508,14 +510,14 @@ test_table_hash16lru(void) VERIFY(status, CHECK_TABLE_OK); /* Invalid parameters */ - key16lru_params.n_entries = 0; + key16lru_params.n_keys = 0; status = test_table_type(&rte_table_hash_key16_lru_ops, (void *)&key16lru_params, (void *)key16lru, &table_packets, NULL, 0); VERIFY(status, CHECK_TABLE_TABLE_CONFIG); - key16lru_params.n_entries = 1<<16; + key16lru_params.n_keys = 1<<16; key16lru_params.f_hash = NULL; status = test_table_type(&rte_table_hash_key16_lru_ops, @@ -532,12 +534,15 @@ test_table_hash32lru(void) int status, i; /* Traffic flow */ - struct rte_table_hash_key32_lru_params key32lru_params = { - .n_entries = 1<<16, + struct rte_table_hash_params key32lru_params = { + .name = "TABLE", + .key_size = 32, + .key_offset = APP_METADATA_OFFSET(32), + .key_mask = NULL, + .n_keys = 1 << 16, + .n_buckets = 1 << 16, .f_hash = pipeline_test_hash, .seed = 0, - .signature_offset = APP_METADATA_OFFSET(0), - .key_offset = APP_METADATA_OFFSET(32), }; uint8_t key32lru[32]; @@ -566,14 +571,14 @@ test_table_hash32lru(void) VERIFY(status, CHECK_TABLE_OK); /* Invalid parameters */ - key32lru_params.n_entries = 0; + key32lru_params.n_keys = 0; status = test_table_type(&rte_table_hash_key32_lru_ops, (void *)&key32lru_params, (void *)key32lru, &table_packets, NULL, 0); VERIFY(status, CHECK_TABLE_TABLE_CONFIG); - key32lru_params.n_entries = 1<<16; + key32lru_params.n_keys = 1<<16; key32lru_params.f_hash = NULL; status = test_table_type(&rte_table_hash_key32_lru_ops, @@ -590,14 +595,15 @@ test_table_hash8ext(void) int status, i; /* Traffic flow */ - struct rte_table_hash_key8_ext_params key8ext_params = { - .n_entries = 1<<16, - .n_entries_ext = 1<<15, - .f_hash = pipeline_test_hash, - .seed = 0, - .signature_offset = APP_METADATA_OFFSET(0), + struct rte_table_hash_params key8ext_params = { + .name = "TABLE", + .key_size = 8, .key_offset = APP_METADATA_OFFSET(32), .key_mask = NULL, + .n_keys = 1 << 16, + .n_buckets = 1 << 16, + .f_hash = pipeline_test_hash, + .seed = 0, }; uint8_t key8ext[8]; @@ -626,14 +632,14 @@ test_table_hash8ext(void) VERIFY(status, CHECK_TABLE_OK); /* Invalid parameters */ - key8ext_params.n_entries = 0; + key8ext_params.n_keys = 0; status = test_table_type(&rte_table_hash_key8_ext_ops, (void *)&key8ext_params, (void *)key8ext, &table_packets, NULL, 0); VERIFY(status, CHECK_TABLE_TABLE_CONFIG); - key8ext_params.n_entries = 1<<16; + key8ext_params.n_keys = 1<<16; key8ext_params.f_hash = NULL; status = test_table_type(&rte_table_hash_key8_ext_ops, @@ -641,13 +647,6 @@ test_table_hash8ext(void) NULL, 0); VERIFY(status, CHECK_TABLE_TABLE_CONFIG); - key8ext_params.f_hash = pipeline_test_hash; - key8ext_params.n_entries_ext = 0; - - status = test_table_type(&rte_table_hash_key8_ext_ops, - (void *)&key8ext_params, (void *)key8ext, &table_packets, NULL, 0); - VERIFY(status, CHECK_TABLE_TABLE_CONFIG); - return 0; } @@ -657,14 +656,15 @@ test_table_hash16ext(void) int status, i; /* Traffic flow */ - struct rte_table_hash_key16_ext_params key16ext_params = { - .n_entries = 1<<16, - .n_entries_ext = 1<<15, - .f_hash = pipeline_test_hash, - .seed = 0, - .signature_offset = APP_METADATA_OFFSET(0), + struct rte_table_hash_params key16ext_params = { + .name = "TABLE", + .key_size = 16, .key_offset = APP_METADATA_OFFSET(32), .key_mask = NULL, + .n_keys = 1 << 16, + .n_buckets = 1 << 16, + .f_hash = pipeline_test_hash, + .seed = 0, }; uint8_t key16ext[16]; @@ -693,14 +693,14 @@ test_table_hash16ext(void) VERIFY(status, CHECK_TABLE_OK); /* Invalid parameters */ - key16ext_params.n_entries = 0; + key16ext_params.n_keys = 0; status = test_table_type(&rte_table_hash_key16_ext_ops, (void *)&key16ext_params, (void *)key16ext, &table_packets, NULL, 0); VERIFY(status, CHECK_TABLE_TABLE_CONFIG); - key16ext_params.n_entries = 1<<16; + key16ext_params.n_keys = 1<<16; key16ext_params.f_hash = NULL; status = test_table_type(&rte_table_hash_key16_ext_ops, @@ -708,13 +708,6 @@ test_table_hash16ext(void) NULL, 0); VERIFY(status, CHECK_TABLE_TABLE_CONFIG); - key16ext_params.f_hash = pipeline_test_hash; - key16ext_params.n_entries_ext = 0; - - status = test_table_type(&rte_table_hash_key16_ext_ops, - (void *)&key16ext_params, (void *)key16ext, &table_packets, NULL, 0); - VERIFY(status, CHECK_TABLE_TABLE_CONFIG); - return 0; } @@ -724,13 +717,15 @@ test_table_hash32ext(void) int status, i; /* Traffic flow */ - struct rte_table_hash_key32_ext_params key32ext_params = { - .n_entries = 1<<16, - .n_entries_ext = 1<<15, + struct rte_table_hash_params key32ext_params = { + .name = "TABLE", + .key_size = 32, + .key_offset = APP_METADATA_OFFSET(32), + .key_mask = NULL, + .n_keys = 1 << 16, + .n_buckets = 1 << 16, .f_hash = pipeline_test_hash, .seed = 0, - .signature_offset = APP_METADATA_OFFSET(0), - .key_offset = APP_METADATA_OFFSET(32), }; uint8_t key32ext[32]; @@ -759,14 +754,14 @@ test_table_hash32ext(void) VERIFY(status, CHECK_TABLE_OK); /* Invalid parameters */ - key32ext_params.n_entries = 0; + key32ext_params.n_keys = 0; status = test_table_type(&rte_table_hash_key32_ext_ops, (void *)&key32ext_params, (void *)key32ext, &table_packets, NULL, 0); VERIFY(status, CHECK_TABLE_TABLE_CONFIG); - key32ext_params.n_entries = 1<<16; + key32ext_params.n_keys = 1<<16; key32ext_params.f_hash = NULL; status = test_table_type(&rte_table_hash_key32_ext_ops, @@ -774,11 +769,72 @@ test_table_hash32ext(void) NULL, 0); VERIFY(status, CHECK_TABLE_TABLE_CONFIG); - key32ext_params.f_hash = pipeline_test_hash; - key32ext_params.n_entries_ext = 0; + return 0; +} - status = test_table_type(&rte_table_hash_key32_ext_ops, - (void *)&key32ext_params, (void *)key32ext, &table_packets, +int +test_table_hash_cuckoo_combined(void) +{ + int status, i; + + /* Traffic flow */ + struct rte_table_hash_cuckoo_params cuckoo_params = { + .name = "TABLE", + .key_size = 32, + .key_offset = APP_METADATA_OFFSET(32), + .key_mask = NULL, + .n_keys = 1 << 16, + .n_buckets = 1 << 16, + .f_hash = pipeline_test_hash_cuckoo, + .seed = 0, + }; + + uint8_t key_cuckoo[32]; + uint32_t *kcuckoo = (uint32_t *) key_cuckoo; + + memset(key_cuckoo, 0, sizeof(key_cuckoo)); + kcuckoo[0] = 0xadadadad; + + struct table_packets table_packets; + + printf("--------------\n"); + printf("RUNNING TEST - %s\n", __func__); + printf("--------------\n"); + for (i = 0; i < 50; i++) + table_packets.hit_packet[i] = 0xadadadad; + + for (i = 0; i < 50; i++) + table_packets.miss_packet[i] = 0xbdadadad; + + table_packets.n_hit_packets = 50; + table_packets.n_miss_packets = 50; + + status = test_table_type(&rte_table_hash_cuckoo_ops, + (void *)&cuckoo_params, (void *)key_cuckoo, &table_packets, + NULL, 0); + VERIFY(status, CHECK_TABLE_OK); + + /* Invalid parameters */ + cuckoo_params.key_size = 0; + + status = test_table_type(&rte_table_hash_cuckoo_ops, + (void *)&cuckoo_params, (void *)key_cuckoo, &table_packets, + NULL, 0); + VERIFY(status, CHECK_TABLE_TABLE_CONFIG); + + cuckoo_params.key_size = 32; + cuckoo_params.n_keys = 0; + + status = test_table_type(&rte_table_hash_cuckoo_ops, + (void *)&cuckoo_params, (void *)key_cuckoo, &table_packets, + NULL, 0); + VERIFY(status, CHECK_TABLE_TABLE_CONFIG); + + cuckoo_params.n_keys = 1<<16; + cuckoo_params.f_hash = NULL; + + status = test_table_type(&rte_table_hash_cuckoo_ops, + (void *)&cuckoo_params, (void *)key_cuckoo, &table_packets, NULL, 0); VERIFY(status, CHECK_TABLE_TABLE_CONFIG);