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 __P((fr_info_t *, void *, u_32_t *, 66 frdest_t *)); 67 68#endif /* __IP_DSTLIST_H__ */ 69