X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest%2Ftest_table_combined.c;h=a2d19a1a2346550b30d48caedc16a826a3260561;hb=d644886398749aa551b8704a6aa9aba394d570ca;hp=18daeecc103247557277e21b7edff1c78a11badb;hpb=ba92d511ddacf863fafaaa14c0577f30ee57d092;p=dpdk.git diff --git a/app/test/test_table_combined.c b/app/test/test_table_combined.c index 18daeecc10..a2d19a1a23 100644 --- a/app/test/test_table_combined.c +++ b/app/test/test_table_combined.c @@ -1,7 +1,7 @@ /*- * BSD LICENSE * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. + * Copyright(c) 2010-2016 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -69,6 +69,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 +111,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 +126,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 +142,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 +171,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 +254,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 +319,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), }; @@ -418,9 +444,9 @@ test_table_hash8lru(void) struct rte_table_hash_key8_lru_params key8lru_params = { .n_entries = 1<<24, .f_hash = pipeline_test_hash, - .seed = 0, .signature_offset = APP_METADATA_OFFSET(0), .key_offset = APP_METADATA_OFFSET(32), + .key_mask = NULL, }; uint8_t key8lru[8]; @@ -479,6 +505,7 @@ test_table_hash16lru(void) .seed = 0, .signature_offset = APP_METADATA_OFFSET(0), .key_offset = APP_METADATA_OFFSET(32), + .key_mask = NULL, }; uint8_t key16lru[16]; @@ -596,6 +623,7 @@ test_table_hash8ext(void) .seed = 0, .signature_offset = APP_METADATA_OFFSET(0), .key_offset = APP_METADATA_OFFSET(32), + .key_mask = NULL, }; uint8_t key8ext[8]; @@ -662,6 +690,7 @@ test_table_hash16ext(void) .seed = 0, .signature_offset = APP_METADATA_OFFSET(0), .key_offset = APP_METADATA_OFFSET(32), + .key_mask = NULL, }; uint8_t key16ext[16]; @@ -781,3 +810,72 @@ test_table_hash32ext(void) return 0; } + +int +test_table_hash_cuckoo_combined(void) +{ + int status, i; + + /* Traffic flow */ + struct rte_table_hash_cuckoo_params cuckoo_params = { + .key_size = 32, + .n_keys = 1<<16, + .f_hash = pipeline_test_hash, + .seed = 0, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), + .name = "CUCKOO_HASH", + }; + + 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_dosig_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_dosig_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_dosig_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_dosig_ops, + (void *)&cuckoo_params, (void *)key_cuckoo, &table_packets, + NULL, 0); + VERIFY(status, CHECK_TABLE_TABLE_CONFIG); + + return 0; +} +