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