Annotation of embedaddon/dhcp/includes/osdep.h, revision 1.1.1.1
1.1 misho 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__ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>