| Commit | Line | Data |
|---|---|---|
| 984263bc MD |
1 | /* |
| 2 | * Copyright (c) 1982, 1985, 1986, 1988, 1993, 1994 | |
| 3 | * The Regents of the University of California. All rights reserved. | |
| 4 | * | |
| 5 | * Redistribution and use in source and binary forms, with or without | |
| 6 | * modification, are permitted provided that the following conditions | |
| 7 | * are met: | |
| 8 | * 1. Redistributions of source code must retain the above copyright | |
| 9 | * notice, this list of conditions and the following disclaimer. | |
| 10 | * 2. Redistributions in binary form must reproduce the above copyright | |
| 11 | * notice, this list of conditions and the following disclaimer in the | |
| 12 | * documentation and/or other materials provided with the distribution. | |
| 13 | * 3. All advertising materials mentioning features or use of this software | |
| 14 | * must display the following acknowledgement: | |
| 15 | * This product includes software developed by the University of | |
| 16 | * California, Berkeley and its contributors. | |
| 17 | * 4. Neither the name of the University nor the names of its contributors | |
| 18 | * may be used to endorse or promote products derived from this software | |
| 19 | * without specific prior written permission. | |
| 20 | * | |
| 21 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |
| 22 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| 23 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
| 24 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |
| 25 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
| 26 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
| 27 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
| 28 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
| 29 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
| 30 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
| 31 | * SUCH DAMAGE. | |
| 32 | * | |
| 33 | * @(#)socket.h 8.4 (Berkeley) 2/21/94 | |
| 34 | * $FreeBSD: src/sys/sys/socket.h,v 1.39.2.7 2001/07/03 11:02:01 ume Exp $ | |
| 35 | */ | |
| 36 | ||
| 37 | #ifndef _SYS_SOCKET_H_ | |
| 38 | #define _SYS_SOCKET_H_ | |
| 39 | ||
| c8b3626a SW |
40 | #include <sys/_iovec.h> |
| 41 | ||
| 03d6a592 MD |
42 | #ifndef _SYS_TYPES_H_ |
| 43 | #include <sys/types.h> | |
| 44 | #endif | |
| e2565a42 | 45 | #include <machine/stdint.h> |
| e2565a42 | 46 | |
| 984263bc MD |
47 | #define _NO_NAMESPACE_POLLUTION |
| 48 | #include <machine/param.h> | |
| 49 | #undef _NO_NAMESPACE_POLLUTION | |
| 50 | ||
| 51 | /* | |
| 52 | * Definitions related to sockets: types, address families, options. | |
| 53 | */ | |
| 54 | ||
| 55 | /* | |
| 56 | * Data types. | |
| 57 | */ | |
| e2565a42 MD |
58 | typedef __uint8_t sa_family_t; |
| 59 | ||
| a81b3ef3 JR |
60 | #ifndef _SOCKLEN_T_DECLARED |
| 61 | #define _SOCKLEN_T_DECLARED | |
| e2565a42 | 62 | typedef __socklen_t socklen_t; |
| 984263bc | 63 | #endif |
| e2565a42 | 64 | |
| 984263bc MD |
65 | |
| 66 | /* | |
| 67 | * Types | |
| 68 | */ | |
| 69 | #define SOCK_STREAM 1 /* stream socket */ | |
| 70 | #define SOCK_DGRAM 2 /* datagram socket */ | |
| 71 | #define SOCK_RAW 3 /* raw-protocol interface */ | |
| 72 | #define SOCK_RDM 4 /* reliably-delivered message */ | |
| 73 | #define SOCK_SEQPACKET 5 /* sequenced packet stream */ | |
| 74 | ||
| 75 | /* | |
| 76 | * Option flags per-socket. | |
| 77 | */ | |
| 78 | #define SO_DEBUG 0x0001 /* turn on debugging info recording */ | |
| 79 | #define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ | |
| 80 | #define SO_REUSEADDR 0x0004 /* allow local address reuse */ | |
| 81 | #define SO_KEEPALIVE 0x0008 /* keep connections alive */ | |
| 82 | #define SO_DONTROUTE 0x0010 /* just use interface addresses */ | |
| 83 | #define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */ | |
| 84 | #define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */ | |
| 85 | #define SO_LINGER 0x0080 /* linger on close if data present */ | |
| 86 | #define SO_OOBINLINE 0x0100 /* leave received OOB data in line */ | |
| 87 | #define SO_REUSEPORT 0x0200 /* allow local address & port reuse */ | |
| 88 | #define SO_TIMESTAMP 0x0400 /* timestamp received dgram traffic */ | |
| 2a0c7c52 | 89 | #define SO_UNUSED0800 0x0800 |
| 984263bc MD |
90 | #define SO_ACCEPTFILTER 0x1000 /* there is an accept filter */ |
| 91 | ||
| 92 | /* | |
| 93 | * Additional options, not kept in so_options. | |
| 94 | */ | |
| 95 | #define SO_SNDBUF 0x1001 /* send buffer size */ | |
| 96 | #define SO_RCVBUF 0x1002 /* receive buffer size */ | |
| 97 | #define SO_SNDLOWAT 0x1003 /* send low-water mark */ | |
| 98 | #define SO_RCVLOWAT 0x1004 /* receive low-water mark */ | |
| 99 | #define SO_SNDTIMEO 0x1005 /* send timeout */ | |
| 100 | #define SO_RCVTIMEO 0x1006 /* receive timeout */ | |
| 101 | #define SO_ERROR 0x1007 /* get error status and clear */ | |
| 102 | #define SO_TYPE 0x1008 /* get socket type */ | |
| 103 | /*efine SO_PRIVSTATE 0x1009 get/deny privileged state */ | |
| 755c519c | 104 | #define SO_SNDSPACE 0x100a /* get appr. send buffer free space */ |
| 984263bc MD |
105 | |
| 106 | /* | |
| 107 | * Structure used for manipulating linger option. | |
| 108 | */ | |
| 109 | struct linger { | |
| 110 | int l_onoff; /* option on/off */ | |
| 111 | int l_linger; /* linger time */ | |
| 112 | }; | |
| 113 | ||
| 114 | struct accept_filter_arg { | |
| 115 | char af_name[16]; | |
| 116 | char af_arg[256-16]; | |
| 117 | }; | |
| 118 | ||
| 119 | /* | |
| 120 | * Level number for (get/set)sockopt() to apply to socket itself. | |
| 121 | */ | |
| 122 | #define SOL_SOCKET 0xffff /* options for socket level */ | |
| 123 | ||
| 124 | /* | |
| 125 | * Address families. | |
| 126 | */ | |
| 127 | #define AF_UNSPEC 0 /* unspecified */ | |
| 128 | #define AF_LOCAL 1 /* local to host (pipes, portals) */ | |
| 129 | #define AF_UNIX AF_LOCAL /* backward compatibility */ | |
| 130 | #define AF_INET 2 /* internetwork: UDP, TCP, etc. */ | |
| 131 | #define AF_IMPLINK 3 /* arpanet imp addresses */ | |
| 132 | #define AF_PUP 4 /* pup protocols: e.g. BSP */ | |
| 133 | #define AF_CHAOS 5 /* mit CHAOS protocols */ | |
| 134 | #define AF_NS 6 /* XEROX NS protocols */ | |
| 135 | #define AF_ISO 7 /* ISO protocols */ | |
| 136 | #define AF_OSI AF_ISO | |
| 137 | #define AF_ECMA 8 /* European computer manufacturers */ | |
| 138 | #define AF_DATAKIT 9 /* datakit protocols */ | |
| 139 | #define AF_CCITT 10 /* CCITT protocols, X.25 etc */ | |
| 140 | #define AF_SNA 11 /* IBM SNA */ | |
| 141 | #define AF_DECnet 12 /* DECnet */ | |
| 142 | #define AF_DLI 13 /* DEC Direct data link interface */ | |
| 143 | #define AF_LAT 14 /* LAT */ | |
| 144 | #define AF_HYLINK 15 /* NSC Hyperchannel */ | |
| 145 | #define AF_APPLETALK 16 /* Apple Talk */ | |
| 146 | #define AF_ROUTE 17 /* Internal Routing Protocol */ | |
| 147 | #define AF_LINK 18 /* Link layer interface */ | |
| 148 | #define pseudo_AF_XTP 19 /* eXpress Transfer Protocol (no AF) */ | |
| 149 | #define AF_COIP 20 /* connection-oriented IP, aka ST II */ | |
| 150 | #define AF_CNT 21 /* Computer Network Technology */ | |
| 151 | #define pseudo_AF_RTIP 22 /* Help Identify RTIP packets */ | |
| 152 | #define AF_IPX 23 /* Novell Internet Protocol */ | |
| 153 | #define AF_SIP 24 /* Simple Internet Protocol */ | |
| 154 | #define pseudo_AF_PIP 25 /* Help Identify PIP packets */ | |
| 155 | #define AF_ISDN 26 /* Integrated Services Digital Network*/ | |
| 156 | #define AF_E164 AF_ISDN /* CCITT E.164 recommendation */ | |
| 157 | #define pseudo_AF_KEY 27 /* Internal key-management function */ | |
| 158 | #define AF_INET6 28 /* IPv6 */ | |
| 159 | #define AF_NATM 29 /* native ATM access */ | |
| 160 | #define AF_ATM 30 /* ATM */ | |
| 161 | #define pseudo_AF_HDRCMPLT 31 /* Used by BPF to not rewrite headers | |
| 162 | * in interface output routine | |
| 163 | */ | |
| 164 | #define AF_NETGRAPH 32 /* Netgraph sockets */ | |
| 0a9108eb | 165 | #define AF_BLUETOOTH 33 /* Bluetooth */ |
| 9b42cabe | 166 | #define AF_MPLS 34 /* Multi-Protocol Label Switching */ |
| c8f81b80 | 167 | #define AF_IEEE80211 35 /* IEEE 802.11 protocol */ |
| 984263bc | 168 | |
| c8f81b80 | 169 | #define AF_MAX 36 |
| 984263bc MD |
170 | |
| 171 | /* | |
| 172 | * Structure used by kernel to store most | |
| 173 | * addresses. | |
| 174 | */ | |
| 175 | struct sockaddr { | |
| e2565a42 | 176 | __uint8_t sa_len; /* total length */ |
| 984263bc MD |
177 | sa_family_t sa_family; /* address family */ |
| 178 | char sa_data[14]; /* actually longer; address value */ | |
| 179 | }; | |
| 180 | #define SOCK_MAXADDRLEN 255 /* longest possible addresses */ | |
| 181 | ||
| 0c3c561c | 182 | #ifdef _KERNEL |
| 03d6a592 MD |
183 | |
| 184 | #ifndef _SYS_LIBKERN_H_ | |
| 0c3c561c | 185 | #include <sys/libkern.h> /* for bcmp() */ |
| 03d6a592 | 186 | #endif |
| 0c3c561c JH |
187 | |
| 188 | static __inline boolean_t | |
| 590b8cd4 | 189 | sa_equal(const struct sockaddr *a1, const struct sockaddr *a2) |
| 0c3c561c JH |
190 | { |
| 191 | return (bcmp(a1, a2, a1->sa_len) == 0); | |
| 192 | } | |
| 193 | #endif | |
| 194 | ||
| 984263bc MD |
195 | /* |
| 196 | * Structure used by kernel to pass protocol | |
| 197 | * information in raw sockets. | |
| 198 | */ | |
| 199 | struct sockproto { | |
| e2565a42 MD |
200 | __uint16_t sp_family; /* address family */ |
| 201 | __uint16_t sp_protocol; /* protocol */ | |
| 984263bc MD |
202 | }; |
| 203 | ||
| 204 | /* | |
| 205 | * RFC 2553: protocol-independent placeholder for socket addresses | |
| 206 | */ | |
| 207 | #define _SS_MAXSIZE 128 | |
| 208 | #define _SS_ALIGNSIZE (sizeof(int64_t)) | |
| 15ef8e32 JS |
209 | #define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(unsigned char) - sizeof(sa_family_t)) |
| 210 | #define _SS_PAD2SIZE (_SS_MAXSIZE - sizeof(unsigned char) - sizeof(sa_family_t) - \ | |
| 984263bc MD |
211 | _SS_PAD1SIZE - _SS_ALIGNSIZE) |
| 212 | ||
| 213 | struct sockaddr_storage { | |
| e2565a42 | 214 | __uint8_t ss_len; /* address length */ |
| 984263bc MD |
215 | sa_family_t ss_family; /* address family */ |
| 216 | char __ss_pad1[_SS_PAD1SIZE]; | |
| e2565a42 | 217 | __int64_t __ss_align; /* force desired structure storage alignment */ |
| 984263bc MD |
218 | char __ss_pad2[_SS_PAD2SIZE]; |
| 219 | }; | |
| 220 | ||
| 221 | /* | |
| 222 | * Protocol families, same as address families for now. | |
| 223 | */ | |
| 224 | #define PF_UNSPEC AF_UNSPEC | |
| 225 | #define PF_LOCAL AF_LOCAL | |
| 226 | #define PF_UNIX PF_LOCAL /* backward compatibility */ | |
| 227 | #define PF_INET AF_INET | |
| 228 | #define PF_IMPLINK AF_IMPLINK | |
| 229 | #define PF_PUP AF_PUP | |
| 230 | #define PF_CHAOS AF_CHAOS | |
| 231 | #define PF_NS AF_NS | |
| 232 | #define PF_ISO AF_ISO | |
| 233 | #define PF_OSI AF_ISO | |
| 234 | #define PF_ECMA AF_ECMA | |
| 235 | #define PF_DATAKIT AF_DATAKIT | |
| 236 | #define PF_CCITT AF_CCITT | |
| 237 | #define PF_SNA AF_SNA | |
| 238 | #define PF_DECnet AF_DECnet | |
| 239 | #define PF_DLI AF_DLI | |
| 240 | #define PF_LAT AF_LAT | |
| 241 | #define PF_HYLINK AF_HYLINK | |
| 242 | #define PF_APPLETALK AF_APPLETALK | |
| 243 | #define PF_ROUTE AF_ROUTE | |
| 244 | #define PF_LINK AF_LINK | |
| 245 | #define PF_XTP pseudo_AF_XTP /* really just proto family, no AF */ | |
| 246 | #define PF_COIP AF_COIP | |
| 247 | #define PF_CNT AF_CNT | |
| 248 | #define PF_SIP AF_SIP | |
| 249 | #define PF_IPX AF_IPX /* same format as AF_NS */ | |
| 250 | #define PF_RTIP pseudo_AF_RTIP /* same format as AF_INET */ | |
| 251 | #define PF_PIP pseudo_AF_PIP | |
| 252 | #define PF_ISDN AF_ISDN | |
| 253 | #define PF_KEY pseudo_AF_KEY | |
| 254 | #define PF_INET6 AF_INET6 | |
| 255 | #define PF_NATM AF_NATM | |
| 256 | #define PF_ATM AF_ATM | |
| 257 | #define PF_NETGRAPH AF_NETGRAPH | |
| 0a9108eb | 258 | #define PF_BLUETOOTH AF_BLUETOOTH |
| 984263bc MD |
259 | |
| 260 | #define PF_MAX AF_MAX | |
| 261 | ||
| 262 | /* | |
| 263 | * Definitions for network related sysctl, CTL_NET. | |
| 264 | * | |
| 265 | * Second level is protocol family. | |
| 266 | * Third level is protocol number. | |
| 267 | * | |
| 268 | * Further levels are defined by the individual families below. | |
| 269 | */ | |
| 270 | #define NET_MAXID AF_MAX | |
| 271 | ||
| 272 | #define CTL_NET_NAMES { \ | |
| 273 | { 0, 0 }, \ | |
| 274 | { "unix", CTLTYPE_NODE }, \ | |
| 275 | { "inet", CTLTYPE_NODE }, \ | |
| 276 | { "implink", CTLTYPE_NODE }, \ | |
| 277 | { "pup", CTLTYPE_NODE }, \ | |
| 278 | { "chaos", CTLTYPE_NODE }, \ | |
| 279 | { "xerox_ns", CTLTYPE_NODE }, \ | |
| 280 | { "iso", CTLTYPE_NODE }, \ | |
| 281 | { "emca", CTLTYPE_NODE }, \ | |
| 282 | { "datakit", CTLTYPE_NODE }, \ | |
| 283 | { "ccitt", CTLTYPE_NODE }, \ | |
| 284 | { "ibm_sna", CTLTYPE_NODE }, \ | |
| 285 | { "decnet", CTLTYPE_NODE }, \ | |
| 286 | { "dec_dli", CTLTYPE_NODE }, \ | |
| 287 | { "lat", CTLTYPE_NODE }, \ | |
| 288 | { "hylink", CTLTYPE_NODE }, \ | |
| 289 | { "appletalk", CTLTYPE_NODE }, \ | |
| 290 | { "route", CTLTYPE_NODE }, \ | |
| 291 | { "link_layer", CTLTYPE_NODE }, \ | |
| 292 | { "xtp", CTLTYPE_NODE }, \ | |
| 293 | { "coip", CTLTYPE_NODE }, \ | |
| 294 | { "cnt", CTLTYPE_NODE }, \ | |
| 295 | { "rtip", CTLTYPE_NODE }, \ | |
| 296 | { "ipx", CTLTYPE_NODE }, \ | |
| 297 | { "sip", CTLTYPE_NODE }, \ | |
| 298 | { "pip", CTLTYPE_NODE }, \ | |
| 299 | { "isdn", CTLTYPE_NODE }, \ | |
| 300 | { "key", CTLTYPE_NODE }, \ | |
| 301 | { "inet6", CTLTYPE_NODE }, \ | |
| 302 | { "natm", CTLTYPE_NODE }, \ | |
| 303 | { "atm", CTLTYPE_NODE }, \ | |
| 304 | { "hdrcomplete", CTLTYPE_NODE }, \ | |
| 305 | { "netgraph", CTLTYPE_NODE }, \ | |
| 0a9108eb | 306 | { "bluetooth", CTLTYPE_NODE}, \ |
| 984263bc MD |
307 | } |
| 308 | ||
| 309 | /* | |
| 310 | * PF_ROUTE - Routing table | |
| 311 | * | |
| 312 | * Three additional levels are defined: | |
| 313 | * Fourth: address family, 0 is wildcard | |
| 314 | * Fifth: type of info, defined below | |
| 315 | * Sixth: flag(s) to mask with for NET_RT_FLAGS | |
| 316 | */ | |
| 317 | #define NET_RT_DUMP 1 /* dump; may limit to a.f. */ | |
| 318 | #define NET_RT_FLAGS 2 /* by flags, e.g. RESOLVING */ | |
| 319 | #define NET_RT_IFLIST 3 /* survey interface list */ | |
| 320 | #define NET_RT_MAXID 4 | |
| 321 | ||
| 322 | #define CTL_NET_RT_NAMES { \ | |
| 323 | { 0, 0 }, \ | |
| 324 | { "dump", CTLTYPE_STRUCT }, \ | |
| 325 | { "flags", CTLTYPE_STRUCT }, \ | |
| 326 | { "iflist", CTLTYPE_STRUCT }, \ | |
| 327 | } | |
| 328 | ||
| 329 | /* | |
| 330 | * Maximum queue length specifiable by listen. | |
| 331 | */ | |
| 332 | #define SOMAXCONN 128 | |
| 333 | ||
| 334 | /* | |
| b4354d10 MD |
335 | * Maximum setsockopt buffer size |
| 336 | */ | |
| 337 | #define SOMAXOPT_SIZE 65536 | |
| 338 | ||
| 339 | /* | |
| 984263bc MD |
340 | * Message header for recvmsg and sendmsg calls. |
| 341 | * Used value-result for recvmsg, value only for sendmsg. | |
| 342 | */ | |
| 343 | struct msghdr { | |
| 344 | void *msg_name; /* optional address */ | |
| 345 | socklen_t msg_namelen; /* size of address */ | |
| 346 | struct iovec *msg_iov; /* scatter/gather array */ | |
| 347 | int msg_iovlen; /* # elements in msg_iov */ | |
| 348 | void *msg_control; /* ancillary data, see below */ | |
| 349 | socklen_t msg_controllen; /* ancillary data buffer len */ | |
| 350 | int msg_flags; /* flags on received message */ | |
| 351 | }; | |
| 352 | ||
| 9ba76b73 MD |
353 | #define MSG_OOB 0x00000001 /* process out-of-band data */ |
| 354 | #define MSG_PEEK 0x00000002 /* peek at incoming message */ | |
| 355 | #define MSG_DONTROUTE 0x00000004 /* send without using routing tables */ | |
| 356 | #define MSG_EOR 0x00000008 /* data completes record */ | |
| 357 | #define MSG_TRUNC 0x00000010 /* data discarded before delivery */ | |
| 358 | #define MSG_CTRUNC 0x00000020 /* control data lost before delivery */ | |
| 359 | #define MSG_WAITALL 0x00000040 /* wait for full request or error */ | |
| 360 | #define MSG_DONTWAIT 0x00000080 /* this message should be nonblocking */ | |
| 361 | #define MSG_EOF 0x00000100 /* data completes connection */ | |
| 362 | #define MSG_NOTIFICATION 0x00000200 /* notification message */ | |
| e2c70b77 | 363 | #define MSG_NOSIGNAL 0x00000400 /* No SIGPIPE to unconnected socket stream */ |
| 9ba76b73 MD |
364 | |
| 365 | /* | |
| 366 | * These override FIONBIO. MSG_FNONBLOCKING is functionally equivalent to | |
| 367 | * MSG_DONTWAIT. | |
| 368 | */ | |
| 369 | #define MSG_FBLOCKING 0x00010000 /* force blocking operation */ | |
| 370 | #define MSG_FNONBLOCKING 0x00020000 /* force non-blocking operation */ | |
| 371 | ||
| 372 | #define MSG_FMASK 0xFFFF0000 /* force mask */ | |
| 984263bc MD |
373 | |
| 374 | /* | |
| 375 | * Header for ancillary data objects in msg_control buffer. | |
| 376 | * Used for additional information with/about a datagram | |
| 377 | * not expressible by flags. The format is a sequence | |
| 378 | * of message elements headed by cmsghdr structures. | |
| 379 | */ | |
| 380 | struct cmsghdr { | |
| 381 | socklen_t cmsg_len; /* data byte count, including hdr */ | |
| 382 | int cmsg_level; /* originating protocol */ | |
| 383 | int cmsg_type; /* protocol-specific type */ | |
| 384 | /* followed by u_char cmsg_data[]; */ | |
| 385 | }; | |
| 386 | ||
| 387 | /* | |
| 388 | * While we may have more groups than this, the cmsgcred struct must | |
| 389 | * be able to fit in an mbuf, and NGROUPS_MAX is too large to allow | |
| 390 | * this. | |
| 391 | */ | |
| 392 | #define CMGROUP_MAX 16 | |
| 393 | ||
| 394 | /* | |
| 395 | * Credentials structure, used to verify the identity of a peer | |
| 396 | * process that has sent us a message. This is allocated by the | |
| 397 | * peer process but filled in by the kernel. This prevents the | |
| 398 | * peer from lying about its identity. (Note that cmcred_groups[0] | |
| 399 | * is the effective GID.) | |
| 400 | */ | |
| 401 | struct cmsgcred { | |
| 402 | pid_t cmcred_pid; /* PID of sending process */ | |
| 403 | uid_t cmcred_uid; /* real UID of sending process */ | |
| 404 | uid_t cmcred_euid; /* effective UID of sending process */ | |
| 405 | gid_t cmcred_gid; /* real GID of sending process */ | |
| 406 | short cmcred_ngroups; /* number or groups */ | |
| 407 | gid_t cmcred_groups[CMGROUP_MAX]; /* groups */ | |
| 408 | }; | |
| 409 | ||
| 5e820aca VS |
410 | /* Alignment requirement for CMSG struct manipulation */ |
| 411 | #define _CMSG_ALIGN(n) (((n) + 3) & ~3) | |
| 412 | ||
| 413 | #ifdef _KERNEL | |
| 414 | #define CMSG_ALIGN(n) _CMSG_ALIGN(n) | |
| 415 | #endif | |
| 416 | ||
| 984263bc | 417 | /* given pointer to struct cmsghdr, return pointer to data */ |
| 15ef8e32 | 418 | #define CMSG_DATA(cmsg) ((unsigned char *)(cmsg) + \ |
| 5e820aca | 419 | _CMSG_ALIGN(sizeof(struct cmsghdr))) |
| 984263bc MD |
420 | |
| 421 | /* given pointer to struct cmsghdr, return pointer to next cmsghdr */ | |
| 422 | #define CMSG_NXTHDR(mhdr, cmsg) \ | |
| 5e820aca VS |
423 | (((caddr_t)(cmsg) + _CMSG_ALIGN((cmsg)->cmsg_len) + \ |
| 424 | _CMSG_ALIGN(sizeof(struct cmsghdr)) > \ | |
| 984263bc | 425 | (caddr_t)(mhdr)->msg_control + (mhdr)->msg_controllen) ? \ |
| 2038fb68 | 426 | NULL : \ |
| 5e820aca | 427 | (struct cmsghdr *)((caddr_t)(cmsg) + _CMSG_ALIGN((cmsg)->cmsg_len))) |
| 984263bc | 428 | |
| e4c3292d SW |
429 | /* |
| 430 | * RFC 2292 requires to check msg_controllen, in case that the kernel returns | |
| 431 | * an empty list for some reasons. | |
| 432 | */ | |
| 433 | #define CMSG_FIRSTHDR(mhdr) \ | |
| 434 | ((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \ | |
| 435 | (struct cmsghdr *)(mhdr)->msg_control : \ | |
| 2038fb68 | 436 | NULL) |
| 984263bc MD |
437 | |
| 438 | /* RFC 2292 additions */ | |
| 439 | ||
| 5e820aca VS |
440 | #define CMSG_SPACE(l) (_CMSG_ALIGN(sizeof(struct cmsghdr)) + _CMSG_ALIGN(l)) |
| 441 | #define CMSG_LEN(l) (_CMSG_ALIGN(sizeof(struct cmsghdr)) + (l)) | |
| 984263bc MD |
442 | |
| 443 | /* "Socket"-level control message types: */ | |
| 444 | #define SCM_RIGHTS 0x01 /* access rights (array of int) */ | |
| 445 | #define SCM_TIMESTAMP 0x02 /* timestamp (struct timeval) */ | |
| 446 | #define SCM_CREDS 0x03 /* process creds (struct cmsgcred) */ | |
| 447 | ||
| 448 | /* | |
| 984263bc MD |
449 | * howto arguments for shutdown(2), specified by Posix.1g. |
| 450 | */ | |
| 451 | #define SHUT_RD 0 /* shut down the reading side */ | |
| 452 | #define SHUT_WR 1 /* shut down the writing side */ | |
| 453 | #define SHUT_RDWR 2 /* shut down both sides */ | |
| 454 | ||
| 455 | /* | |
| 456 | * sendfile(2) header/trailer struct | |
| 457 | */ | |
| 458 | struct sf_hdtr { | |
| 459 | struct iovec *headers; /* pointer to an array of header struct iovec's */ | |
| 460 | int hdr_cnt; /* number of header iovec's */ | |
| 461 | struct iovec *trailers; /* pointer to an array of trailer struct iovec's */ | |
| 462 | int trl_cnt; /* number of trailer iovec's */ | |
| 463 | }; | |
| 464 | ||
| 91be174d | 465 | #if !defined(_KERNEL) || defined(_KERNEL_VIRTUAL) |
| 984263bc | 466 | |
| 03d6a592 | 467 | #ifndef _SYS_CDEFS_H_ |
| 984263bc | 468 | #include <sys/cdefs.h> |
| 03d6a592 | 469 | #endif |
| 984263bc MD |
470 | |
| 471 | __BEGIN_DECLS | |
| b153f746 | 472 | int accept (int, struct sockaddr *, socklen_t *); |
| b09fd398 | 473 | int extaccept (int, int, struct sockaddr *, socklen_t *); |
| b153f746 RG |
474 | int bind (int, const struct sockaddr *, socklen_t); |
| 475 | int connect (int, const struct sockaddr *, socklen_t); | |
| b09fd398 | 476 | int extconnect (int, int, struct sockaddr *, socklen_t); |
| b153f746 RG |
477 | int getpeername (int, struct sockaddr *, socklen_t *); |
| 478 | int getsockname (int, struct sockaddr *, socklen_t *); | |
| 479 | int getsockopt (int, int, int, void *, socklen_t *); | |
| 480 | int listen (int, int); | |
| 481 | ssize_t recv (int, void *, size_t, int); | |
| 482 | ssize_t recvfrom (int, void *, size_t, int, struct sockaddr *, socklen_t *); | |
| 483 | ssize_t recvmsg (int, struct msghdr *, int); | |
| 484 | ssize_t send (int, const void *, size_t, int); | |
| 485 | ssize_t sendto (int, const void *, | |
| 486 | size_t, int, const struct sockaddr *, socklen_t); | |
| 487 | ssize_t sendmsg (int, const struct msghdr *, int); | |
| 488 | int sendfile (int, int, off_t, size_t, struct sf_hdtr *, off_t *, int); | |
| 489 | int setsockopt (int, int, int, const void *, socklen_t); | |
| 490 | int shutdown (int, int); | |
| b153f746 RG |
491 | int socketpair (int, int, int, int *); |
| 492 | ||
| 493 | void pfctlinput (int, struct sockaddr *); | |
| 984263bc MD |
494 | __END_DECLS |
| 495 | ||
| 496 | #endif /* !_KERNEL */ | |
| 497 | ||
| 3f4985cd | 498 | #if !defined(_KERNEL) || defined(_KERNEL_VIRTUAL) |
| e0413f11 SZ |
499 | #ifndef _SYS_CDEFS_H_ |
| 500 | #include <sys/cdefs.h> | |
| 501 | #endif | |
| 502 | ||
| 503 | __BEGIN_DECLS | |
| 3f4985cd | 504 | int socket (int, int, int); |
| e0413f11 | 505 | __END_DECLS |
| 3f4985cd SZ |
506 | #endif /* !_KERNEL || _KERNEL_VIRTUAL */ |
| 507 | ||
| 984263bc | 508 | #endif /* !_SYS_SOCKET_H_ */ |