xref: /aosp_15_r20/external/libnl/include/netlink/hashtable.h (revision 4dc78e53d49367fa8e61b07018507c90983a077d)
1*4dc78e53SAndroid Build Coastguard Worker /* SPDX-License-Identifier: LGPL-2.1-only */
2*4dc78e53SAndroid Build Coastguard Worker /*
3*4dc78e53SAndroid Build Coastguard Worker  * Copyright (c) 2012 Cumulus Networks, Inc
4*4dc78e53SAndroid Build Coastguard Worker  */
5*4dc78e53SAndroid Build Coastguard Worker 
6*4dc78e53SAndroid Build Coastguard Worker #ifndef NETLINK_HASHTABLE_H_
7*4dc78e53SAndroid Build Coastguard Worker #define NETLINK_HASHTABLE_H_
8*4dc78e53SAndroid Build Coastguard Worker 
9*4dc78e53SAndroid Build Coastguard Worker #include <stddef.h>
10*4dc78e53SAndroid Build Coastguard Worker #include <stdint.h>
11*4dc78e53SAndroid Build Coastguard Worker 
12*4dc78e53SAndroid Build Coastguard Worker #ifdef __cplusplus
13*4dc78e53SAndroid Build Coastguard Worker extern "C" {
14*4dc78e53SAndroid Build Coastguard Worker #endif
15*4dc78e53SAndroid Build Coastguard Worker 
16*4dc78e53SAndroid Build Coastguard Worker typedef struct nl_hash_node {
17*4dc78e53SAndroid Build Coastguard Worker     uint32_t			key;
18*4dc78e53SAndroid Build Coastguard Worker     uint32_t			key_size;
19*4dc78e53SAndroid Build Coastguard Worker     struct nl_object *		obj;
20*4dc78e53SAndroid Build Coastguard Worker     struct nl_hash_node *	next;
21*4dc78e53SAndroid Build Coastguard Worker } nl_hash_node_t;
22*4dc78e53SAndroid Build Coastguard Worker 
23*4dc78e53SAndroid Build Coastguard Worker typedef struct nl_hash_table {
24*4dc78e53SAndroid Build Coastguard Worker     int 			size;
25*4dc78e53SAndroid Build Coastguard Worker     nl_hash_node_t **		nodes;
26*4dc78e53SAndroid Build Coastguard Worker } nl_hash_table_t;
27*4dc78e53SAndroid Build Coastguard Worker 
28*4dc78e53SAndroid Build Coastguard Worker /* Default hash table size */
29*4dc78e53SAndroid Build Coastguard Worker #define NL_MAX_HASH_ENTRIES 1024
30*4dc78e53SAndroid Build Coastguard Worker 
31*4dc78e53SAndroid Build Coastguard Worker /* Access Functions */
32*4dc78e53SAndroid Build Coastguard Worker extern nl_hash_table_t *	nl_hash_table_alloc(int size);
33*4dc78e53SAndroid Build Coastguard Worker extern void 			nl_hash_table_free(nl_hash_table_t *ht);
34*4dc78e53SAndroid Build Coastguard Worker 
35*4dc78e53SAndroid Build Coastguard Worker extern int			nl_hash_table_add(nl_hash_table_t *ht,
36*4dc78e53SAndroid Build Coastguard Worker 						  struct nl_object *obj);
37*4dc78e53SAndroid Build Coastguard Worker extern int			nl_hash_table_del(nl_hash_table_t *ht,
38*4dc78e53SAndroid Build Coastguard Worker 						  struct nl_object *obj);
39*4dc78e53SAndroid Build Coastguard Worker 
40*4dc78e53SAndroid Build Coastguard Worker extern struct nl_object *	nl_hash_table_lookup(nl_hash_table_t *ht,
41*4dc78e53SAndroid Build Coastguard Worker 						     struct nl_object *obj);
42*4dc78e53SAndroid Build Coastguard Worker extern uint32_t 		nl_hash(void *k, size_t length,
43*4dc78e53SAndroid Build Coastguard Worker 					uint32_t initval);
44*4dc78e53SAndroid Build Coastguard Worker 
45*4dc78e53SAndroid Build Coastguard Worker #ifdef __cplusplus
46*4dc78e53SAndroid Build Coastguard Worker }
47*4dc78e53SAndroid Build Coastguard Worker #endif
48*4dc78e53SAndroid Build Coastguard Worker 
49*4dc78e53SAndroid Build Coastguard Worker #endif /* NETLINK_HASHTABLE_H_ */
50