"Inital commit to Gerrit"
[profile/ivi/dhcp.git] / includes / osdep.h
1 /* osdep.h
2
3    Operating system dependencies... */
4
5 /*
6  * Copyright (c) 2004-2005,2007-2010 by Internet Systems Consortium,
7  *                                      Inc. ("ISC")
8  * Copyright (c) 1996-2003 by Internet Software Consortium
9  *
10  * Permission to use, copy, modify, and distribute this software for any
11  * purpose with or without fee is hereby granted, provided that the above
12  * copyright notice and this permission notice appear in all copies.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
15  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
16  * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
17  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
18  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
19  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
20  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21  *
22  *   Internet Systems Consortium, Inc.
23  *   950 Charter Street
24  *   Redwood City, CA 94063
25  *   <info@isc.org>
26  *   https://www.isc.org/
27  *
28  * This software has been written for Internet Systems Consortium
29  * by Ted Lemon in cooperation with Vixie Enterprises and Nominum, Inc.
30  * To learn more about Internet Systems Consortium, see
31  * ``https://www.isc.org/''.  To learn more about Vixie Enterprises,
32  * see ``http://www.vix.com''.   To learn more about Nominum, Inc., see
33  * ``http://www.nominum.com''.
34  */
35
36 #if !defined (__ISC_DHCP_OSDEP_H__)
37 #define __ISC_DHCP_OSDEP_H__
38
39 #include "site.h"
40
41 #include "config.h"
42
43 #include <inttypes.h>
44
45 #ifndef LITTLE_ENDIAN
46 #define LITTLE_ENDIAN 1234
47 #endif /* LITTLE_ENDIAN */
48
49 #ifndef BIG_ENDIAN
50 #define BIG_ENDIAN 4321
51 #endif /* BIG_ENDIAN */
52
53 #ifndef BYTE_ORDER
54 #define BYTE_ORDER DHCP_BYTE_ORDER
55 #endif /* BYTE_ORDER */
56
57 /* Porting::
58
59    If you add a new network API, you must add a check for it below: */
60
61 #if !defined (USE_SOCKETS) && \
62     !defined (USE_SOCKET_SEND) && \
63     !defined (USE_SOCKET_RECEIVE) && \
64     !defined (USE_RAW_SOCKETS) && \
65     !defined (USE_RAW_SEND) && \
66     !defined (USE_SOCKET_RECEIVE) && \
67     !defined (USE_BPF) && \
68     !defined (USE_BPF_SEND) && \
69     !defined (USE_BPF_RECEIVE) && \
70     !defined (USE_LPF) && \
71     !defined (USE_LPF_SEND) && \
72     !defined (USE_LPF_RECEIVE) && \
73     !defined (USE_NIT) && \
74     !defined (USE_NIT_SEND) && \
75     !defined (USE_NIT_RECEIVE) && \
76     !defined (USE_DLPI_SEND) && \
77     !defined (USE_DLPI_RECEIVE)
78 /* Determine default socket API to USE. */
79 # if defined(HAVE_BPF)
80 #  define USE_BPF 1
81 # elif defined(HAVE_LPF)
82 #  define USE_LPF 1
83 # elif defined(HAVE_DLPI)
84 #  define USE_DLPI 1
85 # endif
86 #endif
87
88 #if !defined (TIME_MAX)
89 # define TIME_MAX 2147483647
90 #endif
91
92 /* snprintf/vsnprintf hacks.  for systems with no libc versions only. */
93 #ifdef NO_SNPRINTF
94   extern int isc_print_snprintf(char *, size_t, const char *, ...);
95   extern int isc_print_vsnprintf(char *, size_t, const char *, va_list ap);
96 # define snprintf  isc_print_snprintf
97 # define vsnprintf isc_print_vsnprintf
98 #endif
99
100 /* Porting::
101
102    If you add a new network API, and have it set up so that it can be
103    used for sending or receiving, but doesn't have to be used for both,
104    then set up an ifdef like the ones below: */
105
106 #ifdef USE_SOCKETS
107 #  define USE_SOCKET_SEND
108 #  define USE_SOCKET_RECEIVE
109 #  if defined(HAVE_DLPI)
110 #    define USE_DLPI_HWADDR
111 #  endif
112 #endif
113
114 #ifdef USE_RAW_SOCKETS
115 #  define USE_RAW_SEND
116 #  define USE_SOCKET_RECEIVE
117 #endif
118
119 #ifdef USE_BPF
120 #  define USE_BPF_SEND
121 #  define USE_BPF_RECEIVE
122 #endif
123
124 #ifdef USE_LPF
125 #  define USE_LPF_SEND
126 #  define USE_LPF_RECEIVE
127 #endif
128
129 #ifdef USE_NIT
130 #  define USE_NIT_SEND
131 #  define USE_NIT_RECEIVE
132 #endif
133
134 #ifdef USE_DLPI
135 #  define USE_DLPI_SEND
136 #  define USE_DLPI_RECEIVE
137 #endif
138
139 #ifdef USE_UPF
140 #  define USE_UPF_SEND
141 #  define USE_UPF_RECEIVE
142 #endif
143
144 /* Porting::
145
146    If you add support for sending packets directly out an interface,
147    and your support does not do ARP or routing, you must use a fallback
148    mechanism to deal with packets that need to be sent to routers.
149    Currently, all low-level packet interfaces use BSD sockets as a
150    fallback. */
151
152 #if defined (USE_BPF_SEND) || defined (USE_NIT_SEND) || \
153     defined (USE_DLPI_SEND) || defined (USE_UPF_SEND) || \
154     defined (USE_LPF_SEND) || \
155     (defined (USE_SOCKET_SEND) && defined (HAVE_SO_BINDTODEVICE))
156 #  define USE_SOCKET_FALLBACK
157 #  define USE_FALLBACK
158 #endif
159
160 /* Porting::
161
162    If you add support for sending packets directly out an interface
163    and need to be able to assemble packets, add the USE_XXX_SEND
164    definition for your interface to the list tested below. */
165
166 #if defined (USE_RAW_SEND) || defined (USE_BPF_SEND) || \
167                 defined (USE_NIT_SEND) || defined (USE_UPF_SEND) || \
168                 defined (USE_DLPI_SEND) || defined (USE_LPF_SEND)
169 #  define PACKET_ASSEMBLY
170 #endif
171
172 /* Porting::
173
174    If you add support for receiving packets directly from an interface
175    and need to be able to decode raw packets, add the USE_XXX_RECEIVE
176    definition for your interface to the list tested below. */
177
178 #if defined (USE_RAW_RECEIVE) || defined (USE_BPF_SEND) || \
179                 defined (USE_NIT_RECEIVE) || defined (USE_UPF_RECEIVE) || \
180                 defined (USE_DLPI_RECEIVE) || defined (USE_LPF_RECEIVE)
181 #  define PACKET_DECODING
182 #endif
183
184 /* If we don't have a DLPI packet filter, we have to filter in userland.
185    Probably not worth doing, actually. */
186 #if defined (USE_DLPI_RECEIVE) && !defined (USE_DLPI_PFMOD)
187 #  define USERLAND_FILTER
188 #endif
189
190 /* jmp_buf is assumed to be a struct unless otherwise defined in the
191    system header. */
192 #ifndef jbp_decl
193 # define jbp_decl(x)    jmp_buf *x
194 #endif
195 #ifndef jref
196 # define jref(x)        (&(x))
197 #endif
198 #ifndef jdref
199 # define jdref(x)       (*(x))
200 #endif
201 #ifndef jrefproto
202 # define jrefproto      jmp_buf *
203 #endif
204
205 #ifndef BPF_FORMAT
206 # define BPF_FORMAT "/dev/bpf%d"
207 #endif
208
209 #if defined (F_SETFD) && !defined (HAVE_SETFD)
210 # define HAVE_SETFD
211 #endif
212
213 #if defined (IFF_POINTOPOINT) && !defined (HAVE_IFF_POINTOPOINT)
214 # define HAVE_IFF_POINTOPOINT
215 #endif
216
217 #if defined (AF_LINK) && !defined (HAVE_AF_LINK)
218 # define HAVE_AF_LINK
219 #endif
220
221 #if defined (ARPHRD_TUNNEL) && !defined (HAVE_ARPHRD_TUNNEL)
222 # define HAVE_ARPHRD_TUNNEL
223 #endif
224
225 #if defined (ARPHRD_LOOPBACK) && !defined (HAVE_ARPHRD_LOOPBACK)
226 # define HAVE_ARPHRD_LOOPBACK
227 #endif
228
229 #if defined (ARPHRD_ROSE) && !defined (HAVE_ARPHRD_ROSE)
230 # define HAVE_ARPHRD_ROSE
231 #endif
232
233 #if defined (ARPHRD_IRDA) && !defined (HAVE_ARPHRD_IRDA)
234 # define HAVE_ARPHRD_IRDA
235 #endif
236
237 #if defined (ARPHRD_SIT) && !defined (HAVE_ARPHRD_SIT)
238 # define HAVE_ARPHRD_SIT
239 #endif
240
241 #if defined (ARPHRD_IEEE1394) & !defined (HAVE_ARPHRD_IEEE1394)
242 # define HAVE_ARPHRD_IEEE1394
243 #endif
244
245 #if defined (ARPHRD_IEEE802) && !defined (HAVE_ARPHRD_IEEE802)
246 # define HAVE_ARPHRD_IEEE802
247 #endif
248
249 #if defined (ARPHRD_IEEE802_TR) && !defined (HAVE_ARPHRD_IEEE802_TR)
250 # define HAVE_ARPHRD_IEEE802_TR
251 #endif
252
253 #if defined (ARPHRD_FDDI) && !defined (HAVE_ARPHRD_FDDI)
254 # define HAVE_ARPHRD_FDDI
255 #endif
256
257 #if defined (ARPHRD_AX25) && !defined (HAVE_ARPHRD_AX25)
258 # define HAVE_ARPHRD_AX25
259 #endif
260
261 #if defined (ARPHRD_NETROM) && !defined (HAVE_ARPHRD_NETROM)
262 # define HAVE_ARPHRD_NETROM
263 #endif
264
265 #if defined (ARPHRD_METRICOM) && !defined (HAVE_ARPHRD_METRICOM)
266 # define HAVE_ARPHRD_METRICOM
267 #endif
268
269 #if defined (SO_BINDTODEVICE) && !defined (HAVE_SO_BINDTODEVICE)
270 # define HAVE_SO_BINDTODEVICE
271 #endif
272
273 #if defined (AF_LINK) && !defined (HAVE_AF_LINK)
274 # define HAVE_AF_LINK
275 #endif
276
277 /* Linux needs to define SHUT_* in /usr/include/sys/socket.h someday... */
278 #if !defined (SHUT_RD)
279 # define SHUT_RD 0
280 #endif
281
282 #if !defined (SOCKLEN_T)
283 # define SOCKLEN_T socklen_t
284 #elif defined(_AIX)
285 #undef SOCKLEN_T
286 #define SOCKLEN_T socklen_t
287 #endif
288
289 #if !defined (STDERR_FILENO)
290 # define STDERR_FILENO 2
291 #endif
292
293 #endif /* __ISC_DHCP_OSDEP_H__ */