Home | History | Annotate | Download | only in sys
      1 /*
      2  * CDDL HEADER START
      3  *
      4  * The contents of this file are subject to the terms of the
      5  * Common Development and Distribution License (the "License").
      6  * You may not use this file except in compliance with the License.
      7  *
      8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9  * or http://www.opensolaris.org/os/licensing.
     10  * See the License for the specific language governing permissions
     11  * and limitations under the License.
     12  *
     13  * When distributing Covered Code, include this CDDL HEADER in each
     14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15  * If applicable, add the following below this CDDL HEADER, with the
     16  * fields enclosed by brackets "[]" replaced with your own identifying
     17  * information: Portions Copyright [yyyy] [name of copyright owner]
     18  *
     19  * CDDL HEADER END
     20  */
     21 /*
     22  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
     23  * Use is subject to license terms.
     24  */
     25 
     26 /*	Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T	*/
     27 /*	  All Rights Reserved  	*/
     28 
     29 /*
     30  * University Copyright- Copyright (c) 1982, 1986, 1988
     31  * The Regents of the University of California
     32  * All Rights Reserved
     33  *
     34  * University Acknowledgment- Portions of this document are derived from
     35  * software developed by the University of California, Berkeley, and its
     36  * contributors.
     37  */
     38 
     39 #ifndef	_SYS_SOCKIO_H
     40 #define	_SYS_SOCKIO_H
     41 
     42 /*
     43  * General socket ioctl definitions.
     44  */
     45 
     46 #include <sys/ioccom.h>
     47 
     48 #ifdef	__cplusplus
     49 extern "C" {
     50 #endif
     51 
     52 /* socket i/o controls */
     53 #define	SIOCSHIWAT	_IOW('s',  0, int)		/* set high watermark */
     54 #define	SIOCGHIWAT	_IOR('s',  1, int)		/* get high watermark */
     55 #define	SIOCSLOWAT	_IOW('s',  2, int)		/* set low watermark */
     56 #define	SIOCGLOWAT	_IOR('s',  3, int)		/* get low watermark */
     57 #define	SIOCATMARK	_IOR('s',  7, int)		/* at oob mark? */
     58 #define	SIOCSPGRP	_IOW('s',  8, int)		/* set process group */
     59 #define	SIOCGPGRP	_IOR('s',  9, int)		/* get process group */
     60 
     61 /*
     62  * SIOCADDRT and SIOCDELRT ioctls need to be defined using _IOWN macro to
     63  * make them datamodel independent.
     64  */
     65 #define	SIOCADDRT	_IOWN('r', 10, 48)		/* add route */
     66 #define	SIOCDELRT	_IOWN('r', 11, 48)		/* delete route */
     67 
     68 /* For multicast routing. These might change in future release */
     69 #define	SIOCGETVIFCNT	_IOWR('r', 20, struct sioc_vif_req)
     70 							/* get vif pkt count */
     71 #define	SIOCGETSGCNT	_IOWR('r', 21, struct sioc_sg_req)
     72 							/* get s,g pkt count */
     73 #define	SIOCGETLSGCNT	_IOWR('r', 21, struct sioc_lsg_req)
     74 							/* get s,g pkt count */
     75 
     76 /*
     77  * Obsolete interface ioctls using struct ifreq that are supported
     78  * for compatibility. New interface ioctls use struct lifreq.
     79  */
     80 #define	SIOCSIFADDR	_IOW('i',  12, struct ifreq)	/* set if address */
     81 #define	SIOCGIFADDR	_IOWR('i', 13, struct ifreq)	/* get if address */
     82 #define	SIOCSIFDSTADDR	_IOW('i',  14, struct ifreq)	/* set p-p address */
     83 #define	SIOCGIFDSTADDR	_IOWR('i', 15, struct ifreq)	/* get p-p address */
     84 #define	SIOCSIFFLAGS	_IOW('i',  16, struct ifreq)	/* set if flags */
     85 #define	SIOCGIFFLAGS	_IOWR('i', 17, struct ifreq)	/* get if flags */
     86 #define	SIOCSIFMEM	_IOW('i',  18, struct ifreq)	/* set interface mem */
     87 #define	SIOCGIFMEM	_IOWR('i', 19, struct ifreq)	/* get interface mem */
     88 
     89 /*
     90  * Needs to be defined using _IOWRN macro to make it datamodel independent.
     91  * Argument is a struct ifconf.
     92  */
     93 #define	O_SIOCGIFCONF	_IOWRN('i', 20, 8)		/* old get if list */
     94 
     95 #define	SIOCSIFMTU	_IOW('i',  21, struct ifreq)	/* set if mtu */
     96 #define	SIOCGIFMTU	_IOWR('i', 22, struct ifreq)	/* get if mtu */
     97 
     98 	/* from 4.3BSD */
     99 #define	SIOCGIFBRDADDR	_IOWR('i', 23, struct ifreq)	/* get broadcast addr */
    100 #define	SIOCSIFBRDADDR	_IOW('i',  24, struct ifreq)	/* set broadcast addr */
    101 #define	SIOCGIFNETMASK	_IOWR('i', 25, struct ifreq)	/* get subnetmask */
    102 #define	SIOCSIFNETMASK	_IOW('i',  26, struct ifreq)	/* set subnetmask */
    103 #define	SIOCGIFMETRIC	_IOWR('i', 27, struct ifreq)	/* get if metric */
    104 #define	SIOCSIFMETRIC	_IOW('i',  28, struct ifreq)	/* set if metric */
    105 
    106 #define	SIOCSARP	_IOW('i',  30, struct arpreq)	/* set arp entry */
    107 #define	SIOCGARP	_IOWR('i', 31, struct arpreq)	/* get arp entry */
    108 #define	SIOCDARP	_IOW('i',  32, struct arpreq)	/* delete arp entry */
    109 #define	SIOCUPPER	_IOW('i',  40, struct ifreq)	/* attach upper layer */
    110 #define	SIOCLOWER	_IOW('i',  41, struct ifreq)	/* attach lower layer */
    111 #define	SIOCSETSYNC	_IOW('i',  44, struct ifreq)	/* set syncmode */
    112 #define	SIOCGETSYNC	_IOWR('i', 45, struct ifreq)	/* get syncmode */
    113 #define	SIOCSSDSTATS	_IOWR('i', 46, struct ifreq)	/* sync data stats */
    114 #define	SIOCSSESTATS	_IOWR('i', 47, struct ifreq)	/* sync error stats */
    115 
    116 #define	SIOCSPROMISC	_IOW('i',  48, int)		/* request promisc */
    117 							/* mode on/off */
    118 #define	SIOCADDMULTI	_IOW('i',  49, struct ifreq)	/* set m/c address */
    119 #define	SIOCDELMULTI	_IOW('i',  50, struct ifreq)	/* clr m/c address */
    120 
    121 /* STREAMS based socket emulation */
    122 
    123 #define	SIOCGETNAME	_IOR('s',  52, struct sockaddr)	/* getsockname */
    124 #define	SIOCGETPEER	_IOR('s',  53, struct sockaddr)	/* getpeername */
    125 #define	IF_UNITSEL	_IOW('s',  54, int)		/* set unit number */
    126 #define	SIOCXPROTO	_IO('s',   55)			/* empty proto table */
    127 
    128 #define	SIOCIFDETACH	_IOW('i',  56, struct ifreq)	/* detach interface */
    129 #define	SIOCGENPSTATS	_IOWR('i', 57, struct ifreq)	/* get ENP stats */
    130 #define	SIOCX25XMT	_IOWR('i', 59, struct ifreq)	/* start a slp proc */
    131 							/* in x25if */
    132 #define	SIOCX25RCV	_IOWR('i', 60, struct ifreq)	/* start a slp proc */
    133 							/* in x25if */
    134 #define	SIOCX25TBL	_IOWR('i', 61, struct ifreq)	/* xfer lun table to */
    135 							/* kernel */
    136 #define	SIOCSLGETREQ	_IOWR('i', 71, struct ifreq)	/* wait for switched */
    137 							/* SLIP request */
    138 #define	SIOCSLSTAT	_IOW('i',  72, struct ifreq)	/* pass SLIP info to */
    139 							/* kernel */
    140 #define	SIOCSIFNAME	_IOW('i',  73, struct ifreq)	/* set interface name */
    141 #define	SIOCGENADDR	_IOWR('i', 85, struct ifreq)	/* Get ethernet addr */
    142 #define	SIOCGIFNUM	_IOR('i',  87, int)		/* get number of ifs */
    143 
    144 #define	SIOCGIFMUXID	_IOWR('i', 88, struct ifreq)	/* get if muxid */
    145 #define	SIOCSIFMUXID	_IOW('i',  89, struct ifreq)	/* set if muxid */
    146 
    147 #define	SIOCGIFINDEX	_IOWR('i', 90, struct ifreq)	/* get if index */
    148 #define	SIOCSIFINDEX	_IOW('i',  91, struct ifreq)	/* set if index */
    149 #define	SIOCGIFCONF	_IOWRN('i', 92, 8)		/* get if list */
    150 
    151 /*
    152  * New interface ioctls that use the struct lifreq. Can be used for
    153  * both IPv4 and IPv6.
    154  */
    155 #define	SIOCLIFREMOVEIF	_IOW('i',  110, struct lifreq)	/* delete logical */
    156 #define	SIOCLIFADDIF	_IOWR('i', 111, struct lifreq)	/* create logical */
    157 
    158 #define	SIOCSLIFADDR	_IOW('i',  112, struct lifreq)	/* set if address */
    159 #define	SIOCGLIFADDR	_IOWR('i', 113, struct lifreq)	/* get if address */
    160 #define	SIOCSLIFDSTADDR	_IOW('i',  114, struct lifreq)	/* set p-p address */
    161 #define	SIOCGLIFDSTADDR	_IOWR('i', 115, struct lifreq)	/* get p-p address */
    162 #define	SIOCSLIFFLAGS	_IOW('i',  116, struct lifreq)	/* set if flags */
    163 #define	SIOCGLIFFLAGS	_IOWR('i', 117, struct lifreq)	/* get if flags */
    164 
    165 /*
    166  * Needs to be defined using _IOWRN macro to make it datamodel independent.
    167  * Argument is a struct lifconf.
    168  */
    169 #define	O_SIOCGLIFCONF	_IOWRN('i', 120, 16)		/* old get if list */
    170 #define	SIOCSLIFMTU	_IOW('i',  121, struct lifreq)	/* set if mtu */
    171 #define	SIOCGLIFMTU	_IOWR('i', 122, struct lifreq)	/* get if mtu */
    172 #define	SIOCGLIFBRDADDR	_IOWR('i', 123, struct lifreq)	/* get broadcast addr */
    173 #define	SIOCSLIFBRDADDR	_IOW('i',  124, struct lifreq)	/* set broadcast addr */
    174 #define	SIOCGLIFNETMASK	_IOWR('i', 125, struct lifreq)	/* get subnetmask */
    175 #define	SIOCSLIFNETMASK	_IOW('i',  126, struct lifreq)	/* set subnetmask */
    176 #define	SIOCGLIFMETRIC	_IOWR('i', 127, struct lifreq)	/* get if metric */
    177 #define	SIOCSLIFMETRIC	_IOW('i',  128, struct lifreq)	/* set if metric */
    178 #define	SIOCSLIFNAME	_IOWR('i', 129, struct lifreq)	/* set interface name */
    179 #define	SIOCGLIFNUM	_IOWR('i', 130, struct lifnum)	/* get number of ifs */
    180 #define	SIOCGLIFMUXID	_IOWR('i', 131, struct lifreq)	/* get if muxid */
    181 #define	SIOCSLIFMUXID	_IOW('i',  132, struct lifreq)	/* set if muxid */
    182 
    183 #define	SIOCGLIFINDEX	_IOWR('i', 133, struct lifreq)	/* get if index */
    184 #define	SIOCSLIFINDEX	_IOW('i',  134, struct lifreq)	/* set if index */
    185 
    186 #define	SIOCSLIFTOKEN	_IOW('i',  135, struct lifreq)	/* Set token for link */
    187 							/* local address and */
    188 							/* autoconf */
    189 #define	SIOCGLIFTOKEN	_IOWR('i', 136, struct lifreq)	/* Get token for link */
    190 							/* local address and */
    191 							/* autoconf */
    192 
    193 #define	SIOCSLIFSUBNET	_IOW('i',  137, struct lifreq)	/* set subnet prefix */
    194 #define	SIOCGLIFSUBNET	_IOWR('i', 138, struct lifreq)	/* get subnet prefix */
    195 
    196 #define	SIOCSLIFLNKINFO _IOW('i',  139, struct lifreq)	/* set link info */
    197 #define	SIOCGLIFLNKINFO _IOWR('i', 140, struct lifreq)	/* get link info */
    198 
    199 #define	SIOCLIFDELND	_IOW('i',  141, struct lifreq)	/* Delete ND entry */
    200 #define	SIOCLIFGETND	_IOWR('i', 142, struct lifreq)	/* Get ND entry */
    201 #define	SIOCLIFSETND	_IOW('i',  143, struct lifreq)	/* Set ND entry */
    202 
    203 /*
    204  * Address querying ioctls.
    205  */
    206 #define	SIOCTMYADDR	_IOWR('i', 144, struct sioc_addrreq)
    207 							/* My address? */
    208 #define	SIOCTONLINK	_IOWR('i', 145, struct sioc_addrreq)
    209 							/* Address on-link? */
    210 #define	SIOCTMYSITE	_IOWR('i', 146, struct sioc_addrreq)
    211 							/* In this site? */
    212 
    213 /* 147 and 148 were SIOC*TUNPARAM ioctls.  Feel free to re-use. */
    214 
    215 #define	SIOCFIPSECONFIG	_IOW('i',  149, 0)		/* Flush Policy  */
    216 #define	SIOCSIPSECONFIG	_IOW('i',  150, 0)		/* Set Policy */
    217 #define	SIOCDIPSECONFIG	_IOW('i',  151, 0)		/* Delete Policy */
    218 #define	SIOCLIPSECONFIG	_IOW('i',  152, 0)		/* List Policy */
    219 
    220 /*
    221  * 153 can be reused (was consolidation-private SIOCLIFFAILOVER).
    222  */
    223 
    224 /*
    225  * IP Multipathing ioctls.
    226  */
    227 #define	SIOCGLIFBINDING		_IOWR('i', 154, struct lifreq)
    228 #define	SIOCSLIFGROUPNAME	_IOW('i',  155, struct lifreq)
    229 #define	SIOCGLIFGROUPNAME	_IOWR('i', 156, struct lifreq)
    230 #define	SIOCGLIFGROUPINFO	_IOWR('i', 157, struct lifgroupinfo)
    231 
    232 /*
    233  * Leave 158 - 160 unused; used to be SIOC*IFARP ioctls.
    234  * However, 161 can be reused (was consolidation-private SIOCSLIFOINDEX).
    235  */
    236 
    237 /*
    238  * IOCTLS which provide an interface to the IPv6 address selection policy.
    239  */
    240 #define	SIOCGIP6ADDRPOLICY	_IOWRN('i', 162, 0)
    241 #define	SIOCSIP6ADDRPOLICY	_IOWN('i', 163, 0)
    242 
    243 /*
    244  * IOCTL for retrieving sorting info for a list of destination addrs.
    245  * Use the _IOWRN macro to make it datamodel independent.  Argument
    246  * is a struct dstinfo.
    247  */
    248 #define	SIOCGDSTINFO	_IOWRN('i', 164, 0)
    249 #define	SIOCGLIFCONF	_IOWRN('i', 165, 16)	/* get if list */
    250 
    251 /*
    252  * Extended IOCTLS for manipulating ARP cache entries.
    253  */
    254 #define	SIOCSXARP	_IOW('i', 166, struct xarpreq)	/* set an ARP entry */
    255 #define	SIOCGXARP	_IOWR('i', 167, struct xarpreq)	/* get an ARP entry */
    256 #define	SIOCDXARP	_IOW('i', 168, struct xarpreq)	/* delete ARP entry */
    257 
    258 /*
    259  * IOCTL private to sockfs.
    260  */
    261 #define	_SIOCSOCKFALLBACK _IOW('i', 169, 0)
    262 
    263 /*
    264  * IOCTLs for getting and setting zone associated with an interface, and
    265  * unplumbing interfaces associated with a given zone.
    266  */
    267 #define	SIOCGLIFZONE	_IOWR('i', 170, struct lifreq)	/* get zone id */
    268 #define	SIOCSLIFZONE	_IOW('i', 171, struct lifreq)	/* set zone id */
    269 
    270 /*
    271  * IOCTLS for handling SCTP options.
    272  */
    273 #define	SIOCSCTPSOPT	_IOWN('i', 172, 16)	/* Set SCTP option */
    274 #define	SIOCSCTPGOPT	_IOWRN('i', 173, 16)	/* Get SCTP option */
    275 #define	SIOCSCTPPEELOFF	_IOWR('i', 174, int)	/* SCTP peeloff */
    276 
    277 /*
    278  * IOCTLs for getting and setting the source address that is used for packets
    279  * going out on the given interface.
    280  */
    281 #define	SIOCGLIFUSESRC	_IOWR('i', 175, struct lifreq)	/* get src addr */
    282 #define	SIOCSLIFUSESRC	_IOW('i', 176, struct lifreq)	/* set src addr */
    283 
    284 /*
    285  * IOCTL used to get all the interfaces that use the the specified interfaces'
    286  * source address
    287  */
    288 #define	SIOCGLIFSRCOF	_IOWRN('i', 177, 16)		/* source of */
    289 
    290 /*
    291  * IOCTLs for source specific multicast; get or set a socket's
    292  * source filter for a particular multicast group.  Argument is
    293  * a struct group_filter.  Defined in RFC 3678.
    294  */
    295 #define	SIOCGMSFILTER	_IOWR('i', 178, 0)
    296 #define	SIOCSMSFILTER	_IOW('i', 179, 0)
    297 /*
    298  * IPv4-specific versions of the above; get or set a socket's source
    299  * filter for a particular multicast group, for PF_INET sockets only.
    300  * Argument is a struct ip_msfilter.
    301  */
    302 #define	SIOCGIPMSFILTER	_IOWR('i', 180, 0)
    303 #define	SIOCSIPMSFILTER	_IOW('i', 181, 0)
    304 
    305 /*
    306  * 182 can be reused (was consolidation-private SIOCSIPMPFAILBACK).
    307  */
    308 
    309 #define	SIOCSENABLESDP	_IOWR('i', 183, int)    /*  Enable SDP */
    310 
    311 #define	SIOCSQPTR	_IOWR('i', 184, int)    /* set q_ptr of stream */
    312 
    313 #define	SIOCGIFHWADDR	_IOWR('i', 185, int)	/* PF_PACKET */
    314 #define	SIOCGSTAMP	_IOWR('i', 186, struct timeval)	/* PF_PACKET */
    315 
    316 /*
    317  * Private ioctl for Integrated Load Balancer.  The ioctl length varies.
    318  */
    319 #define	SIOCILB		_IOWR('i', 187, 0)
    320 
    321 #ifdef	__cplusplus
    322 }
    323 #endif
    324 
    325 #endif	/* _SYS_SOCKIO_H */
    326