199a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
299a2dd95SBruce Richardson * Copyright(c) 2017 Intel Corporation
399a2dd95SBruce Richardson */
499a2dd95SBruce Richardson
599a2dd95SBruce Richardson #include <string.h>
699a2dd95SBruce Richardson
799a2dd95SBruce Richardson #include <rte_string_fns.h>
899a2dd95SBruce Richardson #include <rte_eal_memconfig.h>
999a2dd95SBruce Richardson #include <rte_malloc.h>
1099a2dd95SBruce Richardson #include <rte_errno.h>
1199a2dd95SBruce Richardson #include <rte_tailq.h>
12db354bd2SLeyi Rong #include <rte_ring_elem.h>
1399a2dd95SBruce Richardson
14*0e21c7c0SDavid Marchand #include "member.h"
1599a2dd95SBruce Richardson #include "rte_member.h"
1699a2dd95SBruce Richardson #include "rte_member_ht.h"
1799a2dd95SBruce Richardson #include "rte_member_vbf.h"
18db354bd2SLeyi Rong #include "rte_member_sketch.h"
1999a2dd95SBruce Richardson
2099a2dd95SBruce Richardson TAILQ_HEAD(rte_member_list, rte_tailq_entry);
2199a2dd95SBruce Richardson static struct rte_tailq_elem rte_member_tailq = {
2299a2dd95SBruce Richardson .name = "RTE_MEMBER",
2399a2dd95SBruce Richardson };
EAL_REGISTER_TAILQ(rte_member_tailq)2499a2dd95SBruce Richardson EAL_REGISTER_TAILQ(rte_member_tailq)
2599a2dd95SBruce Richardson
2699a2dd95SBruce Richardson struct rte_member_setsum *
2799a2dd95SBruce Richardson rte_member_find_existing(const char *name)
2899a2dd95SBruce Richardson {
2999a2dd95SBruce Richardson struct rte_member_setsum *setsum = NULL;
3099a2dd95SBruce Richardson struct rte_tailq_entry *te;
3199a2dd95SBruce Richardson struct rte_member_list *member_list;
3299a2dd95SBruce Richardson
3399a2dd95SBruce Richardson member_list = RTE_TAILQ_CAST(rte_member_tailq.head, rte_member_list);
3499a2dd95SBruce Richardson
3599a2dd95SBruce Richardson rte_mcfg_tailq_read_lock();
3699a2dd95SBruce Richardson TAILQ_FOREACH(te, member_list, next) {
3799a2dd95SBruce Richardson setsum = (struct rte_member_setsum *) te->data;
3899a2dd95SBruce Richardson if (strncmp(name, setsum->name, RTE_MEMBER_NAMESIZE) == 0)
3999a2dd95SBruce Richardson break;
4099a2dd95SBruce Richardson }
4199a2dd95SBruce Richardson rte_mcfg_tailq_read_unlock();
4299a2dd95SBruce Richardson
4399a2dd95SBruce Richardson if (te == NULL) {
4499a2dd95SBruce Richardson rte_errno = ENOENT;
4599a2dd95SBruce Richardson return NULL;
4699a2dd95SBruce Richardson }
4799a2dd95SBruce Richardson return setsum;
4899a2dd95SBruce Richardson }
4999a2dd95SBruce Richardson
5099a2dd95SBruce Richardson void
rte_member_free(struct rte_member_setsum * setsum)5199a2dd95SBruce Richardson rte_member_free(struct rte_member_setsum *setsum)
5299a2dd95SBruce Richardson {
5399a2dd95SBruce Richardson struct rte_member_list *member_list;
5499a2dd95SBruce Richardson struct rte_tailq_entry *te;
5599a2dd95SBruce Richardson
5699a2dd95SBruce Richardson if (setsum == NULL)
5799a2dd95SBruce Richardson return;
5899a2dd95SBruce Richardson member_list = RTE_TAILQ_CAST(rte_member_tailq.head, rte_member_list);
5999a2dd95SBruce Richardson rte_mcfg_tailq_write_lock();
6099a2dd95SBruce Richardson TAILQ_FOREACH(te, member_list, next) {
6199a2dd95SBruce Richardson if (te->data == (void *)setsum)
6299a2dd95SBruce Richardson break;
6399a2dd95SBruce Richardson }
6499a2dd95SBruce Richardson if (te == NULL) {
6599a2dd95SBruce Richardson rte_mcfg_tailq_write_unlock();
6699a2dd95SBruce Richardson return;
6799a2dd95SBruce Richardson }
6899a2dd95SBruce Richardson TAILQ_REMOVE(member_list, te, next);
6999a2dd95SBruce Richardson rte_mcfg_tailq_write_unlock();
7099a2dd95SBruce Richardson
7199a2dd95SBruce Richardson switch (setsum->type) {
7299a2dd95SBruce Richardson case RTE_MEMBER_TYPE_HT:
7399a2dd95SBruce Richardson rte_member_free_ht(setsum);
7499a2dd95SBruce Richardson break;
7599a2dd95SBruce Richardson case RTE_MEMBER_TYPE_VBF:
7699a2dd95SBruce Richardson rte_member_free_vbf(setsum);
7799a2dd95SBruce Richardson break;
78db354bd2SLeyi Rong case RTE_MEMBER_TYPE_SKETCH:
79db354bd2SLeyi Rong rte_member_free_sketch(setsum);
80db354bd2SLeyi Rong break;
8199a2dd95SBruce Richardson default:
8299a2dd95SBruce Richardson break;
8399a2dd95SBruce Richardson }
8499a2dd95SBruce Richardson rte_free(setsum);
8599a2dd95SBruce Richardson rte_free(te);
8699a2dd95SBruce Richardson }
8799a2dd95SBruce Richardson
8899a2dd95SBruce Richardson struct rte_member_setsum *
rte_member_create(const struct rte_member_parameters * params)8999a2dd95SBruce Richardson rte_member_create(const struct rte_member_parameters *params)
9099a2dd95SBruce Richardson {
9199a2dd95SBruce Richardson struct rte_tailq_entry *te;
9299a2dd95SBruce Richardson struct rte_member_list *member_list;
9399a2dd95SBruce Richardson struct rte_member_setsum *setsum;
9499a2dd95SBruce Richardson int ret;
95db354bd2SLeyi Rong char ring_name[RTE_RING_NAMESIZE];
96db354bd2SLeyi Rong struct rte_ring *sketch_key_ring = NULL;
9799a2dd95SBruce Richardson
9899a2dd95SBruce Richardson if (params == NULL) {
9999a2dd95SBruce Richardson rte_errno = EINVAL;
10099a2dd95SBruce Richardson return NULL;
10199a2dd95SBruce Richardson }
10299a2dd95SBruce Richardson
10399a2dd95SBruce Richardson if (params->key_len == 0 ||
10499a2dd95SBruce Richardson params->prim_hash_seed == params->sec_hash_seed) {
10599a2dd95SBruce Richardson rte_errno = EINVAL;
106*0e21c7c0SDavid Marchand MEMBER_LOG(ERR, "Create setsummary with "
107*0e21c7c0SDavid Marchand "invalid parameters");
10899a2dd95SBruce Richardson return NULL;
10999a2dd95SBruce Richardson }
11099a2dd95SBruce Richardson
111db354bd2SLeyi Rong if (params->type == RTE_MEMBER_TYPE_SKETCH) {
112db354bd2SLeyi Rong snprintf(ring_name, sizeof(ring_name), "SK_%s", params->name);
113db354bd2SLeyi Rong sketch_key_ring = rte_ring_create_elem(ring_name, sizeof(uint32_t),
114db354bd2SLeyi Rong rte_align32pow2(params->top_k), params->socket_id, 0);
115db354bd2SLeyi Rong if (sketch_key_ring == NULL) {
116*0e21c7c0SDavid Marchand MEMBER_LOG(ERR, "Sketch Ring Memory allocation failed");
117db354bd2SLeyi Rong return NULL;
118db354bd2SLeyi Rong }
119db354bd2SLeyi Rong }
120db354bd2SLeyi Rong
12199a2dd95SBruce Richardson member_list = RTE_TAILQ_CAST(rte_member_tailq.head, rte_member_list);
12299a2dd95SBruce Richardson
12399a2dd95SBruce Richardson rte_mcfg_tailq_write_lock();
12499a2dd95SBruce Richardson
12599a2dd95SBruce Richardson TAILQ_FOREACH(te, member_list, next) {
12699a2dd95SBruce Richardson setsum = te->data;
12799a2dd95SBruce Richardson if (strncmp(params->name, setsum->name,
12899a2dd95SBruce Richardson RTE_MEMBER_NAMESIZE) == 0)
12999a2dd95SBruce Richardson break;
13099a2dd95SBruce Richardson }
13199a2dd95SBruce Richardson setsum = NULL;
13299a2dd95SBruce Richardson if (te != NULL) {
13399a2dd95SBruce Richardson rte_errno = EEXIST;
13499a2dd95SBruce Richardson te = NULL;
13599a2dd95SBruce Richardson goto error_unlock_exit;
13699a2dd95SBruce Richardson }
13799a2dd95SBruce Richardson te = rte_zmalloc("MEMBER_TAILQ_ENTRY", sizeof(*te), 0);
13899a2dd95SBruce Richardson if (te == NULL) {
139*0e21c7c0SDavid Marchand MEMBER_LOG(ERR, "tailq entry allocation failed");
14099a2dd95SBruce Richardson goto error_unlock_exit;
14199a2dd95SBruce Richardson }
14299a2dd95SBruce Richardson
14399a2dd95SBruce Richardson /* Create a new setsum structure */
14499a2dd95SBruce Richardson setsum = rte_zmalloc_socket(params->name,
14599a2dd95SBruce Richardson sizeof(struct rte_member_setsum), RTE_CACHE_LINE_SIZE,
14699a2dd95SBruce Richardson params->socket_id);
14799a2dd95SBruce Richardson if (setsum == NULL) {
148*0e21c7c0SDavid Marchand MEMBER_LOG(ERR, "Create setsummary failed");
14999a2dd95SBruce Richardson goto error_unlock_exit;
15099a2dd95SBruce Richardson }
15199a2dd95SBruce Richardson strlcpy(setsum->name, params->name, sizeof(setsum->name));
15299a2dd95SBruce Richardson setsum->type = params->type;
15399a2dd95SBruce Richardson setsum->socket_id = params->socket_id;
15499a2dd95SBruce Richardson setsum->key_len = params->key_len;
15599a2dd95SBruce Richardson setsum->num_set = params->num_set;
15699a2dd95SBruce Richardson setsum->prim_hash_seed = params->prim_hash_seed;
15799a2dd95SBruce Richardson setsum->sec_hash_seed = params->sec_hash_seed;
15899a2dd95SBruce Richardson
15999a2dd95SBruce Richardson switch (setsum->type) {
16099a2dd95SBruce Richardson case RTE_MEMBER_TYPE_HT:
16199a2dd95SBruce Richardson ret = rte_member_create_ht(setsum, params);
16299a2dd95SBruce Richardson break;
16399a2dd95SBruce Richardson case RTE_MEMBER_TYPE_VBF:
16499a2dd95SBruce Richardson ret = rte_member_create_vbf(setsum, params);
16599a2dd95SBruce Richardson break;
166db354bd2SLeyi Rong case RTE_MEMBER_TYPE_SKETCH:
167db354bd2SLeyi Rong ret = rte_member_create_sketch(setsum, params, sketch_key_ring);
168db354bd2SLeyi Rong break;
16999a2dd95SBruce Richardson default:
17099a2dd95SBruce Richardson goto error_unlock_exit;
17199a2dd95SBruce Richardson }
17299a2dd95SBruce Richardson if (ret < 0)
17399a2dd95SBruce Richardson goto error_unlock_exit;
17499a2dd95SBruce Richardson
175*0e21c7c0SDavid Marchand MEMBER_LOG(DEBUG, "Creating a setsummary table with "
176*0e21c7c0SDavid Marchand "mode %u", setsum->type);
17799a2dd95SBruce Richardson
17899a2dd95SBruce Richardson te->data = (void *)setsum;
17999a2dd95SBruce Richardson TAILQ_INSERT_TAIL(member_list, te, next);
18099a2dd95SBruce Richardson rte_mcfg_tailq_write_unlock();
18199a2dd95SBruce Richardson return setsum;
18299a2dd95SBruce Richardson
18399a2dd95SBruce Richardson error_unlock_exit:
18499a2dd95SBruce Richardson rte_free(te);
18599a2dd95SBruce Richardson rte_free(setsum);
186db354bd2SLeyi Rong rte_ring_free(sketch_key_ring);
18799a2dd95SBruce Richardson rte_mcfg_tailq_write_unlock();
18899a2dd95SBruce Richardson return NULL;
18999a2dd95SBruce Richardson }
19099a2dd95SBruce Richardson
19199a2dd95SBruce Richardson int
rte_member_add(const struct rte_member_setsum * setsum,const void * key,member_set_t set_id)19299a2dd95SBruce Richardson rte_member_add(const struct rte_member_setsum *setsum, const void *key,
19399a2dd95SBruce Richardson member_set_t set_id)
19499a2dd95SBruce Richardson {
19599a2dd95SBruce Richardson if (setsum == NULL || key == NULL)
19699a2dd95SBruce Richardson return -EINVAL;
19799a2dd95SBruce Richardson
19899a2dd95SBruce Richardson switch (setsum->type) {
19999a2dd95SBruce Richardson case RTE_MEMBER_TYPE_HT:
20099a2dd95SBruce Richardson return rte_member_add_ht(setsum, key, set_id);
20199a2dd95SBruce Richardson case RTE_MEMBER_TYPE_VBF:
20299a2dd95SBruce Richardson return rte_member_add_vbf(setsum, key, set_id);
203db354bd2SLeyi Rong case RTE_MEMBER_TYPE_SKETCH:
204db354bd2SLeyi Rong return rte_member_add_sketch(setsum, key, set_id);
205db354bd2SLeyi Rong default:
206db354bd2SLeyi Rong return -EINVAL;
207db354bd2SLeyi Rong }
208db354bd2SLeyi Rong }
209db354bd2SLeyi Rong
210db354bd2SLeyi Rong int
rte_member_add_byte_count(const struct rte_member_setsum * setsum,const void * key,uint32_t byte_count)211db354bd2SLeyi Rong rte_member_add_byte_count(const struct rte_member_setsum *setsum,
212db354bd2SLeyi Rong const void *key, uint32_t byte_count)
213db354bd2SLeyi Rong {
214db354bd2SLeyi Rong if (setsum == NULL || key == NULL || byte_count == 0)
215db354bd2SLeyi Rong return -EINVAL;
216db354bd2SLeyi Rong
217db354bd2SLeyi Rong switch (setsum->type) {
218db354bd2SLeyi Rong case RTE_MEMBER_TYPE_SKETCH:
219db354bd2SLeyi Rong return rte_member_add_sketch_byte_count(setsum, key, byte_count);
22099a2dd95SBruce Richardson default:
22199a2dd95SBruce Richardson return -EINVAL;
22299a2dd95SBruce Richardson }
22399a2dd95SBruce Richardson }
22499a2dd95SBruce Richardson
22599a2dd95SBruce Richardson int
rte_member_lookup(const struct rte_member_setsum * setsum,const void * key,member_set_t * set_id)22699a2dd95SBruce Richardson rte_member_lookup(const struct rte_member_setsum *setsum, const void *key,
22799a2dd95SBruce Richardson member_set_t *set_id)
22899a2dd95SBruce Richardson {
22999a2dd95SBruce Richardson if (setsum == NULL || key == NULL || set_id == NULL)
23099a2dd95SBruce Richardson return -EINVAL;
23199a2dd95SBruce Richardson
23299a2dd95SBruce Richardson switch (setsum->type) {
23399a2dd95SBruce Richardson case RTE_MEMBER_TYPE_HT:
23499a2dd95SBruce Richardson return rte_member_lookup_ht(setsum, key, set_id);
23599a2dd95SBruce Richardson case RTE_MEMBER_TYPE_VBF:
23699a2dd95SBruce Richardson return rte_member_lookup_vbf(setsum, key, set_id);
237db354bd2SLeyi Rong case RTE_MEMBER_TYPE_SKETCH:
238db354bd2SLeyi Rong return rte_member_lookup_sketch(setsum, key, set_id);
23999a2dd95SBruce Richardson default:
24099a2dd95SBruce Richardson return -EINVAL;
24199a2dd95SBruce Richardson }
24299a2dd95SBruce Richardson }
24399a2dd95SBruce Richardson
24499a2dd95SBruce Richardson int
rte_member_lookup_bulk(const struct rte_member_setsum * setsum,const void ** keys,uint32_t num_keys,member_set_t * set_ids)24599a2dd95SBruce Richardson rte_member_lookup_bulk(const struct rte_member_setsum *setsum,
24699a2dd95SBruce Richardson const void **keys, uint32_t num_keys,
24799a2dd95SBruce Richardson member_set_t *set_ids)
24899a2dd95SBruce Richardson {
24999a2dd95SBruce Richardson if (setsum == NULL || keys == NULL || set_ids == NULL)
25099a2dd95SBruce Richardson return -EINVAL;
25199a2dd95SBruce Richardson
25299a2dd95SBruce Richardson switch (setsum->type) {
25399a2dd95SBruce Richardson case RTE_MEMBER_TYPE_HT:
25499a2dd95SBruce Richardson return rte_member_lookup_bulk_ht(setsum, keys, num_keys,
25599a2dd95SBruce Richardson set_ids);
25699a2dd95SBruce Richardson case RTE_MEMBER_TYPE_VBF:
25799a2dd95SBruce Richardson return rte_member_lookup_bulk_vbf(setsum, keys, num_keys,
25899a2dd95SBruce Richardson set_ids);
25999a2dd95SBruce Richardson default:
26099a2dd95SBruce Richardson return -EINVAL;
26199a2dd95SBruce Richardson }
26299a2dd95SBruce Richardson }
26399a2dd95SBruce Richardson
26499a2dd95SBruce Richardson int
rte_member_lookup_multi(const struct rte_member_setsum * setsum,const void * key,uint32_t match_per_key,member_set_t * set_id)26599a2dd95SBruce Richardson rte_member_lookup_multi(const struct rte_member_setsum *setsum, const void *key,
26699a2dd95SBruce Richardson uint32_t match_per_key, member_set_t *set_id)
26799a2dd95SBruce Richardson {
26899a2dd95SBruce Richardson if (setsum == NULL || key == NULL || set_id == NULL)
26999a2dd95SBruce Richardson return -EINVAL;
27099a2dd95SBruce Richardson
27199a2dd95SBruce Richardson switch (setsum->type) {
27299a2dd95SBruce Richardson case RTE_MEMBER_TYPE_HT:
27399a2dd95SBruce Richardson return rte_member_lookup_multi_ht(setsum, key, match_per_key,
27499a2dd95SBruce Richardson set_id);
27599a2dd95SBruce Richardson case RTE_MEMBER_TYPE_VBF:
27699a2dd95SBruce Richardson return rte_member_lookup_multi_vbf(setsum, key, match_per_key,
27799a2dd95SBruce Richardson set_id);
27899a2dd95SBruce Richardson default:
27999a2dd95SBruce Richardson return -EINVAL;
28099a2dd95SBruce Richardson }
28199a2dd95SBruce Richardson }
28299a2dd95SBruce Richardson
28399a2dd95SBruce Richardson 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)28499a2dd95SBruce Richardson rte_member_lookup_multi_bulk(const struct rte_member_setsum *setsum,
28599a2dd95SBruce Richardson const void **keys, uint32_t num_keys,
28699a2dd95SBruce Richardson uint32_t max_match_per_key, uint32_t *match_count,
28799a2dd95SBruce Richardson member_set_t *set_ids)
28899a2dd95SBruce Richardson {
28999a2dd95SBruce Richardson if (setsum == NULL || keys == NULL || set_ids == NULL ||
29099a2dd95SBruce Richardson match_count == NULL)
29199a2dd95SBruce Richardson return -EINVAL;
29299a2dd95SBruce Richardson
29399a2dd95SBruce Richardson switch (setsum->type) {
29499a2dd95SBruce Richardson case RTE_MEMBER_TYPE_HT:
29599a2dd95SBruce Richardson return rte_member_lookup_multi_bulk_ht(setsum, keys, num_keys,
29699a2dd95SBruce Richardson max_match_per_key, match_count, set_ids);
29799a2dd95SBruce Richardson case RTE_MEMBER_TYPE_VBF:
29899a2dd95SBruce Richardson return rte_member_lookup_multi_bulk_vbf(setsum, keys, num_keys,
29999a2dd95SBruce Richardson max_match_per_key, match_count, set_ids);
30099a2dd95SBruce Richardson default:
30199a2dd95SBruce Richardson return -EINVAL;
30299a2dd95SBruce Richardson }
30399a2dd95SBruce Richardson }
30499a2dd95SBruce Richardson
30599a2dd95SBruce Richardson int
rte_member_query_count(const struct rte_member_setsum * setsum,const void * key,uint64_t * output)306db354bd2SLeyi Rong rte_member_query_count(const struct rte_member_setsum *setsum,
307db354bd2SLeyi Rong const void *key, uint64_t *output)
308db354bd2SLeyi Rong {
309db354bd2SLeyi Rong if (setsum == NULL || key == NULL || output == NULL)
310db354bd2SLeyi Rong return -EINVAL;
311db354bd2SLeyi Rong
312db354bd2SLeyi Rong switch (setsum->type) {
313db354bd2SLeyi Rong case RTE_MEMBER_TYPE_SKETCH:
314db354bd2SLeyi Rong return rte_member_query_sketch(setsum, key, output);
315db354bd2SLeyi Rong default:
316db354bd2SLeyi Rong return -EINVAL;
317db354bd2SLeyi Rong }
318db354bd2SLeyi Rong }
319db354bd2SLeyi Rong
320db354bd2SLeyi Rong int
rte_member_report_heavyhitter(const struct rte_member_setsum * setsum,void ** key,uint64_t * count)321db354bd2SLeyi Rong rte_member_report_heavyhitter(const struct rte_member_setsum *setsum,
322db354bd2SLeyi Rong void **key, uint64_t *count)
323db354bd2SLeyi Rong {
324db354bd2SLeyi Rong if (setsum == NULL || key == NULL || count == NULL)
325db354bd2SLeyi Rong return -EINVAL;
326db354bd2SLeyi Rong
327db354bd2SLeyi Rong switch (setsum->type) {
328db354bd2SLeyi Rong case RTE_MEMBER_TYPE_SKETCH:
329db354bd2SLeyi Rong return rte_member_report_heavyhitter_sketch(setsum, key, count);
330db354bd2SLeyi Rong default:
331db354bd2SLeyi Rong return -EINVAL;
332db354bd2SLeyi Rong }
333db354bd2SLeyi Rong }
334db354bd2SLeyi Rong
335db354bd2SLeyi Rong int
rte_member_delete(const struct rte_member_setsum * setsum,const void * key,member_set_t set_id)33699a2dd95SBruce Richardson rte_member_delete(const struct rte_member_setsum *setsum, const void *key,
33799a2dd95SBruce Richardson member_set_t set_id)
33899a2dd95SBruce Richardson {
33999a2dd95SBruce Richardson if (setsum == NULL || key == NULL)
34099a2dd95SBruce Richardson return -EINVAL;
34199a2dd95SBruce Richardson
34299a2dd95SBruce Richardson switch (setsum->type) {
34399a2dd95SBruce Richardson case RTE_MEMBER_TYPE_HT:
34499a2dd95SBruce Richardson return rte_member_delete_ht(setsum, key, set_id);
34599a2dd95SBruce Richardson /* current vBF implementation does not support delete function */
346db354bd2SLeyi Rong case RTE_MEMBER_TYPE_SKETCH:
347db354bd2SLeyi Rong return rte_member_delete_sketch(setsum, key);
34899a2dd95SBruce Richardson case RTE_MEMBER_TYPE_VBF:
34999a2dd95SBruce Richardson default:
35099a2dd95SBruce Richardson return -EINVAL;
35199a2dd95SBruce Richardson }
35299a2dd95SBruce Richardson }
35399a2dd95SBruce Richardson
35499a2dd95SBruce Richardson void
rte_member_reset(const struct rte_member_setsum * setsum)35599a2dd95SBruce Richardson rte_member_reset(const struct rte_member_setsum *setsum)
35699a2dd95SBruce Richardson {
35799a2dd95SBruce Richardson if (setsum == NULL)
35899a2dd95SBruce Richardson return;
35999a2dd95SBruce Richardson switch (setsum->type) {
36099a2dd95SBruce Richardson case RTE_MEMBER_TYPE_HT:
36199a2dd95SBruce Richardson rte_member_reset_ht(setsum);
36299a2dd95SBruce Richardson return;
36399a2dd95SBruce Richardson case RTE_MEMBER_TYPE_VBF:
36499a2dd95SBruce Richardson rte_member_reset_vbf(setsum);
36599a2dd95SBruce Richardson return;
366db354bd2SLeyi Rong case RTE_MEMBER_TYPE_SKETCH:
367db354bd2SLeyi Rong rte_member_reset_sketch(setsum);
368db354bd2SLeyi Rong return;
36999a2dd95SBruce Richardson default:
37099a2dd95SBruce Richardson return;
37199a2dd95SBruce Richardson }
37299a2dd95SBruce Richardson }
37399a2dd95SBruce Richardson
374eeded204SDavid Marchand RTE_LOG_REGISTER_DEFAULT(librte_member_logtype, DEBUG);
375