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