author | Cathy Zhou <Cathy.Zhou@Sun.COM> |
Tue, 17 Nov 2009 09:17:48 -0800 | |
changeset 11076 | 445f05f9f7b4 |
parent 11042 | 2d6e217af1b4 |
child 11375 | a79c98ae9bbe |
permissions | -rw-r--r-- |
0 | 1 |
/* |
2 |
* CDDL HEADER START |
|
3 |
* |
|
4 |
* The contents of this file are subject to the terms of the |
|
1503
9c3595b79c0d
6376992 IP Classifier hash function for UDP is broken, causing poor UDP performance when using many ports
ericheng
parents:
1216
diff
changeset
|
5 |
* Common Development and Distribution License (the "License"). |
9c3595b79c0d
6376992 IP Classifier hash function for UDP is broken, causing poor UDP performance when using many ports
ericheng
parents:
1216
diff
changeset
|
6 |
* You may not use this file except in compliance with the License. |
0 | 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 |
/* |
|
8477
eb9540d8095f
6789770 NULL pointer dereference panic in ip_helper_share_conn()
Rao Shoaib <Rao.Shoaib@Sun.COM>
parents:
8444
diff
changeset
|
22 |
* Copyright 2009 Sun Microsystems, Inc. All rights reserved. |
0 | 23 |
* Use is subject to license terms. |
24 |
*/ |
|
25 |
||
26 |
#ifndef _INET_IPCLASSIFIER_H |
|
27 |
#define _INET_IPCLASSIFIER_H |
|
28 |
||
29 |
#ifdef __cplusplus |
|
30 |
extern "C" { |
|
31 |
#endif |
|
32 |
||
33 |
#include <inet/common.h> |
|
34 |
#include <inet/ip.h> |
|
35 |
#include <inet/mi.h> |
|
36 |
#include <inet/tcp.h> |
|
37 |
#include <inet/ip6.h> |
|
38 |
#include <netinet/in.h> /* for IPPROTO_* constants */ |
|
39 |
#include <sys/sdt.h> |
|
8348
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
40 |
#include <sys/socket_proto.h> |
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
41 |
#include <sys/sunddi.h> |
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
42 |
#include <sys/sunldi.h> |
0 | 43 |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
44 |
typedef void (*edesc_rpf)(void *, mblk_t *, void *, ip_recv_attr_t *); |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
45 |
struct icmph_s; |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
46 |
struct icmp6_hdr; |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
47 |
typedef boolean_t (*edesc_vpf)(conn_t *, void *, struct icmph_s *, |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
48 |
struct icmp6_hdr *, ip_recv_attr_t *); |
0 | 49 |
|
50 |
/* |
|
51 |
* ============================== |
|
52 |
* = The CONNECTION = |
|
53 |
* ============================== |
|
54 |
*/ |
|
55 |
||
56 |
/* |
|
57 |
* The connection structure contains the common information/flags/ref needed. |
|
58 |
* Implementation will keep the connection struct, the layers (with their |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
59 |
* respective data for event i.e. tcp_t if event was tcp_input_data) all in one |
0 | 60 |
* contiguous memory location. |
61 |
*/ |
|
62 |
||
63 |
/* Conn Flags */ |
|
5240 | 64 |
/* Unused 0x00020000 */ |
65 |
/* Unused 0x00040000 */ |
|
741
40027a3621ac
PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents:
409
diff
changeset
|
66 |
#define IPCL_FULLY_BOUND 0x00080000 /* Bound to correct squeue */ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
67 |
/* Unused 0x00100000 */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
68 |
/* Unused 0x00200000 */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
69 |
/* Unused 0x00400000 */ |
0 | 70 |
#define IPCL_CL_LISTENER 0x00800000 /* Cluster listener */ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
71 |
/* Unused 0x01000000 */ |
5240 | 72 |
/* Unused 0x02000000 */ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
73 |
/* Unused 0x04000000 */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
74 |
/* Unused 0x08000000 */ |
5240 | 75 |
/* Unused 0x10000000 */ |
76 |
/* Unused 0x20000000 */ |
|
741
40027a3621ac
PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents:
409
diff
changeset
|
77 |
#define IPCL_CONNECTED 0x40000000 /* Conn in connected table */ |
40027a3621ac
PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents:
409
diff
changeset
|
78 |
#define IPCL_BOUND 0x80000000 /* Conn in bind table */ |
0 | 79 |
|
80 |
/* Flags identifying the type of conn */ |
|
5240 | 81 |
#define IPCL_TCPCONN 0x00000001 /* From tcp_conn_cache */ |
82 |
#define IPCL_SCTPCONN 0x00000002 /* From sctp_conn_cache */ |
|
83 |
#define IPCL_IPCCONN 0x00000004 /* From ip_conn_cache */ |
|
84 |
#define IPCL_UDPCONN 0x00000008 /* From udp_conn_cache */ |
|
85 |
#define IPCL_RAWIPCONN 0x00000010 /* From rawip_conn_cache */ |
|
86 |
#define IPCL_RTSCONN 0x00000020 /* From rts_conn_cache */ |
|
10616
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
87 |
/* Unused 0x00000040 */ |
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
88 |
#define IPCL_IPTUN 0x00000080 /* iptun module above us */ |
0 | 89 |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
90 |
#define IPCL_NONSTR 0x00001000 /* A non-STREAMS socket */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
91 |
/* Unused 0x10000000 */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
92 |
|
5240 | 93 |
#define IPCL_REMOVED 0x00000100 |
94 |
#define IPCL_REUSED 0x00000200 |
|
0 | 95 |
|
96 |
#define IPCL_IS_CONNECTED(connp) \ |
|
97 |
((connp)->conn_flags & IPCL_CONNECTED) |
|
98 |
||
99 |
#define IPCL_IS_BOUND(connp) \ |
|
100 |
((connp)->conn_flags & IPCL_BOUND) |
|
101 |
||
5240 | 102 |
/* |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
103 |
* Can't use conn_proto since we need to tell difference |
5240 | 104 |
* between a real TCP socket and a SOCK_RAW, IPPROTO_TCP. |
105 |
*/ |
|
0 | 106 |
#define IPCL_IS_TCP(connp) \ |
5240 | 107 |
((connp)->conn_flags & IPCL_TCPCONN) |
108 |
||
109 |
#define IPCL_IS_SCTP(connp) \ |
|
110 |
((connp)->conn_flags & IPCL_SCTPCONN) |
|
0 | 111 |
|
741
40027a3621ac
PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents:
409
diff
changeset
|
112 |
#define IPCL_IS_UDP(connp) \ |
5240 | 113 |
((connp)->conn_flags & IPCL_UDPCONN) |
114 |
||
115 |
#define IPCL_IS_RAWIP(connp) \ |
|
116 |
((connp)->conn_flags & IPCL_RAWIPCONN) |
|
741
40027a3621ac
PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents:
409
diff
changeset
|
117 |
|
5240 | 118 |
#define IPCL_IS_RTS(connp) \ |
119 |
((connp)->conn_flags & IPCL_RTSCONN) |
|
120 |
||
0 | 121 |
#define IPCL_IS_IPTUN(connp) \ |
10616
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
122 |
((connp)->conn_flags & IPCL_IPTUN) |
0 | 123 |
|
8348
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
124 |
#define IPCL_IS_NONSTR(connp) ((connp)->conn_flags & IPCL_NONSTR) |
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
125 |
|
0 | 126 |
typedef struct connf_s connf_t; |
3448 | 127 |
|
0 | 128 |
typedef struct |
129 |
{ |
|
130 |
int ctb_depth; |
|
5023
e0c678e511a7
6203568 accumulating number of threads behind rw_lock in ire_walk_ill_tables IRB_REFRELE
carlsonj
parents:
4972
diff
changeset
|
131 |
#define CONN_STACK_DEPTH 15 |
e0c678e511a7
6203568 accumulating number of threads behind rw_lock in ire_walk_ill_tables IRB_REFRELE
carlsonj
parents:
4972
diff
changeset
|
132 |
pc_t ctb_stack[CONN_STACK_DEPTH]; |
0 | 133 |
} conn_trace_t; |
134 |
||
8348
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
135 |
typedef struct ip_helper_minor_info_s { |
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
136 |
dev_t ip_minfo_dev; /* Device */ |
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
137 |
vmem_t *ip_minfo_arena; /* Arena */ |
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
138 |
} ip_helper_minfo_t; |
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
139 |
|
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
140 |
/* |
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
141 |
* ip helper stream info |
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
142 |
*/ |
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
143 |
typedef struct ip_helper_stream_info_s { |
8444
af8f67c55009
6787918 system panics if ip_create_helper_stream() is interrupted
Rao Shoaib <Rao.Shoaib@Sun.COM>
parents:
8348
diff
changeset
|
144 |
ldi_handle_t iphs_handle; |
af8f67c55009
6787918 system panics if ip_create_helper_stream() is interrupted
Rao Shoaib <Rao.Shoaib@Sun.COM>
parents:
8348
diff
changeset
|
145 |
queue_t *iphs_rq; |
af8f67c55009
6787918 system panics if ip_create_helper_stream() is interrupted
Rao Shoaib <Rao.Shoaib@Sun.COM>
parents:
8348
diff
changeset
|
146 |
queue_t *iphs_wq; |
af8f67c55009
6787918 system panics if ip_create_helper_stream() is interrupted
Rao Shoaib <Rao.Shoaib@Sun.COM>
parents:
8348
diff
changeset
|
147 |
ip_helper_minfo_t *iphs_minfo; |
8348
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
148 |
} ip_helper_stream_info_t; |
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
149 |
|
5240 | 150 |
/* |
10934
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
151 |
* Mandatory Access Control mode, in conn_t's conn_mac_mode field. |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
152 |
* CONN_MAC_DEFAULT: strict enforcement of MAC. |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
153 |
* CONN_MAC_AWARE: allows communications between unlabeled systems |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
154 |
* and privileged daemons |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
155 |
* CONN_MAC_IMPLICIT: allows communications without explicit labels |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
156 |
* on the wire with privileged daemons. |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
157 |
* |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
158 |
* CONN_MAC_IMPLICIT is intended specifically for labeled IPsec key management |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
159 |
* in networks which don't pass CIPSO-labeled packets. |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
160 |
*/ |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
161 |
#define CONN_MAC_DEFAULT 0 |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
162 |
#define CONN_MAC_AWARE 1 |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
163 |
#define CONN_MAC_IMPLICIT 2 |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
164 |
|
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
165 |
/* |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
166 |
* conn receive ancillary definition. |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
167 |
* |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
168 |
* These are the set of socket options that make the receive side |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
169 |
* potentially pass up ancillary data items. |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
170 |
* We have a union with an integer so that we can quickly check whether |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
171 |
* any ancillary data items need to be added. |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
172 |
*/ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
173 |
typedef struct crb_s { |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
174 |
union { |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
175 |
uint32_t crbu_all; |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
176 |
struct { |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
177 |
uint32_t |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
178 |
crbb_recvdstaddr : 1, /* IP_RECVDSTADDR option */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
179 |
crbb_recvopts : 1, /* IP_RECVOPTS option */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
180 |
crbb_recvif : 1, /* IP_RECVIF option */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
181 |
crbb_recvslla : 1, /* IP_RECVSLLA option */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
182 |
|
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
183 |
crbb_recvttl : 1, /* IP_RECVTTL option */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
184 |
crbb_ip_recvpktinfo : 1, /* IP*_RECVPKTINFO option */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
185 |
crbb_ipv6_recvhoplimit : 1, /* IPV6_RECVHOPLIMIT option */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
186 |
crbb_ipv6_recvhopopts : 1, /* IPV6_RECVHOPOPTS option */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
187 |
|
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
188 |
crbb_ipv6_recvdstopts : 1, /* IPV6_RECVDSTOPTS option */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
189 |
crbb_ipv6_recvrthdr : 1, /* IPV6_RECVRTHDR option */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
190 |
crbb_old_ipv6_recvdstopts : 1, /* old form of IPV6_DSTOPTS */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
191 |
crbb_ipv6_recvrthdrdstopts : 1, /* IPV6_RECVRTHDRDSTOPTS */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
192 |
|
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
193 |
crbb_ipv6_recvtclass : 1, /* IPV6_RECVTCLASS */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
194 |
crbb_recvucred : 1, /* IP_RECVUCRED option */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
195 |
crbb_timestamp : 1; /* SO_TIMESTAMP "socket" option */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
196 |
|
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
197 |
} crbb; |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
198 |
} crbu; |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
199 |
} crb_t; |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
200 |
|
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
201 |
#define crb_all crbu.crbu_all |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
202 |
#define crb_recvdstaddr crbu.crbb.crbb_recvdstaddr |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
203 |
#define crb_recvopts crbu.crbb.crbb_recvopts |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
204 |
#define crb_recvif crbu.crbb.crbb_recvif |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
205 |
#define crb_recvslla crbu.crbb.crbb_recvslla |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
206 |
#define crb_recvttl crbu.crbb.crbb_recvttl |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
207 |
#define crb_ip_recvpktinfo crbu.crbb.crbb_ip_recvpktinfo |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
208 |
#define crb_ipv6_recvhoplimit crbu.crbb.crbb_ipv6_recvhoplimit |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
209 |
#define crb_ipv6_recvhopopts crbu.crbb.crbb_ipv6_recvhopopts |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
210 |
#define crb_ipv6_recvdstopts crbu.crbb.crbb_ipv6_recvdstopts |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
211 |
#define crb_ipv6_recvrthdr crbu.crbb.crbb_ipv6_recvrthdr |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
212 |
#define crb_old_ipv6_recvdstopts crbu.crbb.crbb_old_ipv6_recvdstopts |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
213 |
#define crb_ipv6_recvrthdrdstopts crbu.crbb.crbb_ipv6_recvrthdrdstopts |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
214 |
#define crb_ipv6_recvtclass crbu.crbb.crbb_ipv6_recvtclass |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
215 |
#define crb_recvucred crbu.crbb.crbb_recvucred |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
216 |
#define crb_timestamp crbu.crbb.crbb_timestamp |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
217 |
|
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
218 |
/* |
5240 | 219 |
* The initial fields in the conn_t are setup by the kmem_cache constructor, |
220 |
* and are preserved when it is freed. Fields after that are bzero'ed when |
|
221 |
* the conn_t is freed. |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
222 |
* |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
223 |
* Much of the conn_t is protected by conn_lock. |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
224 |
* |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
225 |
* conn_lock is also used by some ULPs (like UDP and RAWIP) to protect |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
226 |
* their state. |
5240 | 227 |
*/ |
0 | 228 |
struct conn_s { |
229 |
kmutex_t conn_lock; |
|
230 |
uint32_t conn_ref; /* Reference counter */ |
|
5240 | 231 |
uint32_t conn_flags; /* Conn Flags */ |
232 |
||
233 |
union { |
|
234 |
tcp_t *cp_tcp; /* Pointer to the tcp struct */ |
|
235 |
struct udp_s *cp_udp; /* Pointer to the udp struct */ |
|
236 |
struct icmp_s *cp_icmp; /* Pointer to rawip struct */ |
|
237 |
struct rts_s *cp_rts; /* Pointer to rts struct */ |
|
10616
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
238 |
struct iptun_s *cp_iptun; /* Pointer to iptun_t */ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
239 |
struct sctp_s *cp_sctp; /* For IPCL_SCTPCONN */ |
5240 | 240 |
void *cp_priv; |
241 |
} conn_proto_priv; |
|
242 |
#define conn_tcp conn_proto_priv.cp_tcp |
|
243 |
#define conn_udp conn_proto_priv.cp_udp |
|
244 |
#define conn_icmp conn_proto_priv.cp_icmp |
|
245 |
#define conn_rts conn_proto_priv.cp_rts |
|
10616
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
246 |
#define conn_iptun conn_proto_priv.cp_iptun |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
247 |
#define conn_sctp conn_proto_priv.cp_sctp |
5240 | 248 |
#define conn_priv conn_proto_priv.cp_priv |
249 |
||
250 |
kcondvar_t conn_cv; |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
251 |
uint8_t conn_proto; /* protocol type */ |
5240 | 252 |
|
253 |
edesc_rpf conn_recv; /* Pointer to recv routine */ |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
254 |
edesc_rpf conn_recvicmp; /* For ICMP error */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
255 |
edesc_vpf conn_verifyicmp; /* Verify ICMP error */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
256 |
|
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
257 |
ip_xmit_attr_t *conn_ixa; /* Options if no ancil data */ |
5240 | 258 |
|
259 |
/* Fields after this are bzero'ed when the conn_t is freed. */ |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
260 |
#define conn_start_clr conn_recv_ancillary |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
261 |
|
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
262 |
/* Options for receive-side ancillary data */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
263 |
crb_t conn_recv_ancillary; |
5240 | 264 |
|
265 |
squeue_t *conn_sqp; /* Squeue for processing */ |
|
0 | 266 |
uint_t conn_state_flags; /* IP state flags */ |
5240 | 267 |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
268 |
int conn_lingertime; /* linger time (in seconds) */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
269 |
|
0 | 270 |
unsigned int |
271 |
conn_on_sqp : 1, /* Conn is being processed */ |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
272 |
conn_linger : 1, /* SO_LINGER state */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
273 |
conn_useloopback : 1, /* SO_USELOOPBACK state */ |
0 | 274 |
conn_broadcast : 1, /* SO_BROADCAST state */ |
1676 | 275 |
|
0 | 276 |
conn_reuseaddr : 1, /* SO_REUSEADDR state */ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
277 |
conn_keepalive : 1, /* SO_KEEPALIVE state */ |
0 | 278 |
conn_multi_router : 1, /* Wants all multicast pkts */ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
279 |
conn_did_putbq : 1, /* ip_wput did a putbq */ |
1676 | 280 |
|
0 | 281 |
conn_unspec_src : 1, /* IP_UNSPEC_SRC */ |
282 |
conn_policy_cached : 1, /* Is policy cached/latched ? */ |
|
283 |
conn_in_enforce_policy : 1, /* Enforce Policy on inbound */ |
|
284 |
conn_out_enforce_policy : 1, /* Enforce Policy on outbound */ |
|
1676 | 285 |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
286 |
conn_debug : 1, /* SO_DEBUG */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
287 |
conn_ipv6_v6only : 1, /* IPV6_V6ONLY */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
288 |
conn_oobinline : 1, /* SO_OOBINLINE state */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
289 |
conn_dgram_errind : 1, /* SO_DGRAM_ERRIND state */ |
1676 | 290 |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
291 |
conn_exclbind : 1, /* SO_EXCLBIND state */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
292 |
conn_mdt_ok : 1, /* MDT is permitted */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
293 |
conn_allzones : 1, /* SO_ALLZONES */ |
0 | 294 |
conn_ipv6_recvpathmtu : 1, /* IPV6_RECVPATHMTU */ |
1676 | 295 |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
296 |
conn_mcbc_bind : 1, /* Bound to multi/broadcast */ |
1676 | 297 |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
298 |
conn_pad_to_bit_31 : 11; |
3115 | 299 |
|
8833
8adf20bc60e3
PSARC/2009/099 dladm show-usage modifications
Venugopal Iyer <Venu.Iyer@Sun.COM>
parents:
8778
diff
changeset
|
300 |
boolean_t conn_direct_blocked; /* conn is flow-controlled */ |
0 | 301 |
|
8275
7c223a798022
PSARC/2006/357 Crossbow - Network Virtualization and Resource Management
Eric Cheng
parents:
5815
diff
changeset
|
302 |
squeue_t *conn_initial_sqp; /* Squeue at open time */ |
7c223a798022
PSARC/2006/357 Crossbow - Network Virtualization and Resource Management
Eric Cheng
parents:
5815
diff
changeset
|
303 |
squeue_t *conn_final_sqp; /* Squeue after connect */ |
5381
6bff17151099
PSARC/2007/565 IP_XMIT_IF removal and IP_BOUND_IF rationalization
meem
parents:
5240
diff
changeset
|
304 |
ill_t *conn_dhcpinit_ill; /* IP_DHCPINIT_IF */ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
305 |
ipsec_latch_t *conn_latch; /* latched IDS */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
306 |
struct ipsec_policy_s *conn_latch_in_policy; /* latched policy (in) */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
307 |
struct ipsec_action_s *conn_latch_in_action; /* latched action (in) */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
308 |
uint_t conn_bound_if; /* IP*_BOUND_IF */ |
0 | 309 |
queue_t *conn_rq; /* Read queue */ |
310 |
queue_t *conn_wq; /* Write queue */ |
|
311 |
dev_t conn_dev; /* Minor number */ |
|
5815
837c8cd4d6b6
6507173 Sockets should allocate minor numbers from higher order arena
gt145670
parents:
5455
diff
changeset
|
312 |
vmem_t *conn_minor_arena; /* Minor arena */ |
8348
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
313 |
ip_helper_stream_info_t *conn_helper_info; |
0 | 314 |
|
315 |
cred_t *conn_cred; /* Credentials */ |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
316 |
pid_t conn_cpid; /* pid from open/connect */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
317 |
uint64_t conn_open_time; /* time when this was opened */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
318 |
|
0 | 319 |
connf_t *conn_g_fanout; /* Global Hash bucket head */ |
320 |
struct conn_s *conn_g_next; /* Global Hash chain next */ |
|
321 |
struct conn_s *conn_g_prev; /* Global Hash chain prev */ |
|
322 |
struct ipsec_policy_head_s *conn_policy; /* Configured policy */ |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
323 |
in6_addr_t conn_bound_addr_v6; /* Address in bind() */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
324 |
#define conn_bound_addr_v4 V4_PART_OF_V6(conn_bound_addr_v6) |
0 | 325 |
connf_t *conn_fanout; /* Hash bucket we're part of */ |
326 |
struct conn_s *conn_next; /* Hash chain next */ |
|
327 |
struct conn_s *conn_prev; /* Hash chain prev */ |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
328 |
|
0 | 329 |
struct { |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
330 |
in6_addr_t connua_laddr; /* Local address - match */ |
0 | 331 |
in6_addr_t connua_faddr; /* Remote address */ |
332 |
} connua_v6addr; |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
333 |
#define conn_laddr_v4 V4_PART_OF_V6(connua_v6addr.connua_laddr) |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
334 |
#define conn_faddr_v4 V4_PART_OF_V6(connua_v6addr.connua_faddr) |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
335 |
#define conn_laddr_v6 connua_v6addr.connua_laddr |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
336 |
#define conn_faddr_v6 connua_v6addr.connua_faddr |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
337 |
in6_addr_t conn_saddr_v6; /* Local address - source */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
338 |
#define conn_saddr_v4 V4_PART_OF_V6(conn_saddr_v6) |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
339 |
|
0 | 340 |
union { |
341 |
/* Used for classifier match performance */ |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
342 |
uint32_t connu_ports2; |
0 | 343 |
struct { |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
344 |
in_port_t connu_fport; /* Remote port */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
345 |
in_port_t connu_lport; /* Local port */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
346 |
} connu_ports; |
0 | 347 |
} u_port; |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
348 |
#define conn_fport u_port.connu_ports.connu_fport |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
349 |
#define conn_lport u_port.connu_ports.connu_lport |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
350 |
#define conn_ports u_port.connu_ports2 |
0 | 351 |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
352 |
uint_t conn_incoming_ifindex; /* IP{,V6}_BOUND_IF, scopeid */ |
0 | 353 |
ill_t *conn_oper_pending_ill; /* pending shared ioctl */ |
354 |
||
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
355 |
krwlock_t conn_ilg_lock; /* Protects conn_ilg_* */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
356 |
ilg_t *conn_ilg; /* Group memberships */ |
0 | 357 |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
358 |
kcondvar_t conn_refcv; /* For conn_oper_pending_ill */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
359 |
|
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
360 |
struct conn_s *conn_drain_next; /* Next conn in drain list */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
361 |
struct conn_s *conn_drain_prev; /* Prev conn in drain list */ |
0 | 362 |
idl_t *conn_idl; /* Ptr to the drain list head */ |
363 |
mblk_t *conn_ipsec_opt_mp; /* ipsec option mblk */ |
|
364 |
zoneid_t conn_zoneid; /* zone connection is in */ |
|
8485
633e5b5eb268
PSARC/2007/272 Project Clearview: IPMP Rearchitecture
meem <Peter.Memishian@Sun.COM>
parents:
8477
diff
changeset
|
365 |
int conn_rtaware; /* RT_AWARE sockopt value */ |
8348
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
366 |
kcondvar_t conn_sq_cv; /* For non-STREAMS socket IO */ |
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
367 |
sock_upcalls_t *conn_upcalls; /* Upcalls to sockfs */ |
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
368 |
sock_upper_handle_t conn_upper_handle; /* Upper handle: sonode * */ |
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
369 |
|
1676 | 370 |
unsigned int |
371 |
conn_mlp_type : 2, /* mlp_type_t; tsol/tndb.h */ |
|
372 |
conn_anon_mlp : 1, /* user wants anon MLP */ |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
373 |
conn_anon_port : 1, /* user bound anonymously */ |
1676 | 374 |
|
10934
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
375 |
conn_mac_mode : 2, /* normal/loose/implicit MAC */ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
376 |
conn_anon_priv_bind : 1, /* *_ANON_PRIV_BIND state */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
377 |
conn_zone_is_global : 1, /* GLOBAL_ZONEID */ |
11076 | 378 |
conn_isvrrp : 1, /* VRRP control socket */ |
379 |
conn_spare : 23; |
|
8348
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
380 |
|
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
381 |
boolean_t conn_flow_cntrld; |
3448 | 382 |
netstack_t *conn_netstack; /* Corresponds to a netstack_hold */ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
383 |
|
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
384 |
/* |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
385 |
* IP format that packets received for this struct should use. |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
386 |
* Value can be IP4_VERSION or IPV6_VERSION. |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
387 |
* The sending version is encoded using IXAF_IS_IPV4. |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
388 |
*/ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
389 |
ushort_t conn_ipversion; |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
390 |
|
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
391 |
/* Written to only once at the time of opening the endpoint */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
392 |
sa_family_t conn_family; /* Family from socket() call */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
393 |
uint_t conn_so_type; /* Type from socket() call */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
394 |
|
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
395 |
uint_t conn_sndbuf; /* SO_SNDBUF state */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
396 |
uint_t conn_rcvbuf; /* SO_RCVBUF state */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
397 |
uint_t conn_wroff; /* Current write offset */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
398 |
|
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
399 |
uint_t conn_sndlowat; /* Send buffer low water mark */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
400 |
uint_t conn_rcvlowat; /* Recv buffer low water mark */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
401 |
|
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
402 |
uint8_t conn_default_ttl; /* Default TTL/hoplimit */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
403 |
|
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
404 |
uint32_t conn_flowinfo; /* Connected flow id and tclass */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
405 |
|
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
406 |
/* |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
407 |
* The most recent address for sendto. Initially set to zero |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
408 |
* which is always different than then the destination address |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
409 |
* since the send interprets zero as the loopback address. |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
410 |
*/ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
411 |
in6_addr_t conn_v6lastdst; |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
412 |
#define conn_v4lastdst V4_PART_OF_V6(conn_v6lastdst) |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
413 |
ushort_t conn_lastipversion; |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
414 |
in_port_t conn_lastdstport; |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
415 |
uint32_t conn_lastflowinfo; /* IPv6-only */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
416 |
uint_t conn_lastscopeid; /* IPv6-only */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
417 |
uint_t conn_lastsrcid; /* Only for AF_INET6 */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
418 |
/* |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
419 |
* When we are not connected conn_saddr might be unspecified. |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
420 |
* We track the source that was used with conn_v6lastdst here. |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
421 |
*/ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
422 |
in6_addr_t conn_v6lastsrc; |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
423 |
#define conn_v4lastsrc V4_PART_OF_V6(conn_v6lastsrc) |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
424 |
|
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
425 |
/* Templates for transmitting packets */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
426 |
ip_pkt_t conn_xmit_ipp; /* Options if no ancil data */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
427 |
|
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
428 |
/* |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
429 |
* Header template - conn_ht_ulp is a pointer into conn_ht_iphc. |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
430 |
* Note that ixa_ip_hdr_length indicates the offset of ht_ulp in |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
431 |
* ht_iphc |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
432 |
* |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
433 |
* The header template is maintained for connected endpoints (and |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
434 |
* updated when sticky options are changed) and also for the lastdst. |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
435 |
* There is no conflict between those usages since SOCK_DGRAM and |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
436 |
* SOCK_RAW can not be used to specify a destination address (with |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
437 |
* sendto/sendmsg) if the socket has been connected. |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
438 |
*/ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
439 |
uint8_t *conn_ht_iphc; /* Start of IP header */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
440 |
uint_t conn_ht_iphc_allocated; /* Allocated buffer size */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
441 |
uint_t conn_ht_iphc_len; /* IP+ULP size */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
442 |
uint8_t *conn_ht_ulp; /* Upper-layer header */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
443 |
uint_t conn_ht_ulp_len; /* ULP header len */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
444 |
|
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
445 |
/* Checksum to compensate for source routed packets. Host byte order */ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
446 |
uint32_t conn_sum; |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
447 |
|
0 | 448 |
#ifdef CONN_DEBUG |
449 |
#define CONN_TRACE_MAX 10 |
|
450 |
int conn_trace_last; /* ndx of last used tracebuf */ |
|
451 |
conn_trace_t conn_trace_buf[CONN_TRACE_MAX]; |
|
452 |
#endif |
|
453 |
}; |
|
454 |
||
8778
b4169d2ab299
PSARC 2007/670 db_credp update
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
8485
diff
changeset
|
455 |
/* |
0 | 456 |
* connf_t - connection fanout data. |
457 |
* |
|
458 |
* The hash tables and their linkage (conn_t.{hashnextp, hashprevp} are |
|
459 |
* protected by the per-bucket lock. Each conn_t inserted in the list |
|
460 |
* points back at the connf_t that heads the bucket. |
|
461 |
*/ |
|
462 |
struct connf_s { |
|
463 |
struct conn_s *connf_head; |
|
464 |
kmutex_t connf_lock; |
|
465 |
}; |
|
466 |
||
467 |
#define CONN_INC_REF(connp) { \ |
|
3104
fba3fdffbc25
6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents:
3055
diff
changeset
|
468 |
mutex_enter(&(connp)->conn_lock); \ |
0 | 469 |
DTRACE_PROBE1(conn__inc__ref, conn_t *, connp); \ |
470 |
ASSERT(conn_trace_ref(connp)); \ |
|
471 |
(connp)->conn_ref++; \ |
|
472 |
ASSERT((connp)->conn_ref != 0); \ |
|
473 |
mutex_exit(&(connp)->conn_lock); \ |
|
474 |
} |
|
475 |
||
476 |
#define CONN_INC_REF_LOCKED(connp) { \ |
|
477 |
DTRACE_PROBE1(conn__inc__ref, conn_t *, connp); \ |
|
478 |
ASSERT(MUTEX_HELD(&(connp)->conn_lock)); \ |
|
479 |
ASSERT(conn_trace_ref(connp)); \ |
|
480 |
(connp)->conn_ref++; \ |
|
481 |
ASSERT((connp)->conn_ref != 0); \ |
|
482 |
} |
|
483 |
||
484 |
#define CONN_DEC_REF(connp) { \ |
|
3104
fba3fdffbc25
6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents:
3055
diff
changeset
|
485 |
mutex_enter(&(connp)->conn_lock); \ |
0 | 486 |
DTRACE_PROBE1(conn__dec__ref, conn_t *, connp); \ |
3104
fba3fdffbc25
6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents:
3055
diff
changeset
|
487 |
/* \ |
fba3fdffbc25
6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents:
3055
diff
changeset
|
488 |
* The squeue framework always does a CONN_DEC_REF after return \ |
fba3fdffbc25
6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents:
3055
diff
changeset
|
489 |
* from TCP. Hence the refcnt must be at least 2 if conn_on_sqp \ |
fba3fdffbc25
6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents:
3055
diff
changeset
|
490 |
* is B_TRUE and conn_ref is being decremented. This is to \ |
fba3fdffbc25
6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents:
3055
diff
changeset
|
491 |
* account for the mblk being currently processed. \ |
fba3fdffbc25
6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents:
3055
diff
changeset
|
492 |
*/ \ |
10616
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
493 |
if ((connp)->conn_ref == 0 || \ |
3104
fba3fdffbc25
6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents:
3055
diff
changeset
|
494 |
((connp)->conn_ref == 1 && (connp)->conn_on_sqp)) \ |
0 | 495 |
cmn_err(CE_PANIC, "CONN_DEC_REF: connp(%p) has ref " \ |
496 |
"= %d\n", (void *)(connp), (connp)->conn_ref); \ |
|
497 |
ASSERT(conn_untrace_ref(connp)); \ |
|
498 |
(connp)->conn_ref--; \ |
|
499 |
if ((connp)->conn_ref == 0) { \ |
|
500 |
/* Refcnt can't increase again, safe to drop lock */ \ |
|
501 |
mutex_exit(&(connp)->conn_lock); \ |
|
502 |
ipcl_conn_destroy(connp); \ |
|
503 |
} else { \ |
|
504 |
cv_broadcast(&(connp)->conn_cv); \ |
|
505 |
mutex_exit(&(connp)->conn_lock); \ |
|
506 |
} \ |
|
507 |
} |
|
508 |
||
2263
fd48046384d0
PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents:
1676
diff
changeset
|
509 |
/* |
fd48046384d0
PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents:
1676
diff
changeset
|
510 |
* For use with subsystems within ip which use ALL_ZONES as a wildcard |
fd48046384d0
PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents:
1676
diff
changeset
|
511 |
*/ |
fd48046384d0
PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents:
1676
diff
changeset
|
512 |
#define IPCL_ZONEID(connp) \ |
fd48046384d0
PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents:
1676
diff
changeset
|
513 |
((connp)->conn_allzones ? ALL_ZONES : (connp)->conn_zoneid) |
fd48046384d0
PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents:
1676
diff
changeset
|
514 |
|
fd48046384d0
PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents:
1676
diff
changeset
|
515 |
/* |
fd48046384d0
PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents:
1676
diff
changeset
|
516 |
* For matching between a conn_t and a zoneid. |
fd48046384d0
PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents:
1676
diff
changeset
|
517 |
*/ |
fd48046384d0
PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents:
1676
diff
changeset
|
518 |
#define IPCL_ZONE_MATCH(connp, zoneid) \ |
fd48046384d0
PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents:
1676
diff
changeset
|
519 |
(((connp)->conn_allzones) || \ |
fd48046384d0
PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents:
1676
diff
changeset
|
520 |
((zoneid) == ALL_ZONES) || \ |
fd48046384d0
PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents:
1676
diff
changeset
|
521 |
(connp)->conn_zoneid == (zoneid)) |
fd48046384d0
PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents:
1676
diff
changeset
|
522 |
|
10934
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
523 |
/* |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
524 |
* On a labeled system, we must treat bindings to ports |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
525 |
* on shared IP addresses by sockets with MAC exemption |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
526 |
* privilege as being in all zones, as there's |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
527 |
* otherwise no way to identify the right receiver. |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
528 |
*/ |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
529 |
|
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
530 |
#define IPCL_CONNS_MAC(conn1, conn2) \ |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
531 |
(((conn1)->conn_mac_mode != CONN_MAC_DEFAULT) || \ |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
532 |
((conn2)->conn_mac_mode != CONN_MAC_DEFAULT)) |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
533 |
|
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
534 |
#define IPCL_BIND_ZONE_MATCH(conn1, conn2) \ |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
535 |
(IPCL_CONNS_MAC(conn1, conn2) || \ |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
536 |
IPCL_ZONE_MATCH(conn1, conn2->conn_zoneid) || \ |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
537 |
IPCL_ZONE_MATCH(conn2, conn1->conn_zoneid)) |
e209937a4f19
PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents:
10616
diff
changeset
|
538 |
|
2263
fd48046384d0
PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents:
1676
diff
changeset
|
539 |
|
0 | 540 |
#define _IPCL_V4_MATCH(v6addr, v4addr) \ |
541 |
(V4_PART_OF_V6((v6addr)) == (v4addr) && IN6_IS_ADDR_V4MAPPED(&(v6addr))) |
|
542 |
||
543 |
#define _IPCL_V4_MATCH_ANY(addr) \ |
|
544 |
(IN6_IS_ADDR_V4MAPPED_ANY(&(addr)) || IN6_IS_ADDR_UNSPECIFIED(&(addr))) |
|
545 |
||
2263
fd48046384d0
PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents:
1676
diff
changeset
|
546 |
|
0 | 547 |
/* |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
548 |
* IPCL_PROTO_MATCH() and IPCL_PROTO_MATCH_V6() only matches conns with |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
549 |
* the specified ira_zoneid or conn_allzones by calling conn_wantpacket. |
0 | 550 |
*/ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
551 |
#define IPCL_PROTO_MATCH(connp, ira, ipha) \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
552 |
((((connp)->conn_laddr_v4 == INADDR_ANY) || \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
553 |
(((connp)->conn_laddr_v4 == ((ipha)->ipha_dst)) && \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
554 |
(((connp)->conn_faddr_v4 == INADDR_ANY) || \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
555 |
((connp)->conn_faddr_v4 == ((ipha)->ipha_src))))) && \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
556 |
conn_wantpacket((connp), (ira), (ipha))) |
0 | 557 |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
558 |
#define IPCL_PROTO_MATCH_V6(connp, ira, ip6h) \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
559 |
((IN6_IS_ADDR_UNSPECIFIED(&(connp)->conn_laddr_v6) || \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
560 |
(IN6_ARE_ADDR_EQUAL(&(connp)->conn_laddr_v6, &((ip6h)->ip6_dst)) && \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
561 |
(IN6_IS_ADDR_UNSPECIFIED(&(connp)->conn_faddr_v6) || \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
562 |
IN6_ARE_ADDR_EQUAL(&(connp)->conn_faddr_v6, &((ip6h)->ip6_src))))) && \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
563 |
(conn_wantpacket_v6((connp), (ira), (ip6h)))) |
0 | 564 |
|
3448 | 565 |
#define IPCL_CONN_HASH(src, ports, ipst) \ |
0 | 566 |
((unsigned)(ntohl((src)) ^ ((ports) >> 24) ^ ((ports) >> 16) ^ \ |
3448 | 567 |
((ports) >> 8) ^ (ports)) % (ipst)->ips_ipcl_conn_fanout_size) |
0 | 568 |
|
3448 | 569 |
#define IPCL_CONN_HASH_V6(src, ports, ipst) \ |
570 |
IPCL_CONN_HASH(V4_PART_OF_V6((src)), (ports), (ipst)) |
|
0 | 571 |
|
572 |
#define IPCL_CONN_MATCH(connp, proto, src, dst, ports) \ |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
573 |
((connp)->conn_proto == (proto) && \ |
0 | 574 |
(connp)->conn_ports == (ports) && \ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
575 |
_IPCL_V4_MATCH((connp)->conn_faddr_v6, (src)) && \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
576 |
_IPCL_V4_MATCH((connp)->conn_laddr_v6, (dst)) && \ |
0 | 577 |
!(connp)->conn_ipv6_v6only) |
578 |
||
579 |
#define IPCL_CONN_MATCH_V6(connp, proto, src, dst, ports) \ |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
580 |
((connp)->conn_proto == (proto) && \ |
0 | 581 |
(connp)->conn_ports == (ports) && \ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
582 |
IN6_ARE_ADDR_EQUAL(&(connp)->conn_faddr_v6, &(src)) && \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
583 |
IN6_ARE_ADDR_EQUAL(&(connp)->conn_laddr_v6, &(dst))) |
0 | 584 |
|
1503
9c3595b79c0d
6376992 IP Classifier hash function for UDP is broken, causing poor UDP performance when using many ports
ericheng
parents:
1216
diff
changeset
|
585 |
#define IPCL_PORT_HASH(port, size) \ |
9c3595b79c0d
6376992 IP Classifier hash function for UDP is broken, causing poor UDP performance when using many ports
ericheng
parents:
1216
diff
changeset
|
586 |
((((port) >> 8) ^ (port)) & ((size) - 1)) |
9c3595b79c0d
6376992 IP Classifier hash function for UDP is broken, causing poor UDP performance when using many ports
ericheng
parents:
1216
diff
changeset
|
587 |
|
3448 | 588 |
#define IPCL_BIND_HASH(lport, ipst) \ |
589 |
((unsigned)(((lport) >> 8) ^ (lport)) % \ |
|
590 |
(ipst)->ips_ipcl_bind_fanout_size) |
|
0 | 591 |
|
592 |
#define IPCL_BIND_MATCH(connp, proto, laddr, lport) \ |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
593 |
((connp)->conn_proto == (proto) && \ |
0 | 594 |
(connp)->conn_lport == (lport) && \ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
595 |
(_IPCL_V4_MATCH_ANY((connp)->conn_laddr_v6) || \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
596 |
_IPCL_V4_MATCH((connp)->conn_laddr_v6, (laddr))) && \ |
0 | 597 |
!(connp)->conn_ipv6_v6only) |
598 |
||
599 |
#define IPCL_BIND_MATCH_V6(connp, proto, laddr, lport) \ |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
600 |
((connp)->conn_proto == (proto) && \ |
0 | 601 |
(connp)->conn_lport == (lport) && \ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
602 |
(IN6_ARE_ADDR_EQUAL(&(connp)->conn_laddr_v6, &(laddr)) || \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
603 |
IN6_IS_ADDR_UNSPECIFIED(&(connp)->conn_laddr_v6))) |
0 | 604 |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
605 |
/* |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
606 |
* We compare conn_laddr since it captures both connected and a bind to |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
607 |
* a multicast or broadcast address. |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
608 |
* The caller needs to match the zoneid and also call conn_wantpacket |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
609 |
* for multicast, broadcast, or when conn_incoming_ifindex is set. |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
610 |
*/ |
0 | 611 |
#define IPCL_UDP_MATCH(connp, lport, laddr, fport, faddr) \ |
612 |
(((connp)->conn_lport == (lport)) && \ |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
613 |
((_IPCL_V4_MATCH_ANY((connp)->conn_laddr_v6) || \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
614 |
(_IPCL_V4_MATCH((connp)->conn_laddr_v6, (laddr)) && \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
615 |
(_IPCL_V4_MATCH_ANY((connp)->conn_faddr_v6) || \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
616 |
(_IPCL_V4_MATCH((connp)->conn_faddr_v6, (faddr)) && \ |
0 | 617 |
(connp)->conn_fport == (fport)))))) && \ |
618 |
!(connp)->conn_ipv6_v6only) |
|
619 |
||
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
620 |
/* |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
621 |
* We compare conn_laddr since it captures both connected and a bind to |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
622 |
* a multicast or broadcast address. |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
623 |
* The caller needs to match the zoneid and also call conn_wantpacket_v6 |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
624 |
* for multicast or when conn_incoming_ifindex is set. |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
625 |
*/ |
0 | 626 |
#define IPCL_UDP_MATCH_V6(connp, lport, laddr, fport, faddr) \ |
627 |
(((connp)->conn_lport == (lport)) && \ |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
628 |
(IN6_IS_ADDR_UNSPECIFIED(&(connp)->conn_laddr_v6) || \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
629 |
(IN6_ARE_ADDR_EQUAL(&(connp)->conn_laddr_v6, &(laddr)) && \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
630 |
(IN6_IS_ADDR_UNSPECIFIED(&(connp)->conn_faddr_v6) || \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
631 |
(IN6_ARE_ADDR_EQUAL(&(connp)->conn_faddr_v6, &(faddr)) && \ |
0 | 632 |
(connp)->conn_fport == (fport)))))) |
633 |
||
10616
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
634 |
#define IPCL_IPTUN_HASH(laddr, faddr) \ |
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
635 |
((ntohl(laddr) ^ ((ntohl(faddr) << 24) | (ntohl(faddr) >> 8))) % \ |
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
636 |
ipcl_iptun_fanout_size) |
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
637 |
|
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
638 |
#define IPCL_IPTUN_HASH_V6(laddr, faddr) \ |
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
639 |
IPCL_IPTUN_HASH((laddr)->s6_addr32[0] ^ (laddr)->s6_addr32[1] ^ \ |
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
640 |
(faddr)->s6_addr32[2] ^ (faddr)->s6_addr32[3], \ |
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
641 |
(faddr)->s6_addr32[0] ^ (faddr)->s6_addr32[1] ^ \ |
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
642 |
(laddr)->s6_addr32[2] ^ (laddr)->s6_addr32[3]) |
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
643 |
|
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
644 |
#define IPCL_IPTUN_MATCH(connp, laddr, faddr) \ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
645 |
(_IPCL_V4_MATCH((connp)->conn_laddr_v6, (laddr)) && \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
646 |
_IPCL_V4_MATCH((connp)->conn_faddr_v6, (faddr))) |
10616
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
647 |
|
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
648 |
#define IPCL_IPTUN_MATCH_V6(connp, laddr, faddr) \ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
649 |
(IN6_ARE_ADDR_EQUAL(&(connp)->conn_laddr_v6, (laddr)) && \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
650 |
IN6_ARE_ADDR_EQUAL(&(connp)->conn_faddr_v6, (faddr))) |
0 | 651 |
|
3448 | 652 |
#define IPCL_UDP_HASH(lport, ipst) \ |
653 |
IPCL_PORT_HASH(lport, (ipst)->ips_ipcl_udp_fanout_size) |
|
0 | 654 |
|
655 |
#define CONN_G_HASH_SIZE 1024 |
|
656 |
||
657 |
/* Raw socket hash function. */ |
|
3448 | 658 |
#define IPCL_RAW_HASH(lport, ipst) \ |
659 |
IPCL_PORT_HASH(lport, (ipst)->ips_ipcl_raw_fanout_size) |
|
0 | 660 |
|
409
22012dc8ea5b
6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents:
0
diff
changeset
|
661 |
/* |
22012dc8ea5b
6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents:
0
diff
changeset
|
662 |
* This is similar to IPCL_BIND_MATCH except that the local port check |
22012dc8ea5b
6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents:
0
diff
changeset
|
663 |
* is changed to a wildcard port check. |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
664 |
* We compare conn_laddr since it captures both connected and a bind to |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
665 |
* a multicast or broadcast address. |
409
22012dc8ea5b
6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents:
0
diff
changeset
|
666 |
*/ |
22012dc8ea5b
6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents:
0
diff
changeset
|
667 |
#define IPCL_RAW_MATCH(connp, proto, laddr) \ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
668 |
((connp)->conn_proto == (proto) && \ |
409
22012dc8ea5b
6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents:
0
diff
changeset
|
669 |
(connp)->conn_lport == 0 && \ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
670 |
(_IPCL_V4_MATCH_ANY((connp)->conn_laddr_v6) || \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
671 |
_IPCL_V4_MATCH((connp)->conn_laddr_v6, (laddr)))) |
409
22012dc8ea5b
6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents:
0
diff
changeset
|
672 |
|
22012dc8ea5b
6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents:
0
diff
changeset
|
673 |
#define IPCL_RAW_MATCH_V6(connp, proto, laddr) \ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
674 |
((connp)->conn_proto == (proto) && \ |
409
22012dc8ea5b
6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents:
0
diff
changeset
|
675 |
(connp)->conn_lport == 0 && \ |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
676 |
(IN6_IS_ADDR_UNSPECIFIED(&(connp)->conn_laddr_v6) || \ |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
677 |
IN6_ARE_ADDR_EQUAL(&(connp)->conn_laddr_v6, &(laddr)))) |
409
22012dc8ea5b
6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents:
0
diff
changeset
|
678 |
|
0 | 679 |
/* Function prototypes */ |
3448 | 680 |
extern void ipcl_g_init(void); |
681 |
extern void ipcl_init(ip_stack_t *); |
|
682 |
extern void ipcl_g_destroy(void); |
|
683 |
extern void ipcl_destroy(ip_stack_t *); |
|
684 |
extern conn_t *ipcl_conn_create(uint32_t, int, netstack_t *); |
|
0 | 685 |
extern void ipcl_conn_destroy(conn_t *); |
686 |
||
687 |
void ipcl_hash_insert_wildcard(connf_t *, conn_t *); |
|
688 |
void ipcl_hash_remove(conn_t *); |
|
689 |
void ipcl_hash_remove_locked(conn_t *connp, connf_t *connfp); |
|
690 |
||
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
691 |
extern int ipcl_bind_insert(conn_t *); |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
692 |
extern int ipcl_bind_insert_v4(conn_t *); |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
693 |
extern int ipcl_bind_insert_v6(conn_t *); |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
694 |
extern int ipcl_conn_insert(conn_t *); |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
695 |
extern int ipcl_conn_insert_v4(conn_t *); |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
696 |
extern int ipcl_conn_insert_v6(conn_t *); |
741
40027a3621ac
PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents:
409
diff
changeset
|
697 |
extern conn_t *ipcl_get_next_conn(connf_t *, conn_t *, uint32_t); |
0 | 698 |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
699 |
conn_t *ipcl_classify_v4(mblk_t *, uint8_t, uint_t, ip_recv_attr_t *, |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
700 |
ip_stack_t *); |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
701 |
conn_t *ipcl_classify_v6(mblk_t *, uint8_t, uint_t, ip_recv_attr_t *, |
3448 | 702 |
ip_stack_t *); |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
703 |
conn_t *ipcl_classify(mblk_t *, ip_recv_attr_t *, ip_stack_t *); |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
704 |
conn_t *ipcl_classify_raw(mblk_t *, uint8_t, uint32_t, ipha_t *, |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
705 |
ip6_t *, ip_recv_attr_t *, ip_stack_t *); |
10616
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
706 |
conn_t *ipcl_iptun_classify_v4(ipaddr_t *, ipaddr_t *, ip_stack_t *); |
3be00c4a6835
PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents:
9710
diff
changeset
|
707 |
conn_t *ipcl_iptun_classify_v6(in6_addr_t *, in6_addr_t *, ip_stack_t *); |
0 | 708 |
void ipcl_globalhash_insert(conn_t *); |
709 |
void ipcl_globalhash_remove(conn_t *); |
|
3448 | 710 |
void ipcl_walk(pfv_t, void *, ip_stack_t *); |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
711 |
conn_t *ipcl_tcp_lookup_reversed_ipv4(ipha_t *, tcpha_t *, int, ip_stack_t *); |
3448 | 712 |
conn_t *ipcl_tcp_lookup_reversed_ipv6(ip6_t *, tcpha_t *, int, uint_t, |
713 |
ip_stack_t *); |
|
714 |
conn_t *ipcl_lookup_listener_v4(uint16_t, ipaddr_t, zoneid_t, ip_stack_t *); |
|
715 |
conn_t *ipcl_lookup_listener_v6(uint16_t, in6_addr_t *, uint_t, zoneid_t, |
|
716 |
ip_stack_t *); |
|
0 | 717 |
int conn_trace_ref(conn_t *); |
718 |
int conn_untrace_ref(conn_t *); |
|
5240 | 719 |
void ipcl_conn_cleanup(conn_t *); |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
720 |
extern uint_t conn_recvancillary_size(conn_t *, crb_t, ip_recv_attr_t *, |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
721 |
mblk_t *, ip_pkt_t *); |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
722 |
extern void conn_recvancillary_add(conn_t *, crb_t, ip_recv_attr_t *, |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
723 |
ip_pkt_t *, uchar_t *, uint_t); |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
724 |
conn_t *ipcl_conn_tcp_lookup_reversed_ipv4(conn_t *, ipha_t *, tcpha_t *, |
3448 | 725 |
ip_stack_t *); |
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
726 |
conn_t *ipcl_conn_tcp_lookup_reversed_ipv6(conn_t *, ip6_t *, tcpha_t *, |
3448 | 727 |
ip_stack_t *); |
8348
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
728 |
|
11042
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
729 |
extern int ip_create_helper_stream(conn_t *, ldi_ident_t); |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
730 |
extern void ip_free_helper_stream(conn_t *); |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
731 |
extern int ip_helper_stream_setup(queue_t *, dev_t *, int, int, |
2d6e217af1b4
PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents:
10934
diff
changeset
|
732 |
cred_t *, boolean_t); |
8348
4137e18bfaf0
PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents:
8275
diff
changeset
|
733 |
|
0 | 734 |
#ifdef __cplusplus |
735 |
} |
|
736 |
#endif |
|
737 |
||
738 |
#endif /* _INET_IPCLASSIFIER_H */ |