mirror of
				https://gitlab.labs.nic.cz/labs/bird.git
				synced 2024-05-11 16:54:54 +00:00 
			
		
		
		
	
		
			
	
	
		
			48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /*
 | ||
|  |  *	BIRD Internet Routing Daemon -- Semi-global index of nets | ||
|  |  * | ||
|  |  *	(c) 2023       Maria Matejka <mq@jmq.cz> | ||
|  |  * | ||
|  |  *	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
 |