I added rte_hash_clear which clear the map from all previously added keys. Signed-off-by: Tomas Vestelind <tomas.vestelind at gmail.com> --- lib/librte_hash/rte_hash.c | 14 ++++++++++++++ lib/librte_hash/rte_hash.h | 10 ++++++++++ 2 files changed, 24 insertions(+)
diff --git a/lib/librte_hash/rte_hash.c b/lib/librte_hash/rte_hash.c index 2108c4f..917a6c1 100644 --- a/lib/librte_hash/rte_hash.c +++ b/lib/librte_hash/rte_hash.c @@ -507,3 +507,17 @@ rte_hash_keys(const struct rte_hash *h, void *keys) return found_keys; } + +void +rte_hash_clear(const struct rte_hash *h) +{ + unsigned int bucket, entry; + + /* Clear all entries by invalidating each signature */ + for (bucket = 0; bucket < h->num_buckets; bucket++) { + hash_sig_t *sig = get_sig_tbl_bucket(h, bucket); + for (entry = 0; entry < h->bucket_entries; entry++) { + sig[entry] = NULL_SIGNATURE; + } + } +} diff --git a/lib/librte_hash/rte_hash.h b/lib/librte_hash/rte_hash.h index e0fb28f..b84137e 100644 --- a/lib/librte_hash/rte_hash.h +++ b/lib/librte_hash/rte_hash.h @@ -318,6 +318,16 @@ rte_hash_lookup_bulk(const struct rte_hash *h, const void **keys, */ unsigned int rte_hash_keys(const struct rte_hash *h, void *keys); + +/** + * Clear all keys. This operation is not multi-thread safe and should only be + * called from one thread. + * + * @param h + * Hash table to clear. + */ +void +rte_hash_clear(const struct rte_hash *h); #ifdef __cplusplus } #endif -- 1.7.10.4