1ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
2ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
3ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   This program is free software; you can redistribute it and/or modify
4ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   it under the terms of the GNU General Public License as published by
5ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   the Free Software Foundation; version 2 dated June, 1991, or
6ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   (at your option) version 3 dated 29 June, 2007.
7ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
8ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   This program is distributed in the hope that it will be useful,
9ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   but WITHOUT ANY WARRANTY; without even the implied warranty of
10ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   GNU General Public License for more details.
12ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
13ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   You should have received a copy of the GNU General Public License
14ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   along with this program.  If not, see <http://www.gnu.org/licenses/>.
15ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat*/
16ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
17ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define VERSION "2.51"
18ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
19ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define FTABSIZ 150 /* max number of outstanding requests (default) */
20ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define MAX_PROCS 20 /* max no children for TCP requests */
21ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define CHILD_LIFETIME 150 /* secs 'till terminated (RFC1035 suggests > 120s) */
22ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define EDNS_PKTSZ 1280 /* default max EDNS.0 UDP packet from RFC2671 */
23ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define TIMEOUT 10 /* drop UDP queries after TIMEOUT seconds */
24ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define FORWARD_TEST 50 /* try all servers every 50 queries */
25ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define FORWARD_TIME 10 /* or 10 seconds */
26ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define RANDOM_SOCKS 64 /* max simultaneous random ports */
27ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define LEASE_RETRY 60 /* on error, retry writing leasefile after LEASE_RETRY seconds */
28ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define CACHESIZ 150 /* default cache size */
29ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define MAXLEASES 150 /* maximum number of DHCP leases */
30ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define PING_WAIT 3 /* wait for ping address-in-use test */
31ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define PING_CACHE_TIME 30 /* Ping test assumed to be valid this long. */
32ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define DECLINE_BACKOFF 600 /* disable DECLINEd static addresses for this long */
33ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define DHCP_PACKET_MAX 16384 /* hard limit on DHCP packet size */
34ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define SMALLDNAME 40 /* most domain names are smaller than this */
35ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define HOSTSFILE "/etc/hosts"
36ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define ETHERSFILE "/etc/ethers"
37ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#ifdef __uClinux__
38ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  define RESOLVFILE "/etc/config/resolv.conf"
39ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#else
40ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  define RESOLVFILE "/etc/resolv.conf"
41ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
42ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define RUNFILE "/var/run/dnsmasq.pid"
43ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
44ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#ifndef LEASEFILE
45ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#   if defined(__FreeBSD__) || defined (__OpenBSD__) || defined(__DragonFly__) || defined(__NetBSD__)
46ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#      define LEASEFILE "/var/db/dnsmasq.leases"
47ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#   elif defined(__sun__) || defined (__sun)
48ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#      define LEASEFILE "/var/cache/dnsmasq.leases"
495658bcb797978c3472335d93554405aba8236f66San Mehat#   elif defined(__ANDROID__)
505658bcb797978c3472335d93554405aba8236f66San Mehat#      define LEASEFILE "/data/misc/dhcp/dnsmasq.leases"
51ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#   else
52ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#      define LEASEFILE "/var/lib/misc/dnsmasq.leases"
53ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#   endif
54ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
55ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
56ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#ifndef CONFFILE
57ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#   if defined(__FreeBSD__)
58ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#      define CONFFILE "/usr/local/etc/dnsmasq.conf"
59ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#   else
60ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#      define CONFFILE "/etc/dnsmasq.conf"
61ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#   endif
62ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
63ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
64ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define DEFLEASE 3600 /* default lease time, 1 hour */
65ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define CHUSER "nobody"
66ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define CHGRP "dip"
67ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define DHCP_SERVER_PORT 67
68ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define DHCP_CLIENT_PORT 68
69ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define DHCP_SERVER_ALTPORT 1067
70ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define DHCP_CLIENT_ALTPORT 1068
71ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define TFTP_PORT 69
72ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define TFTP_MAX_CONNECTIONS 50 /* max simultaneous connections */
73ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define LOG_MAX 5 /* log-queue length */
74ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define RANDFILE "/dev/urandom"
75ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define DAD_WAIT 20 /* retry binding IPv6 sockets for this long */
76ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
77ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* DBUS interface specifics */
78ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define DNSMASQ_SERVICE "uk.org.thekelleys.dnsmasq"
79ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define DNSMASQ_PATH "/uk/org/thekelleys/dnsmasq"
80ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
81ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* A small collection of RR-types which are missing on some platforms */
82ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
83ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#ifndef T_SIG
84ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  define T_SIG 24
85ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
86ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
87ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#ifndef T_SRV
88ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  define T_SRV 33
89ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
90ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
91ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#ifndef T_OPT
92ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  define T_OPT 41
93ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
94ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
95ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#ifndef T_TKEY
96ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  define T_TKEY 249
97ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
98ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
99ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#ifndef T_TSIG
100ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  define T_TSIG 250
101ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
102ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
103ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
104ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* Follows system specific switches. If you run on a
105ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   new system, you may want to edit these.
106ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   May replace this with Autoconf one day.
107ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
108ffd68729961f7383f2e35494a03ccdef20f86c98San MehatHAVE_LINUX_NETWORK
109ffd68729961f7383f2e35494a03ccdef20f86c98San MehatHAVE_BSD_NETWORK
110ffd68729961f7383f2e35494a03ccdef20f86c98San MehatHAVE_SOLARIS_NETWORK
111ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   define exactly one of these to alter interaction with kernel networking.
112ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
113ffd68729961f7383f2e35494a03ccdef20f86c98San MehatHAVE_BROKEN_RTC
114ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   define this on embedded systems which don't have an RTC
115ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   which keeps time over reboots. Causes dnsmasq to use uptime
116ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   for timing, and keep lease lengths rather than expiry times
117ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   in its leases file. This also make dnsmasq "flash disk friendly".
118ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   Normally, dnsmasq tries very hard to keep the on-disk leases file
119ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   up-to-date: rewriting it after every renewal.  When HAVE_BROKEN_RTC
120ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   is in effect, the lease file is only written when a new lease is
121ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   created, or an old one destroyed. (Because those are the only times
122ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   it changes.) This vastly reduces the number of file writes, and makes
123ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   it viable to keep the lease file on a flash filesystem.
124ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   NOTE: when enabling or disabling this, be sure to delete any old
125ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   leases file, otherwise dnsmasq may get very confused.
126ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
127ffd68729961f7383f2e35494a03ccdef20f86c98San MehatHAVE_TFTP
128ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   define this to get dnsmasq's built-in TFTP server.
129ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
130ffd68729961f7383f2e35494a03ccdef20f86c98San MehatHAVE_DHCP
131ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   define this to get dnsmasq's DHCP server.
132ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
133ffd68729961f7383f2e35494a03ccdef20f86c98San MehatHAVE_SCRIPT
134ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   define this to get the ability to call scripts on lease-change
135ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
136ffd68729961f7383f2e35494a03ccdef20f86c98San MehatHAVE_GETOPT_LONG
137ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   define this if you have GNU libc or GNU getopt.
138ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
139ffd68729961f7383f2e35494a03ccdef20f86c98San MehatHAVE_ARC4RANDOM
140ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   define this if you have arc4random() to get better security from DNS spoofs
141ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   by using really random ids (OpenBSD)
142ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
143ffd68729961f7383f2e35494a03ccdef20f86c98San MehatHAVE_SOCKADDR_SA_LEN
144ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   define this if struct sockaddr has sa_len field (*BSD)
145ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
146ffd68729961f7383f2e35494a03ccdef20f86c98San MehatHAVE_DBUS
147ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   Define this if you want to link against libdbus, and have dnsmasq
148ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   define some methods to allow (re)configuration of the upstream DNS
149ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   servers via DBus.
150ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
151ffd68729961f7383f2e35494a03ccdef20f86c98San MehatNOTES:
152ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   For Linux you should define
153ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      HAVE_LINUX_NETWORK
154ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      HAVE_GETOPT_LONG
155ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat  you should NOT define
156ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      HAVE_ARC4RANDOM
157ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      HAVE_SOCKADDR_SA_LEN
158ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
159ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   For *BSD systems you should define
160ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat     HAVE_BSD_NETWORK
161ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat     HAVE_SOCKADDR_SA_LEN
162ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   and you MAY define
163ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat     HAVE_ARC4RANDOM - OpenBSD and FreeBSD and NetBSD version 2.0 or later
164ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat     HAVE_GETOPT_LONG - NetBSD, later FreeBSD
165ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat                       (FreeBSD and OpenBSD only if you link GNU getopt)
166ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
167ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat*/
168ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
169ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* platform independent options- uncomment to enable */
170ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define HAVE_DHCP
171ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define HAVE_TFTP
172ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define HAVE_SCRIPT
173ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* #define HAVE_BROKEN_RTC */
174ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* #define HAVE_DBUS */
175ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
176ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* Allow TFTP to be disabled with COPTS=-DNO_TFTP */
177ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#ifdef NO_TFTP
178ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#undef HAVE_TFTP
179ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
180ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
181ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* Allow DHCP to be disabled with COPTS=-DNO_DHCP */
182ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#ifdef NO_DHCP
183ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#undef HAVE_DHCP
184ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
185ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
186ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* Allow scripts to be disabled with COPTS=-DNO_SCRIPT */
187ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#ifdef NO_SCRIPT
188ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#undef HAVE_SCRIPT
189ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
190ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
191ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
192ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
193ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* platform dependent options. */
194ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
195ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* Must preceed __linux__ since uClinux defines __linux__ too. */
196ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#if defined(__uClinux__)
197ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define HAVE_LINUX_NETWORK
198ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define HAVE_GETOPT_LONG
199ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#undef HAVE_ARC4RANDOM
200ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#undef HAVE_SOCKADDR_SA_LEN
201ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* Never use fork() on uClinux. Note that this is subtly different from the
202ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   --keep-in-foreground option, since it also  suppresses forking new
203ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   processes for TCP connections and disables the call-a-script on leasechange
204ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   system. It's intended for use on MMU-less kernels. */
205ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define NO_FORK
206ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
207ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#elif defined(__UCLIBC__)
208ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define HAVE_LINUX_NETWORK
209ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#if defined(__UCLIBC_HAS_GNU_GETOPT__) || \
210ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   ((__UCLIBC_MAJOR__==0) && (__UCLIBC_MINOR__==9) && (__UCLIBC_SUBLEVEL__<21))
211ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#    define HAVE_GETOPT_LONG
212ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
213ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#undef HAVE_ARC4RANDOM
214ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#undef HAVE_SOCKADDR_SA_LEN
215ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#if !defined(__ARCH_HAS_MMU__) && !defined(__UCLIBC_HAS_MMU__)
216ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  define NO_FORK
217ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
218ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#if defined(__UCLIBC_HAS_IPV6__)
219ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  ifndef IPV6_V6ONLY
220ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#    define IPV6_V6ONLY 26
221ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  endif
222ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
223ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
224ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* This is for glibc 2.x */
225ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#elif defined(__linux__)
226ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define HAVE_LINUX_NETWORK
227ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define HAVE_GETOPT_LONG
228ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#undef HAVE_ARC4RANDOM
229ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#undef HAVE_SOCKADDR_SA_LEN
230ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
231ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#elif defined(__FreeBSD__) || \
232ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      defined(__OpenBSD__) || \
233ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      defined(__DragonFly__) || \
234ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat      defined (__FreeBSD_kernel__)
235ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define HAVE_BSD_NETWORK
236ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* Later verions of FreeBSD have getopt_long() */
237ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#if defined(optional_argument) && defined(required_argument)
238ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#   define HAVE_GETOPT_LONG
239ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
240ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#if !defined (__FreeBSD_kernel__)
241ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#   define HAVE_ARC4RANDOM
242ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
243ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define HAVE_SOCKADDR_SA_LEN
244ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
245ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#elif defined(__APPLE__)
246ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define HAVE_BSD_NETWORK
247ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#undef HAVE_GETOPT_LONG
248ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define HAVE_ARC4RANDOM
249ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define HAVE_SOCKADDR_SA_LEN
250ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* Define before sys/socket.h is included so we get socklen_t */
251ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define _BSD_SOCKLEN_T_
252ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
253ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#elif defined(__NetBSD__)
254ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define HAVE_BSD_NETWORK
255ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define HAVE_GETOPT_LONG
256ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#undef HAVE_ARC4RANDOM
257ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define HAVE_SOCKADDR_SA_LEN
258ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
259ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#elif defined(__sun) || defined(__sun__)
260ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define HAVE_SOLARIS_NETWORK
261ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define HAVE_GETOPT_LONG
262ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#undef HAVE_ARC4RANDOM
263ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#undef HAVE_SOCKADDR_SA_LEN
264ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define _XPG4_2
265ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define __EXTENSIONS__
266ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#define ETHER_ADDR_LEN 6
267ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
268ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
269ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
270ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* Decide if we're going to support IPv6 */
271ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* IPv6 can be forced off with "make COPTS=-DNO_IPV6" */
272ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* We assume that systems which don't have IPv6
273ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat   headers don't have ntop and pton either */
274ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
275ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#if defined(INET6_ADDRSTRLEN) && defined(IPV6_V6ONLY) && !defined(NO_IPV6)
276ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  define HAVE_IPV6
277ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  define ADDRSTRLEN INET6_ADDRSTRLEN
278ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  if defined(SOL_IPV6)
279ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#    define IPV6_LEVEL SOL_IPV6
280ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  else
281ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#    define IPV6_LEVEL IPPROTO_IPV6
282ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  endif
283ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#elif defined(INET_ADDRSTRLEN)
284ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  undef HAVE_IPV6
285ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  define ADDRSTRLEN INET_ADDRSTRLEN
286ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#else
287ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  undef HAVE_IPV6
288ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  define ADDRSTRLEN 16 /* 4*3 + 3 dots + NULL */
289ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
290ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
291ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat/* Can't do scripts without fork */
292ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#ifdef NOFORK
293ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#  undef HAVE_SCRIPT
294ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat#endif
295ffd68729961f7383f2e35494a03ccdef20f86c98San Mehat
296