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