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