this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at vchroot 1343 lines 47 kB view raw
1/* 2 * Copyright (c) 2000-2015 Apple Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28/* Copyright (c) 1998, 1999 Apple Computer, Inc. All Rights Reserved */ 29/* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */ 30/* 31 * Copyright (c) 1982, 1985, 1986, 1988, 1993, 1994 32 * The Regents of the University of California. All rights reserved. 33 * 34 * Redistribution and use in source and binary forms, with or without 35 * modification, are permitted provided that the following conditions 36 * are met: 37 * 1. Redistributions of source code must retain the above copyright 38 * notice, this list of conditions and the following disclaimer. 39 * 2. Redistributions in binary form must reproduce the above copyright 40 * notice, this list of conditions and the following disclaimer in the 41 * documentation and/or other materials provided with the distribution. 42 * 3. All advertising materials mentioning features or use of this software 43 * must display the following acknowledgement: 44 * This product includes software developed by the University of 45 * California, Berkeley and its contributors. 46 * 4. Neither the name of the University nor the names of its contributors 47 * may be used to endorse or promote products derived from this software 48 * without specific prior written permission. 49 * 50 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 51 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 52 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 53 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 54 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 55 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 56 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 57 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 58 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 59 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 60 * SUCH DAMAGE. 61 * 62 * @(#)socket.h 8.4 (Berkeley) 2/21/94 63 * $FreeBSD: src/sys/sys/socket.h,v 1.39.2.7 2001/07/03 11:02:01 ume Exp $ 64 */ 65/* 66 * NOTICE: This file was modified by SPARTA, Inc. in 2005 to introduce 67 * support for mandatory and extensible security protections. This notice 68 * is included in support of clause 2.2 (b) of the Apple Public License, 69 * Version 2.0. 70 */ 71 72#ifndef _SYS_SOCKET_H_ 73#define _SYS_SOCKET_H_ 74 75#include <sys/types.h> 76#include <sys/cdefs.h> 77#include <machine/_param.h> 78 79#ifdef PRIVATE 80#include <sys/param.h> 81#include <uuid/uuid.h> 82#endif /* PRIVATE */ 83 84#ifndef KERNEL 85#include <Availability.h> 86#endif 87 88/* 89 * Definitions related to sockets: types, address families, options. 90 */ 91 92/* 93 * Data types. 94 */ 95 96#include <sys/_types/_gid_t.h> 97#include <sys/_types/_off_t.h> 98#include <sys/_types/_pid_t.h> 99#include <sys/_types/_sa_family_t.h> 100#include <sys/_types/_socklen_t.h> 101 102/* XXX Not explicitly defined by POSIX, but function return types are */ 103#include <sys/_types/_size_t.h> 104 105/* XXX Not explicitly defined by POSIX, but function return types are */ 106#include <sys/_types/_ssize_t.h> 107 108/* 109 * [XSI] The iovec structure shall be defined as described in <sys/uio.h>. 110 */ 111#include <sys/_types/_iovec_t.h> 112 113#ifdef PRIVATE 114#define SO_TCDBG_PID 0x01 /* Set/get traffic class for PID */ 115#define SO_TCDBG_PNAME 0x02 /* Set/get traffic class for processes of that name */ 116#define SO_TCDBG_PURGE 0x04 /* Purge entries for unused PIDs */ 117#define SO_TCDBG_FLUSH 0x08 /* Flush all entries */ 118#define SO_TCDBG_COUNT 0x10 /* Get count of entries */ 119#define SO_TCDBG_LIST 0x20 /* List entries */ 120#define SO_TCDBG_DELETE 0x40 /* Delete a process entry */ 121#define SO_TCDBG_TCFLUSH_PID 0x80 /* Flush traffic class for PID */ 122 123struct so_tcdbg { 124 u_int32_t so_tcdbg_cmd; 125 int32_t so_tcdbg_tclass; 126 u_int32_t so_tcdbg_count; 127 pid_t so_tcdbg_pid; 128 char so_tcdbg_pname[MAXCOMLEN + 1]; 129 int32_t so_tcdbg_opportunistic; /* -1: unspecified, 0: off, 1: on, other: errors */ 130}; 131#endif /* PRIVATE */ 132 133/* 134 * Types 135 */ 136#define SOCK_STREAM 1 /* stream socket */ 137#define SOCK_DGRAM 2 /* datagram socket */ 138#define SOCK_RAW 3 /* raw-protocol interface */ 139#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 140#define SOCK_RDM 4 /* reliably-delivered message */ 141#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ 142#define SOCK_SEQPACKET 5 /* sequenced packet stream */ 143 144/* 145 * Option flags per-socket. 146 */ 147#define SO_DEBUG 0x0001 /* turn on debugging info recording */ 148#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ 149#define SO_REUSEADDR 0x0004 /* allow local address reuse */ 150#define SO_KEEPALIVE 0x0008 /* keep connections alive */ 151#define SO_DONTROUTE 0x0010 /* just use interface addresses */ 152#define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */ 153#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 154#define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */ 155#define SO_LINGER 0x0080 /* linger on close if data present (in ticks) */ 156#else 157#define SO_LINGER 0x1080 /* linger on close if data present (in seconds) */ 158#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ 159#define SO_OOBINLINE 0x0100 /* leave received OOB data in line */ 160#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 161#define SO_REUSEPORT 0x0200 /* allow local address & port reuse */ 162#define SO_TIMESTAMP 0x0400 /* timestamp received dgram traffic */ 163#define SO_TIMESTAMP_MONOTONIC 0x0800 /* Monotonically increasing timestamp on rcvd dgram */ 164#ifndef __APPLE__ 165#define SO_ACCEPTFILTER 0x1000 /* there is an accept filter */ 166#else 167#define SO_DONTTRUNC 0x2000 /* APPLE: Retain unread data */ 168 /* (ATOMIC proto) */ 169#define SO_WANTMORE 0x4000 /* APPLE: Give hint when more data ready */ 170#define SO_WANTOOBFLAG 0x8000 /* APPLE: Want OOB in MSG_FLAG on receive */ 171 172#ifdef PRIVATE 173#define SO_NOWAKEFROMSLEEP 0x10000 /* Don't wake for traffic to this socket */ 174#endif 175 176#endif /* (!__APPLE__) */ 177#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ 178 179/* 180 * Additional options, not kept in so_options. 181 */ 182#define SO_SNDBUF 0x1001 /* send buffer size */ 183#define SO_RCVBUF 0x1002 /* receive buffer size */ 184#define SO_SNDLOWAT 0x1003 /* send low-water mark */ 185#define SO_RCVLOWAT 0x1004 /* receive low-water mark */ 186#define SO_SNDTIMEO 0x1005 /* send timeout */ 187#define SO_RCVTIMEO 0x1006 /* receive timeout */ 188#define SO_ERROR 0x1007 /* get error status and clear */ 189#define SO_TYPE 0x1008 /* get socket type */ 190#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 191/*efine SO_PRIVSTATE 0x1009 get/deny privileged state */ 192#define SO_LABEL 0x1010 /* socket's MAC label */ 193#define SO_PEERLABEL 0x1011 /* socket's peer MAC label */ 194#ifdef __APPLE__ 195#define SO_NREAD 0x1020 /* APPLE: get 1st-packet byte count */ 196#define SO_NKE 0x1021 /* APPLE: Install socket-level NKE */ 197#define SO_NOSIGPIPE 0x1022 /* APPLE: No SIGPIPE on EPIPE */ 198#define SO_NOADDRERR 0x1023 /* APPLE: Returns EADDRNOTAVAIL when src is not available anymore */ 199#define SO_NWRITE 0x1024 /* APPLE: Get number of bytes currently in send socket buffer */ 200#define SO_REUSESHAREUID 0x1025 /* APPLE: Allow reuse of port/socket by different userids */ 201#ifdef __APPLE_API_PRIVATE 202#define SO_NOTIFYCONFLICT 0x1026 /* APPLE: send notification if there is a bind on a port which is already in use */ 203#define SO_UPCALLCLOSEWAIT 0x1027 /* APPLE: block on close until an upcall returns */ 204#endif 205#define SO_LINGER_SEC 0x1080 /* linger on close if data present (in seconds) */ 206#ifdef PRIVATE 207#define SO_RESTRICTIONS 0x1081 /* APPLE: deny flag set */ 208#define SO_RESTRICT_DENY_IN 0x1 /* deny inbound (trapdoor) */ 209#define SO_RESTRICT_DENY_OUT 0x2 /* deny outbound (trapdoor) */ 210#define SO_RESTRICT_DENY_CELLULAR 0x4 /* deny use of cellular (trapdoor) */ 211#define SO_RESTRICT_DENY_EXPENSIVE 0x8 /* deny use of expensive if (trapdoor)*/ 212#endif /* PRIVATE */ 213#define SO_RANDOMPORT 0x1082 /* APPLE: request local port randomization */ 214#define SO_NP_EXTENSIONS 0x1083 /* To turn off some POSIX behavior */ 215#endif 216 217#ifdef PRIVATE 218#define SO_EXECPATH 0x1085 /* Application Firewall Socket option */ 219/* 220 * Traffic service class definitions (lowest to highest): 221 * 222 * SO_TC_BK_SYS 223 * "Background System-Initiated", high delay tolerant, high loss 224 * tolerant, elastic flow, variable size & long-lived. E.g: system- 225 * initiated iCloud synching or Time Capsule backup, for which there 226 * is no progress feedbacks. 227 * 228 * SO_TC_BK 229 * "Background", user-initiated, high delay tolerant, high loss tolerant, 230 * elastic flow, variable size. E.g. user-initiated iCloud synching or 231 * Time Capsule backup; or traffics of background applications, for which 232 * there is some progress feedbacks. 233 * 234 * SO_TC_BE 235 * "Best Effort", unclassified/standard. This is the default service 236 * class; pretty much a mix of everything. 237 * 238 * SO_TC_RD 239 * "Responsive Data", a notch higher than "Best Effort", medium delay 240 * tolerant, elastic & inelastic flow, bursty, long-lived. E.g. email, 241 * instant messaging, for which there is a sense of interactivity and 242 * urgency (user waiting for output). 243 * 244 * SO_TC_OAM 245 * "Operations, Administration, and Management", medium delay tolerant, 246 * low-medium loss tolerant, elastic & inelastic flows, variable size. 247 * E.g. VPN tunnels. 248 * 249 * SO_TC_AV 250 * "Multimedia Audio/Video Streaming", medium delay tolerant, low-medium 251 * loss tolerant, elastic flow, constant packet interval, variable rate & 252 * size. E.g. AirPlay playback (both video and audio). 253 * 254 * SO_TC_RV 255 * "Responsive Multimedia Audio/Video", low delay tolerant, low-medium 256 * loss tolerant, elastic flow, variable packet interval, rate and size. 257 * E.g. AirPlay mirroring, screen sharing. 258 * 259 * SO_TC_VI 260 * "Interactive Video", low delay tolerant, low-medium loss tolerant, 261 * elastic flow, constant packet interval, variable rate & size. E.g. 262 * FaceTime video. 263 * 264 * SO_TC_VO 265 * "Interactive Voice", low delay tolerant, low loss tolerant, inelastic 266 * flow, constant packet rate, somewhat fixed size. E.g. VoIP including 267 * FaceTime audio. 268 * 269 * SO_TC_CTL 270 * "Network Control", low delay tolerant, low loss tolerant, inelastic 271 * flow, rate is bursty but short, variable size. E.g. DNS queries; 272 * certain types of locally-originated ICMP, ICMPv6; IGMP/MLD join/leave, 273 * ARP. 274 */ 275#define SO_TRAFFIC_CLASS 0x1086 /* Traffic service class (int) */ 276#define SO_TC_BK_SYS 100 /* lowest class */ 277#define SO_TC_BK 200 278#define SO_TC_BE 0 279#define SO_TC_RD 300 280#define SO_TC_OAM 400 281#define SO_TC_AV 500 282#define SO_TC_RV 600 283#define SO_TC_VI 700 284#define SO_TC_VO 800 285#define SO_TC_CTL 900 /* highest class */ 286#define SO_TC_MAX 10 /* Total # of traffic classes */ 287#ifdef XNU_KERNEL_PRIVATE 288#define _SO_TC_BK 1 /* deprecated */ 289#define _SO_TC_VI 2 /* deprecated */ 290#define _SO_TC_VO 3 /* deprecated */ 291#define _SO_TC_MAX 4 /* deprecated */ 292 293#define SO_VALID_TC(c) \ 294 (c == SO_TC_BK_SYS || c == SO_TC_BK || c == SO_TC_BE || \ 295 c == SO_TC_RD || c == SO_TC_OAM || c == SO_TC_AV || \ 296 c == SO_TC_RV || c == SO_TC_VI || c == SO_TC_VO || c == SO_TC_CTL) 297#endif /* XNU_KERNEL_PRIVATE */ 298 299/* Background socket configuration flags */ 300#define TRAFFIC_MGT_SO_BACKGROUND 0x0001 /* background socket */ 301#define TRAFFIC_MGT_TCP_RECVBG 0x0002 /* Only TCP sockets, receiver throttling */ 302 303#define SO_RECV_TRAFFIC_CLASS 0x1087 /* Receive traffic class (bool)*/ 304#define SO_TRAFFIC_CLASS_DBG 0x1088 /* Debug traffic class (struct so_tcdbg) */ 305#define SO_TRAFFIC_CLASS_STATS 0x1089 /* Traffic class statistics */ 306#define SO_PRIVILEGED_TRAFFIC_CLASS 0x1090 /* Privileged traffic class (bool) */ 307#define SO_DEFUNCTOK 0x1100 /* can be defunct'd */ 308#define SO_ISDEFUNCT 0x1101 /* get defunct status */ 309 310#define SO_OPPORTUNISTIC 0x1102 /* deprecated; use SO_TRAFFIC_CLASS */ 311 312/* 313 * SO_FLUSH flushes any unsent data generated by a given socket. It takes 314 * an integer parameter, which can be any of the SO_TC traffic class values, 315 * or the special SO_TC_ALL value. 316 */ 317#define SO_FLUSH 0x1103 /* flush unsent data (int) */ 318#define SO_TC_ALL (-1) 319 320#define SO_RECV_ANYIF 0x1104 /* unrestricted inbound processing */ 321#define SO_TRAFFIC_MGT_BACKGROUND 0x1105 /* Background traffic management */ 322 323#define SO_FLOW_DIVERT_TOKEN 0x1106 /* flow divert token */ 324 325#define SO_DELEGATED 0x1107 /* set socket as delegate (pid_t) */ 326#define SO_DELEGATED_UUID 0x1108 /* set socket as delegate (uuid_t) */ 327#define SO_NECP_ATTRIBUTES 0x1109 /* NECP socket attributes (domain, account, etc.) */ 328#define SO_CFIL_SOCK_ID 0x1110 /* get content filter socket ID (cfil_sock_id_t) */ 329#if MPTCP 330#define SO_MPTCP_FASTJOIN 0x1111 /* fast join MPTCP */ 331#endif /* MPTCP */ 332#endif /* PRIVATE */ 333#define SO_NUMRCVPKT 0x1112 /* number of datagrams in receive socket buffer */ 334#ifdef PRIVATE 335#define SO_AWDL_UNRESTRICTED 0x1113 /* try to use AWDL in restricted mode */ 336#define SO_EXTENDED_BK_IDLE 0x1114 /* extended time to keep socket idle after app is suspended (int) */ 337#endif /* PRIVATE */ 338 339typedef __uint32_t sae_associd_t; 340#define SAE_ASSOCID_ANY 0 341#define SAE_ASSOCID_ALL ((sae_associd_t)(-1ULL)) 342 343typedef __uint32_t sae_connid_t; 344#define SAE_CONNID_ANY 0 345#define SAE_CONNID_ALL ((sae_connid_t)(-1ULL)) 346 347/* connectx() flag parameters */ 348#define CONNECT_RESUME_ON_READ_WRITE 0x1 /* resume connect() on read/write */ 349#define CONNECT_DATA_IDEMPOTENT 0x2 /* data is idempotent */ 350 351/* sockaddr endpoints */ 352typedef struct sa_endpoints { 353 unsigned int sae_srcif; /* optional source interface */ 354 struct sockaddr *sae_srcaddr; /* optional source address */ 355 socklen_t sae_srcaddrlen; /* size of source address */ 356 struct sockaddr *sae_dstaddr; /* destination address */ 357 socklen_t sae_dstaddrlen; /* size of destination address */ 358} sa_endpoints_t; 359#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ 360 361/* 362 * Structure used for manipulating linger option. 363 */ 364struct linger { 365 int l_onoff; /* option on/off */ 366 int l_linger; /* linger time */ 367}; 368 369#ifndef __APPLE__ 370struct accept_filter_arg { 371 char af_name[16]; 372 char af_arg[256-16]; 373}; 374#endif 375 376#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 377#ifdef __APPLE__ 378 379/* 380 * Structure to control non-portable Sockets extension to POSIX 381 */ 382struct so_np_extensions { 383 u_int32_t npx_flags; 384 u_int32_t npx_mask; 385}; 386 387#define SONPX_SETOPTSHUT 0x000000001 /* flag for allowing setsockopt after shutdown */ 388 389 390#ifdef KERNEL_PRIVATE 391#define SONPX_MASK_VALID (SONPX_SETOPTSHUT) 392#define IS_SO_TC_BACKGROUND(_tc_) ((_tc_) == SO_TC_BK || (_tc_) == SO_TC_BK_SYS) 393#define IS_SO_TC_BACKGROUNDSYSTEM(_tc_) ((_tc_) == SO_TC_BK_SYS) 394#endif /* KERNEL_PRIVATE */ 395 396#endif 397#endif 398 399/* 400 * Level number for (get/set)sockopt() to apply to socket itself. 401 */ 402#define SOL_SOCKET 0xffff /* options for socket level */ 403 404 405/* 406 * Address families. 407 */ 408#define AF_UNSPEC 0 /* unspecified */ 409#define AF_UNIX 1 /* local to host (pipes) */ 410#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 411#define AF_LOCAL AF_UNIX /* backward compatibility */ 412#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ 413#define AF_INET 2 /* internetwork: UDP, TCP, etc. */ 414#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 415#define AF_IMPLINK 3 /* arpanet imp addresses */ 416#define AF_PUP 4 /* pup protocols: e.g. BSP */ 417#define AF_CHAOS 5 /* mit CHAOS protocols */ 418#define AF_NS 6 /* XEROX NS protocols */ 419#define AF_ISO 7 /* ISO protocols */ 420#define AF_OSI AF_ISO 421#define AF_ECMA 8 /* European computer manufacturers */ 422#define AF_DATAKIT 9 /* datakit protocols */ 423#define AF_CCITT 10 /* CCITT protocols, X.25 etc */ 424#define AF_SNA 11 /* IBM SNA */ 425#define AF_DECnet 12 /* DECnet */ 426#define AF_DLI 13 /* DEC Direct data link interface */ 427#define AF_LAT 14 /* LAT */ 428#define AF_HYLINK 15 /* NSC Hyperchannel */ 429#define AF_APPLETALK 16 /* Apple Talk */ 430#define AF_ROUTE 17 /* Internal Routing Protocol */ 431#define AF_LINK 18 /* Link layer interface */ 432#define pseudo_AF_XTP 19 /* eXpress Transfer Protocol (no AF) */ 433#define AF_COIP 20 /* connection-oriented IP, aka ST II */ 434#define AF_CNT 21 /* Computer Network Technology */ 435#define pseudo_AF_RTIP 22 /* Help Identify RTIP packets */ 436#define AF_IPX 23 /* Novell Internet Protocol */ 437#define AF_SIP 24 /* Simple Internet Protocol */ 438#define pseudo_AF_PIP 25 /* Help Identify PIP packets */ 439/*define pseudo_AF_BLUE 26 Identify packets for Blue Box - Not used */ 440#define AF_NDRV 27 /* Network Driver 'raw' access */ 441#define AF_ISDN 28 /* Integrated Services Digital Network*/ 442#define AF_E164 AF_ISDN /* CCITT E.164 recommendation */ 443#define pseudo_AF_KEY 29 /* Internal key-management function */ 444#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ 445#define AF_INET6 30 /* IPv6 */ 446#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 447#define AF_NATM 31 /* native ATM access */ 448#define AF_SYSTEM 32 /* Kernel event messages */ 449#define AF_NETBIOS 33 /* NetBIOS */ 450#define AF_PPP 34 /* PPP communication protocol */ 451#define pseudo_AF_HDRCMPLT 35 /* Used by BPF to not rewrite headers 452 * in interface output routine */ 453#ifdef PRIVATE 454#define AF_AFP 36 /* Used by AFP */ 455#else 456#define AF_RESERVED_36 36 /* Reserved for internal usage */ 457#endif 458#define AF_IEEE80211 37 /* IEEE 802.11 protocol */ 459#define AF_UTUN 38 460#ifdef PRIVATE 461#define AF_MULTIPATH 39 462#endif /* PRIVATE */ 463#define AF_MAX 40 464#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ 465 466/* 467 * [XSI] Structure used by kernel to store most addresses. 468 */ 469struct sockaddr { 470 __uint8_t sa_len; /* total length */ 471 sa_family_t sa_family; /* [XSI] address family */ 472 char sa_data[14]; /* [XSI] addr value (actually larger) */ 473}; 474 475#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 476#define SOCK_MAXADDRLEN 255 /* longest possible addresses */ 477 478/* 479 * Structure used by kernel to pass protocol 480 * information in raw sockets. 481 */ 482struct sockproto { 483 __uint16_t sp_family; /* address family */ 484 __uint16_t sp_protocol; /* protocol */ 485}; 486#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE)*/ 487 488/* 489 * RFC 2553: protocol-independent placeholder for socket addresses 490 */ 491#define _SS_MAXSIZE 128 492#define _SS_ALIGNSIZE (sizeof(__int64_t)) 493#define _SS_PAD1SIZE \ 494 (_SS_ALIGNSIZE - sizeof(__uint8_t) - sizeof(sa_family_t)) 495#define _SS_PAD2SIZE \ 496 (_SS_MAXSIZE - sizeof(__uint8_t) - sizeof(sa_family_t) - \ 497 _SS_PAD1SIZE - _SS_ALIGNSIZE) 498 499/* 500 * [XSI] sockaddr_storage 501 */ 502struct sockaddr_storage { 503 __uint8_t ss_len; /* address length */ 504 sa_family_t ss_family; /* [XSI] address family */ 505 char __ss_pad1[_SS_PAD1SIZE]; 506 __int64_t __ss_align; /* force structure storage alignment */ 507 char __ss_pad2[_SS_PAD2SIZE]; 508}; 509 510#ifdef BSD_KERNEL_PRIVATE 511#include <sys/queue.h> 512 513struct sockaddr_entry { 514 TAILQ_ENTRY(sockaddr_entry) se_link; 515 struct sockaddr *se_addr; 516 uint32_t se_flags; 517}; 518 519#define SEF_ATTACHED 1 /* attached to sockaddr_list */ 520 521struct sockaddr_list { 522 TAILQ_HEAD(, sockaddr_entry) sl_head; 523 uint32_t sl_cnt; 524 525}; 526#endif /* BSD_KERNEL_PRIVATE */ 527 528/* 529 * Protocol families, same as address families for now. 530 */ 531#define PF_UNSPEC AF_UNSPEC 532#define PF_LOCAL AF_LOCAL 533#define PF_UNIX PF_LOCAL /* backward compatibility */ 534#define PF_INET AF_INET 535#define PF_IMPLINK AF_IMPLINK 536#define PF_PUP AF_PUP 537#define PF_CHAOS AF_CHAOS 538#define PF_NS AF_NS 539#define PF_ISO AF_ISO 540#define PF_OSI AF_ISO 541#define PF_ECMA AF_ECMA 542#define PF_DATAKIT AF_DATAKIT 543#define PF_CCITT AF_CCITT 544#define PF_SNA AF_SNA 545#define PF_DECnet AF_DECnet 546#define PF_DLI AF_DLI 547#define PF_LAT AF_LAT 548#define PF_HYLINK AF_HYLINK 549#define PF_APPLETALK AF_APPLETALK 550#define PF_ROUTE AF_ROUTE 551#define PF_LINK AF_LINK 552#define PF_XTP pseudo_AF_XTP /* really just proto family, no AF */ 553#define PF_COIP AF_COIP 554#define PF_CNT AF_CNT 555#define PF_SIP AF_SIP 556#define PF_IPX AF_IPX /* same format as AF_NS */ 557#define PF_RTIP pseudo_AF_RTIP /* same format as AF_INET */ 558#define PF_PIP pseudo_AF_PIP 559#define PF_NDRV AF_NDRV 560#define PF_ISDN AF_ISDN 561#define PF_KEY pseudo_AF_KEY 562#define PF_INET6 AF_INET6 563#define PF_NATM AF_NATM 564#define PF_SYSTEM AF_SYSTEM 565#define PF_NETBIOS AF_NETBIOS 566#define PF_PPP AF_PPP 567#ifdef PRIVATE 568#define PF_AFP AF_AFP 569#else 570#define PF_RESERVED_36 AF_RESERVED_36 571#endif 572#define PF_UTUN AF_UTUN 573#ifdef PRIVATE 574#define PF_MULTIPATH AF_MULTIPATH 575#endif /* PRIVATE */ 576#define PF_MAX AF_MAX 577 578/* 579 * These do not have socket-layer support: 580 */ 581#define PF_VLAN ((uint32_t)0x766c616e) /* 'vlan' */ 582#define PF_BOND ((uint32_t)0x626f6e64) /* 'bond' */ 583#ifdef KERNEL_PRIVATE 584#define PF_BRIDGE ((uint32_t)0x62726467) /* 'brdg' */ 585#endif /* KERNEL_PRIVATE */ 586 587/* 588 * Definitions for network related sysctl, CTL_NET. 589 * 590 * Second level is protocol family. 591 * Third level is protocol number. 592 * 593 * Further levels are defined by the individual families below. 594 */ 595#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 596#define NET_MAXID AF_MAX 597#endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */ 598 599#ifdef KERNEL_PRIVATE 600#define CTL_NET_NAMES { \ 601 { 0, 0 }, \ 602 { "local", CTLTYPE_NODE }, \ 603 { "inet", CTLTYPE_NODE }, \ 604 { "implink", CTLTYPE_NODE }, \ 605 { "pup", CTLTYPE_NODE }, \ 606 { "chaos", CTLTYPE_NODE }, \ 607 { "xerox_ns", CTLTYPE_NODE }, \ 608 { "iso", CTLTYPE_NODE }, \ 609 { "emca", CTLTYPE_NODE }, \ 610 { "datakit", CTLTYPE_NODE }, \ 611 { "ccitt", CTLTYPE_NODE }, \ 612 { "ibm_sna", CTLTYPE_NODE }, \ 613 { "decnet", CTLTYPE_NODE }, \ 614 { "dec_dli", CTLTYPE_NODE }, \ 615 { "lat", CTLTYPE_NODE }, \ 616 { "hylink", CTLTYPE_NODE }, \ 617 { "appletalk", CTLTYPE_NODE }, \ 618 { "route", CTLTYPE_NODE }, \ 619 { "link_layer", CTLTYPE_NODE }, \ 620 { "xtp", CTLTYPE_NODE }, \ 621 { "coip", CTLTYPE_NODE }, \ 622 { "cnt", CTLTYPE_NODE }, \ 623 { "rtip", CTLTYPE_NODE }, \ 624 { "ipx", CTLTYPE_NODE }, \ 625 { "sip", CTLTYPE_NODE }, \ 626 { "pip", CTLTYPE_NODE }, \ 627 { 0, 0 }, \ 628 { "ndrv", CTLTYPE_NODE }, \ 629 { "isdn", CTLTYPE_NODE }, \ 630 { "key", CTLTYPE_NODE }, \ 631 { "inet6", CTLTYPE_NODE }, \ 632 { "natm", CTLTYPE_NODE }, \ 633 { "sys", CTLTYPE_NODE }, \ 634 { "netbios", CTLTYPE_NODE }, \ 635 { "ppp", CTLTYPE_NODE }, \ 636 { "hdrcomplete", CTLTYPE_NODE }, \ 637} 638#endif /* KERNEL_PRIVATE */ 639 640#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 641/* 642 * PF_ROUTE - Routing table 643 * 644 * Three additional levels are defined: 645 * Fourth: address family, 0 is wildcard 646 * Fifth: type of info, defined below 647 * Sixth: flag(s) to mask with for NET_RT_FLAGS 648 */ 649#define NET_RT_DUMP 1 /* dump; may limit to a.f. */ 650#define NET_RT_FLAGS 2 /* by flags, e.g. RESOLVING */ 651#define NET_RT_IFLIST 3 /* survey interface list */ 652#define NET_RT_STAT 4 /* routing statistics */ 653#define NET_RT_TRASH 5 /* routes not in table but not freed */ 654#define NET_RT_IFLIST2 6 /* interface list with addresses */ 655#define NET_RT_DUMP2 7 /* dump; may limit to a.f. */ 656#ifdef PRIVATE 657#define NET_RT_DUMPX 8 /* private */ 658#define NET_RT_DUMPX_FLAGS 9 /* private */ 659#endif /* PRIVATE */ 660#define NET_RT_MAXID 10 661#endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */ 662 663#ifdef KERNEL_PRIVATE 664#define CTL_NET_RT_NAMES { \ 665 { 0, 0 }, \ 666 { "dump", CTLTYPE_STRUCT }, \ 667 { "flags", CTLTYPE_STRUCT }, \ 668 { "iflist", CTLTYPE_STRUCT }, \ 669 { "stat", CTLTYPE_STRUCT }, \ 670 { "trash", CTLTYPE_INT }, \ 671 { "iflist2", CTLTYPE_STRUCT }, \ 672 { "dump2", CTLTYPE_STRUCT }, \ 673 { "dumpx", CTLTYPE_STRUCT }, \ 674 { "dumpx_flags", CTLTYPE_STRUCT }, \ 675} 676 677#endif /* KERNEL_PRIVATE */ 678 679/* 680 * Maximum queue length specifiable by listen. 681 */ 682#define SOMAXCONN 128 683 684/* 685 * [XSI] Message header for recvmsg and sendmsg calls. 686 * Used value-result for recvmsg, value only for sendmsg. 687 */ 688struct msghdr { 689 void *msg_name; /* [XSI] optional address */ 690 socklen_t msg_namelen; /* [XSI] size of address */ 691 struct iovec *msg_iov; /* [XSI] scatter/gather array */ 692 int msg_iovlen; /* [XSI] # elements in msg_iov */ 693 void *msg_control; /* [XSI] ancillary data, see below */ 694 socklen_t msg_controllen; /* [XSI] ancillary data buffer len */ 695 int msg_flags; /* [XSI] flags on received message */ 696}; 697 698#ifdef PRIVATE 699/* 700 * Extended version for sendmsg_x() and recvmsg_x() calls 701 * 702 * For recvmsg_x(), the size of the data received is given by the field 703 * msg_datalen. 704 * 705 * For sendmsg_x(), the size of the data to send is given by the length of 706 * the iovec array -- like sendmsg(). The field msg_datalen is ignored. 707 */ 708struct msghdr_x { 709 void *msg_name; /* optional address */ 710 socklen_t msg_namelen; /* size of address */ 711 struct iovec *msg_iov; /* scatter/gather array */ 712 int msg_iovlen; /* # elements in msg_iov */ 713 void *msg_control; /* ancillary data, see below */ 714 socklen_t msg_controllen; /* ancillary data buffer len */ 715 int msg_flags; /* flags on received message */ 716 size_t msg_datalen; /* byte length of buffer in msg_iov */ 717}; 718#endif /* PRIVATE */ 719 720#ifdef XNU_KERNEL_PRIVATE 721/* 722 * In-kernel representation of "struct msghdr" from 723 * userspace. Has enough precision for 32-bit or 724 * 64-bit clients, but does not need to be packed. 725 */ 726 727struct user_msghdr { 728 user_addr_t msg_name; /* optional address */ 729 socklen_t msg_namelen; /* size of address */ 730 user_addr_t msg_iov; /* scatter/gather array */ 731 int msg_iovlen; /* # elements in msg_iov */ 732 user_addr_t msg_control; /* ancillary data, see below */ 733 socklen_t msg_controllen; /* ancillary data buffer len */ 734 int msg_flags; /* flags on received message */ 735}; 736 737/* 738 * LP64 user version of struct msghdr. 739 * WARNING - keep in sync with struct msghdr 740 */ 741 742struct user64_msghdr { 743 user64_addr_t msg_name; /* optional address */ 744 socklen_t msg_namelen; /* size of address */ 745 user64_addr_t msg_iov; /* scatter/gather array */ 746 int msg_iovlen; /* # elements in msg_iov */ 747 user64_addr_t msg_control; /* ancillary data, see below */ 748 socklen_t msg_controllen; /* ancillary data buffer len */ 749 int msg_flags; /* flags on received message */ 750}; 751 752/* 753 * ILP32 user version of struct msghdr. 754 * WARNING - keep in sync with struct msghdr 755 */ 756 757struct user32_msghdr { 758 user32_addr_t msg_name; /* optional address */ 759 socklen_t msg_namelen; /* size of address */ 760 user32_addr_t msg_iov; /* scatter/gather array */ 761 int msg_iovlen; /* # elements in msg_iov */ 762 user32_addr_t msg_control; /* ancillary data, see below */ 763 socklen_t msg_controllen; /* ancillary data buffer len */ 764 int msg_flags; /* flags on received message */ 765}; 766 767/* 768 * In-kernel representation of "struct msghdr_x" from 769 * userspace. Has enough precision for 32-bit or 770 * 64-bit clients, but does not need to be packed. 771 */ 772 773struct user_msghdr_x { 774 user_addr_t msg_name; /* optional address */ 775 socklen_t msg_namelen; /* size of address */ 776 user_addr_t msg_iov; /* scatter/gather array */ 777 int msg_iovlen; /* # elements in msg_iov */ 778 user_addr_t msg_control; /* ancillary data, see below */ 779 socklen_t msg_controllen; /* ancillary data buffer len */ 780 int msg_flags; /* flags on received message */ 781 size_t msg_datalen; /* byte length of buffer in msg_iov */ 782}; 783 784/* 785 * LP64 user version of struct msghdr_x 786 * WARNING - keep in sync with struct msghdr_x 787 */ 788 789struct user64_msghdr_x { 790 user64_addr_t msg_name; /* optional address */ 791 socklen_t msg_namelen; /* size of address */ 792 user64_addr_t msg_iov; /* scatter/gather array */ 793 int msg_iovlen; /* # elements in msg_iov */ 794 user64_addr_t msg_control; /* ancillary data, see below */ 795 socklen_t msg_controllen; /* ancillary data buffer len */ 796 int msg_flags; /* flags on received message */ 797 user64_size_t msg_datalen; /* byte length of buffer in msg_iov */ 798}; 799 800/* 801 * ILP32 user version of struct msghdr_x 802 * WARNING - keep in sync with struct msghdr_x 803 */ 804 805struct user32_msghdr_x { 806 user32_addr_t msg_name; /* optional address */ 807 socklen_t msg_namelen; /* size of address */ 808 user32_addr_t msg_iov; /* scatter/gather array */ 809 int msg_iovlen; /* # elements in msg_iov */ 810 user32_addr_t msg_control; /* ancillary data, see below */ 811 socklen_t msg_controllen; /* ancillary data buffer len */ 812 int msg_flags; /* flags on received message */ 813 user32_size_t msg_datalen; /* byte length of buffer in msg_iov */ 814}; 815 816/* 817 * In-kernel representation of "struct sa_endpoints" from 818 * userspace. Has enough precision for 32-bit or 819 * 64-bit clients, but does not need to be packed. 820 */ 821 822struct user_sa_endpoints { 823 unsigned int sae_srcif; /* optional source interface */ 824 user_addr_t sae_srcaddr; /* optional source address */ 825 socklen_t sae_srcaddrlen; /* size of source address */ 826 user_addr_t sae_dstaddr; /* destination address */ 827 socklen_t sae_dstaddrlen; /* size of destination address */ 828}; 829 830/* 831 * LP64 user version of struct sa_endpoints 832 * WARNING - keep in sync with struct sa_endpoints 833 */ 834 835struct user64_sa_endpoints { 836 unsigned int sae_srcif; /* optional source interface */ 837 user64_addr_t sae_srcaddr; /* optional source address */ 838 socklen_t sae_srcaddrlen; /* size of source address */ 839 user64_addr_t sae_dstaddr; /* destination address */ 840 socklen_t sae_dstaddrlen; /* size of destination address */ 841}; 842 843/* 844 * ILP32 user version of struct sa_endpoints 845 * WARNING - keep in sync with struct sa_endpoints 846 */ 847 848struct user32_sa_endpoints { 849 unsigned int sae_srcif; /* optional source interface */ 850 user32_addr_t sae_srcaddr; /* optional source address */ 851 socklen_t sae_srcaddrlen; /* size of source address */ 852 user32_addr_t sae_dstaddr; /* destination address */ 853 socklen_t sae_dstaddrlen; /* size of destination address */ 854}; 855 856#endif /* XNU_KERNEL_PRIVATE */ 857 858#define MSG_OOB 0x1 /* process out-of-band data */ 859#define MSG_PEEK 0x2 /* peek at incoming message */ 860#define MSG_DONTROUTE 0x4 /* send without using routing tables */ 861#define MSG_EOR 0x8 /* data completes record */ 862#define MSG_TRUNC 0x10 /* data discarded before delivery */ 863#define MSG_CTRUNC 0x20 /* control data lost before delivery */ 864#define MSG_WAITALL 0x40 /* wait for full request or error */ 865#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 866#define MSG_DONTWAIT 0x80 /* this message should be nonblocking */ 867#define MSG_EOF 0x100 /* data completes connection */ 868#ifdef __APPLE__ 869#ifndef PRIVATE 870#ifdef __APPLE_API_OBSOLETE 871#define MSG_WAITSTREAM 0x200 /* wait up to full request.. may return partial */ 872#endif 873#else 874#define MSG_WAITSTREAM 0x200 /* wait up to full request.. may return partial */ 875#endif 876#define MSG_FLUSH 0x400 /* Start of 'hold' seq; dump so_temp */ 877#define MSG_HOLD 0x800 /* Hold frag in so_temp */ 878#define MSG_SEND 0x1000 /* Send the packet in so_temp */ 879#define MSG_HAVEMORE 0x2000 /* Data ready to be read */ 880#define MSG_RCVMORE 0x4000 /* Data remains in current pkt */ 881#endif 882#ifdef KERNEL_PRIVATE 883#define MSG_COMPAT 0x8000 /* deprecated */ 884#endif /* KERNEL_PRIVATE */ 885#define MSG_NEEDSA 0x10000 /* Fail receive if socket address cannot be allocated */ 886#ifdef KERNEL_PRIVATE 887#define MSG_NBIO 0x20000 /* FIONBIO mode, used by fifofs */ 888#define MSG_SKIPCFIL 0x40000 /* skip pass content filter */ 889#endif 890#ifdef KERNEL 891#define MSG_USEUPCALL 0x80000000 /* Inherit upcall in sock_accept */ 892#endif 893#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ 894 895/* 896 * Header for ancillary data objects in msg_control buffer. 897 * Used for additional information with/about a datagram 898 * not expressible by flags. The format is a sequence 899 * of message elements headed by cmsghdr structures. 900 */ 901struct cmsghdr { 902 socklen_t cmsg_len; /* [XSI] data byte count, including hdr */ 903 int cmsg_level; /* [XSI] originating protocol */ 904 int cmsg_type; /* [XSI] protocol-specific type */ 905/* followed by unsigned char cmsg_data[]; */ 906}; 907 908#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 909#ifndef __APPLE__ 910/* 911 * While we may have more groups than this, the cmsgcred struct must 912 * be able to fit in an mbuf, and NGROUPS_MAX is too large to allow 913 * this. 914*/ 915#define CMGROUP_MAX 16 916 917/* 918 * Credentials structure, used to verify the identity of a peer 919 * process that has sent us a message. This is allocated by the 920 * peer process but filled in by the kernel. This prevents the 921 * peer from lying about its identity. (Note that cmcred_groups[0] 922 * is the effective GID.) 923 */ 924struct cmsgcred { 925 pid_t cmcred_pid; /* PID of sending process */ 926 uid_t cmcred_uid; /* real UID of sending process */ 927 uid_t cmcred_euid; /* effective UID of sending process */ 928 gid_t cmcred_gid; /* real GID of sending process */ 929 short cmcred_ngroups; /* number or groups */ 930 gid_t cmcred_groups[CMGROUP_MAX]; /* groups */ 931}; 932#endif 933#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ 934 935/* given pointer to struct cmsghdr, return pointer to data */ 936#define CMSG_DATA(cmsg) ((unsigned char *)(cmsg) + \ 937 __DARWIN_ALIGN32(sizeof(struct cmsghdr))) 938 939/* 940 * RFC 2292 requires to check msg_controllen, in case that the kernel returns 941 * an empty list for some reasons. 942 */ 943#define CMSG_FIRSTHDR(mhdr) \ 944 ((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \ 945 (struct cmsghdr *)(mhdr)->msg_control : \ 946 (struct cmsghdr *)0L) 947 948 949/* 950 * Given pointer to struct cmsghdr, return pointer to next cmsghdr 951 * RFC 2292 says that CMSG_NXTHDR(mhdr, NULL) is equivalent to CMSG_FIRSTHDR(mhdr) 952 */ 953#define CMSG_NXTHDR(mhdr, cmsg) \ 954 ((char *)(cmsg) == (char *)0L ? CMSG_FIRSTHDR(mhdr) : \ 955 ((((unsigned char *)(cmsg) + \ 956 __DARWIN_ALIGN32((__uint32_t)(cmsg)->cmsg_len) + \ 957 __DARWIN_ALIGN32(sizeof(struct cmsghdr))) > \ 958 ((unsigned char *)(mhdr)->msg_control + \ 959 (mhdr)->msg_controllen)) ? \ 960 (struct cmsghdr *)0L /* NULL */ : \ 961 (struct cmsghdr *)(void *)((unsigned char *)(cmsg) + \ 962 __DARWIN_ALIGN32((__uint32_t)(cmsg)->cmsg_len)))) 963 964#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 965/* RFC 2292 additions */ 966#define CMSG_SPACE(l) (__DARWIN_ALIGN32(sizeof(struct cmsghdr)) + __DARWIN_ALIGN32(l)) 967#define CMSG_LEN(l) (__DARWIN_ALIGN32(sizeof(struct cmsghdr)) + (l)) 968 969#ifdef KERNEL 970#define CMSG_ALIGN(n) __DARWIN_ALIGN32(n) 971#endif 972#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ 973 974/* "Socket"-level control message types: */ 975#define SCM_RIGHTS 0x01 /* access rights (array of int) */ 976#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 977#define SCM_TIMESTAMP 0x02 /* timestamp (struct timeval) */ 978#define SCM_CREDS 0x03 /* process creds (struct cmsgcred) */ 979#define SCM_TIMESTAMP_MONOTONIC 0x04 /* timestamp (uint64_t) */ 980 981#ifdef PRIVATE 982#define SCM_SEQNUM 0x05 /* TCP unordered recv seq no */ 983#define SCM_MSG_PRIORITY 0x06 /* TCP unordered snd priority */ 984#endif /* PRIVATE */ 985 986#ifdef KERNEL_PRIVATE 987/* 988 * 4.3 compat sockaddr (deprecated) 989 */ 990struct osockaddr { 991 __uint16_t sa_family; /* address family */ 992 char sa_data[14]; /* up to 14 bytes of direct address */ 993}; 994 995/* 996 * 4.3-compat message header (deprecated) 997 */ 998struct omsghdr { 999 void *msg_name; /* optional address */ 1000 socklen_t msg_namelen; /* size of address */ 1001 struct iovec *msg_iov; /* scatter/gather array */ 1002 int msg_iovlen; /* # elements in msg_iov */ 1003 void *msg_accrights; /* access rights sent/rcvd */ 1004 int msg_accrightslen; 1005}; 1006 1007#define SA(s) ((struct sockaddr *)(void *)(s)) 1008#endif /* KERNEL_PRIVATE */ 1009#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ 1010 1011/* 1012 * howto arguments for shutdown(2), specified by Posix.1g. 1013 */ 1014#define SHUT_RD 0 /* shut down the reading side */ 1015#define SHUT_WR 1 /* shut down the writing side */ 1016#define SHUT_RDWR 2 /* shut down both sides */ 1017 1018#if !defined(_POSIX_C_SOURCE) 1019/* 1020 * sendfile(2) header/trailer struct 1021 */ 1022struct sf_hdtr { 1023 struct iovec *headers; /* pointer to an array of header struct iovec's */ 1024 int hdr_cnt; /* number of header iovec's */ 1025 struct iovec *trailers; /* pointer to an array of trailer struct iovec's */ 1026 int trl_cnt; /* number of trailer iovec's */ 1027}; 1028 1029#ifdef KERNEL 1030 1031/* In-kernel representation */ 1032struct user_sf_hdtr { 1033 user_addr_t headers; /* pointer to an array of header struct iovec's */ 1034 int hdr_cnt; /* number of header iovec's */ 1035 user_addr_t trailers; /* pointer to an array of trailer struct iovec's */ 1036 int trl_cnt; /* number of trailer iovec's */ 1037}; 1038 1039/* LP64 user version of struct sf_hdtr */ 1040struct user64_sf_hdtr { 1041 user64_addr_t headers; /* pointer to an array of header struct iovec's */ 1042 int hdr_cnt; /* number of header iovec's */ 1043 user64_addr_t trailers; /* pointer to an array of trailer struct iovec's */ 1044 int trl_cnt; /* number of trailer iovec's */ 1045}; 1046 1047/* ILP32 user version of struct sf_hdtr */ 1048struct user32_sf_hdtr { 1049 user32_addr_t headers; /* pointer to an array of header struct iovec's */ 1050 int hdr_cnt; /* number of header iovec's */ 1051 user32_addr_t trailers; /* pointer to an array of trailer struct iovec's */ 1052 int trl_cnt; /* number of trailer iovec's */ 1053}; 1054 1055#endif /* KERNEL */ 1056 1057#endif /* !_POSIX_C_SOURCE */ 1058 1059#ifdef PRIVATE 1060#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 1061 1062/* 1063 * Structure for SIOCGASSOCIDS 1064 */ 1065struct so_aidreq { 1066 __uint32_t sar_cnt; /* number of associations */ 1067 sae_associd_t *sar_aidp; /* array of association IDs */ 1068}; 1069 1070#ifdef BSD_KERNEL_PRIVATE 1071struct so_aidreq32 { 1072 __uint32_t sar_cnt; 1073 user32_addr_t sar_aidp; 1074}; 1075 1076struct so_aidreq64 { 1077 __uint32_t sar_cnt; 1078 user64_addr_t sar_aidp __attribute__((aligned(8))); 1079}; 1080#endif /* BSD_KERNEL_PRIVATE */ 1081 1082/* 1083 * Structure for SIOCGCONNIDS 1084 */ 1085struct so_cidreq { 1086 sae_associd_t scr_aid; /* association ID */ 1087 __uint32_t scr_cnt; /* number of connections */ 1088 sae_connid_t *scr_cidp; /* array of connection IDs */ 1089}; 1090 1091#ifdef BSD_KERNEL_PRIVATE 1092struct so_cidreq32 { 1093 sae_associd_t scr_aid; 1094 __uint32_t scr_cnt; 1095 user32_addr_t scr_cidp; 1096}; 1097 1098struct so_cidreq64 { 1099 sae_associd_t scr_aid; 1100 __uint32_t scr_cnt; 1101 user64_addr_t scr_cidp __attribute__((aligned(8))); 1102}; 1103#endif /* BSD_KERNEL_PRIVATE */ 1104 1105/* 1106 * Structure for SIOCGCONNINFO 1107 */ 1108struct so_cinforeq { 1109 sae_connid_t scir_cid; /* connection ID */ 1110 __uint32_t scir_flags; /* see flags below */ 1111 __uint32_t scir_ifindex; /* (last) outbound interface */ 1112 __int32_t scir_error; /* most recent error */ 1113 struct sockaddr *scir_src; /* source address */ 1114 socklen_t scir_src_len; /* source address len */ 1115 struct sockaddr *scir_dst; /* destination address */ 1116 socklen_t scir_dst_len; /* destination address len */ 1117 __uint32_t scir_aux_type; /* aux data type (CIAUX) */ 1118 void *scir_aux_data; /* aux data */ 1119 __uint32_t scir_aux_len; /* aux data len */ 1120}; 1121 1122#ifdef BSD_KERNEL_PRIVATE 1123struct so_cinforeq32 { 1124 sae_connid_t scir_cid; 1125 __uint32_t scir_flags; 1126 __uint32_t scir_ifindex; 1127 __int32_t scir_error; 1128 user32_addr_t scir_src; 1129 socklen_t scir_src_len; 1130 user32_addr_t scir_dst; 1131 socklen_t scir_dst_len; 1132 __uint32_t scir_aux_type; 1133 user32_addr_t scir_aux_data; 1134 __uint32_t scir_aux_len; 1135}; 1136 1137struct so_cinforeq64 { 1138 sae_connid_t scir_cid; 1139 __uint32_t scir_flags; 1140 __uint32_t scir_ifindex; 1141 __int32_t scir_error; 1142 user64_addr_t scir_src __attribute__((aligned(8))); 1143 socklen_t scir_src_len; 1144 user64_addr_t scir_dst __attribute__((aligned(8))); 1145 socklen_t scir_dst_len; 1146 __uint32_t scir_aux_type; 1147 user64_addr_t scir_aux_data __attribute__((aligned(8))); 1148 __uint32_t scir_aux_len; 1149}; 1150#endif /* BSD_KERNEL_PRIVATE */ 1151 1152/* valid connection info flags */ 1153#define CIF_CONNECTING 0x1 /* connection was attempted */ 1154#define CIF_CONNECTED 0x2 /* connection is established */ 1155#define CIF_DISCONNECTING 0x4 /* disconnection was attempted */ 1156#define CIF_DISCONNECTED 0x8 /* has been disconnected */ 1157#define CIF_BOUND_IF 0x10 /* bound to an interface */ 1158#define CIF_BOUND_IP 0x20 /* bound to a src address */ 1159#define CIF_BOUND_PORT 0x40 /* bound to a src port */ 1160#define CIF_PREFERRED 0x80 /* connection is primary/preferred */ 1161#define CIF_MP_CAPABLE 0x100 /* supports multipath protocol */ 1162#define CIF_MP_READY 0x200 /* multipath protocol confirmed */ 1163#define CIF_MP_DEGRADED 0x400 /* has lost its multipath capability */ 1164#define CIF_MP_ACTIVE 0x800 /* this is the active subflow */ 1165 1166/* valid connection info auxiliary data types */ 1167#define CIAUX_TCP 0x1 /* TCP auxiliary data (conninfo_tcp_t) */ 1168 1169/* 1170 * Structure for SIOC{S,G}CONNORDER 1171 */ 1172struct so_cordreq { 1173 sae_connid_t sco_cid; /* connection ID */ 1174 __uint32_t sco_rank; /* rank (0 means unspecified) */ 1175}; 1176 1177/* 1178 * Network policy subclass (of KEV_NETWORK_CLASS) 1179 */ 1180#define KEV_NETPOLICY_SUBCLASS 3 1181 1182#define KEV_NETPOLICY_IFDENIED 1 /* denied access to interface */ 1183 1184/* 1185 * Common structure for KEV_NETPOLICY_SUBCLASS 1186 */ 1187struct netpolicy_event_data { 1188 __uint64_t eupid; /* effective unique PID */ 1189 pid_t epid; /* effective PID */ 1190#if !defined(__LP64__) 1191 __uint32_t pad; 1192#endif /* __LP64__ */ 1193 uuid_t euuid; /* effective UUID */ 1194}; 1195 1196/* 1197 * NETPOLICY_IFDENIED event structure 1198 */ 1199struct kev_netpolicy_ifdenied { 1200 struct netpolicy_event_data ev_data; 1201}; 1202 1203/* 1204 * Socket subclass (of KEV_NETWORK_CLASS) 1205 */ 1206#define KEV_SOCKET_SUBCLASS 4 1207 1208/* 1209 * Events for KEV_SOCKET_SUBCLASS of KEV_NETWORK_CLASS 1210 */ 1211#define KEV_SOCKET_CLOSED 1 /* completely closed by protocol */ 1212 1213/* 1214 * Common structure for KEV_SOCKET_SUBCLASS 1215 */ 1216struct kev_socket_event_data { 1217 struct sockaddr_storage kev_sockname; 1218 struct sockaddr_storage kev_peername; 1219}; 1220 1221struct kev_socket_closed { 1222 struct kev_socket_event_data ev_data; 1223}; 1224 1225#ifndef KERNEL 1226__BEGIN_DECLS 1227 1228extern int peeloff(int s, sae_associd_t); 1229extern int socket_delegate(int, int, int, pid_t); 1230 1231/* 1232 * recvmsg_x() is a system call similar to recvmsg(2) to receive 1233 * several datagrams at once in the array of message headers "msgp". 1234 * 1235 * recvmsg_x() can be used only with protocols handlers that have been specially 1236 * modified to support sending and receiving several datagrams at once. 1237 * 1238 * The size of the array "msgp" is given by the argument "cnt". 1239 * 1240 * The "flags" arguments supports only the value MSG_DONTWAIT. 1241 * 1242 * Each member of "msgp" array is of type "struct msghdr_x". 1243 * 1244 * The "msg_iov" and "msg_iovlen" are input parameters that describe where to 1245 * store a datagram in a scatter gather locations of buffers -- see recvmsg(2). 1246 * On output the field "msg_datalen" gives the length of the received datagram. 1247 * 1248 * The field "msg_flags" must be set to zero on input. On output, "msg_flags" 1249 * may have MSG_TRUNC set to indicate the trailing portion of the datagram was 1250 * discarded because the datagram was larger than the buffer supplied. 1251 * recvmsg_x() returns as soon as a datagram is truncated. 1252 * 1253 * recvmsg_x() may return with less than "cnt" datagrams received based on 1254 * the low water mark and the amount of data pending in the socket buffer. 1255 * 1256 * recvmsg_x() returns the number of datagrams that have been received, 1257 * or -1 if an error occurred. 1258 * 1259 * NOTE: This a private system call, the API is subject to change. 1260 */ 1261ssize_t recvmsg_x(int s, const struct msghdr_x *msgp, u_int cnt, int flags); 1262 1263/* 1264 * sendmsg_x() is a system call similar to send(2) to send 1265 * several datagrams at once in the array of message headers "msgp". 1266 * 1267 * sendmsg_x() can be used only with protocols handlers that have been specially 1268 * modified to support sending and receiving several datagrams at once. 1269 * 1270 * The size of the array "msgp" is given by the argument "cnt". 1271 * 1272 * The "flags" arguments supports only the value MSG_DONTWAIT. 1273 * 1274 * Each member of "msgp" array is of type "struct msghdr_x". 1275 * 1276 * The "msg_iov" and "msg_iovlen" are input parameters that specify the 1277 * data to be sent in a scatter gather locations of buffers -- see sendmsg(2). 1278 * 1279 * sendmsg_x() fails with EMSGSIZE if the sum of the length of the datagrams 1280 * is greater than the high water mark. 1281 * 1282 * Address and ancillary data are not supported so the following fields 1283 * must be set to zero on input: 1284 * "msg_name", "msg_namelen", "msg_control" and "msg_controllen". 1285 * 1286 * The field "msg_flags" and "msg_datalen" must be set to zero on input. 1287 * 1288 * sendmsg_x() returns the number of datagrams that have been sent, 1289 * or -1 if an error occurred. 1290 * 1291 * NOTE: This a private system call, the API is subject to change. 1292 */ 1293ssize_t sendmsg_x(int s, const struct msghdr_x *msgp, u_int cnt, int flags); 1294__END_DECLS 1295#endif /* !KERNEL */ 1296#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ 1297#endif /* PRIVATE */ 1298 1299#ifndef KERNEL 1300__BEGIN_DECLS 1301 1302int accept(int, struct sockaddr * __restrict, socklen_t * __restrict) 1303 __DARWIN_ALIAS_C(accept); 1304int bind(int, const struct sockaddr *, socklen_t) __DARWIN_ALIAS(bind); 1305int connect(int, const struct sockaddr *, socklen_t) __DARWIN_ALIAS_C( connect); 1306int getpeername(int, struct sockaddr * __restrict, socklen_t * __restrict) 1307 __DARWIN_ALIAS(getpeername); 1308int getsockname(int, struct sockaddr * __restrict, socklen_t * __restrict) 1309 __DARWIN_ALIAS(getsockname); 1310int getsockopt(int, int, int, void * __restrict, socklen_t * __restrict); 1311int listen(int, int) __DARWIN_ALIAS(listen); 1312ssize_t recv(int, void *, size_t, int) __DARWIN_ALIAS_C(recv); 1313ssize_t recvfrom(int, void *, size_t, int, struct sockaddr * __restrict, 1314 socklen_t * __restrict) __DARWIN_ALIAS_C(recvfrom); 1315ssize_t recvmsg(int, struct msghdr *, int) __DARWIN_ALIAS_C(recvmsg); 1316ssize_t send(int, const void *, size_t, int) __DARWIN_ALIAS_C(send); 1317ssize_t sendmsg(int, const struct msghdr *, int) __DARWIN_ALIAS_C(sendmsg); 1318ssize_t sendto(int, const void *, size_t, 1319 int, const struct sockaddr *, socklen_t) __DARWIN_ALIAS_C(sendto); 1320int setsockopt(int, int, int, const void *, socklen_t); 1321int shutdown(int, int); 1322int sockatmark(int) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 1323int socket(int, int, int); 1324int socketpair(int, int, int, int *) __DARWIN_ALIAS(socketpair); 1325 1326#if !defined(_POSIX_C_SOURCE) 1327int sendfile(int, int, off_t, off_t *, struct sf_hdtr *, int); 1328#endif /* !_POSIX_C_SOURCE */ 1329 1330#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 1331void pfctlinput(int, struct sockaddr *); 1332int connectx(int , const sa_endpoints_t *, sae_associd_t, unsigned int, 1333 const struct iovec *, unsigned int, size_t *, sae_connid_t *); 1334int disconnectx(int , sae_associd_t, sae_connid_t); 1335#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ 1336__END_DECLS 1337#endif /* !KERNEL */ 1338 1339#ifdef KERNEL 1340#include <sys/kpi_socket.h> 1341#endif 1342 1343#endif /* !_SYS_SOCKET_H_ */