13448Sdh155122 /* 23448Sdh155122 * Copyright (C) 1993-2001, 2003 by Darren Reed. 33448Sdh155122 * 43448Sdh155122 * See the IPFILTER.LICENCE file for details on licencing. 53448Sdh155122 * 69876SDarren.Reed@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 73448Sdh155122 * Use is subject to license terms. 83448Sdh155122 */ 93448Sdh155122 103448Sdh155122 #ifndef __IPF_STACK_H__ 113448Sdh155122 #define __IPF_STACK_H__ 123448Sdh155122 133448Sdh155122 /* FIXME: appears needed for ip_proxy.h - tcpseq */ 143448Sdh155122 #include <net/route.h> 153448Sdh155122 #include <netinet/in.h> 163448Sdh155122 #include <netinet/in_systm.h> 173448Sdh155122 #include <netinet/ip.h> 183448Sdh155122 #include <netinet/ip_var.h> 193448Sdh155122 #include <netinet/tcp.h> 203448Sdh155122 #include <netinet/udp.h> 213448Sdh155122 #include <netinet/ip_icmp.h> 223448Sdh155122 #include <netinet/tcpip.h> 233448Sdh155122 243448Sdh155122 #include "ip_compat.h" 253448Sdh155122 #include "ip_fil.h" 263448Sdh155122 #include "ip_nat.h" 273448Sdh155122 #include "ip_frag.h" 283448Sdh155122 #include "ip_state.h" 293448Sdh155122 #include "ip_proxy.h" 303448Sdh155122 #include "ip_auth.h" 313448Sdh155122 #include "ip_lookup.h" 323448Sdh155122 #include "ip_pool.h" 333448Sdh155122 #include "ip_htable.h" 343448Sdh155122 #include <net/radix.h> 353448Sdh155122 #include <sys/neti.h> 363448Sdh155122 #include <sys/hook.h> 373448Sdh155122 383448Sdh155122 /* 393448Sdh155122 * IPF stack instances 403448Sdh155122 */ 413448Sdh155122 struct ipf_stack { 427513SDarren.Reed@Sun.COM struct ipf_stack *ifs_next; 437513SDarren.Reed@Sun.COM struct ipf_stack **ifs_pnext; 447513SDarren.Reed@Sun.COM netid_t ifs_netid; 457513SDarren.Reed@Sun.COM zoneid_t ifs_zone; 463448Sdh155122 473448Sdh155122 /* ipf module */ 48*10587SAlexandr.Nedvedicky@Sun.COM fr_info_t ifs_frcache[2][8]; 493448Sdh155122 503448Sdh155122 filterstats_t ifs_frstats[2]; 513448Sdh155122 frentry_t *ifs_ipfilter[2][2]; 523448Sdh155122 frentry_t *ifs_ipfilter6[2][2]; 533448Sdh155122 frentry_t *ifs_ipacct6[2][2]; 543448Sdh155122 frentry_t *ifs_ipacct[2][2]; 553448Sdh155122 #if 0 /* not used */ 563448Sdh155122 frentry_t *ifs_ipnatrules[2][2]; 573448Sdh155122 #endif 583448Sdh155122 frgroup_t *ifs_ipfgroups[IPL_LOGSIZE][2]; 593448Sdh155122 int ifs_fr_refcnt; 603448Sdh155122 /* 613448Sdh155122 * For fr_running: 623448Sdh155122 * 0 == loading, 1 = running, -1 = disabled, -2 = unloading 633448Sdh155122 */ 643448Sdh155122 int ifs_fr_running; 653448Sdh155122 int ifs_fr_flags; 663448Sdh155122 int ifs_fr_active; 673448Sdh155122 int ifs_fr_control_forwarding; 683448Sdh155122 int ifs_fr_update_ipid; 693448Sdh155122 #if 0 703448Sdh155122 ushort_t ifs_fr_ip_id; 713448Sdh155122 #endif 723448Sdh155122 int ifs_fr_chksrc; 733448Sdh155122 int ifs_fr_minttl; 743448Sdh155122 int ifs_fr_icmpminfragmtu; 753448Sdh155122 int ifs_fr_pass; 763448Sdh155122 ulong_t ifs_fr_frouteok[2]; 773448Sdh155122 ulong_t ifs_fr_userifqs; 783448Sdh155122 ulong_t ifs_fr_badcoalesces[2]; 793448Sdh155122 uchar_t ifs_ipf_iss_secret[32]; 803448Sdh155122 timeout_id_t ifs_fr_timer_id; 813448Sdh155122 #if 0 823448Sdh155122 timeout_id_t ifs_synctimeoutid; 833448Sdh155122 #endif 843448Sdh155122 int ifs_ipf_locks_done; 853448Sdh155122 863448Sdh155122 ipftoken_t *ifs_ipftokenhead; 873448Sdh155122 ipftoken_t **ifs_ipftokentail; 883448Sdh155122 893448Sdh155122 ipfmutex_t ifs_ipl_mutex; 903448Sdh155122 ipfmutex_t ifs_ipf_authmx; 913448Sdh155122 ipfmutex_t ifs_ipf_rw; 923448Sdh155122 ipfmutex_t ifs_ipf_timeoutlock; 933448Sdh155122 ipfrwlock_t ifs_ipf_mutex; 943448Sdh155122 ipfrwlock_t ifs_ipf_global; 95*10587SAlexandr.Nedvedicky@Sun.COM ipfrwlock_t ifs_ipf_frcache; 963448Sdh155122 ipfrwlock_t ifs_ip_poolrw; 973448Sdh155122 ipfrwlock_t ifs_ipf_frag; 983448Sdh155122 ipfrwlock_t ifs_ipf_state; 993448Sdh155122 ipfrwlock_t ifs_ipf_nat; 1003448Sdh155122 ipfrwlock_t ifs_ipf_natfrag; 1013448Sdh155122 ipfmutex_t ifs_ipf_nat_new; 1023448Sdh155122 ipfmutex_t ifs_ipf_natio; 1033448Sdh155122 ipfrwlock_t ifs_ipf_auth; 1043448Sdh155122 ipfmutex_t ifs_ipf_stinsert; 1053448Sdh155122 ipfrwlock_t ifs_ipf_ipidfrag; 1063448Sdh155122 ipfrwlock_t ifs_ipf_tokens; 1073448Sdh155122 kcondvar_t ifs_iplwait; 1083448Sdh155122 kcondvar_t ifs_ipfauthwait; 1093448Sdh155122 1103448Sdh155122 ipftuneable_t *ifs_ipf_tuneables; 1113448Sdh155122 ipftuneable_t *ifs_ipf_tunelist; 1123448Sdh155122 1133448Sdh155122 /* ip_fil_solaris.c */ 1147513SDarren.Reed@Sun.COM hook_t *ifs_ipfhook4_in; 1157513SDarren.Reed@Sun.COM hook_t *ifs_ipfhook4_out; 1167513SDarren.Reed@Sun.COM hook_t *ifs_ipfhook4_loop_in; 1177513SDarren.Reed@Sun.COM hook_t *ifs_ipfhook4_loop_out; 1187513SDarren.Reed@Sun.COM hook_t *ifs_ipfhook4_nicevents; 1197513SDarren.Reed@Sun.COM hook_t *ifs_ipfhook6_in; 1207513SDarren.Reed@Sun.COM hook_t *ifs_ipfhook6_out; 1217513SDarren.Reed@Sun.COM hook_t *ifs_ipfhook6_loop_in; 1227513SDarren.Reed@Sun.COM hook_t *ifs_ipfhook6_loop_out; 1237513SDarren.Reed@Sun.COM hook_t *ifs_ipfhook6_nicevents; 1243448Sdh155122 1253448Sdh155122 /* flags to indicate whether hooks are registered. */ 1263448Sdh155122 boolean_t ifs_hook4_physical_in; 1273448Sdh155122 boolean_t ifs_hook4_physical_out; 1283448Sdh155122 boolean_t ifs_hook4_nic_events; 1293448Sdh155122 boolean_t ifs_hook4_loopback_in; 1303448Sdh155122 boolean_t ifs_hook4_loopback_out; 1313448Sdh155122 boolean_t ifs_hook6_physical_in; 1323448Sdh155122 boolean_t ifs_hook6_physical_out; 1333448Sdh155122 boolean_t ifs_hook6_nic_events; 1343448Sdh155122 boolean_t ifs_hook6_loopback_in; 1353448Sdh155122 boolean_t ifs_hook6_loopback_out; 1363448Sdh155122 1373448Sdh155122 int ifs_ipf_loopback; 1387513SDarren.Reed@Sun.COM net_handle_t ifs_ipf_ipv4; 1397513SDarren.Reed@Sun.COM net_handle_t ifs_ipf_ipv6; 1403448Sdh155122 1413448Sdh155122 /* ip_auth.c */ 1423448Sdh155122 int ifs_fr_authsize; 1433448Sdh155122 int ifs_fr_authused; 1443448Sdh155122 int ifs_fr_defaultauthage; 1453448Sdh155122 int ifs_fr_auth_lock; 1463448Sdh155122 int ifs_fr_auth_init; 1473448Sdh155122 fr_authstat_t ifs_fr_authstats; 1483448Sdh155122 frauth_t *ifs_fr_auth; 1493448Sdh155122 mb_t **ifs_fr_authpkts; 1503448Sdh155122 int ifs_fr_authstart; 1513448Sdh155122 int ifs_fr_authend; 1523448Sdh155122 int ifs_fr_authnext; 1533448Sdh155122 frauthent_t *ifs_fae_list; 1543448Sdh155122 frentry_t *ifs_ipauth; 1553448Sdh155122 frentry_t *ifs_fr_authlist; 1563448Sdh155122 1573448Sdh155122 /* ip_frag.c */ 1583448Sdh155122 ipfr_t *ifs_ipfr_list; 1593448Sdh155122 ipfr_t **ifs_ipfr_tail; 1603448Sdh155122 ipfr_t **ifs_ipfr_heads; 1613448Sdh155122 1623448Sdh155122 ipfr_t *ifs_ipfr_natlist; 1633448Sdh155122 ipfr_t **ifs_ipfr_nattail; 1643448Sdh155122 ipfr_t **ifs_ipfr_nattab; 1653448Sdh155122 1663448Sdh155122 ipfr_t *ifs_ipfr_ipidlist; 1673448Sdh155122 ipfr_t **ifs_ipfr_ipidtail; 1683448Sdh155122 ipfr_t **ifs_ipfr_ipidtab; 1693448Sdh155122 1703448Sdh155122 ipfrstat_t ifs_ipfr_stats; 1713448Sdh155122 int ifs_ipfr_inuse; 1723448Sdh155122 int ifs_ipfr_size; 1733448Sdh155122 1743448Sdh155122 int ifs_fr_ipfrttl; 1753448Sdh155122 int ifs_fr_frag_lock; 1763448Sdh155122 int ifs_fr_frag_init; 1773448Sdh155122 ulong_t ifs_fr_ticks; 1783448Sdh155122 1793448Sdh155122 frentry_t ifs_frblock; 1803448Sdh155122 1813448Sdh155122 /* ip_htable.c */ 1823448Sdh155122 iphtable_t *ifs_ipf_htables[IPL_LOGSIZE]; 1833448Sdh155122 ulong_t ifs_ipht_nomem[IPL_LOGSIZE]; 1843448Sdh155122 ulong_t ifs_ipf_nhtables[IPL_LOGSIZE]; 1853448Sdh155122 ulong_t ifs_ipf_nhtnodes[IPL_LOGSIZE]; 1863448Sdh155122 1873448Sdh155122 /* ip_log.c */ 1883448Sdh155122 iplog_t **ifs_iplh[IPL_LOGSIZE]; 1893448Sdh155122 iplog_t *ifs_iplt[IPL_LOGSIZE]; 1903448Sdh155122 iplog_t *ifs_ipll[IPL_LOGSIZE]; 1913448Sdh155122 int ifs_iplused[IPL_LOGSIZE]; 1923448Sdh155122 fr_info_t ifs_iplcrc[IPL_LOGSIZE]; 1933448Sdh155122 int ifs_ipl_suppress; 1943448Sdh155122 int ifs_ipl_buffer_sz; 1953448Sdh155122 int ifs_ipl_logmax; 1963448Sdh155122 int ifs_ipl_logall; 1973448Sdh155122 int ifs_ipl_log_init; 1983448Sdh155122 int ifs_ipl_logsize; 1993448Sdh155122 2003448Sdh155122 /* ip_lookup.c */ 2013448Sdh155122 ip_pool_stat_t ifs_ippoolstat; 2023448Sdh155122 int ifs_ip_lookup_inited; 2033448Sdh155122 2043448Sdh155122 /* ip_nat.c */ 2053448Sdh155122 /* nat_table[0] -> hashed list sorted by inside (ip, port) */ 2063448Sdh155122 /* nat_table[1] -> hashed list sorted by outside (ip, port) */ 2073448Sdh155122 nat_t **ifs_nat_table[2]; 2083448Sdh155122 nat_t *ifs_nat_instances; 2093448Sdh155122 ipnat_t *ifs_nat_list; 2103448Sdh155122 uint_t ifs_ipf_nattable_sz; 2113448Sdh155122 uint_t ifs_ipf_nattable_max; 2123448Sdh155122 uint_t ifs_ipf_natrules_sz; 2133448Sdh155122 uint_t ifs_ipf_rdrrules_sz; 2143448Sdh155122 uint_t ifs_ipf_hostmap_sz; 2153448Sdh155122 uint_t ifs_fr_nat_maxbucket; 2163448Sdh155122 uint_t ifs_fr_nat_maxbucket_reset; 2173448Sdh155122 uint32_t ifs_nat_masks; 2183448Sdh155122 uint32_t ifs_rdr_masks; 2197176Syx160601 uint32_t ifs_nat6_masks[4]; 2207176Syx160601 uint32_t ifs_rdr6_masks[4]; 2213448Sdh155122 ipnat_t **ifs_nat_rules; 2223448Sdh155122 ipnat_t **ifs_rdr_rules; 2233448Sdh155122 hostmap_t **ifs_maptable; 2243448Sdh155122 hostmap_t *ifs_ipf_hm_maplist; 2253448Sdh155122 2263448Sdh155122 ipftq_t ifs_nat_tqb[IPF_TCP_NSTATES]; 2273448Sdh155122 ipftq_t ifs_nat_udptq; 2283448Sdh155122 ipftq_t ifs_nat_icmptq; 2293448Sdh155122 ipftq_t ifs_nat_iptq; 2303448Sdh155122 ipftq_t *ifs_nat_utqe; 2313448Sdh155122 int ifs_nat_logging; 2323448Sdh155122 ulong_t ifs_fr_defnatage; 2333448Sdh155122 ulong_t ifs_fr_defnatipage; 2343448Sdh155122 ulong_t ifs_fr_defnaticmpage; 2353448Sdh155122 natstat_t ifs_nat_stats; 2363448Sdh155122 int ifs_fr_nat_lock; 2373448Sdh155122 int ifs_fr_nat_init; 2388170SJohn.Ojemann@Sun.COM uint_t ifs_nat_flush_level_hi; 2398170SJohn.Ojemann@Sun.COM uint_t ifs_nat_flush_level_lo; 2404817San207044 ulong_t ifs_nat_last_force_flush; 2414817San207044 int ifs_nat_doflush; 2423448Sdh155122 2433448Sdh155122 /* ip_pool.c */ 2443448Sdh155122 ip_pool_stat_t ifs_ipoolstat; 2453448Sdh155122 ip_pool_t *ifs_ip_pool_list[IPL_LOGSIZE]; 2463448Sdh155122 2473448Sdh155122 /* ip_proxy.c */ 2483448Sdh155122 ap_session_t *ifs_ap_sess_list; 2493448Sdh155122 aproxy_t *ifs_ap_proxylist; 2503448Sdh155122 aproxy_t *ifs_ap_proxies; /* copy of lcl_ap_proxies */ 2513448Sdh155122 2523448Sdh155122 /* ip_state.c */ 2533448Sdh155122 ipstate_t **ifs_ips_table; 2543448Sdh155122 ulong_t *ifs_ips_seed; 2553448Sdh155122 int ifs_ips_num; 2563448Sdh155122 ulong_t ifs_ips_last_force_flush; 2578170SJohn.Ojemann@Sun.COM uint_t ifs_state_flush_level_hi; 2588170SJohn.Ojemann@Sun.COM uint_t ifs_state_flush_level_lo; 2593448Sdh155122 ips_stat_t ifs_ips_stats; 2603448Sdh155122 2613448Sdh155122 ulong_t ifs_fr_tcpidletimeout; 2623448Sdh155122 ulong_t ifs_fr_tcpclosewait; 2633448Sdh155122 ulong_t ifs_fr_tcplastack; 2643448Sdh155122 ulong_t ifs_fr_tcptimeout; 2653448Sdh155122 ulong_t ifs_fr_tcpclosed; 2663448Sdh155122 ulong_t ifs_fr_tcphalfclosed; 2673448Sdh155122 ulong_t ifs_fr_udptimeout; 2683448Sdh155122 ulong_t ifs_fr_udpacktimeout; 2693448Sdh155122 ulong_t ifs_fr_icmptimeout; 2703448Sdh155122 ulong_t ifs_fr_icmpacktimeout; 2713448Sdh155122 int ifs_fr_statemax; 2723448Sdh155122 int ifs_fr_statesize; 2733448Sdh155122 int ifs_fr_state_doflush; 2743448Sdh155122 int ifs_fr_state_lock; 2753448Sdh155122 int ifs_fr_state_maxbucket; 2763448Sdh155122 int ifs_fr_state_maxbucket_reset; 2773448Sdh155122 int ifs_fr_state_init; 2789876SDarren.Reed@Sun.COM int ifs_fr_enable_active; 2793448Sdh155122 ipftq_t ifs_ips_tqtqb[IPF_TCP_NSTATES]; 2803448Sdh155122 ipftq_t ifs_ips_udptq; 2813448Sdh155122 ipftq_t ifs_ips_udpacktq; 2823448Sdh155122 ipftq_t ifs_ips_iptq; 2833448Sdh155122 ipftq_t ifs_ips_icmptq; 2843448Sdh155122 ipftq_t ifs_ips_icmpacktq; 2854431San207044 ipftq_t ifs_ips_deletetq; 2863448Sdh155122 ipftq_t *ifs_ips_utqe; 2873448Sdh155122 int ifs_ipstate_logging; 2883448Sdh155122 ipstate_t *ifs_ips_list; 2893448Sdh155122 ulong_t ifs_fr_iptimeout; 2903448Sdh155122 2913448Sdh155122 /* radix.c */ 2923448Sdh155122 int ifs_max_keylen; 2933448Sdh155122 struct radix_mask *ifs_rn_mkfreelist; 2943448Sdh155122 struct radix_node_head *ifs_mask_rnhead; 2953448Sdh155122 char *ifs_addmask_key; 2963448Sdh155122 char *ifs_rn_zeros; 2973448Sdh155122 char *ifs_rn_ones; 2983448Sdh155122 #ifdef KERNEL 2993448Sdh155122 /* kstats for inbound and outbound */ 3003448Sdh155122 kstat_t *ifs_kstatp[2]; 3013448Sdh155122 #endif 3023448Sdh155122 }; 3033448Sdh155122 3043448Sdh155122 #endif /* __IPF_STACK_H__ */ 305