1/* sample.h 2 3 Sample config file for clients. 4 5 This file is provided as a sample in case the system you want to run 6 on is not currently supported. If that is the case, follow the Porting:: 7 comments here and in other files as guides for what to change. Also, 8 note that this file hasn't been updated in a lo-o-o-ong time, so it's 9 probably worth looking at the config files for working ports as well. */ 10 11/* 12 * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") 13 * Copyright (c) 1996-2003 by Internet Software Consortium 14 * 15 * Permission to use, copy, modify, and distribute this software for any 16 * purpose with or without fee is hereby granted, provided that the above 17 * copyright notice and this permission notice appear in all copies. 18 * 19 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES 20 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 21 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR 22 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 23 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 24 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT 25 * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 26 * 27 * Internet Systems Consortium, Inc. 28 * 950 Charter Street 29 * Redwood City, CA 94063 30 * <info@isc.org> 31 * http://www.isc.org/ 32 * 33 * This software has been written for Internet Systems Consortium 34 * by Ted Lemon in cooperation with Vixie Enterprises and Nominum, Inc. 35 * To learn more about Internet Systems Consortium, see 36 * ``http://www.isc.org/''. To learn more about Vixie Enterprises, 37 * see ``http://www.vix.com''. To learn more about Nominum, Inc., see 38 * ``http://www.nominum.com''. 39 */ 40 41/* Porting:: 42 43 Some systems do not define basic integer types as shown below. 44 On some systems, you need to include <bitypes.h> or <sys/bitypes.h>. 45 If you get parse errors in dhcpd.h while compiling dhcpd.conf, try 46 including bitypes.h, and if that fails, use the hard-coded definitions 47 shown below. */ 48 49#if 0 50#include <sys/bitypes.h> 51#endif 52 53#if 0 54#define int8_t char 55#define int16_t short 56#define int32_t long 57 58#define u_int8_t unsigned char 59#define u_int16_t unsigned short 60#define u_int32_t unsigned long 61#endif 62 63#include <sys/types.h> 64 65/* Porting:: 66 67 The jmp_buf type as declared in <setjmp.h> is sometimes a structure 68 and sometimes an array. By default, we assume it's a structure. 69 If it's an array on your system, you may get compile warnings or errors 70 as a result in confpars.c. If so, try including the following definitions, 71 which treat jmp_buf as an array: */ 72 73#if 0 74#define jbp_decl(x) jmp_buf x 75#define jref(x) (x) 76#define jdref(x) (x) 77#define jrefproto jmp_buf 78#endif 79 80/* Porting:: 81 82 Some older systems (e.g., Ultrix) still use the 4.2BSD-style syslog 83 API. These differ from later versions of the syslog API in that the 84 openlog system call takes two arguments instead of three, and the 85 facility code (the third argument to modern versions of openlog()) 86 is ORed into the log priority in the syslog() call. 87 88 If you are running with the 4.2BSD-style syslog interface, define 89 SYSLOG_4_2. */ 90 91/* #define SYSLOG_4_2 */ 92 93#include <syslog.h> 94 95#include <string.h> 96#include <errno.h> 97#include <unistd.h> 98#include <sys/wait.h> 99#include <signal.h> 100#include <setjmp.h> 101#include <limits.h> 102 103extern int h_errno; 104 105#include <net/if.h> 106#include <net/if_arp.h> 107 108/* Porting:: 109 110 Some older systems do not have defines for IP type-of-service, 111 or don't define them the way we expect. If you get undefined 112 symbol errors on the following symbols, they probably need to be 113 defined here. */ 114 115#if 0 116#define IPTOS_LOWDELAY 0x10 117#define IPTOS_THROUGHPUT 0x08 118#define IPTOS_RELIABILITY 0x04 119#endif 120 121/* Porting:: 122 123 Newer BSD derivatives store non-permanent daemon files in a 124 directory called /var/run. If your system has a /var/run, 125 use it; otherwise, use /etc. */ 126 127#ifndef _PATH_DHCPD_PID 128#define _PATH_DHCPD_PID "/etc/dhcpd.pid" 129#endif 130#ifndef _PATH_DHCLIENT_PID 131#define _PATH_DHCLIENT_PID "/etc/dhclient.pid" 132#endif 133#ifndef _PATH_DHCRELAY_PID 134#define _PATH_DHCRELAY_PID "/etc/dhcrelay.pid" 135#endif 136 137/* Porting:: 138 139 If your system supports standard ANSI C, it should provide the file 140 /usr/include/stdarg.h. This contains the ANSI standard declarations 141 for functions which take a variable number of arguments. 142 143 Older systems with non-ANSI compilers cannot support this interface, 144 and generally use the older varargs interface, defined in <varargs.h>. 145 Some systems only support varargs, but define the interface in 146 <stdarg.h> anyway. 147 148 You must choose one of the two sets of definitions below. Try 149 stdarg.h first, unless you know it won't work. If you have 150 trouble compiling errwarn.c, try switching to the varargs.h definitions. 151 If that fails, try using stdarg.h with the varargs definitions. */ 152 153#if 0 154/* Stdarg definitions for ANSI-compliant C compilers. */ 155#include <stdarg.h> 156#define VA_DOTDOTDOT ... 157#define VA_start(list, last) va_start (list, last) 158#define va_dcl 159#endif 160 161#if 0 162/* Varargs definitions, for non-ANSI-compliant C compilers. */ 163#include <varargs.h> 164#define VA_DOTDOTDOT va_alist 165#define VA_start(list, last) va_start (list) 166#endif 167 168/* Porting:: 169 170 Some systems (notably 4.4BSD derivatives) support versions of the 171 sprintf functions which will deposit a limited number of characters 172 into the buffer; that limit is provided in an extra argument. 173 If your system doesn't support this functionality, you must include 174 the definition below for a dhcp-distribution-local version to be 175 built and used: */ 176 177#if 0 178#define NO_SNPRINTF 179#endif 180 181/* Porting:: 182 183 Some systems provide a function, strerror(), which takes the unix 184 error number (see errno) and returns a pointer to a static buffer 185 containing the corresponding error message. 186 187 If your system doesn't provide strerror(), define NO_STRERROR 188 as shown below: */ 189 190#if 0 191#define NO_STRERROR 192char *strerror PROTO ((int)); 193#endif 194 195/* Porting:: 196 197 Once dhcpd has initialized itself, it loops forever waiting for 198 packets to come in. Since we need to support multiple input streams 199 in order to support multiple interfaces, dhcpd needs to be able to 200 do a syscall to determine which descriptors have input waiting on 201 them. 202 203 Normally, dhcpd uses the select() system call, which is a 4.2BSD 204 syscall invented precisely for this purpose. Unfortunately, some 205 System V-based systems do not support select() properly when it 206 operates on streams. The System V interface which does (largely) 207 the same thing as select is called poll(). In some cases, this may 208 work better than select() - if you find that dhcpd is hanging and not 209 responding to packets very consistently, you might try defining 210 USE_POLL and including <poll.h>. */ 211 212#if 0 213#define USE_POLL 214#include <poll.h> 215#endif 216 217/* Porting:: 218 219 You must define the default network API for your port. This 220 will depend on whether one of the existing APIs will work for 221 you, or whether you need to implement support for a new API. 222 Currently, the following APIs are supported: 223 224 The BSD socket API: define USE_SOCKETS. 225 The Berkeley Packet Filter: define USE_BPF. 226 The Streams Network Interface Tap (NIT): define USE_NIT. 227 Raw sockets: define USE_RAW_SOCKETS 228 229 If your system supports the BSD socket API and doesn't provide 230 one of the supported interfaces to the physical packet layer, 231 you can either provide support for the low-level API that your 232 system does support (if any) or just use the BSD socket interface. 233 The BSD socket interface doesn't support multiple network interfaces, 234 and on many systems, it does not support the all-ones broadcast 235 address, which can cause problems with some DHCP clients (e.g. 236 Microsoft Windows 95). */ 237 238#if defined (USE_DEFAULT_NETWORK) 239# define USE_SOCKETS 240#endif 241 242/* Porting:: 243 244 Recent versions of BSD added a new element to the sockaddr structure: 245 sa_len. This indicates the length of the structure, and is used 246 in a variety of places, not the least of which is the SIOCGIFCONF 247 ioctl, which is used to figure out what interfaces are attached to 248 the system. 249 250 You should be able to determine if your system has an sa_len element 251 by looking at the struct sockaddr definition in /usr/include/sys/socket.h. 252 If it does, you must define HAVE_SA_LEN. Otherwise, you must not. 253 The most obvious symptom that you've got this wrong is either a compile 254 error complaining about the use of the sa_len structure element, or 255 the failure of dhcpd to find any interfaces. */ 256 257/* #define HAVE_SA_LEN */ 258 259/* Every operating system has its own way of seperating lines in a 260 sequential text file. Most modern systems use a single character, 261 either an ASCII Newline (10) or an ASCII Carriage Return (13). 262 263 The most notable exception is MS-DOS (and consequently, Windows), 264 which uses an ASCII Carriage Return followed by a Newline to 265 seperate each line. Fortunately, MS-DOS C compiler libraries 266 typically hide this from the programmer, returning just a Newline. 267 268 Define EOL to be whatever getc() returns for a newline. */ 269 270#define EOL '\n' 271 272/* Some older C compilers don't support the void pointer type. 273 ANSI C defines void * to be a pointer type that matches 274 any other pointer type. This is handy for returning a pointer 275 which will always need to be cast to a different value. For 276 example, malloc() on an ANSI C-compliant system returns void *. 277 278 If your compiler doesn't support void pointers, you may need to 279 define VOIDPTR to be char *; otherwise, define it to be void *. */ 280 281#define VOIDPTR void * 282 283/* Porting:: 284 285 The following definitions for time should work on any unix machine. 286 They may not work (or at least, may not work well) on a variety of 287 non-unix machines. If you are porting to a non-unix machine, you 288 probably need to change the definitions below and perhaps include 289 different headers. 290 291 I should note that dhcpd is not yet entirely clean of unix-specific 292 time references, so the list of defines shown below probably isn't 293 good enough if you're porting to a system that really doesn't support 294 unix time. It's probably a reasonable place to start, though. */ 295 296#include <time.h> 297 298#define TIME time_t 299#define GET_TIME(x) time ((x)) 300