1 /* 2 * Copyright (c) 1982,1985,1986,1988 Regents of the University of California. 3 * 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 7.13 (Berkeley) 4/20/91 34 */ 35 36 #ifndef SOCKET_H 37 #define SOCKET_H 38 /* 39 * Definitions related to sockets: types, address families, options. 40 */ 41 42 /* 43 * Types 44 */ 45 #define SOCK_STREAM 1 /* stream socket */ 46 #define SOCK_DGRAM 2 /* datagram socket */ 47 #define SOCK_RAW 3 /* raw-protocol interface */ 48 #define SOCK_RDM 4 /* reliably-delivered message */ 49 #define SOCK_SEQPACKET 5 /* sequenced packet stream */ 50 51 /* 52 * Option flags per-socket. 53 */ 54 #define SO_DEBUG 0x0001 /* turn on debugging info recording */ 55 #define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ 56 #define SO_REUSEADDR 0x0004 /* allow local address reuse */ 57 #define SO_KEEPALIVE 0x0008 /* keep connections alive */ 58 #define SO_DONTROUTE 0x0010 /* just use interface addresses */ 59 #define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */ 60 #define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */ 61 #define SO_LINGER 0x0080 /* linger on close if data present */ 62 #define SO_OOBINLINE 0x0100 /* leave received OOB data in line */ 63 64 /* 65 * Additional options, not kept in so_options. 66 */ 67 #define SO_SNDBUF 0x1001 /* send buffer size */ 68 #define SO_RCVBUF 0x1002 /* receive buffer size */ 69 #define SO_SNDLOWAT 0x1003 /* send low-water mark */ 70 #define SO_RCVLOWAT 0x1004 /* receive low-water mark */ 71 #define SO_SNDTIMEO 0x1005 /* send timeout */ 72 #define SO_RCVTIMEO 0x1006 /* receive timeout */ 73 #define SO_ERROR 0x1007 /* get error status and clear */ 74 #define SO_TYPE 0x1008 /* get socket type */ 75 76 /* 77 * Structure used for manipulating linger option. 78 */ 79 struct linger { 80 int l_onoff; /* option on/off */ 81 int l_linger; /* linger time */ 82 }; 83 84 /* 85 * Level number for (get/set)sockopt() to apply to socket itself. 86 */ 87 #define SOL_SOCKET 0xffff /* options for socket level */ 88 89 /* 90 * Address families. 91 */ 92 #define AF_UNSPEC 0 /* unspecified */ 93 #define AF_UNIX 1 /* local to host (pipes, portals) */ 94 #define AF_INET 2 /* internetwork: UDP, TCP, etc. */ 95 #define AF_IMPLINK 3 /* arpanet imp addresses */ 96 #define AF_PUP 4 /* pup protocols: e.g. BSP */ 97 #define AF_CHAOS 5 /* mit CHAOS protocols */ 98 #define AF_NS 6 /* XEROX NS protocols */ 99 #define AF_ISO 7 /* ISO protocols */ 100 #define AF_OSI AF_ISO 101 #define AF_ECMA 8 /* european computer manufacturers */ 102 #define AF_DATAKIT 9 /* datakit protocols */ 103 #define AF_CCITT 10 /* CCITT protocols, X.25 etc */ 104 #define AF_SNA 11 /* IBM SNA */ 105 #define AF_DECnet 12 /* DECnet */ 106 #define AF_DLI 13 /* DEC Direct data link interface */ 107 #define AF_LAT 14 /* LAT */ 108 #define AF_HYLINK 15 /* NSC Hyperchannel */ 109 #define AF_APPLETALK 16 /* Apple Talk */ 110 #define AF_ROUTE 17 /* Internal Routing Protocol */ 111 #define AF_LINK 18 /* Link layer interface */ 112 #define pseudo_AF_XTP 19 /* eXpress Transfer Protocol (no AF) */ 113 114 #define AF_MAX 20 115 116 /* 117 * Structure used by kernel to store most 118 * addresses. 119 */ 120 struct sockaddr { 121 u_char sa_len; /* total length */ 122 u_char sa_family; /* address family */ 123 char sa_data[14]; /* actually longer; address value */ 124 }; 125 126 /* 127 * Structure used by kernel to pass protocol 128 * information in raw sockets. 129 */ 130 struct sockproto { 131 u_short sp_family; /* address family */ 132 u_short sp_protocol; /* protocol */ 133 }; 134 135 /* 136 * Protocol families, same as address families for now. 137 */ 138 #define PF_UNSPEC AF_UNSPEC 139 #define PF_UNIX AF_UNIX 140 #define PF_INET AF_INET 141 #define PF_IMPLINK AF_IMPLINK 142 #define PF_PUP AF_PUP 143 #define PF_CHAOS AF_CHAOS 144 #define PF_NS AF_NS 145 #define PF_ISO AF_ISO 146 #define PF_OSI AF_ISO 147 #define PF_ECMA AF_ECMA 148 #define PF_DATAKIT AF_DATAKIT 149 #define PF_CCITT AF_CCITT 150 #define PF_SNA AF_SNA 151 #define PF_DECnet AF_DECnet 152 #define PF_DLI AF_DLI 153 #define PF_LAT AF_LAT 154 #define PF_HYLINK AF_HYLINK 155 #define PF_APPLETALK AF_APPLETALK 156 #define PF_ROUTE AF_ROUTE 157 #define PF_LINK AF_LINK 158 #define PF_XTP pseudo_AF_XTP /* really just proto family, no AF */ 159 160 #define PF_MAX AF_MAX 161 162 /* 163 * Maximum queue length specifiable by listen. 164 */ 165 #define SOMAXCONN 5 166 167 /* 168 * Message header for recvmsg and sendmsg calls. 169 * Used value-result for recvmsg, value only for sendmsg. 170 */ 171 struct msghdr { 172 caddr_t msg_name; /* optional address */ 173 u_int msg_namelen; /* size of address */ 174 struct iovec *msg_iov; /* scatter/gather array */ 175 u_int msg_iovlen; /* # elements in msg_iov */ 176 caddr_t msg_control; /* ancillary data, see below */ 177 u_int msg_controllen; /* ancillary data buffer len */ 178 int msg_flags; /* flags on received message */ 179 }; 180 181 #define MSG_OOB 0x1 /* process out-of-band data */ 182 #define MSG_PEEK 0x2 /* peek at incoming message */ 183 #define MSG_DONTROUTE 0x4 /* send without using routing tables */ 184 #define MSG_EOR 0x8 /* data completes record */ 185 #define MSG_TRUNC 0x10 /* data discarded before delivery */ 186 #define MSG_CTRUNC 0x20 /* control data lost before delivery */ 187 #define MSG_WAITALL 0x40 /* wait for full request or error */ 188 189 /* 190 * Header for ancillary data objects in msg_control buffer. 191 * Used for additional information with/about a datagram 192 * not expressible by flags. The format is a sequence 193 * of message elements headed by cmsghdr structures. 194 */ 195 struct cmsghdr { 196 u_int cmsg_len; /* data byte count, including hdr */ 197 int cmsg_level; /* originating protocol */ 198 int cmsg_type; /* protocol-specific type */ 199 /* followed by u_char cmsg_data[]; */ 200 }; 201 202 /* given pointer to struct adatahdr, return pointer to data */ 203 #define CMSG_DATA(cmsg) ((u_char *)((cmsg) + 1)) 204 205 /* given pointer to struct adatahdr, return pointer to next adatahdr */ 206 #define CMSG_NXTHDR(mhdr, cmsg) \ 207 (((caddr_t)(cmsg) + (cmsg)->cmsg_len + sizeof(struct cmsghdr) > \ 208 (mhdr)->msg_control + (mhdr)->msg_controllen) ? \ 209 (struct cmsghdr *)NULL : \ 210 (struct cmsghdr *)((caddr_t)(cmsg) + ALIGN((cmsg)->cmsg_len))) 211 212 #define CMSG_FIRSTHDR(mhdr) ((struct cmsghdr *)(mhdr)->msg_control) 213 214 /* "Socket"-level control message types: */ 215 #define SCM_RIGHTS 0x01 /* access rights (array of int) */ 216 217 /* 218 * 4.3 compat sockaddr, move to compat file later 219 */ 220 struct osockaddr { 221 u_short sa_family; /* address family */ 222 char sa_data[14]; /* up to 14 bytes of direct address */ 223 }; 224 225 /* 226 * 4.3-compat message header (move to compat file later). 227 */ 228 struct omsghdr { 229 caddr_t msg_name; /* optional address */ 230 int msg_namelen; /* size of address */ 231 struct iovec *msg_iov; /* scatter/gather array */ 232 int msg_iovlen; /* # elements in msg_iov */ 233 caddr_t msg_accrights; /* access rights sent/received */ 234 int msg_accrightslen; 235 }; 236 237 #ifndef KERNEL 238 239 #include <sys/cdefs.h> 240 241 __BEGIN_DECLS 242 int accept __P((int, struct sockaddr *, int *)); 243 int bind __P((int, const struct sockaddr *, int)); 244 int connect __P((int, const struct sockaddr *, int)); 245 int getpeername __P((int, struct sockaddr *, int *)); 246 int getsockname __P((int, struct sockaddr *, int *)); 247 int getsockopt __P((int, int, int, void *, int *)); 248 int listen __P((int, int)); 249 int recv __P((int, void *, int, int)); 250 int recvfrom __P((int, void *, int, int, 251 struct sockaddr *, int *)); 252 int recvmsg __P((int, struct msghdr *, int)); 253 int send __P((int, const void *, int, int)); 254 int sendto __P((int, const void *, int, int, const struct sockaddr *, int)); 255 int sendmsg __P((int, const struct msghdr *, int)); 256 int setsockopt __P((int, int, int, const void *, int)); 257 int shutdown __P((int, int)); 258 int socket __P((int, int, int)); 259 int socketpair __P((int, int, int, int *)); 260 __END_DECLS 261 262 #endif /* !KERNEL */ 263 #endif /* SOCKET_H */ 264