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
14typedef 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
28typedef 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
38typedef 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
56typedef 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
65extern ipf_lookup_t ipf_dstlist_backend;
66
67extern int ipf_dstlist_select_node(fr_info_t *, void *, u_32_t *, frdest_t *);
68
69#endif /* __IP_DSTLIST_H__ */
70