tile: fix build
[dpdk.git] / app / test-pipeline / pipeline_hash.c
index 4598ad4..10d2869 100644 (file)
@@ -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
@@ -43,6 +43,7 @@
 
 #include <rte_port_ring.h>
 #include <rte_table_hash.h>
+#include <rte_hash.h>
 #include <rte_pipeline.h>
 
 #include "main.h"
@@ -77,6 +78,25 @@ translate_options(uint32_t *special, uint32_t *ext, uint32_t *key_size)
        case e_APP_PIPELINE_HASH_SPEC_KEY32_LRU:
                *special = 1; *ext = 0; *key_size = 32; return;
 
+       case e_APP_PIPELINE_HASH_CUCKOO_KEY8:
+               *special = 0; *ext = 0; *key_size = 8; return;
+       case e_APP_PIPELINE_HASH_CUCKOO_KEY16:
+               *special = 0; *ext = 0; *key_size = 16; return;
+       case e_APP_PIPELINE_HASH_CUCKOO_KEY32:
+               *special = 0; *ext = 0; *key_size = 32; return;
+       case e_APP_PIPELINE_HASH_CUCKOO_KEY48:
+               *special = 0; *ext = 0; *key_size = 48; return;
+       case e_APP_PIPELINE_HASH_CUCKOO_KEY64:
+               *special = 0; *ext = 0; *key_size = 64; return;
+       case e_APP_PIPELINE_HASH_CUCKOO_KEY80:
+               *special = 0; *ext = 0; *key_size = 80; return;
+       case e_APP_PIPELINE_HASH_CUCKOO_KEY96:
+               *special = 0; *ext = 0; *key_size = 96; return;
+       case e_APP_PIPELINE_HASH_CUCKOO_KEY112:
+               *special = 0; *ext = 0; *key_size = 112; return;
+       case e_APP_PIPELINE_HASH_CUCKOO_KEY128:
+               *special = 0; *ext = 0; *key_size = 128; return;
+
        default:
                rte_panic("Invalid hash table type or key size\n");
        }
@@ -140,7 +160,6 @@ app_main_loop_worker_pipeline_hash(void) {
                        .ops = &rte_port_ring_writer_ops,
                        .arg_create = (void *) &port_ring_params,
                        .f_action = NULL,
-                       .f_action_bulk = NULL,
                        .arg_ah = NULL,
                };
 
@@ -163,8 +182,8 @@ app_main_loop_worker_pipeline_hash(void) {
                        .n_buckets_ext = 1 << 21,
                        .f_hash = test_hash,
                        .seed = 0,
-                       .signature_offset = 0,
-                       .key_offset = 32,
+                       .signature_offset = APP_METADATA_OFFSET(0),
+                       .key_offset = APP_METADATA_OFFSET(32),
                };
 
                struct rte_pipeline_table_params table_params = {
@@ -191,8 +210,8 @@ app_main_loop_worker_pipeline_hash(void) {
                        .n_buckets = 1 << 22,
                        .f_hash = test_hash,
                        .seed = 0,
-                       .signature_offset = 0,
-                       .key_offset = 32,
+                       .signature_offset = APP_METADATA_OFFSET(0),
+                       .key_offset = APP_METADATA_OFFSET(32),
                };
 
                struct rte_pipeline_table_params table_params = {
@@ -214,8 +233,9 @@ app_main_loop_worker_pipeline_hash(void) {
                struct rte_table_hash_key8_ext_params table_hash_params = {
                        .n_entries = 1 << 24,
                        .n_entries_ext = 1 << 23,
-                       .signature_offset = 0,
-                       .key_offset = 32,
+                       .signature_offset = APP_METADATA_OFFSET(0),
+                       .key_offset = APP_METADATA_OFFSET(32),
+                       .key_mask = NULL,
                        .f_hash = test_hash,
                        .seed = 0,
                };
@@ -238,8 +258,9 @@ app_main_loop_worker_pipeline_hash(void) {
        {
                struct rte_table_hash_key8_lru_params table_hash_params = {
                        .n_entries = 1 << 24,
-                       .signature_offset = 0,
-                       .key_offset = 32,
+                       .signature_offset = APP_METADATA_OFFSET(0),
+                       .key_offset = APP_METADATA_OFFSET(32),
+                       .key_mask = NULL,
                        .f_hash = test_hash,
                        .seed = 0,
                };
@@ -263,10 +284,11 @@ app_main_loop_worker_pipeline_hash(void) {
                struct rte_table_hash_key16_ext_params table_hash_params = {
                        .n_entries = 1 << 24,
                        .n_entries_ext = 1 << 23,
-                       .signature_offset = 0,
-                       .key_offset = 32,
+                       .signature_offset = APP_METADATA_OFFSET(0),
+                       .key_offset = APP_METADATA_OFFSET(32),
                        .f_hash = test_hash,
                        .seed = 0,
+                       .key_mask = NULL,
                };
 
                struct rte_pipeline_table_params table_params = {
@@ -287,10 +309,11 @@ app_main_loop_worker_pipeline_hash(void) {
        {
                struct rte_table_hash_key16_lru_params table_hash_params = {
                        .n_entries = 1 << 24,
-                       .signature_offset = 0,
-                       .key_offset = 32,
+                       .signature_offset = APP_METADATA_OFFSET(0),
+                       .key_offset = APP_METADATA_OFFSET(32),
                        .f_hash = test_hash,
                        .seed = 0,
+                       .key_mask = NULL,
                };
 
                struct rte_pipeline_table_params table_params = {
@@ -312,8 +335,8 @@ app_main_loop_worker_pipeline_hash(void) {
                struct rte_table_hash_key32_ext_params table_hash_params = {
                        .n_entries = 1 << 24,
                        .n_entries_ext = 1 << 23,
-                       .signature_offset = 0,
-                       .key_offset = 32,
+                       .signature_offset = APP_METADATA_OFFSET(0),
+                       .key_offset = APP_METADATA_OFFSET(32),
                        .f_hash = test_hash,
                        .seed = 0,
                };
@@ -337,8 +360,8 @@ app_main_loop_worker_pipeline_hash(void) {
        {
                struct rte_table_hash_key32_lru_params table_hash_params = {
                        .n_entries = 1 << 24,
-                       .signature_offset = 0,
-                       .key_offset = 32,
+                       .signature_offset = APP_METADATA_OFFSET(0),
+                       .key_offset = APP_METADATA_OFFSET(32),
                        .f_hash = test_hash,
                        .seed = 0,
                };
@@ -357,6 +380,45 @@ app_main_loop_worker_pipeline_hash(void) {
        }
        break;
 
+       case e_APP_PIPELINE_HASH_CUCKOO_KEY8:
+       case e_APP_PIPELINE_HASH_CUCKOO_KEY16:
+       case e_APP_PIPELINE_HASH_CUCKOO_KEY32:
+       case e_APP_PIPELINE_HASH_CUCKOO_KEY48:
+       case e_APP_PIPELINE_HASH_CUCKOO_KEY64:
+       case e_APP_PIPELINE_HASH_CUCKOO_KEY80:
+       case e_APP_PIPELINE_HASH_CUCKOO_KEY96:
+       case e_APP_PIPELINE_HASH_CUCKOO_KEY112:
+       case e_APP_PIPELINE_HASH_CUCKOO_KEY128:
+       {
+               char hash_name[RTE_HASH_NAMESIZE];
+
+               snprintf(hash_name, sizeof(hash_name), "RTE_TH_CUCKOO_%d",
+                       app.pipeline_type);
+
+               struct rte_table_hash_cuckoo_params table_hash_params = {
+                       .key_size = key_size,
+                       .n_keys = (1 << 24) + 1,
+                       .f_hash = test_hash,
+                       .seed = 0,
+                       .signature_offset = APP_METADATA_OFFSET(0),
+                       .key_offset = APP_METADATA_OFFSET(32),
+                       .name = hash_name,
+               };
+
+               struct rte_pipeline_table_params table_params = {
+                       .ops = &rte_table_hash_cuckoo_dosig_ops,
+                       .arg_create = &table_hash_params,
+                       .f_action_hit = NULL,
+                       .f_action_miss = NULL,
+                       .arg_ah = NULL,
+                       .action_data_size = 0,
+               };
+
+               if (rte_pipeline_table_create(p, &table_params, &table_id))
+                       rte_panic("Unable to configure the hash table\n");
+       }
+       break;
+
        default:
                rte_panic("Invalid hash table type or key size\n");
        }
@@ -456,23 +518,26 @@ app_main_loop_rx_metadata(void) {
 
                        m = app.mbuf_rx.array[j];
                        m_data = rte_pktmbuf_mtod(m, uint8_t *);
-                       signature = RTE_MBUF_METADATA_UINT32_PTR(m, 0);
-                       key = RTE_MBUF_METADATA_UINT8_PTR(m, 32);
+                       signature = RTE_MBUF_METADATA_UINT32_PTR(m,
+                                       APP_METADATA_OFFSET(0));
+                       key = RTE_MBUF_METADATA_UINT8_PTR(m,
+                                       APP_METADATA_OFFSET(32));
 
-                       if (m->ol_flags & PKT_RX_IPV4_HDR) {
+                       if (RTE_ETH_IS_IPV4_HDR(m->packet_type)) {
                                ip_hdr = (struct ipv4_hdr *)
                                        &m_data[sizeof(struct ether_hdr)];
                                ip_dst = ip_hdr->dst_addr;
 
                                k32 = (uint32_t *) key;
                                k32[0] = ip_dst & 0xFFFFFF00;
-                       } else {
+                       } else if (RTE_ETH_IS_IPV6_HDR(m->packet_type)) {
                                ipv6_hdr = (struct ipv6_hdr *)
                                        &m_data[sizeof(struct ether_hdr)];
                                ipv6_dst = ipv6_hdr->dst_addr;
 
                                memcpy(key, ipv6_dst, 16);
-                       }
+                       } else
+                               continue;
 
                        *signature = test_hash(key, 0, 0);
                }