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