Imported Upstream version 2.82
[platform/upstream/dnsmasq.git] / src / config.h
1 /* dnsmasq is Copyright (c) 2000-2020 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 FTABSIZ 150 /* max number of outstanding requests (default) */
18 #define MAX_PROCS 20 /* max no children for TCP requests */
19 #define CHILD_LIFETIME 150 /* secs 'till terminated (RFC1035 suggests > 120s) */
20 #define TCP_MAX_QUERIES 100 /* Maximum number of queries per incoming TCP connection */
21 #define TCP_BACKLOG 32  /* kernel backlog limit for TCP connections */
22 #define EDNS_PKTSZ 4096 /* default max EDNS.0 UDP packet from RFC5625 */
23 #define SAFE_PKTSZ 1280 /* "go anywhere" UDP packet size */
24 #define KEYBLOCK_LEN 40 /* choose to minimise fragmentation when storing DNSSEC keys */
25 #define DNSSEC_WORK 50 /* Max number of queries to validate one question */
26 #define TIMEOUT 10 /* drop UDP queries after TIMEOUT seconds */
27 #define FORWARD_TEST 50 /* try all servers every 50 queries */
28 #define FORWARD_TIME 20 /* or 20 seconds */
29 #define UDP_TEST_TIME 60 /* How often to reset our idea of max packet size. */
30 #define SERVERS_LOGGED 30 /* Only log this many servers when logging state */
31 #define LOCALS_LOGGED 8 /* Only log this many local addresses when logging state */
32 #define RANDOM_SOCKS 64 /* max simultaneous random ports */
33 #define LEASE_RETRY 60 /* on error, retry writing leasefile after LEASE_RETRY seconds */
34 #define CACHESIZ 150 /* default cache size */
35 #define TTL_FLOOR_LIMIT 3600 /* don't allow --min-cache-ttl to raise TTL above this under any circumstances */
36 #define MAXLEASES 1000 /* maximum number of DHCP leases */
37 #define PING_WAIT 3 /* wait for ping address-in-use test */
38 #define PING_CACHE_TIME 30 /* Ping test assumed to be valid this long. */
39 #define DECLINE_BACKOFF 600 /* disable DECLINEd static addresses for this long */
40 #define DHCP_PACKET_MAX 16384 /* hard limit on DHCP packet size */
41 #define SMALLDNAME 50 /* most domain names are smaller than this */
42 #define CNAME_CHAIN 10 /* chains longer than this atr dropped for loop protection */
43 #define DNSSEC_MIN_TTL 60 /* DNSKEY and DS records in cache last at least this long */
44 #define HOSTSFILE "/etc/hosts"
45 #define ETHERSFILE "/etc/ethers"
46 #define DEFLEASE 3600 /* default DHCPv4 lease time, one hour */
47 #define DEFLEASE6 (3600*24) /* default lease time for DHCPv6. One day. */
48 #define CHUSER "nobody"
49 #define CHGRP "dip"
50 #define TFTP_MAX_CONNECTIONS 50 /* max simultaneous connections */
51 #define LOG_MAX 5 /* log-queue length */
52 #define RANDFILE "/dev/urandom"
53 #define DNSMASQ_SERVICE "uk.org.thekelleys.dnsmasq" /* Default - may be overridden by config */
54 #define DNSMASQ_PATH "/uk/org/thekelleys/dnsmasq"
55 #define DNSMASQ_UBUS_NAME "dnsmasq" /* Default - may be overridden by config */
56 #define AUTH_TTL 600 /* default TTL for auth DNS */
57 #define SOA_REFRESH 1200 /* SOA refresh default */
58 #define SOA_RETRY 180 /* SOA retry default */
59 #define SOA_EXPIRY 1209600 /* SOA expiry default */
60 #define LOOP_TEST_DOMAIN "test" /* domain for loop testing, "test" is reserved by RFC 2606 and won't therefore clash */
61 #define LOOP_TEST_TYPE T_TXT
62  
63 /* compile-time options: uncomment below to enable or do eg.
64    make COPTS=-DHAVE_BROKEN_RTC
65
66 HAVE_BROKEN_RTC
67    define this on embedded systems which don't have an RTC
68    which keeps time over reboots. Causes dnsmasq to use uptime
69    for timing, and keep lease lengths rather than expiry times
70    in its leases file. This also make dnsmasq "flash disk friendly".
71    Normally, dnsmasq tries very hard to keep the on-disk leases file
72    up-to-date: rewriting it after every renewal.  When HAVE_BROKEN_RTC 
73    is in effect, the lease file is only written when a new lease is 
74    created, or an old one destroyed. (Because those are the only times 
75    it changes.) This vastly reduces the number of file writes, and makes
76    it viable to keep the lease file on a flash filesystem.
77    NOTE: when enabling or disabling this, be sure to delete any old
78    leases file, otherwise dnsmasq may get very confused.
79
80 HAVE_TFTP
81    define this to get dnsmasq's built-in TFTP server.
82
83 HAVE_DHCP
84    define this to get dnsmasq's DHCPv4 server.
85
86 HAVE_DHCP6
87    define this to get dnsmasq's DHCPv6 server. (implies HAVE_DHCP).
88
89 HAVE_SCRIPT
90    define this to get the ability to call scripts on lease-change.
91
92 HAVE_LUASCRIPT
93    define this to get the ability to call Lua script on lease-change. (implies HAVE_SCRIPT) 
94
95 HAVE_DBUS
96    define this if you want to link against libdbus, and have dnsmasq
97    support some methods to allow (re)configuration of the upstream DNS 
98    servers via DBus.
99
100 HAVE_UBUS
101    define this if you want to link against libubus
102
103 HAVE_IDN
104    define this if you want international domain name 2003 support.
105    
106 HAVE_LIBIDN2
107    define this if you want international domain name 2008 support.
108
109 HAVE_CONNTRACK
110    define this to include code which propagates conntrack marks from
111    incoming DNS queries to the corresponding upstream queries. This adds
112    a build-dependency on libnetfilter_conntrack, but the resulting binary will
113    still run happily on a kernel without conntrack support.
114
115 HAVE_IPSET
116     define this to include the ability to selectively add resolved ip addresses
117     to given ipsets.
118
119 HAVE_AUTH
120    define this to include the facility to act as an authoritative DNS
121    server for one or more zones.
122
123 HAVE_DNSSEC
124    include DNSSEC validator.
125
126 HAVE_DUMPFILE
127    include code to dump packets to a libpcap-format file for debugging.
128
129 HAVE_LOOP
130    include functionality to probe for and remove DNS forwarding loops.
131
132 HAVE_INOTIFY
133    use the Linux inotify facility to efficiently re-read configuration files.
134
135 NO_ID
136    Don't report *.bind CHAOS info to clients, forward such requests upstream instead.
137 NO_TFTP
138 NO_DHCP
139 NO_DHCP6
140 NO_SCRIPT
141 NO_LARGEFILE
142 NO_AUTH
143 NO_DUMPFILE
144 NO_INOTIFY
145    these are available to explicitly disable compile time options which would 
146    otherwise be enabled automatically or which are enabled  by default 
147    in the distributed source tree. Building dnsmasq
148    with something like "make COPTS=-DNO_SCRIPT" will do the trick.
149 NO_GMP
150    Don't use and link against libgmp, Useful if nettle is built with --enable-mini-gmp.
151
152 LEASEFILE
153 CONFFILE
154 RESOLVFILE
155    the default locations of these files are determined below, but may be overridden 
156    in a build command line using COPTS.
157
158 */
159
160 /* Defining this builds a binary which handles time differently and works better on a system without a 
161    stable RTC (it uses uptime, not epoch time) and writes the DHCP leases file less often to avoid flash wear. 
162 */
163
164 /* #define HAVE_BROKEN_RTC */
165
166 /* The default set of options to build. Built with these options, dnsmasq
167    has no library dependencies other than libc */
168
169 #define HAVE_DHCP
170 #define HAVE_DHCP6 
171 #define HAVE_TFTP
172 #define HAVE_SCRIPT
173 #define HAVE_AUTH
174 #define HAVE_IPSET 
175 #define HAVE_LOOP
176 #define HAVE_DUMPFILE
177
178 /* Build options which require external libraries.
179    
180    Defining HAVE_<opt>_STATIC as _well_ as HAVE_<opt> will link the library statically.
181
182    You can use "make COPTS=-DHAVE_<opt>" instead of editing these.
183 */
184
185 /* #define HAVE_LUASCRIPT */
186 /* #define HAVE_DBUS */
187 /* #define HAVE_IDN */
188 /* #define HAVE_LIBIDN2 */
189 /* #define HAVE_CONNTRACK */
190 /* #define HAVE_DNSSEC */
191
192
193 /* Default locations for important system files. */
194
195 #ifndef LEASEFILE
196 #   if defined(__FreeBSD__) || defined (__OpenBSD__) || defined(__DragonFly__) || defined(__NetBSD__)
197 #      define LEASEFILE "/var/db/dnsmasq.leases"
198 #   elif defined(__sun__) || defined (__sun)
199 #      define LEASEFILE "/var/cache/dnsmasq.leases"
200 #   elif defined(__ANDROID__)
201 #      define LEASEFILE "/data/misc/dhcp/dnsmasq.leases"
202 #   else
203 #      define LEASEFILE "/var/lib/misc/dnsmasq.leases"
204 #   endif
205 #endif
206
207 #ifndef CONFFILE
208 #   if defined(__FreeBSD__)
209 #      define CONFFILE "/usr/local/etc/dnsmasq.conf"
210 #   else
211 #      define CONFFILE "/etc/dnsmasq.conf"
212 #   endif
213 #endif
214
215 #ifndef RESOLVFILE
216 #   if defined(__uClinux__)
217 #      define RESOLVFILE "/etc/config/resolv.conf"
218 #   else
219 #      define RESOLVFILE "/etc/resolv.conf"
220 #   endif
221 #endif
222
223 #ifndef RUNFILE
224 #   if defined(__ANDROID__)
225 #      define RUNFILE "/data/dnsmasq.pid"
226 #    else
227 #      define RUNFILE "/var/run/dnsmasq.pid"
228 #    endif
229 #endif
230
231 /* platform dependent options: these are determined automatically below
232
233 HAVE_LINUX_NETWORK
234 HAVE_BSD_NETWORK
235 HAVE_SOLARIS_NETWORK
236    define exactly one of these to alter interaction with kernel networking.
237
238 HAVE_GETOPT_LONG
239    defined when GNU-style getopt_long available. 
240
241 HAVE_SOCKADDR_SA_LEN
242    defined if struct sockaddr has sa_len field (*BSD) 
243 */
244
245 #if defined(__UCLIBC__)
246 #define HAVE_LINUX_NETWORK
247 #if defined(__UCLIBC_HAS_GNU_GETOPT__) || \
248    ((__UCLIBC_MAJOR__==0) && (__UCLIBC_MINOR__==9) && (__UCLIBC_SUBLEVEL__<21))
249 #    define HAVE_GETOPT_LONG
250 #endif
251 #undef HAVE_SOCKADDR_SA_LEN
252 #if defined(__UCLIBC_HAS_IPV6__)
253 #  ifndef IPV6_V6ONLY
254 #    define IPV6_V6ONLY 26
255 #  endif
256 #endif
257
258 /* This is for glibc 2.x */
259 #elif defined(__linux__)
260 #define HAVE_LINUX_NETWORK
261 #define HAVE_GETOPT_LONG
262 #undef HAVE_SOCKADDR_SA_LEN
263
264 #elif defined(__FreeBSD__) || \
265       defined(__OpenBSD__) || \
266       defined(__DragonFly__) || \
267       defined(__FreeBSD_kernel__)
268 #define HAVE_BSD_NETWORK
269 /* Later versions of FreeBSD have getopt_long() */
270 #if defined(optional_argument) && defined(required_argument)
271 #   define HAVE_GETOPT_LONG
272 #endif
273 #define HAVE_SOCKADDR_SA_LEN
274
275 #elif defined(__APPLE__)
276 #define HAVE_BSD_NETWORK
277 #define HAVE_GETOPT_LONG
278 #define HAVE_SOCKADDR_SA_LEN
279 #define NO_IPSET
280 /* Define before sys/socket.h is included so we get socklen_t */
281 #define _BSD_SOCKLEN_T_
282 /* Select the RFC_3542 version of the IPv6 socket API. 
283    Define before netinet6/in6.h is included. */
284 #define __APPLE_USE_RFC_3542
285 /* Required for Mojave. */
286 #ifndef SOL_TCP
287 #  define SOL_TCP IPPROTO_TCP
288 #endif
289 #define NO_IPSET
290
291 #elif defined(__NetBSD__)
292 #define HAVE_BSD_NETWORK
293 #define HAVE_GETOPT_LONG
294 #define HAVE_SOCKADDR_SA_LEN
295
296 #elif defined(__sun) || defined(__sun__)
297 #define HAVE_SOLARIS_NETWORK
298 #define HAVE_GETOPT_LONG
299 #undef HAVE_SOCKADDR_SA_LEN
300 #define ETHER_ADDR_LEN 6 
301  
302 #endif
303
304 /* rules to implement compile-time option dependencies and 
305    the NO_XXX flags */
306
307 #ifdef NO_TFTP
308 #undef HAVE_TFTP
309 #endif
310
311 #ifdef NO_DHCP
312 #undef HAVE_DHCP
313 #undef HAVE_DHCP6
314 #endif
315
316 #if defined(NO_DHCP6)
317 #undef HAVE_DHCP6
318 #endif
319
320 /* DHCP6 needs DHCP too */
321 #ifdef HAVE_DHCP6
322 #define HAVE_DHCP
323 #endif
324
325 #if defined(NO_SCRIPT)
326 #undef HAVE_SCRIPT
327 #undef HAVE_LUASCRIPT
328 #endif
329
330 /* Must HAVE_SCRIPT to HAVE_LUASCRIPT */
331 #ifdef HAVE_LUASCRIPT
332 #define HAVE_SCRIPT
333 #endif
334
335 #ifdef NO_AUTH
336 #undef HAVE_AUTH
337 #endif
338
339 #if defined(NO_IPSET)
340 #undef HAVE_IPSET
341 #endif
342
343 #ifdef NO_LOOP
344 #undef HAVE_LOOP
345 #endif
346
347 #ifdef NO_DUMPFILE
348 #undef HAVE_DUMPFILE
349 #endif
350
351 #if defined (HAVE_LINUX_NETWORK) && !defined(NO_INOTIFY)
352 #define HAVE_INOTIFY
353 #endif
354
355 /* Define a string indicating which options are in use.
356    DNSMASQ_COMPILE_OPTS is only defined in dnsmasq.c */
357
358 #ifdef DNSMASQ_COMPILE_OPTS
359
360 static char *compile_opts = 
361 "IPv6 "
362 #ifndef HAVE_GETOPT_LONG
363 "no-"
364 #endif
365 "GNU-getopt "
366 #ifdef HAVE_BROKEN_RTC
367 "no-RTC "
368 #endif
369 #ifndef HAVE_DBUS
370 "no-"
371 #endif
372 "DBus "
373 #ifndef HAVE_UBUS
374 "no-"
375 #endif
376 "UBus "
377 #ifndef LOCALEDIR
378 "no-"
379 #endif
380 "i18n "
381 #if defined(HAVE_LIBIDN2)
382 "IDN2 "
383 #else
384  #if !defined(HAVE_IDN)
385 "no-"
386  #endif 
387 "IDN " 
388 #endif
389 #ifndef HAVE_DHCP
390 "no-"
391 #endif
392 "DHCP "
393 #if defined(HAVE_DHCP)
394 #  if !defined (HAVE_DHCP6)
395      "no-"
396 #  endif  
397      "DHCPv6 "
398 #endif
399 #if !defined(HAVE_SCRIPT)
400      "no-scripts "
401 #else
402 #  if !defined(HAVE_LUASCRIPT)
403      "no-"
404 #  endif
405      "Lua "
406 #endif
407 #ifndef HAVE_TFTP
408 "no-"
409 #endif
410 "TFTP "
411 #ifndef HAVE_CONNTRACK
412 "no-"
413 #endif
414 "conntrack "
415 #ifndef HAVE_IPSET
416 "no-"
417 #endif
418 "ipset "
419 #ifndef HAVE_AUTH
420 "no-"
421 #endif
422 "auth "
423 #ifndef HAVE_DNSSEC
424 "no-"
425 #endif
426 "DNSSEC "
427 #ifdef NO_ID
428 "no-ID "
429 #endif
430 #ifndef HAVE_LOOP
431 "no-"
432 #endif
433 "loop-detect "
434 #ifndef HAVE_INOTIFY
435 "no-"
436 #endif
437 "inotify "
438 #ifndef HAVE_DUMPFILE
439 "no-"
440 #endif
441 "dumpfile";
442
443 #endif
444
445
446