File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / dhcp / includes / osdep.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Oct 9 09:06:54 2012 UTC (11 years, 10 months ago) by misho
Branches: dhcp, MAIN
CVS tags: v4_1_R7p0, v4_1_R7, v4_1_R4, HEAD
dhcp 4.1 r7

    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>