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