/* * BIRD Internet Routing Daemon -- Semi-global index of nets * * (c) 2023 Maria Matejka * * Can be freely distributed and used under the terms of the GNU GPL. */ #ifndef _BIRD_LIB_NETINDEX_PRIVATE_H_ #define _BIRD_LIB_NETINDEX_PRIVATE_H_ #include "lib/netindex.h" #define NETINDEX_HASH_PUBLIC \ DOMAIN(attrs) lock; /* Assigned lock */ \ event_list *cleanup_list; /* Cleanup event list */ \ event cleanup_event; /* Cleanup event */ \ struct netindex_hash_private { struct { NETINDEX_HASH_PUBLIC; }; struct netindex_hash_private **locked_at; pool *pool; struct { slab *slab; HASH(struct netindex) hash; uint block_size; struct netindex **block; struct hmap id_map; } net[NET_MAX]; }; typedef union netindex_hash { struct { NETINDEX_HASH_PUBLIC; }; struct netindex_hash_private priv; } netindex_hash; LOBJ_UNLOCK_CLEANUP(netindex_hash, attrs); #define NH_LOCK(h, hp) LOBJ_LOCK(h, hp, netindex_hash, attrs) /* Find indices in a locked context with no usecounting */ struct netindex *net_find_index_fragile(struct netindex_hash_private *hp, const net_addr *n); /* The same but instead of returning the exact match, * return the first item in hash chain */ struct netindex *net_find_index_fragile_chain(struct netindex_hash_private *hp, const net_addr *n); #endif