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