1 /* 2 * Copyright (c) 2023 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) 1995 NeXT Computer, Inc. All Rights Reserved */ 29 /*- 30 * Copyright (c) 1982, 1986, 1990, 1993, 1994 31 * The Regents of the University of California. All rights reserved. 32 * 33 * Redistribution and use in source and binary forms, with or without 34 * modification, are permitted provided that the following conditions 35 * are met: 36 * 1. Redistributions of source code must retain the above copyright 37 * notice, this list of conditions and the following disclaimer. 38 * 2. Redistributions in binary form must reproduce the above copyright 39 * notice, this list of conditions and the following disclaimer in the 40 * documentation and/or other materials provided with the distribution. 41 * 3. All advertising materials mentioning features or use of this software 42 * must display the following acknowledgement: 43 * This product includes software developed by the University of 44 * California, Berkeley and its contributors. 45 * 4. Neither the name of the University nor the names of its contributors 46 * may be used to endorse or promote products derived from this software 47 * without specific prior written permission. 48 * 49 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 50 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 51 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 52 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 53 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 54 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 55 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 56 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 57 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 58 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 59 * SUCH DAMAGE. 60 * 61 * @(#)sockio.h 8.1 (Berkeley) 3/28/94 62 */ 63 64 #ifndef _SYS_SOCKIO_PRIVATE_H_ 65 #define _SYS_SOCKIO_PRIVATE_H_ 66 67 #ifndef KERNEL_PRIVATE 68 #include <net/if.h> 69 #include <net/if_private.h> 70 #include <net/network_agent.h> 71 #endif 72 #include <sys/ioccom.h> 73 #ifndef KERNEL_PRIVATE 74 #include <sys/socket_private.h> 75 #endif 76 77 /* 78 * Because the definition interface ioctl are spread among several header files 79 * one must make sure that a new added SIOC will not conflict with an existing one. 80 * The following shell script lists all interface ioctl sorted by number: 81 * grep "IO.*(\'i\'" `find bsd -name *.h` |sort -n -k 4 82 */ 83 84 /* 85 * OSIOCGIF* ioctls are deprecated; they are kept for binary compatibility. 86 */ 87 #ifdef KERNEL_PRIVATE 88 #define OSIOCGIFADDR _IOWR('i', 13, struct ifreq) /* deprecated */ 89 #define OSIOCGIFDSTADDR _IOWR('i', 15, struct ifreq) /* deprecated */ 90 #define OSIOCGIFBRDADDR _IOWR('i', 18, struct ifreq) /* deprecated */ 91 #define OSIOCGIFCONF _IOWR('i', 20, struct ifconf) /* deprecated */ 92 #define OSIOCGIFCONF32 _IOWR('i', 20, struct ifconf32) /* deprecated */ 93 #define OSIOCGIFCONF64 _IOWR('i', 20, struct ifconf64) /* deprecated */ 94 #define OSIOCGIFNETMASK _IOWR('i', 21, struct ifreq) /* deprecated */ 95 96 #define SIOCGIFCONF32 _IOWR('i', 36, struct ifconf32) /* get ifnet list */ 97 #define SIOCGIFCONF64 _IOWR('i', 36, struct ifconf64) /* get ifnet list */ 98 99 /* 100 * The command SIOCGIFMEDIA does not allow a process to access the extended 101 * media subtype and extended subtype values are returned as IFM_OTHER. 102 */ 103 #define SIOCGIFMEDIA32 _IOWR('i', 56, struct ifmediareq32) /* get compatible net media (32-bit) */ 104 #define SIOCGIFMEDIA64 _IOWR('i', 56, struct ifmediareq64) /* get compatible net media (64-bit) */ 105 106 /* 107 * The command SIOCGIFXMEDIA is meant to be used by processes only to be able 108 * to access the extended media subtypes with the extended IFM_TMASK. 109 * 110 * An ifnet must not implement SIOCGIFXMEDIA as it gets the extended 111 * media subtypes by simply compiling with <net/if_media.h> 112 */ 113 #define SIOCGIFXMEDIA32 _IOWR('i', 72, struct ifmediareq32) /* get net extended media */ 114 #define SIOCGIFXMEDIA64 _IOWR('i', 72, struct ifmediareq64) /* get net extended media (64-bit) */ 115 #endif /* KERNEL_PRIVATE */ 116 117 /* 118 * temporary control calls to attach/detach IP to/from an ethernet interface 119 */ 120 #define SIOCPROTOATTACH _IOWR('i', 80, struct ifreq) /* attach proto to interface */ 121 #define SIOCPROTODETACH _IOWR('i', 81, struct ifreq) /* detach proto from interface */ 122 123 #define SIOCGLINKHEURISTICS _IOWR('i', 93, struct ifreq) /* link heuristics (int) */ 124 125 #define SIOCSATTACHPROTONULL _IOWR('i', 94, struct ifreq) /* attach/detach NULL proto to interface */ 126 127 #define SIOCGPOINTOPOINTMDNS _IOWR('i', 95, struct ifreq) /* mDNS on point-to-point interface */ 128 #define SIOCSPOINTOPOINTMDNS _IOW('i', 95, struct ifreq) /* mDNS on point-to-point interface */ 129 130 #define SIOCGINBANDWAKEPKT _IOWR('i', 96, struct ifreq) /* inband wake packet tagging (int) */ 131 #define SIOCSINBANDWAKEPKT _IOW('i', 96, struct ifreq) /* inband wake packet tagging (int) */ 132 133 #define SIOCGLOWPOWERWAKE _IOWR('i', 97, struct ifreq) /* low power wake mode (int) */ 134 #define SIOCSLOWPOWERWAKE _IOW('i', 97, struct ifreq) /* low power wake mode (int) */ 135 136 #ifdef KERNEL_PRIVATE 137 #define SIOCSDRVSPEC32 _IOW('i', 123, struct ifdrv32) /* set driver-specific 138 * parameters */ 139 #define SIOCGDRVSPEC32 _IOWR('i', 123, struct ifdrv32) /* get driver-specific 140 * parameters */ 141 #define SIOCSDRVSPEC64 _IOW('i', 123, struct ifdrv64) /* set driver-specific 142 * parameters */ 143 #define SIOCGDRVSPEC64 _IOWR('i', 123, struct ifdrv64) /* get driver-specific 144 * parameters */ 145 146 #define SIOCSIFDEVMTU SIOCSIFALTMTU /* deprecated */ 147 148 #define SIOCIFGCLONERS32 _IOWR('i', 129, struct if_clonereq32) /* get cloners */ 149 #define SIOCIFGCLONERS64 _IOWR('i', 129, struct if_clonereq64) /* get cloners */ 150 #endif /* KERNEL_PRIVATE */ 151 152 /* removed #define SIOCSETOT _IOW('s', 128, int) */ 153 154 #define SIOCGIFGETRTREFCNT _IOWR('i', 137, struct ifreq) /* get interface route refcnt */ 155 #define SIOCGIFLINKQUALITYMETRIC _IOWR('i', 138, struct ifreq) /* get LQM */ 156 #define SIOCSIFOPPORTUNISTIC _IOWR('i', 139, struct ifreq) /* deprecated; use SIOCSIFTHROTTLE */ 157 #define SIOCGIFOPPORTUNISTIC _IOWR('i', 140, struct ifreq) /* deprecated; use SIOCGIFTHROTTLE */ 158 #define SIOCSETROUTERMODE _IOWR('i', 141, struct ifreq) /* enable/disable IPv4 router mode on interface */ 159 #define SIOCGIFEFLAGS _IOWR('i', 142, struct ifreq) /* get extended ifnet flags */ 160 #define SIOCSIFDESC _IOWR('i', 143, struct if_descreq) 161 #define SIOCGIFDESC _IOWR('i', 144, struct if_descreq) 162 #define SIOCSIFLINKPARAMS _IOWR('i', 145, struct if_linkparamsreq) 163 #define SIOCGIFLINKPARAMS _IOWR('i', 146, struct if_linkparamsreq) 164 #define SIOCGIFQUEUESTATS _IOWR('i', 147, struct if_qstatsreq) 165 #define SIOCSIFTHROTTLE _IOWR('i', 148, struct if_throttlereq) 166 #define SIOCGIFTHROTTLE _IOWR('i', 149, struct if_throttlereq) 167 168 #define SIOCGASSOCIDS _IOWR('s', 150, struct so_aidreq) /* get associds */ 169 #define SIOCGCONNIDS _IOWR('s', 151, struct so_cidreq) /* get connids */ 170 #define SIOCGCONNINFO _IOWR('s', 152, struct so_cinforeq) /* get conninfo */ 171 #ifdef BSD_KERNEL_PRIVATE 172 #define SIOCGASSOCIDS32 _IOWR('s', 150, struct so_aidreq32) 173 #define SIOCGASSOCIDS64 _IOWR('s', 150, struct so_aidreq64) 174 #define SIOCGCONNIDS32 _IOWR('s', 151, struct so_cidreq32) 175 #define SIOCGCONNIDS64 _IOWR('s', 151, struct so_cidreq64) 176 #define SIOCGCONNINFO32 _IOWR('s', 152, struct so_cinforeq32) 177 #define SIOCGCONNINFO64 _IOWR('s', 152, struct so_cinforeq64) 178 #endif /* BSD_KERNEL_PRIVATE */ 179 #define SIOCSCONNORDER _IOWR('s', 153, struct so_cordreq) /* set conn order */ 180 #define SIOCGCONNORDER _IOWR('s', 154, struct so_cordreq) /* get conn order */ 181 182 #define SIOCSIFLOG _IOWR('i', 155, struct ifreq) 183 #define SIOCGIFLOG _IOWR('i', 156, struct ifreq) 184 #define SIOCGIFDELEGATE _IOWR('i', 157, struct ifreq) 185 #define SIOCGIFLLADDR _IOWR('i', 158, struct ifreq) /* get link level addr */ 186 #define SIOCGIFTYPE _IOWR('i', 159, struct ifreq) /* get interface type */ 187 #define SIOCGIFEXPENSIVE _IOWR('i', 160, struct ifreq) /* get interface expensive flag */ 188 #define SIOCSIFEXPENSIVE _IOWR('i', 161, struct ifreq) /* mark interface expensive */ 189 #define SIOCGIF2KCL _IOWR('i', 162, struct ifreq) /* interface prefers 2 KB clusters */ 190 #define SIOCSIF2KCL _IOWR('i', 163, struct ifreq) 191 #define SIOCGSTARTDELAY _IOWR('i', 164, struct ifreq) 192 193 #define SIOCAIFAGENTID _IOWR('i', 165, struct if_agentidreq) /* Add netagent id */ 194 #define SIOCDIFAGENTID _IOWR('i', 166, struct if_agentidreq) /* Delete netagent id */ 195 #define SIOCGIFAGENTIDS _IOWR('i', 167, struct if_agentidsreq) /* Get netagent ids */ 196 #define SIOCGIFAGENTDATA _IOWR('i', 168, struct netagent_req) /* Get netagent data */ 197 198 #ifdef BSD_KERNEL_PRIVATE 199 #define SIOCGIFAGENTIDS32 _IOWR('i', 167, struct if_agentidsreq32) 200 #define SIOCGIFAGENTIDS64 _IOWR('i', 167, struct if_agentidsreq64) 201 #define SIOCGIFAGENTDATA32 _IOWR('i', 168, struct netagent_req32) 202 #define SIOCGIFAGENTDATA64 _IOWR('i', 168, struct netagent_req64) 203 #endif /* BSD_KERNEL_PRIVATE */ 204 205 #define SIOCSIFINTERFACESTATE _IOWR('i', 169, struct ifreq) /* set interface state */ 206 #define SIOCGIFINTERFACESTATE _IOWR('i', 170, struct ifreq) /* get interface state */ 207 #define SIOCSIFPROBECONNECTIVITY _IOWR('i', 171, struct ifreq) /* Start/Stop probes to check connectivity */ 208 #define SIOCGIFPROBECONNECTIVITY _IOWR('i', 172, struct ifreq) /* check if connectivity probes are enabled */ 209 210 #define SIOCSIFNETSIGNATURE _IOWR('i', 174, struct if_nsreq) 211 #define SIOCGIFNETSIGNATURE _IOWR('i', 175, struct if_nsreq) 212 213 #define SIOCSECNMODE _IOW('i', 177, struct ifreq) 214 215 #define SIOCSIFORDER _IOWR('i', 178, struct if_order) 216 #define SIOCGIFORDER _IOWR('i', 179, struct if_order) 217 218 #define SIOCSQOSMARKINGMODE _IOWR('i', 180, struct ifreq) 219 #define SIOCSFASTLANECAPABLE SIOCSQOSMARKINGMODE 220 #define SIOCSQOSMARKINGENABLED _IOWR('i', 181, struct ifreq) 221 #define SIOCSFASTLEENABLED SIOCSQOSMARKINGENABLED 222 #define SIOCGQOSMARKINGMODE _IOWR('i', 182, struct ifreq) 223 #define SIOCGQOSMARKINGENABLED _IOWR('i', 183, struct ifreq) 224 225 226 #define SIOCSIFTIMESTAMPENABLE _IOWR('i', 184, struct ifreq) 227 #define SIOCSIFTIMESTAMPDISABLE _IOWR('i', 185, struct ifreq) 228 #define SIOCGIFTIMESTAMPENABLED _IOWR('i', 186, struct ifreq) 229 230 #define SIOCSIFDISABLEOUTPUT _IOWR('i', 187, struct ifreq) 231 232 #define SIOCSIFSUBFAMILY _IOWR('i', 188, struct ifreq) 233 234 #define SIOCGIFAGENTLIST _IOWR('i', 190, struct netagentlist_req) /* Get netagent dump */ 235 236 #ifdef BSD_KERNEL_PRIVATE 237 #define SIOCGIFAGENTLIST32 _IOWR('i', 190, struct netagentlist_req32) 238 #define SIOCGIFAGENTLIST64 _IOWR('i', 190, struct netagentlist_req64) 239 #endif /* BSD_KERNEL_PRIVATE */ 240 241 #define SIOCSIFLOWINTERNET _IOWR('i', 191, struct ifreq) 242 #define SIOCGIFLOWINTERNET _IOWR('i', 192, struct ifreq) 243 244 #define SIOCGIFNAT64PREFIX _IOWR('i', 193, struct if_nat64req) 245 #define SIOCSIFNAT64PREFIX _IOWR('i', 194, struct if_nat64req) 246 #define SIOCGIFNEXUS _IOWR('i', 195, struct if_nexusreq) 247 #define SIOCGIFPROTOLIST _IOWR('i', 196, struct if_protolistreq) /* get list of attached protocols */ 248 #ifdef BSD_KERNEL_PRIVATE 249 #define SIOCGIFPROTOLIST32 _IOWR('i', 196, struct if_protolistreq32) 250 #define SIOCGIFPROTOLIST64 _IOWR('i', 196, struct if_protolistreq64) 251 #endif /* BSD_KERNEL_PRIVATE */ 252 253 #define SIOCGIFTCPKAOMAX _IOWR('i', 198, struct ifreq) /* Max TCP keep alive offload slots */ 254 #define SIOCGIFLOWPOWER _IOWR('i', 199, struct ifreq) /* Low Power Mode */ 255 #define SIOCSIFLOWPOWER _IOWR('i', 200, struct ifreq) /* Low Power Mode */ 256 257 #define SIOCGIFCLAT46ADDR _IOWR('i', 201, struct if_clat46req) 258 259 #define SIOCGIFMPKLOG _IOWR('i', 202, struct ifreq) /* Multi-layer Packet Logging */ 260 #define SIOCSIFMPKLOG _IOWR('i', 203, struct ifreq) /* Multi-layer Packet Logging */ 261 262 #define SIOCGIFCONSTRAINED _IOWR('i', 204, struct ifreq) /* get interface constrained flag */ 263 #define SIOCSIFCONSTRAINED _IOWR('i', 205, struct ifreq) /* mark interface constrained */ 264 265 #define SIOCGIFXFLAGS _IOWR('i', 206, struct ifreq) /* get extended ifnet flags */ 266 267 #define SIOCGIFNOACKPRIO _IOWR('i', 207, struct ifreq) /* get interface no ack prioritization flag */ 268 #define SIOCSIFNOACKPRIO _IOWR('i', 208, struct ifreq) /* mark interface no ack prioritization flagd */ 269 #define SIOCGETROUTERMODE _IOWR('i', 209, struct ifreq) /* get IPv4 router mode state */ 270 271 #define SIOCSIFNETWORKID _IOWR('i', 210, struct if_netidreq) /* set Network Identifier for a given interface */ 272 273 #define SIOCSIFMARKWAKEPKT _IOWR('i', 211, struct ifreq) /* to mark the next input packet with wake flag */ 274 275 #define SIOCSIFESTTHROUGHPUT _IOWR('i', 212, struct ifreq) /* set ifru_estimated_throughput */ 276 #define SIOCSIFRADIODETAILS _IOWR('i', 213, struct ifreq) /* set ifru_radio_details */ 277 278 #define SIOCSIFLINKQUALITYMETRIC _IOWR('i', 214, struct ifreq) /* set LQM */ 279 280 #define SIOCSIFNOTRAFFICSHAPING _IOWR('i', 215, struct ifreq) /* skip dummynet and netem traffic shaping */ 281 #define SIOCGIFNOTRAFFICSHAPING _IOWR('i', 216, struct ifreq) /* skip dummynet and netem traffic shaping */ 282 283 #define SIOCGIFGENERATIONID _IOWR('i', 217, struct ifreq) /* value of generation count at interface creation */ 284 285 #define SIOCGIFULTRACONSTRAINED _IOWR('i', 218, struct ifreq) /* get interface ultra constrained flag */ 286 #define SIOCSIFULTRACONSTRAINED _IOWR('i', 219, struct ifreq) /* mark interface ultra constrained */ 287 288 #define SIOCSIFPEEREGRESSFUNCTIONALTYPE _IOWR('i', 220, struct ifreq) /* set the peer device's egress interface type */ 289 290 #define SIOCSIFDIRECTLINK _IOWR('i', 221, struct ifreq) /* set DIRECTLINK */ 291 292 #define SIOCSIFISVPN _IOWR('i', 223, struct ifreq) /* marks interface to be used as a VPN */ 293 294 #define SIOCSIFDELAYWAKEPKTEVENT _IOW('i', 224, struct ifreq) 295 #define SIOCGIFDELAYWAKEPKTEVENT _IOWR('i', 224, struct ifreq) 296 297 #define SIOCSIFDISABLEINPUT _IOW('i', 225, struct ifreq) 298 #define SIOCGIFDISABLEINPUT _IOWR('i', 225, struct ifreq) 299 300 #define SIOCSIFCONGESTEDLINK _IOW('i', 226, struct ifreq) /* ifr_intval */ 301 #define SIOCGIFCONGESTEDLINK _IOWR('i', 226, struct ifreq) /* ifr_intval */ 302 303 #define SIOCSIFISCOMPANIONLINK _IOW('i', 227, struct ifreq) /* marks interface as a companion link interface */ 304 305 #define SIOCSIFL4S _IOW('i', 228, struct ifreq) /* Set L4S enablement state (Enable or Disable) */ 306 #define SIOCGIFL4S _IOWR('i', 228, struct ifreq) 307 308 #endif /* !_SYS_SOCKIO_PRIVATE_H_ */ 309