dnsmasq: fix ipv6 ipset bug
[oweals/openwrt.git] / package / network / services / dnsmasq / patches / 0003-Remove-ability-to-compile-without-IPv6-support.patch
1 From ee8750451b49d27b180517a4e35b636be0fae575 Mon Sep 17 00:00:00 2001
2 From: Simon Kelley <simon@thekelleys.org.uk>
3 Date: Tue, 23 Oct 2018 22:10:17 +0100
4 Subject: [PATCH 03/11] Remove ability to compile without IPv6 support.
5
6 This was the source of a large number of #ifdefs, originally
7 included for use with old embedded libc versions. I'm
8 sure no-one wants or needs IPv6-free code these days, so this
9 is a move towards more maintainable code.
10
11 Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
12 ---
13  src/arp.c       | 13 ----------
14  src/auth.c      | 53 ++++++++++----------------------------
15  src/bpf.c       | 10 ++------
16  src/cache.c     | 31 ++++------------------
17  src/config.h    | 30 +++-------------------
18  src/conntrack.c |  2 --
19  src/dbus.c      |  4 ---
20  src/dnsmasq.c   |  6 ++---
21  src/dnsmasq.h   | 20 ++-------------
22  src/domain.c    | 28 +++-----------------
23  src/dump.c      |  4 ---
24  src/edns0.c     | 14 +---------
25  src/forward.c   | 68 ++++---------------------------------------------
26  src/helper.c    |  8 ------
27  src/ipset.c     |  9 +------
28  src/netlink.c   |  5 +---
29  src/network.c   | 54 +++------------------------------------
30  src/option.c    | 34 -------------------------
31  src/rfc1035.c   | 50 +++++++-----------------------------
32  src/tables.c    |  3 +--
33  src/tftp.c      | 17 ++-----------
34  src/util.c      | 13 +---------
35  22 files changed, 57 insertions(+), 419 deletions(-)
36
37 --- a/src/arp.c
38 +++ b/src/arp.c
39 @@ -44,11 +44,6 @@ static int filter_mac(int family, char *
40    if (maclen > DHCP_CHADDR_MAX)
41      return 1;
42  
43 -#ifndef HAVE_IPV6
44 -  if (family != AF_INET)
45 -    return 1;
46 -#endif
47 -
48    /* Look for existing entry */
49    for (arp = arps; arp; arp = arp->next)
50      {
51 @@ -60,13 +55,11 @@ static int filter_mac(int family, char *
52           if (arp->addr.addr.addr4.s_addr != ((struct in_addr *)addrp)->s_addr)
53             continue;
54         }
55 -#ifdef HAVE_IPV6
56        else
57         {
58           if (!IN6_ARE_ADDR_EQUAL(&arp->addr.addr.addr6, (struct in6_addr *)addrp))
59             continue;
60         }
61 -#endif
62  
63        if (arp->status == ARP_EMPTY)
64         {
65 @@ -103,10 +96,8 @@ static int filter_mac(int family, char *
66        memcpy(arp->hwaddr, mac, maclen);
67        if (family == AF_INET)
68         arp->addr.addr.addr4.s_addr = ((struct in_addr *)addrp)->s_addr;
69 -#ifdef HAVE_IPV6
70        else
71         memcpy(&arp->addr.addr.addr6, addrp, IN6ADDRSZ);
72 -#endif
73      }
74    
75    return 1;
76 @@ -136,11 +127,9 @@ int find_mac(union mysockaddr *addr, uns
77               arp->addr.addr.addr4.s_addr != addr->in.sin_addr.s_addr)
78             continue;
79             
80 -#ifdef HAVE_IPV6
81           if (arp->family == AF_INET6 && 
82               !IN6_ARE_ADDR_EQUAL(&arp->addr.addr.addr6, &addr->in6.sin6_addr))
83             continue;
84 -#endif
85           
86           /* Only accept positive entries unless in lazy mode. */
87           if (arp->status != ARP_EMPTY || lazy || updated)
88 @@ -203,10 +192,8 @@ int find_mac(union mysockaddr *addr, uns
89  
90        if (addr->sa.sa_family == AF_INET)
91         arp->addr.addr.addr4.s_addr = addr->in.sin_addr.s_addr;
92 -#ifdef HAVE_IPV6
93        else
94         memcpy(&arp->addr.addr.addr6, &addr->in6.sin6_addr, IN6ADDRSZ);
95 -#endif
96      }
97           
98     return 0;
99 --- a/src/auth.c
100 +++ b/src/auth.c
101 @@ -33,10 +33,8 @@ static struct addrlist *find_addrlist(st
102         if  (is_same_net(addr, list->addr.addr.addr4, netmask))
103           return list;
104        }
105 -#ifdef HAVE_IPV6
106      else if (is_same_net6(&(addr_u->addr.addr6), &list->addr.addr.addr6, list->prefixlen))
107        return list;
108 -#endif
109      
110    } while ((list = list->next));
111    
112 @@ -189,7 +187,6 @@ size_t answer_auth(struct dns_header *he
113                   while (intr->next && strcmp(intr->intr, intr->next->intr) == 0)
114                     intr = intr->next;
115               }
116 -#ifdef HAVE_IPV6
117           else if (flag == F_IPV6)
118             for (intr = daemon->int_names; intr; intr = intr->next)
119               {
120 @@ -205,7 +202,6 @@ size_t answer_auth(struct dns_header *he
121                   while (intr->next && strcmp(intr->intr, intr->next->intr) == 0)
122                     intr = intr->next;
123               }
124 -#endif
125           
126           if (intr)
127             {
128 @@ -378,10 +374,8 @@ size_t answer_auth(struct dns_header *he
129         if (qtype == T_A)
130          flag = F_IPV4;
131         
132 -#ifdef HAVE_IPV6
133         if (qtype == T_AAAA)
134          flag = F_IPV6;
135 -#endif
136         
137         for (intr = daemon->int_names; intr; intr = intr->next)
138          if ((rc = hostname_issubdomain(name, intr->name)))
139 @@ -395,10 +389,9 @@ size_t answer_auth(struct dns_header *he
140                  if (((addrlist->flags & ADDRLIST_IPV6)  ? T_AAAA : T_A) == qtype &&
141                      (local_query || filter_zone(zone, flag, &addrlist->addr)))
142                    {
143 -#ifdef HAVE_IPV6
144                      if (addrlist->flags & ADDRLIST_REVONLY)
145                        continue;
146 -#endif
147 +
148                      found = 1;
149                      log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
150                      if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
151 @@ -424,13 +417,11 @@ size_t answer_auth(struct dns_header *he
152               
153               if (peer_addr->sa.sa_family == AF_INET)
154                 peer_addr->in.sin_port = 0;
155 -#ifdef HAVE_IPV6
156               else
157                 {
158                   peer_addr->in6.sin6_port = 0; 
159                   peer_addr->in6.sin6_scope_id = 0;
160                 }
161 -#endif
162               
163               for (peers = daemon->auth_peers; peers; peers = peers->next)
164                 if (sockaddr_isequal(peer_addr, &peers->addr))
165 @@ -442,10 +433,8 @@ size_t answer_auth(struct dns_header *he
166                 {
167                   if (peer_addr->sa.sa_family == AF_INET)
168                     inet_ntop(AF_INET, &peer_addr->in.sin_addr, daemon->addrbuff, ADDRSTRLEN);
169 -#ifdef HAVE_IPV6
170                   else
171                     inet_ntop(AF_INET6, &peer_addr->in6.sin6_addr, daemon->addrbuff, ADDRSTRLEN); 
172 -#endif
173                   
174                   my_syslog(LOG_WARNING, _("ignoring zone transfer request from %s"), daemon->addrbuff);
175                   return 0;
176 @@ -603,7 +592,6 @@ size_t answer_auth(struct dns_header *he
177               p += sprintf(p, "%u.in-addr.arpa", a & 0xff);
178               
179             }
180 -#ifdef HAVE_IPV6
181           else
182             {
183               char *p = name;
184 @@ -617,7 +605,6 @@ size_t answer_auth(struct dns_header *he
185               p += sprintf(p, "ip6.arpa");
186               
187             }
188 -#endif
189         }
190        
191        /* handle NS and SOA in auth section or for explicit queries */
192 @@ -754,14 +741,12 @@ size_t answer_auth(struct dns_header *he
193                                           daemon->auth_ttl, NULL, T_A, C_IN, "4", cut ? intr->name : NULL, &addrlist->addr))
194                     anscount++;
195                 
196 -#ifdef HAVE_IPV6
197                 for (addrlist = intr->addr; addrlist; addrlist = addrlist->next) 
198                   if ((addrlist->flags & ADDRLIST_IPV6) && 
199                       (local_query || filter_zone(zone, F_IPV6, &addrlist->addr)) &&
200                       add_resource_record(header, limit, &trunc, -axfroffset, &ansp, 
201                                           daemon->auth_ttl, NULL, T_AAAA, C_IN, "6", cut ? intr->name : NULL, &addrlist->addr))
202                     anscount++;
203 -#endif             
204                 
205                 /* restore config data */
206                 if (cut)
207 @@ -798,18 +783,11 @@ size_t answer_auth(struct dns_header *he
208                     {
209                       char *cache_name = cache_get_name(crecp);
210                       if (!strchr(cache_name, '.') && 
211 -                         (local_query || filter_zone(zone, (crecp->flags & (F_IPV6 | F_IPV4)), &(crecp->addr.addr))))
212 -                       {
213 -                         qtype = T_A;
214 -#ifdef HAVE_IPV6
215 -                         if (crecp->flags & F_IPV6)
216 -                           qtype = T_AAAA;
217 -#endif
218 -                         if (add_resource_record(header, limit, &trunc, -axfroffset, &ansp, 
219 -                                                 daemon->auth_ttl, NULL, qtype, C_IN, 
220 -                                                 (crecp->flags & F_IPV4) ? "4" : "6", cache_name, &crecp->addr))
221 -                           anscount++;
222 -                       }
223 +                         (local_query || filter_zone(zone, (crecp->flags & (F_IPV6 | F_IPV4)), &(crecp->addr.addr))) &&
224 +                         add_resource_record(header, limit, &trunc, -axfroffset, &ansp, 
225 +                                             daemon->auth_ttl, NULL, (crecp->flags & F_IPV6) ? T_AAAA : T_A, C_IN, 
226 +                                             (crecp->flags & F_IPV4) ? "4" : "6", cache_name, &crecp->addr))
227 +                       anscount++;
228                     }
229                   
230                   if ((crecp->flags & F_HOSTS) || (((crecp->flags & F_DHCP) && option_bool(OPT_DHCP_FQDN))))
231 @@ -818,18 +796,13 @@ size_t answer_auth(struct dns_header *he
232                       if (in_zone(zone, name, &cut) && 
233                           (local_query || filter_zone(zone, (crecp->flags & (F_IPV6 | F_IPV4)), &(crecp->addr.addr))))
234                         {
235 -                         qtype = T_A;
236 -#ifdef HAVE_IPV6
237 -                         if (crecp->flags & F_IPV6)
238 -                           qtype = T_AAAA;
239 -#endif
240 -                          if (cut)
241 -                            *cut = 0;
242 -
243 -                          if (add_resource_record(header, limit, &trunc, -axfroffset, &ansp, 
244 -                                                  daemon->auth_ttl, NULL, qtype, C_IN, 
245 -                                                  (crecp->flags & F_IPV4) ? "4" : "6", cut ? name : NULL, &crecp->addr))
246 -                            anscount++;
247 +                         if (cut)
248 +                           *cut = 0;
249 +
250 +                         if (add_resource_record(header, limit, &trunc, -axfroffset, &ansp, 
251 +                                                 daemon->auth_ttl, NULL, (crecp->flags & F_IPV6) ? T_AAAA : T_A, C_IN, 
252 +                                                 (crecp->flags & F_IPV4) ? "4" : "6", cut ? name : NULL, &crecp->addr))
253 +                           anscount++;
254                         }
255                     }
256                 }
257 --- a/src/bpf.c
258 +++ b/src/bpf.c
259 @@ -31,9 +31,7 @@
260  #  include <net/if_var.h> 
261  #endif
262  #include <netinet/in_var.h>
263 -#ifdef HAVE_IPV6
264 -#  include <netinet6/in6_var.h>
265 -#endif
266 +#include <netinet6/in6_var.h>
267  
268  #ifndef SA_SIZE
269  #define SA_SIZE(sa)                                             \
270 @@ -121,7 +119,7 @@ int iface_enumerate(int family, void *pa
271    if (getifaddrs(&head) == -1)
272      return 0;
273  
274 -#if defined(HAVE_BSD_NETWORK) && defined(HAVE_IPV6)
275 +#if defined(HAVE_BSD_NETWORK)
276    if (family == AF_INET6)
277      fd = socket(PF_INET6, SOCK_DGRAM, 0);
278  #endif
279 @@ -152,7 +150,6 @@ int iface_enumerate(int family, void *pa
280               if (!((*callback)(addr, iface_index, NULL, netmask, broadcast, parm)))
281                 goto err;
282             }
283 -#ifdef HAVE_IPV6
284           else if (family == AF_INET6)
285             {
286               struct in6_addr *addr = &((struct sockaddr_in6 *) addrs->ifa_addr)->sin6_addr;
287 @@ -219,7 +216,6 @@ int iface_enumerate(int family, void *pa
288                                 (int) preferred, (int)valid, parm)))
289                 goto err;             
290             }
291 -#endif /* HAVE_IPV6 */
292  
293  #ifdef HAVE_DHCP6      
294           else if (family == AF_LINK)
295 @@ -427,10 +423,8 @@ void route_sock(void)
296                  del_family = sa->sa_family;
297                  if (del_family == AF_INET)
298                    del_addr.addr.addr4 = ((struct sockaddr_in *)sa)->sin_addr;
299 -#ifdef HAVE_IPV6
300                  else if (del_family == AF_INET6)
301                    del_addr.addr.addr6 = ((struct sockaddr_in6 *)sa)->sin6_addr;
302 -#endif
303                  else
304                    del_family = 0;
305                }
306 --- a/src/cache.c
307 +++ b/src/cache.c
308 @@ -410,11 +410,8 @@ static struct crec *cache_scan_free(char
309    else
310      {
311        int i;
312 -#ifdef HAVE_IPV6
313        int addrlen = (flags & F_IPV6) ? IN6ADDRSZ : INADDRSZ;
314 -#else
315 -      int addrlen = INADDRSZ;
316 -#endif 
317 +
318        for (i = 0; i < hash_size; i++)
319         for (crecp = hash_table[i], up = &hash_table[i]; 
320              crecp && ((crecp->flags & F_REVERSE) || !(crecp->flags & F_IMMORTAL));
321 @@ -512,11 +509,9 @@ static struct crec *really_insert(char *
322           if ((flags & F_IPV4) && (new->flags & F_IPV4) &&
323               new->addr.addr.addr.addr4.s_addr == addr->addr.addr4.s_addr)
324             return new;
325 -#ifdef HAVE_IPV6
326           else if ((flags & F_IPV6) && (new->flags & F_IPV6) &&
327                    IN6_ARE_ADDR_EQUAL(&new->addr.addr.addr.addr6, &addr->addr.addr6))
328             return new;
329 -#endif
330         }
331        
332        insert_error = 1;
333 @@ -938,11 +933,7 @@ struct crec *cache_find_by_addr(struct c
334                                 time_t now, unsigned int prot)
335  {
336    struct crec *ans;
337 -#ifdef HAVE_IPV6
338    int addrlen = (prot == F_IPV6) ? IN6ADDRSZ : INADDRSZ;
339 -#else
340 -  int addrlen = INADDRSZ;
341 -#endif
342    
343    if (crecp) /* iterating */
344      ans = crecp->next;
345 @@ -1171,14 +1162,12 @@ int read_hostsfile(char *filename, unsig
346           addrlen = INADDRSZ;
347           domain_suffix = get_domain(addr.addr.addr4);
348         }
349 -#ifdef HAVE_IPV6
350        else if (inet_pton(AF_INET6, token, &addr) > 0)
351         {
352           flags = F_HOSTS | F_IMMORTAL | F_FORWARD | F_REVERSE | F_IPV6;
353           addrlen = IN6ADDRSZ;
354           domain_suffix = get_domain6(&addr.addr.addr6);
355         }
356 -#endif
357        else
358         {
359           my_syslog(LOG_ERR, _("bad address at %s line %d"), filename, lineno); 
360 @@ -1343,7 +1332,7 @@ void cache_reload(void)
361             cache->flags = F_HOSTS | F_IMMORTAL | F_FORWARD | F_REVERSE | F_IPV4 | F_NAMEP | F_CONFIG;
362             add_hosts_entry(cache, (struct all_addr *)&hr->addr, INADDRSZ, SRC_CONFIG, (struct crec **)daemon->packet, revhashsz);
363           }
364 -#ifdef HAVE_IPV6
365 +
366         if (!IN6_IS_ADDR_UNSPECIFIED(&hr->addr6) &&
367             (cache = whine_malloc(SIZEOF_POINTER_CREC)))
368           {
369 @@ -1352,7 +1341,6 @@ void cache_reload(void)
370             cache->flags = F_HOSTS | F_IMMORTAL | F_FORWARD | F_REVERSE | F_IPV6 | F_NAMEP | F_CONFIG;
371             add_hosts_entry(cache, (struct all_addr *)&hr->addr6, IN6ADDRSZ, SRC_CONFIG, (struct crec **)daemon->packet, revhashsz);
372           }
373 -#endif
374        }
375         
376    if (option_bool(OPT_NO_HOSTS) && !daemon->addn_hosts)
377 @@ -1451,13 +1439,11 @@ void cache_add_dhcp_entry(char *host_nam
378    int in_hosts = 0;
379    size_t addrlen = sizeof(struct in_addr);
380  
381 -#ifdef HAVE_IPV6
382    if (prot == AF_INET6)
383      {
384        flags = F_IPV6;
385        addrlen = sizeof(struct in6_addr);
386      }
387 -#endif
388    
389    inet_ntop(prot, host_address, daemon->addrbuff, ADDRSTRLEN);
390    
391 @@ -1810,10 +1796,8 @@ void dump_cache(time_t now)
392                 a = daemon->addrbuff;
393                 if (cache->flags & F_IPV4)
394                   inet_ntop(AF_INET, &cache->addr.addr, a, ADDRSTRLEN);
395 -#ifdef HAVE_IPV6
396                 else if (cache->flags & F_IPV6)
397                   inet_ntop(AF_INET6, &cache->addr.addr, a, ADDRSTRLEN);
398 -#endif
399               }
400  
401             if (cache->flags & F_IPV4)
402 @@ -1954,14 +1938,9 @@ void log_query(unsigned int flags, char
403              sprintf(daemon->addrbuff, "%u", rcode);
404         }
405        else
406 -       {
407 -#ifdef HAVE_IPV6
408 -         inet_ntop(flags & F_IPV4 ? AF_INET : AF_INET6,
409 -                   addr, daemon->addrbuff, ADDRSTRLEN);
410 -#else
411 -         strncpy(daemon->addrbuff, inet_ntoa(addr->addr.addr4), ADDRSTRLEN);  
412 -#endif
413 -       }
414 +       inet_ntop(flags & F_IPV4 ? AF_INET : AF_INET6,
415 +                 addr, daemon->addrbuff, ADDRSTRLEN);
416 +      
417      }
418    else
419      dest = arg;
420 --- a/src/config.h
421 +++ b/src/config.h
422 @@ -131,7 +131,6 @@ HAVE_INOTIFY
423  
424  NO_ID
425     Don't report *.bind CHAOS info to clients, forward such requests upstream instead.
426 -NO_IPV6
427  NO_TFTP
428  NO_DHCP
429  NO_DHCP6
430 @@ -141,8 +140,8 @@ NO_AUTH
431  NO_DUMPFILE
432  NO_INOTIFY
433     these are available to explicitly disable compile time options which would 
434 -   otherwise be enabled automatically (HAVE_IPV6, >2Gb file sizes) or 
435 -   which are enabled  by default in the distributed source tree. Building dnsmasq
436 +   otherwise be enabled automatically or which are enabled  by default 
437 +   in the distributed source tree. Building dnsmasq
438     with something like "make COPTS=-DNO_SCRIPT" will do the trick.
439  NO_GMP
440     Don't use and link against libgmp, Useful if nettle is built with --enable-mini-gmp.
441 @@ -308,29 +307,9 @@ HAVE_SOCKADDR_SA_LEN
442   
443  #endif
444  
445 -/* Decide if we're going to support IPv6 */
446 -/* We assume that systems which don't have IPv6
447 -   headers don't have ntop and pton either */
448 -
449 -#if defined(INET6_ADDRSTRLEN) && defined(IPV6_V6ONLY)
450 -#  define HAVE_IPV6
451 -#  define ADDRSTRLEN INET6_ADDRSTRLEN
452 -#else
453 -#  if !defined(INET_ADDRSTRLEN)
454 -#      define INET_ADDRSTRLEN 16 /* 4*3 + 3 dots + NULL */
455 -#  endif
456 -#  undef HAVE_IPV6
457 -#  define ADDRSTRLEN INET_ADDRSTRLEN
458 -#endif
459 -
460 -
461  /* rules to implement compile-time option dependencies and 
462     the NO_XXX flags */
463  
464 -#ifdef NO_IPV6
465 -#undef HAVE_IPV6
466 -#endif
467 -
468  #ifdef NO_TFTP
469  #undef HAVE_TFTP
470  #endif
471 @@ -340,7 +319,7 @@ HAVE_SOCKADDR_SA_LEN
472  #undef HAVE_DHCP6
473  #endif
474  
475 -#if defined(NO_DHCP6) || !defined(HAVE_IPV6)
476 +#if defined(NO_DHCP6)
477  #undef HAVE_DHCP6
478  #endif
479  
480 @@ -385,9 +364,6 @@ HAVE_SOCKADDR_SA_LEN
481  #ifdef DNSMASQ_COMPILE_OPTS
482  
483  static char *compile_opts = 
484 -#ifndef HAVE_IPV6
485 -"no-"
486 -#endif
487  "IPv6 "
488  #ifndef HAVE_GETOPT_LONG
489  "no-"
490 --- a/src/conntrack.c
491 +++ b/src/conntrack.c
492 @@ -36,7 +36,6 @@ int get_incoming_mark(union mysockaddr *
493        nfct_set_attr_u8(ct, ATTR_L4PROTO, istcp ? IPPROTO_TCP : IPPROTO_UDP);
494        nfct_set_attr_u16(ct, ATTR_PORT_DST, htons(daemon->port));
495        
496 -#ifdef HAVE_IPV6
497        if (peer_addr->sa.sa_family == AF_INET6)
498         {
499           nfct_set_attr_u8(ct, ATTR_L3PROTO, AF_INET6);
500 @@ -45,7 +44,6 @@ int get_incoming_mark(union mysockaddr *
501           nfct_set_attr(ct, ATTR_IPV6_DST, local_addr->addr.addr6.s6_addr);
502         }
503        else
504 -#endif
505         {
506           nfct_set_attr_u8(ct, ATTR_L3PROTO, AF_INET);
507           nfct_set_attr_u32(ct, ATTR_IPV4_SRC, peer_addr->in.sin_addr.s_addr);
508 --- a/src/dbus.c
509 +++ b/src/dbus.c
510 @@ -185,9 +185,6 @@ static void dbus_read_servers(DBusMessag
511                 }
512             }
513  
514 -#ifndef HAVE_IPV6
515 -         my_syslog(LOG_WARNING, _("attempt to set an IPv6 server address via DBus - no IPv6 support"));
516 -#else
517           if (i == sizeof(struct in6_addr))
518             {
519               memcpy(&addr.in6.sin6_addr, p, sizeof(struct in6_addr));
520 @@ -202,7 +199,6 @@ static void dbus_read_servers(DBusMessag
521                source_addr.in6.sin6_port = htons(daemon->query_port);
522               skip = 0;
523             }
524 -#endif
525         }
526        else
527         /* At the end */
528 --- a/src/dnsmasq.c
529 +++ b/src/dnsmasq.c
530 @@ -1730,11 +1730,11 @@ static void check_dns_listeners(time_t n
531                   indextoname(listener->tcpfd, if_index, intr_name))
532                 {
533                   struct all_addr addr;
534 -                 addr.addr.addr4 = tcp_addr.in.sin_addr;
535 -#ifdef HAVE_IPV6
536 +                 
537                   if (tcp_addr.sa.sa_family == AF_INET6)
538                     addr.addr.addr6 = tcp_addr.in6.sin6_addr;
539 -#endif
540 +                 else
541 +                   addr.addr.addr4 = tcp_addr.in.sin_addr;
542                   
543                   for (iface = daemon->interfaces; iface; iface = iface->next)
544                     if (iface->index == if_index)
545 --- a/src/dnsmasq.h
546 +++ b/src/dnsmasq.h
547 @@ -126,9 +126,7 @@ typedef unsigned long long u64;
548  #include <net/if_arp.h>
549  #include <netinet/in_systm.h>
550  #include <netinet/ip.h>
551 -#ifdef HAVE_IPV6
552  #include <netinet/ip6.h>
553 -#endif
554  #include <netinet/ip_icmp.h>
555  #include <sys/uio.h>
556  #include <syslog.h>
557 @@ -159,6 +157,8 @@ extern int capget(cap_user_header_t head
558  /* daemon is function in the C library.... */
559  #define daemon dnsmasq_daemon
560  
561 +#define ADDRSTRLEN INET6_ADDRSTRLEN
562 +
563  /* Async event queue */
564  struct event_desc {
565    int event, data, msg_sz;
566 @@ -273,9 +273,7 @@ struct event_desc {
567  struct all_addr {
568    union {
569      struct in_addr addr4;
570 -#ifdef HAVE_IPV6
571      struct in6_addr addr6;
572 -#endif
573      /* for log_query */
574      struct {
575        unsigned short keytag, algo, digest;
576 @@ -383,9 +381,7 @@ struct host_record {
577      struct name_list *next;
578    } *names;
579    struct in_addr addr;
580 -#ifdef HAVE_IPV6
581    struct in6_addr addr6;
582 -#endif
583    struct host_record *next;
584  };
585  
586 @@ -496,9 +492,7 @@ struct crec {
587  union mysockaddr {
588    struct sockaddr sa;
589    struct sockaddr_in in;
590 -#if defined(HAVE_IPV6)
591    struct sockaddr_in6 in6;
592 -#endif
593  };
594  
595  /* bits in flag param to IPv6 callbacks from iface_enumerate() */
596 @@ -660,9 +654,7 @@ struct frec {
597    struct all_addr dest;
598    struct server *sentto; /* NULL means free */
599    struct randfd *rfd4;
600 -#ifdef HAVE_IPV6
601    struct randfd *rfd6;
602 -#endif
603    unsigned int iface;
604    unsigned short orig_id, new_id;
605    int log_id, fd, forwardall, flags;
606 @@ -877,9 +869,7 @@ struct dhcp_bridge {
607  struct cond_domain {
608    char *domain, *prefix;
609    struct in_addr start, end;
610 -#ifdef HAVE_IPV6
611    struct in6_addr start6, end6;
612 -#endif
613    int is6, indexed;
614    struct cond_domain *next;
615  }; 
616 @@ -1184,9 +1174,7 @@ void blockdata_free(struct blockdata *bl
617  
618  /* domain.c */
619  char *get_domain(struct in_addr addr);
620 -#ifdef HAVE_IPV6
621  char *get_domain6(struct in6_addr *addr);
622 -#endif
623  int is_name_synthetic(int flags, char *name, struct all_addr *addr);
624  int is_rev_synth(int flag, struct all_addr *addr, char *name);
625  
626 @@ -1270,11 +1258,9 @@ int hostname_issubdomain(char *a, char *
627  time_t dnsmasq_time(void);
628  int netmask_length(struct in_addr mask);
629  int is_same_net(struct in_addr a, struct in_addr b, struct in_addr mask);
630 -#ifdef HAVE_IPV6
631  int is_same_net6(struct in6_addr *a, struct in6_addr *b, int prefixlen);
632  u64 addr6part(struct in6_addr *addr);
633  void setaddr6part(struct in6_addr *addr, u64 host);
634 -#endif
635  int retry_send(ssize_t rc);
636  void prettyprint_time(char *buf, unsigned int t);
637  int prettyprint_addr(union mysockaddr *addr, char *buf);
638 @@ -1353,9 +1339,7 @@ int loopback_exception(int fd, int famil
639  int label_exception(int index, int family, struct all_addr *addr);
640  int fix_fd(int fd);
641  int tcp_interface(int fd, int af);
642 -#ifdef HAVE_IPV6
643  int set_ipv6pktinfo(int fd);
644 -#endif
645  #ifdef HAVE_DHCP6
646  void join_multicast(int dienow);
647  #endif
648 --- a/src/domain.c
649 +++ b/src/domain.c
650 @@ -18,21 +18,14 @@
651  
652  
653  static struct cond_domain *search_domain(struct in_addr addr, struct cond_domain *c);
654 -#ifdef HAVE_IPV6
655  static struct cond_domain *search_domain6(struct in6_addr *addr, struct cond_domain *c);
656 -#endif
657  
658  
659  int is_name_synthetic(int flags, char *name, struct all_addr *addr)
660  {
661    char *p;
662    struct cond_domain *c = NULL;
663 -  int prot = AF_INET;
664 -
665 -#ifdef HAVE_IPV6
666 -  if (flags & F_IPV6)
667 -    prot = AF_INET6;
668 -#endif
669 +  int prot = (flags & F_IPV6) ? AF_INET6 : AF_INET;
670  
671    for (c = daemon->synth_domains; c; c = c->next)
672      {
673 @@ -83,8 +76,7 @@ int is_name_synthetic(int flags, char *n
674                       addr->addr.addr4.s_addr = htonl(ntohl(c->start.s_addr) + index);
675                       found = 1;
676                     }
677 -               }
678 -#ifdef HAVE_IPV6 
679 +               } 
680               else
681                 {
682                   u64 index = atoll(tail);
683 @@ -98,7 +90,6 @@ int is_name_synthetic(int flags, char *n
684                       found = 1;
685                     }
686                 }
687 -#endif
688             }
689         }
690        else
691 @@ -111,10 +102,8 @@ int is_name_synthetic(int flags, char *n
692               if ((c >='0' && c <= '9') || c == '-')
693                 continue;
694               
695 -#ifdef HAVE_IPV6
696               if (prot == AF_INET6 && ((c >='A' && c <= 'F') || (c >='a' && c <= 'f'))) 
697                 continue;
698 -#endif
699               
700               break;
701             }
702 @@ -124,7 +113,6 @@ int is_name_synthetic(int flags, char *n
703           
704           *p = 0;       
705           
706 -#ifdef HAVE_IPV6
707           if (prot == AF_INET6 && strstr(tail, "--ffff-") == tail)
708             {
709               /* special hack for v4-mapped. */
710 @@ -134,7 +122,6 @@ int is_name_synthetic(int flags, char *n
711                   *p = '.';
712             }
713           else
714 -#endif
715             {
716               /* swap . or : for - */
717               for (p = tail; *p; p++)
718 @@ -142,10 +129,8 @@ int is_name_synthetic(int flags, char *n
719                   {
720                     if (prot == AF_INET)
721                       *p = '.';
722 -#ifdef HAVE_IPV6
723                     else
724                       *p = ':';
725 -#endif
726                   }
727             }
728           
729 @@ -158,7 +143,6 @@ int is_name_synthetic(int flags, char *n
730                       ntohl(addr->addr.addr4.s_addr) <= ntohl(c->end.s_addr))
731                     found = 1;
732                 }
733 -#ifdef HAVE_IPV6
734               else
735                 {
736                   u64 addrpart = addr6part(&addr->addr.addr6);
737 @@ -169,7 +153,6 @@ int is_name_synthetic(int flags, char *n
738                       addrpart <= addr6part(&c->end6))
739                     found = 1;
740                 }
741 -#endif
742             }
743  
744         }
745 @@ -221,8 +204,7 @@ int is_rev_synth(int flag, struct all_ad
746         return 1;
747       }
748  
749 -#ifdef HAVE_IPV6
750 -   if (flag & F_IPV6 && (c = search_domain6(&addr->addr.addr6, daemon->synth_domains))) 
751 +   if ((flag & F_IPV6) && (c = search_domain6(&addr->addr.addr6, daemon->synth_domains))) 
752       {
753         char *p;
754         
755 @@ -259,7 +241,6 @@ int is_rev_synth(int flag, struct all_ad
756         
757         return 1;
758       }
759 -#endif
760     
761     return 0;
762  }
763 @@ -286,7 +267,7 @@ char *get_domain(struct in_addr addr)
764    return daemon->domain_suffix;
765  } 
766  
767 -#ifdef HAVE_IPV6
768 +
769  static struct cond_domain *search_domain6(struct in6_addr *addr, struct cond_domain *c)
770  {
771    u64 addrpart = addr6part(addr);
772 @@ -310,4 +291,3 @@ char *get_domain6(struct in6_addr *addr)
773  
774    return daemon->domain_suffix;
775  } 
776 -#endif
777 --- a/src/dump.c
778 +++ b/src/dump.c
779 @@ -82,10 +82,8 @@ void dump_init(void)
780  void dump_packet(int mask, void *packet, size_t len, union mysockaddr *src, union mysockaddr *dst)
781  {
782    struct ip ip;
783 -#ifdef HAVE_IPV6
784    struct ip6_hdr ip6;
785    int family;
786 -#endif
787    struct udphdr {
788      u16 uh_sport;               /* source port */
789      u16 uh_dport;               /* destination port */
790 @@ -105,7 +103,6 @@ void dump_packet(int mask, void *packet,
791    /* So wireshark can Id the packet. */
792    udp.uh_sport = udp.uh_dport = htons(NAMESERVER_PORT);
793  
794 -#ifdef HAVE_IPV6
795    if (src)
796      family = src->sa.sa_family;
797    else
798 @@ -139,7 +136,6 @@ void dump_packet(int mask, void *packet,
799         sum += ((u16 *)&ip6.ip6_src)[i];
800      }
801    else
802 -#endif
803      {
804        iphdr = &ip;
805        ipsz = sizeof(ip);
806 --- a/src/edns0.c
807 +++ b/src/edns0.c
808 @@ -301,20 +301,14 @@ static size_t add_mac(struct dns_header
809  
810  struct subnet_opt {
811    u16 family;
812 -  u8 source_netmask, scope_netmask;
813 -#ifdef HAVE_IPV6 
814 +  u8 source_netmask, scope_netmask; 
815    u8 addr[IN6ADDRSZ];
816 -#else
817 -  u8 addr[INADDRSZ];
818 -#endif
819  };
820  
821  static void *get_addrp(union mysockaddr *addr, const short family) 
822  {
823 -#ifdef HAVE_IPV6
824    if (family == AF_INET6)
825      return &addr->in6.sin6_addr;
826 -#endif
827  
828    return &addr->in.sin_addr;
829  }
830 @@ -330,7 +324,6 @@ static size_t calc_subnet_opt(struct sub
831    opt->source_netmask = 0;
832    opt->scope_netmask = 0;
833  
834 -#ifdef HAVE_IPV6
835    if (source->sa.sa_family == AF_INET6 && daemon->add_subnet6)
836      {
837        opt->source_netmask = daemon->add_subnet6->mask;
838 @@ -342,7 +335,6 @@ static size_t calc_subnet_opt(struct sub
839        else 
840         addrp = &source->in6.sin6_addr;
841      }
842 -#endif
843  
844    if (source->sa.sa_family == AF_INET && daemon->add_subnet4)
845      {
846 @@ -356,11 +348,7 @@ static size_t calc_subnet_opt(struct sub
847           addrp = &source->in.sin_addr;
848      }
849    
850 -#ifdef HAVE_IPV6
851    opt->family = htons(sa_family == AF_INET6 ? 2 : 1);
852 -#else
853 -  opt->family = htons(1);
854 -#endif
855    
856    len = 0;
857    
858 --- a/src/forward.c
859 +++ b/src/forward.c
860 @@ -38,9 +38,7 @@ int send_from(int fd, int nowild, char *
861  #elif defined(IP_SENDSRCADDR)
862      char control[CMSG_SPACE(sizeof(struct in_addr))];
863  #endif
864 -#ifdef HAVE_IPV6
865      char control6[CMSG_SPACE(sizeof(struct in6_pktinfo))];
866 -#endif
867    } control_u;
868    
869    iov[0].iov_base = packet;
870 @@ -79,7 +77,6 @@ int send_from(int fd, int nowild, char *
871  #endif
872         }
873        else
874 -#ifdef HAVE_IPV6
875         {
876           struct in6_pktinfo p;
877           p.ipi6_ifindex = iface; /* Need iface for IPv6 to handle link-local addrs */
878 @@ -89,9 +86,6 @@ int send_from(int fd, int nowild, char *
879           cmptr->cmsg_type = daemon->v6pktinfo;
880           cmptr->cmsg_level = IPPROTO_IPV6;
881         }
882 -#else
883 -      (void)iface; /* eliminate warning */
884 -#endif
885      }
886    
887    while (retry_send(sendmsg(fd, &msg, 0)));
888 @@ -144,10 +138,8 @@ static unsigned int search_servers(time_
889                 flags = sflag;
890                 if (serv->addr.sa.sa_family == AF_INET) 
891                   *addrpp = (struct all_addr *)&serv->addr.in.sin_addr;
892 -#ifdef HAVE_IPV6
893                 else
894                   *addrpp = (struct all_addr *)&serv->addr.in6.sin6_addr;
895 -#endif 
896               }
897             else if (!flags || (flags & F_NXDOMAIN))
898               flags = F_NOERR;
899 @@ -204,10 +196,8 @@ static unsigned int search_servers(time_
900                             flags = sflag;
901                             if (serv->addr.sa.sa_family == AF_INET) 
902                               *addrpp = (struct all_addr *)&serv->addr.in.sin_addr;
903 -#ifdef HAVE_IPV6
904                             else
905                               *addrpp = (struct all_addr *)&serv->addr.in6.sin6_addr;
906 -#endif
907                           }
908                         else if (!flags || (flags & F_NXDOMAIN))
909                           flags = F_NOERR;
910 @@ -236,10 +226,8 @@ static unsigned int search_servers(time_
911            /* handle F_IPV4 and F_IPV6 set on ANY query to 0.0.0.0/:: domain. */
912            if (flags & F_IPV4)
913              log_query((flags | F_CONFIG | F_FORWARD) & ~F_IPV6, qdomain, *addrpp, NULL);
914 -#ifdef HAVE_IPV6
915            if (flags & F_IPV6)
916              log_query((flags | F_CONFIG | F_FORWARD) & ~F_IPV4, qdomain, *addrpp, NULL);
917 -#endif
918          }
919      }
920    else if ((*type) & SERV_USE_RESOLV)
921 @@ -302,20 +290,17 @@ static int forward_query(int udpfd, unio
922           
923           if (forward->sentto->addr.sa.sa_family == AF_INET) 
924             log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, "retry", (struct all_addr *)&forward->sentto->addr.in.sin_addr, "dnssec");
925 -#ifdef HAVE_IPV6
926           else
927             log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, "retry", (struct all_addr *)&forward->sentto->addr.in6.sin6_addr, "dnssec");
928 -#endif
929 +
930    
931           if (forward->sentto->sfd)
932             fd = forward->sentto->sfd->fd;
933           else
934             {
935 -#ifdef HAVE_IPV6
936               if (forward->sentto->addr.sa.sa_family == AF_INET6)
937                 fd = forward->rfd6->fd;
938               else
939 -#endif
940                 fd = forward->rfd4->fd;
941             }
942           
943 @@ -475,7 +460,6 @@ static int forward_query(int udpfd, unio
944                 fd = start->sfd->fd;
945               else 
946                 {
947 -#ifdef HAVE_IPV6
948                   if (start->addr.sa.sa_family == AF_INET6)
949                     {
950                       if (!forward->rfd6 &&
951 @@ -485,7 +469,6 @@ static int forward_query(int udpfd, unio
952                       fd = forward->rfd6->fd;
953                     }
954                   else
955 -#endif
956                     {
957                       if (!forward->rfd4 &&
958                           !(forward->rfd4 = allocate_rfd(AF_INET)))
959 @@ -541,11 +524,9 @@ static int forward_query(int udpfd, unio
960                   if (start->addr.sa.sa_family == AF_INET)
961                     log_query(F_SERVER | F_IPV4 | F_FORWARD, daemon->namebuff, 
962                               (struct all_addr *)&start->addr.in.sin_addr, NULL); 
963 -#ifdef HAVE_IPV6
964                   else
965                     log_query(F_SERVER | F_IPV6 | F_FORWARD, daemon->namebuff, 
966                               (struct all_addr *)&start->addr.in6.sin6_addr, NULL);
967 -#endif 
968                   start->queries++;
969                   forwarded = 1;
970                   forward->sentto = start;
971 @@ -788,11 +769,8 @@ void reply_query(int fd, int family, tim
972    daemon->srv_save = NULL;
973    
974    /* Determine the address of the server replying  so that we can mark that as good */
975 -  serveraddr.sa.sa_family = family;
976 -#ifdef HAVE_IPV6
977 -  if (serveraddr.sa.sa_family == AF_INET6)
978 +  if ((serveraddr.sa.sa_family = family) == AF_INET6)
979      serveraddr.in6.sin6_flowinfo = 0;
980 -#endif
981    
982    header = (struct dns_header *)daemon->packet;
983  
984 @@ -878,7 +856,6 @@ void reply_query(int fd, int family, tim
985             fd = start->sfd->fd;
986           else
987             {
988 -#ifdef HAVE_IPV6
989               if (start->addr.sa.sa_family == AF_INET6)
990                 {
991                   /* may have changed family */
992 @@ -887,7 +864,6 @@ void reply_query(int fd, int family, tim
993                   fd = forward->rfd6->fd;
994                 }
995               else
996 -#endif
997                 {
998                   /* may have changed family */
999                   if (!forward->rfd4)
1000 @@ -902,10 +878,8 @@ void reply_query(int fd, int family, tim
1001           
1002           if (start->addr.sa.sa_family == AF_INET) 
1003             log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, "retry", (struct all_addr *)&start->addr.in.sin_addr, "dnssec");
1004 -#ifdef HAVE_IPV6
1005           else
1006             log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, "retry", (struct all_addr *)&start->addr.in6.sin6_addr, "dnssec");
1007 -#endif
1008           
1009           return;
1010         }
1011 @@ -1099,9 +1073,7 @@ void reply_query(int fd, int family, tim
1012                       
1013                       new->sentto = server;
1014                       new->rfd4 = NULL;
1015 -#ifdef HAVE_IPV6
1016                       new->rfd6 = NULL;
1017 -#endif
1018                       new->flags &= ~(FREC_DNSKEY_QUERY | FREC_DS_QUERY | FREC_HAS_EXTRADATA);
1019                       new->forwardall = 0;
1020                       
1021 @@ -1125,11 +1097,9 @@ void reply_query(int fd, int family, tim
1022                       if (server->addr.sa.sa_family == AF_INET) 
1023                         log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, daemon->keyname, (struct all_addr *)&(server->addr.in.sin_addr),
1024                                   querystr("dnssec-query", querytype));
1025 -#ifdef HAVE_IPV6
1026                       else
1027                         log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, daemon->keyname, (struct all_addr *)&(server->addr.in6.sin6_addr),
1028                                   querystr("dnssec-query", querytype));
1029 -#endif
1030    
1031                       if ((hash = hash_questions(header, nn, daemon->namebuff)))
1032                         memcpy(new->hash, hash, HASH_SIZE);
1033 @@ -1147,14 +1117,12 @@ void reply_query(int fd, int family, tim
1034                       else
1035                         {
1036                           fd = -1;
1037 -#ifdef HAVE_IPV6
1038                           if (server->addr.sa.sa_family == AF_INET6)
1039                             {
1040                               if (new->rfd6 || (new->rfd6 = allocate_rfd(AF_INET6)))
1041                                 fd = new->rfd6->fd;
1042                             }
1043                           else
1044 -#endif
1045                             {
1046                               if (new->rfd4 || (new->rfd4 = allocate_rfd(AF_INET)))
1047                                 fd = new->rfd4->fd;
1048 @@ -1290,9 +1258,7 @@ void receive_query(struct listener *list
1049    struct cmsghdr *cmptr;
1050    union {
1051      struct cmsghdr align; /* this ensures alignment */
1052 -#ifdef HAVE_IPV6
1053      char control6[CMSG_SPACE(sizeof(struct in6_pktinfo))];
1054 -#endif
1055  #if defined(HAVE_LINUX_NETWORK)
1056      char control[CMSG_SPACE(sizeof(struct in_pktinfo))];
1057  #elif defined(IP_RECVDSTADDR) && defined(HAVE_SOLARIS_NETWORK)
1058 @@ -1303,12 +1269,8 @@ void receive_query(struct listener *list
1059                  CMSG_SPACE(sizeof(struct sockaddr_dl))];
1060  #endif
1061    } control_u;
1062 -#ifdef HAVE_IPV6
1063     /* Can always get recvd interface for IPv6 */
1064    int check_dst = !option_bool(OPT_NOWILD) || listen->family == AF_INET6;
1065 -#else
1066 -  int check_dst = !option_bool(OPT_NOWILD);
1067 -#endif
1068  
1069    /* packet buffer overwritten */
1070    daemon->srv_save = NULL;
1071 @@ -1359,7 +1321,6 @@ void receive_query(struct listener *list
1072        if (source_addr.in.sin_port == 0)
1073         return;
1074      }
1075 -#ifdef HAVE_IPV6
1076    else
1077      {
1078        /* Source-port == 0 is an error, we can't send back to that. */
1079 @@ -1367,13 +1328,12 @@ void receive_query(struct listener *list
1080         return;
1081        source_addr.in6.sin6_flowinfo = 0;
1082      }
1083 -#endif
1084    
1085    /* We can be configured to only accept queries from at-most-one-hop-away addresses. */
1086    if (option_bool(OPT_LOCAL_SERVICE))
1087      {
1088        struct addrlist *addr;
1089 -#ifdef HAVE_IPV6
1090 +
1091        if (listen->family == AF_INET6) 
1092         {
1093           for (addr = daemon->interface_addrs; addr; addr = addr->next)
1094 @@ -1382,7 +1342,6 @@ void receive_query(struct listener *list
1095               break;
1096         }
1097        else
1098 -#endif
1099         {
1100           struct in_addr netmask;
1101           for (addr = daemon->interface_addrs; addr; addr = addr->next)
1102 @@ -1451,7 +1410,6 @@ void receive_query(struct listener *list
1103         }
1104  #endif
1105        
1106 -#ifdef HAVE_IPV6
1107        if (listen->family == AF_INET6)
1108         {
1109           for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
1110 @@ -1467,7 +1425,6 @@ void receive_query(struct listener *list
1111                 if_index = p.p->ipi6_ifindex;
1112               }
1113         }
1114 -#endif
1115        
1116        /* enforce available interface configuration */
1117        
1118 @@ -1531,11 +1488,9 @@ void receive_query(struct listener *list
1119        if (listen->family == AF_INET) 
1120         log_query(F_QUERY | F_IPV4 | F_FORWARD, daemon->namebuff, 
1121                   (struct all_addr *)&source_addr.in.sin_addr, types);
1122 -#ifdef HAVE_IPV6
1123        else
1124         log_query(F_QUERY | F_IPV6 | F_FORWARD, daemon->namebuff, 
1125                   (struct all_addr *)&source_addr.in6.sin6_addr, types);
1126 -#endif
1127  
1128  #ifdef HAVE_AUTH
1129        /* find queries for zones we're authoritative for, and answer them directly */
1130 @@ -1744,11 +1699,9 @@ static int tcp_key_recurse(time_t now, i
1131           if (server->addr.sa.sa_family == AF_INET) 
1132             log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, keyname, (struct all_addr *)&(server->addr.in.sin_addr),
1133                       querystr("dnssec-query", new_status == STAT_NEED_KEY ? T_DNSKEY : T_DS));
1134 -#ifdef HAVE_IPV6
1135           else
1136             log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, keyname, (struct all_addr *)&(server->addr.in6.sin6_addr),
1137                       querystr("dnssec-query", new_status == STAT_NEED_KEY ? T_DNSKEY : T_DS));
1138 -#endif
1139           
1140           server->flags |= SERV_GOT_TCP;
1141           
1142 @@ -1813,11 +1766,10 @@ unsigned char *tcp_request(int confd, ti
1143    if (option_bool(OPT_CONNTRACK))
1144      {
1145        struct all_addr local;
1146 -#ifdef HAVE_IPV6                     
1147 +                     
1148        if (local_addr->sa.sa_family == AF_INET6)
1149         local.addr.addr6 = local_addr->in6.sin6_addr;
1150        else
1151 -#endif
1152         local.addr.addr4 = local_addr->in.sin_addr;
1153        
1154        have_mark = get_incoming_mark(&peer_addr, &local, 1, &mark);
1155 @@ -1828,7 +1780,7 @@ unsigned char *tcp_request(int confd, ti
1156    if (option_bool(OPT_LOCAL_SERVICE))
1157      {
1158        struct addrlist *addr;
1159 -#ifdef HAVE_IPV6
1160 +
1161        if (peer_addr.sa.sa_family == AF_INET6) 
1162         {
1163           for (addr = daemon->interface_addrs; addr; addr = addr->next)
1164 @@ -1837,7 +1789,6 @@ unsigned char *tcp_request(int confd, ti
1165               break;
1166         }
1167        else
1168 -#endif
1169         {
1170           struct in_addr netmask;
1171           for (addr = daemon->interface_addrs; addr; addr = addr->next)
1172 @@ -1892,11 +1843,9 @@ unsigned char *tcp_request(int confd, ti
1173           if (peer_addr.sa.sa_family == AF_INET) 
1174             log_query(F_QUERY | F_IPV4 | F_FORWARD, daemon->namebuff, 
1175                       (struct all_addr *)&peer_addr.in.sin_addr, types);
1176 -#ifdef HAVE_IPV6
1177           else
1178             log_query(F_QUERY | F_IPV6 | F_FORWARD, daemon->namebuff, 
1179                       (struct all_addr *)&peer_addr.in6.sin6_addr, types);
1180 -#endif
1181           
1182  #ifdef HAVE_AUTH
1183           /* find queries for zones we're authoritative for, and answer them directly */
1184 @@ -2072,11 +2021,9 @@ unsigned char *tcp_request(int confd, ti
1185                       if (last_server->addr.sa.sa_family == AF_INET)
1186                         log_query(F_SERVER | F_IPV4 | F_FORWARD, daemon->namebuff, 
1187                                   (struct all_addr *)&last_server->addr.in.sin_addr, NULL); 
1188 -#ifdef HAVE_IPV6
1189                       else
1190                         log_query(F_SERVER | F_IPV6 | F_FORWARD, daemon->namebuff, 
1191                                   (struct all_addr *)&last_server->addr.in6.sin6_addr, NULL);
1192 -#endif 
1193  
1194  #ifdef HAVE_DNSSEC
1195                       if (option_bool(OPT_DNSSEC_VALID) && !checking_disabled && (last_server->flags & SERV_DO_DNSSEC))
1196 @@ -2175,9 +2122,7 @@ static struct frec *allocate_frec(time_t
1197        f->sentto = NULL;
1198        f->rfd4 = NULL;
1199        f->flags = 0;
1200 -#ifdef HAVE_IPV6
1201        f->rfd6 = NULL;
1202 -#endif
1203  #ifdef HAVE_DNSSEC
1204        f->dependent = NULL;
1205        f->blocking_query = NULL;
1206 @@ -2237,11 +2182,8 @@ static void free_frec(struct frec *f)
1207    f->rfd4 = NULL;
1208    f->sentto = NULL;
1209    f->flags = 0;
1210 -  
1211 -#ifdef HAVE_IPV6
1212    free_rfd(f->rfd6);
1213    f->rfd6 = NULL;
1214 -#endif
1215  
1216  #ifdef HAVE_DNSSEC
1217    if (f->stash)
1218 --- a/src/helper.c
1219 +++ b/src/helper.c
1220 @@ -64,9 +64,7 @@ struct script_data
1221  #ifdef HAVE_TFTP
1222    off_t file_len;
1223  #endif
1224 -#ifdef HAVE_IPV6
1225    struct in6_addr addr6;
1226 -#endif
1227  #ifdef HAVE_DHCP6
1228    int iaid, vendorclass_count;
1229  #endif
1230 @@ -302,10 +300,8 @@ int create_helper(int event_fd, int err_
1231      
1232        if (!is6)
1233         inet_ntop(AF_INET, &data.addr, daemon->addrbuff, ADDRSTRLEN);
1234 -#ifdef HAVE_IPV6
1235        else
1236         inet_ntop(AF_INET6, &data.addr6, daemon->addrbuff, ADDRSTRLEN);
1237 -#endif
1238  
1239  #ifdef HAVE_TFTP
1240        /* file length */
1241 @@ -826,10 +822,8 @@ void queue_tftp(off_t file_len, char *fi
1242  
1243    if ((buf->flags = peer->sa.sa_family) == AF_INET)
1244      buf->addr = peer->in.sin_addr;
1245 -#ifdef HAVE_IPV6
1246    else
1247      buf->addr6 = peer->in6.sin6_addr;
1248 -#endif
1249  
1250    memcpy((unsigned char *)(buf+1), filename, filename_len);
1251    
1252 @@ -851,10 +845,8 @@ void queue_arp(int action, unsigned char
1253    buf->hwaddr_type =  ARPHRD_ETHER; 
1254    if ((buf->flags = family) == AF_INET)
1255      buf->addr = addr->addr.addr4;
1256 -#ifdef HAVE_IPV6
1257    else
1258      buf->addr6 = addr->addr.addr6;
1259 -#endif
1260    
1261    memcpy(buf->hwaddr, mac, maclen);
1262    
1263 --- a/src/ipset.c
1264 +++ b/src/ipset.c
1265 @@ -120,13 +120,8 @@ static int new_add_to_ipset(const char *
1266    struct my_nfgenmsg *nfg;
1267    struct my_nlattr *nested[2];
1268    uint8_t proto;
1269 -  int addrsz = INADDRSZ;
1270 +  int addrsz = (af == AF_INET6) ? INADDRSZ : IN6ADDRSZ;
1271  
1272 -#ifdef HAVE_IPV6
1273 -  if (af == AF_INET6)
1274 -    addrsz = IN6ADDRSZ;
1275 -#endif
1276 -    
1277    if (strlen(setname) >= IPSET_MAXNAMELEN) 
1278      {
1279        errno = ENAMETOOLONG;
1280 @@ -213,7 +208,6 @@ int add_to_ipset(const char *setname, co
1281  {
1282    int ret = 0, af = AF_INET;
1283  
1284 -#ifdef HAVE_IPV6
1285    if (flags & F_IPV6)
1286      {
1287        af = AF_INET6;
1288 @@ -224,7 +218,6 @@ int add_to_ipset(const char *setname, co
1289           ret = -1;
1290         }
1291      }
1292 -#endif
1293    
1294    if (ret != -1) 
1295      ret = old_kernel ? old_add_to_ipset(setname, ipaddr, remove) : new_add_to_ipset(setname, ipaddr, af, remove);
1296 --- a/src/netlink.c
1297 +++ b/src/netlink.c
1298 @@ -51,11 +51,10 @@ void netlink_init(void)
1299    addr.nl_groups = RTMGRP_IPV4_ROUTE;
1300    if (option_bool(OPT_CLEVERBIND))
1301      addr.nl_groups |= RTMGRP_IPV4_IFADDR;  
1302 -#ifdef HAVE_IPV6
1303    addr.nl_groups |= RTMGRP_IPV6_ROUTE;
1304    if (option_bool(OPT_CLEVERBIND))
1305      addr.nl_groups |= RTMGRP_IPV6_IFADDR;
1306 -#endif
1307 +
1308  #ifdef HAVE_DHCP6
1309    if (daemon->doing_ra || daemon->doing_dhcp6)
1310      addr.nl_groups |= RTMGRP_IPV6_IFADDR;
1311 @@ -235,7 +234,6 @@ int iface_enumerate(int family, void *pa
1312                       if (!((*callback)(addr, ifa->ifa_index, label,  netmask, broadcast, parm)))
1313                         callback_ok = 0;
1314                   }
1315 -#ifdef HAVE_IPV6
1316                 else if (ifa->ifa_family == AF_INET6)
1317                   {
1318                     struct in6_addr *addrp = NULL;
1319 @@ -270,7 +268,6 @@ int iface_enumerate(int family, void *pa
1320                                         (int) preferred, (int)valid, parm)))
1321                         callback_ok = 0;
1322                   }
1323 -#endif
1324               }
1325           }
1326         else if (h->nlmsg_type == RTM_NEWNEIGH && family == AF_UNSPEC)
1327 --- a/src/network.c
1328 +++ b/src/network.c
1329 @@ -137,12 +137,10 @@ int iface_check(int family, struct all_a
1330               if (family == AF_INET &&
1331                   tmp->addr.in.sin_addr.s_addr == addr->addr.addr4.s_addr)
1332                 ret = match_addr = tmp->used = 1;
1333 -#ifdef HAVE_IPV6
1334               else if (family == AF_INET6 &&
1335                        IN6_ARE_ADDR_EQUAL(&tmp->addr.in6.sin6_addr, 
1336                                           &addr->addr.addr6))
1337                 ret = match_addr = tmp->used = 1;
1338 -#endif
1339             }          
1340      }
1341    
1342 @@ -162,11 +160,9 @@ int iface_check(int family, struct all_a
1343      else if (addr && tmp->addr.sa.sa_family == AF_INET && family == AF_INET &&
1344              tmp->addr.in.sin_addr.s_addr == addr->addr.addr4.s_addr)
1345        break;
1346 -#ifdef HAVE_IPV6
1347      else if (addr && tmp->addr.sa.sa_family == AF_INET6 && family == AF_INET6 &&
1348              IN6_ARE_ADDR_EQUAL(&tmp->addr.in6.sin6_addr, &addr->addr.addr6))
1349        break;
1350 -#endif      
1351  
1352    if (tmp && auth) 
1353      {
1354 @@ -200,11 +196,8 @@ int loopback_exception(int fd, int famil
1355                 if (iface->addr.in.sin_addr.s_addr == addr->addr.addr4.s_addr)
1356                   return 1;
1357               }
1358 -#ifdef HAVE_IPV6
1359             else if (IN6_ARE_ADDR_EQUAL(&iface->addr.in6.sin6_addr, &addr->addr.addr6))
1360               return 1;
1361 -#endif
1362 -           
1363           }
1364      }
1365    return 0;
1366 @@ -292,19 +285,15 @@ static int iface_allowed(struct iface_pa
1367               al->addr.addr.addr4 = addr->in.sin_addr;
1368               al->flags = 0;
1369             }
1370 -#ifdef HAVE_IPV6
1371           else
1372             {
1373               al->addr.addr.addr6 = addr->in6.sin6_addr;
1374               al->flags = ADDRLIST_IPV6;
1375             } 
1376 -#endif
1377         }
1378      }
1379    
1380 -#ifdef HAVE_IPV6
1381    if (addr->sa.sa_family != AF_INET6 || !IN6_IS_ADDR_LINKLOCAL(&addr->in6.sin6_addr))
1382 -#endif
1383      {
1384        struct interface_name *int_name;
1385        struct addrlist *al;
1386 @@ -337,7 +326,6 @@ static int iface_allowed(struct iface_pa
1387                     }
1388                 }
1389               
1390 -#ifdef HAVE_IPV6
1391               if (addr->sa.sa_family == AF_INET6 && (name->flags & AUTH6))
1392                 {
1393                   if (param->spare)
1394 @@ -357,8 +345,6 @@ static int iface_allowed(struct iface_pa
1395                       al->flags = ADDRLIST_IPV6;
1396                     }
1397                 } 
1398 -#endif
1399 -             
1400             }
1401  #endif
1402         
1403 @@ -386,7 +372,6 @@ static int iface_allowed(struct iface_pa
1404                     al->addr.addr.addr4 = addr->in.sin_addr;
1405                     al->flags = 0;
1406                   }
1407 -#ifdef HAVE_IPV6
1408                 else
1409                  {
1410                     al->addr.addr.addr6 = addr->in6.sin6_addr;
1411 @@ -396,7 +381,6 @@ static int iface_allowed(struct iface_pa
1412                     if (!(iface_flags & IFACE_PERMANENT) || (iface_flags & (IFACE_DEPRECATED | IFACE_TENTATIVE)))
1413                       al->flags |= ADDRLIST_REVONLY;
1414                  } 
1415 -#endif
1416               }
1417           }
1418      }
1419 @@ -438,11 +422,9 @@ static int iface_allowed(struct iface_pa
1420        !iface_check(AF_INET, (struct all_addr *)&addr->in.sin_addr, label, &auth_dns))
1421      return 1;
1422  
1423 -#ifdef HAVE_IPV6
1424    if (addr->sa.sa_family == AF_INET6 &&
1425        !iface_check(AF_INET6, (struct all_addr *)&addr->in6.sin6_addr, label, &auth_dns))
1426      return 1;
1427 -#endif
1428      
1429  #ifdef HAVE_DHCP
1430    /* No DHCP where we're doing auth DNS. */
1431 @@ -501,7 +483,6 @@ static int iface_allowed(struct iface_pa
1432    return 0;
1433  }
1434  
1435 -#ifdef HAVE_IPV6
1436  static int iface_allowed_v6(struct in6_addr *local, int prefix, 
1437                             int scope, int if_index, int flags, 
1438                             int preferred, int valid, void *vparam)
1439 @@ -529,7 +510,6 @@ static int iface_allowed_v6(struct in6_a
1440    
1441    return iface_allowed((struct iface_param *)vparam, if_index, NULL, &addr, netmask, prefix, flags);
1442  }
1443 -#endif
1444  
1445  static int iface_allowed_v4(struct in_addr local, int if_index, char *label,
1446                             struct in_addr netmask, struct in_addr broadcast, void *vparam)
1447 @@ -633,9 +613,7 @@ int enumerate_interfaces(int reset)
1448  
1449    param.spare = spare;
1450    
1451 -#ifdef HAVE_IPV6
1452    ret = iface_enumerate(AF_INET6, &param, iface_allowed_v6);
1453 -#endif
1454  
1455    if (ret)
1456      ret = iface_enumerate(AF_INET, &param, iface_allowed_v4); 
1457 @@ -740,10 +718,8 @@ static int make_sock(union mysockaddr *a
1458    if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 || !fix_fd(fd))
1459      goto err;
1460    
1461 -#ifdef HAVE_IPV6
1462    if (family == AF_INET6 && setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &opt, sizeof(opt)) == -1)
1463      goto err;
1464 -#endif
1465    
1466    if ((rc = bind(fd, (struct sockaddr *)addr, sa_len(addr))) == -1)
1467      goto err;
1468 @@ -767,15 +743,12 @@ static int make_sock(union mysockaddr *a
1469  #endif
1470         }
1471      }
1472 -#ifdef HAVE_IPV6
1473    else if (!set_ipv6pktinfo(fd))
1474      goto err;
1475 -#endif
1476    
1477    return fd;
1478  }
1479  
1480 -#ifdef HAVE_IPV6  
1481  int set_ipv6pktinfo(int fd)
1482  {
1483    int opt = 1;
1484 @@ -802,7 +775,6 @@ int set_ipv6pktinfo(int fd)
1485  
1486    return 0;
1487  }
1488 -#endif
1489  
1490  
1491  /* Find the interface on which a TCP connection arrived, if possible, or zero otherwise. */
1492 @@ -842,7 +814,6 @@ int tcp_interface(int fd, int af)
1493               }
1494         }
1495      }
1496 -#ifdef HAVE_IPV6
1497    else
1498      {
1499        /* Only the RFC-2292 API has the ability to find the interface for TCP connections,
1500 @@ -874,7 +845,6 @@ int tcp_interface(int fd, int af)
1501                }
1502         }
1503      }
1504 -#endif /* IPV6 */
1505  #endif /* Linux */
1506   
1507    return if_index;
1508 @@ -904,7 +874,6 @@ static struct listener *create_listeners
1509           tftpfd = make_sock(addr, SOCK_DGRAM, dienow);
1510           addr->in.sin_port = save;
1511         }
1512 -#  ifdef HAVE_IPV6
1513        else
1514         {
1515           short save = addr->in6.sin6_port;
1516 @@ -912,7 +881,6 @@ static struct listener *create_listeners
1517           tftpfd = make_sock(addr, SOCK_DGRAM, dienow);
1518           addr->in6.sin6_port = save;
1519         }  
1520 -#  endif
1521      }
1522  #endif
1523  
1524 @@ -945,11 +913,10 @@ void create_wildcard_listeners(void)
1525  
1526    l = create_listeners(&addr, !!option_bool(OPT_TFTP), 1);
1527  
1528 -#ifdef HAVE_IPV6
1529    memset(&addr, 0, sizeof(addr));
1530 -#  ifdef HAVE_SOCKADDR_SA_LEN
1531 +#ifdef HAVE_SOCKADDR_SA_LEN
1532    addr.in6.sin6_len = sizeof(addr.in6);
1533 -#  endif
1534 +#endif
1535    addr.in6.sin6_family = AF_INET6;
1536    addr.in6.sin6_addr = in6addr_any;
1537    addr.in6.sin6_port = htons(daemon->port);
1538 @@ -959,7 +926,6 @@ void create_wildcard_listeners(void)
1539      l->next = l6;
1540    else 
1541      l = l6;
1542 -#endif
1543  
1544    daemon->listeners = l;
1545  }
1546 @@ -1159,7 +1125,6 @@ int random_sock(int family)
1547                 addr.in.sin_len = sizeof(struct sockaddr_in);
1548  #endif
1549               }
1550 -#ifdef HAVE_IPV6
1551             else
1552               {
1553                 addr.in6.sin6_addr = in6addr_any; 
1554 @@ -1168,7 +1133,6 @@ int random_sock(int family)
1555                 addr.in6.sin6_len = sizeof(struct sockaddr_in6);
1556  #endif
1557               }
1558 -#endif
1559             
1560             if (bind(fd, (struct sockaddr *)&addr, sa_len(&addr)) == 0)
1561               return fd;
1562 @@ -1193,10 +1157,8 @@ int local_bind(int fd, union mysockaddr
1563      {
1564        if (addr_copy.sa.sa_family == AF_INET)
1565         addr_copy.in.sin_port = 0;
1566 -#ifdef HAVE_IPV6
1567        else
1568         addr_copy.in6.sin6_port = 0;
1569 -#endif
1570      }
1571    
1572    if (bind(fd, (struct sockaddr *)&addr_copy, sa_len(&addr_copy)) == -1)
1573 @@ -1211,7 +1173,7 @@ int local_bind(int fd, union mysockaddr
1574            return setsockopt(fd, IPPROTO_IP, IP_UNICAST_IF, &ifindex_opt, sizeof(ifindex_opt)) == 0;
1575          }
1576  #endif
1577 -#if defined(HAVE_IPV6) && defined (IPV6_UNICAST_IF)
1578 +#if defined (IPV6_UNICAST_IF)
1579        if (addr_copy.sa.sa_family == AF_INET6)
1580          {
1581            uint32_t ifindex_opt = htonl(ifindex);
1582 @@ -1247,12 +1209,10 @@ static struct serverfd *allocate_sfd(uni
1583           addr->in.sin_port == htons(0)) 
1584         return NULL;
1585  
1586 -#ifdef HAVE_IPV6
1587        if (addr->sa.sa_family == AF_INET6 &&
1588           memcmp(&addr->in6.sin6_addr, &in6addr_any, sizeof(in6addr_any)) == 0 &&
1589           addr->in6.sin6_port == htons(0)) 
1590         return NULL;
1591 -#endif
1592      }
1593  
1594    if (intname && strlen(intname) != 0)
1595 @@ -1315,7 +1275,7 @@ void pre_allocate_sfds(void)
1596  #endif
1597        if ((sfd = allocate_sfd(&addr, "")))
1598         sfd->preallocated = 1;
1599 -#ifdef HAVE_IPV6
1600 +
1601        memset(&addr, 0, sizeof(addr));
1602        addr.in6.sin6_family = AF_INET6;
1603        addr.in6.sin6_addr = in6addr_any;
1604 @@ -1325,7 +1285,6 @@ void pre_allocate_sfds(void)
1605  #endif
1606        if ((sfd = allocate_sfd(&addr, "")))
1607         sfd->preallocated = 1;
1608 -#endif
1609      }
1610    
1611    for (srv = daemon->servers; srv; srv = srv->next)
1612 @@ -1658,7 +1617,6 @@ int reload_servers(char *fname)
1613           source_addr.in.sin_addr.s_addr = INADDR_ANY;
1614           source_addr.in.sin_port = htons(daemon->query_port);
1615         }
1616 -#ifdef HAVE_IPV6
1617        else 
1618         {       
1619           int scope_index = 0;
1620 @@ -1686,10 +1644,6 @@ int reload_servers(char *fname)
1621           else
1622             continue;
1623         }
1624 -#else /* IPV6 */
1625 -      else
1626 -       continue;
1627 -#endif 
1628  
1629        add_update_server(SERV_FROM_RESOLV, &addr, &source_addr, NULL, NULL);
1630        gotone = 1;
1631 --- a/src/option.c
1632 +++ b/src/option.c
1633 @@ -764,10 +764,8 @@ static char *parse_mysockaddr(char *arg,
1634  {
1635    if (inet_pton(AF_INET, arg, &addr->in.sin_addr) > 0)
1636      addr->sa.sa_family = AF_INET;
1637 -#ifdef HAVE_IPV6
1638    else if (inet_pton(AF_INET6, arg, &addr->in6.sin6_addr) > 0)
1639      addr->sa.sa_family = AF_INET6;
1640 -#endif
1641    else
1642      return _("bad address");
1643     
1644 @@ -779,10 +777,8 @@ char *parse_server(char *arg, union myso
1645    int source_port = 0, serv_port = NAMESERVER_PORT;
1646    char *portno, *source;
1647    char *interface_opt = NULL;
1648 -#ifdef HAVE_IPV6
1649    int scope_index = 0;
1650    char *scope_id;
1651 -#endif
1652    
1653    if (!arg || strlen(arg) == 0)
1654      {
1655 @@ -800,9 +796,7 @@ char *parse_server(char *arg, union myso
1656        !atoi_check16(portno, &serv_port))
1657      return _("bad port");
1658    
1659 -#ifdef HAVE_IPV6
1660    scope_id = split_chr(arg, '%');
1661 -#endif
1662    
1663    if (source) {
1664      interface_opt = split_chr(source, '@');
1665 @@ -846,7 +840,6 @@ char *parse_server(char *arg, union myso
1666             }
1667         }
1668      }
1669 -#ifdef HAVE_IPV6
1670    else if (inet_pton(AF_INET6, arg, &addr->in6.sin6_addr) > 0)
1671      {
1672        if (scope_id && (scope_index = if_nametoindex(scope_id)) == 0)
1673 @@ -881,7 +874,6 @@ char *parse_server(char *arg, union myso
1674             }
1675         }
1676      }
1677 -#endif
1678    else
1679      return _("bad address");
1680  
1681 @@ -1914,10 +1906,8 @@ static int one_opt(int option, char *arg
1682           unhide_metas(arg);
1683           if (inet_pton(AF_INET, arg, &new->addr.in.sin_addr) > 0)
1684             new->addr.sa.sa_family = AF_INET;
1685 -#ifdef HAVE_IPV6
1686           else if (inet_pton(AF_INET6, arg, &new->addr.in6.sin6_addr) > 0)
1687             new->addr.sa.sa_family = AF_INET6;
1688 -#endif
1689           else
1690             {
1691               char *fam = split_chr(arg, '/');
1692 @@ -1927,10 +1917,8 @@ static int one_opt(int option, char *arg
1693                 {
1694                   if (strcmp(fam, "4") == 0)
1695                     new->addr.sa.sa_family = AF_INET;
1696 -#ifdef HAVE_IPV6
1697                   else if (strcmp(fam, "6") == 0)
1698                     new->addr.sa.sa_family = AF_INET6;
1699 -#endif
1700                   else
1701                     ret_err(gen_err);
1702                 } 
1703 @@ -1996,14 +1984,12 @@ static int one_opt(int option, char *arg
1704                 subnet->prefixlen = (prefixlen == 0) ? 24 : prefixlen;
1705                 subnet->flags = ADDRLIST_LITERAL;
1706               }
1707 -#ifdef HAVE_IPV6
1708             else if (inet_pton(AF_INET6, arg, &addr.addr.addr6))
1709               {
1710                 subnet = opt_malloc(sizeof(struct addrlist));
1711                 subnet->prefixlen = (prefixlen == 0) ? 64 : prefixlen;
1712                 subnet->flags = ADDRLIST_LITERAL | ADDRLIST_IPV6;
1713               }
1714 -#endif
1715             else 
1716               {
1717                 struct auth_name_list *name =  opt_malloc(sizeof(struct auth_name_list));
1718 @@ -2015,10 +2001,8 @@ static int one_opt(int option, char *arg
1719                   {
1720                     if (prefixlen == 4)
1721                       name->flags &= ~AUTH6;
1722 -#ifdef HAVE_IPV6
1723                     else if (prefixlen == 6)
1724                       name->flags &= ~AUTH4;
1725 -#endif
1726                     else
1727                       ret_err(gen_err);
1728                   }
1729 @@ -2139,7 +2123,6 @@ static int one_opt(int option, char *arg
1730                                 }
1731                             }
1732                         }
1733 -#ifdef HAVE_IPV6
1734                       else if (inet_pton(AF_INET6, comma, &new->start6))
1735                         {
1736                           u64 mask = (1LLU << (128 - msize)) - 1LLU;
1737 @@ -2183,7 +2166,6 @@ static int one_opt(int option, char *arg
1738                                 }
1739                             }
1740                         }
1741 -#endif
1742                       else
1743                         ret_err(gen_err);
1744                     }
1745 @@ -2201,7 +2183,6 @@ static int one_opt(int option, char *arg
1746                           else if (!inet_pton(AF_INET, arg, &new->end))
1747                             ret_err(gen_err);
1748                         }
1749 -#ifdef HAVE_IPV6
1750                       else if (inet_pton(AF_INET6, comma, &new->start6))
1751                         {
1752                           new->is6 = 1;
1753 @@ -2210,7 +2191,6 @@ static int one_opt(int option, char *arg
1754                           else if (!inet_pton(AF_INET6, arg, &new->end6))
1755                             ret_err(gen_err);
1756                         }
1757 -#endif
1758                       else 
1759                         ret_err(gen_err);
1760  
1761 @@ -2369,7 +2349,6 @@ static int one_opt(int option, char *arg
1762             new->addr.in.sin_len = sizeof(new->addr.in);
1763  #endif
1764           }
1765 -#ifdef HAVE_IPV6
1766         else if (arg && inet_pton(AF_INET6, arg, &new->addr.in6.sin6_addr) > 0)
1767           {
1768             new->addr.sa.sa_family = AF_INET6;
1769 @@ -2380,7 +2359,6 @@ static int one_opt(int option, char *arg
1770             new->addr.in6.sin6_len = sizeof(new->addr.in6);
1771  #endif
1772           }
1773 -#endif
1774         else
1775           ret_err(gen_err);
1776  
1777 @@ -2493,9 +2471,7 @@ static int one_opt(int option, char *arg
1778         int size;
1779         struct server *serv;
1780         struct in_addr addr4;
1781 -#ifdef HAVE_IPV6
1782         struct in6_addr addr6;
1783 -#endif
1784   
1785         unhide_metas(arg);
1786         if (!arg || !(comma=split(arg)) || !(string = split_chr(arg, '/')) || !atoi_check(string, &size))
1787 @@ -2507,10 +2483,8 @@ static int one_opt(int option, char *arg
1788             if (!serv)
1789               ret_err(_("bad prefix"));
1790           }
1791 -#ifdef HAVE_IPV6
1792         else if (inet_pton(AF_INET6, arg, &addr6))
1793           serv = add_rev6(&addr6, size);
1794 -#endif
1795         else
1796           ret_err(gen_err);
1797   
1798 @@ -3863,10 +3837,8 @@ err:
1799           {
1800             if (strcmp(arg, "4") == 0)
1801               new->family = AF_INET;
1802 -#ifdef HAVE_IPV6
1803             else if (strcmp(arg, "6") == 0)
1804               new->family = AF_INET6;
1805 -#endif
1806             else
1807               ret_err(gen_err);
1808           } 
1809 @@ -4156,10 +4128,8 @@ err:
1810               new->ttl = atoi(arg);
1811             else if (inet_pton(AF_INET, arg, &addr))
1812               new->addr = addr.addr.addr4;
1813 -#ifdef HAVE_IPV6
1814             else if (inet_pton(AF_INET6, arg, &addr))
1815               new->addr6 = addr.addr.addr6;
1816 -#endif
1817             else
1818               {
1819                 int nomem;
1820 @@ -4866,10 +4836,8 @@ void read_opts(int argc, char **argv, ch
1821           {
1822             if (tmp->source_addr.sa.sa_family == AF_INET)
1823               tmp->source_addr.in.sin_port = htons(daemon->query_port);
1824 -#ifdef HAVE_IPV6
1825             else if (tmp->source_addr.sa.sa_family == AF_INET6)
1826               tmp->source_addr.in6.sin6_port = htons(daemon->query_port);
1827 -#endif 
1828           }
1829      } 
1830    
1831 @@ -4930,10 +4898,8 @@ void read_opts(int argc, char **argv, ch
1832        for(tmp = daemon->if_addrs; tmp; tmp = tmp->next)
1833         if (tmp->addr.sa.sa_family == AF_INET)
1834           tmp->addr.in.sin_port = htons(daemon->port);
1835 -#ifdef HAVE_IPV6
1836         else if (tmp->addr.sa.sa_family == AF_INET6)
1837           tmp->addr.in6.sin6_port = htons(daemon->port);
1838 -#endif /* IPv6 */
1839      }
1840         
1841    /* create default, if not specified */
1842 --- a/src/rfc1035.c
1843 +++ b/src/rfc1035.c
1844 @@ -198,7 +198,6 @@ int in_arpa_name_2_addr(char *namein, st
1845  
1846        return F_IPV4;
1847      }
1848 -#ifdef HAVE_IPV6
1849    else if (hostname_isequal(penchunk, "ip6") && 
1850            (hostname_isequal(lastchunk, "int") || hostname_isequal(lastchunk, "arpa")))
1851      {
1852 @@ -243,7 +242,6 @@ int in_arpa_name_2_addr(char *namein, st
1853           return F_IPV6;
1854         }
1855      }
1856 -#endif
1857    
1858    return 0;
1859  }
1860 @@ -426,7 +424,6 @@ int private_net(struct in_addr addr, int
1861      ((ip_addr & 0xFFFFFFFF) == 0xFFFFFFFF)  /* 255.255.255.255/32 (broadcast)*/ ;
1862  }
1863  
1864 -#ifdef HAVE_IPV6
1865  static int private_net6(struct in6_addr *a)
1866  {
1867    return 
1868 @@ -436,8 +433,6 @@ static int private_net6(struct in6_addr
1869      ((unsigned char *)a)[0] == 0xfd ||   /* RFC 6303 4.4 */
1870      ((u32 *)a)[0] == htonl(0x20010db8); /* RFC 6303 4.6 */
1871  }
1872 -#endif
1873 -
1874  
1875  static unsigned char *do_doctor(unsigned char *p, int count, struct dns_header *header, size_t qlen, char *name, int *doctored)
1876  {
1877 @@ -738,13 +733,11 @@ int extract_addresses(struct dns_header
1878               addrlen = INADDRSZ;
1879               flags |= F_IPV4;
1880             }
1881 -#ifdef HAVE_IPV6
1882           else if (qtype == T_AAAA)
1883             {
1884               addrlen = IN6ADDRSZ;
1885               flags |= F_IPV6;
1886             }
1887 -#endif
1888           else 
1889             continue;
1890             
1891 @@ -818,7 +811,6 @@ int extract_addresses(struct dns_header
1892                               private_net(addr.addr.addr4, !option_bool(OPT_LOCAL_REBIND)))
1893                             return 1;
1894                           
1895 -#ifdef HAVE_IPV6
1896                           if ((flags & F_IPV6) &&
1897                               IN6_IS_ADDR_V4MAPPED(&addr.addr.addr6))
1898                             {
1899 @@ -827,7 +819,6 @@ int extract_addresses(struct dns_header
1900                               if (private_net(v4, !option_bool(OPT_LOCAL_REBIND)))
1901                                 return 1;
1902                             }
1903 -#endif
1904                         }
1905                       
1906  #ifdef HAVE_IPSET
1907 @@ -966,7 +957,6 @@ size_t setup_reply(struct dns_header *he
1908           add_resource_record(header, NULL, NULL, sizeof(struct dns_header), &p, ttl, NULL, T_A, C_IN, "4", addrp);
1909         }
1910        
1911 -#ifdef HAVE_IPV6
1912        if (flags & F_IPV6)
1913         {
1914           SET_RCODE(header, NOERROR);
1915 @@ -974,7 +964,6 @@ size_t setup_reply(struct dns_header *he
1916           header->hb3 |= HB3_AA;
1917           add_resource_record(header, NULL, NULL, sizeof(struct dns_header), &p, ttl, NULL, T_AAAA, C_IN, "6", addrp);
1918         }
1919 -#endif
1920      }
1921    else /* nowhere to forward to */
1922      {
1923 @@ -1164,14 +1153,12 @@ int add_resource_record(struct dns_heade
1924    for (; *format; format++)
1925      switch (*format)
1926        {
1927 -#ifdef HAVE_IPV6
1928        case '6':
1929          CHECK_LIMIT(IN6ADDRSZ);
1930         sval = va_arg(ap, char *); 
1931         memcpy(p, sval, IN6ADDRSZ);
1932         p += IN6ADDRSZ;
1933         break;
1934 -#endif
1935         
1936        case '4':
1937          CHECK_LIMIT(INADDRSZ);
1938 @@ -1413,7 +1400,6 @@ size_t answer_request(struct dns_header
1939                       while (intr->next && strcmp(intr->intr, intr->next->intr) == 0)
1940                         intr = intr->next;
1941                   }
1942 -#ifdef HAVE_IPV6
1943               else if (is_arpa == F_IPV6)
1944                 for (intr = daemon->int_names; intr; intr = intr->next)
1945                   {
1946 @@ -1429,7 +1415,6 @@ size_t answer_request(struct dns_header
1947                       while (intr->next && strcmp(intr->intr, intr->next->intr) == 0)
1948                         intr = intr->next;
1949                   }
1950 -#endif
1951               
1952               if (intr)
1953                 {
1954 @@ -1521,9 +1506,7 @@ size_t answer_request(struct dns_header
1955                     }
1956                 }
1957               else if (option_bool(OPT_BOGUSPRIV) && (
1958 -#ifdef HAVE_IPV6
1959                        (is_arpa == F_IPV6 && private_net6(&addr.addr.addr6)) ||
1960 -#endif
1961                        (is_arpa == F_IPV4 && private_net(addr.addr.addr4, 1))))
1962                 {
1963                   struct server *serv;
1964 @@ -1564,16 +1547,9 @@ size_t answer_request(struct dns_header
1965           
1966           for (flag = F_IPV4; flag; flag = (flag == F_IPV4) ? F_IPV6 : 0)
1967             {
1968 -             unsigned short type = T_A;
1969 +             unsigned short type = (flag == F_IPV6) ? T_AAAA : T_A;
1970               struct interface_name *intr;
1971  
1972 -             if (flag == F_IPV6)
1973 -#ifdef HAVE_IPV6
1974 -               type = T_AAAA;
1975 -#else
1976 -               break;
1977 -#endif
1978 -             
1979               if (qtype != type && qtype != T_ANY)
1980                 continue;
1981               
1982 @@ -1596,31 +1572,26 @@ size_t answer_request(struct dns_header
1983                     for (intr = daemon->int_names; intr; intr = intr->next)
1984                       if (hostname_isequal(name, intr->name))
1985                         for (addrlist = intr->addr; addrlist; addrlist = addrlist->next)
1986 -#ifdef HAVE_IPV6
1987 -                         if (!(addrlist->flags & ADDRLIST_IPV6))
1988 -#endif
1989 -                           if (is_same_net(*((struct in_addr *)&addrlist->addr), local_addr, local_netmask))
1990 -                             {
1991 -                               localise = 1;
1992 -                               break;
1993 -                             }
1994 +                         if (!(addrlist->flags & ADDRLIST_IPV6) && 
1995 +                             is_same_net(*((struct in_addr *)&addrlist->addr), local_addr, local_netmask))
1996 +                           {
1997 +                             localise = 1;
1998 +                             break;
1999 +                           }
2000                   
2001                   for (intr = daemon->int_names; intr; intr = intr->next)
2002                     if (hostname_isequal(name, intr->name))
2003                       {
2004                         for (addrlist = intr->addr; addrlist; addrlist = addrlist->next)
2005 -#ifdef HAVE_IPV6
2006                           if (((addrlist->flags & ADDRLIST_IPV6) ? T_AAAA : T_A) == type)
2007 -#endif
2008                             {
2009                               if (localise && 
2010                                   !is_same_net(*((struct in_addr *)&addrlist->addr), local_addr, local_netmask))
2011                                 continue;
2012  
2013 -#ifdef HAVE_IPV6
2014                               if (addrlist->flags & ADDRLIST_REVONLY)
2015                                 continue;
2016 -#endif 
2017 +
2018                               ans = 1;  
2019                               sec_data = 0;
2020                               if (!dryrun)
2021 @@ -1904,11 +1875,8 @@ size_t answer_request(struct dns_header
2022         crecp = NULL;
2023         while ((crecp = cache_find_by_name(crecp, rec->target, now, F_IPV4 | F_IPV6)))
2024           {
2025 -#ifdef HAVE_IPV6
2026             int type =  crecp->flags & F_IPV4 ? T_A : T_AAAA;
2027 -#else
2028 -           int type = T_A;
2029 -#endif
2030 +
2031             if (crecp->flags & F_NEG)
2032               continue;
2033  
2034 --- a/src/tables.c
2035 +++ b/src/tables.c
2036 @@ -108,7 +108,7 @@ int add_to_ipset(const char *setname, co
2037      my_syslog(LOG_INFO, _("info: table created"));
2038   
2039    bzero(&addr, sizeof(addr));
2040 -#ifdef HAVE_IPV6
2041 +
2042    if (flags & F_IPV6) 
2043      {
2044        addr.pfra_af = AF_INET6;
2045 @@ -116,7 +116,6 @@ int add_to_ipset(const char *setname, co
2046        memcpy(&(addr.pfra_ip6addr), &(ipaddr->addr), sizeof(struct in6_addr));
2047      } 
2048    else 
2049 -#endif
2050      {
2051        addr.pfra_af = AF_INET;
2052        addr.pfra_net = 0x20;
2053 --- a/src/tftp.c
2054 +++ b/src/tftp.c
2055 @@ -60,17 +60,11 @@ void tftp_request(struct listener *liste
2056    char *prefix = daemon->tftp_prefix;
2057    struct tftp_prefix *pref;
2058    struct all_addr addra;
2059 -#ifdef HAVE_IPV6
2060    /* Can always get recvd interface for IPv6 */
2061    int check_dest = !option_bool(OPT_NOWILD) || listen->family == AF_INET6;
2062 -#else
2063 -  int check_dest = !option_bool(OPT_NOWILD);
2064 -#endif
2065    union {
2066      struct cmsghdr align; /* this ensures alignment */
2067 -#ifdef HAVE_IPV6
2068      char control6[CMSG_SPACE(sizeof(struct in6_pktinfo))];
2069 -#endif
2070  #if defined(HAVE_LINUX_NETWORK)
2071      char control[CMSG_SPACE(sizeof(struct in_pktinfo))];
2072  #elif defined(HAVE_SOLARIS_NETWORK)
2073 @@ -174,7 +168,6 @@ void tftp_request(struct listener *liste
2074           
2075  #endif
2076  
2077 -#ifdef HAVE_IPV6
2078        if (listen->family == AF_INET6)
2079          {
2080            for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
2081 @@ -190,7 +183,6 @@ void tftp_request(struct listener *liste
2082                  if_index = p.p->ipi6_ifindex;
2083                }
2084          }
2085 -#endif
2086        
2087        if (!indextoname(listen->tftpfd, if_index, namebuff))
2088         return;
2089 @@ -199,10 +191,8 @@ void tftp_request(struct listener *liste
2090        
2091        addra.addr.addr4 = addr.in.sin_addr;
2092  
2093 -#ifdef HAVE_IPV6
2094        if (listen->family == AF_INET6)
2095         addra.addr.addr6 = addr.in6.sin6_addr;
2096 -#endif
2097  
2098        if (daemon->tftp_interfaces)
2099         {
2100 @@ -262,7 +252,6 @@ void tftp_request(struct listener *liste
2101        addr.in.sin_len = sizeof(addr.in);
2102  #endif
2103      }
2104 -#ifdef HAVE_IPV6
2105    else
2106      {
2107        addr.in6.sin6_port = htons(port);
2108 @@ -272,7 +261,6 @@ void tftp_request(struct listener *liste
2109        addr.in6.sin6_len = sizeof(addr.in6);
2110  #endif
2111      }
2112 -#endif
2113  
2114    if (!(transfer = whine_malloc(sizeof(struct tftp_transfer))))
2115      return;
2116 @@ -310,10 +298,9 @@ void tftp_request(struct listener *liste
2117                 { 
2118                   if (listen->family == AF_INET)
2119                     addr.in.sin_port = htons(port);
2120 -#ifdef HAVE_IPV6
2121                   else
2122 -                    addr.in6.sin6_port = htons(port);
2123 -#endif
2124 +                   addr.in6.sin6_port = htons(port);
2125 +                 
2126                   continue;
2127                 }
2128               my_syslog(MS_TFTP | LOG_ERR, _("unable to get free port for TFTP"));
2129 --- a/src/util.c
2130 +++ b/src/util.c
2131 @@ -320,13 +320,12 @@ int sockaddr_isequal(union mysockaddr *s
2132           s1->in.sin_port == s2->in.sin_port &&
2133           s1->in.sin_addr.s_addr == s2->in.sin_addr.s_addr)
2134         return 1;
2135 -#ifdef HAVE_IPV6      
2136 +      
2137        if (s1->sa.sa_family == AF_INET6 &&
2138           s1->in6.sin6_port == s2->in6.sin6_port &&
2139           s1->in6.sin6_scope_id == s2->in6.sin6_scope_id &&
2140           IN6_ARE_ADDR_EQUAL(&s1->in6.sin6_addr, &s2->in6.sin6_addr))
2141         return 1;
2142 -#endif
2143      }
2144    return 0;
2145  }
2146 @@ -336,11 +335,9 @@ int sa_len(union mysockaddr *addr)
2147  #ifdef HAVE_SOCKADDR_SA_LEN
2148    return addr->sa.sa_len;
2149  #else
2150 -#ifdef HAVE_IPV6
2151    if (addr->sa.sa_family == AF_INET6)
2152      return sizeof(addr->in6);
2153    else
2154 -#endif
2155      return sizeof(addr->in); 
2156  #endif
2157  }
2158 @@ -437,7 +434,6 @@ int is_same_net(struct in_addr a, struct
2159    return (a.s_addr & mask.s_addr) == (b.s_addr & mask.s_addr);
2160  } 
2161  
2162 -#ifdef HAVE_IPV6
2163  int is_same_net6(struct in6_addr *a, struct in6_addr *b, int prefixlen)
2164  {
2165    int pfbytes = prefixlen >> 3;
2166 @@ -476,15 +472,12 @@ void setaddr6part(struct in6_addr *addr,
2167      }
2168  }
2169  
2170 -#endif
2171
2172  
2173  /* returns port number from address */
2174  int prettyprint_addr(union mysockaddr *addr, char *buf)
2175  {
2176    int port = 0;
2177    
2178 -#ifdef HAVE_IPV6
2179    if (addr->sa.sa_family == AF_INET)
2180      {
2181        inet_ntop(AF_INET, &addr->in.sin_addr, buf, ADDRSTRLEN);
2182 @@ -503,10 +496,6 @@ int prettyprint_addr(union mysockaddr *a
2183         }
2184        port = ntohs(addr->in6.sin6_port);
2185      }
2186 -#else
2187 -  strcpy(buf, inet_ntoa(addr->in.sin_addr));
2188 -  port = ntohs(addr->in.sin_port); 
2189 -#endif
2190    
2191    return port;
2192  }