1*4a5d661aSToomas Soome /*- 2*4a5d661aSToomas Soome * Copyright (c) 1982, 1985, 1986, 1988, 1993, 1994 3*4a5d661aSToomas Soome * The Regents of the University of California. All rights reserved. 4*4a5d661aSToomas Soome * 5*4a5d661aSToomas Soome * Redistribution and use in source and binary forms, with or without 6*4a5d661aSToomas Soome * modification, are permitted provided that the following conditions 7*4a5d661aSToomas Soome * are met: 8*4a5d661aSToomas Soome * 1. Redistributions of source code must retain the above copyright 9*4a5d661aSToomas Soome * notice, this list of conditions and the following disclaimer. 10*4a5d661aSToomas Soome * 2. Redistributions in binary form must reproduce the above copyright 11*4a5d661aSToomas Soome * notice, this list of conditions and the following disclaimer in the 12*4a5d661aSToomas Soome * documentation and/or other materials provided with the distribution. 13*4a5d661aSToomas Soome * 4. Neither the name of the University nor the names of its contributors 14*4a5d661aSToomas Soome * may be used to endorse or promote products derived from this software 15*4a5d661aSToomas Soome * without specific prior written permission. 16*4a5d661aSToomas Soome * 17*4a5d661aSToomas Soome * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 18*4a5d661aSToomas Soome * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19*4a5d661aSToomas Soome * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20*4a5d661aSToomas Soome * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 21*4a5d661aSToomas Soome * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22*4a5d661aSToomas Soome * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23*4a5d661aSToomas Soome * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24*4a5d661aSToomas Soome * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25*4a5d661aSToomas Soome * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26*4a5d661aSToomas Soome * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27*4a5d661aSToomas Soome * SUCH DAMAGE. 28*4a5d661aSToomas Soome * 29*4a5d661aSToomas Soome * @(#)socket.h 8.4 (Berkeley) 2/21/94 30*4a5d661aSToomas Soome * $FreeBSD$ 31*4a5d661aSToomas Soome */ 32*4a5d661aSToomas Soome 33*4a5d661aSToomas Soome #ifndef _SYS_SOCKET_H_ 34*4a5d661aSToomas Soome #define _SYS_SOCKET_H_ 35*4a5d661aSToomas Soome 36*4a5d661aSToomas Soome #include <sys/cdefs.h> 37*4a5d661aSToomas Soome #include <sys/_types.h> 38*4a5d661aSToomas Soome #include <sys/_iovec.h> 39*4a5d661aSToomas Soome #include <machine/_align.h> 40*4a5d661aSToomas Soome 41*4a5d661aSToomas Soome /* 42*4a5d661aSToomas Soome * Definitions related to sockets: types, address families, options. 43*4a5d661aSToomas Soome */ 44*4a5d661aSToomas Soome 45*4a5d661aSToomas Soome /* 46*4a5d661aSToomas Soome * Data types. 47*4a5d661aSToomas Soome */ 48*4a5d661aSToomas Soome #if __BSD_VISIBLE 49*4a5d661aSToomas Soome #ifndef _GID_T_DECLARED 50*4a5d661aSToomas Soome typedef __gid_t gid_t; 51*4a5d661aSToomas Soome #define _GID_T_DECLARED 52*4a5d661aSToomas Soome #endif 53*4a5d661aSToomas Soome 54*4a5d661aSToomas Soome #ifndef _OFF_T_DECLARED 55*4a5d661aSToomas Soome typedef __off_t off_t; 56*4a5d661aSToomas Soome #define _OFF_T_DECLARED 57*4a5d661aSToomas Soome #endif 58*4a5d661aSToomas Soome 59*4a5d661aSToomas Soome #ifndef _PID_T_DECLARED 60*4a5d661aSToomas Soome typedef __pid_t pid_t; 61*4a5d661aSToomas Soome #define _PID_T_DECLARED 62*4a5d661aSToomas Soome #endif 63*4a5d661aSToomas Soome #endif 64*4a5d661aSToomas Soome 65*4a5d661aSToomas Soome #ifndef _SA_FAMILY_T_DECLARED 66*4a5d661aSToomas Soome typedef __sa_family_t sa_family_t; 67*4a5d661aSToomas Soome #define _SA_FAMILY_T_DECLARED 68*4a5d661aSToomas Soome #endif 69*4a5d661aSToomas Soome 70*4a5d661aSToomas Soome #ifndef _SOCKLEN_T_DECLARED 71*4a5d661aSToomas Soome typedef __socklen_t socklen_t; 72*4a5d661aSToomas Soome #define _SOCKLEN_T_DECLARED 73*4a5d661aSToomas Soome #endif 74*4a5d661aSToomas Soome 75*4a5d661aSToomas Soome #ifndef _SSIZE_T_DECLARED 76*4a5d661aSToomas Soome typedef __ssize_t ssize_t; 77*4a5d661aSToomas Soome #define _SSIZE_T_DECLARED 78*4a5d661aSToomas Soome #endif 79*4a5d661aSToomas Soome 80*4a5d661aSToomas Soome #if __BSD_VISIBLE 81*4a5d661aSToomas Soome #ifndef _UID_T_DECLARED 82*4a5d661aSToomas Soome typedef __uid_t uid_t; 83*4a5d661aSToomas Soome #define _UID_T_DECLARED 84*4a5d661aSToomas Soome #endif 85*4a5d661aSToomas Soome #endif 86*4a5d661aSToomas Soome 87*4a5d661aSToomas Soome #ifndef _UINT32_T_DECLARED 88*4a5d661aSToomas Soome typedef __uint32_t uint32_t; 89*4a5d661aSToomas Soome #define _UINT32_T_DECLARED 90*4a5d661aSToomas Soome #endif 91*4a5d661aSToomas Soome 92*4a5d661aSToomas Soome #ifndef _UINTPTR_T_DECLARED 93*4a5d661aSToomas Soome typedef __uintptr_t uintptr_t; 94*4a5d661aSToomas Soome #define _UINTPTR_T_DECLARED 95*4a5d661aSToomas Soome #endif 96*4a5d661aSToomas Soome 97*4a5d661aSToomas Soome /* 98*4a5d661aSToomas Soome * Types 99*4a5d661aSToomas Soome */ 100*4a5d661aSToomas Soome #define SOCK_STREAM 1 /* stream socket */ 101*4a5d661aSToomas Soome #define SOCK_DGRAM 2 /* datagram socket */ 102*4a5d661aSToomas Soome #define SOCK_RAW 3 /* raw-protocol interface */ 103*4a5d661aSToomas Soome #if __BSD_VISIBLE 104*4a5d661aSToomas Soome #define SOCK_RDM 4 /* reliably-delivered message */ 105*4a5d661aSToomas Soome #endif 106*4a5d661aSToomas Soome #define SOCK_SEQPACKET 5 /* sequenced packet stream */ 107*4a5d661aSToomas Soome 108*4a5d661aSToomas Soome #if __BSD_VISIBLE 109*4a5d661aSToomas Soome /* 110*4a5d661aSToomas Soome * Creation flags, OR'ed into socket() and socketpair() type argument. 111*4a5d661aSToomas Soome */ 112*4a5d661aSToomas Soome #define SOCK_CLOEXEC 0x10000000 113*4a5d661aSToomas Soome #define SOCK_NONBLOCK 0x20000000 114*4a5d661aSToomas Soome #endif 115*4a5d661aSToomas Soome 116*4a5d661aSToomas Soome /* 117*4a5d661aSToomas Soome * Option flags per-socket. 118*4a5d661aSToomas Soome */ 119*4a5d661aSToomas Soome #define SO_DEBUG 0x0001 /* turn on debugging info recording */ 120*4a5d661aSToomas Soome #define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ 121*4a5d661aSToomas Soome #define SO_REUSEADDR 0x0004 /* allow local address reuse */ 122*4a5d661aSToomas Soome #define SO_KEEPALIVE 0x0008 /* keep connections alive */ 123*4a5d661aSToomas Soome #define SO_DONTROUTE 0x0010 /* just use interface addresses */ 124*4a5d661aSToomas Soome #define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */ 125*4a5d661aSToomas Soome #if __BSD_VISIBLE 126*4a5d661aSToomas Soome #define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */ 127*4a5d661aSToomas Soome #endif 128*4a5d661aSToomas Soome #define SO_LINGER 0x0080 /* linger on close if data present */ 129*4a5d661aSToomas Soome #define SO_OOBINLINE 0x0100 /* leave received OOB data in line */ 130*4a5d661aSToomas Soome #if __BSD_VISIBLE 131*4a5d661aSToomas Soome #define SO_REUSEPORT 0x0200 /* allow local address & port reuse */ 132*4a5d661aSToomas Soome #define SO_TIMESTAMP 0x0400 /* timestamp received dgram traffic */ 133*4a5d661aSToomas Soome #define SO_NOSIGPIPE 0x0800 /* no SIGPIPE from EPIPE */ 134*4a5d661aSToomas Soome #define SO_ACCEPTFILTER 0x1000 /* there is an accept filter */ 135*4a5d661aSToomas Soome #define SO_BINTIME 0x2000 /* timestamp received dgram traffic */ 136*4a5d661aSToomas Soome #endif 137*4a5d661aSToomas Soome #define SO_NO_OFFLOAD 0x4000 /* socket cannot be offloaded */ 138*4a5d661aSToomas Soome #define SO_NO_DDP 0x8000 /* disable direct data placement */ 139*4a5d661aSToomas Soome 140*4a5d661aSToomas Soome /* 141*4a5d661aSToomas Soome * Additional options, not kept in so_options. 142*4a5d661aSToomas Soome */ 143*4a5d661aSToomas Soome #define SO_SNDBUF 0x1001 /* send buffer size */ 144*4a5d661aSToomas Soome #define SO_RCVBUF 0x1002 /* receive buffer size */ 145*4a5d661aSToomas Soome #define SO_SNDLOWAT 0x1003 /* send low-water mark */ 146*4a5d661aSToomas Soome #define SO_RCVLOWAT 0x1004 /* receive low-water mark */ 147*4a5d661aSToomas Soome #define SO_SNDTIMEO 0x1005 /* send timeout */ 148*4a5d661aSToomas Soome #define SO_RCVTIMEO 0x1006 /* receive timeout */ 149*4a5d661aSToomas Soome #define SO_ERROR 0x1007 /* get error status and clear */ 150*4a5d661aSToomas Soome #define SO_TYPE 0x1008 /* get socket type */ 151*4a5d661aSToomas Soome #if __BSD_VISIBLE 152*4a5d661aSToomas Soome #define SO_LABEL 0x1009 /* socket's MAC label */ 153*4a5d661aSToomas Soome #define SO_PEERLABEL 0x1010 /* socket's peer's MAC label */ 154*4a5d661aSToomas Soome #define SO_LISTENQLIMIT 0x1011 /* socket's backlog limit */ 155*4a5d661aSToomas Soome #define SO_LISTENQLEN 0x1012 /* socket's complete queue length */ 156*4a5d661aSToomas Soome #define SO_LISTENINCQLEN 0x1013 /* socket's incomplete queue length */ 157*4a5d661aSToomas Soome #define SO_SETFIB 0x1014 /* use this FIB to route */ 158*4a5d661aSToomas Soome #define SO_USER_COOKIE 0x1015 /* user cookie (dummynet etc.) */ 159*4a5d661aSToomas Soome #define SO_PROTOCOL 0x1016 /* get socket protocol (Linux name) */ 160*4a5d661aSToomas Soome #define SO_PROTOTYPE SO_PROTOCOL /* alias for SO_PROTOCOL (SunOS name) */ 161*4a5d661aSToomas Soome #endif 162*4a5d661aSToomas Soome 163*4a5d661aSToomas Soome /* 164*4a5d661aSToomas Soome * Space reserved for new socket options added by third-party vendors. 165*4a5d661aSToomas Soome * This range applies to all socket option levels. New socket options 166*4a5d661aSToomas Soome * in FreeBSD should always use an option value less than SO_VENDOR. 167*4a5d661aSToomas Soome */ 168*4a5d661aSToomas Soome #if __BSD_VISIBLE 169*4a5d661aSToomas Soome #define SO_VENDOR 0x80000000 170*4a5d661aSToomas Soome #endif 171*4a5d661aSToomas Soome 172*4a5d661aSToomas Soome /* 173*4a5d661aSToomas Soome * Structure used for manipulating linger option. 174*4a5d661aSToomas Soome */ 175*4a5d661aSToomas Soome struct linger { 176*4a5d661aSToomas Soome int l_onoff; /* option on/off */ 177*4a5d661aSToomas Soome int l_linger; /* linger time */ 178*4a5d661aSToomas Soome }; 179*4a5d661aSToomas Soome 180*4a5d661aSToomas Soome #if __BSD_VISIBLE 181*4a5d661aSToomas Soome struct accept_filter_arg { 182*4a5d661aSToomas Soome char af_name[16]; 183*4a5d661aSToomas Soome char af_arg[256-16]; 184*4a5d661aSToomas Soome }; 185*4a5d661aSToomas Soome #endif 186*4a5d661aSToomas Soome 187*4a5d661aSToomas Soome /* 188*4a5d661aSToomas Soome * Level number for (get/set)sockopt() to apply to socket itself. 189*4a5d661aSToomas Soome */ 190*4a5d661aSToomas Soome #define SOL_SOCKET 0xffff /* options for socket level */ 191*4a5d661aSToomas Soome 192*4a5d661aSToomas Soome /* 193*4a5d661aSToomas Soome * Address families. 194*4a5d661aSToomas Soome */ 195*4a5d661aSToomas Soome #define AF_UNSPEC 0 /* unspecified */ 196*4a5d661aSToomas Soome #if __BSD_VISIBLE 197*4a5d661aSToomas Soome #define AF_LOCAL AF_UNIX /* local to host (pipes, portals) */ 198*4a5d661aSToomas Soome #endif 199*4a5d661aSToomas Soome #define AF_UNIX 1 /* standardized name for AF_LOCAL */ 200*4a5d661aSToomas Soome #define AF_INET 2 /* internetwork: UDP, TCP, etc. */ 201*4a5d661aSToomas Soome #if __BSD_VISIBLE 202*4a5d661aSToomas Soome #define AF_IMPLINK 3 /* arpanet imp addresses */ 203*4a5d661aSToomas Soome #define AF_PUP 4 /* pup protocols: e.g. BSP */ 204*4a5d661aSToomas Soome #define AF_CHAOS 5 /* mit CHAOS protocols */ 205*4a5d661aSToomas Soome #define AF_NETBIOS 6 /* SMB protocols */ 206*4a5d661aSToomas Soome #define AF_ISO 7 /* ISO protocols */ 207*4a5d661aSToomas Soome #define AF_OSI AF_ISO 208*4a5d661aSToomas Soome #define AF_ECMA 8 /* European computer manufacturers */ 209*4a5d661aSToomas Soome #define AF_DATAKIT 9 /* datakit protocols */ 210*4a5d661aSToomas Soome #define AF_CCITT 10 /* CCITT protocols, X.25 etc */ 211*4a5d661aSToomas Soome #define AF_SNA 11 /* IBM SNA */ 212*4a5d661aSToomas Soome #define AF_DECnet 12 /* DECnet */ 213*4a5d661aSToomas Soome #define AF_DLI 13 /* DEC Direct data link interface */ 214*4a5d661aSToomas Soome #define AF_LAT 14 /* LAT */ 215*4a5d661aSToomas Soome #define AF_HYLINK 15 /* NSC Hyperchannel */ 216*4a5d661aSToomas Soome #define AF_APPLETALK 16 /* Apple Talk */ 217*4a5d661aSToomas Soome #define AF_ROUTE 17 /* Internal Routing Protocol */ 218*4a5d661aSToomas Soome #define AF_LINK 18 /* Link layer interface */ 219*4a5d661aSToomas Soome #define pseudo_AF_XTP 19 /* eXpress Transfer Protocol (no AF) */ 220*4a5d661aSToomas Soome #define AF_COIP 20 /* connection-oriented IP, aka ST II */ 221*4a5d661aSToomas Soome #define AF_CNT 21 /* Computer Network Technology */ 222*4a5d661aSToomas Soome #define pseudo_AF_RTIP 22 /* Help Identify RTIP packets */ 223*4a5d661aSToomas Soome #define AF_IPX 23 /* Novell Internet Protocol */ 224*4a5d661aSToomas Soome #define AF_SIP 24 /* Simple Internet Protocol */ 225*4a5d661aSToomas Soome #define pseudo_AF_PIP 25 /* Help Identify PIP packets */ 226*4a5d661aSToomas Soome #define AF_ISDN 26 /* Integrated Services Digital Network*/ 227*4a5d661aSToomas Soome #define AF_E164 AF_ISDN /* CCITT E.164 recommendation */ 228*4a5d661aSToomas Soome #define pseudo_AF_KEY 27 /* Internal key-management function */ 229*4a5d661aSToomas Soome #endif 230*4a5d661aSToomas Soome #define AF_INET6 28 /* IPv6 */ 231*4a5d661aSToomas Soome #if __BSD_VISIBLE 232*4a5d661aSToomas Soome #define AF_NATM 29 /* native ATM access */ 233*4a5d661aSToomas Soome #define AF_ATM 30 /* ATM */ 234*4a5d661aSToomas Soome #define pseudo_AF_HDRCMPLT 31 /* Used by BPF to not rewrite headers 235*4a5d661aSToomas Soome * in interface output routine 236*4a5d661aSToomas Soome */ 237*4a5d661aSToomas Soome #define AF_NETGRAPH 32 /* Netgraph sockets */ 238*4a5d661aSToomas Soome #define AF_SLOW 33 /* 802.3ad slow protocol */ 239*4a5d661aSToomas Soome #define AF_SCLUSTER 34 /* Sitara cluster protocol */ 240*4a5d661aSToomas Soome #define AF_ARP 35 241*4a5d661aSToomas Soome #define AF_BLUETOOTH 36 /* Bluetooth sockets */ 242*4a5d661aSToomas Soome #define AF_IEEE80211 37 /* IEEE 802.11 protocol */ 243*4a5d661aSToomas Soome #define AF_INET_SDP 40 /* OFED Socket Direct Protocol ipv4 */ 244*4a5d661aSToomas Soome #define AF_INET6_SDP 42 /* OFED Socket Direct Protocol ipv6 */ 245*4a5d661aSToomas Soome #define AF_MAX 42 246*4a5d661aSToomas Soome /* 247*4a5d661aSToomas Soome * When allocating a new AF_ constant, please only allocate 248*4a5d661aSToomas Soome * even numbered constants for FreeBSD until 134 as odd numbered AF_ 249*4a5d661aSToomas Soome * constants 39-133 are now reserved for vendors. 250*4a5d661aSToomas Soome */ 251*4a5d661aSToomas Soome #define AF_VENDOR00 39 252*4a5d661aSToomas Soome #define AF_VENDOR01 41 253*4a5d661aSToomas Soome #define AF_VENDOR02 43 254*4a5d661aSToomas Soome #define AF_VENDOR03 45 255*4a5d661aSToomas Soome #define AF_VENDOR04 47 256*4a5d661aSToomas Soome #define AF_VENDOR05 49 257*4a5d661aSToomas Soome #define AF_VENDOR06 51 258*4a5d661aSToomas Soome #define AF_VENDOR07 53 259*4a5d661aSToomas Soome #define AF_VENDOR08 55 260*4a5d661aSToomas Soome #define AF_VENDOR09 57 261*4a5d661aSToomas Soome #define AF_VENDOR10 59 262*4a5d661aSToomas Soome #define AF_VENDOR11 61 263*4a5d661aSToomas Soome #define AF_VENDOR12 63 264*4a5d661aSToomas Soome #define AF_VENDOR13 65 265*4a5d661aSToomas Soome #define AF_VENDOR14 67 266*4a5d661aSToomas Soome #define AF_VENDOR15 69 267*4a5d661aSToomas Soome #define AF_VENDOR16 71 268*4a5d661aSToomas Soome #define AF_VENDOR17 73 269*4a5d661aSToomas Soome #define AF_VENDOR18 75 270*4a5d661aSToomas Soome #define AF_VENDOR19 77 271*4a5d661aSToomas Soome #define AF_VENDOR20 79 272*4a5d661aSToomas Soome #define AF_VENDOR21 81 273*4a5d661aSToomas Soome #define AF_VENDOR22 83 274*4a5d661aSToomas Soome #define AF_VENDOR23 85 275*4a5d661aSToomas Soome #define AF_VENDOR24 87 276*4a5d661aSToomas Soome #define AF_VENDOR25 89 277*4a5d661aSToomas Soome #define AF_VENDOR26 91 278*4a5d661aSToomas Soome #define AF_VENDOR27 93 279*4a5d661aSToomas Soome #define AF_VENDOR28 95 280*4a5d661aSToomas Soome #define AF_VENDOR29 97 281*4a5d661aSToomas Soome #define AF_VENDOR30 99 282*4a5d661aSToomas Soome #define AF_VENDOR31 101 283*4a5d661aSToomas Soome #define AF_VENDOR32 103 284*4a5d661aSToomas Soome #define AF_VENDOR33 105 285*4a5d661aSToomas Soome #define AF_VENDOR34 107 286*4a5d661aSToomas Soome #define AF_VENDOR35 109 287*4a5d661aSToomas Soome #define AF_VENDOR36 111 288*4a5d661aSToomas Soome #define AF_VENDOR37 113 289*4a5d661aSToomas Soome #define AF_VENDOR38 115 290*4a5d661aSToomas Soome #define AF_VENDOR39 117 291*4a5d661aSToomas Soome #define AF_VENDOR40 119 292*4a5d661aSToomas Soome #define AF_VENDOR41 121 293*4a5d661aSToomas Soome #define AF_VENDOR42 123 294*4a5d661aSToomas Soome #define AF_VENDOR43 125 295*4a5d661aSToomas Soome #define AF_VENDOR44 127 296*4a5d661aSToomas Soome #define AF_VENDOR45 129 297*4a5d661aSToomas Soome #define AF_VENDOR46 131 298*4a5d661aSToomas Soome #define AF_VENDOR47 133 299*4a5d661aSToomas Soome #endif 300*4a5d661aSToomas Soome 301*4a5d661aSToomas Soome /* 302*4a5d661aSToomas Soome * Structure used by kernel to store most 303*4a5d661aSToomas Soome * addresses. 304*4a5d661aSToomas Soome */ 305*4a5d661aSToomas Soome struct sockaddr { 306*4a5d661aSToomas Soome unsigned char sa_len; /* total length */ 307*4a5d661aSToomas Soome sa_family_t sa_family; /* address family */ 308*4a5d661aSToomas Soome char sa_data[14]; /* actually longer; address value */ 309*4a5d661aSToomas Soome }; 310*4a5d661aSToomas Soome #if __BSD_VISIBLE 311*4a5d661aSToomas Soome #define SOCK_MAXADDRLEN 255 /* longest possible addresses */ 312*4a5d661aSToomas Soome 313*4a5d661aSToomas Soome /* 314*4a5d661aSToomas Soome * Structure used by kernel to pass protocol 315*4a5d661aSToomas Soome * information in raw sockets. 316*4a5d661aSToomas Soome */ 317*4a5d661aSToomas Soome struct sockproto { 318*4a5d661aSToomas Soome unsigned short sp_family; /* address family */ 319*4a5d661aSToomas Soome unsigned short sp_protocol; /* protocol */ 320*4a5d661aSToomas Soome }; 321*4a5d661aSToomas Soome #endif 322*4a5d661aSToomas Soome 323*4a5d661aSToomas Soome #include <sys/_sockaddr_storage.h> 324*4a5d661aSToomas Soome 325*4a5d661aSToomas Soome #if __BSD_VISIBLE 326*4a5d661aSToomas Soome /* 327*4a5d661aSToomas Soome * Protocol families, same as address families for now. 328*4a5d661aSToomas Soome */ 329*4a5d661aSToomas Soome #define PF_UNSPEC AF_UNSPEC 330*4a5d661aSToomas Soome #define PF_LOCAL AF_LOCAL 331*4a5d661aSToomas Soome #define PF_UNIX PF_LOCAL /* backward compatibility */ 332*4a5d661aSToomas Soome #define PF_INET AF_INET 333*4a5d661aSToomas Soome #define PF_IMPLINK AF_IMPLINK 334*4a5d661aSToomas Soome #define PF_PUP AF_PUP 335*4a5d661aSToomas Soome #define PF_CHAOS AF_CHAOS 336*4a5d661aSToomas Soome #define PF_NETBIOS AF_NETBIOS 337*4a5d661aSToomas Soome #define PF_ISO AF_ISO 338*4a5d661aSToomas Soome #define PF_OSI AF_ISO 339*4a5d661aSToomas Soome #define PF_ECMA AF_ECMA 340*4a5d661aSToomas Soome #define PF_DATAKIT AF_DATAKIT 341*4a5d661aSToomas Soome #define PF_CCITT AF_CCITT 342*4a5d661aSToomas Soome #define PF_SNA AF_SNA 343*4a5d661aSToomas Soome #define PF_DECnet AF_DECnet 344*4a5d661aSToomas Soome #define PF_DLI AF_DLI 345*4a5d661aSToomas Soome #define PF_LAT AF_LAT 346*4a5d661aSToomas Soome #define PF_HYLINK AF_HYLINK 347*4a5d661aSToomas Soome #define PF_APPLETALK AF_APPLETALK 348*4a5d661aSToomas Soome #define PF_ROUTE AF_ROUTE 349*4a5d661aSToomas Soome #define PF_LINK AF_LINK 350*4a5d661aSToomas Soome #define PF_XTP pseudo_AF_XTP /* really just proto family, no AF */ 351*4a5d661aSToomas Soome #define PF_COIP AF_COIP 352*4a5d661aSToomas Soome #define PF_CNT AF_CNT 353*4a5d661aSToomas Soome #define PF_SIP AF_SIP 354*4a5d661aSToomas Soome #define PF_IPX AF_IPX 355*4a5d661aSToomas Soome #define PF_RTIP pseudo_AF_RTIP /* same format as AF_INET */ 356*4a5d661aSToomas Soome #define PF_PIP pseudo_AF_PIP 357*4a5d661aSToomas Soome #define PF_ISDN AF_ISDN 358*4a5d661aSToomas Soome #define PF_KEY pseudo_AF_KEY 359*4a5d661aSToomas Soome #define PF_INET6 AF_INET6 360*4a5d661aSToomas Soome #define PF_NATM AF_NATM 361*4a5d661aSToomas Soome #define PF_ATM AF_ATM 362*4a5d661aSToomas Soome #define PF_NETGRAPH AF_NETGRAPH 363*4a5d661aSToomas Soome #define PF_SLOW AF_SLOW 364*4a5d661aSToomas Soome #define PF_SCLUSTER AF_SCLUSTER 365*4a5d661aSToomas Soome #define PF_ARP AF_ARP 366*4a5d661aSToomas Soome #define PF_BLUETOOTH AF_BLUETOOTH 367*4a5d661aSToomas Soome #define PF_IEEE80211 AF_IEEE80211 368*4a5d661aSToomas Soome #define PF_INET_SDP AF_INET_SDP 369*4a5d661aSToomas Soome #define PF_INET6_SDP AF_INET6_SDP 370*4a5d661aSToomas Soome 371*4a5d661aSToomas Soome #define PF_MAX AF_MAX 372*4a5d661aSToomas Soome 373*4a5d661aSToomas Soome /* 374*4a5d661aSToomas Soome * Definitions for network related sysctl, CTL_NET. 375*4a5d661aSToomas Soome * 376*4a5d661aSToomas Soome * Second level is protocol family. 377*4a5d661aSToomas Soome * Third level is protocol number. 378*4a5d661aSToomas Soome * 379*4a5d661aSToomas Soome * Further levels are defined by the individual families. 380*4a5d661aSToomas Soome */ 381*4a5d661aSToomas Soome 382*4a5d661aSToomas Soome /* 383*4a5d661aSToomas Soome * PF_ROUTE - Routing table 384*4a5d661aSToomas Soome * 385*4a5d661aSToomas Soome * Three additional levels are defined: 386*4a5d661aSToomas Soome * Fourth: address family, 0 is wildcard 387*4a5d661aSToomas Soome * Fifth: type of info, defined below 388*4a5d661aSToomas Soome * Sixth: flag(s) to mask with for NET_RT_FLAGS 389*4a5d661aSToomas Soome */ 390*4a5d661aSToomas Soome #define NET_RT_DUMP 1 /* dump; may limit to a.f. */ 391*4a5d661aSToomas Soome #define NET_RT_FLAGS 2 /* by flags, e.g. RESOLVING */ 392*4a5d661aSToomas Soome #define NET_RT_IFLIST 3 /* survey interface list */ 393*4a5d661aSToomas Soome #define NET_RT_IFMALIST 4 /* return multicast address list */ 394*4a5d661aSToomas Soome #define NET_RT_IFLISTL 5 /* Survey interface list, using 'l'en 395*4a5d661aSToomas Soome * versions of msghdr structs. */ 396*4a5d661aSToomas Soome #endif /* __BSD_VISIBLE */ 397*4a5d661aSToomas Soome 398*4a5d661aSToomas Soome /* 399*4a5d661aSToomas Soome * Maximum queue length specifiable by listen. 400*4a5d661aSToomas Soome */ 401*4a5d661aSToomas Soome #define SOMAXCONN 128 402*4a5d661aSToomas Soome 403*4a5d661aSToomas Soome /* 404*4a5d661aSToomas Soome * Message header for recvmsg and sendmsg calls. 405*4a5d661aSToomas Soome * Used value-result for recvmsg, value only for sendmsg. 406*4a5d661aSToomas Soome */ 407*4a5d661aSToomas Soome struct msghdr { 408*4a5d661aSToomas Soome void *msg_name; /* optional address */ 409*4a5d661aSToomas Soome socklen_t msg_namelen; /* size of address */ 410*4a5d661aSToomas Soome struct iovec *msg_iov; /* scatter/gather array */ 411*4a5d661aSToomas Soome int msg_iovlen; /* # elements in msg_iov */ 412*4a5d661aSToomas Soome void *msg_control; /* ancillary data, see below */ 413*4a5d661aSToomas Soome socklen_t msg_controllen; /* ancillary data buffer len */ 414*4a5d661aSToomas Soome int msg_flags; /* flags on received message */ 415*4a5d661aSToomas Soome }; 416*4a5d661aSToomas Soome 417*4a5d661aSToomas Soome #define MSG_OOB 0x1 /* process out-of-band data */ 418*4a5d661aSToomas Soome #define MSG_PEEK 0x2 /* peek at incoming message */ 419*4a5d661aSToomas Soome #define MSG_DONTROUTE 0x4 /* send without using routing tables */ 420*4a5d661aSToomas Soome #define MSG_EOR 0x8 /* data completes record */ 421*4a5d661aSToomas Soome #define MSG_TRUNC 0x10 /* data discarded before delivery */ 422*4a5d661aSToomas Soome #define MSG_CTRUNC 0x20 /* control data lost before delivery */ 423*4a5d661aSToomas Soome #define MSG_WAITALL 0x40 /* wait for full request or error */ 424*4a5d661aSToomas Soome #if __POSIX_VISIBLE >= 200809 425*4a5d661aSToomas Soome #define MSG_NOSIGNAL 0x20000 /* do not generate SIGPIPE on EOF */ 426*4a5d661aSToomas Soome #endif 427*4a5d661aSToomas Soome #if __BSD_VISIBLE 428*4a5d661aSToomas Soome #define MSG_DONTWAIT 0x80 /* this message should be nonblocking */ 429*4a5d661aSToomas Soome #define MSG_EOF 0x100 /* data completes connection */ 430*4a5d661aSToomas Soome #define MSG_NOTIFICATION 0x2000 /* SCTP notification */ 431*4a5d661aSToomas Soome #define MSG_NBIO 0x4000 /* FIONBIO mode, used by fifofs */ 432*4a5d661aSToomas Soome #define MSG_COMPAT 0x8000 /* used in sendit() */ 433*4a5d661aSToomas Soome #define MSG_CMSG_CLOEXEC 0x40000 /* make received fds close-on-exec */ 434*4a5d661aSToomas Soome #define MSG_WAITFORONE 0x80000 /* for recvmmsg() */ 435*4a5d661aSToomas Soome #endif 436*4a5d661aSToomas Soome #ifdef _KERNEL 437*4a5d661aSToomas Soome #define MSG_SOCALLBCK 0x10000 /* for use by socket callbacks - soreceive (TCP) */ 438*4a5d661aSToomas Soome #endif 439*4a5d661aSToomas Soome 440*4a5d661aSToomas Soome /* 441*4a5d661aSToomas Soome * Header for ancillary data objects in msg_control buffer. 442*4a5d661aSToomas Soome * Used for additional information with/about a datagram 443*4a5d661aSToomas Soome * not expressible by flags. The format is a sequence 444*4a5d661aSToomas Soome * of message elements headed by cmsghdr structures. 445*4a5d661aSToomas Soome */ 446*4a5d661aSToomas Soome struct cmsghdr { 447*4a5d661aSToomas Soome socklen_t cmsg_len; /* data byte count, including hdr */ 448*4a5d661aSToomas Soome int cmsg_level; /* originating protocol */ 449*4a5d661aSToomas Soome int cmsg_type; /* protocol-specific type */ 450*4a5d661aSToomas Soome /* followed by u_char cmsg_data[]; */ 451*4a5d661aSToomas Soome }; 452*4a5d661aSToomas Soome 453*4a5d661aSToomas Soome #if __BSD_VISIBLE 454*4a5d661aSToomas Soome /* 455*4a5d661aSToomas Soome * While we may have more groups than this, the cmsgcred struct must 456*4a5d661aSToomas Soome * be able to fit in an mbuf and we have historically supported a 457*4a5d661aSToomas Soome * maximum of 16 groups. 458*4a5d661aSToomas Soome */ 459*4a5d661aSToomas Soome #define CMGROUP_MAX 16 460*4a5d661aSToomas Soome 461*4a5d661aSToomas Soome /* 462*4a5d661aSToomas Soome * Credentials structure, used to verify the identity of a peer 463*4a5d661aSToomas Soome * process that has sent us a message. This is allocated by the 464*4a5d661aSToomas Soome * peer process but filled in by the kernel. This prevents the 465*4a5d661aSToomas Soome * peer from lying about its identity. (Note that cmcred_groups[0] 466*4a5d661aSToomas Soome * is the effective GID.) 467*4a5d661aSToomas Soome */ 468*4a5d661aSToomas Soome struct cmsgcred { 469*4a5d661aSToomas Soome pid_t cmcred_pid; /* PID of sending process */ 470*4a5d661aSToomas Soome uid_t cmcred_uid; /* real UID of sending process */ 471*4a5d661aSToomas Soome uid_t cmcred_euid; /* effective UID of sending process */ 472*4a5d661aSToomas Soome gid_t cmcred_gid; /* real GID of sending process */ 473*4a5d661aSToomas Soome short cmcred_ngroups; /* number or groups */ 474*4a5d661aSToomas Soome gid_t cmcred_groups[CMGROUP_MAX]; /* groups */ 475*4a5d661aSToomas Soome }; 476*4a5d661aSToomas Soome 477*4a5d661aSToomas Soome /* 478*4a5d661aSToomas Soome * Socket credentials. 479*4a5d661aSToomas Soome */ 480*4a5d661aSToomas Soome struct sockcred { 481*4a5d661aSToomas Soome uid_t sc_uid; /* real user id */ 482*4a5d661aSToomas Soome uid_t sc_euid; /* effective user id */ 483*4a5d661aSToomas Soome gid_t sc_gid; /* real group id */ 484*4a5d661aSToomas Soome gid_t sc_egid; /* effective group id */ 485*4a5d661aSToomas Soome int sc_ngroups; /* number of supplemental groups */ 486*4a5d661aSToomas Soome gid_t sc_groups[1]; /* variable length */ 487*4a5d661aSToomas Soome }; 488*4a5d661aSToomas Soome 489*4a5d661aSToomas Soome /* 490*4a5d661aSToomas Soome * Compute size of a sockcred structure with groups. 491*4a5d661aSToomas Soome */ 492*4a5d661aSToomas Soome #define SOCKCREDSIZE(ngrps) \ 493*4a5d661aSToomas Soome (sizeof(struct sockcred) + (sizeof(gid_t) * ((ngrps) - 1))) 494*4a5d661aSToomas Soome 495*4a5d661aSToomas Soome #endif /* __BSD_VISIBLE */ 496*4a5d661aSToomas Soome 497*4a5d661aSToomas Soome /* given pointer to struct cmsghdr, return pointer to data */ 498*4a5d661aSToomas Soome #define CMSG_DATA(cmsg) ((unsigned char *)(cmsg) + \ 499*4a5d661aSToomas Soome _ALIGN(sizeof(struct cmsghdr))) 500*4a5d661aSToomas Soome 501*4a5d661aSToomas Soome /* given pointer to struct cmsghdr, return pointer to next cmsghdr */ 502*4a5d661aSToomas Soome #define CMSG_NXTHDR(mhdr, cmsg) \ 503*4a5d661aSToomas Soome ((char *)(cmsg) == NULL ? CMSG_FIRSTHDR(mhdr) : \ 504*4a5d661aSToomas Soome ((char *)(cmsg) + _ALIGN(((struct cmsghdr *)(cmsg))->cmsg_len) + \ 505*4a5d661aSToomas Soome _ALIGN(sizeof(struct cmsghdr)) > \ 506*4a5d661aSToomas Soome (char *)(mhdr)->msg_control + (mhdr)->msg_controllen) ? \ 507*4a5d661aSToomas Soome (struct cmsghdr *)0 : \ 508*4a5d661aSToomas Soome (struct cmsghdr *)(void *)((char *)(cmsg) + \ 509*4a5d661aSToomas Soome _ALIGN(((struct cmsghdr *)(cmsg))->cmsg_len))) 510*4a5d661aSToomas Soome 511*4a5d661aSToomas Soome /* 512*4a5d661aSToomas Soome * RFC 2292 requires to check msg_controllen, in case that the kernel returns 513*4a5d661aSToomas Soome * an empty list for some reasons. 514*4a5d661aSToomas Soome */ 515*4a5d661aSToomas Soome #define CMSG_FIRSTHDR(mhdr) \ 516*4a5d661aSToomas Soome ((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \ 517*4a5d661aSToomas Soome (struct cmsghdr *)(mhdr)->msg_control : \ 518*4a5d661aSToomas Soome (struct cmsghdr *)NULL) 519*4a5d661aSToomas Soome 520*4a5d661aSToomas Soome #if __BSD_VISIBLE 521*4a5d661aSToomas Soome /* RFC 2292 additions */ 522*4a5d661aSToomas Soome #define CMSG_SPACE(l) (_ALIGN(sizeof(struct cmsghdr)) + _ALIGN(l)) 523*4a5d661aSToomas Soome #define CMSG_LEN(l) (_ALIGN(sizeof(struct cmsghdr)) + (l)) 524*4a5d661aSToomas Soome #endif 525*4a5d661aSToomas Soome 526*4a5d661aSToomas Soome #ifdef _KERNEL 527*4a5d661aSToomas Soome #define CMSG_ALIGN(n) _ALIGN(n) 528*4a5d661aSToomas Soome #endif 529*4a5d661aSToomas Soome 530*4a5d661aSToomas Soome /* "Socket"-level control message types: */ 531*4a5d661aSToomas Soome #define SCM_RIGHTS 0x01 /* access rights (array of int) */ 532*4a5d661aSToomas Soome #if __BSD_VISIBLE 533*4a5d661aSToomas Soome #define SCM_TIMESTAMP 0x02 /* timestamp (struct timeval) */ 534*4a5d661aSToomas Soome #define SCM_CREDS 0x03 /* process creds (struct cmsgcred) */ 535*4a5d661aSToomas Soome #define SCM_BINTIME 0x04 /* timestamp (struct bintime) */ 536*4a5d661aSToomas Soome #endif 537*4a5d661aSToomas Soome 538*4a5d661aSToomas Soome #if __BSD_VISIBLE 539*4a5d661aSToomas Soome /* 540*4a5d661aSToomas Soome * 4.3 compat sockaddr, move to compat file later 541*4a5d661aSToomas Soome */ 542*4a5d661aSToomas Soome struct osockaddr { 543*4a5d661aSToomas Soome unsigned short sa_family; /* address family */ 544*4a5d661aSToomas Soome char sa_data[14]; /* up to 14 bytes of direct address */ 545*4a5d661aSToomas Soome }; 546*4a5d661aSToomas Soome 547*4a5d661aSToomas Soome /* 548*4a5d661aSToomas Soome * 4.3-compat message header (move to compat file later). 549*4a5d661aSToomas Soome */ 550*4a5d661aSToomas Soome struct omsghdr { 551*4a5d661aSToomas Soome char *msg_name; /* optional address */ 552*4a5d661aSToomas Soome int msg_namelen; /* size of address */ 553*4a5d661aSToomas Soome struct iovec *msg_iov; /* scatter/gather array */ 554*4a5d661aSToomas Soome int msg_iovlen; /* # elements in msg_iov */ 555*4a5d661aSToomas Soome char *msg_accrights; /* access rights sent/received */ 556*4a5d661aSToomas Soome int msg_accrightslen; 557*4a5d661aSToomas Soome }; 558*4a5d661aSToomas Soome #endif 559*4a5d661aSToomas Soome 560*4a5d661aSToomas Soome /* 561*4a5d661aSToomas Soome * howto arguments for shutdown(2), specified by Posix.1g. 562*4a5d661aSToomas Soome */ 563*4a5d661aSToomas Soome #define SHUT_RD 0 /* shut down the reading side */ 564*4a5d661aSToomas Soome #define SHUT_WR 1 /* shut down the writing side */ 565*4a5d661aSToomas Soome #define SHUT_RDWR 2 /* shut down both sides */ 566*4a5d661aSToomas Soome 567*4a5d661aSToomas Soome #if __BSD_VISIBLE 568*4a5d661aSToomas Soome /* for SCTP */ 569*4a5d661aSToomas Soome /* we cheat and use the SHUT_XX defines for these */ 570*4a5d661aSToomas Soome #define PRU_FLUSH_RD SHUT_RD 571*4a5d661aSToomas Soome #define PRU_FLUSH_WR SHUT_WR 572*4a5d661aSToomas Soome #define PRU_FLUSH_RDWR SHUT_RDWR 573*4a5d661aSToomas Soome #endif 574*4a5d661aSToomas Soome 575*4a5d661aSToomas Soome 576*4a5d661aSToomas Soome #if __BSD_VISIBLE 577*4a5d661aSToomas Soome /* 578*4a5d661aSToomas Soome * sendfile(2) header/trailer struct 579*4a5d661aSToomas Soome */ 580*4a5d661aSToomas Soome struct sf_hdtr { 581*4a5d661aSToomas Soome struct iovec *headers; /* pointer to an array of header struct iovec's */ 582*4a5d661aSToomas Soome int hdr_cnt; /* number of header iovec's */ 583*4a5d661aSToomas Soome struct iovec *trailers; /* pointer to an array of trailer struct iovec's */ 584*4a5d661aSToomas Soome int trl_cnt; /* number of trailer iovec's */ 585*4a5d661aSToomas Soome }; 586*4a5d661aSToomas Soome 587*4a5d661aSToomas Soome /* 588*4a5d661aSToomas Soome * Sendfile-specific flag(s) 589*4a5d661aSToomas Soome */ 590*4a5d661aSToomas Soome #define SF_NODISKIO 0x00000001 591*4a5d661aSToomas Soome #define SF_MNOWAIT 0x00000002 /* obsolete */ 592*4a5d661aSToomas Soome #define SF_SYNC 0x00000004 593*4a5d661aSToomas Soome #define SF_NOCACHE 0x00000010 594*4a5d661aSToomas Soome #define SF_FLAGS(rh, flags) (((rh) << 16) | (flags)) 595*4a5d661aSToomas Soome 596*4a5d661aSToomas Soome #ifdef _KERNEL 597*4a5d661aSToomas Soome #define SFK_COMPAT 0x00000001 598*4a5d661aSToomas Soome #define SF_READAHEAD(flags) ((flags) >> 16) 599*4a5d661aSToomas Soome #endif /* _KERNEL */ 600*4a5d661aSToomas Soome 601*4a5d661aSToomas Soome /* 602*4a5d661aSToomas Soome * Sendmmsg/recvmmsg specific structure(s) 603*4a5d661aSToomas Soome */ 604*4a5d661aSToomas Soome struct mmsghdr { 605*4a5d661aSToomas Soome struct msghdr msg_hdr; /* message header */ 606*4a5d661aSToomas Soome ssize_t msg_len; /* message length */ 607*4a5d661aSToomas Soome }; 608*4a5d661aSToomas Soome #endif /* __BSD_VISIBLE */ 609*4a5d661aSToomas Soome 610*4a5d661aSToomas Soome #ifndef _KERNEL 611*4a5d661aSToomas Soome 612*4a5d661aSToomas Soome #include <sys/cdefs.h> 613*4a5d661aSToomas Soome 614*4a5d661aSToomas Soome __BEGIN_DECLS 615*4a5d661aSToomas Soome int accept(int, struct sockaddr * __restrict, socklen_t * __restrict); 616*4a5d661aSToomas Soome int bind(int, const struct sockaddr *, socklen_t); 617*4a5d661aSToomas Soome int connect(int, const struct sockaddr *, socklen_t); 618*4a5d661aSToomas Soome #if __BSD_VISIBLE 619*4a5d661aSToomas Soome int accept4(int, struct sockaddr * __restrict, socklen_t * __restrict, int); 620*4a5d661aSToomas Soome int bindat(int, int, const struct sockaddr *, socklen_t); 621*4a5d661aSToomas Soome int connectat(int, int, const struct sockaddr *, socklen_t); 622*4a5d661aSToomas Soome #endif 623*4a5d661aSToomas Soome int getpeername(int, struct sockaddr * __restrict, socklen_t * __restrict); 624*4a5d661aSToomas Soome int getsockname(int, struct sockaddr * __restrict, socklen_t * __restrict); 625*4a5d661aSToomas Soome int getsockopt(int, int, int, void * __restrict, socklen_t * __restrict); 626*4a5d661aSToomas Soome int listen(int, int); 627*4a5d661aSToomas Soome ssize_t recv(int, void *, size_t, int); 628*4a5d661aSToomas Soome ssize_t recvfrom(int, void *, size_t, int, struct sockaddr * __restrict, socklen_t * __restrict); 629*4a5d661aSToomas Soome ssize_t recvmsg(int, struct msghdr *, int); 630*4a5d661aSToomas Soome #if __BSD_VISIBLE 631*4a5d661aSToomas Soome struct timespec; 632*4a5d661aSToomas Soome ssize_t recvmmsg(int, struct mmsghdr * __restrict, size_t, int, 633*4a5d661aSToomas Soome const struct timespec * __restrict); 634*4a5d661aSToomas Soome #endif 635*4a5d661aSToomas Soome ssize_t send(int, const void *, size_t, int); 636*4a5d661aSToomas Soome ssize_t sendto(int, const void *, 637*4a5d661aSToomas Soome size_t, int, const struct sockaddr *, socklen_t); 638*4a5d661aSToomas Soome ssize_t sendmsg(int, const struct msghdr *, int); 639*4a5d661aSToomas Soome #if __BSD_VISIBLE 640*4a5d661aSToomas Soome int sendfile(int, int, off_t, size_t, struct sf_hdtr *, off_t *, int); 641*4a5d661aSToomas Soome ssize_t sendmmsg(int, struct mmsghdr * __restrict, size_t, int); 642*4a5d661aSToomas Soome int setfib(int); 643*4a5d661aSToomas Soome #endif 644*4a5d661aSToomas Soome int setsockopt(int, int, int, const void *, socklen_t); 645*4a5d661aSToomas Soome int shutdown(int, int); 646*4a5d661aSToomas Soome int sockatmark(int); 647*4a5d661aSToomas Soome int socket(int, int, int); 648*4a5d661aSToomas Soome int socketpair(int, int, int, int *); 649*4a5d661aSToomas Soome __END_DECLS 650*4a5d661aSToomas Soome 651*4a5d661aSToomas Soome #endif /* !_KERNEL */ 652*4a5d661aSToomas Soome 653*4a5d661aSToomas Soome #ifdef _KERNEL 654*4a5d661aSToomas Soome struct socket; 655*4a5d661aSToomas Soome 656*4a5d661aSToomas Soome struct tcpcb *so_sototcpcb(struct socket *so); 657*4a5d661aSToomas Soome struct inpcb *so_sotoinpcb(struct socket *so); 658*4a5d661aSToomas Soome struct sockbuf *so_sockbuf_snd(struct socket *); 659*4a5d661aSToomas Soome struct sockbuf *so_sockbuf_rcv(struct socket *); 660*4a5d661aSToomas Soome 661*4a5d661aSToomas Soome int so_state_get(const struct socket *); 662*4a5d661aSToomas Soome void so_state_set(struct socket *, int); 663*4a5d661aSToomas Soome 664*4a5d661aSToomas Soome int so_options_get(const struct socket *); 665*4a5d661aSToomas Soome void so_options_set(struct socket *, int); 666*4a5d661aSToomas Soome 667*4a5d661aSToomas Soome int so_error_get(const struct socket *); 668*4a5d661aSToomas Soome void so_error_set(struct socket *, int); 669*4a5d661aSToomas Soome 670*4a5d661aSToomas Soome int so_linger_get(const struct socket *); 671*4a5d661aSToomas Soome void so_linger_set(struct socket *, int); 672*4a5d661aSToomas Soome 673*4a5d661aSToomas Soome struct protosw *so_protosw_get(const struct socket *); 674*4a5d661aSToomas Soome void so_protosw_set(struct socket *, struct protosw *); 675*4a5d661aSToomas Soome 676*4a5d661aSToomas Soome void so_sorwakeup_locked(struct socket *so); 677*4a5d661aSToomas Soome void so_sowwakeup_locked(struct socket *so); 678*4a5d661aSToomas Soome 679*4a5d661aSToomas Soome void so_sorwakeup(struct socket *so); 680*4a5d661aSToomas Soome void so_sowwakeup(struct socket *so); 681*4a5d661aSToomas Soome 682*4a5d661aSToomas Soome void so_lock(struct socket *so); 683*4a5d661aSToomas Soome void so_unlock(struct socket *so); 684*4a5d661aSToomas Soome 685*4a5d661aSToomas Soome void so_listeners_apply_all(struct socket *so, void (*func)(struct socket *, void *), void *arg); 686*4a5d661aSToomas Soome 687*4a5d661aSToomas Soome #endif 688*4a5d661aSToomas Soome 689*4a5d661aSToomas Soome 690*4a5d661aSToomas Soome #endif /* !_SYS_SOCKET_H_ */ 691