usr/src/uts/common/sys/socketvar.h
author masputra
Sat, 22 Oct 2005 22:50:14 -0700
changeset 741 40027a3621ac
parent 0 68f95e015346
child 898 64b2a371a6bd
permissions -rw-r--r--
PSARC 2005/082 Yosemite: UDP Performance Enhancement 4796051 Solaris needs a more complete HW checksumming support 4905227 duplicate macros in ipclassifier.h and ip.h 4915681 need hardware checksum offload for the case of IP/UDP reassembly 6201076 outbound flow-control dysfunctional, ip to ce using mdt 6223331 ipv6 flow control may corrupt UDP packets 6223809 16-bit aligned IP header should be allowed for all x86 platforms 6275398 Galaxy hangs when running lmbench 6281836 Yosemite project integration into Solaris 6281885 xge needs to support IPv6 checksum offload 6282776 IPv6 NCE fast path is not created for incoming solicitation 6304890 IP transmit-side checksum logic needs to be tightened 6304902 IP6_IN_NOCKSUM is obsolete and should be torched 6304904 UDP should reject TI_GETPEERNAME for non-connected endpoint 6306768 IP and UDP device and module definitions need to be centralized
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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     5
 * Common Development and Distribution License, Version 1.0 only
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     6
 * (the "License").  You may not use this file except in compliance
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 * with the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    22
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
/*	Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
/*	  All Rights Reserved  	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
 * University Copyright- Copyright (c) 1982, 1986, 1988
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
 * The Regents of the University of California
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
 * All Rights Reserved
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
 * University Acknowledgment- Portions of this document are derived from
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
 * software developed by the University of California, Berkeley, and its
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
 * contributors.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
#ifndef _SYS_SOCKETVAR_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
#define	_SYS_SOCKETVAR_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
#pragma ident	"%Z%%M%	%I%	%E% SMI"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
#include <sys/types.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
#include <sys/stream.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
#include <sys/t_lock.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
#include <sys/cred.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
#include <sys/vnode.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
#include <sys/file.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
#include <sys/param.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
#include <sys/zone.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
extern "C" {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
 * Internal representation used for addresses.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
struct soaddr {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
	struct sockaddr	*soa_sa;	/* Actual address */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
	t_uscalar_t	soa_len;	/* Length in bytes for kmem_free */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
	t_uscalar_t	soa_maxlen;	/* Allocated length */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
/* Maximum size address for transports that have ADDR_size == 1 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
#define	SOA_DEFSIZE	128
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
 * Internal representation of the address used to represent addresses
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
 * in the loopback transport for AF_UNIX. While the sockaddr_un is used
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
 * as the sockfs layer address for AF_UNIX the pathnames contained in
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
 * these addresses are not unique (due to relative pathnames) thus can not
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
 * be used in the transport.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
 * The transport level address consists of a magic number (used to separate the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
 * name space for specific and implicit binds). For a specific bind
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
 * this is followed by a "vnode *" which ensures that all specific binds
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
 * have a unique transport level address. For implicit binds the latter
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
 * part of the address is a byte string (of the same length as a pointer)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
 * that is assigned by the loopback transport.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
 * The uniqueness assumes that the loopback transport has a separate namespace
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
 * for sockets in order to avoid name conflicts with e.g. TLI use of the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
 * same transport.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
struct so_ux_addr {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
	void	*soua_vp;	/* vnode pointer or assigned by tl */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
	uint_t	soua_magic;	/* See below */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
#define	SOU_MAGIC_EXPLICIT	0x75787670	/* "uxvp" */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
#define	SOU_MAGIC_IMPLICIT	0x616e6f6e	/* "anon" */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
struct sockaddr_ux {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
	sa_family_t		sou_family;	/* AF_UNIX */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
	struct so_ux_addr	sou_addr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
typedef struct sonodeops sonodeops_t;
741
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 0
diff changeset
   103
typedef struct sonode sonode_t;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
 * The sonode represents a socket. A sonode never exist in the file system
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
 * name space and can not be opened using open() - only the socket, socketpair
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
 * and accept calls create sonodes.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
 * When an AF_UNIX socket is bound to a pathname the sockfs
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
 * creates a VSOCK vnode in the underlying file system. However, the vnodeops
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
 * etc in this VNODE remain those of the underlying file system.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
 * Sockfs uses the v_stream pointer in the underlying file system VSOCK node
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
 * to find the sonode bound to the pathname. The bound pathname vnode
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
 * is accessed through so_ux_vp.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
 * A socket always corresponds to a VCHR stream representing the transport
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
 * provider (e.g. /dev/tcp). This information is retrieved from the kernel
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
 * socket configuration table and entered into so_accessvp. sockfs uses
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
 * this to perform VOP_ACCESS checks before allowing an open of the transport
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
 * provider.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
 * The locking of sockfs uses the so_lock mutex plus the SOLOCKED
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
 * and SOREADLOCKED flags in so_flag. The mutex protects all the state
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
 * in the sonode. The SOLOCKED flag is used to single-thread operations from
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
 * sockfs users to prevent e.g. multiple bind() calls to operate on the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
 * same sonode concurrently. The SOREADLOCKED flag is used to ensure that
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
 * only one thread sleeps in kstrgetmsg for a given sonode. This is needed
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
 * to ensure atomic operation for things like MSG_WAITALL.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
 * Note that so_lock is sometimes held across calls that might go to sleep
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
 * (kmem_alloc and soallocproto*). This implies that no other lock in
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
 * the system should be held when calling into sockfs; from the system call
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
 * side or from strrput. If locks are held while calling into sockfs
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
 * the system might hang when running low on memory.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
struct sonode {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
	struct	vnode	*so_vnode;	/* vnode associated with this sonode */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
	sonodeops_t	*so_ops;	/* operations vector for this sonode */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
	 * These fields are initialized once.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
	dev_t		so_dev;		/* device the sonode represents */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
	struct	vnode	*so_accessvp;	/* vnode for the /dev entry */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
	/* The locks themselves */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
	kmutex_t	so_lock;	/* protects sonode fields */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
	kmutex_t	so_plumb_lock;	/* serializes plumbs, and the related */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
					/* fields so_version and so_pushcnt */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
	kcondvar_t	so_state_cv;	/* synchronize state changes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
	kcondvar_t	so_ack_cv;	/* wait for TPI acks */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
	kcondvar_t	so_connind_cv;	/* wait for T_CONN_IND */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
	kcondvar_t	so_want_cv;	/* wait due to SOLOCKED */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
	/* These fields are protected by so_lock */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
	uint_t	so_state;		/* internal state flags SS_*, below */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
	uint_t	so_mode;		/* characteristics on socket. SM_* */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
	mblk_t	*so_ack_mp;		/* TPI ack received from below */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
	mblk_t	*so_conn_ind_head;	/* b_next list of T_CONN_IND */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
	mblk_t	*so_conn_ind_tail;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
	mblk_t	*so_unbind_mp;		/* Preallocated T_UNBIND_REQ message */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
	ushort_t so_flag;		/* flags, see below */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
	dev_t	so_fsid;		/* file system identifier */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
	time_t  so_atime;		/* time of last access */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
	time_t  so_mtime;		/* time of last modification */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
	time_t  so_ctime;		/* time of last attributes change */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
	int	so_count;		/* count of opened references */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
	/* Needed to recreate the same socket for accept */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
	short	so_family;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
	short	so_type;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
	short	so_protocol;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
	short	so_version;		/* From so_socket call */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
	short	so_pushcnt;		/* Number of modules above "sockmod" */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
	/* Options */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
	short	so_options;		/* From socket call, see socket.h */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
	struct linger	so_linger;	/* SO_LINGER value */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
	int	so_sndbuf;		/* SO_SNDBUF value */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
	int	so_rcvbuf;		/* SO_RCVBUF value */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
	int	so_sndlowat;		/* send low water mark */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
	int	so_rcvlowat;		/* receive low water mark */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
#ifdef notyet
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
	int	so_sndtimeo;		/* Not yet implemented */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
	int	so_rcvtimeo;		/* Not yet implemented */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
#endif /* notyet */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
	ushort_t so_error;		/* error affecting connection */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
	ushort_t so_delayed_error;	/* From T_uderror_ind */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
	int	so_backlog;		/* Listen backlog */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
	 * The counts (so_oobcnt and so_oobsigcnt) track the number of
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
	 * urgent indicates that are (logically) queued on the stream head
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
	 * read queue. The urgent data is queued on the stream head
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
	 * as follows.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
	 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
	 * In the normal case the SIGURG is not generated until
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
	 * the T_EXDATA_IND arrives at the stream head. However, transports
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
	 * that have an early indication that urgent data is pending
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
	 * (e.g. TCP receiving a "new" urgent pointer value) can send up
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
	 * an M_PCPROTO/SIGURG message to generate the signal early.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
	 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
	 * The mark is indicated by either:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
	 *  - a T_EXDATA_IND (with no M_DATA b_cont) with MSGMARK set.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
	 *    When this message is consumed by sorecvmsg the socket layer
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
	 *    sets SS_RCVATMARK until data has been consumed past the mark.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
	 *  - a message with MSGMARKNEXT set (indicating that the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   212
	 *    first byte of the next message constitutes the mark). When
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
	 *    the last byte of the MSGMARKNEXT message is consumed in
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
	 *    the stream head the stream head sets STRATMARK. This flag
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
	 *    is cleared when at least one byte is read. (Note that
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
	 *    the MSGMARKNEXT messages can be of zero length when there
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
	 *    is no previous data to which the marknext can be attached.)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
	 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
	 * While the T_EXDATA_IND method is the common case which is used
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
	 * with all TPI transports, the MSGMARKNEXT method is needed to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   221
	 * indicate the mark when e.g. the TCP urgent byte has not been
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   222
	 * received yet but the TCP urgent pointer has made TCP generate
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   223
	 * the M_PCSIG/SIGURG.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   224
	 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   225
	 * The signal (the M_PCSIG carrying the SIGURG) and the mark
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   226
	 * indication can not be delivered as a single message, since
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   227
	 * the signal should be delivered as high priority and any mark
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   228
	 * indication must flow with the data. This implies that immediately
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   229
	 * when the SIGURG has been delivered if the stream head queue is
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   230
	 * empty it is impossible to determine if this will be the position
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   231
	 * of the mark. This race condition is resolved by using MSGNOTMARKNEXT
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   232
	 * messages and the STRNOTATMARK flag in the stream head. The
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   233
	 * SIOCATMARK code calls the stream head to wait for either a
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   234
	 * non-empty queue or one of the STR*ATMARK flags being set.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   235
	 * This implies that any transport that is sending M_PCSIG(SIGURG)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   236
	 * should send the appropriate MSGNOTMARKNEXT message (which can be
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   237
	 * zero length) after sending an M_PCSIG to prevent SIOCATMARK
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   238
	 * from sleeping unnecessarily.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   239
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   240
	mblk_t	*so_oobmsg;		/* outofline oob data */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   241
	uint_t	so_oobsigcnt;		/* Number of SIGURG generated */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   242
	uint_t	so_oobcnt;		/* Number of T_EXDATA_IND queued */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   243
	pid_t	so_pgrp;		/* pgrp for signals */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   244
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   245
	/* From T_info_ack */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   246
	t_uscalar_t	so_tsdu_size;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   247
	t_uscalar_t	so_etsdu_size;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   248
	t_scalar_t	so_addr_size;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   249
	t_uscalar_t	so_opt_size;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   250
	t_uscalar_t	so_tidu_size;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   251
	t_scalar_t	so_serv_type;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   252
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   253
	/* From T_capability_ack */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   254
	t_uscalar_t	so_acceptor_id;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   255
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   256
	/* Internal provider information */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   257
	struct tpi_provinfo	*so_provinfo;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   258
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   259
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   260
	 * The local and remote addresses have multiple purposes
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   261
	 * but one of the key reasons for their existence and careful
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   262
	 * tracking in sockfs is to support getsockname and getpeername
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   263
	 * when the transport does not handle the TI_GET*NAME ioctls
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   264
	 * and caching when it does (signalled by valid bits in so_state).
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   265
	 * When all transports support the new TPI (with T_ADDR_REQ)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   266
	 * we can revisit this code.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   267
	 * The other usage of so_faddr is to keep the "connected to"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   268
	 * address for datagram sockets.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   269
	 * Finally, for AF_UNIX both local and remote addresses are used
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   270
	 * to record the sockaddr_un since we use a separate namespace
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   271
	 * in the loopback transport.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   272
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   273
	struct soaddr so_laddr;		/* Local address */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   274
	struct soaddr so_faddr;		/* Peer address */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   275
#define	so_laddr_sa	so_laddr.soa_sa
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   276
#define	so_faddr_sa	so_faddr.soa_sa
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   277
#define	so_laddr_len	so_laddr.soa_len
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   278
#define	so_faddr_len	so_faddr.soa_len
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   279
#define	so_laddr_maxlen	so_laddr.soa_maxlen
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   280
#define	so_faddr_maxlen	so_faddr.soa_maxlen
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   281
	mblk_t		*so_eaddr_mp;	/* for so_delayed_error */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   282
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   283
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   284
	 * For AF_UNIX sockets:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   285
	 * so_ux_laddr/faddr records the internal addresses used with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   286
	 * transport.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   287
	 * so_ux_vp and v_stream->sd_vnode form the cross-
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   288
	 * linkage between the underlying fs vnode corresponding to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   289
	 * the bound sockaddr_un and the socket node.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   290
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   291
	struct so_ux_addr so_ux_laddr;	/* laddr bound with the transport */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   292
	struct so_ux_addr so_ux_faddr;	/* temporary peer address */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   293
	struct vnode	*so_ux_bound_vp; /* bound AF_UNIX file system vnode */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   294
	struct sonode	*so_next;	/* next sonode on socklist	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   295
	struct sonode	*so_prev;	/* previous sonode on socklist	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   296
	mblk_t	*so_discon_ind_mp;	/* T_DISCON_IND received from below */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   297
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   298
					/* put here for delayed processing  */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   299
	void		*so_priv;	/* sonode private data */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   300
	cred_t		*so_peercred;	/* connected socket peer cred */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   301
	pid_t		so_cpid;	/* connected socket peer cached pid */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   302
	zoneid_t	so_zoneid;	/* opener's zoneid */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   303
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   304
	kmem_cache_t	*so_cache;	/* object cache of this "sonode". */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   305
	void		*so_obj;	/* object to free */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   306
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   307
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   308
	 * For NL7C sockets:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   309
	 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   310
	 * so_nl7c_flags	the NL7C state of URL processing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   311
	 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   312
	 * so_nl7c_rcv_mp	mblk_t chain of already received data to be
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   313
	 *			passed up to the app after NL7C gives up on
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   314
	 *			a socket.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   315
	 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   316
	 * so_nl7c_rcv_rval	returned rval for last mblk_t from above.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   317
	 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   318
	 * so_nl7c_uri		the URI currently being processed.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   319
	 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   320
	 * so_nl7c_rtime	URI request gethrestime_sec().
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   321
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   322
	uint64_t	so_nl7c_flags;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   323
	mblk_t		*so_nl7c_rcv_mp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   324
	int64_t		so_nl7c_rcv_rval;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   325
	void		*so_nl7c_uri;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   326
	time_t		so_nl7c_rtime;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   327
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   328
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   329
/* flags */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   330
#define	SOMOD		0x0001		/* update socket modification time */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   331
#define	SOACC		0x0002		/* update socket access time */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   332
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   333
#define	SOLOCKED	0x0010		/* use to serialize open/closes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   334
#define	SOREADLOCKED	0x0020		/* serialize kstrgetmsg calls */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   335
#define	SOWANT		0x0040		/* some process waiting on lock */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   336
#define	SOCLONE		0x0080		/* child of clone driver */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   337
#define	SOASYNC_UNBIND	0x0100		/* wait for ACK of async unbind */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   338
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   339
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   340
 * Socket state bits.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   341
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   342
#define	SS_ISCONNECTED		0x00000001 /* socket connected to a peer */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   343
#define	SS_ISCONNECTING		0x00000002 /* in process, connecting to peer */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   344
#define	SS_ISDISCONNECTING	0x00000004 /* in process of disconnecting */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   345
#define	SS_CANTSENDMORE		0x00000008 /* can't send more data to peer */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   346
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   347
#define	SS_CANTRCVMORE		0x00000010 /* can't receive more data */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   348
#define	SS_ISBOUND		0x00000020 /* socket is bound */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   349
#define	SS_NDELAY		0x00000040 /* FNDELAY non-blocking */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   350
#define	SS_NONBLOCK		0x00000080 /* O_NONBLOCK non-blocking */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   351
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   352
#define	SS_ASYNC		0x00000100 /* async i/o notify */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   353
#define	SS_ACCEPTCONN		0x00000200 /* listen done */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   354
#define	SS_HASCONNIND		0x00000400 /* T_CONN_IND for poll */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   355
#define	SS_SAVEDEOR		0x00000800 /* Saved MSG_EOR rcv side state */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   356
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   357
#define	SS_RCVATMARK		0x00001000 /* at mark on input */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   358
#define	SS_OOBPEND		0x00002000 /* OOB pending or present - poll */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   359
#define	SS_HAVEOOBDATA		0x00004000 /* OOB data present */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   360
#define	SS_HADOOBDATA		0x00008000 /* OOB data consumed */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   361
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   362
#define	SS_FADDR_NOXLATE	0x00020000 /* No xlation of faddr for AF_UNIX */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   363
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   364
#define	SS_HASDATA		0x00040000 /* NCAfs: data available */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   365
#define	SS_DONEREAD		0x00080000 /* NCAfs: all data read */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   366
#define	SS_MOREDATA		0x00100000 /* NCAfs: NCA has more data */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   367
741
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 0
diff changeset
   368
#define	SS_DIRECT		0x00200000 /* transport is directly below */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   369
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   370
#define	SS_LADDR_VALID		0x01000000	/* so_laddr valid for user */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   371
#define	SS_FADDR_VALID		0x02000000	/* so_faddr valid for user */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   372
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   373
/* Set of states when the socket can't be rebound */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   374
#define	SS_CANTREBIND	(SS_ISCONNECTED|SS_ISCONNECTING|SS_ISDISCONNECTING|\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   375
			    SS_CANTSENDMORE|SS_CANTRCVMORE|SS_ACCEPTCONN)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   376
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   377
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   378
 * Characteristics of sockets. Not changed after the socket is created.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   379
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   380
#define	SM_PRIV			0x001	/* privileged for broadcast, raw... */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   381
#define	SM_ATOMIC		0x002	/* atomic data transmission */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   382
#define	SM_ADDR			0x004	/* addresses given with messages */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   383
#define	SM_CONNREQUIRED		0x008	/* connection required by protocol */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   384
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   385
#define	SM_FDPASSING		0x010	/* passes file descriptors */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   386
#define	SM_EXDATA		0x020	/* Can handle T_EXDATA_REQ */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   387
#define	SM_OPTDATA		0x040	/* Can handle T_OPTDATA_REQ */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   388
#define	SM_BYTESTREAM		0x080	/* Byte stream - can use M_DATA */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   389
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   390
#define	SM_ACCEPTOR_ID		0x100	/* so_acceptor_id is valid */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   391
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   392
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   393
 * Socket versions. Used by the socket library when calling _so_socket().
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   394
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   395
#define	SOV_STREAM	0	/* Not a socket - just a stream */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   396
#define	SOV_DEFAULT	1	/* Select based on so_default_version */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   397
#define	SOV_SOCKSTREAM	2	/* Socket plus streams operations */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   398
#define	SOV_SOCKBSD	3	/* Socket with no streams operations */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   399
#define	SOV_XPG4_2	4	/* Xnet socket */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   400
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   401
#if defined(_KERNEL) || defined(_KMEMUSER)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   402
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   403
 * Used for mapping family/type/protocol to vnode.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   404
 * Defined here so that crash can use it.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   405
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   406
struct sockparams {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   407
	int	sp_domain;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   408
	int	sp_type;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   409
	int	sp_protocol;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   410
	char	*sp_devpath;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   411
	int	sp_devpathlen;	/* Is 0 if sp_devpath is a static string */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   412
	vnode_t	*sp_vnode;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   413
	struct sockparams *sp_next;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   414
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   415
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   416
extern struct sockparams *sphead;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   417
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   418
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   419
 * Used to traverse the list of AF_UNIX sockets to construct the kstat
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   420
 * for netstat(1m).
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   421
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   422
struct socklist {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   423
	kmutex_t	sl_lock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   424
	struct sonode	*sl_list;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   425
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   426
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   427
extern struct socklist socklist;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   428
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   429
 * ss_full_waits is the number of times the reader thread
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   430
 * waits when the queue is full and ss_empty_waits is the number
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   431
 * of times the consumer thread waits when the queue is empty.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   432
 * No locks for these as they are just indicators of whether
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   433
 * disk or network or both is slow or fast.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   434
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   435
struct sendfile_stats {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   436
	uint32_t ss_file_cached;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   437
	uint32_t ss_file_not_cached;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   438
	uint32_t ss_full_waits;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   439
	uint32_t ss_empty_waits;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   440
	uint32_t ss_file_segmap;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   441
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   442
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   443
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   444
 * A single sendfile request is represented by snf_req.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   445
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   446
typedef struct snf_req {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   447
	struct snf_req	*sr_next;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   448
	mblk_t		*sr_mp_head;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   449
	mblk_t		*sr_mp_tail;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   450
	kmutex_t	sr_lock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   451
	kcondvar_t	sr_cv;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   452
	uint_t		sr_qlen;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   453
	int		sr_hiwat;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   454
	int		sr_lowat;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   455
	int		sr_operation;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   456
	struct vnode	*sr_vp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   457
	file_t 		*sr_fp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   458
	ssize_t		sr_maxpsz;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   459
	u_offset_t	sr_file_off;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   460
	u_offset_t	sr_file_size;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   461
#define	SR_READ_DONE	0x80000000
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   462
	int		sr_read_error;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   463
	int		sr_write_error;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   464
} snf_req_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   465
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   466
/* A queue of sendfile requests */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   467
struct sendfile_queue {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   468
	snf_req_t	*snfq_req_head;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   469
	snf_req_t	*snfq_req_tail;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   470
	kmutex_t	snfq_lock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   471
	kcondvar_t	snfq_cv;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   472
	int		snfq_svc_threads;	/* # of service threads */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   473
	int		snfq_idle_cnt;		/* # of idling threads */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   474
	int		snfq_max_threads;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   475
	int		snfq_req_cnt;		/* Number of requests */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   476
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   477
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   478
#define	READ_OP			1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   479
#define	SNFQ_TIMEOUT		(60 * 5 * hz)	/* 5 minutes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   480
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   481
/* Socket network operations switch */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   482
struct sonodeops {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   483
	int	(*sop_accept)(struct sonode *, int, struct sonode **);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   484
	int	(*sop_bind)(struct sonode *, struct sockaddr *, socklen_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   485
		    int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   486
	int	(*sop_listen)(struct sonode *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   487
	int	(*sop_connect)(struct sonode *, const struct sockaddr *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   488
		    socklen_t, int, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   489
	int	(*sop_recvmsg)(struct sonode *, struct msghdr *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   490
		    struct uio *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   491
	int	(*sop_sendmsg)(struct sonode *, struct msghdr *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   492
		    struct uio *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   493
	int	(*sop_getpeername)(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   494
	int	(*sop_getsockname)(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   495
	int	(*sop_shutdown)(struct sonode *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   496
	int	(*sop_getsockopt)(struct sonode *, int, int, void *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   497
		    socklen_t *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   498
	int 	(*sop_setsockopt)(struct sonode *, int, int, const void *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   499
		    socklen_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   500
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   501
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   502
#define	SOP_ACCEPT(so, fflag, nsop)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   503
	((so)->so_ops->sop_accept((so), (fflag), (nsop)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   504
#define	SOP_BIND(so, name, namelen, flags)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   505
	((so)->so_ops->sop_bind((so), (name), (namelen), (flags)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   506
#define	SOP_LISTEN(so, backlog)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   507
	((so)->so_ops->sop_listen((so), (backlog)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   508
#define	SOP_CONNECT(so, name, namelen, fflag, flags)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   509
	((so)->so_ops->sop_connect((so), (name), (namelen), (fflag), (flags)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   510
#define	SOP_RECVMSG(so, msg, uiop)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   511
	((so)->so_ops->sop_recvmsg((so), (msg), (uiop)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   512
#define	SOP_SENDMSG(so, msg, uiop)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   513
	((so)->so_ops->sop_sendmsg((so), (msg), (uiop)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   514
#define	SOP_GETPEERNAME(so)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   515
	((so)->so_ops->sop_getpeername((so)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   516
#define	SOP_GETSOCKNAME(so)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   517
	((so)->so_ops->sop_getsockname((so)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   518
#define	SOP_SHUTDOWN(so, how)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   519
	((so)->so_ops->sop_shutdown((so), (how)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   520
#define	SOP_GETSOCKOPT(so, level, optionname, optval, optlenp, flags)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   521
	((so)->so_ops->sop_getsockopt((so), (level), (optionname),	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   522
	    (optval), (optlenp), (flags)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   523
#define	SOP_SETSOCKOPT(so, level, optionname, optval, optlen)		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   524
	((so)->so_ops->sop_setsockopt((so), (level), (optionname),	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   525
	    (optval), (optlen)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   526
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   527
#endif /* defined(_KERNEL) || defined(_KMEMUSER) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   528
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   529
#ifdef _KERNEL
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   530
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   531
#define	ISALIGNED_cmsghdr(addr) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   532
		(((uintptr_t)(addr) & (_CMSG_HDR_ALIGNMENT - 1)) == 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   533
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   534
#define	ROUNDUP_cmsglen(len) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   535
	(((len) + _CMSG_HDR_ALIGNMENT - 1) & ~(_CMSG_HDR_ALIGNMENT - 1))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   536
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   537
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   538
 * Used in parsing msg_control
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   539
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   540
#define	CMSG_NEXT(cmsg)						\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   541
	(struct cmsghdr *)((uintptr_t)(cmsg) +			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   542
	    ROUNDUP_cmsglen((cmsg)->cmsg_len))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   543
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   544
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   545
 * Maximum size of any argument that is copied in (addresses, options,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   546
 * access rights). MUST be at least MAXPATHLEN + 3.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   547
 * BSD and SunOS 4.X limited this to MLEN or MCLBYTES.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   548
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   549
#define	SO_MAXARGSIZE	8192
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   550
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   551
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   552
 * Convert between vnode and sonode
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   553
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   554
#define	VTOSO(vp)	((struct sonode *)((vp)->v_data))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   555
#define	SOTOV(sp)	((sp)->so_vnode)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   556
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   557
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   558
 * Internal flags for sobind()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   559
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   560
#define	_SOBIND_REBIND		0x01	/* Bind to existing local address */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   561
#define	_SOBIND_UNSPEC		0x02	/* Bind to unspecified address */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   562
#define	_SOBIND_LOCK_HELD	0x04	/* so_excl_lock held by caller */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   563
#define	_SOBIND_NOXLATE		0x08	/* No addr translation for AF_UNIX */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   564
#define	_SOBIND_XPG4_2		0x10	/* xpg4.2 semantics */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   565
#define	_SOBIND_SOCKBSD		0x20	/* BSD semantics */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   566
#define	_SOBIND_LISTEN		0x40	/* Make into SS_ACCEPTCONN */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   567
#define	_SOBIND_SOCKETPAIR	0x80	/* Internal flag for so_socketpair() */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   568
					/* to enable listen with backlog = 1 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   569
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   570
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   571
 * Internal flags for sounbind()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   572
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   573
#define	_SOUNBIND_REBIND	0x01	/* Don't clear fields - will rebind */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   574
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   575
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   576
 * Internal flags for soconnect()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   577
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   578
#define	_SOCONNECT_NOXLATE	0x01	/* No addr translation for AF_UNIX */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   579
#define	_SOCONNECT_DID_BIND	0x02	/* Unbind when connect fails */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   580
#define	_SOCONNECT_XPG4_2	0x04	/* xpg4.2 semantics */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   581
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   582
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   583
 * Internal flags for sodisconnect()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   584
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   585
#define	_SODISCONNECT_LOCK_HELD	0x01	/* so_excl_lock held by caller */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   586
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   587
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   588
 * Internal flags for sotpi_getsockopt().
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   589
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   590
#define	_SOGETSOCKOPT_XPG4_2	0x01	/* xpg4.2 semantics */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   591
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   592
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   593
 * Internal flags for soallocproto*()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   594
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   595
#define	_ALLOC_NOSLEEP		0	/* Don't sleep for memory */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   596
#define	_ALLOC_INTR		1	/* Sleep until interrupt */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   597
#define	_ALLOC_SLEEP		2	/* Sleep forever */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   598
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   599
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   600
 * Internal structure for handling AF_UNIX file descriptor passing
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   601
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   602
struct fdbuf {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   603
	int		fd_size;	/* In bytes, for kmem_free */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   604
	int		fd_numfd;	/* Number of elements below */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   605
	char		*fd_ebuf;	/* Extra buffer to free  */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   606
	int		fd_ebuflen;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   607
	frtn_t		fd_frtn;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   608
	struct file	*fd_fds[1];	/* One or more */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   609
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   610
#define	FDBUF_HDRSIZE	(sizeof (struct fdbuf) - sizeof (struct file *))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   611
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   612
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   613
 * Variable that can be patched to set what version of socket socket()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   614
 * will create.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   615
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   616
extern int so_default_version;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   617
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   618
#ifdef DEBUG
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   619
/* Turn on extra testing capabilities */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   620
#define	SOCK_TEST
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   621
#endif /* DEBUG */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   622
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   623
#ifdef DEBUG
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   624
char	*pr_state(uint_t, uint_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   625
char	*pr_addr(int, struct sockaddr *, t_uscalar_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   626
int	so_verify_oobstate(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   627
#endif /* DEBUG */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   628
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   629
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   630
 * DEBUG macros
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   631
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   632
#if defined(DEBUG) && !defined(__lint)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   633
#define	SOCK_DEBUG
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   634
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   635
extern int sockdebug;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   636
extern int sockprinterr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   637
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   638
#define	eprint(args)	printf args
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   639
#define	eprintso(so, args) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   640
{ if (sockprinterr && ((so)->so_options & SO_DEBUG)) printf args; }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   641
#define	eprintline(error)					\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   642
{								\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   643
	if (error != EINTR && (sockprinterr || sockdebug > 0))	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   644
		printf("socket error %d: line %d file %s\n",	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   645
			(error), __LINE__, __FILE__);		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   646
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   647
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   648
#define	eprintsoline(so, error)					\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   649
{ if (sockprinterr && ((so)->so_options & SO_DEBUG))		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   650
	printf("socket(%p) error %d: line %d file %s\n",	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   651
		(so), (error), __LINE__, __FILE__);		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   652
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   653
#define	dprint(level, args)	{ if (sockdebug > (level)) printf args; }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   654
#define	dprintso(so, level, args) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   655
{ if (sockdebug > (level) && ((so)->so_options & SO_DEBUG)) printf args; }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   656
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   657
#else /* define(DEBUG) && !defined(__lint) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   658
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   659
#define	eprint(args)		{}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   660
#define	eprintso(so, args)	{}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   661
#define	eprintline(error)	{}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   662
#define	eprintsoline(so, error)	{}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   663
#define	dprint(level, args)	{}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   664
#define	dprintso(so, level, args) {}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   665
#ifdef DEBUG
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   666
#undef DEBUG
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   667
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   668
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   669
#endif /* defined(DEBUG) && !defined(__lint) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   670
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   671
extern struct vfsops			sock_vfsops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   672
extern struct vnodeops			*socktpi_vnodeops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   673
extern const struct fs_operation_def	socktpi_vnodeops_template[];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   674
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   675
extern sonodeops_t			sotpi_sonodeops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   676
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   677
extern dev_t				sockdev;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   678
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   679
/* NCAfs symbols */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   680
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   681
extern int	socknca_read(struct vnode *, struct uio *, int, struct cred *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   682
		    struct caller_context *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   683
extern int	socknca_write(struct vnode *, struct uio *, int, struct cred *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   684
		    struct caller_context *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   685
extern int	socknca_ioctl(struct vnode *, int, intptr_t, int,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   686
		    struct cred *, int *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   687
extern int	nca_poll(struct vnode *, short, int, short *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   688
		    struct pollhead **);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   689
extern int	socknca_close(struct vnode *, int, int, offset_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   690
		    struct cred *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   691
extern void	socknca_inactive(struct vnode *, struct cred *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   692
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   693
extern const struct fs_operation_def	socknca_vnodeops_template[];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   694
extern struct vnodeops			*socknca_vnodeops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   695
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   696
extern void		sonca_init(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   697
extern struct sonode	*sonca_create(vnode_t *, int, int, int, int,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   698
			    struct sonode *, int *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   699
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   700
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   701
 * sockfs functions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   702
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   703
extern int	sock_getmsg(vnode_t *, struct strbuf *, struct strbuf *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   704
			uchar_t *, int *, int, rval_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   705
extern int	sock_putmsg(vnode_t *, struct strbuf *, struct strbuf *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   706
			uchar_t, int, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   707
struct sonode	*sotpi_create(vnode_t *, int, int, int, int, struct sonode *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   708
			int *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   709
extern int	socktpi_open(struct vnode **, int, struct cred *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   710
extern int	so_sock2stream(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   711
extern void	so_stream2sock(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   712
extern int	sockinit(int, char *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   713
extern struct vnode
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   714
		*makesockvp(struct vnode *, int, int, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   715
extern void	sockfree(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   716
extern void	so_update_attrs(struct sonode *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   717
extern int	soconfig(int, int, int,	char *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   718
extern struct vnode
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   719
		*solookup(int, int, int, char *, int *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   720
extern void	so_lock_single(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   721
extern void	so_unlock_single(struct sonode *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   722
extern int	so_lock_read(struct sonode *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   723
extern int	so_lock_read_intr(struct sonode *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   724
extern void	so_unlock_read(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   725
extern void	*sogetoff(mblk_t *, t_uscalar_t, t_uscalar_t, uint_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   726
extern void	so_getopt_srcaddr(void *, t_uscalar_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   727
			void **, t_uscalar_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   728
extern int	so_getopt_unix_close(void *, t_uscalar_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   729
extern int	so_addr_verify(struct sonode *, const struct sockaddr *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   730
			socklen_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   731
extern int	so_ux_addr_xlate(struct sonode *, struct sockaddr *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   732
			socklen_t, int, void **, socklen_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   733
extern void	fdbuf_free(struct fdbuf *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   734
extern mblk_t	*fdbuf_allocmsg(int, struct fdbuf *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   735
extern int	fdbuf_create(void *, int, struct fdbuf **);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   736
extern void	so_closefds(void *, t_uscalar_t, int, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   737
extern int	so_getfdopt(void *, t_uscalar_t, int, void **, int *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   738
t_uscalar_t	so_optlen(void *, t_uscalar_t, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   739
extern void	so_cmsg2opt(void *, t_uscalar_t, int, mblk_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   740
extern t_uscalar_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   741
		so_cmsglen(mblk_t *, void *, t_uscalar_t, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   742
extern int	so_opt2cmsg(mblk_t *, void *, t_uscalar_t, int,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   743
			void *, t_uscalar_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   744
extern void	soisconnecting(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   745
extern void	soisconnected(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   746
extern void	soisdisconnected(struct sonode *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   747
extern void	socantsendmore(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   748
extern void	socantrcvmore(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   749
extern void	soseterror(struct sonode *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   750
extern int	sogeterr(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   751
extern int	sogetrderr(vnode_t *, int, int *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   752
extern int	sogetwrerr(vnode_t *, int, int *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   753
extern void	so_unix_close(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   754
extern mblk_t	*soallocproto(size_t, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   755
extern mblk_t	*soallocproto1(const void *, ssize_t, ssize_t, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   756
extern void	soappendmsg(mblk_t *, const void *, ssize_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   757
extern mblk_t	*soallocproto2(const void *, ssize_t, const void *, ssize_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   758
			ssize_t, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   759
extern mblk_t	*soallocproto3(const void *, ssize_t, const void *, ssize_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   760
			const void *, ssize_t, ssize_t, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   761
extern int	sowaitprim(struct sonode *, t_scalar_t, t_scalar_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   762
			t_uscalar_t, mblk_t **, clock_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   763
extern int	sowaitokack(struct sonode *, t_scalar_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   764
extern int	sowaitack(struct sonode *, mblk_t **, clock_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   765
extern void	soqueueack(struct sonode *, mblk_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   766
extern int	sowaitconnind(struct sonode *, int, mblk_t **);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   767
extern void	soqueueconnind(struct sonode *, mblk_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   768
extern int	soflushconnind(struct sonode *, t_scalar_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   769
extern void	so_drain_discon_ind(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   770
extern void	so_flush_discon_ind(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   771
extern int	sowaitconnected(struct sonode *, int, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   772
741
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 0
diff changeset
   773
extern int	sostream_direct(struct sonode *, struct uio *,
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 0
diff changeset
   774
		    mblk_t *, cred_t *);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   775
extern int	sosend_dgram(struct sonode *, struct sockaddr *,
741
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 0
diff changeset
   776
		    socklen_t, struct uio *, int);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   777
extern int	sosend_svc(struct sonode *, struct uio *, t_scalar_t, int, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   778
extern void	so_installhooks(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   779
extern int	so_strinit(struct sonode *, struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   780
extern int	sotpi_recvmsg(struct sonode *, struct nmsghdr *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   781
		    struct uio *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   782
extern int	sotpi_getpeername(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   783
extern int	sotpi_getsockopt(struct sonode *, int, int, void *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   784
		    socklen_t *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   785
extern int	sotpi_setsockopt(struct sonode *, int, int, const void *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   786
		    socklen_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   787
extern int	socktpi_ioctl(struct vnode *, int, intptr_t, int,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   788
		    struct cred *, int *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   789
extern int	sodisconnect(struct sonode *, t_scalar_t, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   790
extern ssize_t	soreadfile(file_t *, uchar_t *, u_offset_t, int *, size_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   791
extern int	so_set_asyncsigs(vnode_t *, pid_t, int, int, cred_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   792
extern int	so_set_events(struct sonode *, vnode_t *, cred_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   793
extern int	so_flip_async(struct sonode *, vnode_t *, int, cred_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   794
extern int	so_set_siggrp(struct sonode *, vnode_t *, pid_t, int, cred_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   795
extern void	*sock_kstat_init(zoneid_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   796
extern void	sock_kstat_fini(zoneid_t, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   797
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   798
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   799
 * Function wrappers (mostly arround the sonode switch) for
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   800
 * backward compatibility.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   801
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   802
extern int	soaccept(struct sonode *, int, struct sonode **);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   803
extern int	sobind(struct sonode *, struct sockaddr *, socklen_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   804
		    int, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   805
extern int	solisten(struct sonode *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   806
extern int	soconnect(struct sonode *, const struct sockaddr *, socklen_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   807
		    int, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   808
extern int	sorecvmsg(struct sonode *, struct nmsghdr *, struct uio *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   809
extern int	sosendmsg(struct sonode *, struct nmsghdr *, struct uio *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   810
extern int	sogetpeername(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   811
extern int	sogetsockname(struct sonode *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   812
extern int	soshutdown(struct sonode *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   813
extern int	sogetsockopt(struct sonode *, int, int, void *, socklen_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   814
		    int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   815
extern int	sosetsockopt(struct sonode *, int, int, const void *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   816
		    t_uscalar_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   817
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   818
extern struct sonode	*socreate(vnode_t *, int, int, int, int,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   819
			    struct sonode *, int *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   820
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   821
extern int	so_copyin(const void *, void *, size_t, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   822
extern int	so_copyout(const void *, void *, size_t, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   823
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   824
extern int	socktpi_access(struct vnode *, int, int, struct cred *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   825
extern int	socktpi_fid(struct vnode *, struct fid *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   826
extern int	socktpi_fsync(struct vnode *, int, struct cred *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   827
extern int	socktpi_getattr(struct vnode *, struct vattr *, int,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   828
		    struct cred *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   829
extern int	socktpi_seek(struct vnode *, offset_t, offset_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   830
extern int	socktpi_setattr(struct vnode *, struct vattr *, int,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   831
		    struct cred *, caller_context_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   832
extern int	socktpi_setfl(vnode_t *, int, int, cred_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   833
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   834
/* SCTP sockfs */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   835
extern struct sonode	*sosctp_create(vnode_t *, int, int, int, int,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   836
			    struct sonode *, int *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   837
extern int sosctp_init(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   838
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   839
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   840
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   841
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   842
 * Internal structure for obtaining sonode information from the socklist.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   843
 * These types match those corresponding in the sonode structure.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   844
 * This is not a published interface, and may change at any time.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   845
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   846
struct sockinfo {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   847
	uint_t		si_size;		/* real length of this struct */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   848
	short		si_family;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   849
	short		si_type;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   850
	ushort_t	si_flag;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   851
	uint_t		si_state;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   852
	uint_t		si_ux_laddr_sou_magic;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   853
	uint_t		si_ux_faddr_sou_magic;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   854
	t_scalar_t	si_serv_type;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   855
	t_uscalar_t	si_laddr_soa_len;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   856
	t_uscalar_t	si_faddr_soa_len;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   857
	uint16_t	si_laddr_family;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   858
	uint16_t	si_faddr_family;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   859
	char		si_laddr_sun_path[MAXPATHLEN + 1]; /* NULL terminated */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   860
	char		si_faddr_sun_path[MAXPATHLEN + 1];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   861
	zoneid_t	si_szoneid;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   862
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   863
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   864
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   865
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   866
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   867
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   868
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   869
#endif	/* _SYS_SOCKETVAR_H */