usr/src/uts/common/inet/ipclassifier.h
author Brian Ruthven <Brian.Ruthven@Sun.COM>
Tue, 22 Dec 2009 00:58:06 +0000
changeset 11375 a79c98ae9bbe
parent 11076 445f05f9f7b4
child 12020 61024838b665
permissions -rw-r--r--
6812856 Pending ioctl is not cleaned from ipsq during tcp_close
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
#ifndef	_INET_IPCLASSIFIER_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
#define	_INET_IPCLASSIFIER_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
extern "C" {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
#include <inet/common.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
#include <inet/ip.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
#include <inet/mi.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
#include <inet/tcp.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
#include <inet/ip6.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
#include <netinet/in.h>		/* for IPPROTO_* constants */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
 * ==============================
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
 * =	The CONNECTION		=
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
 * ==============================
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
 * The connection structure contains the common information/flags/ref needed.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
 * contiguous memory location.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
/* Conn Flags */
5240
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
    64
/* Unused			0x00020000 */
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
    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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    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
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
    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
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
    75
/* Unused			0x10000000 */
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
    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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
/* Flags identifying the type of conn */
5240
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
    81
#define	IPCL_TCPCONN		0x00000001	/* From tcp_conn_cache */
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
    82
#define	IPCL_SCTPCONN		0x00000002	/* From sctp_conn_cache */
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
    83
#define	IPCL_IPCCONN		0x00000004	/* From ip_conn_cache */
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
    84
#define	IPCL_UDPCONN		0x00000008	/* From udp_conn_cache */
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
    85
#define	IPCL_RAWIPCONN		0x00000010	/* From rawip_conn_cache */
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
    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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    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
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
    93
#define	IPCL_REMOVED		0x00000100
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
    94
#define	IPCL_REUSED		0x00000200
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
#define	IPCL_IS_CONNECTED(connp)					\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
	((connp)->conn_flags & IPCL_CONNECTED)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
#define	IPCL_IS_BOUND(connp)						\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
	((connp)->conn_flags & IPCL_BOUND)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
5240
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   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
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   104
 * between a real TCP socket and a SOCK_RAW, IPPROTO_TCP.
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   105
 */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
#define	IPCL_IS_TCP(connp)						\
5240
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   107
	((connp)->conn_flags & IPCL_TCPCONN)
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   108
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   109
#define	IPCL_IS_SCTP(connp)						\
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   110
	((connp)->conn_flags & IPCL_SCTPCONN)
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
741
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 409
diff changeset
   112
#define	IPCL_IS_UDP(connp)						\
5240
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   113
	((connp)->conn_flags & IPCL_UDPCONN)
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   114
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   115
#define	IPCL_IS_RAWIP(connp)						\
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   116
	((connp)->conn_flags & IPCL_RAWIPCONN)
741
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 409
diff changeset
   117
5240
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   118
#define	IPCL_IS_RTS(connp)						\
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   119
	((connp)->conn_flags & IPCL_RTSCONN)
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   120
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
typedef struct connf_s connf_t;
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   127
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
typedef struct
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
} conn_trace_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   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
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   219
 * The initial fields in the conn_t are setup by the kmem_cache constructor,
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   220
 * and are preserved when it is freed. Fields after that are bzero'ed when
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   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
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   227
 */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   228
struct conn_s {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   229
	kmutex_t	conn_lock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   230
	uint32_t	conn_ref;		/* Reference counter */
5240
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   231
	uint32_t	conn_flags;		/* Conn Flags */
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   232
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   233
	union {
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   234
		tcp_t		*cp_tcp;	/* Pointer to the tcp struct */
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   235
		struct udp_s	*cp_udp;	/* Pointer to the udp struct */
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   236
		struct icmp_s	*cp_icmp;	/* Pointer to rawip struct */
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   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
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   240
		void		*cp_priv;
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   241
	} conn_proto_priv;
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   242
#define	conn_tcp	conn_proto_priv.cp_tcp
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   243
#define	conn_udp	conn_proto_priv.cp_udp
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   244
#define	conn_icmp	conn_proto_priv.cp_icmp
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   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
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   248
#define	conn_priv	conn_proto_priv.cp_priv
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   249
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   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
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   252
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   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
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   258
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   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
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   264
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   265
	squeue_t	*conn_sqp;		/* Squeue for processing */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   266
	uint_t		conn_state_flags;	/* IP state flags */
5240
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   270
	unsigned int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   274
		conn_broadcast : 1,		/* SO_BROADCAST state */
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1503
diff changeset
   275
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1503
diff changeset
   280
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   281
		conn_unspec_src : 1,		/* IP_UNSPEC_SRC */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   282
		conn_policy_cached : 1,		/* Is policy cached/latched ? */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   283
		conn_in_enforce_policy : 1,	/* Enforce Policy on inbound */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   284
		conn_out_enforce_policy : 1,	/* Enforce Policy on outbound */
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1503
diff changeset
   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
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1503
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   294
		conn_ipv6_recvpathmtu : 1,	/* IPV6_RECVPATHMTU */
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1503
diff changeset
   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
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1503
diff changeset
   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
4198a5aabed4 PSARC/2006/190 Large Send Offload (LSO)
yl150051
parents: 3104
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   309
	queue_t		*conn_rq;		/* Read queue */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   310
	queue_t		*conn_wq;		/* Write queue */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   314
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   319
	connf_t		*conn_g_fanout;		/* Global Hash bucket head */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   320
	struct conn_s	*conn_g_next;		/* Global Hash chain next */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   321
	struct conn_s	*conn_g_prev;		/* Global Hash chain prev */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   325
	connf_t		*conn_fanout;		/* Hash bucket we're part of */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   326
	struct conn_s	*conn_next;		/* Hash chain next */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   331
		in6_addr_t connua_faddr;	/* Remote address */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   340
	union {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   353
	ill_t		*conn_oper_pending_ill; /* pending shared ioctl */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   362
	idl_t		*conn_idl;		/* Ptr to the drain list head */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   363
	mblk_t		*conn_ipsec_opt_mp;	/* ipsec option mblk */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   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
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1503
diff changeset
   370
	unsigned int
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1503
diff changeset
   371
		conn_mlp_type : 2,		/* mlp_type_t; tsol/tndb.h */
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1503
diff changeset
   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
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1503
diff changeset
   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
445f05f9f7b4 PSARC/2008/693 VRRP
Cathy Zhou <Cathy.Zhou@Sun.COM>
parents: 11042
diff changeset
   378
		conn_isvrrp : 1,		/* VRRP control socket */
445f05f9f7b4 PSARC/2008/693 VRRP
Cathy Zhou <Cathy.Zhou@Sun.COM>
parents: 11042
diff changeset
   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
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   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
11375
a79c98ae9bbe 6812856 Pending ioctl is not cleaned from ipsq during tcp_close
Brian Ruthven <Brian.Ruthven@Sun.COM>
parents: 11076
diff changeset
   448
	uint32_t	conn_ioctlref;		/* ioctl ref count */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   449
#ifdef CONN_DEBUG
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   450
#define	CONN_TRACE_MAX	10
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   451
	int		conn_trace_last;	/* ndx of last used tracebuf */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   452
	conn_trace_t	conn_trace_buf[CONN_TRACE_MAX];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   453
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   454
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   455
8778
b4169d2ab299 PSARC 2007/670 db_credp update
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 8485
diff changeset
   456
/*
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   457
 * connf_t - connection fanout data.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   458
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   459
 * The hash tables and their linkage (conn_t.{hashnextp, hashprevp} are
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   460
 * protected by the per-bucket lock. Each conn_t inserted in the list
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   461
 * points back at the connf_t that heads the bucket.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   462
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   463
struct connf_s {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   464
	struct conn_s	*connf_head;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   465
	kmutex_t	connf_lock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   466
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   467
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   468
#define	CONN_INC_REF(connp)	{				\
3104
fba3fdffbc25 6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents: 3055
diff changeset
   469
	mutex_enter(&(connp)->conn_lock);			\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   470
	DTRACE_PROBE1(conn__inc__ref, conn_t *, connp);		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   471
	ASSERT(conn_trace_ref(connp));				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   472
	(connp)->conn_ref++;					\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   473
	ASSERT((connp)->conn_ref != 0);				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   474
	mutex_exit(&(connp)->conn_lock);			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   475
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   476
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   477
#define	CONN_INC_REF_LOCKED(connp)	{			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   478
	DTRACE_PROBE1(conn__inc__ref, conn_t *, connp);		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   479
	ASSERT(MUTEX_HELD(&(connp)->conn_lock));	 	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   480
	ASSERT(conn_trace_ref(connp));				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   481
	(connp)->conn_ref++;					\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   482
	ASSERT((connp)->conn_ref != 0);				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   483
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   484
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   485
#define	CONN_DEC_REF(connp)	{					\
3104
fba3fdffbc25 6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents: 3055
diff changeset
   486
	mutex_enter(&(connp)->conn_lock);				\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   487
	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
   488
	/*								\
fba3fdffbc25 6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents: 3055
diff changeset
   489
	 * 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
   490
	 * 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
   491
	 * 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
   492
	 * 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
   493
	 */								\
10616
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   494
	if ((connp)->conn_ref == 0 ||					\
3104
fba3fdffbc25 6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents: 3055
diff changeset
   495
	    ((connp)->conn_ref == 1 && (connp)->conn_on_sqp))		\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   496
		cmn_err(CE_PANIC, "CONN_DEC_REF: connp(%p) has ref "	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   497
			"= %d\n", (void *)(connp), (connp)->conn_ref);	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   498
	ASSERT(conn_untrace_ref(connp));				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   499
	(connp)->conn_ref--;						\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   500
	if ((connp)->conn_ref == 0) {					\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   501
		/* Refcnt can't increase again, safe to drop lock */	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   502
		mutex_exit(&(connp)->conn_lock);			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   503
		ipcl_conn_destroy(connp);				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   504
	} else {							\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   505
		cv_broadcast(&(connp)->conn_cv);			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   506
		mutex_exit(&(connp)->conn_lock);			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   507
	}								\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   508
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   509
2263
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   510
/*
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   511
 * 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
   512
 */
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   513
#define	IPCL_ZONEID(connp)						\
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   514
	((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
   515
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   516
/*
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   517
 * 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
   518
 */
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   519
#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
   520
	(((connp)->conn_allzones) ||					\
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   521
	    ((zoneid) == ALL_ZONES) ||					\
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   522
	    (connp)->conn_zoneid == (zoneid))
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   523
10934
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   524
/*
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   525
 * 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
   526
 * 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
   527
 * 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
   528
 * 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
   529
 */
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   530
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   531
#define	IPCL_CONNS_MAC(conn1, conn2)					\
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   532
	(((conn1)->conn_mac_mode != CONN_MAC_DEFAULT) ||		\
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   533
	((conn2)->conn_mac_mode != CONN_MAC_DEFAULT))
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   534
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   535
#define	IPCL_BIND_ZONE_MATCH(conn1, conn2)				\
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   536
	(IPCL_CONNS_MAC(conn1, conn2) ||				\
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   537
	IPCL_ZONE_MATCH(conn1, conn2->conn_zoneid) ||			\
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   538
	IPCL_ZONE_MATCH(conn2, conn1->conn_zoneid))
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   539
2263
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   540
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   541
#define	_IPCL_V4_MATCH(v6addr, v4addr)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   542
	(V4_PART_OF_V6((v6addr)) == (v4addr) && IN6_IS_ADDR_V4MAPPED(&(v6addr)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   543
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   544
#define	_IPCL_V4_MATCH_ANY(addr)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   545
	(IN6_IS_ADDR_V4MAPPED_ANY(&(addr)) || IN6_IS_ADDR_UNSPECIFIED(&(addr)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   546
2263
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   547
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   548
/*
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   549
 * 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
   550
 * the specified ira_zoneid or conn_allzones by calling conn_wantpacket.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   551
 */
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   552
#define	IPCL_PROTO_MATCH(connp, ira, ipha)				\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   553
	((((connp)->conn_laddr_v4 == INADDR_ANY) ||			\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   554
	(((connp)->conn_laddr_v4 == ((ipha)->ipha_dst)) &&		\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   555
	    (((connp)->conn_faddr_v4 == INADDR_ANY) ||			\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   556
	((connp)->conn_faddr_v4 == ((ipha)->ipha_src))))) &&		\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   557
	conn_wantpacket((connp), (ira), (ipha)))
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   558
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   559
#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
   560
	((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
   561
	(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
   562
	(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
   563
	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
   564
	(conn_wantpacket_v6((connp), (ira), (ip6h))))
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   565
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   566
#define	IPCL_CONN_HASH(src, ports, ipst)				\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   567
	((unsigned)(ntohl((src)) ^ ((ports) >> 24) ^ ((ports) >> 16) ^	\
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   568
	((ports) >> 8) ^ (ports)) % (ipst)->ips_ipcl_conn_fanout_size)
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   569
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   570
#define	IPCL_CONN_HASH_V6(src, ports, ipst)				\
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   571
	IPCL_CONN_HASH(V4_PART_OF_V6((src)), (ports), (ipst))
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   572
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   573
#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
   574
	((connp)->conn_proto == (proto) &&				\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   575
		(connp)->conn_ports == (ports) &&      			\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   576
		_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
   577
		_IPCL_V4_MATCH((connp)->conn_laddr_v6, (dst)) &&	\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   578
		!(connp)->conn_ipv6_v6only)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   579
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   580
#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
   581
	((connp)->conn_proto == (proto) &&				\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   582
		(connp)->conn_ports == (ports) &&      			\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   583
		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
   584
		IN6_ARE_ADDR_EQUAL(&(connp)->conn_laddr_v6, &(dst)))
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   585
1503
9c3595b79c0d 6376992 IP Classifier hash function for UDP is broken, causing poor UDP performance when using many ports
ericheng
parents: 1216
diff changeset
   586
#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
   587
	((((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
   588
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   589
#define	IPCL_BIND_HASH(lport, ipst)					\
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   590
	((unsigned)(((lport) >> 8) ^ (lport)) % \
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   591
	    (ipst)->ips_ipcl_bind_fanout_size)
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   592
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   593
#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
   594
	((connp)->conn_proto == (proto) &&				\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   595
		(connp)->conn_lport == (lport) &&			\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   596
		(_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
   597
		_IPCL_V4_MATCH((connp)->conn_laddr_v6, (laddr))) &&	\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   598
		!(connp)->conn_ipv6_v6only)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   599
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   600
#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
   601
	((connp)->conn_proto == (proto) &&				\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   602
		(connp)->conn_lport == (lport) &&			\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   603
		(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
   604
		IN6_IS_ADDR_UNSPECIFIED(&(connp)->conn_laddr_v6)))
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   605
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   606
/*
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   607
 * 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
   608
 * a multicast or broadcast address.
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   609
 * 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
   610
 * 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
   611
 */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   612
#define	IPCL_UDP_MATCH(connp, lport, laddr, fport, faddr)		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   613
	(((connp)->conn_lport == (lport)) &&				\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   614
	((_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
   615
	(_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
   616
	(_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
   617
	(_IPCL_V4_MATCH((connp)->conn_faddr_v6, (faddr)) &&		\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   618
	(connp)->conn_fport == (fport)))))) &&				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   619
	!(connp)->conn_ipv6_v6only)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   620
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   621
/*
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   622
 * 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
   623
 * a multicast or broadcast address.
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   624
 * 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
   625
 * 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
   626
 */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   627
#define	IPCL_UDP_MATCH_V6(connp, lport, laddr, fport, faddr)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   628
	(((connp)->conn_lport == (lport)) &&			\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   629
	(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
   630
	(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
   631
	(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
   632
	(IN6_ARE_ADDR_EQUAL(&(connp)->conn_faddr_v6, &(faddr)) &&	\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   633
	(connp)->conn_fport == (fport))))))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   634
10616
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   635
#define	IPCL_IPTUN_HASH(laddr, faddr)					\
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   636
	((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
   637
	ipcl_iptun_fanout_size)
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   638
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   639
#define	IPCL_IPTUN_HASH_V6(laddr, faddr)				\
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   640
	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
   641
	    (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
   642
	    (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
   643
	    (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
   644
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   645
#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
   646
	(_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
   647
	_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
   648
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   649
#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
   650
	(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
   651
	IN6_ARE_ADDR_EQUAL(&(connp)->conn_faddr_v6, (faddr)))
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   652
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   653
#define	IPCL_UDP_HASH(lport, ipst)	\
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   654
	IPCL_PORT_HASH(lport, (ipst)->ips_ipcl_udp_fanout_size)
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   655
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   656
#define	CONN_G_HASH_SIZE	1024
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   657
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   658
/* Raw socket hash function. */
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   659
#define	IPCL_RAW_HASH(lport, ipst)	\
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   660
	IPCL_PORT_HASH(lport, (ipst)->ips_ipcl_raw_fanout_size)
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   661
409
22012dc8ea5b 6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents: 0
diff changeset
   662
/*
22012dc8ea5b 6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents: 0
diff changeset
   663
 * 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
   664
 * 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
   665
 * 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
   666
 * 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
   667
 */
22012dc8ea5b 6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents: 0
diff changeset
   668
#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
   669
	((connp)->conn_proto == (proto) &&			\
409
22012dc8ea5b 6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents: 0
diff changeset
   670
	(connp)->conn_lport == 0 &&				\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   671
	(_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
   672
	_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
   673
22012dc8ea5b 6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents: 0
diff changeset
   674
#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
   675
	((connp)->conn_proto == (proto) &&			\
409
22012dc8ea5b 6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents: 0
diff changeset
   676
	(connp)->conn_lport == 0 &&				\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   677
	(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
   678
	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
   679
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   680
/* Function prototypes */
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   681
extern void ipcl_g_init(void);
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   682
extern void ipcl_init(ip_stack_t *);
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   683
extern void ipcl_g_destroy(void);
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   684
extern void ipcl_destroy(ip_stack_t *);
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   685
extern conn_t *ipcl_conn_create(uint32_t, int, netstack_t *);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   686
extern void ipcl_conn_destroy(conn_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   687
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   688
void ipcl_hash_insert_wildcard(connf_t *, conn_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   689
void ipcl_hash_remove(conn_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   690
void ipcl_hash_remove_locked(conn_t *connp, connf_t *connfp);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   691
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   692
extern int	ipcl_bind_insert(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_v4(conn_t *);
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   694
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
   695
extern int	ipcl_conn_insert(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_v4(conn_t *);
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   697
extern int	ipcl_conn_insert_v6(conn_t *);
741
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 409
diff changeset
   698
extern conn_t	*ipcl_get_next_conn(connf_t *, conn_t *, uint32_t);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   699
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   700
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
   701
	    ip_stack_t *);
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   702
conn_t *ipcl_classify_v6(mblk_t *, uint8_t, uint_t, ip_recv_attr_t *,
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   703
	    ip_stack_t *);
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   704
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
   705
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
   706
    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
   707
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
   708
conn_t *ipcl_iptun_classify_v6(in6_addr_t *, in6_addr_t *, ip_stack_t *);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   709
void	ipcl_globalhash_insert(conn_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   710
void	ipcl_globalhash_remove(conn_t *);
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   711
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
   712
conn_t	*ipcl_tcp_lookup_reversed_ipv4(ipha_t *, tcpha_t *, int, ip_stack_t *);
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   713
conn_t	*ipcl_tcp_lookup_reversed_ipv6(ip6_t *, tcpha_t *, int, uint_t,
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   714
	    ip_stack_t *);
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   715
conn_t	*ipcl_lookup_listener_v4(uint16_t, ipaddr_t, zoneid_t, ip_stack_t *);
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   716
conn_t	*ipcl_lookup_listener_v6(uint16_t, in6_addr_t *, uint_t, zoneid_t,
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   717
	    ip_stack_t *);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   718
int	conn_trace_ref(conn_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   719
int	conn_untrace_ref(conn_t *);
5240
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   720
void	ipcl_conn_cleanup(conn_t *);
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   721
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
   722
    mblk_t *, ip_pkt_t *);
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   723
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
   724
    ip_pkt_t *, uchar_t *, uint_t);
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   725
conn_t *ipcl_conn_tcp_lookup_reversed_ipv4(conn_t *, ipha_t *, tcpha_t *,
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   726
	    ip_stack_t *);
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   727
conn_t *ipcl_conn_tcp_lookup_reversed_ipv6(conn_t *, ip6_t *, tcpha_t *,
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   728
	    ip_stack_t *);
8348
4137e18bfaf0 PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents: 8275
diff changeset
   729
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   730
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
   731
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
   732
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
   733
    cred_t *, boolean_t);
8348
4137e18bfaf0 PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents: 8275
diff changeset
   734
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   735
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   736
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   737
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   738
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   739
#endif	/* _INET_IPCLASSIFIER_H */