1114402Sru/*	$NetBSD: ip_dstlist.h,v 1.2 2012/03/23 20:39:49 christos Exp $	*/
2114402Sru
3114402Sru/*
4114402Sru * Copyright (C) 2012 by Darren Reed.
5114402Sru *
6114402Sru * See the IPFILTER.LICENCE file for details on licencing.
7114402Sru *
8114402Sru * Id: ip_dstlist.h,v 1.1.1.2 2012/07/22 13:45:11 darrenr Exp
9114402Sru */
10114402Sru
11114402Sru#ifndef	__IP_DSTLIST_H__
12114402Sru#define	__IP_DSTLIST_H__
13151497Sru
14114402Srutypedef struct ipf_dstnode {
15114402Sru	struct ipf_dstnode	*ipfd_next;
16114402Sru	struct ipf_dstnode	**ipfd_pnext;
17114402Sru	ipfmutex_t		ipfd_lock;
18114402Sru	frdest_t		ipfd_dest;
19114402Sru	u_long			ipfd_syncat;
20114402Sru	int			ipfd_flags;
21114402Sru	int			ipfd_size;
22114402Sru	int			ipfd_states;
23114402Sru	int			ipfd_ref;
24114402Sru	int			ipfd_uid;
25114402Sru	char			ipfd_names[1];
26114402Sru} ipf_dstnode_t;
27114402Sru
28114402Srutypedef enum ippool_policy_e {
29151497Sru	IPLDP_NONE = 0,
30151497Sru	IPLDP_ROUNDROBIN,
31114402Sru	IPLDP_CONNECTION,
32114402Sru	IPLDP_RANDOM,
33114402Sru	IPLDP_HASHED,
34114402Sru	IPLDP_SRCHASH,
35114402Sru	IPLDP_DSTHASH
36114402Sru} ippool_policy_t;
37114402Sru
38114402Srutypedef struct ippool_dst {
39114402Sru	struct ippool_dst	*ipld_next;
40114402Sru	struct ippool_dst	**ipld_pnext;
41114402Sru	ipfmutex_t		ipld_lock;
42114402Sru	int			ipld_seed;
43114402Sru	int			ipld_unit;
44114402Sru	int			ipld_ref;
45151497Sru	int			ipld_flags;
46151497Sru	int			ipld_nodes;
47151497Sru	int			ipld_maxnodes;
48151497Sru	ippool_policy_t		ipld_policy;
4975584Sru	ipf_dstnode_t		**ipld_dests;
5075584Sru	ipf_dstnode_t		*ipld_selected;
51104862Sru	char			ipld_name[FR_GROUPLEN];
52151497Sru} ippool_dst_t;
5375584Sru
54104862Sru#define	IPDST_DELETE		0x01
55104862Sru
56104862Srutypedef	struct dstlist_stat_s {
57104862Sru	void			*ipls_list[LOOKUP_POOL_SZ];
58104862Sru	int			ipls_numlists;
59104862Sru	u_long			ipls_nomem;
60104862Sru	int			ipls_numnodes;
61104862Sru	int			ipls_numdereflists;
62104862Sru	int			ipls_numderefnodes;
63104862Sru} ipf_dstl_stat_t;
64104862Sru
65104862Sruextern ipf_lookup_t ipf_dstlist_backend;
66104862Sru
67104862Sruextern int ipf_dstlist_select_node(fr_info_t *, void *, u_32_t *, frdest_t *);
68104862Sru
69104862Sru#endif /* __IP_DSTLIST_H__ */
70104862Sru