DPDK  17.11.10
rte_member.h
Go to the documentation of this file.
1 /*-
2  * BSD LICENSE
3  *
4  * Copyright(c) 2017 Intel Corporation. All rights reserved.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above copyright
14  * notice, this list of conditions and the following disclaimer in
15  * the documentation and/or other materials provided with the
16  * distribution.
17  * * Neither the name of Intel Corporation nor the names of its
18  * contributors may be used to endorse or promote products derived
19  * from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  */
33 
74 #ifndef _RTE_MEMBER_H_
75 #define _RTE_MEMBER_H_
76 
77 #ifdef __cplusplus
78 extern "C" {
79 #endif
80 
81 #include <stdint.h>
82 
83 #include <rte_common.h>
84 #include <rte_config.h>
85 
87 typedef uint16_t member_set_t;
89 #define RTE_MEMBER_NO_MATCH 0
90 
91 #define RTE_MEMBER_ENTRIES_MAX (1 << 30)
92 
93 #define RTE_MEMBER_LOOKUP_BULK_MAX 64
94 
95 #define RTE_MEMBER_BUCKET_ENTRIES 16
96 
97 #define RTE_MEMBER_NAMESIZE 32
98 
100 #if defined(RTE_ARCH_X86) || defined(RTE_MACHINE_CPUFLAG_CRC32)
101 #include <rte_hash_crc.h>
102 #define MEMBER_HASH_FUNC rte_hash_crc
103 #else
104 #include <rte_jhash.h>
105 #define MEMBER_HASH_FUNC rte_jhash
106 #endif
107 
108 extern int librte_member_logtype;
109 
110 #define RTE_MEMBER_LOG(level, ...) \
111  rte_log(RTE_LOG_ ## level, \
112  librte_member_logtype, \
113  RTE_FMT("%s(): " RTE_FMT_HEAD(__VA_ARGS__,), \
114  __func__, \
115  RTE_FMT_TAIL(__VA_ARGS__,)))
116 
118 struct rte_member_setsum;
119 
126 struct rte_member_parameters;
127 
137  RTE_MEMBER_NUM_TYPE
138 };
139 
141 enum rte_member_sig_compare_function {
142  RTE_MEMBER_COMPARE_SCALAR = 0,
143  RTE_MEMBER_COMPARE_AVX2,
144  RTE_MEMBER_COMPARE_NUM
145 };
146 
148 struct rte_member_setsum {
149  enum rte_member_setsum_type type; /* Type of the set summary. */
150  uint32_t key_len; /* Length of key. */
151  uint32_t prim_hash_seed; /* Primary hash function seed. */
152  uint32_t sec_hash_seed; /* Secondary hash function seed. */
153 
154  /* Hash table based. */
155  uint32_t bucket_cnt; /* Number of buckets. */
156  uint32_t bucket_mask; /* Bit mask to get bucket index. */
157  /* For runtime selecting AVX, scalar, etc for signature comparison. */
158  enum rte_member_sig_compare_function sig_cmp_fn;
159  uint8_t cache; /* If it is cache mode for ht based. */
160 
161  /* Vector bloom filter. */
162  uint32_t num_set; /* Number of set (bf) in vbf. */
163  uint32_t bits; /* Number of bits in each bf. */
164  uint32_t bit_mask; /* Bit mask to get bit location in bf. */
165  uint32_t num_hashes; /* Number of hash values to index bf. */
166 
167  uint32_t mul_shift; /* vbf internal variable used during bit test. */
168  uint32_t div_shift; /* vbf internal variable used during bit test. */
169 
170  void *table; /* This is the handler of hash table or vBF array. */
171 
172 
173  /* Second cache line should start here. */
174  uint32_t socket_id; /* NUMA Socket ID for memory. */
175  char name[RTE_MEMBER_NAMESIZE]; /* Name of this set summary. */
177 
188  const char *name;
201 
221  uint8_t is_cache;
222 
239  uint32_t num_keys;
240 
245  uint32_t key_len;
246 
256  uint32_t num_set;
257 
278 
287  uint32_t prim_hash_seed;
288 
292  uint32_t sec_hash_seed;
293 
294  int socket_id;
295 };
296 
310 struct rte_member_setsum *
311 rte_member_find_existing(const char *name);
312 
325 struct rte_member_setsum *
326 rte_member_create(const struct rte_member_parameters *params);
327 
344 int
345 rte_member_lookup(const struct rte_member_setsum *setsum, const void *key,
346  member_set_t *set_id);
347 
368 int
369 rte_member_lookup_bulk(const struct rte_member_setsum *setsum,
370  const void **keys, uint32_t num_keys,
371  member_set_t *set_ids);
372 
397 int
398 rte_member_lookup_multi(const struct rte_member_setsum *setsum,
399  const void *key, uint32_t max_match_per_key,
400  member_set_t *set_id);
401 
428 int
429 rte_member_lookup_multi_bulk(const struct rte_member_setsum *setsum,
430  const void **keys, uint32_t num_keys,
431  uint32_t max_match_per_key,
432  uint32_t *match_count,
433  member_set_t *set_ids);
434 
464 int
465 rte_member_add(const struct rte_member_setsum *setsum, const void *key,
466  member_set_t set_id);
467 
477 void
478 rte_member_free(struct rte_member_setsum *setsum);
479 
490 void
491 rte_member_reset(const struct rte_member_setsum *setsum);
492 
511 int
512 rte_member_delete(const struct rte_member_setsum *setsum, const void *key,
513  member_set_t set_id);
514 
515 #ifdef __cplusplus
516 }
517 #endif
518 
519 #endif /* _RTE_MEMBER_H_ */
const char * name
Definition: rte_member.h:188
#define RTE_MEMBER_NAMESIZE
Definition: rte_member.h:97
int rte_member_delete(const struct rte_member_setsum *setsum, const void *key, member_set_t set_id)
int rte_member_add(const struct rte_member_setsum *setsum, const void *key, member_set_t set_id)
int rte_member_lookup_multi(const struct rte_member_setsum *setsum, const void *key, uint32_t max_match_per_key, member_set_t *set_id)
struct rte_mbuf __rte_cache_aligned
int rte_member_lookup_multi_bulk(const struct rte_member_setsum *setsum, const void **keys, uint32_t num_keys, uint32_t max_match_per_key, uint32_t *match_count, member_set_t *set_ids)
uint16_t member_set_t
Definition: rte_member.h:87
void rte_member_free(struct rte_member_setsum *setsum)
int rte_member_lookup_bulk(const struct rte_member_setsum *setsum, const void **keys, uint32_t num_keys, member_set_t *set_ids)
struct rte_member_setsum * rte_member_find_existing(const char *name)
rte_member_setsum_type
Definition: rte_member.h:134
int rte_member_lookup(const struct rte_member_setsum *setsum, const void *key, member_set_t *set_id)
void rte_member_reset(const struct rte_member_setsum *setsum)
struct rte_member_setsum * rte_member_create(const struct rte_member_parameters *params)
enum rte_member_setsum_type type
Definition: rte_member.h:200