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