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