1*dbed73cbSSangeeta Misra /* 2*dbed73cbSSangeeta Misra * CDDL HEADER START 3*dbed73cbSSangeeta Misra * 4*dbed73cbSSangeeta Misra * The contents of this file are subject to the terms of the 5*dbed73cbSSangeeta Misra * Common Development and Distribution License (the "License"). 6*dbed73cbSSangeeta Misra * You may not use this file except in compliance with the License. 7*dbed73cbSSangeeta Misra * 8*dbed73cbSSangeeta Misra * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*dbed73cbSSangeeta Misra * or http://www.opensolaris.org/os/licensing. 10*dbed73cbSSangeeta Misra * See the License for the specific language governing permissions 11*dbed73cbSSangeeta Misra * and limitations under the License. 12*dbed73cbSSangeeta Misra * 13*dbed73cbSSangeeta Misra * When distributing Covered Code, include this CDDL HEADER in each 14*dbed73cbSSangeeta Misra * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*dbed73cbSSangeeta Misra * If applicable, add the following below this CDDL HEADER, with the 16*dbed73cbSSangeeta Misra * fields enclosed by brackets "[]" replaced with your own identifying 17*dbed73cbSSangeeta Misra * information: Portions Copyright [yyyy] [name of copyright owner] 18*dbed73cbSSangeeta Misra * 19*dbed73cbSSangeeta Misra * CDDL HEADER END 20*dbed73cbSSangeeta Misra */ 21*dbed73cbSSangeeta Misra 22*dbed73cbSSangeeta Misra /* 23*dbed73cbSSangeeta Misra * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24*dbed73cbSSangeeta Misra * Use is subject to license terms. 25*dbed73cbSSangeeta Misra */ 26*dbed73cbSSangeeta Misra 27*dbed73cbSSangeeta Misra #ifndef _INET_ILB_STACK_H 28*dbed73cbSSangeeta Misra #define _INET_ILB_STACK_H 29*dbed73cbSSangeeta Misra 30*dbed73cbSSangeeta Misra #include <sys/netstack.h> 31*dbed73cbSSangeeta Misra 32*dbed73cbSSangeeta Misra #ifdef __cplusplus 33*dbed73cbSSangeeta Misra extern "C" { 34*dbed73cbSSangeeta Misra #endif 35*dbed73cbSSangeeta Misra 36*dbed73cbSSangeeta Misra struct ilb_rule_s; 37*dbed73cbSSangeeta Misra struct ilb_hash_s; 38*dbed73cbSSangeeta Misra struct ilb_timer_s; 39*dbed73cbSSangeeta Misra struct ilb_conn_s; 40*dbed73cbSSangeeta Misra struct ilb_conn_hash_s; 41*dbed73cbSSangeeta Misra struct ilb_sticky_s; 42*dbed73cbSSangeeta Misra struct ilb_sticky_hash_s; 43*dbed73cbSSangeeta Misra struct ilb_g_kstat_s; 44*dbed73cbSSangeeta Misra struct ilb_nat_src_hash_s; 45*dbed73cbSSangeeta Misra 46*dbed73cbSSangeeta Misra /* Per network stack ILB information */ 47*dbed73cbSSangeeta Misra typedef struct ilb_stack { 48*dbed73cbSSangeeta Misra netstack_t *ilbs_netstack; 49*dbed73cbSSangeeta Misra 50*dbed73cbSSangeeta Misra /* 51*dbed73cbSSangeeta Misra * Rule info in a network stack. 52*dbed73cbSSangeeta Misra * 53*dbed73cbSSangeeta Misra * ilbs_rule_head: list of all rules 54*dbed73cbSSangeeta Misra * ilbs_g_lock: lock to protect the rule list 55*dbed73cbSSangeeta Misra * ilbs_rule_hash_size: size of the rule hash table 56*dbed73cbSSangeeta Misra * ilbs_g_hash: the rule hash table 57*dbed73cbSSangeeta Misra * ilbs_rule_taskq: taskq for rule related delayed processing 58*dbed73cbSSangeeta Misra */ 59*dbed73cbSSangeeta Misra struct ilb_rule_s *ilbs_rule_head; 60*dbed73cbSSangeeta Misra kmutex_t ilbs_g_lock; 61*dbed73cbSSangeeta Misra size_t ilbs_rule_hash_size; 62*dbed73cbSSangeeta Misra struct ilb_hash_s *ilbs_g_hash; 63*dbed73cbSSangeeta Misra taskq_t *ilbs_rule_taskq; 64*dbed73cbSSangeeta Misra 65*dbed73cbSSangeeta Misra /* 66*dbed73cbSSangeeta Misra * NAT connection cache info 67*dbed73cbSSangeeta Misra * 68*dbed73cbSSangeeta Misra * ilbs_conn_hash_szie: size of the conn cache hash table 69*dbed73cbSSangeeta Misra * ilbs_c2s_conn_hash: client to server conn cache hash table 70*dbed73cbSSangeeta Misra * ilbs_s2c_conn_hash: server to client conn cache hash table 71*dbed73cbSSangeeta Misra * ilbs_conn_timer_list: list of all timers for handling conn cache 72*dbed73cbSSangeeta Misra * ilbs_conn_taskq: taskq for conn cache related delayed processing 73*dbed73cbSSangeeta Misra */ 74*dbed73cbSSangeeta Misra size_t ilbs_conn_hash_size; 75*dbed73cbSSangeeta Misra struct ilb_conn_hash_s *ilbs_c2s_conn_hash; 76*dbed73cbSSangeeta Misra struct ilb_conn_hash_s *ilbs_s2c_conn_hash; 77*dbed73cbSSangeeta Misra struct ilb_timer_s *ilbs_conn_timer_list; 78*dbed73cbSSangeeta Misra taskq_t *ilbs_conn_taskq; 79*dbed73cbSSangeeta Misra 80*dbed73cbSSangeeta Misra /* 81*dbed73cbSSangeeta Misra * Sticky (persistent) cache info 82*dbed73cbSSangeeta Misra * 83*dbed73cbSSangeeta Misra * ilbs_sticky_hash_szie: size of the sticky cache hash table 84*dbed73cbSSangeeta Misra * ilbs_sticky_hash: sticky cache hash table 85*dbed73cbSSangeeta Misra * ilbs_sticky_timer_list: list of all timers for handling sticky cache 86*dbed73cbSSangeeta Misra * ilbs_sticky_taskq: taskq for sticky cache related delayed processing 87*dbed73cbSSangeeta Misra */ 88*dbed73cbSSangeeta Misra size_t ilbs_sticky_hash_size; 89*dbed73cbSSangeeta Misra struct ilb_sticky_hash_s *ilbs_sticky_hash; 90*dbed73cbSSangeeta Misra struct ilb_timer_s *ilbs_sticky_timer_list; 91*dbed73cbSSangeeta Misra taskq_t *ilbs_sticky_taskq; 92*dbed73cbSSangeeta Misra 93*dbed73cbSSangeeta Misra /* 94*dbed73cbSSangeeta Misra * Info of NAT source address for 95*dbed73cbSSangeeta Misra * 96*dbed73cbSSangeeta Misra * ilbs_nat_src: NAT source hash table 97*dbed73cbSSangeeta Misra * ilbs_nat_src_hash_size: size of the NAT source hash table 98*dbed73cbSSangeeta Misra * ilbs_nat_src_lock: lock for protecting ilbs_nat_src_tid 99*dbed73cbSSangeeta Misra * ilbs_nat_src_tid: ID of the timer handling garbage colllection 100*dbed73cbSSangeeta Misra */ 101*dbed73cbSSangeeta Misra struct ilb_nat_src_hash_s *ilbs_nat_src; 102*dbed73cbSSangeeta Misra size_t ilbs_nat_src_hash_size; 103*dbed73cbSSangeeta Misra kmutex_t ilbs_nat_src_lock; 104*dbed73cbSSangeeta Misra timeout_id_t ilbs_nat_src_tid; 105*dbed73cbSSangeeta Misra 106*dbed73cbSSangeeta Misra /* NAT conn cache and sticky cache listing related info */ 107*dbed73cbSSangeeta Misra 108*dbed73cbSSangeeta Misra /* Lock to ensure that all nat listing ops are serialized */ 109*dbed73cbSSangeeta Misra kmutex_t ilbs_conn_list_lock; 110*dbed73cbSSangeeta Misra kcondvar_t ilbs_conn_list_cv; 111*dbed73cbSSangeeta Misra boolean_t ilbs_conn_list_busy; 112*dbed73cbSSangeeta Misra /* Current position for listing all conn hash entries */ 113*dbed73cbSSangeeta Misra size_t ilbs_conn_list_cur; 114*dbed73cbSSangeeta Misra struct ilb_conn_s *ilbs_conn_list_connp; 115*dbed73cbSSangeeta Misra 116*dbed73cbSSangeeta Misra /* Lock to ensure that all sticky listing ops are serialized */ 117*dbed73cbSSangeeta Misra kmutex_t ilbs_sticky_list_lock; 118*dbed73cbSSangeeta Misra kcondvar_t ilbs_sticky_list_cv; 119*dbed73cbSSangeeta Misra boolean_t ilbs_sticky_list_busy; 120*dbed73cbSSangeeta Misra /* Current position for listing all sticky hash entries */ 121*dbed73cbSSangeeta Misra size_t ilbs_sticky_list_cur; 122*dbed73cbSSangeeta Misra struct ilb_sticky_s *ilbs_sticky_list_curp; 123*dbed73cbSSangeeta Misra 124*dbed73cbSSangeeta Misra /* Stack wide ILB kstat */ 125*dbed73cbSSangeeta Misra kstat_t *ilbs_ksp; 126*dbed73cbSSangeeta Misra struct ilb_g_kstat_s *ilbs_kstat; 127*dbed73cbSSangeeta Misra } ilb_stack_t; 128*dbed73cbSSangeeta Misra 129*dbed73cbSSangeeta Misra 130*dbed73cbSSangeeta Misra #ifdef __cplusplus 131*dbed73cbSSangeeta Misra } 132*dbed73cbSSangeeta Misra #endif 133*dbed73cbSSangeeta Misra 134*dbed73cbSSangeeta Misra #endif /* _INET_ILB_STACK_H */ 135