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