usr/src/uts/common/inet/ipclassifier.h
author Cathy Zhou <Cathy.Zhou@Sun.COM>
Tue, 17 Nov 2009 09:17:48 -0800
changeset 11076 445f05f9f7b4
parent 11042 2d6e217af1b4
child 11375 a79c98ae9bbe
permissions -rw-r--r--
PSARC/2008/693 VRRP PSARC/2009/388 VRRP Update 6288572 RFE: VRRP implementation desired for Solaris
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
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   448
#ifdef CONN_DEBUG
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   449
#define	CONN_TRACE_MAX	10
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   450
	int		conn_trace_last;	/* ndx of last used tracebuf */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   451
	conn_trace_t	conn_trace_buf[CONN_TRACE_MAX];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   452
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   453
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   454
8778
b4169d2ab299 PSARC 2007/670 db_credp update
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 8485
diff changeset
   455
/*
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   456
 * connf_t - connection fanout data.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   457
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   458
 * The hash tables and their linkage (conn_t.{hashnextp, hashprevp} are
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   459
 * protected by the per-bucket lock. Each conn_t inserted in the list
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   460
 * points back at the connf_t that heads the bucket.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   461
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   462
struct connf_s {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   463
	struct conn_s	*connf_head;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   464
	kmutex_t	connf_lock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   465
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   466
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   467
#define	CONN_INC_REF(connp)	{				\
3104
fba3fdffbc25 6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents: 3055
diff changeset
   468
	mutex_enter(&(connp)->conn_lock);			\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   469
	DTRACE_PROBE1(conn__inc__ref, conn_t *, connp);		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   470
	ASSERT(conn_trace_ref(connp));				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   471
	(connp)->conn_ref++;					\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   472
	ASSERT((connp)->conn_ref != 0);				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   473
	mutex_exit(&(connp)->conn_lock);			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   474
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   475
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   476
#define	CONN_INC_REF_LOCKED(connp)	{			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   477
	DTRACE_PROBE1(conn__inc__ref, conn_t *, connp);		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   478
	ASSERT(MUTEX_HELD(&(connp)->conn_lock));	 	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   479
	ASSERT(conn_trace_ref(connp));				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   480
	(connp)->conn_ref++;					\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   481
	ASSERT((connp)->conn_ref != 0);				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   482
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   483
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   484
#define	CONN_DEC_REF(connp)	{					\
3104
fba3fdffbc25 6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents: 3055
diff changeset
   485
	mutex_enter(&(connp)->conn_lock);				\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   486
	DTRACE_PROBE1(conn__dec__ref, conn_t *, connp);			\
3104
fba3fdffbc25 6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents: 3055
diff changeset
   487
	/*								\
fba3fdffbc25 6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents: 3055
diff changeset
   488
	 * The squeue framework always does a CONN_DEC_REF after return	\
fba3fdffbc25 6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents: 3055
diff changeset
   489
	 * from TCP. Hence the refcnt must be at least 2 if conn_on_sqp	\
fba3fdffbc25 6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents: 3055
diff changeset
   490
	 * is B_TRUE and conn_ref is being decremented. This is to	\
fba3fdffbc25 6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents: 3055
diff changeset
   491
	 * account for the mblk being currently processed.		\
fba3fdffbc25 6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents: 3055
diff changeset
   492
	 */								\
10616
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   493
	if ((connp)->conn_ref == 0 ||					\
3104
fba3fdffbc25 6265494 assertion failed: sqp != NULL, file: ../../common/inet/squeue.c, line: 715
jprakash
parents: 3055
diff changeset
   494
	    ((connp)->conn_ref == 1 && (connp)->conn_on_sqp))		\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   495
		cmn_err(CE_PANIC, "CONN_DEC_REF: connp(%p) has ref "	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   496
			"= %d\n", (void *)(connp), (connp)->conn_ref);	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   497
	ASSERT(conn_untrace_ref(connp));				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   498
	(connp)->conn_ref--;						\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   499
	if ((connp)->conn_ref == 0) {					\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   500
		/* Refcnt can't increase again, safe to drop lock */	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   501
		mutex_exit(&(connp)->conn_lock);			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   502
		ipcl_conn_destroy(connp);				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   503
	} else {							\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   504
		cv_broadcast(&(connp)->conn_cv);			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   505
		mutex_exit(&(connp)->conn_lock);			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   506
	}								\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   507
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   508
2263
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   509
/*
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   510
 * For use with subsystems within ip which use ALL_ZONES as a wildcard
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   511
 */
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   512
#define	IPCL_ZONEID(connp)						\
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   513
	((connp)->conn_allzones ? ALL_ZONES : (connp)->conn_zoneid)
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   514
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   515
/*
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   516
 * For matching between a conn_t and a zoneid.
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   517
 */
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   518
#define	IPCL_ZONE_MATCH(connp, zoneid) 					\
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   519
	(((connp)->conn_allzones) ||					\
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   520
	    ((zoneid) == ALL_ZONES) ||					\
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   521
	    (connp)->conn_zoneid == (zoneid))
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   522
10934
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   523
/*
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   524
 * On a labeled system, we must treat bindings to ports
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   525
 * on shared IP addresses by sockets with MAC exemption
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   526
 * privilege as being in all zones, as there's
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   527
 * otherwise no way to identify the right receiver.
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   528
 */
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   529
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   530
#define	IPCL_CONNS_MAC(conn1, conn2)					\
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   531
	(((conn1)->conn_mac_mode != CONN_MAC_DEFAULT) ||		\
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   532
	((conn2)->conn_mac_mode != CONN_MAC_DEFAULT))
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   533
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   534
#define	IPCL_BIND_ZONE_MATCH(conn1, conn2)				\
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   535
	(IPCL_CONNS_MAC(conn1, conn2) ||				\
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   536
	IPCL_ZONE_MATCH(conn1, conn2->conn_zoneid) ||			\
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   537
	IPCL_ZONE_MATCH(conn2, conn1->conn_zoneid))
e209937a4f19 PSARC/2008/252 Labeled IPsec phase 1
Bill Sommerfeld <sommerfeld@sun.com>
parents: 10616
diff changeset
   538
2263
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   539
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   540
#define	_IPCL_V4_MATCH(v6addr, v4addr)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   541
	(V4_PART_OF_V6((v6addr)) == (v4addr) && IN6_IS_ADDR_V4MAPPED(&(v6addr)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   542
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   543
#define	_IPCL_V4_MATCH_ANY(addr)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   544
	(IN6_IS_ADDR_V4MAPPED_ANY(&(addr)) || IN6_IS_ADDR_UNSPECIFIED(&(addr)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   545
2263
fd48046384d0 PSARC 2006/073 PF_ROUTE: Include interface name with RTM_NEWADDR/RTM_DELADDR
sommerfe
parents: 1676
diff changeset
   546
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   547
/*
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   548
 * IPCL_PROTO_MATCH() and IPCL_PROTO_MATCH_V6() only matches conns with
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   549
 * the specified ira_zoneid or conn_allzones by calling conn_wantpacket.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   550
 */
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   551
#define	IPCL_PROTO_MATCH(connp, ira, ipha)				\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   552
	((((connp)->conn_laddr_v4 == INADDR_ANY) ||			\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   553
	(((connp)->conn_laddr_v4 == ((ipha)->ipha_dst)) &&		\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   554
	    (((connp)->conn_faddr_v4 == INADDR_ANY) ||			\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   555
	((connp)->conn_faddr_v4 == ((ipha)->ipha_src))))) &&		\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   556
	conn_wantpacket((connp), (ira), (ipha)))
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   557
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   558
#define	IPCL_PROTO_MATCH_V6(connp, ira, ip6h)				\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   559
	((IN6_IS_ADDR_UNSPECIFIED(&(connp)->conn_laddr_v6) ||		\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   560
	(IN6_ARE_ADDR_EQUAL(&(connp)->conn_laddr_v6, &((ip6h)->ip6_dst)) &&   \
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   561
	(IN6_IS_ADDR_UNSPECIFIED(&(connp)->conn_faddr_v6) ||		      \
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   562
	IN6_ARE_ADDR_EQUAL(&(connp)->conn_faddr_v6, &((ip6h)->ip6_src))))) && \
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   563
	(conn_wantpacket_v6((connp), (ira), (ip6h))))
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   564
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   565
#define	IPCL_CONN_HASH(src, ports, ipst)				\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   566
	((unsigned)(ntohl((src)) ^ ((ports) >> 24) ^ ((ports) >> 16) ^	\
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   567
	((ports) >> 8) ^ (ports)) % (ipst)->ips_ipcl_conn_fanout_size)
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   568
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   569
#define	IPCL_CONN_HASH_V6(src, ports, ipst)				\
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   570
	IPCL_CONN_HASH(V4_PART_OF_V6((src)), (ports), (ipst))
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   571
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   572
#define	IPCL_CONN_MATCH(connp, proto, src, dst, ports)			\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   573
	((connp)->conn_proto == (proto) &&				\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   574
		(connp)->conn_ports == (ports) &&      			\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   575
		_IPCL_V4_MATCH((connp)->conn_faddr_v6, (src)) &&	\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   576
		_IPCL_V4_MATCH((connp)->conn_laddr_v6, (dst)) &&	\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   577
		!(connp)->conn_ipv6_v6only)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   578
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   579
#define	IPCL_CONN_MATCH_V6(connp, proto, src, dst, ports)		\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   580
	((connp)->conn_proto == (proto) &&				\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   581
		(connp)->conn_ports == (ports) &&      			\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   582
		IN6_ARE_ADDR_EQUAL(&(connp)->conn_faddr_v6, &(src)) &&	\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   583
		IN6_ARE_ADDR_EQUAL(&(connp)->conn_laddr_v6, &(dst)))
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   584
1503
9c3595b79c0d 6376992 IP Classifier hash function for UDP is broken, causing poor UDP performance when using many ports
ericheng
parents: 1216
diff changeset
   585
#define	IPCL_PORT_HASH(port, size) \
9c3595b79c0d 6376992 IP Classifier hash function for UDP is broken, causing poor UDP performance when using many ports
ericheng
parents: 1216
diff changeset
   586
	((((port) >> 8) ^ (port)) & ((size) - 1))
9c3595b79c0d 6376992 IP Classifier hash function for UDP is broken, causing poor UDP performance when using many ports
ericheng
parents: 1216
diff changeset
   587
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   588
#define	IPCL_BIND_HASH(lport, ipst)					\
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   589
	((unsigned)(((lport) >> 8) ^ (lport)) % \
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   590
	    (ipst)->ips_ipcl_bind_fanout_size)
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   591
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   592
#define	IPCL_BIND_MATCH(connp, proto, laddr, lport)			\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   593
	((connp)->conn_proto == (proto) &&				\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   594
		(connp)->conn_lport == (lport) &&			\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   595
		(_IPCL_V4_MATCH_ANY((connp)->conn_laddr_v6) ||		\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   596
		_IPCL_V4_MATCH((connp)->conn_laddr_v6, (laddr))) &&	\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   597
		!(connp)->conn_ipv6_v6only)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   598
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   599
#define	IPCL_BIND_MATCH_V6(connp, proto, laddr, lport)			\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   600
	((connp)->conn_proto == (proto) &&				\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   601
		(connp)->conn_lport == (lport) &&			\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   602
		(IN6_ARE_ADDR_EQUAL(&(connp)->conn_laddr_v6, &(laddr)) || \
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   603
		IN6_IS_ADDR_UNSPECIFIED(&(connp)->conn_laddr_v6)))
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   604
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   605
/*
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   606
 * We compare conn_laddr since it captures both connected and a bind to
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   607
 * a multicast or broadcast address.
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   608
 * The caller needs to match the zoneid and also call conn_wantpacket
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   609
 * for multicast, broadcast, or when conn_incoming_ifindex is set.
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   610
 */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   611
#define	IPCL_UDP_MATCH(connp, lport, laddr, fport, faddr)		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   612
	(((connp)->conn_lport == (lport)) &&				\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   613
	((_IPCL_V4_MATCH_ANY((connp)->conn_laddr_v6) ||			\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   614
	(_IPCL_V4_MATCH((connp)->conn_laddr_v6, (laddr)) &&		\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   615
	(_IPCL_V4_MATCH_ANY((connp)->conn_faddr_v6) ||			\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   616
	(_IPCL_V4_MATCH((connp)->conn_faddr_v6, (faddr)) &&		\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   617
	(connp)->conn_fport == (fport)))))) &&				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   618
	!(connp)->conn_ipv6_v6only)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   619
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   620
/*
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   621
 * We compare conn_laddr since it captures both connected and a bind to
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   622
 * a multicast or broadcast address.
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   623
 * The caller needs to match the zoneid and also call conn_wantpacket_v6
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   624
 * for multicast or when conn_incoming_ifindex is set.
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   625
 */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   626
#define	IPCL_UDP_MATCH_V6(connp, lport, laddr, fport, faddr)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   627
	(((connp)->conn_lport == (lport)) &&			\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   628
	(IN6_IS_ADDR_UNSPECIFIED(&(connp)->conn_laddr_v6) ||	\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   629
	(IN6_ARE_ADDR_EQUAL(&(connp)->conn_laddr_v6, &(laddr)) &&	\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   630
	(IN6_IS_ADDR_UNSPECIFIED(&(connp)->conn_faddr_v6) ||	\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   631
	(IN6_ARE_ADDR_EQUAL(&(connp)->conn_faddr_v6, &(faddr)) &&	\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   632
	(connp)->conn_fport == (fport))))))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   633
10616
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   634
#define	IPCL_IPTUN_HASH(laddr, faddr)					\
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   635
	((ntohl(laddr) ^ ((ntohl(faddr) << 24) | (ntohl(faddr) >> 8))) % \
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   636
	ipcl_iptun_fanout_size)
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   637
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   638
#define	IPCL_IPTUN_HASH_V6(laddr, faddr)				\
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   639
	IPCL_IPTUN_HASH((laddr)->s6_addr32[0] ^ (laddr)->s6_addr32[1] ^	\
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   640
	    (faddr)->s6_addr32[2] ^ (faddr)->s6_addr32[3],		\
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   641
	    (faddr)->s6_addr32[0] ^ (faddr)->s6_addr32[1] ^		\
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   642
	    (laddr)->s6_addr32[2] ^ (laddr)->s6_addr32[3])
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   643
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   644
#define	IPCL_IPTUN_MATCH(connp, laddr, faddr)			\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   645
	(_IPCL_V4_MATCH((connp)->conn_laddr_v6, (laddr)) &&	\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   646
	_IPCL_V4_MATCH((connp)->conn_faddr_v6, (faddr)))
10616
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   647
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   648
#define	IPCL_IPTUN_MATCH_V6(connp, laddr, faddr)		\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   649
	(IN6_ARE_ADDR_EQUAL(&(connp)->conn_laddr_v6, (laddr)) &&	\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   650
	IN6_ARE_ADDR_EQUAL(&(connp)->conn_faddr_v6, (faddr)))
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   651
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   652
#define	IPCL_UDP_HASH(lport, ipst)	\
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   653
	IPCL_PORT_HASH(lport, (ipst)->ips_ipcl_udp_fanout_size)
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   654
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   655
#define	CONN_G_HASH_SIZE	1024
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   656
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   657
/* Raw socket hash function. */
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   658
#define	IPCL_RAW_HASH(lport, ipst)	\
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   659
	IPCL_PORT_HASH(lport, (ipst)->ips_ipcl_raw_fanout_size)
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   660
409
22012dc8ea5b 6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents: 0
diff changeset
   661
/*
22012dc8ea5b 6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents: 0
diff changeset
   662
 * This is similar to IPCL_BIND_MATCH except that the local port check
22012dc8ea5b 6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents: 0
diff changeset
   663
 * is changed to a wildcard port check.
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   664
 * We compare conn_laddr since it captures both connected and a bind to
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   665
 * a multicast or broadcast address.
409
22012dc8ea5b 6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents: 0
diff changeset
   666
 */
22012dc8ea5b 6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents: 0
diff changeset
   667
#define	IPCL_RAW_MATCH(connp, proto, laddr)			\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   668
	((connp)->conn_proto == (proto) &&			\
409
22012dc8ea5b 6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents: 0
diff changeset
   669
	(connp)->conn_lport == 0 &&				\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   670
	(_IPCL_V4_MATCH_ANY((connp)->conn_laddr_v6) ||		\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   671
	_IPCL_V4_MATCH((connp)->conn_laddr_v6, (laddr))))
409
22012dc8ea5b 6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents: 0
diff changeset
   672
22012dc8ea5b 6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents: 0
diff changeset
   673
#define	IPCL_RAW_MATCH_V6(connp, proto, laddr)			\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   674
	((connp)->conn_proto == (proto) &&			\
409
22012dc8ea5b 6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents: 0
diff changeset
   675
	(connp)->conn_lport == 0 &&				\
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   676
	(IN6_IS_ADDR_UNSPECIFIED(&(connp)->conn_laddr_v6) ||	\
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   677
	IN6_ARE_ADDR_EQUAL(&(connp)->conn_laddr_v6, &(laddr))))
409
22012dc8ea5b 6294727 SCTP raw socket bind() failed for ports which are mutliples of 256
kcpoon
parents: 0
diff changeset
   678
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   679
/* Function prototypes */
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   680
extern void ipcl_g_init(void);
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   681
extern void ipcl_init(ip_stack_t *);
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   682
extern void ipcl_g_destroy(void);
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   683
extern void ipcl_destroy(ip_stack_t *);
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   684
extern conn_t *ipcl_conn_create(uint32_t, int, netstack_t *);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   685
extern void ipcl_conn_destroy(conn_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   686
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   687
void ipcl_hash_insert_wildcard(connf_t *, conn_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   688
void ipcl_hash_remove(conn_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   689
void ipcl_hash_remove_locked(conn_t *connp, connf_t *connfp);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   690
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   691
extern int	ipcl_bind_insert(conn_t *);
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   692
extern int	ipcl_bind_insert_v4(conn_t *);
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   693
extern int	ipcl_bind_insert_v6(conn_t *);
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   694
extern int	ipcl_conn_insert(conn_t *);
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   695
extern int	ipcl_conn_insert_v4(conn_t *);
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   696
extern int	ipcl_conn_insert_v6(conn_t *);
741
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 409
diff changeset
   697
extern conn_t	*ipcl_get_next_conn(connf_t *, conn_t *, uint32_t);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   698
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   699
conn_t *ipcl_classify_v4(mblk_t *, uint8_t, uint_t, ip_recv_attr_t *,
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   700
	    ip_stack_t *);
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   701
conn_t *ipcl_classify_v6(mblk_t *, uint8_t, uint_t, ip_recv_attr_t *,
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   702
	    ip_stack_t *);
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   703
conn_t *ipcl_classify(mblk_t *, ip_recv_attr_t *, ip_stack_t *);
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   704
conn_t *ipcl_classify_raw(mblk_t *, uint8_t, uint32_t, ipha_t *,
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   705
    ip6_t *, ip_recv_attr_t *, ip_stack_t *);
10616
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   706
conn_t *ipcl_iptun_classify_v4(ipaddr_t *, ipaddr_t *, ip_stack_t *);
3be00c4a6835 PSARC 2009/373 Clearview IP Tunneling
Sebastien Roy <Sebastien.Roy@Sun.COM>
parents: 9710
diff changeset
   707
conn_t *ipcl_iptun_classify_v6(in6_addr_t *, in6_addr_t *, ip_stack_t *);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   708
void	ipcl_globalhash_insert(conn_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   709
void	ipcl_globalhash_remove(conn_t *);
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   710
void	ipcl_walk(pfv_t, void *, ip_stack_t *);
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   711
conn_t	*ipcl_tcp_lookup_reversed_ipv4(ipha_t *, tcpha_t *, int, ip_stack_t *);
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   712
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
   713
	    ip_stack_t *);
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   714
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
   715
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
   716
	    ip_stack_t *);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   717
int	conn_trace_ref(conn_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   718
int	conn_untrace_ref(conn_t *);
5240
e7599510dd03 6595449 IP streams plumbing simpification
nordmark
parents: 5023
diff changeset
   719
void	ipcl_conn_cleanup(conn_t *);
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   720
extern uint_t	conn_recvancillary_size(conn_t *, crb_t, ip_recv_attr_t *,
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   721
    mblk_t *, ip_pkt_t *);
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   722
extern void	conn_recvancillary_add(conn_t *, crb_t, ip_recv_attr_t *,
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   723
    ip_pkt_t *, uchar_t *, uint_t);
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   724
conn_t *ipcl_conn_tcp_lookup_reversed_ipv4(conn_t *, ipha_t *, tcpha_t *,
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   725
	    ip_stack_t *);
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   726
conn_t *ipcl_conn_tcp_lookup_reversed_ipv6(conn_t *, ip6_t *, tcpha_t *,
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3318
diff changeset
   727
	    ip_stack_t *);
8348
4137e18bfaf0 PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents: 8275
diff changeset
   728
11042
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   729
extern int ip_create_helper_stream(conn_t *, ldi_ident_t);
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   730
extern void ip_free_helper_stream(conn_t *);
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   731
extern int	ip_helper_stream_setup(queue_t *, dev_t *, int, int,
2d6e217af1b4 PSARC/2009/331 IP Datapath Refactoring
Erik Nordmark <Erik.Nordmark@Sun.COM>
parents: 10934
diff changeset
   732
    cred_t *, boolean_t);
8348
4137e18bfaf0 PSARC 2007/587 Volo -- Low Latency Socket Framework
Yu Xiangning<Eric.Yu@Sun.COM>
parents: 8275
diff changeset
   733
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   734
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   735
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   736
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   737
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   738
#endif	/* _INET_IPCLASSIFIER_H */