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 2006 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _SYS_LX_SOCKET_H 27 #define _SYS_LX_SOCKET_H 28 29 #pragma ident "%Z%%M% %I% %E% SMI" 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 #include <sys/lx_types.h> 36 37 /* 38 * Linux address family definitions 39 * Some of these are not supported 40 */ 41 #define LX_AF_UNSPEC 0 /* Unspecified */ 42 #define LX_AF_UNIX 1 /* local file/pipe name */ 43 #define LX_AF_INET 2 /* IP protocol family */ 44 #define LX_AF_AX25 3 /* Amateur Radio AX.25 */ 45 #define LX_AF_IPX 4 /* Novell Internet Protocol */ 46 #define LX_AF_APPLETALK 5 /* Appletalk */ 47 #define LX_AF_NETROM 6 /* Amateur radio */ 48 #define LX_AF_BRIDGE 7 /* Multiprotocol bridge */ 49 #define LX_AF_ATMPVC 8 /* ATM PVCs */ 50 #define LX_AF_X25 9 /* X.25 */ 51 #define LX_AF_INET6 10 /* IPV 6 */ 52 #define LX_AF_ROSE 11 /* Amateur Radio X.25 */ 53 #define LX_AF_DECnet 12 /* DECnet */ 54 #define LX_AF_NETBEUI 13 /* 802.2LLC */ 55 #define LX_AF_SECURITY 14 /* Security callback */ 56 #define LX_AF_KEY 15 /* key management */ 57 #define LX_AF_ROUTE 16 /* Alias to emulate 4.4BSD */ 58 #define LX_AF_PACKET 17 /* Packet family */ 59 #define LX_AF_ASH 18 /* Ash ? */ 60 #define LX_AF_ECONET 19 /* Acorn Econet */ 61 #define LX_AF_ATMSVC 20 /* ATM SVCs */ 62 #define LX_AF_SNA 22 /* Linux SNA */ 63 #define LX_AF_IRDA 23 /* IRDA sockets */ 64 #define LX_AF_PPPOX 24 /* PPPoX sockets */ 65 #define LX_AF_WANPIPE 25 /* Wanpipe API sockets */ 66 #define LX_AF_BLUETOOTH 31 /* Bluetooth sockets */ 67 #define LX_AF_MAX 32 /* MAX socket type */ 68 69 #define AF_NOTSUPPORTED -1 70 #define AF_INVAL -2 71 72 /* 73 * Linux ARP protocol hardware identifiers 74 */ 75 #define LX_ARPHRD_ETHER 1 /* Ethernet */ 76 #define LX_ARPHRD_LOOPBACK 772 /* Loopback */ 77 #define LX_ARPHRD_VOID 0xffff /* Unknown */ 78 79 /* 80 * Linux socket type definitions 81 */ 82 #define LX_SOCK_STREAM 1 /* Connection-based byte streams */ 83 #define LX_SOCK_DGRAM 2 /* Connectionless, datagram */ 84 #define LX_SOCK_RAW 3 /* Raw protocol interface */ 85 #define LX_SOCK_RDM 4 /* Reliably-delivered message */ 86 #define LX_SOCK_SEQPACKET 5 /* Sequenced packet stream */ 87 #define LX_SOCK_PACKET 10 /* Linux specific */ 88 #define LX_SOCK_MAX 11 89 90 #define SOCK_NOTSUPPORTED -1 91 #define SOCK_INVAL -2 92 93 /* 94 * Options for use with [gs]etsockopt at the IP level. 95 * IPPROTO_IP 96 */ 97 #define LX_IP_TOS 1 98 #define LX_IP_TTL 2 99 #define LX_IP_HDRINCL 3 100 #define LX_IP_OPTIONS 4 101 #define LX_IP_ROUTER_ALERT 5 102 #define LX_IP_RECVOPTS 6 103 #define LX_IP_RETOPTS 7 104 #define LX_IP_PKTINFO 8 105 #define LX_IP_PKTOPTIONS 9 106 #define LX_IP_MTU_DISCOVER 10 107 #define LX_IP_RECVERR 11 108 #define LX_IP_RECVTTL 12 109 #define LX_IP_RECVTOS 13 110 #define LX_IP_MTU 14 111 #define LX_IP_FREEBIND 15 112 #define LX_IP_MULTICAST_IF 32 113 #define LX_IP_MULTICAST_TTL 33 114 #define LX_IP_MULTICAST_LOOP 34 115 #define LX_IP_ADD_MEMBERSHIP 35 116 #define LX_IP_DROP_MEMBERSHIP 36 117 118 /* 119 * Options for use with [gs]etsockopt at the TCP level. 120 * IPPROTO_TCP 121 */ 122 #define LX_TCP_NODELAY 1 /* Don't delay send to coalesce packets */ 123 #define LX_TCP_MAXSEG 2 /* Set maximum segment size */ 124 #define LX_TCP_CORK 3 /* Control sending of partial frames */ 125 #define LX_TCP_KEEPIDLE 4 /* Start keeplives after this period */ 126 #define LX_TCP_KEEPINTVL 5 /* Interval between keepalives */ 127 #define LX_TCP_KEEPCNT 6 /* Number of keepalives before death */ 128 #define LX_TCP_SYNCNT 7 /* Number of SYN retransmits */ 129 #define LX_TCP_LINGER2 8 /* Life time of orphaned FIN-WAIT-2 state */ 130 #define LX_TCP_DEFER_ACCEPT 9 /* Wake up listener only when data arrive */ 131 #define LX_TCP_WINDOW_CLAMP 10 /* Bound advertised window */ 132 #define LX_TCP_INFO 11 /* Information about this connection. */ 133 #define LX_TCP_QUICKACK 12 /* Bock/reenable quick ACKs. */ 134 135 /* 136 * Options for use with [gs]etsockopt at the IGMP level. 137 * IPPROTO_IGMP 138 */ 139 #define LX_IGMP_MINLEN 8 140 #define LX_IGMP_MAX_HOST_REPORT_DELAY 10 141 #define LX_IGMP_HOST_MEMBERSHIP_QUERY 0x11 142 #define LX_IGMP_HOST_MEMBERSHIP_REPORT 0x12 143 #define LX_IGMP_DVMRP 0x13 144 #define LX_IGMP_PIM 0x14 145 #define LX_IGMP_TRACE 0x15 146 #define LX_IGMP_HOST_NEW_MEMBERSHIP_REPORT 0x16 147 #define LX_IGMP_HOST_LEAVE_MESSAGE 0x17 148 #define LX_IGMP_MTRACE_RESP 0x1e 149 #define LX_IGMP_MTRACE 0x1f 150 151 /* 152 * Options for use with [gs]etsockopt at the SOL_SOCKET level. 153 */ 154 #define LX_SOL_SOCKET 1 155 156 #define LX_SCM_RIGHTS 1 157 #define LX_SCM_CRED 2 158 159 #define LX_SO_DEBUG 1 160 #define LX_SO_REUSEADDR 2 161 #define LX_SO_TYPE 3 162 #define LX_SO_ERROR 4 163 #define LX_SO_DONTROUTE 5 164 #define LX_SO_BROADCAST 6 165 #define LX_SO_SNDBUF 7 166 #define LX_SO_RCVBUF 8 167 #define LX_SO_KEEPALIVE 9 168 #define LX_SO_OOBINLINE 10 169 #define LX_SO_NO_CHECK 11 170 #define LX_SO_PRIORITY 12 171 #define LX_SO_LINGER 13 172 #define LX_SO_BSDCOMPAT 14 173 /* To add :#define LX_SO_REUSEPORT 15 */ 174 #define LX_SO_PASSCRED 16 175 #define LX_SO_PEERCRED 17 176 #define LX_SO_RCVLOWAT 18 177 #define LX_SO_SNDLOWAT 19 178 #define LX_SO_RCVTIMEO 20 179 #define LX_SO_SNDTIMEO 21 180 /* Security levels - as per NRL IPv6 - don't actually do anything */ 181 #define LX_SO_SECURITY_AUTHENTICATION 22 182 #define LX_SO_SECURITY_ENCRYPTION_TRANSPORT 23 183 #define LX_SO_SECURITY_ENCRYPTION_NETWORK 24 184 #define LX_SO_BINDTODEVICE 25 185 /* Socket filtering */ 186 #define LX_SO_ATTACH_FILTER 26 187 #define LX_SO_DETACH_FILTER 27 188 #define LX_SO_PEERNAME 28 189 #define LX_SO_TIMESTAMP 29 190 #define LX_SCM_TIMESTAMP LX_SO_TIMESTAMP 191 #define LX_SO_ACCEPTCONN 30 192 193 /* 194 * Linux socketcall indices. 195 * These constitute all 17 socket related system calls 196 * 197 * These system calls are called via a single system call socketcall(). 198 * The first arg being the endex of the system call type 199 */ 200 #define LX_SOCKET 1 201 #define LX_BIND 2 202 #define LX_CONNECT 3 203 #define LX_LISTEN 4 204 #define LX_ACCEPT 5 205 #define LX_GETSOCKNAME 6 206 #define LX_GETPEERNAME 7 207 #define LX_SOCKETPAIR 8 208 #define LX_SEND 9 209 #define LX_RECV 10 210 #define LX_SENDTO 11 211 #define LX_RECVFROM 12 212 #define LX_SHUTDOWN 13 213 #define LX_SETSOCKOPT 14 214 #define LX_GETSOCKOPT 15 215 #define LX_SENDMSG 16 216 #define LX_RECVMSG 17 217 218 /* 219 * Linux socket flags for use with recv(2)/send(2)/recvmsg(2)/sendmsg(2) 220 */ 221 #define LX_MSG_OOB 1 222 #define LX_MSG_PEEK 2 223 #define LX_MSG_DONTROUTE 4 224 #define LX_MSG_CTRUNC 8 225 #define LX_MSG_PROXY 0x10 226 #define LX_MSG_TRUNC 0x20 227 #define LX_MSG_DONTWAIT 0x40 228 #define LX_MSG_EOR 0x80 229 #define LX_MSG_WAITALL 0x100 230 #define LX_MSG_FIN 0x200 231 #define LX_MSG_SYN 0x400 232 #define LX_MSG_CONFIRM 0x800 233 #define LX_MSG_RST 0x1000 234 #define LX_MSG_ERRQUEUE 0x2000 235 #define LX_MSG_NOSIGNAL 0x4000 236 #define LX_MSG_MORE 0x8000 237 238 struct lx_msghdr { 239 void *msg_name; /* optional address */ 240 socklen_t msg_namelen; /* size of address */ 241 struct iovec *msg_iov; /* scatter/gather array */ 242 int msg_iovlen; /* # elements in msg_iov */ 243 void *msg_control; /* ancillary data */ 244 socklen_t msg_controllen; /* ancillary data buffer len */ 245 int msg_flags; /* flags on received message */ 246 }; 247 248 struct lx_ucred { 249 pid_t lxu_pid; 250 lx_uid_t lxu_uid; 251 lx_gid_t lxu_gid; 252 }; 253 254 #ifdef __cplusplus 255 } 256 #endif 257 258 #endif /* _SYS_LX_SOCKET_H */