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 12 typedef 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 26 typedef 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 36 typedef 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 54 typedef 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 63 extern ipf_lookup_t ipf_dstlist_backend; 64 65 extern int ipf_dstlist_select_node(fr_info_t *, void *, u_32_t *, 66 frdest_t *); 67 68 #endif /* __IP_DSTLIST_H__ */ 69