X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest%2Ftest_table_combined.c;h=a2d19a1a2346550b30d48caedc16a826a3260561;hb=45e1c8b78268271b942ab14088c3facda7cc1aa1;hp=dd09da5e58d8491ddc78e2fe9a719591c0e84e04;hpb=7822c43aba8ce07208a94124a46579fe43c0b103;p=dpdk.git diff --git a/app/test/test_table_combined.c b/app/test/test_table_combined.c index dd09da5e58..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) { @@ -293,9 +317,12 @@ test_table_lpm_combined(void) /* Traffic flow */ struct rte_table_lpm_params lpm_params = { + .name = "LPM", .n_rules = 1 << 16, + .number_tbl8s = 1 << 8, + .flags = 0, .entry_unique_size = 8, - .offset = 0, + .offset = APP_METADATA_OFFSET(0), }; struct rte_table_lpm_key lpm_key = { @@ -352,10 +379,11 @@ test_table_lpm_ipv6_combined(void) /* Traffic flow */ struct rte_table_lpm_ipv6_params lpm_ipv6_params = { + .name = "LPM", .n_rules = 1 << 16, .number_tbl8s = 1 << 13, .entry_unique_size = 8, - .offset = 32, + .offset = APP_METADATA_OFFSET(32), }; struct rte_table_lpm_ipv6_key lpm_ipv6_key = { @@ -416,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 = 0, - .key_offset = 32, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), + .key_mask = NULL, }; uint8_t key8lru[8]; @@ -475,8 +503,9 @@ test_table_hash16lru(void) .n_entries = 1<<16, .f_hash = pipeline_test_hash, .seed = 0, - .signature_offset = 0, - .key_offset = 32, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), + .key_mask = NULL, }; uint8_t key16lru[16]; @@ -533,8 +562,8 @@ test_table_hash32lru(void) .n_entries = 1<<16, .f_hash = pipeline_test_hash, .seed = 0, - .signature_offset = 0, - .key_offset = 32, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), }; uint8_t key32lru[32]; @@ -592,8 +621,9 @@ test_table_hash8ext(void) .n_entries_ext = 1<<15, .f_hash = pipeline_test_hash, .seed = 0, - .signature_offset = 0, - .key_offset = 32, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), + .key_mask = NULL, }; uint8_t key8ext[8]; @@ -658,8 +688,9 @@ test_table_hash16ext(void) .n_entries_ext = 1<<15, .f_hash = pipeline_test_hash, .seed = 0, - .signature_offset = 0, - .key_offset = 32, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), + .key_mask = NULL, }; uint8_t key16ext[16]; @@ -724,8 +755,8 @@ test_table_hash32ext(void) .n_entries_ext = 1<<15, .f_hash = pipeline_test_hash, .seed = 0, - .signature_offset = 0, - .key_offset = 32, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), }; uint8_t key32ext[32]; @@ -779,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; +} +