table: add unified params struct and mask-based hash func
authorCristian Dumitrescu <cristian.dumitrescu@intel.com>
Wed, 18 Oct 2017 15:03:43 +0000 (16:03 +0100)
committerCristian Dumitrescu <cristian.dumitrescu@intel.com>
Tue, 24 Oct 2017 11:07:43 +0000 (13:07 +0200)
Add unified parameter structure for all hash tables in librte_table.

Add mask-based hash function prototype, which is input parameter for
all hash tables.

Renamed the non-mask-based hash function prototype and all the calls
to it (to be removed later).

Signed-off-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
examples/ip_pipeline/pipeline/pipeline_flow_classification_be.c
examples/ip_pipeline/pipeline/pipeline_passthrough_be.c
lib/librte_table/rte_table_hash.h
lib/librte_table/rte_table_hash_cuckoo.c
lib/librte_table/rte_table_hash_ext.c
lib/librte_table/rte_table_hash_key16.c
lib/librte_table/rte_table_hash_key32.c
lib/librte_table/rte_table_hash_key8.c
lib/librte_table/rte_table_hash_lru.c

index 191cb15..e131a5b 100644 (file)
@@ -118,7 +118,7 @@ struct flow_table_entry {
        uint32_t pad;
 };
 
-rte_table_hash_op_hash hash_func[] = {
+rte_table_hash_op_hash_nomask hash_func[] = {
        hash_default_key8,
        hash_default_key16,
        hash_default_key24,
index 8cb2f0c..6b57f83 100644 (file)
@@ -52,7 +52,7 @@
 struct pipeline_passthrough {
        struct pipeline p;
        struct pipeline_passthrough_params params;
-       rte_table_hash_op_hash f_hash;
+       rte_table_hash_op_hash_nomask f_hash;
        uint32_t swap_field0_offset[SWAP_DIM];
        uint32_t swap_field1_offset[SWAP_DIM];
        uint64_t swap_field_mask[SWAP_DIM];
@@ -677,7 +677,7 @@ pipeline_passthrough_parse_args(struct pipeline_passthrough_params *p,
        return 0;
 }
 
-static rte_table_hash_op_hash
+static rte_table_hash_op_hash_nomask
 get_hash_function(struct pipeline_passthrough *p)
 {
        switch (p->params.dma_size) {
index 5f655ee..bb5b83d 100644 (file)
@@ -97,6 +97,40 @@ extern "C" {
 
 /** Hash function */
 typedef uint64_t (*rte_table_hash_op_hash)(
+       void *key,
+       void *key_mask,
+       uint32_t key_size,
+       uint64_t seed);
+
+/** Hash table parameters */
+struct rte_table_hash_params {
+       /** Name */
+       const char *name;
+
+       /** Key size (number of bytes) */
+       uint32_t key_size;
+
+       /** Byte offset within packet meta-data where the key is located */
+       uint32_t key_offset;
+
+       /** Key mask */
+       uint8_t *key_mask;
+
+       /** Number of keys */
+       uint32_t n_keys;
+
+       /** Number of buckets */
+       uint32_t n_buckets;
+
+       /** Hash function */
+       rte_table_hash_op_hash f_hash;
+
+       /** Seed value for the hash function */
+       uint64_t seed;
+};
+
+/** Hash function */
+typedef uint64_t (*rte_table_hash_op_hash_nomask)(
        void *key,
        uint32_t key_size,
        uint64_t seed);
@@ -121,7 +155,7 @@ struct rte_table_hash_ext_params {
        uint32_t n_buckets_ext;
 
        /** Hash function */
-       rte_table_hash_op_hash f_hash;
+       rte_table_hash_op_hash_nomask f_hash;
 
        /** Seed value for the hash function */
        uint64_t seed;
@@ -149,7 +183,7 @@ struct rte_table_hash_lru_params {
        uint32_t n_buckets;
 
        /** Hash function */
-       rte_table_hash_op_hash f_hash;
+       rte_table_hash_op_hash_nomask f_hash;
 
        /** Seed value for the hash function */
        uint64_t seed;
@@ -175,7 +209,7 @@ struct rte_table_hash_key8_lru_params {
        uint32_t n_entries;
 
        /** Hash function */
-       rte_table_hash_op_hash f_hash;
+       rte_table_hash_op_hash_nomask f_hash;
 
        /** Seed for the hash function */
        uint64_t seed;
@@ -204,7 +238,7 @@ struct rte_table_hash_key8_ext_params {
        uint32_t n_entries_ext;
 
        /** Hash function */
-       rte_table_hash_op_hash f_hash;
+       rte_table_hash_op_hash_nomask f_hash;
 
        /** Seed for the hash function */
        uint64_t seed;
@@ -233,7 +267,7 @@ struct rte_table_hash_key16_lru_params {
        uint32_t n_entries;
 
        /** Hash function */
-       rte_table_hash_op_hash f_hash;
+       rte_table_hash_op_hash_nomask f_hash;
 
        /** Seed for the hash function */
        uint64_t seed;
@@ -262,7 +296,7 @@ struct rte_table_hash_key16_ext_params {
        uint32_t n_entries_ext;
 
        /** Hash function */
-       rte_table_hash_op_hash f_hash;
+       rte_table_hash_op_hash_nomask f_hash;
 
        /** Seed for the hash function */
        uint64_t seed;
@@ -291,7 +325,7 @@ struct rte_table_hash_key32_lru_params {
        uint32_t n_entries;
 
        /** Hash function */
-       rte_table_hash_op_hash f_hash;
+       rte_table_hash_op_hash_nomask f_hash;
 
        /** Seed for the hash function */
        uint64_t seed;
@@ -318,7 +352,7 @@ struct rte_table_hash_key32_ext_params {
        uint32_t n_entries_ext;
 
        /** Hash function */
-       rte_table_hash_op_hash f_hash;
+       rte_table_hash_op_hash_nomask f_hash;
 
        /** Seed for the hash function */
        uint64_t seed;
@@ -344,7 +378,7 @@ struct rte_table_hash_cuckoo_params {
        uint32_t n_keys;
 
        /** Hash function used to calculate hash */
-       rte_table_hash_op_hash f_hash;
+       rte_table_hash_op_hash_nomask f_hash;
 
        /** Seed value or Init value used by f_hash */
        uint32_t seed;
index beb45c5..9b42423 100644 (file)
@@ -64,7 +64,7 @@ struct rte_table_hash {
        uint32_t key_size;
        uint32_t entry_size;
        uint32_t n_keys;
-       rte_table_hash_op_hash f_hash;
+       rte_table_hash_op_hash_nomask f_hash;
        uint32_t seed;
        uint32_t signature_offset;
        uint32_t key_offset;
index c4824c3..72802b8 100644 (file)
@@ -104,7 +104,7 @@ struct rte_table_hash {
        uint32_t n_keys;
        uint32_t n_buckets;
        uint32_t n_buckets_ext;
-       rte_table_hash_op_hash f_hash;
+       rte_table_hash_op_hash_nomask f_hash;
        uint64_t seed;
        uint32_t signature_offset;
        uint32_t key_offset;
@@ -688,7 +688,7 @@ static int rte_table_hash_ext_lookup_unoptimized(
        struct bucket *bkt10, *bkt11, *buckets = t->buckets;            \
        uint8_t *key10, *key11;                                         \
        uint64_t bucket_mask = t->bucket_mask;                          \
-       rte_table_hash_op_hash f_hash = t->f_hash;                      \
+       rte_table_hash_op_hash_nomask f_hash = t->f_hash;                       \
        uint64_t seed = t->seed;                                        \
        uint32_t key_size = t->key_size;                                \
        uint32_t key_offset = t->key_offset;                            \
index 4ed5c78..7f6651c 100644 (file)
@@ -86,7 +86,7 @@ struct rte_table_hash {
        uint32_t signature_offset;
        uint32_t key_offset;
        uint64_t key_mask[2];
-       rte_table_hash_op_hash f_hash;
+       rte_table_hash_op_hash_nomask f_hash;
        uint64_t seed;
 
        /* Extendible buckets */
index 31fe6fd..f8f6662 100644 (file)
@@ -85,7 +85,7 @@ struct rte_table_hash {
        uint32_t bucket_size;
        uint32_t signature_offset;
        uint32_t key_offset;
-       rte_table_hash_op_hash f_hash;
+       rte_table_hash_op_hash_nomask f_hash;
        uint64_t seed;
 
        /* Extendible buckets */
index f2b285d..4fbb02e 100644 (file)
@@ -83,7 +83,7 @@ struct rte_table_hash {
        uint32_t signature_offset;
        uint32_t key_offset;
        uint64_t key_mask;
-       rte_table_hash_op_hash f_hash;
+       rte_table_hash_op_hash_nomask f_hash;
        uint64_t seed;
 
        /* Extendible buckets */
@@ -733,7 +733,7 @@ rte_table_hash_entry_delete_key8_ext(
        uint64_t hash_offset_buffer11;                          \
        uint64_t signature10, signature11;                      \
        uint32_t bucket10_index, bucket11_index;                \
-       rte_table_hash_op_hash f_hash = f->f_hash;              \
+       rte_table_hash_op_hash_nomask f_hash = f->f_hash;               \
        uint64_t seed = f->seed;                                \
        uint32_t key_offset = f->key_offset;                    \
                                                                \
index 0a85123..61050f3 100644 (file)
@@ -84,7 +84,7 @@ struct rte_table_hash {
        uint32_t entry_size;
        uint32_t n_keys;
        uint32_t n_buckets;
-       rte_table_hash_op_hash f_hash;
+       rte_table_hash_op_hash_nomask f_hash;
        uint64_t seed;
        uint32_t signature_offset;
        uint32_t key_offset;
@@ -619,7 +619,7 @@ static int rte_table_hash_lru_lookup_unoptimized(
        struct bucket *bkt10, *bkt11, *buckets = t->buckets;    \
        uint8_t *key10, *key11;                                 \
        uint64_t bucket_mask = t->bucket_mask;                  \
-       rte_table_hash_op_hash f_hash = t->f_hash;              \
+       rte_table_hash_op_hash_nomask f_hash = t->f_hash;               \
        uint64_t seed = t->seed;                                \
        uint32_t key_size = t->key_size;                        \
        uint32_t key_offset = t->key_offset;                    \