xref: /netbsd-src/sys/external/bsd/ipf/netinet/ip_dstlist.h (revision 13885a665959c62f13a82b3caedf986eaa17aa31)
1 /*	$NetBSD: ip_dstlist.h,v 1.3 2012/07/22 14:27:51 darrenr Exp $	*/
2 
3 /*
4  * Copyright (C) 2012 by Darren Reed.
5  *
6  * See the IPFILTER.LICENCE file for details on licencing.
7  *
8  * Id: ip_dstlist.h,v 1.1.1.2 2012/07/22 13:45:11 darrenr Exp
9  */
10 
11 #ifndef	__IP_DSTLIST_H__
12 #define	__IP_DSTLIST_H__
13 
14 typedef struct ipf_dstnode {
15 	struct ipf_dstnode	*ipfd_next;
16 	struct ipf_dstnode	**ipfd_pnext;
17 	ipfmutex_t		ipfd_lock;
18 	frdest_t		ipfd_dest;
19 	u_long			ipfd_syncat;
20 	int			ipfd_flags;
21 	int			ipfd_size;
22 	int			ipfd_states;
23 	int			ipfd_ref;
24 	int			ipfd_uid;
25 	char			ipfd_names[1];
26 } ipf_dstnode_t;
27 
28 typedef enum ippool_policy_e {
29 	IPLDP_NONE = 0,
30 	IPLDP_ROUNDROBIN,
31 	IPLDP_CONNECTION,
32 	IPLDP_RANDOM,
33 	IPLDP_HASHED,
34 	IPLDP_SRCHASH,
35 	IPLDP_DSTHASH
36 } ippool_policy_t;
37 
38 typedef struct ippool_dst {
39 	struct ippool_dst	*ipld_next;
40 	struct ippool_dst	**ipld_pnext;
41 	ipfmutex_t		ipld_lock;
42 	int			ipld_seed;
43 	int			ipld_unit;
44 	int			ipld_ref;
45 	int			ipld_flags;
46 	int			ipld_nodes;
47 	int			ipld_maxnodes;
48 	ippool_policy_t		ipld_policy;
49 	ipf_dstnode_t		**ipld_dests;
50 	ipf_dstnode_t		*ipld_selected;
51 	char			ipld_name[FR_GROUPLEN];
52 } ippool_dst_t;
53 
54 #define	IPDST_DELETE		0x01
55 
56 typedef	struct dstlist_stat_s {
57 	void			*ipls_list[LOOKUP_POOL_SZ];
58 	int			ipls_numlists;
59 	u_long			ipls_nomem;
60 	int			ipls_numnodes;
61 	int			ipls_numdereflists;
62 	int			ipls_numderefnodes;
63 } ipf_dstl_stat_t;
64 
65 extern ipf_lookup_t ipf_dstlist_backend;
66 
67 extern int ipf_dstlist_select_node(fr_info_t *, void *, u_32_t *, frdest_t *);
68 
69 #endif /* __IP_DSTLIST_H__ */
70