Merge branch 'master' into dnssec

Conflicts:
	src/dnsmasq.h
	src/forward.c
	src/option.c
diff --git a/.gitignore b/.gitignore
index f357b6e..fcdbcbd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@
 src/*.mo
 src/dnsmasq.pot
 src/dnsmasq
+src/dnsmasq_baseline
 src/.configured
 contrib/wrt/dhcp_lease_time
 contrib/wrt/dhcp_release
diff --git a/CHANGELOG b/CHANGELOG
index 78b9316..77acde2 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -90,8 +90,6 @@
             smallest valid dhcp-range is sent. Thanks to Uwe Schindler 
 	    for suggesting this.
 
-	    Add --force-fast-ra option. Another thanks to Uwe Schindler.  
-
 	    Make --listen-address higher priority than --except-interface
 	    in all circumstances. Thanks to Thomas Hood for the bugreport.
 
@@ -101,7 +99,60 @@
 	    (provide TFTP to the same interfaces we provide DHCP to) 
 	    is retained. Thanks to Lonnie Abelbeck for the suggestion.
 
+	    Add --dhcp-relay config option. Many thanks to vtsl.net
+	    for sponsoring this development.
 
+	    Fix crash with empty tag: in --dhcp-range. Thanks to
+	    Kaspar Schleiser for the bug report.
+
+	    Add "baseline" and "bloatcheck" makefile targets, for 
+	    revealing size changes during development. Thanks to
+	    Vladislav Grishenko for the patch. 
+
+	    Cope with DHCPv6 clients which send REQUESTs without
+	    address options - treat them as SOLICIT with rapid commit.
+
+	    Support identification of clients by MAC address in
+	    DHCPv6. When using a relay, the relay must support RFC
+	    6939 for this to work. It always works for directly
+	    connected clients. Thanks to Vladislav Grishenko
+	    for prompting this feature.
+	    
+	    Remove the rule for constructed DHCP ranges that the local
+	    address must be either the first or last address in the
+	    range. This was originally to avoid SLAAC addresses, but
+	    we now explicitly autoconfig and privacy addresses instead.  
+
+	    Update Polish translation. Thanks to Jan Psota.
+
+	    Fix problem in DHCPv6 vendorclass/userclass matching
+	    code. Thanks to Tanguy Bouzeloc for the patch.
+
+ 	    Update Spanish transalation. Thanks to Vicente Soriano.
+
+	    Add --ra-param option. Thanks to Vladislav Grishenko for
+	    inspiration on this.
+
+	    Add --add-subnet configuration, to tell upstream DNS
+	    servers where the original client is. Thanks to DNSthingy
+	    for sponsoring this feature.
+
+	    Add --quiet-dhcp, --quiet-dhcp6 and --quiet-ra. Thanks to
+	    Kevin Darbyshire-Bryant for the initial patch.
+
+	    Allow A/AAAA records created by --interface-name to be the
+	    target of --cname. Thanks to Hadmut Danisch for the
+	    suggestion. 
+
+	    Avoid treating a --dhcp-host which has an IPv6 address
+	    as eligable for use with DHCPv4 on the grounds that it has
+	    no address, and vice-versa. Thanks to Yury Konovalov for
+	    spotting the problem.
+
+	    Do a better job caching dangling CNAMEs. Thanks to Yves
+	    Dorfsman for spotting the problem.
+
+ 
 version 2.66
             Add the ability to act as an authoritative DNS
             server. Dnsmasq can now answer queries from the wider 'net
diff --git a/Makefile b/Makefile
index ab9c179..61c22c9 100644
--- a/Makefile
+++ b/Makefile
@@ -80,10 +80,14 @@
  build_libs="$(dbus_libs) $(idn_libs) $(ct_libs) $(lua_libs) $(sunos_libs) $(ssl_libs)" \
  -f $(top)/Makefile dnsmasq 
 
-clean :
-	rm -f *~ $(BUILDDIR)/*.mo contrib/*/*~ */*~ $(BUILDDIR)/*.pot 
+mostly_clean :
+	rm -f $(BUILDDIR)/*.mo $(BUILDDIR)/*.pot 
 	rm -f $(BUILDDIR)/.configured $(BUILDDIR)/*.o $(BUILDDIR)/dnsmasq.a $(BUILDDIR)/dnsmasq 
-	rm -rf core */core
+
+clean : mostly_clean
+	rm -f $(BUILDDIR)/dnsmasq_baseline
+	rm -f core */core
+	rm -f *~ contrib/*/*~ */*~
 
 install : all install-common
 
@@ -113,9 +117,24 @@
 		echo -n msgmerge $(PO)/$$f && $(MSGMERGE) --no-wrap -U $(PO)/$$f $(BUILDDIR)/dnsmasq.pot; \
 	done
 
+# Cannonicalise .po file.
+%.po : 
+	@cd $(BUILDDIR) && $(MAKE) -f $(top)/Makefile dnsmasq.pot
+	mv $(PO)/$*.po $(PO)/$*.po.orig && $(MSGMERGE) --no-wrap $(PO)/$*.po.orig $(BUILDDIR)/dnsmasq.pot >$(PO)/$*.po; 
+
 $(BUILDDIR):
 	mkdir -p $(BUILDDIR)
 
+# rules below are helpers for size tracking
+
+baseline : mostly_clean all
+	@cd $(BUILDDIR) && \
+	   mv dnsmasq dnsmasq_baseline
+
+bloatcheck : $(BUILDDIR)/dnsmasq_baseline mostly_clean all
+	@cd $(BUILDDIR) && \
+           $(top)/bld/bloat-o-meter dnsmasq_baseline dnsmasq; \
+           size dnsmasq_baseline dnsmasq
 
 # rules below are targets in recusive makes with cwd=$(BUILDDIR)
 
@@ -129,7 +148,7 @@
 .c.o:
 	$(CC) $(CFLAGS) $(COPTS) $(i18n) $(build_cflags) $(RPM_OPT_FLAGS) -c $<	
 
-dnsmasq : .configured $(hdrs) $(objs) 
+dnsmasq : .configured $(hdrs) $(objs)
 	$(CC) $(LDFLAGS) -o $@ $(objs) $(build_libs) $(LIBS) 
 
 dnsmasq.pot : $(objs:.o=.c) $(hdrs)
@@ -138,5 +157,4 @@
 %.mo : $(top)/$(PO)/%.po dnsmasq.pot
 	$(MSGMERGE) -o - $(top)/$(PO)/$*.po dnsmasq.pot | $(MSGFMT) -o $*.mo -
 
-
-.PHONY : all clean install install-common all-i18n install-i18n merge 
+.PHONY : all clean mostly_clean install install-common all-i18n install-i18n merge baseline bloatcheck
diff --git a/bld/bloat-o-meter b/bld/bloat-o-meter
new file mode 100755
index 0000000..6db2a5e
--- /dev/null
+++ b/bld/bloat-o-meter
@@ -0,0 +1,130 @@
+#!/usr/bin/env python
+#
+# Copyright 2004 Matt Mackall <mpm@selenic.com>
+#
+# Inspired by perl Bloat-O-Meter (c) 1997 by Andi Kleen
+#
+# This software may be used and distributed according to the terms
+# of the GNU General Public License, incorporated herein by reference.
+
+import sys, os#, re
+
+def usage():
+    sys.stderr.write("usage: %s [-t] file1 file2\n" % sys.argv[0])
+    sys.exit(-1)
+
+f1, f2 = (None, None)
+flag_timing, dashes = (False, False)
+
+for f in sys.argv[1:]:
+    if f.startswith("-"):
+        if f == "--": # sym_args
+            dashes = True
+            break
+        if f == "-t": # timings
+            flag_timing = True
+    else:
+        if not os.path.exists(f):
+            sys.stderr.write("Error: file '%s' does not exist\n" % f)
+            usage()
+        if f1 is None:
+            f1 = f
+        elif f2 is None:
+            f2 = f
+if flag_timing:
+    import time
+if f1 is None or f2 is None:
+    usage()
+
+sym_args = " ".join(sys.argv[3 + flag_timing + dashes:])
+def getsizes(file):
+    sym, alias, lut = {}, {}, {}
+    for l in os.popen("readelf -W -s %s %s" % (sym_args, file)).readlines():
+        l = l.strip()
+        if not (len(l) and l[0].isdigit() and len(l.split()) == 8):
+            continue
+        num, value, size, typ, bind, vis, ndx, name = l.split()
+        if ndx == "UND": continue # skip undefined
+        if typ in ["SECTION", "FILES"]: continue # skip sections and files
+        if "." in name: name = "static." + name.split(".")[0]
+        value = int(value, 16)
+        size = int(size, 16) if size.startswith('0x') else int(size)
+        if vis != "DEFAULT" and bind != "GLOBAL": # see if it is an alias
+            alias[(value, size)] = {"name" : name}
+        else:
+            sym[name] = {"addr" : value, "size":  size}
+            lut[(value, size)] = 0
+    for addr, sz in iter(alias.keys()):
+        # If the non-GLOBAL sym has an implementation elsewhere then
+        # it's an alias, disregard it.
+        if not (addr, sz) in lut:
+            # If this non-GLOBAL sym does not have an implementation at
+            # another address, then treat it as a normal symbol.
+            sym[alias[(addr, sz)]["name"]] = {"addr" : addr, "size": sz}
+    for l in os.popen("readelf -W -S " + file).readlines():
+        x = l.split()
+        if len(x)<6: continue
+        # Should take these into account too!
+        #if x[1] not in [".text", ".rodata", ".symtab", ".strtab"]: continue
+        if x[1] not in [".rodata"]: continue
+        sym[x[1]] = {"addr" : int(x[3], 16), "size" : int(x[5], 16)}
+    return sym
+
+if flag_timing:
+    start_t1 = int(time.time() * 1e9)
+old = getsizes(f1)
+if flag_timing:
+    end_t1 = int(time.time() * 1e9)
+    start_t2 = int(time.time() * 1e9)
+new = getsizes(f2)
+if flag_timing:
+    end_t2 = int(time.time() * 1e9)
+    start_t3 = int(time.time() * 1e9)
+grow, shrink, add, remove, up, down = 0, 0, 0, 0, 0, 0
+delta, common = [], {}
+
+for name in iter(old.keys()):
+    if name in new:
+        common[name] = 1
+
+for name in old:
+    if name not in common:
+        remove += 1
+        sz = old[name]["size"]
+        down += sz
+        delta.append((-sz, name))
+
+for name in new:
+    if name not in common:
+        add += 1
+        sz = new[name]["size"]
+        up += sz
+        delta.append((sz, name))
+
+for name in common:
+        d = new[name].get("size", 0) - old[name].get("size", 0)
+        if d>0: grow, up = grow+1, up+d
+        elif d<0: shrink, down = shrink+1, down-d
+        else:
+            continue
+        delta.append((d, name))
+
+delta.sort()
+delta.reverse()
+if flag_timing:
+    end_t3 = int(time.time() * 1e9)
+
+print("%-48s %7s %7s %+7s" % ("function", "old", "new", "delta"))
+for d, n in delta:
+    if d:
+        old_sz = old.get(n, {}).get("size", "-")
+        new_sz = new.get(n, {}).get("size", "-")
+        print("%-48s %7s %7s %+7d" % (n, old_sz, new_sz, d))
+print("-"*78)
+total="(add/remove: %s/%s grow/shrink: %s/%s up/down: %s/%s)%%sTotal: %s bytes"\
+    % (add, remove, grow, shrink, up, -down, up-down)
+print(total % (" "*(80-len(total))))
+if flag_timing:
+    print("\n%d/%d; %d Parse origin/new; processing nsecs" %
+        (end_t1-start_t1, end_t2-start_t2, end_t3-start_t3))
+    print("total nsecs: %d" % (end_t3-start_t1))
diff --git a/bld/get-version b/bld/get-version
index 15e5051..c246a3c 100755
--- a/bld/get-version
+++ b/bld/get-version
@@ -12,7 +12,7 @@
 # first. This favours, eg v2.63 over 2.63rc6.
 
 if which git >/dev/null 2>&1 && [ -d $1/.git ]; then
-     cd $1; git describe
+     cd $1; git describe | sed 's/^v//'
 elif grep '\$Format:%d\$' $1/VERSION >/dev/null 2>&1; then
 # unsubstituted VERSION, but no git available.
     echo UNKNOWN
diff --git a/contrib/mactable/macscript b/contrib/mactable/macscript
new file mode 100755
index 0000000..44a4477
--- /dev/null
+++ b/contrib/mactable/macscript
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+STATUS_FILE="/tmp/dnsmasq-ip-mac.status"
+
+# Script for dnsmasq lease-change hook.
+# Maintains the above file with a IP address/MAC address pairs,
+# one lease per line. Works with IPv4 and IPv6 leases, file is
+# atomically updated, so no races for users of the data.
+
+action="$1"
+mac="$2"   # IPv4
+ip="$3"
+
+# ensure it always exists.
+
+if [ ! -f "$STATUS_FILE" ]; then
+  touch "$STATUS_FILE"
+fi
+
+if [  -n "$DNSMASQ_IAID" ]; then
+    mac="$DNSMASQ_MAC"   # IPv6
+fi
+
+# worry about an add or old action when the MAC address is not known:
+# leave any old one in place in that case.
+
+if [ "$action" = "add" -o "$action" = "old" -o "$action" = "del" ]; then
+  if [ -n "$mac" -o "$action" = "del" ]; then
+    sed "/^${ip//./\.} / d" "$STATUS_FILE" > "$STATUS_FILE".new
+  
+    if [ "$action" = "add" -o "$action" = "old" ]; then
+       echo "$ip $mac" >> "$STATUS_FILE".new
+    fi
+    mv  "$STATUS_FILE".new "$STATUS_FILE" # atomic update.
+  fi
+fi
diff --git a/debian/changelog b/debian/changelog
index f0ddd66..20f0a7d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,7 @@
 dnsmasq (2.67-1) unstable; urgency=low
 
    * New upstream.
+   * Update resolvconf script. (closes: #720732)
 
  -- Simon Kelley <simon@thekelleys.org.uk>  Wed, 4 Aug 2013 14:53:22 +0000
 
diff --git a/debian/control b/debian/control
index 3f673a3..f25bbdb 100644
--- a/debian/control
+++ b/debian/control
@@ -7,7 +7,7 @@
 
 Package: dnsmasq
 Architecture: all
-Depends: netbase, dnsmasq-base(>= ${source:Version})
+Depends: netbase, dnsmasq-base(>= ${binary:Version})
 Suggests: resolvconf
 Conflicts: resolvconf (<<1.15)
 Description: Small caching DNS proxy and DHCP/TFTP server
diff --git a/debian/readme b/debian/readme
index cb5f7c9..73705d8 100644
--- a/debian/readme
+++ b/debian/readme
@@ -64,7 +64,9 @@
       noi18n      : omit translations and internationalisation support.
       noidn       : omit international domain name support, must be
                     combined with noi18n to be effective.
-      
+      gitversion  : set the version of the produced packages from the
+                    git-derived versioning information on the source,
+                    rather the the debian changelog. 
 
 (9) Dnsmasq comes as three packages - dnsmasq-utils, dnsmasq-base and
     dnsmasq. Dnsmasq-base provides the dnsmasq executable and
diff --git a/debian/resolvconf b/debian/resolvconf
index 80f3a64..c15cb29 100644
--- a/debian/resolvconf
+++ b/debian/resolvconf
@@ -16,8 +16,7 @@
 RUN_DIR="/var/run/dnsmasq"
 RSLVRLIST_FILE="${RUN_DIR}/resolv.conf"
 TMP_FILE="${RSLVRLIST_FILE}_new.$$"
-MY_RECORD_NAME="lo.dnsmasq"
-DNSCRYPT_RECORD_NAME="lo.dnscrypt"
+MY_NAME_FOR_RESOLVCONF="dnsmasq"
 
 [ -x /usr/sbin/dnsmasq ] || exit 0
 [ -x /lib/resolvconf/list-records ] || exit 1
@@ -46,14 +45,14 @@
 fi
 
 RSLVCNFFILES=""
-for F in $(/lib/resolvconf/list-records --after "$MY_RECORD_NAME") ; do
+for F in $(/lib/resolvconf/list-records --after "lo.$MY_NAME_FOR_RESOLVCONF") ; do
 	case "$F" in
-	  "$MY_RECORD_NAME")
-		# Omit
+	    "lo.$MY_NAME_FOR_RESOLVCONF")
+		# Omit own record	 
 		;;
-	  "$DNSCRYPT_RECORD_NAME")
-		# Dnscrypt, I only have eyes for you
-		RSLVCNFFILES="$DNSCRYPT_RECORD_NAME"
+	    lo.*)
+		# Include no more records after one for a local nameserver
+		RSLVCNFFILES="${RSLVCNFFILES:+$RSLVCNFFILES }$F"
 		break
 		;;
 	  *)
diff --git a/debian/rules b/debian/rules
index e658683..7b9f4da 100755
--- a/debian/rules
+++ b/debian/rules
@@ -23,6 +23,11 @@
 
 DEB_BUILD_ARCH_OS := $(shell dpkg-architecture -qDEB_BUILD_ARCH_OS)
 
+# Force package version based on git tags.
+ifneq (,$(filter gitversion,$(DEB_BUILD_OPTIONS)))
+     PACKAGE_VERSION = $(shell bld/get-version `pwd` |  sed 's/test/~&/; s/[a-z]/~&/;  s/-/./g; s/$$/-1/; s/^/-v/';)
+endif
+
 ifeq (,$(filter nodbus,$(DEB_BUILD_OPTIONS)))
      COPTS += -DHAVE_DBUS
 endif
@@ -103,7 +108,7 @@
 	install -m 644 debian/insserv debian/daemon/etc/insserv.conf.d/dnsmasq
 	ln -s $(package) debian/daemon/usr/share/doc/dnsmasq
 	cd debian/daemon && find . -type f ! -regex '.*DEBIAN/.*' -printf '%P\0' | xargs -r0 md5sum > DEBIAN/md5sums	
-	dpkg-gencontrol -pdnsmasq -Pdebian/daemon
+	dpkg-gencontrol $(PACKAGE_VERSION) -T -pdnsmasq -Pdebian/daemon
 	chown -R root.root debian/daemon
 	chmod -R g-ws debian/daemon
 	dpkg --build debian/daemon ..
@@ -150,8 +155,8 @@
 	strip -R .note -R .comment debian/base/usr/sbin/dnsmasq
 endif
 	cd debian/base && find . -type f ! -regex '.*DEBIAN/.*' -printf '%P\0' | xargs -r0 md5sum > DEBIAN/md5sums
-	dpkg-shlibdeps debian/base/usr/sbin/dnsmasq
-	dpkg-gencontrol -pdnsmasq-base -Pdebian/base
+	dpkg-shlibdeps --warnings=1 debian/base/usr/sbin/dnsmasq
+	dpkg-gencontrol $(PACKAGE_VERSION) -pdnsmasq-base -Pdebian/base
 	chown -R root.root debian/base
 	chmod -R g-ws debian/base 
 	dpkg --build debian/base ..
@@ -178,7 +183,7 @@
 endif	
 	cd debian/utils && find . -type f ! -regex '.*DEBIAN/.*' -printf '%P\0' | xargs -r0 md5sum > DEBIAN/md5sums
 	dpkg-shlibdeps -Tdebian/utils-substvars debian/utils/usr/bin/dhcp_release debian/utils/usr/bin/dhcp_lease_time
-	dpkg-gencontrol -Tdebian/utils-substvars -pdnsmasq-utils -Pdebian/utils
+	dpkg-gencontrol $(PACKAGE_VERSION) -Tdebian/utils-substvars -pdnsmasq-utils -Pdebian/utils
 	chown -R root.root debian/utils
 	chmod -R g-ws debian/utils 
 	dpkg --build debian/utils ..
diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
index 4357d99..123c98f 100644
--- a/man/dnsmasq.8
+++ b/man/dnsmasq.8
@@ -497,7 +497,7 @@
 Return a CNAME record which indicates that <cname> is really
 <target>. There are significant limitations on the target; it must be a
 DNS name which is known to dnsmasq from /etc/hosts (or additional
-hosts files), from DHCP or from another 
+hosts files), from DHCP, from --interface-name or from another 
 .B --cname.
 If the target does not satisfy this
 criteria, the whole cname is ignored. The cname must be unique, but it
@@ -543,7 +543,20 @@
 subnet as the dnsmasq server. Note that the mechanism used to achieve this (an EDNS0 option)
 is not yet standardised, so this should be considered
 experimental. Also note that exposing MAC addresses in this way may
-have security and privacy implications. 
+have security and privacy implications. The warning about caching
+given for --add-subnet applies to --add-mac too.
+.TP 
+.B --add-subnet[[=<IPv4 prefix length>],<IPv6 prefix length>]
+Add the subnet address of the requestor to the DNS queries which are
+forwarded upstream. The amount of the address forwarded depends on the
+prefix length parameter: 32 (128 for IPv6) forwards the whole address,
+zero forwards none of it but still marks the request so that no
+upstream nameserver will add client address information either. The
+default is zero for both IPv4 and IPv6. Note that upstream nameservers
+may be configured to return different results based on this
+information, but the dnsmasq cache does not take account. If a dnsmasq
+instance is configured such that different results may be encountered,
+caching should be disabled.
 .TP
 .B \-c, --cache-size=<cachesize>
 Set the size of dnsmasq's cache. The default is 150 names. Setting the cache size to zero disables caching.
@@ -652,24 +665,20 @@
 
 .B --dhcp-range=::1,::400,constructor:eth0
 
-will look for addresses of the form <network>::1 or <network>:400 on
+will look for addresses on
 eth0 and then create a range from <network>::1 to <network>::400. If
 the interface is assigned more than one network, then the
 corresponding ranges will be automatically created, and then
 deprecated and finally removed again as the address is deprecated and
 then deleted. The interface name may have a final "*" wildcard. Note
-that just any address on eth0 will not do: the non-prefix part must be
-equal either the start or end address given in the dhcp-range. This is
-to prevent prefixes becoming perpetual if the interface 
-gains a SLAAC address for the prefix when it is advertised by dnsmasq.
+that just any address on eth0 will not do: it must not be an
+autoconfigured or privacy address, or be deprecated.
 
 If a dhcp-range is only being used for stateless DHCP and/or SLAAC,
 then the address can be simply ::
 
 .B --dhcp-range=::,constructor:eth0
 
-This removes the condition above, and will pick up the prefix from any address on eth0 which is NOT 
-autoconfigured, slaac, temporary or deprecated.
 
 There is a variant of the constructor: syntax using the keyword
 .B constructor-noauth.
@@ -766,7 +775,8 @@
 subnets which don't need a pool of dynamically allocated addresses,
 use the "static" keyword in the dhcp-range declaration.
 
-It is allowed to use client identifiers rather than
+It is allowed to use client identifiers (called client
+DUID in IPv6-land rather than
 hardware addresses to identify hosts by prefixing with 'id:'. Thus: 
 .B --dhcp-host=id:01:02:03:04,..... 
 refers to the host with client identifier 01:02:03:04. It is also
@@ -781,11 +791,12 @@
 .B --dhcp-host=laptop,[::56]
 in which case they act as wildcards in constructed dhcp ranges, with
 the appropriate network part inserted. 
-Note that in IPv6 DHCP, the hardware address is not normally
-available, so a client must be identified by client-id (called client
-DUID in IPv6-land) or hostname. 
+Note that in IPv6 DHCP, the hardware address may not be
+available, though it normally is for direct-connected clients, or
+clients using DHCP relays which support RFC 6939.
 
-The special option id:* means "ignore any client-id 
+
+For DHCPv4, the  special option id:* means "ignore any client-id 
 and use MAC addresses only." This is useful when a client presents a client-id sometimes 
 but not others.
 
@@ -973,6 +984,38 @@
 options but can, rarely, confuse old or broken clients. This flag
 forces "simple and safe" behaviour to avoid problems in such a case.
 .TP
+.B --dhcp-relay=<local address>,<server address>[,<interface]
+Configure dnsmasq to do DHCP relay. The local address is an address
+allocated to an interface on the host running dnsmasq. All DHCP
+requests arriving on that interface will we relayed to a remote DHCP
+server at the server address. It is possible to relay from a single local
+address to multiple remote servers by using multiple dhcp-relay
+configs with the same local address and different server
+addresses. A server address must be an IP literal address, not a
+domain name. In the case of DHCPv6, the server address may be the
+ALL_SERVERS multicast address, ff05::1:3. In this case the interface
+must be given, not be wildcard, and is used to direct the multicast to the
+correct interface to reach the DHCP server. 
+
+Access control for DHCP clients has the same rules as for the DHCP
+server, see --interface, --except-interface, etc. The optional
+interface name in the dhcp-relay config has a different function: it
+controls on which interface DHCP replies from the server will be
+accepted. This is intended for configurations which have three
+interfaces: one being relayed from, a second connecting the DHCP
+server, and a third untrusted network, typically the wider
+internet. It avoids the possibility of spoof replies arriving via this
+third interface.
+
+It is allowed to have dnsmasq act as a DHCP server on one set of
+interfaces and relay from a disjoint set of interfaces. Note that
+whilst it is quite possible to write configurations which appear to
+act as a server and a relay on the same interface, this is not
+supported: the relay function will take precedence.
+
+Both DHCPv4 and DHCPv6 relay is supported. It's not possible to relay
+DHCPv4 to a DHCPv6 server or vice-versa.
+.TP
 .B \-U, --dhcp-vendorclass=set:<tag>,[enterprise:<IANA-enterprise number>,]<vendor-class>
 Map from a vendor-class string to a tag. Most DHCP clients provide a 
 "vendor class" which represents, in some sense, the type of host. This option 
@@ -1001,7 +1044,7 @@
 "accounts" than for hosts in the class "engineering".
 .TP
 .B \-4, --dhcp-mac=set:<tag>,<MAC address>
-(IPv4 only) Map from a MAC address to a tag. The MAC address may include
+Map from a MAC address to a tag. The MAC address may include
 wildcards. For example
 .B --dhcp-mac=set:3com,01:34:23:*:*:*
 will set the tag "3com" for any host whose MAC address matches the pattern.
@@ -1217,6 +1260,11 @@
 Extra logging for DHCP: log all the options sent to DHCP clients and
 the tags used to determine them.
 .TP
+.B --quiet-dhcp, --quiet-dhcp6, --quiet-ra
+Suppress logging of the routine operation of these protocols. Errors and
+problems will still be logged. --quiet-dhcp and quiet-dhcp6 are
+over-ridden by --log-dhcp.
+.TP
 .B \-l, --dhcp-leasefile=<path>
 Use the specified file to store DHCP lease information.
 .TP 
@@ -1307,7 +1355,7 @@
 DNSMASQ_IAID containing the IAID for the lease. If the lease is a
 temporary allocation, this is prefixed to 'T'.
 
-
+DNSMASQ_MAC containing the MAC address of the client, if known.
 
 Note that the supplied hostname, vendorclass and userclass data is
 only  supplied for
@@ -1495,11 +1543,19 @@
 as recursive DNS server. If provided, the DHCPv6 options dns-server and
 domain-search are used for RDNSS and DNSSL.
 .TP
-.B --force-fast-ra
-Normally, dnsmasq advertises a new IPv6 prefix frequently (every 10 seconds or so) for the first minute, and then
-drops back to sending "maintenance" advertisements every 10 minutes or so. This option forces dnsmasq to be always in 
-frequent RA mode. It's a bug workaround for mobile devices which go deaf to RAs during sleep and therefore 
-lose conectivity; with frequent RAs they recover in a reasonable time after wakeup.
+.B --ra-param=<interface>,[high|low],[[<ra-interval>],<router lifetime>]
+Set non-default values for router advertisements sent via an
+interface. The priority field for the router may be altered from the
+default of medium with eg
+.B --ra-param=eth0,high.
+The interval between router advertisements may be set (in seconds) with 
+.B --ra-param=eth0,60.
+The lifetime of the route may be changed or set to zero, which allows
+a router to advertise prefixes but not a route via itself. 
+.B --ra-parm=eth0,0,0
+(A value of zero for the interval means the default value.) All three parameters may be set at once.
+.B --ra-param=low,60,1200
+The interface field may include a wildcard.
 .TP
 .B --enable-tftp[=<interface>[,<interface>]]
 Enable the TFTP server function. This is deliberately limited to that
diff --git a/man/fr/dnsmasq.8 b/man/fr/dnsmasq.8
index 2ae0d09..0de4333 100644
--- a/man/fr/dnsmasq.8
+++ b/man/fr/dnsmasq.8
@@ -403,7 +403,8 @@
 Ne pas vérifier régulièrement si le fichier /etc/resolv.conf a été modifié.
 .TP
 .B --clear-on-reload
-Lorsque le fichier /etc/resolv.conf est relu, vider le cache DNS.
+Lorsque le fichier /etc/resolv.conf est relu, ou si les serveurs amonts sont
+configurés via DBus, vider le cache DNS.
 Cela est utile si les nouveaux serveurs sont susceptibles d'avoir des données
 différentes de celles stockées dans le cache.
 .TP
@@ -596,9 +597,9 @@
 .TP
 .B --cname=<cname>,<cible>
 Retourne un enregistrement de type CNAME qui indique que <cname> est en
-réalité <cible>. Il existe des contraintes significatives sur la valeur
-de cible; il doit s'agir d'un nom DNS qui est connu de dnsmasq via /etc/hosts
-(ou un fichier hôtes additionnel), ou via DHCP, ou par un autre
+réalité <cible>. Il existe des contraintes importantes sur la valeur
+cible; il doit s'agir d'un nom DNS qui est connu de dnsmasq via /etc/hosts
+(ou un fichier hôtes additionnel), via DHCP, via interface--name ou par un autre
 .B --cname.
 Si une cible ne satisfait pas ces critères, le CNAME est ignoré. Le CNAME
 doit être unique, mais il est autorisé d'avoir plus d'un CNAME pointant
@@ -622,6 +623,24 @@
 plusieurs fois; dans ce cas, l'enregistrement inverse pointe vers le nom fourni
 dans la première instance de cette option.
 .TP
+.B --synth-domain=<domaine>,<plage d'adresses>[,<préfixe>]
+Créé des enregistrements A/AAAA ou PTR pour une plage d'adresses. Les
+enregistrements utilisent l'adresse ainsi que les points (ou les deux points
+dans le cas d'IPv6) remplacés par des tirets.
+
+Un exemple devrait rendre cela plus clair :
+La configuration
+.B --synth-domain=thekelleys.org.uk,192.168.0.0/24,internal-
+permet de retourner internal-192-168-0-56.thekelleys.org.uk lors d'une requête
+sur l'adresse 192.168.0.56 et vice-versa pour la requête inverse. La même
+logique s'applique pour IPv6, avec la particularité suivante : les adresses
+IPv6 pouvant commencer par '::', mais les noms DNS ne pouvant pas commencer
+par '-', si aucun préfixe n'est donné, un zéro est ajouté en début de nom.
+Ainsi, ::1 devient 0--1.
+
+La plage d'adresses peut-être de la forme
+<adresse IP>,<adresse IP> ou <adresse IP>/<masque réseau>
+.TP
 .B --add-mac
 Ajoute l'adresse MAC du requêteur aux requêtes DNS transmises aux serveurs
 amonts. Cela peut être utilisé dans un but de filtrage DNS par les serveurs
@@ -630,7 +649,20 @@
 utilisé pour effectuer cela (une option EDNS0) n'est pas encore standardisée,
 aussi cette fonctionalité doit être considérée comme expérimentale. Notez
 également qu'exposer les adresses MAC de la sorte peut avoir des implications
-en termes de sécurité et de vie privée.
+en termes de sécurité et de vie privée. L'avertissement donné pour --add-subnet
+s'applique également ici.
+.TP
+.B --add-subnet[[=<longueur de préfixe IPv4>],<longueur de préfixe IPv6>]
+Rajoute l'adresse de sous-réseau du requêteur aux requêtes DNS transmises
+aux serveurs amonts. La quantité d'adresses transmises dépend du paramètre
+longueur du préfixe : 32 (ou 128 dans le cas d'IPv6) transmet la totalité
+de l'adresse, 0 n'en transmet aucun mais marque néanmoins la requête ce qui
+fait qu'aucun serveur amont ne rajoutera d'adresse client. La valeur par
+défaut est zéro et pour IPv4 et pour IPv6. A noter que les serveurs amonts
+peuvent-être configurés pour retourner des valeurs différentes en fonction
+de cette information mais que le cache de dnsmasq n'en tient pas compte.
+Si une instance de dnsmasq est configurée de telle maniêre que des valeurs
+différentes pourraient-être rencontrés, alors le cache devrait être désactivé.
 .TP
 .B \-c, --cache-size=<taille>
 Définit la taille du cache de Dnsmasq. La valeur par défaut est de 150 noms.
@@ -665,15 +697,20 @@
 clients, cette option n'est pas requise. Dnsmasq retourne toujours toutes les
 données nécessaires par un client pour effectuer la validation lui-même.
 .TP
-.B --auth-zone=<domaine>[,<sous-réseau>[,<sous-réseau>.....]]
+
+.B --auth-zone=<domaine>[,<sous-réseau>[/<longueur de préfixe>][,<sous-réseau>[/<longueur de préfixe>].....]]
 Définie une zone DNS pour laquelle dnsmasq agit en temps que serveur faisant
 autorité. Les enregistrements DNS définis localement et correspondant à ce
-domaine seront fournis, à ceci près que les enregistrements A et AAAA doivent
-se situer dans l'un des sous-réseaux précisés si ceux-ci sont définis, ou dans
-un réseau correspondant à une plage DHCP. Le ou les sous-réseaux sont également
-utilisé pour définir les domaines in-addr.arpa et ipv6.arpa servant à
-l'interrogation DNS inverse. Dans le cas d'IPv4, la longueur du masque de
-réseau doit être de 8, 16 ou 24.
+domaine seront fournis. Les enregistrements A et AAAA doivent se situer dans
+l'un des sous-réseaux définis, ou dans un réseau correspondant à une plage DHCP
+(ce comportement peut-être désactivé par
+.B constructor-noauth:
+). Le ou les sous-réseaux sont également utilisé(s) pour définir les domaines
+in-addr.arpa et ipv6.arpa servant à l'interrogation DNS inverse. Si la longueur
+de préfixe n'est pas spécifiée, elle sera par défaut de 24 pour IPv4 et 64 pour
+IPv6. Dans le cas d'IPv4, la longueur du masque de réseau devrait-être de 8, 16
+ou 24, sauf si en cas de mise en place d'une délégation de la zone in-addr.arpa
+conforme au RFC 2317.
 .TP
 .B --auth-soa=<numéro de série>[,<mainteneur de zone (hostmaster)>[,<rafraichissement>[,<nombre de réessais>[,<expiration>]]]]
 Spécifie les champs de l'enregistrement de type SOA (Start Of Authority)
@@ -762,6 +799,27 @@
 supprimée. Le nom de l'interface peut être spécifié avec un caractère joker '*'
 final.
 
+provoque la recherche d'adresses sur eth0 et crée une plage allant de
+<réseau>::1 à <réseau>:400. Si l'interface est assignée à
+plus d'un réseau, les plages correspondantes seront respectivement
+automatiquement créées, rendues obsolètes et supprimées lorsque l'adresse
+est rendue obsolète et supprimée. Le nom de l'interface peut être spécifié avec
+un caractère joker '*' final. Les adresses autoconfigurées, privées ou
+obsolètes ne conviennent pas.
+
+Si une plage dhcp-range est uniquement utilisée pour du DHCP sans-état
+("stateless") ou de l'autoconfiguration sans état ("SLAAC"), alors l'adresse
+peut-être indiquée sous la forme '::'
+
+.B --dhcp-range=::,constructor:eth0
+
+Il existe une variante de la syntaxe constructor: qui consiste en l'utilisation
+du mot-clef
+.B constructor-noauth.
+Voir
+.B --auth-zone
+pour des explications à ce sujet.
+
 L'identifiant de label optionnel
 .B set:<label>
 fournie une étiquette alphanumérique qui identifie ce réseau, afin de permettre
@@ -853,9 +911,9 @@
 besoin d'adresses dynamiquement allouées, utiliser le mot-clef "static" dans la
 déclaration de plage d'adresses dhcp-range.
 
-Il est possible
-d'utiliser des identifiants clients plutôt que des adresses matérielles pour
-identifier les hôtes, en préfixant par ceux-ci par 'id:'. Ainsi, 
+Il est possible d'utiliser des identifiants clients (appellé "DUID client" dans
+le monde IPv6) plutôt que des adresses matérielles pour identifier les hôtes,
+en préfixant ceux-ci par 'id:'. Ainsi, 
 .B --dhcp-host=id:01:02:03:04,..... 
 réfère à l'hôte d'identifiant 01:02:03:04. Il est également possible de
 spécifier l'identifiant client sous la forme d'une chaîne de caractères, comme
@@ -871,11 +929,13 @@
 .B --dhcp-host=laptop,[::56]
 Dans ce cas, lorsque des plages dhcp sont définies automatiquement par le biais
 de constructeurs, la partie réseau correspondante est rajoutée à l'adresse.
-A noter que pour le DHCP IPv6, l'adresse matérielle n'est en principe pas
-disponible, aussi un client doit-être identifié par un identifiant de client
-(appellé "DUID client") ou un nom d'hôte.
 
-L'option spéciale id:* signifie : "ignorer tout identifiant client et n'utiliser
+A noter que pour le DHCP IPv6, l'adresse matérielle n'est pas toujours
+disponible, bien que ce soit toujours le cas pour des clients directement
+connectés (sur le même domaine de broadcast) ou pour des clients utilisant
+des relais DHCP qui supportent la RFC 6939.
+
+En DHCPv4, l'option spéciale id:* signifie : "ignorer tout identifiant client et n'utiliser
 que l'adresse matérielle". Cela est utile lorsqu'un client présente un
 identifiant client mais pas les autres.
 
@@ -1079,6 +1139,40 @@
 option force le comportement à l'utilisation des valeurs "simples et sûres"
 afin d'éviter des problèmes dans de tels cas.
 .TP
+.B --dhcp-relay=<adresse locale>,<adresse de serveur>[,<interface]
+Configure dnsmasq en temps que relais DHCP.  L'adresse locale est une
+adresse allouée à l'une interface de la machine sur laquelle tourne dnsmasq.
+Toutes les requêtes DHCP arrivant sur cette interface seront relayées au
+serveur DHCP distant correspondant à l'adresse de serveur indiquée. Il est
+possible de relayer depuis une unique adresse locale vers différents serveurs
+distant en spécifiant plusieurs fois l'option dhcp-relay avec la même adresse
+locale et différentes adresses de serveur. L'adresse de serveur doit-être
+sous forme numérique. Dans le cas de DHCPv6, l'adresse de serveur peut-être
+l'adresse de multicast ff05::1:3 correspondant à tous les serveurs DHCP. Dans
+ce cas, l'interface doit-étre spécifiée et ne peut comporter de caractère
+joker. Elle sera utilisée pour indiquer l'interface à partir de laquelle le
+multicast pourra atteindre le serveur DHCP.
+
+Le contrôle d'accès pour les clients DHCP suivent les mêmes règles que pour
+les serveurs DHCP : voir --interface, --except-interface, etc. Le nom
+d'interface optionel dans l'option dhcp-relay comporte une autre fonction :
+il contrôle l'interface sur laquelle la réponse du serveur sera acceptée. Cela
+sert par exemple dans des configurations à 3 interfaces : une à partir de
+laquelle les requêtes sont relayées, une seconde permettant de se connecter à
+un serveur DHCP, et une troisième reliée à un réseau non-sécurisé tel
+qu'internet. Cela permet d'éviter l'arrivée de requêtes usurpées via cette
+troisième interface.
+
+Il est permis de configurer dnsmasq pour fonctionner comme serveur DHCP sur
+certaines interfaces et en temps que relais sur d'autres. Cependant, même s'il
+est possible de configurer dnsmasq de telle manière qu'il soit à la fois
+serveur et relais pour une même interface, cela n'est pas supporté et la
+fonction de relais prendra le dessus.
+
+Le relais DHCPv4 et le relais DHCPv6 sont tous les deux supportés, mais il
+n'est pas possible de relayer des requêtes DHCPv4 à un serveur DHCPv6 et
+vice-versa.
+.TP
 .B \-U, --dhcp-vendorclass=set:<label>,[enterprise:<numéro IANA d'enterprise>,]<classe de vendeur>
 
 Associe une chaîne de classe de vendeur à un label. La plupart
@@ -1113,7 +1207,7 @@
 classe "ingénierie".
 .TP
 .B \-4, --dhcp-mac=set:<label>,<adresse MAC>
-(IPv4 uniquement) Associe une adresse matérielle (MAC) à un label. L'adresse
+Associe une adresse matérielle (MAC) à un label. L'adresse
 matérielle peut inclure des jokers. Par exemple
 .B --dhcp-mac=set:3com,01:34:23:*:*:*
 permet de définir le label "3com" pour n'importe quel hôte dont l'adresse
@@ -1354,6 +1448,11 @@
 envoyées aux clients DHCP et les labels utilisés pour la
 détermination de celles-ci.
 .TP
+.B --quiet-dhcp, --quiet-dhcp6, --quiet-ra
+Supprime les logs des opérations de routine des protocoles concernés. Les
+erreurs et les problèmes seront toujours enregistrés. L'option --log-dhcp
+prends le pas sur --quiet-dhcp et quiet-dhcp6.
+.TP
 .B \-l, --dhcp-leasefile=<chemin de fichier>
 Utilise le fichier dont le chemin est fourni pour stocker les informations de
 baux DHCP.
@@ -1447,6 +1546,8 @@
 DNSMASQ_IAID contenant l'IAID pour le bail. Si le bail est une allocation
 temporaire, cela est préfixé par le caractère 'T'.
 
+DNSMASQ_MAC contient l'adresse MAC du client, si celle-ci est connue.
+
 A noter que le nom d'hôte fourni, la classe de vendeur ou les données de classe
 d'utilisateur sont uniquement fournies pour les actions "add" ou l'action "old"
 lorsqu'un hôte reprend un bail existant, puisque ces informations ne sont pas
@@ -1649,11 +1750,30 @@
 options dns-server et domain-search sont utilisées respectivement pour RDNSS et
 DNSSL.
 .TP
-.B --enable-tftp
+.B --ra-param=<interface>,[high|low],[[<intervalle d'annonce routeur>],<durée de vie route>]
+Configure pour une interface donnée des valeurs pour les annonces routeurs
+différentes des valeurs par défaut. La valeur par défaut du champ priorité
+pour le routeur peut-être changée de "medium" (moyen) à "high" (haute) ou
+"low" (basse). Par exemple :
+.B --ra-param=eth0,high.
+Un intervalle (en secondes) entre les annonces routeur peut-être fourni par :
+.B --ra-param=eth0,60.
+La durée de vie de la route peut-être changée ou mise à zéro, auquel cas 
+le routeur peut annoncer les préfixes mais pas de route :
+.B --ra-parm=eth0,0,0
+(une valeur de zéro pour l'intervalle signifie qu'il garde la valeur par défaut).
+Ces trois paramètres peuvent-être configurés en une fois :
+.B --ra-param=low,60,1200
+La valeur pour l'interface peut inclure un caractère joker.
+.TP
+.B --enable-tftp[=<interface>[,<interface>]]
 Active la fonction serveur TFTP. Celui-ci est de manière délibérée limité aux
 fonctions nécessaires au démarrage par le réseau ("net-boot") d'un client. Seul
 un accès en lecture est possible; les extensions tsize et blksize sont supportées
-(tsize est seulement supporté en mode octet).
+(tsize est seulement supporté en mode octet). Sans argument optionel, le service
+TFTP est fourni sur les mêmes interfaces que le service DHCP. Si une liste
+d'interfaces est fournie, cela définit les interfaces sur lesquelles le
+service TFTP sera activé.
 .TP
 .B --tftp-root=<répertoire>[,<interface>]
 Les fichiers à fournir dans les transferts TFTP seront cherchés en prenant le
diff --git a/po/de.po b/po/de.po
index 0db9c99..0eee6d5 100644
--- a/po/de.po
+++ b/po/de.po
@@ -26,17 +26,17 @@
 msgid "failed to load names from %s: %s"
 msgstr "Fehler beim Laden der Namen von %s: %s"
 
-#: cache.c:834 dhcp.c:845
+#: cache.c:834 dhcp.c:819
 #, c-format
 msgid "bad address at %s line %d"
 msgstr "Fehlerhafte Adresse in %s Zeile %d"
 
-#: cache.c:885 dhcp.c:861
+#: cache.c:885 dhcp.c:835
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "Fehlerhafter Name in %s Zeile %d"
 
-#: cache.c:892 dhcp.c:936
+#: cache.c:892 dhcp.c:910
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "%s gelesen - %d Adressen"
@@ -45,37 +45,37 @@
 msgid "cleared cache"
 msgstr "Cache geleert"
 
-#: cache.c:1016
+#: cache.c:984
 #, c-format
 msgid "No IPv4 address found for %s"
 msgstr "Keine IPv4-Adresse für %s gefunden"
 
-#: cache.c:1093
+#: cache.c:1061
 #, c-format
 msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
 msgstr "%s ist ein CNAME, weise es der DHCP-Lease von %s nicht zu"
 
-#: cache.c:1117
+#: cache.c:1085
 #, c-format
 msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
 msgstr "Name %s wurde dem DHCP-Lease von %s nicht zugewiesen, da der Name in %s bereits mit Adresse %s existiert"
 
-#: cache.c:1162
+#: cache.c:1130
 #, c-format
 msgid "time %lu"
 msgstr "Zeit %lu"
 
-#: cache.c:1163
+#: cache.c:1131
 #, c-format
 msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
 msgstr "Cache Größe %d, %d/%d Cache-Einfügungen verwendeten nicht abgelaufene Cache-Einträge wieder."
 
-#: cache.c:1165
+#: cache.c:1133
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr "%u weitergeleitete Anfragen, %u lokal beantwortete Anfragen"
 
-#: cache.c:1188
+#: cache.c:1156
 #, c-format
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr "Server %s#%d: %u Anfragen gesendet, %u erneut versucht oder fehlgeschlagen"
@@ -85,551 +85,563 @@
 msgid "failed to seed the random number generator: %s"
 msgstr "Konnte den Zufallszahlengenerator nicht initialisieren: %s"
 
-#: util.c:189
+#: util.c:192
 msgid "failed to allocate memory"
 msgstr "Konnte Speicher nicht belegen"
 
-#: util.c:227 option.c:531
+#: util.c:230 option.c:540
 msgid "could not get memory"
 msgstr "Speicher nicht verfügbar"
 
-#: util.c:237
+#: util.c:240
 #, c-format
 msgid "cannot create pipe: %s"
 msgstr "Konnte Pipe nicht erzeugen: %s"
 
-#: util.c:245
+#: util.c:248
 #, c-format
 msgid "failed to allocate %d bytes"
 msgstr "Konnte %d Bytes nicht belegen"
 
 # @Simon: not perfect but I cannot get nearer right now.
-#: util.c:400
+#: util.c:403
 #, c-format
 msgid "infinite"
 msgstr "unendlich"
 
-#: option.c:286
+#: option.c:292
 msgid "Specify local address(es) to listen on."
 msgstr "Lokale abzuhörende Adresse(n) angeben."
 
-#: option.c:287
+#: option.c:293
 msgid "Return ipaddr for all hosts in specified domains."
 msgstr "IP-Adresse für alle Hosts in angebenen Domänen festlegen."
 
 # FIXME: the English test is not to the point. Just use a shortened description
 # from the manpage instead. -- MA
-#: option.c:288
+#: option.c:294
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr "Für private Adressbereiche nach RFC1918 \"keine solche Domain\" liefern."
 
-#: option.c:289
+#: option.c:295
 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
 msgstr "Diese IP-Adresse als NXDOMAIN interpretieren (wehrt \"Suchhilfen\" ab)."
 
-#: option.c:290
+#: option.c:296
 #, c-format
 msgid "Specify the size of the cache in entries (defaults to %s)."
 msgstr "Größe des Caches (Zahl der Einträge) festlegen (Voreinstellung: %s)."
 
-#: option.c:291
+#: option.c:297
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr "Konfigurationsdatei festlegen (Voreinstellung: %s)."
 
-#: option.c:292
+#: option.c:298
 msgid "Do NOT fork into the background: run in debug mode."
 msgstr "NICHT in den Hintergrund gehen: Betrieb im Debug-Modus"
 
-#: option.c:293
+#: option.c:299
 msgid "Do NOT forward queries with no domain part."
 msgstr "Anfragen ohne Domänen-Teil NICHT weiterschicken."
 
-#: option.c:294
+#: option.c:300
 msgid "Return self-pointing MX records for local hosts."
 msgstr "Für lokale Einträge MX-Einträge liefern, die auf sich selbst zeigen."
 
-#: option.c:295
+#: option.c:301
 msgid "Expand simple names in /etc/hosts with domain-suffix."
 msgstr "Erweitere einfache Namen in /etc/hosts mit der Domänen-Endung."
 
-#: option.c:296
+#: option.c:302
 msgid "Don't forward spurious DNS requests from Windows hosts."
 msgstr "'unechte' DNS-Anfragen von Windows-Rechnern nicht weiterleiten"
 
 # @Simon: I'm a bit unsure about "spurious"
-#: option.c:297
+#: option.c:303
 msgid "Enable DHCP in the range given with lease duration."
 msgstr "DHCP für angegebenen Bereich und Dauer einschalten"
 
-#: option.c:298
+#: option.c:304
 #, c-format
 msgid "Change to this group after startup (defaults to %s)."
 msgstr "Nach dem Start in diese Benutzergruppe wechseln (Voreinstellung %s)."
 
-#: option.c:299
+#: option.c:305
 msgid "Set address or hostname for a specified machine."
 msgstr "Adresse oder Hostnamen für einen angegebenen Computer setzen."
 
-#: option.c:300
+#: option.c:306
 msgid "Read DHCP host specs from file."
 msgstr "DHCP-Host-Angaben aus Datei lesen."
 
-#: option.c:301
+#: option.c:307
 msgid "Read DHCP option specs from file."
 msgstr "DHCP-Optionen aus Datei lesen."
 
-#: option.c:302
+#: option.c:308
 msgid "Evaluate conditional tag expression."
 msgstr "Auswertung eines Ausdrucks bedingter Marken."
 
-#: option.c:303
+#: option.c:309
 #, c-format
 msgid "Do NOT load %s file."
 msgstr "%s-Datei NICHT laden."
 
-#: option.c:304
+#: option.c:310
 #, c-format
 msgid "Specify a hosts file to be read in addition to %s."
 msgstr "Hosts-Datei festlegen, die zusätzlich zu %s gelesen wird."
 
-#: option.c:305
+#: option.c:311
 msgid "Specify interface(s) to listen on."
 msgstr "Schnittstelle(n) zum Empfang festlegen."
 
-#: option.c:306
+#: option.c:312
 msgid "Specify interface(s) NOT to listen on."
 msgstr "Schnittstelle(n) festlegen, die NICHT empfangen sollen."
 
-#: option.c:307
+#: option.c:313
 msgid "Map DHCP user class to tag."
 msgstr "DHCP-Benutzerklasse auf Marke abbilden."
 
-#: option.c:308
+#: option.c:314
 msgid "Map RFC3046 circuit-id to tag."
 msgstr "RFC3046 \"circuit-id\" auf Marke abbilden."
 
-#: option.c:309
+#: option.c:315
 msgid "Map RFC3046 remote-id to tag."
 msgstr "RFC3046 \"remote-id\" auf Marke abbilden."
 
-#: option.c:310
+#: option.c:316
 msgid "Map RFC3993 subscriber-id to tag."
 msgstr "RFC3993 \"subscriber-id\" auf Marke abbilden."
 
-#: option.c:311
+#: option.c:317
 msgid "Don't do DHCP for hosts with tag set."
 msgstr "Kein DHCP für Hosts mit gesetzter Marke verwenden."
 
-#: option.c:312
+#: option.c:318
 msgid "Force broadcast replies for hosts with tag set."
 msgstr "Rundsendung für Hosts mit gesetzter Marke erzwingen."
 
-#: option.c:313
+#: option.c:319
 msgid "Do NOT fork into the background, do NOT run in debug mode."
 msgstr "NICHT in den Hintergrund wechseln, NICHT im Debug-Modus laufen."
 
-#: option.c:314
+#: option.c:320
 msgid "Assume we are the only DHCP server on the local network."
 msgstr "Voraussetzen, dass wir der einzige DHCP-Server im lokalen Netz sind."
 
-#: option.c:315
+#: option.c:321
 #, c-format
 msgid "Specify where to store DHCP leases (defaults to %s)."
 msgstr "Festlegen, wo DHCP-Leases gespeichert werden (Voreinstellung %s)."
 
-#: option.c:316
+#: option.c:322
 msgid "Return MX records for local hosts."
 msgstr "MX-Einträge für lokale Hosts liefern."
 
-#: option.c:317
+#: option.c:323
 msgid "Specify an MX record."
 msgstr "Einen MX-Eintrag festlegen."
 
-#: option.c:318
+#: option.c:324
 msgid "Specify BOOTP options to DHCP server."
 msgstr "BOOTP-Optionen für DHCP-Server festlegen."
 
-#: option.c:319
+#: option.c:325
 #, c-format
 msgid "Do NOT poll %s file, reload only on SIGHUP."
 msgstr "%s-Datei NICHT abfragen, nur bei SIGHUP neu laden."
 
-#: option.c:320
+#: option.c:326
 msgid "Do NOT cache failed search results."
 msgstr "Fehlerhafte Suchergebnisse NICHT zwischenspeichern."
 
-#: option.c:321
+#: option.c:327
 #, c-format
 msgid "Use nameservers strictly in the order given in %s."
 msgstr "Namensserver streng in der in %s angegebenen Reihenfolge verwenden."
 
-#: option.c:322
+#: option.c:328
 msgid "Specify options to be sent to DHCP clients."
 msgstr "Optionen festlegen, die an DHCP-Klienten gesendet werden."
 
-#: option.c:323
+#: option.c:329
 msgid "DHCP option sent even if the client does not request it."
 msgstr "DHCP-Option, die selbst ohne Klientenanfrage gesendet wird."
 
-#: option.c:324
+#: option.c:330
 msgid "Specify port to listen for DNS requests on (defaults to 53)."
 msgstr "Port zum Abhören der DNS-Anfragen festlegen (53 voreingestellt)."
 
-#: option.c:325
+#: option.c:331
 #, c-format
 msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
 msgstr "Maximale unterstützte UDP-Paketgröße für EDNS.0 (Voreinstellung %s)."
 
-#: option.c:326
+#: option.c:332
 msgid "Log DNS queries."
 msgstr "DNS-Anfragen protokollieren."
 
-#: option.c:327
+#: option.c:333
 msgid "Force the originating port for upstream DNS queries."
 msgstr "Ausgehenden Port erzwingen für DNS-Anfragen an vorgelagerte Server."
 
-#: option.c:328
+#: option.c:334
 msgid "Do NOT read resolv.conf."
 msgstr "resolv.conf NICHT lesen."
 
-#: option.c:329
+#: option.c:335
 #, c-format
 msgid "Specify path to resolv.conf (defaults to %s)."
 msgstr "Pfad zu resolv.conf festlegen (%s voreingestellt)."
 
-#: option.c:330
+#: option.c:336
 msgid "Specify address(es) of upstream servers with optional domains."
 msgstr "Adresse(n) vorgelagerter Server festlegen, optional mit Domänen."
 
-#: option.c:331
+#: option.c:337
 msgid "Never forward queries to specified domains."
 msgstr "Anfragen für angegebene Domänen niemals weiterleiten."
 
-#: option.c:332
+#: option.c:338
 msgid "Specify the domain to be assigned in DHCP leases."
 msgstr "Domäne festlegen, die für DHCP-Leases zugewiesen wird."
 
-#: option.c:333
+#: option.c:339
 msgid "Specify default target in an MX record."
 msgstr "Voreingestelltes Ziel für MX-Einträge festlegen."
 
-#: option.c:334
+#: option.c:340
 msgid "Specify time-to-live in seconds for replies from /etc/hosts."
 msgstr "Gültigkeitsdauer für Antworten aus /etc/hosts festlegen."
 
-#: option.c:335
+#: option.c:341
 msgid "Specify time-to-live in seconds for negative caching."
 msgstr "Gültigkeitsdauer in Sekunden für Caching negativer Ergebnisse festlegen."
 
-#: option.c:336
+#: option.c:342
 msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
 msgstr "Gültigkeitsdauer in Sekunden für Caching negativer Ergebnisse festlegen."
 
-#: option.c:337
+#: option.c:343
 #, c-format
 msgid "Change to this user after startup. (defaults to %s)."
 msgstr "Nach dem Start diese Benutzerrechte annehmen (%s voreingestellt)."
 
-#: option.c:338
+#: option.c:344
 msgid "Map DHCP vendor class to tag."
 msgstr "DHCP-\"vendor class\" auf Marke abbilden."
 
-#: option.c:339
+#: option.c:345
 msgid "Display dnsmasq version and copyright information."
 msgstr "dnsmasq-Version und Urheberrecht anzeigen."
 
-#: option.c:340
+#: option.c:346
 msgid "Translate IPv4 addresses from upstream servers."
 msgstr "IPv4-Adressen von vorgelagerten Servern übersetzen."
 
-#: option.c:341
+#: option.c:347
 msgid "Specify a SRV record."
 msgstr "SRV-Eintrag festlegen."
 
-#: option.c:342
+#: option.c:348
 msgid "Display this message. Use --help dhcp for known DHCP options."
 msgstr "Diese Hilfe anzeigen. Benutzen Sie --help dhcp für bekannte DHCP-Optionen."
 
-#: option.c:343
+#: option.c:349
 #, c-format
 msgid "Specify path of PID file (defaults to %s)."
 msgstr "Dateipfad für Prozesskennung (PID) festlegen (Voreinstellung: %s)."
 
-#: option.c:344
+#: option.c:350
 #, c-format
 msgid "Specify maximum number of DHCP leases (defaults to %s)."
 msgstr "Höchstzahl der DHCP-Leases festlegen (%s voreingestellt)."
 
-#: option.c:345
+#: option.c:351
 msgid "Answer DNS queries based on the interface a query was sent to."
 msgstr "DNS-Anfragen abhängig der Emfpangsschnittstelle beantworten."
 
-#: option.c:346
+#: option.c:352
 msgid "Specify TXT DNS record."
 msgstr "DNS-TXT-Eintrag festlegen."
 
-#: option.c:347
+#: option.c:353
 msgid "Specify PTR DNS record."
 msgstr "DNS-PTR-Eintrag festlegen."
 
-#: option.c:348
+#: option.c:354
 msgid "Give DNS name to IPv4 address of interface."
 msgstr "Schnittstellennamen zur IPv4-Adresse des Interfaces auflösen."
 
-#: option.c:349
+#: option.c:355
 msgid "Bind only to interfaces in use."
 msgstr "Nur an verwendete Schnittstellen binden."
 
-#: option.c:350
+#: option.c:356
 #, c-format
 msgid "Read DHCP static host information from %s."
 msgstr "Statische DHCP-Host-Information aus %s lesen."
 
-#: option.c:351
+#: option.c:357
 msgid "Enable the DBus interface for setting upstream servers, etc."
 msgstr "DBus-Schnittstelle zum Festlegen vorgelagerter Server usw. festlegen."
 
-#: option.c:352
+#: option.c:358
 msgid "Do not provide DHCP on this interface, only provide DNS."
 msgstr "Auf dieser Schnittstelle kein DHCP anbieten, sondern nur DNS."
 
-#: option.c:353
+#: option.c:359
 msgid "Enable dynamic address allocation for bootp."
 msgstr "Dynamische Adressbelegung für bootp einschalten."
 
-#: option.c:354
+#: option.c:360
 msgid "Map MAC address (with wildcards) to option set."
 msgstr "MAC-Adresse (mit Jokerzeichen) auf Netzmarke abbilden."
 
-#: option.c:355
+#: option.c:361
 msgid "Treat DHCP requests on aliases as arriving from interface."
 msgstr "DHCP-Anfragen von Alias-Schnittstellen für die Hauptschnittstelle beantworten."
 
-#: option.c:356
+#: option.c:362
 msgid "Disable ICMP echo address checking in the DHCP server."
 msgstr "ICMP-Echo-Adressprüfung im DHCP-Server abschalten."
 
-#: option.c:357
+#: option.c:363
 msgid "Shell script to run on DHCP lease creation and destruction."
 msgstr "Skript, das bei Erzeugung/Löschung einer DHCP-Lease laufen soll."
 
-#: option.c:358
+#: option.c:364
 msgid "Lua script to run on DHCP lease creation and destruction."
 msgstr "Lua-Skript, welches bei Erzeugung/Löschung eines DHCP-Leases laufen soll."
 
-#: option.c:359
+#: option.c:365
 msgid "Run lease-change scripts as this user."
 msgstr "Lease-Änderungs-Skript mit den Rechten dieses Nutzers ausführen."
 
-#: option.c:360
+#: option.c:366
 msgid "Read configuration from all the files in this directory."
 msgstr "Konfiguration aus allen Dateien in diesem Verzeichnis lesen."
 
-#: option.c:361
+#: option.c:367
 msgid "Log to this syslog facility or file. (defaults to DAEMON)"
 msgstr "Für diese Syslog-Anlage oder in Datei loggen (Voreinstellung DAEMON)."
 
-#: option.c:362
+#: option.c:368
 msgid "Do not use leasefile."
 msgstr "Keine Lease-Datei benützen."
 
-#: option.c:363
+#: option.c:369
 #, c-format
 msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
 msgstr "Höchstzahl nebenläufiger DNS-Anfragen (%s voreingestellt)."
 
-#: option.c:364
+#: option.c:370
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr "DNS-Cache beim Neuladen von %s löschen."
 
-#: option.c:365
+#: option.c:371
 msgid "Ignore hostnames provided by DHCP clients."
 msgstr "Von DHCP-Clients gelieferte Hostnamen ignorieren."
 
-#: option.c:366
+#: option.c:372
 msgid "Do NOT reuse filename and server fields for extra DHCP options."
 msgstr "Dateinamen und Server-Datenfehler für zusätzliche DHCP-Optionen NICHT wiederverwenden."
 
-#: option.c:367
+#: option.c:373
 msgid "Enable integrated read-only TFTP server."
 msgstr "Eingebauten Nur-Lese-TFTP-Server einschalten."
 
-#: option.c:368
+#: option.c:374
 msgid "Export files by TFTP only from the specified subtree."
 msgstr "Nur vom festgelegten Unterbaum Dateien per TFTP exportieren."
 
-#: option.c:369
+#: option.c:375
 msgid "Add client IP address to tftp-root."
 msgstr "IP-Adresse des Klienten an tftp-root anhängen."
 
-#: option.c:370
+#: option.c:376
 msgid "Allow access only to files owned by the user running dnsmasq."
 msgstr "Zugriff nur auf Dateien gestatten, die dem dnsmasq aufrufenden Benutzer gehören."
 
-#: option.c:371
+#: option.c:377
 #, c-format
 msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
 msgstr "Höchstzahl nebenläufiger TFTP-Übertragungen (%s voreingestellt)."
 
-#: option.c:372
+#: option.c:378
 msgid "Disable the TFTP blocksize extension."
 msgstr "TFTP-Blockgrößen-Erweiterung abschalten."
 
-#: option.c:373
+#: option.c:379
 msgid "Convert TFTP filenames to lowercase"
 msgstr ""
 
-#: option.c:374
+#: option.c:380
 msgid "Ephemeral port range for use by TFTP transfers."
 msgstr "Bereich für vorübergehende Ports für TFTP-Übertragungen."
 
-#: option.c:375
+#: option.c:381
 msgid "Extra logging for DHCP."
 msgstr "Erweiterte DHCP-Protokollierung."
 
-#: option.c:376
+#: option.c:382
 msgid "Enable async. logging; optionally set queue length."
 msgstr "Asynchrone Protokollierung einschalten, opt. Warteschlangenlänge festlegen."
 
-#: option.c:377
+#: option.c:383
 msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
 msgstr "DNS-Rebinding unterbinden, private IP-Bereiche bei der Auflösung ausfiltern."
 
-#: option.c:378
+#: option.c:384
 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
 msgstr "Auflösung zu 127.0.0.0/8 erlauben, für RBL-Server."
 
-#: option.c:379
+#: option.c:385
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr "DNS-Rebind-Schutz für diese Domäne sperren."
 
-#: option.c:380
+#: option.c:386
 msgid "Always perform DNS queries to all servers."
 msgstr "DNS-Anfragen immer an alle Server weiterleiten."
 
-#: option.c:381
+#: option.c:387
 msgid "Set tag if client includes matching option in request."
 msgstr "Marke setzen, wenn Klient eine entsprechende Option anfragt."
 
-#: option.c:382
+#: option.c:388
 msgid "Use alternative ports for DHCP."
 msgstr "Alternative Ports für DHCP verwenden."
 
-#: option.c:383
+#: option.c:389
 msgid "Specify NAPTR DNS record."
 msgstr "DNS-NAPTR-Eintrag festlegen."
 
-#: option.c:384
+#: option.c:390
 msgid "Specify lowest port available for DNS query transmission."
 msgstr "Niedrigsten verfügbaren Port für Übertragung von DNS-Anfragen festlegen."
 
-#: option.c:385
+#: option.c:391
 msgid "Use only fully qualified domain names for DHCP clients."
 msgstr "Für DHCP-Klienten nur vollständig bestimmte Domänennamen benutzen."
 
 # FIXME: probably typo in original message. -- MA
-#: option.c:386
+#: option.c:392
 msgid "Generate hostnames based on MAC address for nameless clients."
 msgstr "Generiere Hostnamen auf Basis der MAC-Adresse für namenlose Klienten."
 
-#: option.c:387
+#: option.c:393
 msgid "Use these DHCP relays as full proxies."
 msgstr "Diese DHCP-Relais als vollwertige Proxies verwenden."
 
-#: option.c:388
+#: option.c:394
+msgid "Relay DHCP requests to a remote server"
+msgstr ""
+
+#: option.c:395
 msgid "Specify alias name for LOCAL DNS name."
 msgstr "Alias für LOKALEN DNS-Namen festlegen."
 
-#: option.c:389
+#: option.c:396
 msgid "Prompt to send to PXE clients."
 msgstr "Aufforderung, die an PXE-Klienten geschickt wird."
 
-#: option.c:390
+#: option.c:397
 msgid "Boot service for PXE menu."
 msgstr "Boot-Dienst für PXE-Menü."
 
-#: option.c:391
+#: option.c:398
 msgid "Check configuration syntax."
 msgstr "Konfigurationssyntax prüfen."
 
-#: option.c:392
+#: option.c:399
 msgid "Add requestor's MAC address to forwarded DNS queries."
 msgstr "Anfragende MAC-Adresse in die weiterleitende DNS-Anfrage einfügen"
 
-#: option.c:393
+#: option.c:400
 msgid "Proxy DNSSEC validation results from upstream nameservers."
 msgstr "Proxy-DNSSEC-Validierung-Ergebnisse von Upstream-Namensservern."
 
-#: option.c:394
+#: option.c:401
 msgid "Attempt to allocate sequential IP addresses to DHCP clients."
 msgstr "Versuche sequenzielle IP-Adressen an DHCP-Klienten zu vergeben."
 
-#: option.c:395
+#: option.c:402
 msgid "Copy connection-track mark from queries to upstream connections."
 msgstr "Kopiere \"connection-track mark\" von Anfragen nach Upstream-Verbindungen."
 
-#: option.c:396
+#: option.c:403
 msgid "Allow DHCP clients to do their own DDNS updates."
 msgstr "Erlaube DHCP-Klienten ihre eigenen DDNS-Updates durchzuführen."
 
-#: option.c:397
+#: option.c:404
 msgid "Send router-advertisements for interfaces doing DHCPv6"
 msgstr "Sende \"Router-Advertisments\" für Netzwerkschnittstellen, welche DHCPv6 nutzen"
 
-#: option.c:398
+#: option.c:405
+msgid "Always send frequent router-advertisements"
+msgstr ""
+
+#: option.c:406
 msgid "Specify DUID_EN-type DHCPv6 server DUID"
 msgstr ""
 
-#: option.c:399
+#: option.c:407
 #, fuzzy
 msgid "Specify host (A/AAAA and PTR) records"
 msgstr "Einen MX-Eintrag festlegen."
 
-#: option.c:400
+#: option.c:408
 #, fuzzy
 msgid "Specify arbitrary DNS resource record"
 msgstr "DNS-TXT-Eintrag festlegen."
 
-#: option.c:401
+#: option.c:409
 #, fuzzy
 msgid "Bind to interfaces in use - check for new interfaces"
 msgstr "unbekannte Schnittstelle %s in bridge-interface"
 
-#: option.c:402
+#: option.c:410
 msgid "Export local names to global DNS"
 msgstr ""
 
-#: option.c:403
+#: option.c:411
 msgid "Domain to export to global DNS"
 msgstr ""
 
-#: option.c:404
+#: option.c:412
 msgid "Set TTL for authoritative replies"
 msgstr ""
 
-#: option.c:405
+#: option.c:413
 msgid "Set authoritive zone information"
 msgstr ""
 
-#: option.c:406
+#: option.c:414
 msgid "Secondary authoritative nameservers for forward domains"
 msgstr ""
 
-#: option.c:407
+#: option.c:415
 msgid "Peers which are allowed to do zone transfer"
 msgstr ""
 
-#: option.c:408
+#: option.c:416
 msgid "Specify ipsets to which matching domains should be added"
 msgstr ""
 
-#: option.c:410
+#: option.c:417
+msgid "Specify a domain and address range for sythesised names"
+msgstr ""
+
+#: option.c:419
 msgid "Specify DHCPv6 prefix class"
 msgstr ""
 
-#: option.c:596
+#: option.c:605
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -638,294 +650,305 @@
 "Verwendung: dnsmasq [Optionen]\n"
 "\n"
 
-#: option.c:598
+#: option.c:607
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr "Auf der Befehlszeile nur kurze Optionen verwenden!\n"
 
-#: option.c:600
+#: option.c:609
 #, c-format
 msgid "Valid options are:\n"
 msgstr "Gültige Optionen sind:\n"
 
-#: option.c:650 option.c:654
+#: option.c:659 option.c:663
 msgid "bad port"
 msgstr "unzulässiger Port"
 
-#: option.c:681 option.c:713
+#: option.c:690 option.c:722
 msgid "interface binding not supported"
 msgstr "Schnittstellenbindung nicht unterstützt"
 
-#: option.c:690 option.c:3179
+#: option.c:699 option.c:3275
 msgid "bad interface name"
 msgstr "unzulässiger Schnittestellenname"
 
-#: option.c:720
+#: option.c:729
 #, fuzzy
 msgid "bad address"
 msgstr "Fehlerhafte IP-Adresse"
 
-#: option.c:847
+#: option.c:863
 msgid "unsupported encapsulation for IPv6 option"
 msgstr "Nicht unterstützte Verkapselung für eine IPv6-Option"
 
-#: option.c:861
+#: option.c:877
 msgid "bad dhcp-option"
 msgstr "Fehlerhafte DHCP-Option"
 
-#: option.c:929
+#: option.c:945
 msgid "bad IP address"
 msgstr "Fehlerhafte IP-Adresse"
 
-#: option.c:932 option.c:1070 option.c:2549
+#: option.c:948 option.c:1086 option.c:2620
 msgid "bad IPv6 address"
 msgstr "Fehlerhafte IPv6-Adresse"
 
-#: option.c:1097 option.c:1191
+#: option.c:1113 option.c:1207
 msgid "bad domain in dhcp-option"
 msgstr "Fehlerhafte Domäne in DHCP-Option"
 
-#: option.c:1229
+#: option.c:1245
 msgid "dhcp-option too long"
 msgstr "DHCP-Option zu lang"
 
-#: option.c:1236
+#: option.c:1252
 msgid "illegal dhcp-match"
 msgstr "Unzulässige dhcp-match-Option"
 
-#: option.c:1298
+#: option.c:1314
 msgid "illegal repeated flag"
 msgstr "unzulässig wiederholte Markierung"
 
-#: option.c:1306
+#: option.c:1322
 msgid "illegal repeated keyword"
 msgstr "unzulässig wiederholtes Schlüsselwort"
 
-#: option.c:1358 option.c:3702
+#: option.c:1374 option.c:3802
 #, c-format
 msgid "cannot access directory %s: %s"
 msgstr "Kann auf Verzeichnis %s nicht zugreifen: %s"
 
-#: option.c:1390 tftp.c:474
+#: option.c:1406 tftp.c:487
 #, c-format
 msgid "cannot access %s: %s"
 msgstr "Kann auf %s nicht zugreifen: %s"
 
-#: option.c:1426
+#: option.c:1442
 msgid "setting log facility is not possible under Android"
 msgstr "Die Einstellung Protokolliereinrichtung kann unter Android nicht gesetzt werden"
 
-#: option.c:1435
+#: option.c:1451
 msgid "bad log facility"
 msgstr "Falsche Protokolliereinrichtung"
 
-#: option.c:1484
+#: option.c:1500
 msgid "bad MX preference"
 msgstr "unzulässige MX-Präferenz-Angabe"
 
-#: option.c:1489
+#: option.c:1505
 msgid "bad MX name"
 msgstr "unzulässiger MX-Name"
 
-#: option.c:1503
+#: option.c:1519
 msgid "bad MX target"
 msgstr "unzulässiges MX-Ziel"
 
-#: option.c:1515
+#: option.c:1531
 msgid "cannot run scripts under uClinux"
 msgstr "unter uClinux ist die Skriptausführung nicht möglich"
 
-#: option.c:1517
+#: option.c:1533
 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
 msgstr "Neuübersetzung mit HAVE_SCRIPT nötig, um Lease-Änderungs-Skripte auszuführen"
 
-#: option.c:1521
+#: option.c:1537
 msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
 msgstr "Um Benutzerdefinierte Lua-Scripte zu ermöglichen, muss mit HAVE_LUASCRIPT neu kompiliert werden"
 
-#: option.c:1631
+#: option.c:1739 option.c:1800
 #, fuzzy
 msgid "bad prefix"
 msgstr "unzulässiger Port"
 
-#: option.c:2043
+#: option.c:2094
 #, fuzzy
 msgid "recompile with HAVE_IPSET defined to enable ipset directives"
 msgstr "Um Benutzerdefinierte Lua-Scripte zu ermöglichen, muss mit HAVE_LUASCRIPT neu kompiliert werden"
 
-#: option.c:2223
+#: option.c:2274
 msgid "bad port range"
 msgstr "unzulässiger Portbereich"
 
-#: option.c:2239
+#: option.c:2290
 msgid "bad bridge-interface"
 msgstr "unzulässige Brücken-Schnittstelle"
 
-#: option.c:2297
+#: option.c:2350
 msgid "only one tag allowed"
 msgstr "nur eine Marke zulässig"
 
-#: option.c:2317 option.c:2329 option.c:2461
+#: option.c:2370 option.c:2382 option.c:2491 option.c:2532
 msgid "bad dhcp-range"
 msgstr "unzulässiger DHCP-Bereich"
 
-#: option.c:2344
+#: option.c:2397
 msgid "inconsistent DHCP range"
 msgstr "inkonsistenter DHCP-Bereich"
 
-#: option.c:2402
+#: option.c:2459
 #, fuzzy
-msgid "prefix must be exactly 64 for RA subnets"
+msgid "prefix length must be exactly 64 for RA subnets"
 msgstr "Der Prefix muss mindestens 64 sein"
 
-#: option.c:2404
-msgid "prefix must be exactly 64 for subnet constructors"
-msgstr ""
-
-#: option.c:2407
-msgid "prefix must be at least 64"
+#: option.c:2461
+#, fuzzy
+msgid "prefix length must be exactly 64 for subnet constructors"
 msgstr "Der Prefix muss mindestens 64 sein"
 
-#: option.c:2412
+#: option.c:2465
+#, fuzzy
+msgid "prefix length must be at least 64"
+msgstr "Der Prefix muss mindestens 64 sein"
+
+#: option.c:2468
 msgid "inconsistent DHCPv6 range"
 msgstr "Inkonsistenter DHCPv6-Bereich"
 
-#: option.c:2519 option.c:2567
+#: option.c:2479
+msgid "prefix must be zero with \"constructor:\" argument"
+msgstr ""
+
+#: option.c:2590 option.c:2638
 msgid "bad hex constant"
 msgstr "Falscher Hexwert"
 
-#: option.c:2541
+#: option.c:2612
 msgid "cannot match tags in --dhcp-host"
 msgstr "Kann die Tags in --dhcp-host nicht abgleichen"
 
-#: option.c:2589
+#: option.c:2660
 #, fuzzy, c-format
 msgid "duplicate dhcp-host IP address %s"
 msgstr "doppelte IP-Adresse %s in %s."
 
-#: option.c:2645
+#: option.c:2716
 msgid "bad DHCP host name"
 msgstr "unzulässiger DHCP-Hostname"
 
-#: option.c:2727
+#: option.c:2798
 msgid "bad tag-if"
 msgstr "unzulässige bedingte Marke (tag-if)"
 
-#: option.c:3051 option.c:3379
+#: option.c:3122 option.c:3479
 msgid "invalid port number"
 msgstr "unzulässige Portnummer"
 
-#: option.c:3113
+#: option.c:3184
 msgid "bad dhcp-proxy address"
 msgstr "Fehlerhafte DHCP-Proxy-Adresse"
 
-#: option.c:3124
+#: option.c:3210
+#, fuzzy
+msgid "Bad dhcp-relay"
+msgstr "unzulässiger DHCP-Bereich"
+
+#: option.c:3220
 msgid "bad DUID"
 msgstr ""
 
-#: option.c:3166
+#: option.c:3262
 msgid "invalid alias range"
 msgstr "unzulässiger Alias-Bereich"
 
-#: option.c:3205
+#: option.c:3305
 msgid "bad CNAME"
 msgstr "unzulässiger CNAME"
 
-#: option.c:3210
+#: option.c:3310
 msgid "duplicate CNAME"
 msgstr "doppelter CNAME"
 
-#: option.c:3230
+#: option.c:3330
 msgid "bad PTR record"
 msgstr "unzulässiger PTR-Eintrag"
 
-#: option.c:3261
+#: option.c:3361
 msgid "bad NAPTR record"
 msgstr "unzulässiger NAPTR-Eintrag"
 
-#: option.c:3295
+#: option.c:3395
 #, fuzzy
 msgid "bad RR record"
 msgstr "unzulässiger PTR-Eintrag"
 
-#: option.c:3324
+#: option.c:3424
 msgid "bad TXT record"
 msgstr "unzulässiger TXT-Eintrag"
 
-#: option.c:3365
+#: option.c:3465
 msgid "bad SRV record"
 msgstr "unzulässiger SRV-Eintrag"
 
-#: option.c:3372
+#: option.c:3472
 msgid "bad SRV target"
 msgstr "unzulässiges SRV-Ziel"
 
-#: option.c:3386
+#: option.c:3486
 msgid "invalid priority"
 msgstr "unzulässige Priorität"
 
-#: option.c:3393
+#: option.c:3493
 msgid "invalid weight"
 msgstr "unzulässige Wichtung"
 
-#: option.c:3417
+#: option.c:3517
 #, fuzzy
 msgid "Bad host-record"
 msgstr "unzulässiger PTR-Eintrag"
 
-#: option.c:3434
+#: option.c:3534
 msgid "Bad name in host-record"
 msgstr ""
 
-#: option.c:3464
+#: option.c:3564
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr "unzulässige Option (prüfen Sie, ob dnsmasq mit DHCP/TFTP/DBus-Unterstützt übersetzt wurde)"
 
-#: option.c:3522
+#: option.c:3622
 msgid "missing \""
 msgstr "fehlende \\\""
 
-#: option.c:3579
+#: option.c:3679
 msgid "bad option"
 msgstr "unzulässige Option"
 
-#: option.c:3581
+#: option.c:3681
 msgid "extraneous parameter"
 msgstr "überschüssiger Parameter"
 
-#: option.c:3583
+#: option.c:3683
 msgid "missing parameter"
 msgstr "fehler Parameter"
 
-#: option.c:3590
+#: option.c:3690
 msgid "error"
 msgstr "Fehler"
 
-#: option.c:3592
+#: option.c:3692
 #, fuzzy, c-format
 msgid " at line %d of %s"
 msgstr "%s in Zeile %d von %%s"
 
-#: option.c:3656 tftp.c:648
+#: option.c:3756 tftp.c:661
 #, c-format
 msgid "cannot read %s: %s"
 msgstr "kann %s nicht lesen: %s"
 
-#: option.c:3823 option.c:3859
+#: option.c:3923 option.c:3959
 #, c-format
 msgid "read %s"
 msgstr "%s gelesen"
 
-#: option.c:3915
+#: option.c:4015
 msgid "junk found in command line"
 msgstr "Mist in der Kommandozeile gefunden"
 
-#: option.c:3950
+#: option.c:4050
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr "Dnsmasq Version %s  %s\n"
 
-#: option.c:3951
+#: option.c:4051
 #, c-format
 msgid ""
 "Compile time options: %s\n"
@@ -934,63 +957,63 @@
 "Kompilierungs-Optionen %s\n"
 "\n"
 
-#: option.c:3952
+#: option.c:4052
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr "Für diese Software wird ABSOLUT KEINE GARANTIE gewährt.\n"
 
 # FIXME: this must be one long string! -- MA
-#: option.c:3953
+#: option.c:4053
 #, c-format
 msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
 msgstr "Dnsmasq ist freie Software, und du bist willkommen es weiter zu verteilen\n"
 
-#: option.c:3954
+#: option.c:4054
 #, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr "unter den Bedingungen der GNU General Public Lizenz, Version 2 oder 3.\n"
 
-#: option.c:3965
+#: option.c:4065
 msgid "try --help"
 msgstr "versuchen Sie --help"
 
-#: option.c:3967
+#: option.c:4067
 msgid "try -w"
 msgstr "versuchen Sie -w"
 
-#: option.c:3969
+#: option.c:4069
 #, c-format
 msgid "bad command line options: %s"
 msgstr "unzulässige Optionen auf der Befehlszeile: %s"
 
-#: option.c:4018
+#: option.c:4118
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "kann Hostnamen nicht ermitteln: %s"
 
-#: option.c:4046
+#: option.c:4146
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr "mit -n/--no-poll ist nur eine resolv.conf-Datei zulässig."
 
-#: option.c:4056
+#: option.c:4156
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr "Um die Domäne zu lesen, muss genau eine resolv.conf-Datei verwendet werden."
 
-#: option.c:4059 network.c:1039 dhcp.c:794
+#: option.c:4159 network.c:1178 dhcp.c:768
 #, c-format
 msgid "failed to read %s: %s"
 msgstr "konnte %s nicht lesen: %s"
 
-#: option.c:4076
+#: option.c:4176
 #, c-format
 msgid "no search directive found in %s"
 msgstr "keine \"search\"-Anweisung in %s gefunden"
 
-#: option.c:4097
+#: option.c:4197
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr "Es muss eine standard Domain gesetzt sein, wenn --dhcp-fqdn gesetzt ist"
 
-#: option.c:4101
+#: option.c:4201
 msgid "syntax check OK"
 msgstr "Syntaxprüfung OK"
 
@@ -1009,103 +1032,108 @@
 msgid "possible DNS-rebind attack detected: %s"
 msgstr "möglichen DNS-Rebind-Angriff entdeckt: %s"
 
-#: network.c:414
+#: forward.c:1216
+#, fuzzy, c-format
+msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+msgstr "Höchstzahl nebenläufiger DNS-Anfragen (%s voreingestellt)."
+
+#: network.c:551
 #, c-format
 msgid "failed to create listening socket for %s: %s"
 msgstr "Konnte Empfangs-Socket für %s: %s nicht erzeugen"
 
-#: network.c:743
+#: network.c:882
 #, fuzzy, c-format
 msgid "interface %s failed to join DHCPv6 multicast group: %s"
 msgstr "Konnte DHCPv6-Multicast-Gruppe nicht beitreten: %s"
 
-#: network.c:937
+#: network.c:1076
 #, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr "konnte nicht an Server-Socket für %s binden: %s"
 
-#: network.c:974
+#: network.c:1113
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr "ignoriere Namensserver %s - lokale Schnittstelle"
 
-#: network.c:985
+#: network.c:1124
 #, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr "ignoriere Namensserver %s - kann Socket nicht erzeugen/binden: %s"
 
 # FIXME: this isn't translatable - always provide full strings, do not assemble yourself! -- MA
-#: network.c:1002
+#: network.c:1141
 msgid "unqualified"
 msgstr "unqualifiziert"
 
-#: network.c:1002
+#: network.c:1141
 msgid "names"
 msgstr "Namen"
 
-#: network.c:1004
+#: network.c:1143
 msgid "default"
 msgstr "Standard"
 
-#: network.c:1006
+#: network.c:1145
 msgid "domain"
 msgstr "Domain"
 
-#: network.c:1009
+#: network.c:1148
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr "Benutze lokale Adressen nur für %s %s"
 
-#: network.c:1011
+#: network.c:1150
 #, c-format
 msgid "using standard nameservers for %s %s"
 msgstr "Benutze standard Namensserver für %s %s"
 
-#: network.c:1013
+#: network.c:1152
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr "Benutze Namensserver %s#%d für %s %s"
 
-#: network.c:1016
+#: network.c:1155
 #, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr "Benutze Namensserver %s#%d(via %s)"
 
-#: network.c:1018
+#: network.c:1157
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr "Benutze Namensserver %s#%d"
 
-#: dnsmasq.c:131
+#: dnsmasq.c:134
 msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
 msgstr "TFTP-Server nicht verfügbar, setzen Sie HAVE_TFTP in src/config.h"
 
-#: dnsmasq.c:136
+#: dnsmasq.c:139
 msgid "Cannot use --conntrack AND --query-port"
 msgstr "Kann nicht --conntrack UND --query-port einsetzen"
 
-#: dnsmasq.c:139
+#: dnsmasq.c:142
 msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
 msgstr "Conntrack-Unterstützung nicht verfügbar: setze HAVE_CONNTRACK in src/config.h"
 
-#: dnsmasq.c:144
+#: dnsmasq.c:147
 msgid "asychronous logging is not available under Solaris"
 msgstr "asynchrone Protokollierung unter Solaris nicht verfügbar"
 
-#: dnsmasq.c:149
+#: dnsmasq.c:152
 msgid "asychronous logging is not available under Android"
 msgstr "Asynchrone Protokollierung unter Android nicht verfügbar"
 
-#: dnsmasq.c:154
+#: dnsmasq.c:157
 #, fuzzy
 msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
 msgstr "DBus nicht verfügbar: setzen Sie HAVE_DBUS in src/config.h"
 
-#: dnsmasq.c:164
+#: dnsmasq.c:167
 msgid "zone serial must be configured in --auth-soa"
 msgstr ""
 
-#: dnsmasq.c:186
+#: dnsmasq.c:185
 msgid "dhcp-range constructor not available on this platform"
 msgstr ""
 
@@ -1123,434 +1151,439 @@
 msgid "unknown interface %s"
 msgstr "unbekannte Schnittstelle %s"
 
-#: dnsmasq.c:274 dnsmasq.c:860
+#: dnsmasq.c:275 dnsmasq.c:870
 #, c-format
 msgid "DBus error: %s"
 msgstr "DBus-Fehler: %s"
 
-#: dnsmasq.c:277
+#: dnsmasq.c:278
 msgid "DBus not available: set HAVE_DBUS in src/config.h"
 msgstr "DBus nicht verfügbar: setzen Sie HAVE_DBUS in src/config.h"
 
-#: dnsmasq.c:305
+#: dnsmasq.c:306
 #, c-format
 msgid "unknown user or group: %s"
 msgstr "Unbekannter Benutzer oder Gruppe: %s"
 
-#: dnsmasq.c:360
+#: dnsmasq.c:361
 #, c-format
 msgid "cannot chdir to filesystem root: %s"
 msgstr "kann nicht ins Wurzelverzeichnis des Dateisystems wechseln: %s"
 
 # FIXME: this and the next would need commas after the version
-#: dnsmasq.c:597
+#: dnsmasq.c:598
 #, c-format
 msgid "started, version %s DNS disabled"
 msgstr "gestartet, Version %s, DNS abgeschaltet"
 
-#: dnsmasq.c:599
+#: dnsmasq.c:600
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr "gestartet, Version %s, Cachegröße %d"
 
-#: dnsmasq.c:601
+#: dnsmasq.c:602
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr "Gestartet, Version %s Cache deaktiviert"
 
-#: dnsmasq.c:603
+#: dnsmasq.c:604
 #, c-format
 msgid "compile time options: %s"
 msgstr "Übersetzungsoptionen: %s"
 
-#: dnsmasq.c:609
+#: dnsmasq.c:610
 msgid "DBus support enabled: connected to system bus"
 msgstr "DBus-Unterstützung eingeschaltet: mit Systembus verbunden"
 
-#: dnsmasq.c:611
+#: dnsmasq.c:612
 msgid "DBus support enabled: bus connection pending"
 msgstr "DBus-Unterstützung eingeschaltet: warte auf Systembus-Verbindung"
 
-#: dnsmasq.c:616
+#: dnsmasq.c:617
 #, c-format
 msgid "warning: failed to change owner of %s: %s"
 msgstr "Warnung: konnte den Besitzer von %s nicht ändern: %s"
 
-#: dnsmasq.c:620
+#: dnsmasq.c:621
 msgid "setting --bind-interfaces option because of OS limitations"
 msgstr "Aktiviere --bind-interfaces wegen Einschränkungen des Betriebssystems"
 
-#: dnsmasq.c:625
+#: dnsmasq.c:626
 #, c-format
 msgid "warning: interface %s does not currently exist"
 msgstr "Warnung: Schnittstelle %s existiert derzeit nicht"
 
-#: dnsmasq.c:630
+#: dnsmasq.c:631
 msgid "warning: ignoring resolv-file flag because no-resolv is set"
 msgstr "Warnung: Ignoriere \"resolv-file\", weil \"no-resolv\" aktiv ist"
 
-#: dnsmasq.c:633
+#: dnsmasq.c:634
 msgid "warning: no upstream servers configured"
 msgstr "Warnung: keine vorgelagerten (Upstream) Server konfiguriert"
 
-#: dnsmasq.c:637
+#: dnsmasq.c:638
 #, c-format
 msgid "asynchronous logging enabled, queue limit is %d messages"
 msgstr "asynchrone Protokollierung eingeschaltet, Warteschlange fasst %d Nachrichten"
 
-#: dnsmasq.c:652
+#: dnsmasq.c:659
 msgid "IPv6 router advertisement enabled"
 msgstr "IPv6-Router-Advertisement aktiviert"
 
 # FIXME: this and the next few must be full strings to be translatable - do not assemble in code"
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 msgid "root is "
 msgstr "Wurzel ist"
 
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 msgid "enabled"
 msgstr "Aktiviert"
 
-#: dnsmasq.c:671
+#: dnsmasq.c:678
 msgid "secure mode"
 msgstr "sicherer Modus"
 
-#: dnsmasq.c:697
+#: dnsmasq.c:704
 #, c-format
 msgid "restricting maximum simultaneous TFTP transfers to %d"
 msgstr "Begrenze gleichzeitige TFTP-Übertragungen auf maximal %d"
 
-#: dnsmasq.c:862
+#: dnsmasq.c:872
 msgid "connected to system DBus"
 msgstr "Mit System-DBus verbunden"
 
-#: dnsmasq.c:1007
+#: dnsmasq.c:1017
 #, c-format
 msgid "cannot fork into background: %s"
 msgstr "kann nicht in den Hintergrund abspalten: %s"
 
-#: dnsmasq.c:1010
+#: dnsmasq.c:1020
 #, c-format
 msgid "failed to create helper: %s"
 msgstr "kann Helfer nicht erzeugen: %s"
 
-#: dnsmasq.c:1013
+#: dnsmasq.c:1023
 #, c-format
 msgid "setting capabilities failed: %s"
 msgstr "kann \"capabilities\" nicht setzen: %s"
 
-#: dnsmasq.c:1016
+#: dnsmasq.c:1026
 #, c-format
 msgid "failed to change user-id to %s: %s"
 msgstr "Kann nicht Benutzerrechte %s annehmen: %s"
 
-#: dnsmasq.c:1019
+#: dnsmasq.c:1029
 #, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr "Kann nicht Gruppenrechte %s annehmen: %s"
 
-#: dnsmasq.c:1022
+#: dnsmasq.c:1032
 #, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr "kann die Prozessidentifikations-(PID)-Datei %s nicht öffnen: %s"
 
-#: dnsmasq.c:1025
+#: dnsmasq.c:1035
 #, c-format
 msgid "cannot open log %s: %s"
 msgstr "Kann Logdatei %s nicht öffnen: %s"
 
-#: dnsmasq.c:1028
+#: dnsmasq.c:1038
 #, c-format
 msgid "failed to load Lua script: %s"
 msgstr "Konnte Lua-Script nicht laden: %s"
 
-#: dnsmasq.c:1031
+#: dnsmasq.c:1041
 #, c-format
 msgid "TFTP directory %s inaccessible: %s"
 msgstr ""
 
-#: dnsmasq.c:1095
+#: dnsmasq.c:1105
 #, c-format
 msgid "script process killed by signal %d"
 msgstr "Scriptprozess durch Signal %d getötet"
 
-#: dnsmasq.c:1099
+#: dnsmasq.c:1109
 #, c-format
 msgid "script process exited with status %d"
 msgstr "Scriptprozess hat sich mit Status %d beendet"
 
-#: dnsmasq.c:1103
+#: dnsmasq.c:1113
 #, c-format
 msgid "failed to execute %s: %s"
 msgstr "konnte %s nicht ausführen: %s"
 
-#: dnsmasq.c:1148
+#: dnsmasq.c:1158
 msgid "exiting on receipt of SIGTERM"
 msgstr "beende nach Empfang von SIGTERM"
 
-#: dnsmasq.c:1176
+#: dnsmasq.c:1186
 #, c-format
 msgid "failed to access %s: %s"
 msgstr "konnte auf %s nicht zugreifen: %s"
 
-#: dnsmasq.c:1206
+#: dnsmasq.c:1216
 #, c-format
 msgid "reading %s"
 msgstr "lese %s"
 
-#: dnsmasq.c:1217
+#: dnsmasq.c:1227
 #, c-format
 msgid "no servers found in %s, will retry"
 msgstr "keine Server in %s gefunden, werde es später neu versuchen"
 
-#: dhcp.c:49
+#: dhcp.c:53
 #, c-format
 msgid "cannot create DHCP socket: %s"
 msgstr "kann DHCP-Socket nicht erzeugen: %s"
 
-#: dhcp.c:64
+#: dhcp.c:68
 #, c-format
 msgid "failed to set options on DHCP socket: %s"
 msgstr "kann Optionen für DHCP-Socket nicht setzen: %s"
 
-#: dhcp.c:77
+#: dhcp.c:89
 #, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
 msgstr "kann SO_REUSE{ADDR|PORT} für DHCP-Socket nicht aktivieren: %s"
 
-#: dhcp.c:89
+#: dhcp.c:101
 #, c-format
 msgid "failed to bind DHCP server socket: %s"
 msgstr "kann nicht an DHCP-Server-Socket binden: %s"
 
-#: dhcp.c:115
+#: dhcp.c:127
 #, c-format
 msgid "cannot create ICMP raw socket: %s."
 msgstr "kann ICMP-Rohdaten-Socket nicht erzeugen: %s."
 
-#: dhcp.c:225
+#: dhcp.c:239
 #, c-format
 msgid "unknown interface %s in bridge-interface"
 msgstr "unbekannte Schnittstelle %s in bridge-interface"
 
-#: dhcp.c:250
+#: dhcp.c:278
 #, c-format
 msgid "DHCP packet received on %s which has no address"
 msgstr "DHCP-Paket ohne Adresse an Schnittstelle %s empfangen"
 
-#: dhcp.c:457
+#: dhcp.c:505
 #, c-format
 msgid "DHCP range %s -- %s is not consistent with netmask %s"
 msgstr "DHCP-Bereich %s - %s passt nicht zur Netzmaske %s"
 
-#: dhcp.c:832
+#: dhcp.c:806
 #, c-format
 msgid "bad line at %s line %d"
 msgstr "ungültige Zeile %2$d in Datei %1$s"
 
-#: dhcp.c:875
+#: dhcp.c:849
 #, c-format
 msgid "ignoring %s line %d, duplicate name or IP address"
 msgstr "ignoriere %s Zeile %d, doppelter Name oder doppelte IP-Adresse"
 
+#: dhcp.c:993 rfc3315.c:2047
+#, c-format
+msgid "DHCP relay %s -> %s"
+msgstr ""
+
 #: lease.c:61
 #, c-format
 msgid "cannot open or create lease file %s: %s"
 msgstr "kann Lease-Datei %s nicht öffnen: %s"
 
-#: lease.c:133
+#: lease.c:134
 msgid "too many stored leases"
 msgstr "zu viele Leases gespeichert"
 
-#: lease.c:164
+#: lease.c:165
 #, c-format
 msgid "cannot run lease-init script %s: %s"
 msgstr "kann Lease-Start-Skript %s nicht ausführen: %s"
 
-#: lease.c:170
+#: lease.c:171
 #, c-format
 msgid "lease-init script returned exit code %s"
 msgstr "Lease-Start-Skript beendete sich mit Code %s"
 
 # FIXME: This should be %u s also in English according to NIST and SI rules. -- MA
-#: lease.c:339
+#: lease.c:342
 #, c-format
 msgid "failed to write %s: %s (retry in %us)"
 msgstr "Konnte %s nicht schreiben: %s (Neuversuch in %u s)"
 
-#: lease.c:843
+#: lease.c:871
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr "Ignoriere Domäne %s für DHCP-Hostnamen %s"
 
 # FIXME: this and the next few are not translatable. Please provide full
 # strings, do not programmatically assemble them.
-#: rfc2131.c:337
+#: rfc2131.c:338
 #, c-format
 msgid "no address range available for DHCP request %s %s"
 msgstr "Kein verfügbarer DHCP-Bereich für Anfrage %s %s"
 
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "with subnet selector"
 msgstr "mit Subnetz-Wähler"
 
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "via"
 msgstr "via"
 
-#: rfc2131.c:350
+#: rfc2131.c:351
 #, c-format
 msgid "%u available DHCP subnet: %s/%s"
 msgstr "%u verfügbare(s) DHCP-Subnetz: %s/%s"
 
-#: rfc2131.c:353 rfc3315.c:272
+#: rfc2131.c:354 rfc3315.c:292
 #, c-format
 msgid "%u available DHCP range: %s -- %s"
 msgstr "%u verfügbare(r) DHCP-Bereich: %s - %s"
 
-# FIXME: do not programmatically assemble strings - untranslatable
-#: rfc2131.c:382
-msgid "disabled"
-msgstr "deaktiviert"
-
-#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771
-#: rfc3315.c:1017
-msgid "ignored"
-msgstr "ignoriert"
-
-#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814
-msgid "address in use"
-msgstr "Adresse in Nutzung"
-
-#: rfc2131.c:452 rfc2131.c:1007
-msgid "no address available"
-msgstr "Keine Adresse verfügbar"
-
-#: rfc2131.c:459 rfc2131.c:1154
-msgid "wrong network"
-msgstr "Falsches Netzwerk"
-
-#: rfc2131.c:474
-msgid "no address configured"
-msgstr "Keine Adresse konfiguriert"
-
-#: rfc2131.c:480 rfc2131.c:1204
-msgid "no leases left"
-msgstr "Keine Leases übrig"
-
-#: rfc2131.c:576 rfc3315.c:428
-#, c-format
-msgid "%u client provides name: %s"
-msgstr "%u Klient stellt Name bereit: %s"
-
-#: rfc2131.c:731
+#: rfc2131.c:465
 #, c-format
 msgid "%u vendor class: %s"
 msgstr "%u \"Vendor class\": %s"
 
-#: rfc2131.c:733
+#: rfc2131.c:467
 #, c-format
 msgid "%u user class: %s"
 msgstr "%u Benutzerklasse: %s"
 
+# FIXME: do not programmatically assemble strings - untranslatable
+#: rfc2131.c:494
+msgid "disabled"
+msgstr "deaktiviert"
+
+#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813
+#: rfc3315.c:1082
+msgid "ignored"
+msgstr "ignoriert"
+
+#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863
+msgid "address in use"
+msgstr "Adresse in Nutzung"
+
+#: rfc2131.c:564 rfc2131.c:1015
+msgid "no address available"
+msgstr "Keine Adresse verfügbar"
+
+#: rfc2131.c:571 rfc2131.c:1162
+msgid "wrong network"
+msgstr "Falsches Netzwerk"
+
+#: rfc2131.c:586
+msgid "no address configured"
+msgstr "Keine Adresse konfiguriert"
+
+#: rfc2131.c:592 rfc2131.c:1212
+msgid "no leases left"
+msgstr "Keine Leases übrig"
+
+#: rfc2131.c:687 rfc3315.c:466
+#, c-format
+msgid "%u client provides name: %s"
+msgstr "%u Klient stellt Name bereit: %s"
+
 #: rfc2131.c:792
 msgid "PXE BIS not supported"
 msgstr "PXE BIS nicht unterstützt"
 
-#: rfc2131.c:923 rfc3315.c:1111
+#: rfc2131.c:931 rfc3315.c:1176
 #, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "schalte statische DHCP-Adresse %s für %s ab"
 
 # FIXME: do not assemble
-#: rfc2131.c:944
+#: rfc2131.c:952
 msgid "unknown lease"
 msgstr "Unbekannter Lease"
 
-#: rfc2131.c:976
+#: rfc2131.c:984
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr "benutze konfigurierte Adresse %s nicht, weil sie an %s verleast ist"
 
-#: rfc2131.c:986
+#: rfc2131.c:994
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr "benutze konfigurierte Adresse %s nicht, weil sie von Server/Relais verwendet wird"
 
-#: rfc2131.c:989
+#: rfc2131.c:997
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr "benutze konfigurierte Adresse %s nicht, weil sie zuvor abgelehnt wurde"
 
 # FIXME: do not assemble
-#: rfc2131.c:1005 rfc2131.c:1197
+#: rfc2131.c:1013 rfc2131.c:1205
 msgid "no unique-id"
 msgstr "Keine eindeutige ID"
 
-#: rfc2131.c:1092
+#: rfc2131.c:1100
 msgid "wrong server-ID"
 msgstr "Falsche Server-ID"
 
-#: rfc2131.c:1111
+#: rfc2131.c:1119
 msgid "wrong address"
 msgstr "Falsche Adresse"
 
-#: rfc2131.c:1129 rfc3315.c:911
+#: rfc2131.c:1137 rfc3315.c:959
 msgid "lease not found"
 msgstr "Lease nicht gefunden"
 
-#: rfc2131.c:1162
+#: rfc2131.c:1170
 msgid "address not available"
 msgstr "Adresse nicht verfügbar"
 
-#: rfc2131.c:1173
+#: rfc2131.c:1181
 msgid "static lease available"
 msgstr "Statischer Lease verfügbar"
 
-#: rfc2131.c:1177
+#: rfc2131.c:1185
 msgid "address reserved"
 msgstr "Adresse reserviert"
 
-#: rfc2131.c:1185
+#: rfc2131.c:1193
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr "Gebe Lease von %2$s an %1$s auf"
 
-#: rfc2131.c:1679
+#: rfc2131.c:1701
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr "%u Name der Bootdatei: %s"
 
-#: rfc2131.c:1688
+#: rfc2131.c:1710
 #, c-format
 msgid "%u server name: %s"
 msgstr "%u Servername: %s"
 
-#: rfc2131.c:1696
+#: rfc2131.c:1718
 #, c-format
 msgid "%u next server: %s"
 msgstr "%u nächster Server: %s"
 
-#: rfc2131.c:1699
+#: rfc2131.c:1721
 #, c-format
 msgid "%u broadcast response"
 msgstr "%u Antwort per Rundsendung"
 
-#: rfc2131.c:1762
+#: rfc2131.c:1784
 #, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr "kann DHCP/BOOTP-Opition %d nicht setzen: kein Platz mehr im Paket"
 
-#: rfc2131.c:2002
+#: rfc2131.c:2025
 msgid "PXE menu too large"
 msgstr "PXE-Menüeintrag zu groß"
 
-#: rfc2131.c:2139 rfc3315.c:1332
+#: rfc2131.c:2162 rfc3315.c:1420
 #, c-format
 msgid "%u requested options: %s"
 msgstr "%u angeforderte Optionen: %s"
 
-#: rfc2131.c:2415
+#: rfc2131.c:2442
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr "Kann RFC3925-Option nicht senden: zu viele Optionen für Unternehmen Nr. %d"
@@ -1560,7 +1593,7 @@
 msgid "cannot create netlink socket: %s"
 msgstr "kann Netlink-Socket nicht erzeugen: %s"
 
-#: netlink.c:354
+#: netlink.c:363
 #, c-format
 msgid "netlink returns error: %s"
 msgstr "Netlink liefert Fehler %s"
@@ -1569,53 +1602,53 @@
 msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
 msgstr "Versuch, via DBus eine IPv6-Serveradresse zu setzen: keine IPv6-Unterstützung"
 
-#: dbus.c:308 dbus.c:504
+#: dbus.c:523
 msgid "setting upstream servers from DBus"
 msgstr "vorgelagerte Server von DBus gesetzt"
 
-#: dbus.c:561
+#: dbus.c:570
 msgid "could not register a DBus message handler"
 msgstr "konnte Steuerungsprogramm für DBus-Nachrichten nicht anmelden"
 
-#: bpf.c:197
+#: bpf.c:245
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr "konnte DHCP-BPF-Socket nicht einrichten: %s"
 
-#: bpf.c:225
+#: bpf.c:273
 #, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr "DHCP-Anfrage für nicht unterstützen Hardwaretyp (%d) auf %s empfangen"
 
-#: helper.c:145
+#: helper.c:151
 msgid "lease() function missing in Lua script"
 msgstr "Die Funktion lease() fehlt im Lua-Script"
 
-#: tftp.c:290
+#: tftp.c:303
 msgid "unable to get free port for TFTP"
 msgstr "konnte keinen freien Port für TFTP bekommen"
 
-#: tftp.c:306
+#: tftp.c:319
 #, c-format
 msgid "unsupported request from %s"
 msgstr "nicht unterstützte Anfrage von %s"
 
-#: tftp.c:420
+#: tftp.c:433
 #, c-format
 msgid "file %s not found"
 msgstr "Datei %s nicht gefunden"
 
-#: tftp.c:529
+#: tftp.c:542
 #, c-format
 msgid "error %d %s received from %s"
 msgstr "Fehler %d %s von %s empfangen"
 
-#: tftp.c:571
+#: tftp.c:584
 #, c-format
 msgid "failed sending %s to %s"
 msgstr "konnte %s nicht an %s senden"
 
-#: tftp.c:571
+#: tftp.c:584
 #, c-format
 msgid "sent %s to %s"
 msgstr "%s an %s verschickt"
@@ -1639,181 +1672,200 @@
 msgid "Conntrack connection mark retrieval failed: %s"
 msgstr "\"Conntrack connection mark\"-Abruf fehlgeschlagen: %s"
 
-#: dhcp6.c:49
+#: dhcp6.c:59
 #, c-format
 msgid "cannot create DHCPv6 socket: %s"
 msgstr "Kann DHCPv6-Socket nicht erzeugen: %s"
 
-#: dhcp6.c:62
+#: dhcp6.c:80
 #, fuzzy, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s"
 msgstr "kann SO_REUSE{ADDR|PORT} für DHCP-Socket nicht aktivieren: %s"
 
-#: dhcp6.c:74
+#: dhcp6.c:92
 #, c-format
 msgid "failed to bind DHCPv6 server socket: %s"
 msgstr "Kann nicht an DHCPv6-Server-Socket binden: %s"
 
-#: rfc3315.c:135
+#: rfc3315.c:149
 #, c-format
 msgid "no address range available for DHCPv6 request from relay at %s"
 msgstr "Kein Adressbereich verfügbar für die DHCPv6-Anfrage vom Relay bei %s"
 
-#: rfc3315.c:144
+#: rfc3315.c:158
 #, c-format
 msgid "no address range available for DHCPv6 request via %s"
 msgstr "Kein Adressbereich verfügbar für die DHCPv6-Anfrage via %s"
 
-#: rfc3315.c:269
+#: rfc3315.c:289
 #, c-format
 msgid "%u available DHCPv6 subnet: %s/%d"
 msgstr "%u verfügbare(s) DHCPv6-Subnetz: %s/%d"
 
-#: rfc3315.c:350
+#: rfc3315.c:370
 #, fuzzy, c-format
 msgid "%u vendor class: %u"
 msgstr "%u \"Vendor class\": %s"
 
+#: rfc3315.c:418
+#, fuzzy, c-format
+msgid "%u client MAC address: %s"
+msgstr "%u Klient stellt Name bereit: %s"
+
 # FIXME: do not assemble
-#: rfc3315.c:609
+#: rfc3315.c:650
 #, fuzzy, c-format
 msgid "unknown prefix-class %d"
 msgstr "Unbekannter Lease"
 
-#: rfc3315.c:741 rfc3315.c:854
+#: rfc3315.c:781 rfc3315.c:903
 msgid "success"
 msgstr ""
 
-#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864
+#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913
 #, fuzzy
 msgid "no addresses available"
 msgstr "Keine Adresse verfügbar"
 
-#: rfc3315.c:806
+#: rfc3315.c:855
 #, fuzzy
 msgid "address unavailable"
 msgstr "Adresse nicht verfügbar"
 
-#: rfc3315.c:841
+#: rfc3315.c:890
 msgid "not on link"
 msgstr ""
 
-#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150
+#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215
 msgid "no binding found"
 msgstr ""
 
-#: rfc3315.c:948
+#: rfc3315.c:1001
 msgid "deprecated"
 msgstr ""
 
-#: rfc3315.c:951
+#: rfc3315.c:1006
 #, fuzzy
 msgid "address invalid"
 msgstr "Adresse in Nutzung"
 
-#: rfc3315.c:992
+#: rfc3315.c:1048
 msgid "confirm failed"
 msgstr ""
 
-#: rfc3315.c:1003
+#: rfc3315.c:1059
 #, fuzzy
 msgid "all addresses still on link"
 msgstr "Fehlerhafte Adresse in %s Zeile %d"
 
-#: rfc3315.c:1082
+#: rfc3315.c:1147
 msgid "release received"
 msgstr ""
 
+#: rfc3315.c:2038
+msgid "Cannot multicast to DHCPv6 server without correct interface"
+msgstr ""
+
 #: dhcp-common.c:145
 #, c-format
 msgid "Ignoring duplicate dhcp-option %d"
 msgstr "Ignoriere doppelt vorhandene DHCP-Option %d"
 
-#: dhcp-common.c:215
+#: dhcp-common.c:222
 #, c-format
 msgid "%u tags: %s"
 msgstr "%u Marken: %s"
 
-#: dhcp-common.c:296
+#: dhcp-common.c:407
 #, c-format
 msgid "%s has more than one address in hostsfile, using %s for DHCP"
 msgstr "%s hat mehr als eine Adresse in hosts-Datei, benutze %s für DHCP"
 
-#: dhcp-common.c:319
+#: dhcp-common.c:430
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr "doppelte IP-Adresse %s (%s) in \"dhcp-config\"-Anweisung"
 
-#: dhcp-common.c:367
+#: dhcp-common.c:484
 #, fuzzy, c-format
 msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s"
 msgstr "kann SO_REUSE{ADDR|PORT} für DHCP-Socket nicht aktivieren: %s"
 
-#: dhcp-common.c:489
+#: dhcp-common.c:606
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr "Bekannte DHCP-Optionen:\n"
 
-#: dhcp-common.c:500
+#: dhcp-common.c:617
 #, c-format
 msgid "Known DHCPv6 options:\n"
 msgstr "Bekannte DHCPv6-Optionen:\n"
 
-#: dhcp-common.c:693
+#: dhcp-common.c:814
 msgid ", prefix deprecated"
 msgstr ""
 
-#: dhcp-common.c:696
+#: dhcp-common.c:817
 #, c-format
 msgid ", lease time "
 msgstr ""
 
-#: dhcp-common.c:727
+#: dhcp-common.c:849
 #, c-format
 msgid "%s stateless on %s%.0s%.0s%s"
 msgstr ""
 
-#: dhcp-common.c:729
+#: dhcp-common.c:851
 #, fuzzy, c-format
 msgid "%s, static leases only on %.0s%s%s%.0s"
 msgstr "DHCP, nur statische Leases auf %.0s%s, Lease-Zeit %s"
 
-#: dhcp-common.c:731
+#: dhcp-common.c:853
 #, fuzzy, c-format
 msgid "%s, proxy on subnet %.0s%s%.0s%.0s"
 msgstr "DHCP, Proxy im Subnetz %.0s%s%.0s"
 
-#: dhcp-common.c:732
+#: dhcp-common.c:854
 #, fuzzy, c-format
 msgid "%s, IP range %s -- %s%s%.0s"
 msgstr "DHCP, IP-Bereich %s - %s, Lease-Zeit %s "
 
-#: dhcp-common.c:739
+#: dhcp-common.c:861
 #, c-format
 msgid "DHCPv4-derived IPv6 names on %s%s"
 msgstr ""
 
-#: dhcp-common.c:742
+#: dhcp-common.c:864
 #, fuzzy, c-format
 msgid "router advertisement on %s%s"
 msgstr "Router-Advertisment nur auf %.0s%s, Lebenszeit %s"
 
-#: radv.c:87
+#: dhcp-common.c:875
+#, c-format
+msgid "DHCP relay from %s to %s via %s"
+msgstr ""
+
+#: dhcp-common.c:877
+#, c-format
+msgid "DHCP relay from %s to %s"
+msgstr ""
+
+#: radv.c:93
 #, c-format
 msgid "cannot create ICMPv6 socket: %s"
 msgstr "Kann ICMPv6-Socket nicht erzeugen: %s"
 
-#: auth.c:402
+#: auth.c:435
 #, fuzzy, c-format
 msgid "ignoring zone transfer request from %s"
 msgstr "nicht unterstützte Anfrage von %s"
 
-#: ipset.c:71
+#: ipset.c:95
 #, fuzzy, c-format
 msgid "failed to find kernel version: %s"
 msgstr "kann nicht an DHCP-Server-Socket binden: %s"
 
-#: ipset.c:90
+#: ipset.c:114
 #, fuzzy, c-format
 msgid "failed to create IPset control socket: %s"
 msgstr "konnte TFTP-Socket nicht erzeugen: %s"
diff --git a/po/es.po b/po/es.po
index e31ed32..9272015 100644
--- a/po/es.po
+++ b/po/es.po
@@ -4,12 +4,12 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: dnsmasq 2.24\n"
+"Project-Id-Version: dnsmasq 2.67\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-06-18 12:24+0100\n"
-"PO-Revision-Date: 2005-10-07 11:04+0100\n"
-"Last-Translator: Christopher Chatham <chrislinux@gmail.com>\n"
-"Language-Team: Spanish <es@li.org>\n"
+"PO-Revision-Date: 2013-10-04 13:24+0100\n"
+"Last-Translator: Vicente Soriano <victek@gmail.com>\n"
+"Language-Team:\n"
 "Language: es\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
@@ -21,17 +21,17 @@
 msgid "failed to load names from %s: %s"
 msgstr "no se pudo cargar nombres desde %s: %s"
 
-#: cache.c:834 dhcp.c:845
+#: cache.c:834 dhcp.c:819
 #, fuzzy, c-format
 msgid "bad address at %s line %d"
 msgstr "dirección errónea en %s línea %d"
 
-#: cache.c:885 dhcp.c:861
+#: cache.c:885 dhcp.c:835
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "nombre erróneo en %s línea %d"
 
-#: cache.c:892 dhcp.c:936
+#: cache.c:892 dhcp.c:910
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "direcciónes %s - %d leídas"
@@ -40,37 +40,37 @@
 msgid "cleared cache"
 msgstr "el caché fue liberado"
 
-#: cache.c:1016
+#: cache.c:984
 #, c-format
 msgid "No IPv4 address found for %s"
 msgstr ""
 
-#: cache.c:1093
+#: cache.c:1061
 #, c-format
 msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
-msgstr "%s es un CNAME, no se le está dando al arriendo DHCP de %s"
+msgstr "%s es un CNAME, no se le está dando concesión DHCP de %s"
 
-#: cache.c:1117
+#: cache.c:1085
 #, c-format
 msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
-msgstr "no otorgando nombre %s al arriendo DHCP de %s porque el nombre existe en %s con dirección %s"
+msgstr "no otorgando nombre %s a concesión DHCP de %s porque el nombre existe en %s con dirección %s"
 
-#: cache.c:1162
+#: cache.c:1130
 #, c-format
 msgid "time %lu"
 msgstr "tiempo %lu"
 
-#: cache.c:1163
+#: cache.c:1131
 #, fuzzy, c-format
 msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
 msgstr "tamaño de caché %d, %d/%d inserciónes de caché reutilizaron objetos no vencidos."
 
-#: cache.c:1165
+#: cache.c:1133
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr "búsquedas reenviadas %u, búsquedas respondidas localmente %u"
 
-#: cache.c:1188
+#: cache.c:1156
 #, c-format
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr "servidor %s#%d: búsquedas enviadas %u, reintentadas o fallidas %u"
@@ -80,568 +80,580 @@
 msgid "failed to seed the random number generator: %s"
 msgstr "no se pudo crear valor semilla para el generador de números aleatorios: %s"
 
-#: util.c:189
+#: util.c:192
 #, fuzzy
 msgid "failed to allocate memory"
 msgstr "no se pudo asignar memoria"
 
-#: util.c:227 option.c:531
+#: util.c:230 option.c:540
 msgid "could not get memory"
 msgstr "no se pudo adquirir memoria"
 
-#: util.c:237
+#: util.c:240
 #, fuzzy, c-format
 msgid "cannot create pipe: %s"
 msgstr "no se puede crear pipe: %s"
 
-#: util.c:245
+#: util.c:248
 #, fuzzy, c-format
 msgid "failed to allocate %d bytes"
 msgstr "no se pudo asignar %d bytes"
 
-#: util.c:400
+#: util.c:403
 #, c-format
 msgid "infinite"
 msgstr "infinito"
 
-#: option.c:286
+#: option.c:292
 msgid "Specify local address(es) to listen on."
 msgstr "Especificar dirección(es) locales dónde escuchar."
 
-#: option.c:287
+#: option.c:293
 msgid "Return ipaddr for all hosts in specified domains."
 msgstr "Retornar ipaddr (dirección IP) para todos los hosts en los dominios especificados."
 
-#: option.c:288
+#: option.c:294
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr "Falsificar búsquedas reversas para rangos de dirección privados RFC1918."
 
-#: option.c:289
+#: option.c:295
 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
 msgstr "Tratar ipaddr (dirección IP) como NXDOMAIN (derrota comodín Verisign)."
 
-#: option.c:290
+#: option.c:296
 #, c-format
 msgid "Specify the size of the cache in entries (defaults to %s)."
 msgstr "Especificar tamaño de caché en cuanto a cantidad de objetos (%s por predeterminado)."
 
-#: option.c:291
+#: option.c:297
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr "Especificar archivo de configuración (%s por predeterminado)."
 
-#: option.c:292
+#: option.c:298
 msgid "Do NOT fork into the background: run in debug mode."
 msgstr "NO hacer un fork hacia el fondo: correr en modo debug."
 
-#: option.c:293
+#: option.c:299
 msgid "Do NOT forward queries with no domain part."
 msgstr "NO reenviar búsquedas sin parte de dominio."
 
-#: option.c:294
+#: option.c:300
 msgid "Return self-pointing MX records for local hosts."
 msgstr "Retornar expedientes MX auto-señaladores para hosts locales."
 
-#: option.c:295
+#: option.c:301
 msgid "Expand simple names in /etc/hosts with domain-suffix."
 msgstr "Expandir nombres simples en /etc/hosts con domain-suffix (sufijo de dominio)."
 
-#: option.c:296
+#: option.c:302
 msgid "Don't forward spurious DNS requests from Windows hosts."
 msgstr "No reenviar pedidos DNS falsos desde máquinas Windows."
 
-#: option.c:297
+#: option.c:303
 msgid "Enable DHCP in the range given with lease duration."
-msgstr "Habilitar DHCP dentro del rango brindado con duración del arriendo."
+msgstr "Habilitar DHCP dentro del rango brindado con duración de concesión."
 
-#: option.c:298
+#: option.c:304
 #, c-format
 msgid "Change to this group after startup (defaults to %s)."
 msgstr "Cambiar a este grupo después del inicio (%s por predeterminado)."
 
-#: option.c:299
+#: option.c:305
 msgid "Set address or hostname for a specified machine."
 msgstr "Fijar dirección o nombre de host para una máquina especificada."
 
-#: option.c:300
+#: option.c:306
 #, fuzzy
 msgid "Read DHCP host specs from file."
 msgstr "Leer especificaciones DHCP de host desde archivo"
 
-#: option.c:301
+#: option.c:307
 #, fuzzy
 msgid "Read DHCP option specs from file."
 msgstr "Leer opciones DHCP de host desde archivo"
 
-#: option.c:302
+#: option.c:308
 msgid "Evaluate conditional tag expression."
 msgstr "Evaluar expresión condicional de etiqueta."
 
-#: option.c:303
+#: option.c:309
 #, c-format
 msgid "Do NOT load %s file."
 msgstr "NO cargar archivo %s."
 
-#: option.c:304
+#: option.c:310
 #, c-format
 msgid "Specify a hosts file to be read in addition to %s."
 msgstr "Especificar un archivo de hosts para ser leído adicionalmente a %s."
 
-#: option.c:305
+#: option.c:311
 msgid "Specify interface(s) to listen on."
-msgstr "Especificar interface(s) donde escuchar."
+msgstr "Especificar interfase(s) donde escuchar."
 
-#: option.c:306
+#: option.c:312
 msgid "Specify interface(s) NOT to listen on."
-msgstr "Especificar interface(s) donde NO escuchar."
+msgstr "Especificar interfase(s) donde NO escuchar."
 
-#: option.c:307
+#: option.c:313
 #, fuzzy
 msgid "Map DHCP user class to tag."
 msgstr "Trazar clase de usuario DHCP a etiqueta."
 
-#: option.c:308
+#: option.c:314
 msgid "Map RFC3046 circuit-id to tag."
 msgstr "Trazar circuit-id (identificación de circuito) RFC3046 a etiqueta."
 
-#: option.c:309
+#: option.c:315
 msgid "Map RFC3046 remote-id to tag."
 msgstr "Trazar remote-id (identificación remota) RFC3046 a etiqueta."
 
-#: option.c:310
+#: option.c:316
 msgid "Map RFC3993 subscriber-id to tag."
 msgstr "Trazar subscriber-id (identificación de suscritor) RFC3993 a etiqueta."
 
-#: option.c:311
+#: option.c:317
 #, fuzzy
 msgid "Don't do DHCP for hosts with tag set."
 msgstr "No hacer DHCP para hosts con etiqueta fijada."
 
-#: option.c:312
+#: option.c:318
 #, fuzzy
 msgid "Force broadcast replies for hosts with tag set."
 msgstr "Forzar respuestas broadcast para hosts con etiqueta fijada."
 
-#: option.c:313
+#: option.c:319
 msgid "Do NOT fork into the background, do NOT run in debug mode."
 msgstr "NO hacer un fork hacia el fondo, NO correr en modo debug."
 
-#: option.c:314
+#: option.c:320
 msgid "Assume we are the only DHCP server on the local network."
 msgstr "Asumir que somos el único servidor DHCP en la red local."
 
-#: option.c:315
+#: option.c:321
 #, c-format
 msgid "Specify where to store DHCP leases (defaults to %s)."
-msgstr "Especificar donde almacenar arriendos DHCP (%s por predeterminado)."
+msgstr "Especificar donde almacenar concesión DHCP (%s por predeterminado)."
 
-#: option.c:316
+#: option.c:322
 msgid "Return MX records for local hosts."
 msgstr "Retornar expedientes MX para hosts locales."
 
-#: option.c:317
+#: option.c:323
 msgid "Specify an MX record."
 msgstr "Especificar un expediente MX."
 
-#: option.c:318
+#: option.c:324
 msgid "Specify BOOTP options to DHCP server."
 msgstr "Especificar opciones BOOTP a servidor DHCP."
 
-#: option.c:319
+#: option.c:325
 #, c-format
 msgid "Do NOT poll %s file, reload only on SIGHUP."
 msgstr "NO revisar archivo %s periódicamente, recargar solo con SIGHUP."
 
-#: option.c:320
+#: option.c:326
 msgid "Do NOT cache failed search results."
 msgstr "NO almacenar en caché resultados de búsquedas fallidas."
 
-#: option.c:321
+#: option.c:327
 #, c-format
 msgid "Use nameservers strictly in the order given in %s."
 msgstr "Usar servidores DNS estrictamente en el órden brindado en %s."
 
-#: option.c:322
+#: option.c:328
 #, fuzzy
 msgid "Specify options to be sent to DHCP clients."
 msgstr "Especificar opciones para ser enviadas a clientes DHCP."
 
-#: option.c:323
+#: option.c:329
 msgid "DHCP option sent even if the client does not request it."
 msgstr "Opción DHCP enviada aún si el cliente no la pide."
 
-#: option.c:324
+#: option.c:330
 msgid "Specify port to listen for DNS requests on (defaults to 53)."
 msgstr "Especificar puerto donde escuchar por búsquedas DNS (53 por predeterminado)."
 
-#: option.c:325
+#: option.c:331
 #, c-format
 msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
 msgstr "Tamaño máximo de paquetes UDP soportado para EDNS.0 (%s por predeterminado)."
 
-#: option.c:326
+#: option.c:332
 #, fuzzy
 msgid "Log DNS queries."
 msgstr "Bitacorear búsquedas DNS."
 
-#: option.c:327
+#: option.c:333
 #, fuzzy
 msgid "Force the originating port for upstream DNS queries."
-msgstr "Enforzar el puerto original para búsquedas DNS upstream."
+msgstr "Enforzar el puerto original para búsquedas DNS subida."
 
-#: option.c:328
+#: option.c:334
 msgid "Do NOT read resolv.conf."
 msgstr "NO leer resolv.conf."
 
-#: option.c:329
+#: option.c:335
 #, c-format
 msgid "Specify path to resolv.conf (defaults to %s)."
 msgstr "Especificar el path hacia resolv.conf (%s por predeterminado)."
 
-#: option.c:330
+#: option.c:336
 msgid "Specify address(es) of upstream servers with optional domains."
-msgstr "Especificar dirección(es) de servidores upstream con dominios opcionales."
+msgstr "Especificar dirección(es) de servidores subida con dominios opcionales."
 
-#: option.c:331
+#: option.c:337
 msgid "Never forward queries to specified domains."
 msgstr "Nunca reenviar búsquedas a dominios especificados."
 
-#: option.c:332
+#: option.c:338
 msgid "Specify the domain to be assigned in DHCP leases."
-msgstr "Especificar el dominio para ser asignado en arriendos DHCP."
+msgstr "Especificar el dominio para ser asignado en concesión DHCP."
 
-#: option.c:333
+#: option.c:339
 msgid "Specify default target in an MX record."
 msgstr "Especificar destino predeterminado en un expediente MX."
 
-#: option.c:334
+#: option.c:340
 msgid "Specify time-to-live in seconds for replies from /etc/hosts."
 msgstr "Especificar tiempo de vida en segundos para respuestas desde /etc/hosts."
 
-#: option.c:335
+#: option.c:341
 #, fuzzy
 msgid "Specify time-to-live in seconds for negative caching."
 msgstr "Especificar tiempo de vida en segundos para caché negativo."
 
-#: option.c:336
+#: option.c:342
 #, fuzzy
 msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
 msgstr "Especificar tiempo de vida en segundos para respuestas desde /etc/hosts."
 
-#: option.c:337
+#: option.c:343
 #, c-format
 msgid "Change to this user after startup. (defaults to %s)."
 msgstr "Cambiar a este usuario despues del inicio (%s por predeterminado)."
 
-#: option.c:338
+#: option.c:344
 #, fuzzy
 msgid "Map DHCP vendor class to tag."
 msgstr "Trazar clase de vendedor DHCP a etiqueta."
 
-#: option.c:339
+#: option.c:345
 msgid "Display dnsmasq version and copyright information."
 msgstr "Mostrar información sobre la versión y copyright de dnsmasq."
 
-#: option.c:340
+#: option.c:346
 msgid "Translate IPv4 addresses from upstream servers."
-msgstr "Traducir direcciones IPv4 desde servidores upstream."
+msgstr "Traducir direcciones IPv4 desde servidores subida."
 
-#: option.c:341
+#: option.c:347
 msgid "Specify a SRV record."
 msgstr "Especificar un expediente SRV."
 
-#: option.c:342
+#: option.c:348
 msgid "Display this message. Use --help dhcp for known DHCP options."
 msgstr "Mostrar este mensaje. Usar --help dhcp para opciones DHCP conocidas."
 
-#: option.c:343
+#: option.c:349
 #, fuzzy, c-format
 msgid "Specify path of PID file (defaults to %s)."
 msgstr "Especificar path de archivo PID (%s por predeterminado)."
 
-#: option.c:344
+#: option.c:350
 #, c-format
 msgid "Specify maximum number of DHCP leases (defaults to %s)."
-msgstr "Especificar número máximo de arriendos DHCP (%s por predeterminado)."
+msgstr "Especificar número máximo de concesión DHCP (%s por predeterminado)."
 
-#: option.c:345
+#: option.c:351
 msgid "Answer DNS queries based on the interface a query was sent to."
-msgstr "Responder a búsquedas DNS en base a la interface a la cuál fueron enviadas."
+msgstr "Responder a búsquedas DNS en base a la interfase a la cuál fueron enviadas."
 
-#: option.c:346
+#: option.c:352
 msgid "Specify TXT DNS record."
 msgstr "Especificar expediente DNS TXT."
 
-#: option.c:347
+#: option.c:353
 #, fuzzy
 msgid "Specify PTR DNS record."
 msgstr "Especificar expediente DNS PTR."
 
-#: option.c:348
+#: option.c:354
 msgid "Give DNS name to IPv4 address of interface."
-msgstr "Otorgar nombre DNS a dirección IPv4 de interface."
+msgstr "Otorgar nombre DNS a dirección IPv4 de interfase."
 
-#: option.c:349
+#: option.c:355
 msgid "Bind only to interfaces in use."
-msgstr "Acoplar solo a interfaces en uso."
+msgstr "Acoplar solo a interfases en uso."
 
-#: option.c:350
+#: option.c:356
 #, c-format
 msgid "Read DHCP static host information from %s."
 msgstr "Leer información sobre hosts DHCP estáticos desde %s."
 
-#: option.c:351
+#: option.c:357
 msgid "Enable the DBus interface for setting upstream servers, etc."
-msgstr "Habilitar la interface DBus para fijar servidores upstream, etc."
+msgstr "Habilitar la interfase DBus para fijar servidores subida, etc."
 
-#: option.c:352
+#: option.c:358
 msgid "Do not provide DHCP on this interface, only provide DNS."
-msgstr "No proveer DHCP en esta interface, sólo proveer DNS."
+msgstr "No proveer DHCP en esta interfase, sólo proveer DNS."
 
-#: option.c:353
+#: option.c:359
 msgid "Enable dynamic address allocation for bootp."
 msgstr "Habilitar alocación dinámica de direcciónes para BOOTP."
 
-#: option.c:354
+#: option.c:360
 #, fuzzy
 msgid "Map MAC address (with wildcards) to option set."
 msgstr "Trazar dirección MAC (con comodínes) a opción fijada."
 
-#: option.c:355
+#: option.c:361
 msgid "Treat DHCP requests on aliases as arriving from interface."
-msgstr "Tratar pedidos DHCP en alias como si llegaran de la interface."
+msgstr "Tratar pedidos DHCP en alias como si llegaran de la interfase."
 
-#: option.c:356
+#: option.c:362
 msgid "Disable ICMP echo address checking in the DHCP server."
 msgstr "Deshabilitar verificación de direcciónes para echo ICMP en el servidor DHCP."
 
-#: option.c:357
+#: option.c:363
 #, fuzzy
 msgid "Shell script to run on DHCP lease creation and destruction."
-msgstr "Archivo guión para ejecutar cuando se crea o destruye un arriendo DHCP."
+msgstr "Archivo guión para ejecutar cuando se crea o destruye una concesión DHCP."
 
-#: option.c:358
+#: option.c:364
 #, fuzzy
 msgid "Lua script to run on DHCP lease creation and destruction."
-msgstr "Archivo guión para ejecutar cuando se crea o destruye un arriendo DHCP."
+msgstr "Archivo guión para ejecutar cuando se crea o destruye una concesión DHCP."
 
-#: option.c:359
+#: option.c:365
 #, fuzzy
 msgid "Run lease-change scripts as this user."
-msgstr "Correr archivo guión de cambio de arriendos como este usuario."
+msgstr "Correr archivo guión de cambio de concesión como este usuario."
 
-#: option.c:360
+#: option.c:366
 msgid "Read configuration from all the files in this directory."
 msgstr "Leer configuración desde todos los archivos en este directorio."
 
-#: option.c:361
+#: option.c:367
 #, fuzzy
 msgid "Log to this syslog facility or file. (defaults to DAEMON)"
 msgstr "Bitacorear a esta facilidad syslog o archivo. (DAEMON por predeterminado)"
 
-#: option.c:362
+#: option.c:368
 msgid "Do not use leasefile."
-msgstr "No usar archivo de arriendos."
+msgstr "No usar archivo de concesión."
 
-#: option.c:363
+#: option.c:369
 #, fuzzy, c-format
 msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
 msgstr "Número máximo de búsquedas DNS simultáneas. (%s por predeterminado)"
 
-#: option.c:364
+#: option.c:370
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr "Liberar caché DNS al recargar %s."
 
-#: option.c:365
+#: option.c:371
 msgid "Ignore hostnames provided by DHCP clients."
 msgstr "Ignorar nombres de host brindados por clientes DHCP."
 
-#: option.c:366
+#: option.c:372
 msgid "Do NOT reuse filename and server fields for extra DHCP options."
 msgstr "NO reutilizar campos de nombre de archivo y servidor para opciones DHCP extra."
 
-#: option.c:367
+#: option.c:373
 msgid "Enable integrated read-only TFTP server."
 msgstr "Habilitar servidor integrado TFTP solo-lectura."
 
-#: option.c:368
+#: option.c:374
 msgid "Export files by TFTP only from the specified subtree."
 msgstr "Exportar archivos vía TFTP solo del sub-árbol especificado."
 
-#: option.c:369
+#: option.c:375
 msgid "Add client IP address to tftp-root."
 msgstr "Agregar IP de cliente a tftp-root."
 
-#: option.c:370
+#: option.c:376
 msgid "Allow access only to files owned by the user running dnsmasq."
 msgstr "Permitir acceso solo a archivos pertenecientes al usuario que corre dnsmasq."
 
-#: option.c:371
+#: option.c:377
 #, fuzzy, c-format
 msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
 msgstr "Número máximo de transferencias TFTP simultáneas (%s por predeterminado)."
 
-#: option.c:372
+#: option.c:378
 msgid "Disable the TFTP blocksize extension."
 msgstr "Deshabilitar la extensión TFTP blocksize (tamaño de bloque)."
 
-#: option.c:373
+#: option.c:379
 msgid "Convert TFTP filenames to lowercase"
-msgstr ""
+msgstr "Convertir a minúsculas los nombres de archivos TFTP"
 
-#: option.c:374
+#: option.c:380
 msgid "Ephemeral port range for use by TFTP transfers."
-msgstr "Rango de puertos efímeros para ser usados por transferencias TFTP."
+msgstr "Rango de puertos efímeros para ser usados en transferencias TFTP."
 
-#: option.c:375
+#: option.c:381
 msgid "Extra logging for DHCP."
-msgstr "Bitacoreo extra para DHCP."
+msgstr "Log extra para DHCP."
 
-#: option.c:376
+#: option.c:382
 msgid "Enable async. logging; optionally set queue length."
-msgstr "Habilitar bitacoreo asincrónico; opcionalmente fijar tamaño de cola."
+msgstr "Habilitar registro asíncrono; opcionalmente fijar tamaño de cola."
 
-#: option.c:377
+#: option.c:383
 msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
 msgstr "Detener revinculación DNS. Filtrar rangos de IP privados al resolver."
 
-#: option.c:378
+#: option.c:384
 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
 msgstr "Permitir revinculación de 127.0.0.0/8, para servidores RBL."
 
-#: option.c:379
+#: option.c:385
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr "Inhibir protección de revinculación DNS en este dominio."
 
-#: option.c:380
+#: option.c:386
 msgid "Always perform DNS queries to all servers."
 msgstr "Siempre realizar búsquedas DNS a todos los servidores."
 
-#: option.c:381
+#: option.c:387
 #, fuzzy
 msgid "Set tag if client includes matching option in request."
 msgstr "Fijar etiqueta si cliente incluye opción coincidente en pedido."
 
-#: option.c:382
+#: option.c:388
 msgid "Use alternative ports for DHCP."
 msgstr "Usar puertos alternativos para DHCP."
 
-#: option.c:383
+#: option.c:389
 #, fuzzy
 msgid "Specify NAPTR DNS record."
 msgstr "Especificar expediente DNS NAPTR."
 
-#: option.c:384
+#: option.c:390
 msgid "Specify lowest port available for DNS query transmission."
 msgstr "Especificar puerto más bajo disponible para transmisión de búsquedas DNS."
 
-#: option.c:385
+#: option.c:391
 msgid "Use only fully qualified domain names for DHCP clients."
 msgstr "Usar solo nombres de dominio completamente calificados para clientes DHCP."
 
-#: option.c:386
+#: option.c:392
 msgid "Generate hostnames based on MAC address for nameless clients."
 msgstr "Generar hostnames basados en direcciones MAC para clientes sin nombre."
 
-#: option.c:387
+#: option.c:393
 msgid "Use these DHCP relays as full proxies."
 msgstr "Usar estos relays DHCP como proxies completos."
 
-#: option.c:388
+#: option.c:394
+msgid "Relay DHCP requests to a remote server"
+msgstr ""
+
+#: option.c:395
 msgid "Specify alias name for LOCAL DNS name."
 msgstr "Especificar nombre alias para nombre DNS LOCAL."
 
-#: option.c:389
+#: option.c:396
 #, fuzzy
 msgid "Prompt to send to PXE clients."
 msgstr "Aviso a ser enviado a clientes PXE."
 
-#: option.c:390
+#: option.c:397
 msgid "Boot service for PXE menu."
-msgstr "Servico boot para menú PXE."
+msgstr "Servicio de arranque para menú PXE."
 
-#: option.c:391
+#: option.c:398
 msgid "Check configuration syntax."
 msgstr "Revisar sintaxis de configuración."
 
-#: option.c:392
+#: option.c:399
 msgid "Add requestor's MAC address to forwarded DNS queries."
-msgstr ""
+msgstr "Añadir direcciones MAC de los peticionarios a los filtros DNS enviados"
 
-#: option.c:393
+#: option.c:400
 #, fuzzy
 msgid "Proxy DNSSEC validation results from upstream nameservers."
-msgstr "Traducir direcciones IPv4 desde servidores upstream."
+msgstr "Traducir direcciones IPv4 desde servidores subida."
 
-#: option.c:394
+#: option.c:401
 msgid "Attempt to allocate sequential IP addresses to DHCP clients."
-msgstr ""
+msgstr "Intento de instaurar direcciones IP secuenciales a cliente DHCP"
 
-#: option.c:395
+#: option.c:402
 msgid "Copy connection-track mark from queries to upstream connections."
-msgstr ""
+msgstr "Copiar la marca de connection-track desde los filtros a las conexiones salientes"
 
-#: option.c:396
+#: option.c:403
 msgid "Allow DHCP clients to do their own DDNS updates."
-msgstr ""
+msgstr "Permite a clientes DHCP realizar sus propias actualizaciones DDNS"
 
-#: option.c:397
+#: option.c:404
 msgid "Send router-advertisements for interfaces doing DHCPv6"
+msgstr "Enviar anuncios del router a los interfases realizando DHCPv6"
+
+#: option.c:405
+msgid "Always send frequent router-advertisements"
 msgstr ""
 
-#: option.c:398
+#: option.c:406
 msgid "Specify DUID_EN-type DHCPv6 server DUID"
 msgstr ""
 
-#: option.c:399
+#: option.c:407
 #, fuzzy
 msgid "Specify host (A/AAAA and PTR) records"
 msgstr "Especificar un expediente MX."
 
-#: option.c:400
+#: option.c:408
 #, fuzzy
 msgid "Specify arbitrary DNS resource record"
 msgstr "Especificar expediente DNS TXT."
 
-#: option.c:401
+#: option.c:409
 #, fuzzy
 msgid "Bind to interfaces in use - check for new interfaces"
-msgstr "interface desconocida %s en bridge-interface"
-
-#: option.c:402
-msgid "Export local names to global DNS"
-msgstr ""
-
-#: option.c:403
-msgid "Domain to export to global DNS"
-msgstr ""
-
-#: option.c:404
-msgid "Set TTL for authoritative replies"
-msgstr ""
-
-#: option.c:405
-msgid "Set authoritive zone information"
-msgstr ""
-
-#: option.c:406
-msgid "Secondary authoritative nameservers for forward domains"
-msgstr ""
-
-#: option.c:407
-msgid "Peers which are allowed to do zone transfer"
-msgstr ""
-
-#: option.c:408
-msgid "Specify ipsets to which matching domains should be added"
-msgstr ""
+msgstr "interfase desconocida %s en bridge-interfase"
 
 #: option.c:410
-msgid "Specify DHCPv6 prefix class"
-msgstr ""
+msgid "Export local names to global DNS"
+msgstr "Exportar nombres DNS locales a globales"
 
-#: option.c:596
+#: option.c:411
+msgid "Domain to export to global DNS"
+msgstr "Dominio a exportar a DNS global"
+
+#: option.c:412
+msgid "Set TTL for authoritative replies"
+msgstr "Fijar TTL para respuestas autoritarias"
+
+#: option.c:413
+msgid "Set authoritive zone information"
+msgstr "Fijar información de zona autoritaria"
+
+#: option.c:414
+msgid "Secondary authoritative nameservers for forward domains"
+msgstr "Nombres de servidor secundario autoritatorios para dominios enviados"
+
+#: option.c:415
+msgid "Peers which are allowed to do zone transfer"
+msgstr "Colegas autorizados a la zona de transferencia (transfer)"
+
+#: option.c:416
+msgid "Specify ipsets to which matching domains should be added"
+msgstr "Especificar los ipsets coincidentes en dominio que debrían ser añadidos"
+
+#: option.c:417
+msgid "Specify a domain and address range for sythesised names"
+msgstr "Especificar dominio y rango de direcciones para los nombres acrónimos"
+
+#: option.c:419
+msgid "Specify DHCPv6 prefix class"
+msgstr "Especificar prefijo de clase DHCPv6"
+
+#: option.c:605
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -650,307 +662,316 @@
 "Modo de uso: dnsmasq [opciones]\n"
 "\n"
 
-#: option.c:598
+#: option.c:607
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr "Usar opciones cortas solo en la línea de comandos.\n"
 
-#: option.c:600
+#: option.c:609
 #, fuzzy, c-format
 msgid "Valid options are:\n"
 msgstr "Opciones válidas son :\n"
 
-#: option.c:650 option.c:654
+#: option.c:659 option.c:663
 msgid "bad port"
 msgstr "puerto erróneo"
 
-#: option.c:681 option.c:713
+#: option.c:690 option.c:722
 msgid "interface binding not supported"
-msgstr "vinculación de interface no está soportado"
+msgstr "vinculación de interfase no está soportado"
 
-#: option.c:690 option.c:3179
+#: option.c:699 option.c:3275
 #, fuzzy
 msgid "bad interface name"
-msgstr "nombre de interface erróneo"
+msgstr "nombre de interfase erróneo"
 
-#: option.c:720
+#: option.c:729
 #, fuzzy
 msgid "bad address"
 msgstr "dirección IP errónea"
 
-#: option.c:847
+#: option.c:863
 msgid "unsupported encapsulation for IPv6 option"
-msgstr ""
+msgstr "Encapsulación no soportada para opción IPv6"
 
-#: option.c:861
+#: option.c:877
 msgid "bad dhcp-option"
 msgstr "opción dhcp-option errónea"
 
-#: option.c:929
+#: option.c:945
 #, fuzzy
 msgid "bad IP address"
 msgstr "dirección IP errónea"
 
-#: option.c:932 option.c:1070 option.c:2549
+#: option.c:948 option.c:1086 option.c:2620
 #, fuzzy
 msgid "bad IPv6 address"
 msgstr "dirección IP errónea"
 
-#: option.c:1097 option.c:1191
+#: option.c:1113 option.c:1207
 msgid "bad domain in dhcp-option"
 msgstr "dominio erróneo en dhcp-option"
 
-#: option.c:1229
+#: option.c:1245
 msgid "dhcp-option too long"
 msgstr "opción dhcp-option demasiado larga"
 
-#: option.c:1236
+#: option.c:1252
 msgid "illegal dhcp-match"
 msgstr "dhcp-match ilegal"
 
-#: option.c:1298
+#: option.c:1314
 msgid "illegal repeated flag"
 msgstr "opción repetida ilegal"
 
-#: option.c:1306
+#: option.c:1322
 msgid "illegal repeated keyword"
 msgstr "palabra clave repetida ilegal"
 
-#: option.c:1358 option.c:3702
+#: option.c:1374 option.c:3802
 #, fuzzy, c-format
 msgid "cannot access directory %s: %s"
-msgstr "no se puede accesar directorio %s: %s"
+msgstr "no se puede acceder a directorio %s: %s"
 
-#: option.c:1390 tftp.c:474
+#: option.c:1406 tftp.c:487
 #, fuzzy, c-format
 msgid "cannot access %s: %s"
-msgstr "no se puede accesar %s: %s"
+msgstr "no se puede acceder %s: %s"
 
-#: option.c:1426
+#: option.c:1442
 msgid "setting log facility is not possible under Android"
-msgstr ""
+msgstr "la creación de un registro no es posible en Android"
 
-#: option.c:1435
+#: option.c:1451
 msgid "bad log facility"
-msgstr ""
+msgstr "ubicación del registro errónea"
 
-#: option.c:1484
+#: option.c:1500
 msgid "bad MX preference"
 msgstr "preferencia MX errónea"
 
-#: option.c:1489
+#: option.c:1505
 msgid "bad MX name"
 msgstr "nombre MX erróneo"
 
-#: option.c:1503
+#: option.c:1519
 msgid "bad MX target"
 msgstr "destino MX erróneo"
 
-#: option.c:1515
+#: option.c:1531
 msgid "cannot run scripts under uClinux"
-msgstr "no se pueden correr archivos guiónes bajo uClinux"
+msgstr "no se pueden correr archivos 'script' bajo uClinux"
 
-#: option.c:1517
+#: option.c:1533
 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
-msgstr "recompilar con HAVE_SCRIPT definido para habilitar guiónes de cambio de arriendo"
+msgstr "recompilar con HAVE_SCRIPT definido para habilitar guiónes de cambio de concesión"
 
-#: option.c:1521
+#: option.c:1537
 #, fuzzy
 msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
-msgstr "recompilar con HAVE_SCRIPT definido para habilitar guiónes de cambio de arriendo"
+msgstr "recompilar con HAVE_SCRIPT definido para habilitar 'scripts' en Lua"
 
-#: option.c:1631
+#: option.c:1739 option.c:1800
 #, fuzzy
 msgid "bad prefix"
-msgstr "puerto erróneo"
+msgstr "prefijo erróneo"
 
-#: option.c:2043
+#: option.c:2094
 #, fuzzy
 msgid "recompile with HAVE_IPSET defined to enable ipset directives"
-msgstr "recompilar con HAVE_SCRIPT definido para habilitar guiónes de cambio de arriendo"
+msgstr "recompilar con HAVE_SCRIPT definido para habilitar directivas ipset"
 
-#: option.c:2223
+#: option.c:2274
 #, fuzzy
 msgid "bad port range"
 msgstr "rango de puertos erróneo"
 
-#: option.c:2239
+#: option.c:2290
 msgid "bad bridge-interface"
-msgstr "opción bridge-interface (interface puente) errónea"
+msgstr "opción bridge-interface (interfase puente) errónea"
 
-#: option.c:2297
+#: option.c:2350
 msgid "only one tag allowed"
 msgstr "solo una etiqueta permitida"
 
-#: option.c:2317 option.c:2329 option.c:2461
+#: option.c:2370 option.c:2382 option.c:2491 option.c:2532
 msgid "bad dhcp-range"
 msgstr "opción dhcp-range (rango DHCP) errónea"
 
-#: option.c:2344
+#: option.c:2397
 msgid "inconsistent DHCP range"
 msgstr "rango DHCP inconsistente"
 
-#: option.c:2402
-msgid "prefix must be exactly 64 for RA subnets"
-msgstr ""
+#: option.c:2459
+msgid "prefix length must be exactly 64 for RA subnets"
+msgstr "la longitud del prefijo debe ser 64 exacto para subredes RA"
 
-#: option.c:2404
-msgid "prefix must be exactly 64 for subnet constructors"
-msgstr ""
+#: option.c:2461
+msgid "prefix length must be exactly 64 for subnet constructors"
+msgstr "la longitud del prefijo debe ser 64 exacto para subredes constructoras"
 
-#: option.c:2407
-msgid "prefix must be at least 64"
-msgstr ""
+#: option.c:2465
+msgid "prefix length must be at least 64"
+msgstr "la longitud del prefijo debe ser al menos 64"
 
-#: option.c:2412
+#: option.c:2468
 #, fuzzy
 msgid "inconsistent DHCPv6 range"
 msgstr "rango DHCP inconsistente"
 
-#: option.c:2519 option.c:2567
+#: option.c:2479
+msgid "prefix must be zero with \"constructor:\" argument"
+msgstr "prefijo debe ser cero con argumento \"constructor:\""
+
+#: option.c:2590 option.c:2638
 #, fuzzy
 msgid "bad hex constant"
-msgstr "opción dhcp-host errónea"
+msgstr "constante hexadecimal errónea"
 
-#: option.c:2541
+#: option.c:2612
 msgid "cannot match tags in --dhcp-host"
-msgstr ""
+msgstr "no coinciden etiquetas en --dhcp-host"
 
-#: option.c:2589
+#: option.c:2660
 #, fuzzy, c-format
 msgid "duplicate dhcp-host IP address %s"
 msgstr "dirección IP duplicada %s en %s."
 
-#: option.c:2645
+#: option.c:2716
 #, fuzzy
 msgid "bad DHCP host name"
 msgstr "nombre de host DHCP erróneo"
 
-#: option.c:2727
+#: option.c:2798
 #, fuzzy
 msgid "bad tag-if"
-msgstr "destino MX erróneo"
+msgstr "etiqueta tag-if errónea"
 
-#: option.c:3051 option.c:3379
+#: option.c:3122 option.c:3479
 msgid "invalid port number"
 msgstr "número de puerto inválido"
 
-#: option.c:3113
+#: option.c:3184
 #, fuzzy
 msgid "bad dhcp-proxy address"
 msgstr "dirección IP errónea"
 
-#: option.c:3124
-msgid "bad DUID"
-msgstr ""
+#: option.c:3210
+#, fuzzy
+msgid "Bad dhcp-relay"
+msgstr "opción dhcp-range (rango DHCP) errónea"
 
-#: option.c:3166
+#: option.c:3220
+msgid "bad DUID"
+msgstr "DUID erróneo"
+
+#: option.c:3262
 #, fuzzy
 msgid "invalid alias range"
 msgstr "rango alias inválido"
 
-#: option.c:3205
+#: option.c:3305
 msgid "bad CNAME"
 msgstr "CNAME erróneo"
 
-#: option.c:3210
+#: option.c:3310
 msgid "duplicate CNAME"
 msgstr "CNAME duplicado"
 
-#: option.c:3230
+#: option.c:3330
 #, fuzzy
 msgid "bad PTR record"
-msgstr "expediente PTR erróneo"
+msgstr "registro PTR erróneo"
 
-#: option.c:3261
+#: option.c:3361
 #, fuzzy
 msgid "bad NAPTR record"
-msgstr "expediente NAPTR erróneo"
+msgstr "registro NAPTR erróneo"
 
-#: option.c:3295
+#: option.c:3395
 #, fuzzy
 msgid "bad RR record"
-msgstr "expediente PTR erróneo"
+msgstr "registro PTR erróneo"
 
-#: option.c:3324
+#: option.c:3424
 msgid "bad TXT record"
-msgstr "expediente TXT erróneo"
+msgstr "registro TXT erróneo"
 
-#: option.c:3365
+#: option.c:3465
 msgid "bad SRV record"
-msgstr "expediente SRV erróneo"
+msgstr "registro SRV erróneo"
 
-#: option.c:3372
+#: option.c:3472
 msgid "bad SRV target"
 msgstr "destino SRV erróneo"
 
-#: option.c:3386
+#: option.c:3486
 msgid "invalid priority"
 msgstr "prioridad inválida"
 
-#: option.c:3393
+#: option.c:3493
 msgid "invalid weight"
 msgstr "peso inválido"
 
-#: option.c:3417
+#: option.c:3517
 #, fuzzy
 msgid "Bad host-record"
-msgstr "expediente PTR erróneo"
+msgstr "registro PTR erróneo"
 
-#: option.c:3434
+#: option.c:3534
 #, fuzzy
 msgid "Bad name in host-record"
 msgstr "nombre erróneo en %s"
 
-#: option.c:3464
+#: option.c:3564
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr "opción no soportada (verificar que dnsmasq fue compilado con soporte para DHCP/TFTP/DBus)"
 
-#: option.c:3522
+#: option.c:3622
 msgid "missing \""
 msgstr "falta \""
 
-#: option.c:3579
+#: option.c:3679
 msgid "bad option"
 msgstr "opción errónea"
 
-#: option.c:3581
+#: option.c:3681
 msgid "extraneous parameter"
 msgstr "parámetro extraño"
 
-#: option.c:3583
+#: option.c:3683
 msgid "missing parameter"
 msgstr "parámetro ausente"
 
-#: option.c:3590
+#: option.c:3690
 msgid "error"
 msgstr "error"
 
-#: option.c:3592
+#: option.c:3692
 #, fuzzy, c-format
 msgid " at line %d of %s"
 msgstr "%s en línea %d de %%s"
 
-#: option.c:3656 tftp.c:648
+#: option.c:3756 tftp.c:661
 #, c-format
 msgid "cannot read %s: %s"
 msgstr "no se puede leer %s: %s"
 
-#: option.c:3823 option.c:3859
+#: option.c:3923 option.c:3959
 #, fuzzy, c-format
 msgid "read %s"
-msgstr "leyendo %s"
+msgstr "lee %s"
 
-#: option.c:3915
+#: option.c:4015
 msgid "junk found in command line"
-msgstr ""
+msgstr "basura encontrada en linea de comando"
 
-#: option.c:3950
+#: option.c:4050
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
-msgstr "Dnsmasq versión %s  %s\n"
+msgstr "Versión dnsmasq %s  %s\n"
 
-#: option.c:3951
+#: option.c:4051
 #, fuzzy, c-format
 msgid ""
 "Compile time options: %s\n"
@@ -959,63 +980,63 @@
 "Opciones de compilación %s\n"
 "\n"
 
-#: option.c:3952
+#: option.c:4052
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr "Este software viene SIN NINGUNA GARANTIA.\n"
 
-#: option.c:3953
+#: option.c:4053
 #, c-format
 msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
-msgstr "Dnsmasq es software libre, y usted está bienvenido a redistribuirlo\n"
+msgstr "Dnsmasq es software libre, y usted está autorizado a redistribuirlo\n"
 
-#: option.c:3954
+#: option.c:4054
 #, fuzzy, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr "bajo los términos de la GNU General Public License, versión 2 o 3.\n"
 
-#: option.c:3965
+#: option.c:4065
 msgid "try --help"
 msgstr "pruebe --help"
 
-#: option.c:3967
+#: option.c:4067
 msgid "try -w"
 msgstr "pruebe -w"
 
-#: option.c:3969
+#: option.c:4069
 #, fuzzy, c-format
 msgid "bad command line options: %s"
 msgstr "opciones de línea de comandos erróneas: %s"
 
-#: option.c:4018
+#: option.c:4118
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "no se puede obtener host-name (nombre de host): %s"
 
-#: option.c:4046
+#: option.c:4146
 msgid "only one resolv.conf file allowed in no-poll mode."
-msgstr "solo un archivo resolv.conf permitido en modo no-poll."
+msgstr "solo un archivo resolv.conf está permitido en modo no-poll."
 
-#: option.c:4056
+#: option.c:4156
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr "debe haber exáctamente un resolv.conf desde donde leer dominio."
 
-#: option.c:4059 network.c:1039 dhcp.c:794
+#: option.c:4159 network.c:1178 dhcp.c:768
 #, fuzzy, c-format
 msgid "failed to read %s: %s"
 msgstr "no se pudo leer %s: %s"
 
-#: option.c:4076
+#: option.c:4176
 #, c-format
 msgid "no search directive found in %s"
 msgstr "ninguna directiva de búsqueda encontrada en %s"
 
-#: option.c:4097
+#: option.c:4197
 #, fuzzy
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr "debe haber un dominio predeterminado cuando --dhcp-fqdn está fijado"
 
-#: option.c:4101
+#: option.c:4201
 msgid "syntax check OK"
 msgstr "revisión de sintaxis OK"
 
@@ -1027,552 +1048,562 @@
 #: forward.c:490
 #, c-format
 msgid "nameserver %s refused to do a recursive query"
-msgstr "servidor DNS %s se reusó a hacer una búsqueda recursiva"
+msgstr "servidor DNS %s rechazó realizar una búsqueda recursiva"
 
 #: forward.c:518
 #, fuzzy, c-format
 msgid "possible DNS-rebind attack detected: %s"
 msgstr "posible ataque de revinculación DNS detectado"
 
-#: network.c:414
+#: forward.c:1216
+#, fuzzy, c-format
+msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+msgstr "Número máximo de búsquedas DNS simultáneas alcanzado. (%s por predeterminado)"
+
+#: network.c:551
 #, fuzzy, c-format
 msgid "failed to create listening socket for %s: %s"
-msgstr "no se pudo crear un socket escuchador: %s"
+msgstr "no se pudo crear un zócalo de escucha: %s"
 
-#: network.c:743
+#: network.c:882
 #, fuzzy, c-format
 msgid "interface %s failed to join DHCPv6 multicast group: %s"
-msgstr "no se pudo acoplar socket de servidor DHCP: %s"
+msgstr "el interfase % falló al unirse al grupo multicast DHCPv6: %s"
 
-#: network.c:937
+#: network.c:1076
 #, fuzzy, c-format
 msgid "failed to bind server socket for %s: %s"
-msgstr "no se pudo acoplar socket escuchador para %s: %s"
+msgstr "no se pudo acoplar al zócalo del servidor para %s: %s"
 
-#: network.c:974
+#: network.c:1113
 #, c-format
 msgid "ignoring nameserver %s - local interface"
-msgstr "ignorando servidor DNS %s - interface local"
+msgstr "ignorando servidor DNS %s - interfase local"
 
-#: network.c:985
+#: network.c:1124
 #, fuzzy, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
-msgstr "ignorando servidor DNS %s - no se puede crear/acoplar socket: %s"
+msgstr "ignorando servidor DNS %s - no se puede crear/acoplar zócalo: %s"
 
-#: network.c:1002
+#: network.c:1141
 msgid "unqualified"
-msgstr "no calificado"
+msgstr "no cualificado"
 
-#: network.c:1002
+#: network.c:1141
 msgid "names"
 msgstr "nombres"
 
-#: network.c:1004
+#: network.c:1143
 msgid "default"
 msgstr "predeterminado"
 
-#: network.c:1006
+#: network.c:1145
 msgid "domain"
 msgstr "dominio"
 
-#: network.c:1009
+#: network.c:1148
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr "usando direcciones locales solo para %s %s"
 
-#: network.c:1011
+#: network.c:1150
 #, fuzzy, c-format
 msgid "using standard nameservers for %s %s"
-msgstr "usando servidor DNS %s#%d para %s %s"
+msgstr "usando nombres estándar %s#%d para %s %s"
 
-#: network.c:1013
+#: network.c:1152
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
-msgstr "usando servidor DNS %s#%d para %s %s"
+msgstr "usando nombre de servidor %s#%d para %s %s"
 
-#: network.c:1016
+#: network.c:1155
 #, fuzzy, c-format
 msgid "using nameserver %s#%d(via %s)"
-msgstr "usando servidor DNS %s#%d(vía %s)"
+msgstr "usando nombre de servidor %s#%d(vía %s)"
 
-#: network.c:1018
+#: network.c:1157
 #, c-format
 msgid "using nameserver %s#%d"
-msgstr "usando servidor DNS %s#%d"
+msgstr "usando nombre de servidor %s#%d"
 
-#: dnsmasq.c:131
+#: dnsmasq.c:134
 #, fuzzy
 msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
 msgstr "servidor TFTP no disponible: fijar HAVE_TFTP en src/config.h"
 
-#: dnsmasq.c:136
-msgid "Cannot use --conntrack AND --query-port"
-msgstr ""
-
 #: dnsmasq.c:139
+msgid "Cannot use --conntrack AND --query-port"
+msgstr "No puede usar --conntrack AND --query-port"
+
+#: dnsmasq.c:142
 #, fuzzy
 msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
 msgstr "servidor TFTP no disponible: fijar HAVE_TFTP en src/config.h"
 
-#: dnsmasq.c:144
+#: dnsmasq.c:147
 #, fuzzy
 msgid "asychronous logging is not available under Solaris"
-msgstr "bitacoreo asincrónico no está disponible bajo Solaris"
+msgstr "registro asíncrono no está disponible bajo Solaris"
 
-#: dnsmasq.c:149
+#: dnsmasq.c:152
 #, fuzzy
 msgid "asychronous logging is not available under Android"
-msgstr "bitacoreo asincrónico no está disponible bajo Solaris"
+msgstr "registro asíncrono no está disponible bajo Solaris"
 
-#: dnsmasq.c:154
+#: dnsmasq.c:157
 #, fuzzy
 msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
 msgstr "DBus no disponible: fijar HAVE_DBUS en src/config.h"
 
-#: dnsmasq.c:164
+#: dnsmasq.c:167
 msgid "zone serial must be configured in --auth-soa"
-msgstr ""
+msgstr "zona serie debe ser configurada en --auth-soa"
 
-#: dnsmasq.c:186
+#: dnsmasq.c:185
 msgid "dhcp-range constructor not available on this platform"
-msgstr ""
+msgstr "constructor rango dhcp no disponible en esta plataforma"
 
 #: dnsmasq.c:225
 msgid "cannot set --bind-interfaces and --bind-dynamic"
-msgstr ""
+msgstr "no puede usar --bind-interfases y --bind-dynamic"
 
 #: dnsmasq.c:229
 #, c-format
 msgid "failed to find list of interfaces: %s"
-msgstr "no se pudo encontrar lista de interfaces: %s"
+msgstr "no se pudo encontrar lista de interfases: %s"
 
 #: dnsmasq.c:238
 #, c-format
 msgid "unknown interface %s"
-msgstr "interface desconocida %s"
+msgstr "interfase desconocida %s"
 
-#: dnsmasq.c:274 dnsmasq.c:860
+#: dnsmasq.c:275 dnsmasq.c:870
 #, c-format
 msgid "DBus error: %s"
 msgstr "error DBus: %s"
 
-#: dnsmasq.c:277
+#: dnsmasq.c:278
 msgid "DBus not available: set HAVE_DBUS in src/config.h"
 msgstr "DBus no disponible: fijar HAVE_DBUS en src/config.h"
 
-#: dnsmasq.c:305
+#: dnsmasq.c:306
 #, c-format
 msgid "unknown user or group: %s"
 msgstr "usuario o grupo desconocido: %s"
 
-#: dnsmasq.c:360
+#: dnsmasq.c:361
 #, c-format
 msgid "cannot chdir to filesystem root: %s"
 msgstr "no se puede cambiar directorio a raíz de sistema de archivos: %s"
 
-#: dnsmasq.c:597
+#: dnsmasq.c:598
 #, fuzzy, c-format
 msgid "started, version %s DNS disabled"
 msgstr "iniciado, versión %s DNS deshabilitado"
 
-#: dnsmasq.c:599
+#: dnsmasq.c:600
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr "iniciado, versión %s tamaño de caché %d"
 
-#: dnsmasq.c:601
+#: dnsmasq.c:602
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr "iniciado, versión %s caché deshabilitado"
 
-#: dnsmasq.c:603
+#: dnsmasq.c:604
 #, c-format
 msgid "compile time options: %s"
 msgstr "opciones de compilación: %s"
 
-#: dnsmasq.c:609
+#: dnsmasq.c:610
 msgid "DBus support enabled: connected to system bus"
 msgstr "soporte DBus habilitado: conectado a bus de sistema"
 
-#: dnsmasq.c:611
+#: dnsmasq.c:612
 msgid "DBus support enabled: bus connection pending"
-msgstr "soporte DBus habilitado: conección a bus pendiente"
+msgstr "soporte DBus habilitado: conexión a bus pendiente"
 
-#: dnsmasq.c:616
+#: dnsmasq.c:617
 #, fuzzy, c-format
 msgid "warning: failed to change owner of %s: %s"
-msgstr "advertencia: no se pudo cambiar dueño de %s: %s"
+msgstr "advertencia: no se pudo cambiar propietario de %s: %s"
 
-#: dnsmasq.c:620
+#: dnsmasq.c:621
 msgid "setting --bind-interfaces option because of OS limitations"
-msgstr "fijando opción --bind-interfaces debido a limitaciones de sistema operativo"
+msgstr "fijando opción --bind-interfases debido a limitaciones de sistema operativo"
 
-#: dnsmasq.c:625
+#: dnsmasq.c:626
 #, c-format
 msgid "warning: interface %s does not currently exist"
-msgstr "advertencia: interface %s no existe actuálmente"
+msgstr "advertencia: interfase %s no existe actualmente"
 
-#: dnsmasq.c:630
+#: dnsmasq.c:631
 msgid "warning: ignoring resolv-file flag because no-resolv is set"
 msgstr "advertencia: ignorando opción resolv-file porque no-resolv está fijado"
 
-#: dnsmasq.c:633
+#: dnsmasq.c:634
 #, fuzzy
 msgid "warning: no upstream servers configured"
-msgstr "advertencia: ningún servidor upstream configurado"
+msgstr "advertencia: ningún servidor de subida configurado"
 
-#: dnsmasq.c:637
+#: dnsmasq.c:638
 #, c-format
 msgid "asynchronous logging enabled, queue limit is %d messages"
-msgstr "bitacoreo asincrónico habilitado, límite de cola es %d mensajes"
+msgstr "registro asíncrono habilitado, el límite de la cola es %d mensajes"
 
-#: dnsmasq.c:652
+#: dnsmasq.c:659
 msgid "IPv6 router advertisement enabled"
-msgstr ""
+msgstr "Anuncio de router IPv6 habilitado"
 
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 msgid "root is "
-msgstr "root es "
+msgstr "root está "
 
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 #, fuzzy
 msgid "enabled"
 msgstr "habilitado"
 
-#: dnsmasq.c:671
+#: dnsmasq.c:678
 msgid "secure mode"
 msgstr "modo seguro"
 
-#: dnsmasq.c:697
+#: dnsmasq.c:704
 #, c-format
 msgid "restricting maximum simultaneous TFTP transfers to %d"
 msgstr "limitando número máximo de transferencias TFTP simultáneas a %d"
 
-#: dnsmasq.c:862
+#: dnsmasq.c:872
 msgid "connected to system DBus"
 msgstr "conectado a DBus de sistema"
 
-#: dnsmasq.c:1007
+#: dnsmasq.c:1017
 #, c-format
 msgid "cannot fork into background: %s"
-msgstr "no se puede hacer fork hacia el fondo: %s"
+msgstr "no se puede hacer fork en background: %s"
 
-#: dnsmasq.c:1010
+#: dnsmasq.c:1020
 #, fuzzy, c-format
 msgid "failed to create helper: %s"
 msgstr "no se pudo crear ayudante: %s"
 
-#: dnsmasq.c:1013
+#: dnsmasq.c:1023
 #, fuzzy, c-format
 msgid "setting capabilities failed: %s"
 msgstr "configuración de capacidades ha fallado: %s"
 
-#: dnsmasq.c:1016
+#: dnsmasq.c:1026
 #, fuzzy, c-format
 msgid "failed to change user-id to %s: %s"
 msgstr "no se pudo cambiar user-id a %s: %s"
 
-#: dnsmasq.c:1019
+#: dnsmasq.c:1029
 #, fuzzy, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr "no se pudo cambiar group-id a %s: %s"
 
-#: dnsmasq.c:1022
+#: dnsmasq.c:1032
 #, fuzzy, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr "no se pudo abrir archivo PID %s: %s"
 
-#: dnsmasq.c:1025
+#: dnsmasq.c:1035
 #, fuzzy, c-format
 msgid "cannot open log %s: %s"
-msgstr "no se puede abrir %s: %s"
+msgstr "no se puede abrir registro %s: %s"
 
-#: dnsmasq.c:1028
+#: dnsmasq.c:1038
 #, fuzzy, c-format
 msgid "failed to load Lua script: %s"
-msgstr "no se pudo cargar %s: %s"
+msgstr "no se pudo cargar script Lua %s: %s"
 
-#: dnsmasq.c:1031
+#: dnsmasq.c:1041
 #, c-format
 msgid "TFTP directory %s inaccessible: %s"
-msgstr ""
+msgstr "directorio TFTP % inaccesible: %s"
 
-#: dnsmasq.c:1095
+#: dnsmasq.c:1105
 #, fuzzy, c-format
 msgid "script process killed by signal %d"
-msgstr "proceso hijo eliminado por señal %d"
+msgstr "proceso script eliminado por señal %d"
 
-#: dnsmasq.c:1099
+#: dnsmasq.c:1109
 #, fuzzy, c-format
 msgid "script process exited with status %d"
-msgstr "proceso hijo hizo exit con estado %d"
+msgstr "proceso script salió con con estado %d"
 
-#: dnsmasq.c:1103
+#: dnsmasq.c:1113
 #, fuzzy, c-format
 msgid "failed to execute %s: %s"
 msgstr "no se pudo ejecutar %s: %s"
 
-#: dnsmasq.c:1148
+#: dnsmasq.c:1158
 msgid "exiting on receipt of SIGTERM"
 msgstr "saliendo al recibir SIGTERM"
 
-#: dnsmasq.c:1176
+#: dnsmasq.c:1186
 #, fuzzy, c-format
 msgid "failed to access %s: %s"
-msgstr "no se pudo accesar %s: %s"
+msgstr "no se pudo acceder %s: %s"
 
-#: dnsmasq.c:1206
+#: dnsmasq.c:1216
 #, c-format
 msgid "reading %s"
 msgstr "leyendo %s"
 
-#: dnsmasq.c:1217
+#: dnsmasq.c:1227
 #, fuzzy, c-format
 msgid "no servers found in %s, will retry"
 msgstr "ningún servidor encontrado en %s, se reintentará"
 
-#: dhcp.c:49
+#: dhcp.c:53
 #, c-format
 msgid "cannot create DHCP socket: %s"
-msgstr "no se puede crear socket DHCP: %s"
+msgstr "no se puede crear zócalo DHCP: %s"
 
-#: dhcp.c:64
+#: dhcp.c:68
 #, c-format
 msgid "failed to set options on DHCP socket: %s"
-msgstr "no se pudo fijar opciones en socket DHCP: %s"
-
-#: dhcp.c:77
-#, fuzzy, c-format
-msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
-msgstr "no se pudo fijar SO_REUSE{ADDR|PORT} en socket DHCP: %s"
+msgstr "no se pudo fijar opciones en zócalo DHCP: %s"
 
 #: dhcp.c:89
+#, fuzzy, c-format
+msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
+msgstr "no se pudo fijar SO_REUSE{ADDR|PORT} en zócalo DHCP: %s"
+
+#: dhcp.c:101
 #, c-format
 msgid "failed to bind DHCP server socket: %s"
-msgstr "no se pudo acoplar socket de servidor DHCP: %s"
+msgstr "no se pudo acoplar zócalo de servidor DHCP: %s"
 
-#: dhcp.c:115
+#: dhcp.c:127
 #, c-format
 msgid "cannot create ICMP raw socket: %s."
-msgstr "no se puede crear socket crudo ICMP: %s."
+msgstr "no se puede crear zócalo puro ICMP: %s."
 
-#: dhcp.c:225
+#: dhcp.c:239
 #, fuzzy, c-format
 msgid "unknown interface %s in bridge-interface"
-msgstr "interface desconocida %s en bridge-interface"
+msgstr "interfase desconocida %s en bridge-interface"
 
-#: dhcp.c:250
+#: dhcp.c:278
 #, c-format
 msgid "DHCP packet received on %s which has no address"
 msgstr "Paquete DHCP recibido en %s que no tiene dirección"
 
-#: dhcp.c:457
+#: dhcp.c:505
 #, c-format
 msgid "DHCP range %s -- %s is not consistent with netmask %s"
 msgstr "rango DHCP %s -- %s no coincide con máscara de subred %s"
 
-#: dhcp.c:832
+#: dhcp.c:806
 #, fuzzy, c-format
 msgid "bad line at %s line %d"
 msgstr "línea errónea en %s línea %d"
 
-#: dhcp.c:875
+#: dhcp.c:849
 #, c-format
 msgid "ignoring %s line %d, duplicate name or IP address"
 msgstr "ignorando %s línea %d, nombre o dirección IP duplicada"
 
+#: dhcp.c:993 rfc3315.c:2052
+#, c-format
+msgid "DHCP relay %s -> %s"
+msgstr "DHCP relay %s -> %s"
+
 #: lease.c:61
 #, fuzzy, c-format
 msgid "cannot open or create lease file %s: %s"
-msgstr "no se puede abrir o crear archivo de arriendos %s: %s"
+msgstr "no se puede abrir o crear archivo de concesión %s: %s"
 
-#: lease.c:133
+#: lease.c:134
 msgid "too many stored leases"
-msgstr "demasiados arriendos almacenados"
+msgstr "demasiadas concesiones almacenadas"
 
-#: lease.c:164
+#: lease.c:165
 #, fuzzy, c-format
 msgid "cannot run lease-init script %s: %s"
-msgstr "no se puede ejecutar archivo guión lease-init %s: %s"
+msgstr "no se puede ejecutar archivo script lease-init %s: %s"
 
-#: lease.c:170
+#: lease.c:171
 #, c-format
 msgid "lease-init script returned exit code %s"
-msgstr "archivo guión lease-init retornó exit code %s"
+msgstr "archivo guión lease-init retornó código de salida %s"
 
-#: lease.c:339
+#: lease.c:342
 #, fuzzy, c-format
 msgid "failed to write %s: %s (retry in %us)"
 msgstr "error al escribir %s: %s (reintentar en %us)"
 
-#: lease.c:843
+#: lease.c:871
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr "Ignorando dominio %s para nombre de host DHCP %s"
 
-#: rfc2131.c:337
+#: rfc2131.c:338
 #, c-format
 msgid "no address range available for DHCP request %s %s"
 msgstr "ningún rango de direcciónes disponible para pedido DHCP %s %s"
 
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "with subnet selector"
 msgstr "con selector de subred"
 
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "via"
 msgstr "vía"
 
-#: rfc2131.c:350
+#: rfc2131.c:351
 #, fuzzy, c-format
 msgid "%u available DHCP subnet: %s/%s"
 msgstr "%u Subred DHCP disponible: %s/%s"
 
-#: rfc2131.c:353 rfc3315.c:272
+#: rfc2131.c:354 rfc3315.c:296
 #, fuzzy, c-format
 msgid "%u available DHCP range: %s -- %s"
 msgstr "%u Rango DHCP disponible: %s -- %s"
 
-#: rfc2131.c:382
-msgid "disabled"
-msgstr "deshabilitado"
-
-#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771
-#: rfc3315.c:1017
-msgid "ignored"
-msgstr "ignorado"
-
-#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814
-msgid "address in use"
-msgstr "dirección en uso"
-
-#: rfc2131.c:452 rfc2131.c:1007
-msgid "no address available"
-msgstr "ninguna dirección disponible"
-
-#: rfc2131.c:459 rfc2131.c:1154
-msgid "wrong network"
-msgstr "red equivocada"
-
-#: rfc2131.c:474
-msgid "no address configured"
-msgstr "ninguna dirección configurada"
-
-#: rfc2131.c:480 rfc2131.c:1204
-msgid "no leases left"
-msgstr "no sobra ningún arriendo"
-
-#: rfc2131.c:576 rfc3315.c:428
-#, fuzzy, c-format
-msgid "%u client provides name: %s"
-msgstr "%u cliente provee nombre: %s"
-
-#: rfc2131.c:731
+#: rfc2131.c:465
 #, fuzzy, c-format
 msgid "%u vendor class: %s"
 msgstr "%u Clase de vendedor: %s"
 
-#: rfc2131.c:733
+#: rfc2131.c:467
 #, fuzzy, c-format
 msgid "%u user class: %s"
 msgstr "%u Clase de usuario: %s"
 
+#: rfc2131.c:494
+msgid "disabled"
+msgstr "deshabilitado"
+
+#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:598 rfc3315.c:818
+#: rfc3315.c:1087
+msgid "ignored"
+msgstr "ignorado"
+
+#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:868
+msgid "address in use"
+msgstr "dirección en uso"
+
+#: rfc2131.c:564 rfc2131.c:1015
+msgid "no address available"
+msgstr "ninguna dirección disponible"
+
+#: rfc2131.c:571 rfc2131.c:1162
+msgid "wrong network"
+msgstr "red equivocada"
+
+#: rfc2131.c:586
+msgid "no address configured"
+msgstr "ninguna dirección configurada"
+
+#: rfc2131.c:592 rfc2131.c:1212
+msgid "no leases left"
+msgstr "no sobra ninguna concesión"
+
+#: rfc2131.c:687 rfc3315.c:471
+#, fuzzy, c-format
+msgid "%u client provides name: %s"
+msgstr "%u cliente provee nombre: %s"
+
 #: rfc2131.c:792
 msgid "PXE BIS not supported"
 msgstr "no hay soporte para BIS PXE"
 
-#: rfc2131.c:923 rfc3315.c:1111
+#: rfc2131.c:931 rfc3315.c:1181
 #, fuzzy, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "deshabilitando dirección DHCP estática %s para %s"
 
-#: rfc2131.c:944
+#: rfc2131.c:952
 msgid "unknown lease"
-msgstr "arriendo desconocido"
+msgstr "concesión desconocida"
 
-#: rfc2131.c:976
+#: rfc2131.c:984
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
-msgstr "no usando dirección configurada %s porque está arrendada a %s"
+msgstr "no usando dirección configurada %s porque está concedida a %s"
 
-#: rfc2131.c:986
+#: rfc2131.c:994
 #, fuzzy, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr "no usando dirección configurada %s porque está en uso por el servidor o relay"
 
-#: rfc2131.c:989
+#: rfc2131.c:997
 #, fuzzy, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr "no usando dirección configurada %s porque fué previamente denegada"
 
-#: rfc2131.c:1005 rfc2131.c:1197
+#: rfc2131.c:1013 rfc2131.c:1205
 msgid "no unique-id"
 msgstr "ningún unique-id (identificación única)"
 
-#: rfc2131.c:1092
+#: rfc2131.c:1100
 msgid "wrong server-ID"
 msgstr "ID de servidor equivocada"
 
-#: rfc2131.c:1111
+#: rfc2131.c:1119
 msgid "wrong address"
 msgstr "dirección equivocada"
 
-#: rfc2131.c:1129 rfc3315.c:911
+#: rfc2131.c:1137 rfc3315.c:964
 msgid "lease not found"
-msgstr "arriendo no encontrado"
+msgstr "concesión no encontrada"
 
-#: rfc2131.c:1162
+#: rfc2131.c:1170
 msgid "address not available"
 msgstr "dirección no disponible"
 
-#: rfc2131.c:1173
+#: rfc2131.c:1181
 msgid "static lease available"
-msgstr "arriendo estático disponible"
+msgstr "concesión estática disponible"
 
-#: rfc2131.c:1177
+#: rfc2131.c:1185
 msgid "address reserved"
 msgstr "dirección reservada"
 
-#: rfc2131.c:1185
+#: rfc2131.c:1193
 #, c-format
 msgid "abandoning lease to %s of %s"
-msgstr "abandonando arriendo a %s de %s"
+msgstr "abandonando concesión a %s de %s"
 
-#: rfc2131.c:1679
+#: rfc2131.c:1701
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr "%u nombre de bootfile: %s"
 
-#: rfc2131.c:1688
+#: rfc2131.c:1710
 #, c-format
 msgid "%u server name: %s"
 msgstr "%u nombre de servidor: %s"
 
-#: rfc2131.c:1696
+#: rfc2131.c:1718
 #, fuzzy, c-format
 msgid "%u next server: %s"
 msgstr "%u siguiente servidor: %s"
 
-#: rfc2131.c:1699
+#: rfc2131.c:1721
 #, c-format
 msgid "%u broadcast response"
-msgstr ""
+msgstr "%u respuesta broadcast"
 
-#: rfc2131.c:1762
+#: rfc2131.c:1784
 #, fuzzy, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
-msgstr "no se puede enviar opción DHCP/BOOTP %d: no queda espacio en paquete"
+msgstr "no se puede enviar opción DHCP/BOOTP %d: no queda espacio en el paquete"
 
-#: rfc2131.c:2002
+#: rfc2131.c:2025
 msgid "PXE menu too large"
-msgstr "menú PXE demasiado grande"
+msgstr "menú PXE demasiado largo"
 
-#: rfc2131.c:2139 rfc3315.c:1332
+#: rfc2131.c:2162 rfc3315.c:1425
 #, fuzzy, c-format
 msgid "%u requested options: %s"
 msgstr "%u opciones solicitadas: %s"
 
-#: rfc2131.c:2415
+#: rfc2131.c:2442
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr "no se puede enviar opción RFC3925: demasiadas opciones para número enterprise %d"
@@ -1580,9 +1611,9 @@
 #: netlink.c:78
 #, fuzzy, c-format
 msgid "cannot create netlink socket: %s"
-msgstr "no se puede crear socket netlink: %s"
+msgstr "no se puede crear zócalo netlink: %s"
 
-#: netlink.c:354
+#: netlink.c:363
 #, fuzzy, c-format
 msgid "netlink returns error: %s"
 msgstr "netlink retorna error: %s"
@@ -1591,53 +1622,53 @@
 msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
 msgstr "intento de fijar dirección de servidor IPv6 vía DBus - no hay soporte IPv6"
 
-#: dbus.c:308 dbus.c:504
+#: dbus.c:523
 msgid "setting upstream servers from DBus"
-msgstr "fijando servidores upstream desde DBus"
+msgstr "fijando servidores subida desde DBus"
 
-#: dbus.c:561
+#: dbus.c:570
 msgid "could not register a DBus message handler"
 msgstr "no se pudo registrar un manejador de mensajes DBus"
 
-#: bpf.c:197
+#: bpf.c:245
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
-msgstr "no se puede crear socket BPF DHCP: %s"
+msgstr "no se puede crear zócalo BPF DHCP: %s"
 
-#: bpf.c:225
+#: bpf.c:273
 #, fuzzy, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr "pedido DHCP por tipo de hardware no-soportado (%d) recibido en %s"
 
-#: helper.c:145
+#: helper.c:153
 msgid "lease() function missing in Lua script"
-msgstr ""
+msgstr "la función lease() no se encuentra en el script Lua"
 
-#: tftp.c:290
+#: tftp.c:303
 msgid "unable to get free port for TFTP"
 msgstr "incapaz de conseguir puerto libre para TFTP"
 
-#: tftp.c:306
+#: tftp.c:319
 #, c-format
 msgid "unsupported request from %s"
 msgstr "pedido no-soportado desde %s"
 
-#: tftp.c:420
+#: tftp.c:433
 #, fuzzy, c-format
 msgid "file %s not found"
 msgstr "archivo %s no encontrado"
 
-#: tftp.c:529
+#: tftp.c:542
 #, fuzzy, c-format
 msgid "error %d %s received from %s"
 msgstr "error TFTP %d %s recibido de %s"
 
-#: tftp.c:571
+#: tftp.c:584
 #, fuzzy, c-format
 msgid "failed sending %s to %s"
 msgstr "TFTP no pudo enviar %s a %s"
 
-#: tftp.c:571
+#: tftp.c:584
 #, fuzzy, c-format
 msgid "sent %s to %s"
 msgstr "TFTP envió %s a %s"
@@ -1645,12 +1676,12 @@
 #: log.c:190
 #, c-format
 msgid "overflow: %d log entries lost"
-msgstr "desbordamiento: %d entradas de bitácora perdidas"
+msgstr "desbordamiento: %d entradas de registro perdidas"
 
 #: log.c:268
 #, c-format
 msgid "log failed: %s"
-msgstr "bitácora falló: %s"
+msgstr "registro falló: %s"
 
 #: log.c:472
 msgid "FAILED to start up"
@@ -1659,188 +1690,207 @@
 #: conntrack.c:65
 #, c-format
 msgid "Conntrack connection mark retrieval failed: %s"
-msgstr ""
+msgstr "Conexión conntrack con marca recuperación falló"
 
-#: dhcp6.c:49
+#: dhcp6.c:59
 #, fuzzy, c-format
 msgid "cannot create DHCPv6 socket: %s"
-msgstr "no se puede crear socket DHCP: %s"
+msgstr "no se puede crear zócalo DHCP: %s"
 
-#: dhcp6.c:62
+#: dhcp6.c:80
 #, fuzzy, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s"
-msgstr "no se pudo fijar SO_REUSE{ADDR|PORT} en socket DHCP: %s"
+msgstr "no se pudo fijar SO_REUSE{ADDR|PORT} en zócalo DHCP: %s"
 
-#: dhcp6.c:74
+#: dhcp6.c:92
 #, fuzzy, c-format
 msgid "failed to bind DHCPv6 server socket: %s"
-msgstr "no se pudo acoplar socket de servidor DHCP: %s"
+msgstr "no se pudo acoplar zócalo de servidor DHCP: %s"
 
-#: rfc3315.c:135
+#: rfc3315.c:153
 #, fuzzy, c-format
 msgid "no address range available for DHCPv6 request from relay at %s"
 msgstr "ningún rango de direcciónes disponible para pedido DHCP %s %s"
 
-#: rfc3315.c:144
+#: rfc3315.c:162
 #, fuzzy, c-format
 msgid "no address range available for DHCPv6 request via %s"
 msgstr "ningún rango de direcciónes disponible para pedido DHCP %s %s"
 
-#: rfc3315.c:269
+#: rfc3315.c:293
 #, fuzzy, c-format
 msgid "%u available DHCPv6 subnet: %s/%d"
 msgstr "%u Subred DHCP disponible: %s/%s"
 
-#: rfc3315.c:350
+#: rfc3315.c:375
 #, fuzzy, c-format
 msgid "%u vendor class: %u"
 msgstr "%u Clase de vendedor: %s"
 
-#: rfc3315.c:609
+#: rfc3315.c:423
+#, fuzzy, c-format
+msgid "%u client MAC address: %s"
+msgstr "%u cliente provee nombre: %s"
+
+#: rfc3315.c:655
 #, fuzzy, c-format
 msgid "unknown prefix-class %d"
-msgstr "arriendo desconocido"
+msgstr "clase de prefijo desconocida"
 
-#: rfc3315.c:741 rfc3315.c:854
+#: rfc3315.c:786 rfc3315.c:908
 msgid "success"
 msgstr ""
 
-#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864
+#: rfc3315.c:801 rfc3315.c:803 rfc3315.c:916 rfc3315.c:918
 #, fuzzy
 msgid "no addresses available"
 msgstr "ninguna dirección disponible"
 
-#: rfc3315.c:806
+#: rfc3315.c:860
 #, fuzzy
 msgid "address unavailable"
 msgstr "dirección no disponible"
 
-#: rfc3315.c:841
+#: rfc3315.c:895
 msgid "not on link"
-msgstr ""
+msgstr "no en el enlace"
 
-#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150
+#: rfc3315.c:968 rfc3315.c:1143 rfc3315.c:1220
 msgid "no binding found"
-msgstr ""
+msgstr "uniones no encontradas"
 
-#: rfc3315.c:948
+#: rfc3315.c:1006
 msgid "deprecated"
-msgstr ""
+msgstr "descartado"
 
-#: rfc3315.c:951
+#: rfc3315.c:1011
 #, fuzzy
 msgid "address invalid"
 msgstr "dirección en uso"
 
-#: rfc3315.c:992
+#: rfc3315.c:1053
 msgid "confirm failed"
-msgstr ""
+msgstr "confirmación falló"
 
-#: rfc3315.c:1003
+#: rfc3315.c:1064
 #, fuzzy
 msgid "all addresses still on link"
 msgstr "dirección errónea en %s línea %d"
 
-#: rfc3315.c:1082
+#: rfc3315.c:1152
 msgid "release received"
-msgstr ""
+msgstr "concesión recibida"
+
+#: rfc3315.c:2043
+msgid "Cannot multicast to DHCPv6 server without correct interface"
+msgstr "No puede hacer multicast DHCPv6 sin el interfase correcto"
 
 #: dhcp-common.c:145
 #, c-format
 msgid "Ignoring duplicate dhcp-option %d"
-msgstr ""
+msgstr "Ignorando opción DHCP duplicada"
 
-#: dhcp-common.c:215
+#: dhcp-common.c:222
 #, c-format
 msgid "%u tags: %s"
 msgstr "%u etiquetas: %s"
 
-#: dhcp-common.c:296
+#: dhcp-common.c:407
 #, c-format
 msgid "%s has more than one address in hostsfile, using %s for DHCP"
 msgstr "%s tiene más de una dirección en hostsfile, usando %s para DHCP"
 
-#: dhcp-common.c:319
+#: dhcp-common.c:430
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr "dirección IP duplicada %s (%s) en directiva dhcp-config"
 
-#: dhcp-common.c:367
+#: dhcp-common.c:484
 #, fuzzy, c-format
 msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s"
 msgstr "no se pudo fijar SO_REUSE{ADDR|PORT} en socket DHCP: %s"
 
-#: dhcp-common.c:489
+#: dhcp-common.c:606
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr "Opciones DHCP conocidas:\n"
 
-#: dhcp-common.c:500
+#: dhcp-common.c:617
 #, fuzzy, c-format
 msgid "Known DHCPv6 options:\n"
 msgstr "Opciones DHCP conocidas:\n"
 
-#: dhcp-common.c:693
+#: dhcp-common.c:814
 msgid ", prefix deprecated"
-msgstr ""
+msgstr ", prefijo descartado"
 
-#: dhcp-common.c:696
+#: dhcp-common.c:817
 #, c-format
 msgid ", lease time "
-msgstr ""
+msgstr ", tiempo de concesión"
 
-#: dhcp-common.c:727
+#: dhcp-common.c:859
 #, c-format
 msgid "%s stateless on %s%.0s%.0s%s"
-msgstr ""
+msgstr "%s apátrida en %s%.0s%.0s%s"
 
-#: dhcp-common.c:729
+#: dhcp-common.c:861
 #, fuzzy, c-format
 msgid "%s, static leases only on %.0s%s%s%.0s"
-msgstr "DHCP, arriendos estáticos solo en %.0s%s, tiempo de arriendo %s"
+msgstr "DHCP, concesión estática solo en %.0s%s, tiempo de concesión %s"
 
-#: dhcp-common.c:731
+#: dhcp-common.c:863
 #, fuzzy, c-format
 msgid "%s, proxy on subnet %.0s%s%.0s%.0s"
 msgstr "DHCP, proxy en subred %.0s%s%.0s"
 
-#: dhcp-common.c:732
+#: dhcp-common.c:864
 #, fuzzy, c-format
 msgid "%s, IP range %s -- %s%s%.0s"
-msgstr "DHCP, rango de IPs %s -- %s, tiempo de arriendo %s"
+msgstr "DHCP, rango de IPs %s -- %s, tiempo de concesión %s"
 
-#: dhcp-common.c:739
+#: dhcp-common.c:877
 #, c-format
 msgid "DHCPv4-derived IPv6 names on %s%s"
 msgstr ""
 
-#: dhcp-common.c:742
+#: dhcp-common.c:880
 #, fuzzy, c-format
 msgid "router advertisement on %s%s"
-msgstr "DHCP, arriendos estáticos solo en %.0s%s, tiempo de arriendo %s"
+msgstr "DHCP, concesión estáticos solo en %.0s%s, tiempo de concesión %s"
 
-#: radv.c:87
+#: dhcp-common.c:891
+#, c-format
+msgid "DHCP relay from %s to %s via %s"
+msgstr ""
+
+#: dhcp-common.c:893
+#, c-format
+msgid "DHCP relay from %s to %s"
+msgstr ""
+
+#: radv.c:93
 #, fuzzy, c-format
 msgid "cannot create ICMPv6 socket: %s"
 msgstr "no se puede crear socket DHCP: %s"
 
-#: auth.c:402
+#: auth.c:435
 #, fuzzy, c-format
 msgid "ignoring zone transfer request from %s"
 msgstr "pedido no-soportado desde %s"
 
-#: ipset.c:71
+#: ipset.c:95
 #, fuzzy, c-format
 msgid "failed to find kernel version: %s"
 msgstr "no se pudo acoplar socket de servidor DHCP: %s"
 
-#: ipset.c:90
+#: ipset.c:114
 #, fuzzy, c-format
 msgid "failed to create IPset control socket: %s"
 msgstr "no se pudo crear socket TFTP: %s"
 
 #~ msgid "no interface with address %s"
-#~ msgstr "ninguna interface con dirección %s"
+#~ msgstr "ninguna interfase con dirección %s"
 
 #~ msgid "duplicate IP address %s in dhcp-config directive."
 #~ msgstr "dirección IP duplicada %s en directiva dhcp-config."
@@ -1873,10 +1923,10 @@
 #~ msgstr "paquete DHCP: transaction-id (identificación de transacción) es %u"
 
 #~ msgid "must set exactly one interface on broken systems without IP_RECVIF"
-#~ msgstr "debe fijarse exáctamente una interface en sistemas rotos sin IP_RECVIF"
+#~ msgstr "debe fijarse exáctamente una interfase en sistemas rotos sin IP_RECVIF"
 
 #~ msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
-#~ msgstr "Ignorando arriendo DHCP para %s porque tiene una parte ilegal de dominio"
+#~ msgstr "Ignorando concesión DHCP para %s porque tiene una parte ilegal de dominio"
 
 #~ msgid "ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
 #~ msgstr "integración dhcpd ISC no disponible: fijar HAVE_ISC_READER en src/config.h"
@@ -1892,14 +1942,14 @@
 #~ msgstr "corriendo como root"
 
 #~ msgid "Read leases at startup, but never write the lease file."
-#~ msgstr "Leer arriendos al inicio, pero nunca escribir el archivo de arriendos."
+#~ msgstr "Leer concesión al inicio, pero nunca escribir el archivo de concesión."
 
 #, fuzzy
 #~ msgid "read %s - %d hosts"
 #~ msgstr "direcciónes %s - %d leídas"
 
 #~ msgid "Limit of %d leases exceeded."
-#~ msgstr "Límite de %d arriendos excedido."
+#~ msgstr "Límite de %d concesión excedido."
 
 #~ msgid "domains"
 #~ msgstr "dominios"
diff --git a/po/fi.po b/po/fi.po
index 22f089c..21517ca 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -21,17 +21,17 @@
 msgid "failed to load names from %s: %s"
 msgstr ""
 
-#: cache.c:834 dhcp.c:845
+#: cache.c:834 dhcp.c:819
 #, c-format
 msgid "bad address at %s line %d"
 msgstr ""
 
-#: cache.c:885 dhcp.c:861
+#: cache.c:885 dhcp.c:835
 #, c-format
 msgid "bad name at %s line %d"
 msgstr ""
 
-#: cache.c:892 dhcp.c:936
+#: cache.c:892 dhcp.c:910
 #, c-format
 msgid "read %s - %d addresses"
 msgstr ""
@@ -40,37 +40,37 @@
 msgid "cleared cache"
 msgstr ""
 
-#: cache.c:1016
+#: cache.c:984
 #, c-format
 msgid "No IPv4 address found for %s"
 msgstr ""
 
-#: cache.c:1093
+#: cache.c:1061
 #, c-format
 msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
 msgstr ""
 
-#: cache.c:1117
+#: cache.c:1085
 #, c-format
 msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
 msgstr ""
 
-#: cache.c:1162
+#: cache.c:1130
 #, c-format
 msgid "time %lu"
 msgstr ""
 
-#: cache.c:1163
+#: cache.c:1131
 #, c-format
 msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
 msgstr ""
 
-#: cache.c:1165
+#: cache.c:1133
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr ""
 
-#: cache.c:1188
+#: cache.c:1156
 #, c-format
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr ""
@@ -80,893 +80,913 @@
 msgid "failed to seed the random number generator: %s"
 msgstr ""
 
-#: util.c:189
+#: util.c:192
 msgid "failed to allocate memory"
 msgstr ""
 
-#: util.c:227 option.c:531
+#: util.c:230 option.c:540
 msgid "could not get memory"
 msgstr ""
 
-#: util.c:237
+#: util.c:240
 #, c-format
 msgid "cannot create pipe: %s"
 msgstr ""
 
-#: util.c:245
+#: util.c:248
 #, c-format
 msgid "failed to allocate %d bytes"
 msgstr ""
 
-#: util.c:400
+#: util.c:403
 #, c-format
 msgid "infinite"
 msgstr ""
 
-#: option.c:286
+#: option.c:292
 msgid "Specify local address(es) to listen on."
 msgstr ""
 
-#: option.c:287
+#: option.c:293
 msgid "Return ipaddr for all hosts in specified domains."
 msgstr ""
 
-#: option.c:288
+#: option.c:294
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr ""
 
-#: option.c:289
+#: option.c:295
 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
 msgstr ""
 
-#: option.c:290
+#: option.c:296
 #, c-format
 msgid "Specify the size of the cache in entries (defaults to %s)."
 msgstr ""
 
-#: option.c:291
+#: option.c:297
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr ""
 
-#: option.c:292
+#: option.c:298
 msgid "Do NOT fork into the background: run in debug mode."
 msgstr ""
 
-#: option.c:293
+#: option.c:299
 msgid "Do NOT forward queries with no domain part."
 msgstr ""
 
-#: option.c:294
+#: option.c:300
 msgid "Return self-pointing MX records for local hosts."
 msgstr ""
 
-#: option.c:295
+#: option.c:301
 msgid "Expand simple names in /etc/hosts with domain-suffix."
 msgstr ""
 
-#: option.c:296
+#: option.c:302
 msgid "Don't forward spurious DNS requests from Windows hosts."
 msgstr ""
 
-#: option.c:297
-msgid "Enable DHCP in the range given with lease duration."
-msgstr ""
-
-#: option.c:298
-#, c-format
-msgid "Change to this group after startup (defaults to %s)."
-msgstr ""
-
-#: option.c:299
-msgid "Set address or hostname for a specified machine."
-msgstr ""
-
-#: option.c:300
-msgid "Read DHCP host specs from file."
-msgstr ""
-
-#: option.c:301
-msgid "Read DHCP option specs from file."
-msgstr ""
-
-#: option.c:302
-msgid "Evaluate conditional tag expression."
-msgstr ""
-
 #: option.c:303
-#, c-format
-msgid "Do NOT load %s file."
+msgid "Enable DHCP in the range given with lease duration."
 msgstr ""
 
 #: option.c:304
 #, c-format
-msgid "Specify a hosts file to be read in addition to %s."
+msgid "Change to this group after startup (defaults to %s)."
 msgstr ""
 
 #: option.c:305
-msgid "Specify interface(s) to listen on."
+msgid "Set address or hostname for a specified machine."
 msgstr ""
 
 #: option.c:306
-msgid "Specify interface(s) NOT to listen on."
+msgid "Read DHCP host specs from file."
 msgstr ""
 
 #: option.c:307
-msgid "Map DHCP user class to tag."
+msgid "Read DHCP option specs from file."
 msgstr ""
 
 #: option.c:308
-msgid "Map RFC3046 circuit-id to tag."
+msgid "Evaluate conditional tag expression."
 msgstr ""
 
 #: option.c:309
-msgid "Map RFC3046 remote-id to tag."
+#, c-format
+msgid "Do NOT load %s file."
 msgstr ""
 
 #: option.c:310
-msgid "Map RFC3993 subscriber-id to tag."
+#, c-format
+msgid "Specify a hosts file to be read in addition to %s."
 msgstr ""
 
 #: option.c:311
-msgid "Don't do DHCP for hosts with tag set."
+msgid "Specify interface(s) to listen on."
 msgstr ""
 
 #: option.c:312
-msgid "Force broadcast replies for hosts with tag set."
+msgid "Specify interface(s) NOT to listen on."
 msgstr ""
 
 #: option.c:313
-msgid "Do NOT fork into the background, do NOT run in debug mode."
+msgid "Map DHCP user class to tag."
 msgstr ""
 
 #: option.c:314
-msgid "Assume we are the only DHCP server on the local network."
+msgid "Map RFC3046 circuit-id to tag."
 msgstr ""
 
 #: option.c:315
-#, c-format
-msgid "Specify where to store DHCP leases (defaults to %s)."
+msgid "Map RFC3046 remote-id to tag."
 msgstr ""
 
 #: option.c:316
-msgid "Return MX records for local hosts."
+msgid "Map RFC3993 subscriber-id to tag."
 msgstr ""
 
 #: option.c:317
-msgid "Specify an MX record."
+msgid "Don't do DHCP for hosts with tag set."
 msgstr ""
 
 #: option.c:318
-msgid "Specify BOOTP options to DHCP server."
+msgid "Force broadcast replies for hosts with tag set."
 msgstr ""
 
 #: option.c:319
-#, c-format
-msgid "Do NOT poll %s file, reload only on SIGHUP."
+msgid "Do NOT fork into the background, do NOT run in debug mode."
 msgstr ""
 
 #: option.c:320
-msgid "Do NOT cache failed search results."
+msgid "Assume we are the only DHCP server on the local network."
 msgstr ""
 
 #: option.c:321
 #, c-format
-msgid "Use nameservers strictly in the order given in %s."
+msgid "Specify where to store DHCP leases (defaults to %s)."
 msgstr ""
 
 #: option.c:322
-msgid "Specify options to be sent to DHCP clients."
+msgid "Return MX records for local hosts."
 msgstr ""
 
 #: option.c:323
-msgid "DHCP option sent even if the client does not request it."
+msgid "Specify an MX record."
 msgstr ""
 
 #: option.c:324
-msgid "Specify port to listen for DNS requests on (defaults to 53)."
+msgid "Specify BOOTP options to DHCP server."
 msgstr ""
 
 #: option.c:325
 #, c-format
-msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
+msgid "Do NOT poll %s file, reload only on SIGHUP."
 msgstr ""
 
 #: option.c:326
-msgid "Log DNS queries."
+msgid "Do NOT cache failed search results."
 msgstr ""
 
 #: option.c:327
-msgid "Force the originating port for upstream DNS queries."
+#, c-format
+msgid "Use nameservers strictly in the order given in %s."
 msgstr ""
 
 #: option.c:328
-msgid "Do NOT read resolv.conf."
+msgid "Specify options to be sent to DHCP clients."
 msgstr ""
 
 #: option.c:329
+msgid "DHCP option sent even if the client does not request it."
+msgstr ""
+
+#: option.c:330
+msgid "Specify port to listen for DNS requests on (defaults to 53)."
+msgstr ""
+
+#: option.c:331
+#, c-format
+msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
+msgstr ""
+
+#: option.c:332
+msgid "Log DNS queries."
+msgstr ""
+
+#: option.c:333
+msgid "Force the originating port for upstream DNS queries."
+msgstr ""
+
+#: option.c:334
+msgid "Do NOT read resolv.conf."
+msgstr ""
+
+#: option.c:335
 #, c-format
 msgid "Specify path to resolv.conf (defaults to %s)."
 msgstr ""
 
-#: option.c:330
+#: option.c:336
 msgid "Specify address(es) of upstream servers with optional domains."
 msgstr ""
 
-#: option.c:331
+#: option.c:337
 msgid "Never forward queries to specified domains."
 msgstr ""
 
-#: option.c:332
+#: option.c:338
 msgid "Specify the domain to be assigned in DHCP leases."
 msgstr ""
 
-#: option.c:333
+#: option.c:339
 msgid "Specify default target in an MX record."
 msgstr ""
 
-#: option.c:334
+#: option.c:340
 msgid "Specify time-to-live in seconds for replies from /etc/hosts."
 msgstr ""
 
-#: option.c:335
+#: option.c:341
 msgid "Specify time-to-live in seconds for negative caching."
 msgstr ""
 
-#: option.c:336
-msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
-msgstr ""
-
-#: option.c:337
-#, c-format
-msgid "Change to this user after startup. (defaults to %s)."
-msgstr ""
-
-#: option.c:338
-msgid "Map DHCP vendor class to tag."
-msgstr ""
-
-#: option.c:339
-msgid "Display dnsmasq version and copyright information."
-msgstr ""
-
-#: option.c:340
-msgid "Translate IPv4 addresses from upstream servers."
-msgstr ""
-
-#: option.c:341
-msgid "Specify a SRV record."
-msgstr ""
-
 #: option.c:342
-msgid "Display this message. Use --help dhcp for known DHCP options."
+msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
 msgstr ""
 
 #: option.c:343
 #, c-format
-msgid "Specify path of PID file (defaults to %s)."
+msgid "Change to this user after startup. (defaults to %s)."
 msgstr ""
 
 #: option.c:344
-#, c-format
-msgid "Specify maximum number of DHCP leases (defaults to %s)."
+msgid "Map DHCP vendor class to tag."
 msgstr ""
 
 #: option.c:345
-msgid "Answer DNS queries based on the interface a query was sent to."
+msgid "Display dnsmasq version and copyright information."
 msgstr ""
 
 #: option.c:346
-msgid "Specify TXT DNS record."
+msgid "Translate IPv4 addresses from upstream servers."
 msgstr ""
 
 #: option.c:347
-msgid "Specify PTR DNS record."
+msgid "Specify a SRV record."
 msgstr ""
 
 #: option.c:348
-msgid "Give DNS name to IPv4 address of interface."
+msgid "Display this message. Use --help dhcp for known DHCP options."
 msgstr ""
 
 #: option.c:349
-msgid "Bind only to interfaces in use."
+#, c-format
+msgid "Specify path of PID file (defaults to %s)."
 msgstr ""
 
 #: option.c:350
 #, c-format
-msgid "Read DHCP static host information from %s."
+msgid "Specify maximum number of DHCP leases (defaults to %s)."
 msgstr ""
 
 #: option.c:351
-msgid "Enable the DBus interface for setting upstream servers, etc."
+msgid "Answer DNS queries based on the interface a query was sent to."
 msgstr ""
 
 #: option.c:352
-msgid "Do not provide DHCP on this interface, only provide DNS."
+msgid "Specify TXT DNS record."
 msgstr ""
 
 #: option.c:353
-msgid "Enable dynamic address allocation for bootp."
+msgid "Specify PTR DNS record."
 msgstr ""
 
 #: option.c:354
-msgid "Map MAC address (with wildcards) to option set."
+msgid "Give DNS name to IPv4 address of interface."
 msgstr ""
 
 #: option.c:355
-msgid "Treat DHCP requests on aliases as arriving from interface."
+msgid "Bind only to interfaces in use."
 msgstr ""
 
 #: option.c:356
-msgid "Disable ICMP echo address checking in the DHCP server."
+#, c-format
+msgid "Read DHCP static host information from %s."
 msgstr ""
 
 #: option.c:357
-msgid "Shell script to run on DHCP lease creation and destruction."
+msgid "Enable the DBus interface for setting upstream servers, etc."
 msgstr ""
 
 #: option.c:358
-msgid "Lua script to run on DHCP lease creation and destruction."
+msgid "Do not provide DHCP on this interface, only provide DNS."
 msgstr ""
 
 #: option.c:359
-msgid "Run lease-change scripts as this user."
+msgid "Enable dynamic address allocation for bootp."
 msgstr ""
 
 #: option.c:360
-msgid "Read configuration from all the files in this directory."
+msgid "Map MAC address (with wildcards) to option set."
 msgstr ""
 
 #: option.c:361
-msgid "Log to this syslog facility or file. (defaults to DAEMON)"
+msgid "Treat DHCP requests on aliases as arriving from interface."
 msgstr ""
 
 #: option.c:362
-msgid "Do not use leasefile."
+msgid "Disable ICMP echo address checking in the DHCP server."
 msgstr ""
 
 #: option.c:363
+msgid "Shell script to run on DHCP lease creation and destruction."
+msgstr ""
+
+#: option.c:364
+msgid "Lua script to run on DHCP lease creation and destruction."
+msgstr ""
+
+#: option.c:365
+msgid "Run lease-change scripts as this user."
+msgstr ""
+
+#: option.c:366
+msgid "Read configuration from all the files in this directory."
+msgstr ""
+
+#: option.c:367
+msgid "Log to this syslog facility or file. (defaults to DAEMON)"
+msgstr ""
+
+#: option.c:368
+msgid "Do not use leasefile."
+msgstr ""
+
+#: option.c:369
 #, c-format
 msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
 msgstr ""
 
-#: option.c:364
+#: option.c:370
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr ""
 
-#: option.c:365
+#: option.c:371
 msgid "Ignore hostnames provided by DHCP clients."
 msgstr ""
 
-#: option.c:366
+#: option.c:372
 msgid "Do NOT reuse filename and server fields for extra DHCP options."
 msgstr ""
 
-#: option.c:367
+#: option.c:373
 msgid "Enable integrated read-only TFTP server."
 msgstr ""
 
-#: option.c:368
+#: option.c:374
 msgid "Export files by TFTP only from the specified subtree."
 msgstr ""
 
-#: option.c:369
+#: option.c:375
 msgid "Add client IP address to tftp-root."
 msgstr ""
 
-#: option.c:370
+#: option.c:376
 msgid "Allow access only to files owned by the user running dnsmasq."
 msgstr ""
 
-#: option.c:371
+#: option.c:377
 #, c-format
 msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
 msgstr ""
 
-#: option.c:372
+#: option.c:378
 msgid "Disable the TFTP blocksize extension."
 msgstr ""
 
-#: option.c:373
+#: option.c:379
 msgid "Convert TFTP filenames to lowercase"
 msgstr ""
 
-#: option.c:374
+#: option.c:380
 msgid "Ephemeral port range for use by TFTP transfers."
 msgstr ""
 
-#: option.c:375
+#: option.c:381
 msgid "Extra logging for DHCP."
 msgstr ""
 
-#: option.c:376
+#: option.c:382
 msgid "Enable async. logging; optionally set queue length."
 msgstr ""
 
-#: option.c:377
+#: option.c:383
 msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
 msgstr ""
 
-#: option.c:378
+#: option.c:384
 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
 msgstr ""
 
-#: option.c:379
+#: option.c:385
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr ""
 
-#: option.c:380
+#: option.c:386
 msgid "Always perform DNS queries to all servers."
 msgstr ""
 
-#: option.c:381
+#: option.c:387
 msgid "Set tag if client includes matching option in request."
 msgstr ""
 
-#: option.c:382
+#: option.c:388
 msgid "Use alternative ports for DHCP."
 msgstr ""
 
-#: option.c:383
+#: option.c:389
 msgid "Specify NAPTR DNS record."
 msgstr ""
 
-#: option.c:384
+#: option.c:390
 msgid "Specify lowest port available for DNS query transmission."
 msgstr ""
 
-#: option.c:385
+#: option.c:391
 msgid "Use only fully qualified domain names for DHCP clients."
 msgstr ""
 
-#: option.c:386
+#: option.c:392
 msgid "Generate hostnames based on MAC address for nameless clients."
 msgstr ""
 
-#: option.c:387
+#: option.c:393
 msgid "Use these DHCP relays as full proxies."
 msgstr ""
 
-#: option.c:388
-msgid "Specify alias name for LOCAL DNS name."
-msgstr ""
-
-#: option.c:389
-msgid "Prompt to send to PXE clients."
-msgstr ""
-
-#: option.c:390
-msgid "Boot service for PXE menu."
-msgstr ""
-
-#: option.c:391
-msgid "Check configuration syntax."
-msgstr ""
-
-#: option.c:392
-msgid "Add requestor's MAC address to forwarded DNS queries."
-msgstr ""
-
-#: option.c:393
-msgid "Proxy DNSSEC validation results from upstream nameservers."
-msgstr ""
-
 #: option.c:394
-msgid "Attempt to allocate sequential IP addresses to DHCP clients."
+msgid "Relay DHCP requests to a remote server"
 msgstr ""
 
 #: option.c:395
-msgid "Copy connection-track mark from queries to upstream connections."
+msgid "Specify alias name for LOCAL DNS name."
 msgstr ""
 
 #: option.c:396
-msgid "Allow DHCP clients to do their own DDNS updates."
+msgid "Prompt to send to PXE clients."
 msgstr ""
 
 #: option.c:397
-msgid "Send router-advertisements for interfaces doing DHCPv6"
+msgid "Boot service for PXE menu."
 msgstr ""
 
 #: option.c:398
-msgid "Specify DUID_EN-type DHCPv6 server DUID"
+msgid "Check configuration syntax."
 msgstr ""
 
 #: option.c:399
-msgid "Specify host (A/AAAA and PTR) records"
+msgid "Add requestor's MAC address to forwarded DNS queries."
 msgstr ""
 
 #: option.c:400
-msgid "Specify arbitrary DNS resource record"
+msgid "Proxy DNSSEC validation results from upstream nameservers."
 msgstr ""
 
 #: option.c:401
-msgid "Bind to interfaces in use - check for new interfaces"
+msgid "Attempt to allocate sequential IP addresses to DHCP clients."
 msgstr ""
 
 #: option.c:402
-msgid "Export local names to global DNS"
+msgid "Copy connection-track mark from queries to upstream connections."
 msgstr ""
 
 #: option.c:403
-msgid "Domain to export to global DNS"
+msgid "Allow DHCP clients to do their own DDNS updates."
 msgstr ""
 
 #: option.c:404
-msgid "Set TTL for authoritative replies"
+msgid "Send router-advertisements for interfaces doing DHCPv6"
 msgstr ""
 
 #: option.c:405
-msgid "Set authoritive zone information"
+msgid "Always send frequent router-advertisements"
 msgstr ""
 
 #: option.c:406
-msgid "Secondary authoritative nameservers for forward domains"
+msgid "Specify DUID_EN-type DHCPv6 server DUID"
 msgstr ""
 
 #: option.c:407
-msgid "Peers which are allowed to do zone transfer"
+msgid "Specify host (A/AAAA and PTR) records"
 msgstr ""
 
 #: option.c:408
-msgid "Specify ipsets to which matching domains should be added"
+msgid "Specify arbitrary DNS resource record"
+msgstr ""
+
+#: option.c:409
+msgid "Bind to interfaces in use - check for new interfaces"
 msgstr ""
 
 #: option.c:410
+msgid "Export local names to global DNS"
+msgstr ""
+
+#: option.c:411
+msgid "Domain to export to global DNS"
+msgstr ""
+
+#: option.c:412
+msgid "Set TTL for authoritative replies"
+msgstr ""
+
+#: option.c:413
+msgid "Set authoritive zone information"
+msgstr ""
+
+#: option.c:414
+msgid "Secondary authoritative nameservers for forward domains"
+msgstr ""
+
+#: option.c:415
+msgid "Peers which are allowed to do zone transfer"
+msgstr ""
+
+#: option.c:416
+msgid "Specify ipsets to which matching domains should be added"
+msgstr ""
+
+#: option.c:417
+msgid "Specify a domain and address range for sythesised names"
+msgstr ""
+
+#: option.c:419
 msgid "Specify DHCPv6 prefix class"
 msgstr ""
 
-#: option.c:596
+#: option.c:605
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
 "\n"
 msgstr ""
 
-#: option.c:598
+#: option.c:607
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr ""
 
-#: option.c:600
+#: option.c:609
 #, c-format
 msgid "Valid options are:\n"
 msgstr ""
 
-#: option.c:650 option.c:654
+#: option.c:659 option.c:663
 msgid "bad port"
 msgstr ""
 
-#: option.c:681 option.c:713
+#: option.c:690 option.c:722
 msgid "interface binding not supported"
 msgstr ""
 
-#: option.c:690 option.c:3179
+#: option.c:699 option.c:3275
 msgid "bad interface name"
 msgstr ""
 
-#: option.c:720
+#: option.c:729
 msgid "bad address"
 msgstr ""
 
-#: option.c:847
+#: option.c:863
 msgid "unsupported encapsulation for IPv6 option"
 msgstr ""
 
-#: option.c:861
+#: option.c:877
 msgid "bad dhcp-option"
 msgstr ""
 
-#: option.c:929
+#: option.c:945
 msgid "bad IP address"
 msgstr ""
 
-#: option.c:932 option.c:1070 option.c:2549
+#: option.c:948 option.c:1086 option.c:2620
 msgid "bad IPv6 address"
 msgstr ""
 
-#: option.c:1097 option.c:1191
+#: option.c:1113 option.c:1207
 msgid "bad domain in dhcp-option"
 msgstr ""
 
-#: option.c:1229
+#: option.c:1245
 msgid "dhcp-option too long"
 msgstr ""
 
-#: option.c:1236
+#: option.c:1252
 msgid "illegal dhcp-match"
 msgstr ""
 
-#: option.c:1298
+#: option.c:1314
 msgid "illegal repeated flag"
 msgstr ""
 
-#: option.c:1306
+#: option.c:1322
 msgid "illegal repeated keyword"
 msgstr ""
 
-#: option.c:1358 option.c:3702
+#: option.c:1374 option.c:3802
 #, c-format
 msgid "cannot access directory %s: %s"
 msgstr ""
 
-#: option.c:1390 tftp.c:474
+#: option.c:1406 tftp.c:487
 #, c-format
 msgid "cannot access %s: %s"
 msgstr ""
 
-#: option.c:1426
+#: option.c:1442
 msgid "setting log facility is not possible under Android"
 msgstr ""
 
-#: option.c:1435
+#: option.c:1451
 msgid "bad log facility"
 msgstr ""
 
-#: option.c:1484
+#: option.c:1500
 msgid "bad MX preference"
 msgstr ""
 
-#: option.c:1489
+#: option.c:1505
 msgid "bad MX name"
 msgstr ""
 
-#: option.c:1503
+#: option.c:1519
 msgid "bad MX target"
 msgstr ""
 
-#: option.c:1515
+#: option.c:1531
 msgid "cannot run scripts under uClinux"
 msgstr ""
 
-#: option.c:1517
+#: option.c:1533
 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
 msgstr ""
 
-#: option.c:1521
+#: option.c:1537
 msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
 msgstr ""
 
-#: option.c:1631
+#: option.c:1739 option.c:1800
 msgid "bad prefix"
 msgstr ""
 
-#: option.c:2043
+#: option.c:2094
 msgid "recompile with HAVE_IPSET defined to enable ipset directives"
 msgstr ""
 
-#: option.c:2223
+#: option.c:2274
 msgid "bad port range"
 msgstr ""
 
-#: option.c:2239
+#: option.c:2290
 msgid "bad bridge-interface"
 msgstr ""
 
-#: option.c:2297
+#: option.c:2350
 msgid "only one tag allowed"
 msgstr ""
 
-#: option.c:2317 option.c:2329 option.c:2461
+#: option.c:2370 option.c:2382 option.c:2491 option.c:2532
 msgid "bad dhcp-range"
 msgstr ""
 
-#: option.c:2344
+#: option.c:2397
 msgid "inconsistent DHCP range"
 msgstr ""
 
-#: option.c:2402
-msgid "prefix must be exactly 64 for RA subnets"
+#: option.c:2459
+msgid "prefix length must be exactly 64 for RA subnets"
 msgstr ""
 
-#: option.c:2404
-msgid "prefix must be exactly 64 for subnet constructors"
+#: option.c:2461
+msgid "prefix length must be exactly 64 for subnet constructors"
 msgstr ""
 
-#: option.c:2407
-msgid "prefix must be at least 64"
+#: option.c:2465
+msgid "prefix length must be at least 64"
 msgstr ""
 
-#: option.c:2412
+#: option.c:2468
 msgid "inconsistent DHCPv6 range"
 msgstr ""
 
-#: option.c:2519 option.c:2567
+#: option.c:2479
+msgid "prefix must be zero with \"constructor:\" argument"
+msgstr ""
+
+#: option.c:2590 option.c:2638
 msgid "bad hex constant"
 msgstr ""
 
-#: option.c:2541
+#: option.c:2612
 msgid "cannot match tags in --dhcp-host"
 msgstr ""
 
-#: option.c:2589
+#: option.c:2660
 #, c-format
 msgid "duplicate dhcp-host IP address %s"
 msgstr ""
 
-#: option.c:2645
+#: option.c:2716
 msgid "bad DHCP host name"
 msgstr ""
 
-#: option.c:2727
+#: option.c:2798
 msgid "bad tag-if"
 msgstr ""
 
-#: option.c:3051 option.c:3379
+#: option.c:3122 option.c:3479
 msgid "invalid port number"
 msgstr ""
 
-#: option.c:3113
+#: option.c:3184
 msgid "bad dhcp-proxy address"
 msgstr ""
 
-#: option.c:3124
+#: option.c:3210
+msgid "Bad dhcp-relay"
+msgstr ""
+
+#: option.c:3220
 msgid "bad DUID"
 msgstr ""
 
-#: option.c:3166
+#: option.c:3262
 msgid "invalid alias range"
 msgstr ""
 
-#: option.c:3205
+#: option.c:3305
 msgid "bad CNAME"
 msgstr ""
 
-#: option.c:3210
+#: option.c:3310
 msgid "duplicate CNAME"
 msgstr ""
 
-#: option.c:3230
+#: option.c:3330
 msgid "bad PTR record"
 msgstr ""
 
-#: option.c:3261
+#: option.c:3361
 msgid "bad NAPTR record"
 msgstr ""
 
-#: option.c:3295
+#: option.c:3395
 msgid "bad RR record"
 msgstr ""
 
-#: option.c:3324
+#: option.c:3424
 msgid "bad TXT record"
 msgstr ""
 
-#: option.c:3365
+#: option.c:3465
 msgid "bad SRV record"
 msgstr ""
 
-#: option.c:3372
+#: option.c:3472
 msgid "bad SRV target"
 msgstr ""
 
-#: option.c:3386
+#: option.c:3486
 msgid "invalid priority"
 msgstr ""
 
-#: option.c:3393
+#: option.c:3493
 msgid "invalid weight"
 msgstr ""
 
-#: option.c:3417
+#: option.c:3517
 msgid "Bad host-record"
 msgstr ""
 
-#: option.c:3434
+#: option.c:3534
 msgid "Bad name in host-record"
 msgstr ""
 
-#: option.c:3464
+#: option.c:3564
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr ""
 
-#: option.c:3522
+#: option.c:3622
 msgid "missing \""
 msgstr ""
 
-#: option.c:3579
+#: option.c:3679
 msgid "bad option"
 msgstr ""
 
-#: option.c:3581
+#: option.c:3681
 msgid "extraneous parameter"
 msgstr ""
 
-#: option.c:3583
+#: option.c:3683
 msgid "missing parameter"
 msgstr ""
 
-#: option.c:3590
+#: option.c:3690
 msgid "error"
 msgstr ""
 
-#: option.c:3592
+#: option.c:3692
 #, c-format
 msgid " at line %d of %s"
 msgstr ""
 
-#: option.c:3656 tftp.c:648
+#: option.c:3756 tftp.c:661
 #, c-format
 msgid "cannot read %s: %s"
 msgstr ""
 
-#: option.c:3823 option.c:3859
+#: option.c:3923 option.c:3959
 #, c-format
 msgid "read %s"
 msgstr ""
 
-#: option.c:3915
+#: option.c:4015
 msgid "junk found in command line"
 msgstr ""
 
-#: option.c:3950
+#: option.c:4050
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr ""
 
-#: option.c:3951
+#: option.c:4051
 #, c-format
 msgid ""
 "Compile time options: %s\n"
 "\n"
 msgstr ""
 
-#: option.c:3952
+#: option.c:4052
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr ""
 
-#: option.c:3953
+#: option.c:4053
 #, c-format
 msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
 msgstr ""
 
-#: option.c:3954
+#: option.c:4054
 #, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr ""
 
-#: option.c:3965
+#: option.c:4065
 msgid "try --help"
 msgstr ""
 
-#: option.c:3967
+#: option.c:4067
 msgid "try -w"
 msgstr ""
 
-#: option.c:3969
+#: option.c:4069
 #, c-format
 msgid "bad command line options: %s"
 msgstr ""
 
-#: option.c:4018
+#: option.c:4118
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr ""
 
-#: option.c:4046
+#: option.c:4146
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr ""
 
-#: option.c:4056
+#: option.c:4156
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr ""
 
-#: option.c:4059 network.c:1039 dhcp.c:794
+#: option.c:4159 network.c:1178 dhcp.c:768
 #, c-format
 msgid "failed to read %s: %s"
 msgstr ""
 
-#: option.c:4076
+#: option.c:4176
 #, c-format
 msgid "no search directive found in %s"
 msgstr ""
 
-#: option.c:4097
+#: option.c:4197
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr ""
 
-#: option.c:4101
+#: option.c:4201
 msgid "syntax check OK"
 msgstr ""
 
@@ -985,101 +1005,106 @@
 msgid "possible DNS-rebind attack detected: %s"
 msgstr ""
 
-#: network.c:414
+#: forward.c:1216
+#, c-format
+msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+msgstr ""
+
+#: network.c:551
 #, c-format
 msgid "failed to create listening socket for %s: %s"
 msgstr ""
 
-#: network.c:743
+#: network.c:882
 #, c-format
 msgid "interface %s failed to join DHCPv6 multicast group: %s"
 msgstr ""
 
-#: network.c:937
+#: network.c:1076
 #, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr ""
 
-#: network.c:974
+#: network.c:1113
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr ""
 
-#: network.c:985
+#: network.c:1124
 #, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr ""
 
-#: network.c:1002
+#: network.c:1141
 msgid "unqualified"
 msgstr ""
 
-#: network.c:1002
+#: network.c:1141
 msgid "names"
 msgstr ""
 
-#: network.c:1004
+#: network.c:1143
 msgid "default"
 msgstr ""
 
-#: network.c:1006
+#: network.c:1145
 msgid "domain"
 msgstr ""
 
-#: network.c:1009
+#: network.c:1148
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr ""
 
-#: network.c:1011
+#: network.c:1150
 #, c-format
 msgid "using standard nameservers for %s %s"
 msgstr ""
 
-#: network.c:1013
+#: network.c:1152
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr ""
 
-#: network.c:1016
+#: network.c:1155
 #, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr ""
 
-#: network.c:1018
+#: network.c:1157
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr ""
 
-#: dnsmasq.c:131
+#: dnsmasq.c:134
 msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
 msgstr ""
 
-#: dnsmasq.c:136
+#: dnsmasq.c:139
 msgid "Cannot use --conntrack AND --query-port"
 msgstr ""
 
-#: dnsmasq.c:139
+#: dnsmasq.c:142
 msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
 msgstr ""
 
-#: dnsmasq.c:144
+#: dnsmasq.c:147
 msgid "asychronous logging is not available under Solaris"
 msgstr ""
 
-#: dnsmasq.c:149
+#: dnsmasq.c:152
 msgid "asychronous logging is not available under Android"
 msgstr ""
 
-#: dnsmasq.c:154
+#: dnsmasq.c:157
 msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
 msgstr ""
 
-#: dnsmasq.c:164
+#: dnsmasq.c:167
 msgid "zone serial must be configured in --auth-soa"
 msgstr ""
 
-#: dnsmasq.c:186
+#: dnsmasq.c:185
 msgid "dhcp-range constructor not available on this platform"
 msgstr ""
 
@@ -1097,426 +1122,431 @@
 msgid "unknown interface %s"
 msgstr ""
 
-#: dnsmasq.c:274 dnsmasq.c:860
+#: dnsmasq.c:275 dnsmasq.c:870
 #, c-format
 msgid "DBus error: %s"
 msgstr ""
 
-#: dnsmasq.c:277
+#: dnsmasq.c:278
 msgid "DBus not available: set HAVE_DBUS in src/config.h"
 msgstr ""
 
-#: dnsmasq.c:305
+#: dnsmasq.c:306
 #, c-format
 msgid "unknown user or group: %s"
 msgstr ""
 
-#: dnsmasq.c:360
+#: dnsmasq.c:361
 #, c-format
 msgid "cannot chdir to filesystem root: %s"
 msgstr ""
 
-#: dnsmasq.c:597
+#: dnsmasq.c:598
 #, c-format
 msgid "started, version %s DNS disabled"
 msgstr ""
 
-#: dnsmasq.c:599
+#: dnsmasq.c:600
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr ""
 
-#: dnsmasq.c:601
+#: dnsmasq.c:602
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr ""
 
-#: dnsmasq.c:603
+#: dnsmasq.c:604
 #, c-format
 msgid "compile time options: %s"
 msgstr ""
 
-#: dnsmasq.c:609
+#: dnsmasq.c:610
 msgid "DBus support enabled: connected to system bus"
 msgstr ""
 
-#: dnsmasq.c:611
+#: dnsmasq.c:612
 msgid "DBus support enabled: bus connection pending"
 msgstr ""
 
-#: dnsmasq.c:616
+#: dnsmasq.c:617
 #, c-format
 msgid "warning: failed to change owner of %s: %s"
 msgstr ""
 
-#: dnsmasq.c:620
+#: dnsmasq.c:621
 msgid "setting --bind-interfaces option because of OS limitations"
 msgstr ""
 
-#: dnsmasq.c:625
+#: dnsmasq.c:626
 #, c-format
 msgid "warning: interface %s does not currently exist"
 msgstr ""
 
-#: dnsmasq.c:630
+#: dnsmasq.c:631
 msgid "warning: ignoring resolv-file flag because no-resolv is set"
 msgstr ""
 
-#: dnsmasq.c:633
+#: dnsmasq.c:634
 msgid "warning: no upstream servers configured"
 msgstr ""
 
-#: dnsmasq.c:637
+#: dnsmasq.c:638
 #, c-format
 msgid "asynchronous logging enabled, queue limit is %d messages"
 msgstr ""
 
-#: dnsmasq.c:652
+#: dnsmasq.c:659
 msgid "IPv6 router advertisement enabled"
 msgstr ""
 
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 msgid "root is "
 msgstr ""
 
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 msgid "enabled"
 msgstr ""
 
-#: dnsmasq.c:671
+#: dnsmasq.c:678
 msgid "secure mode"
 msgstr ""
 
-#: dnsmasq.c:697
+#: dnsmasq.c:704
 #, c-format
 msgid "restricting maximum simultaneous TFTP transfers to %d"
 msgstr ""
 
-#: dnsmasq.c:862
+#: dnsmasq.c:872
 msgid "connected to system DBus"
 msgstr ""
 
-#: dnsmasq.c:1007
+#: dnsmasq.c:1017
 #, c-format
 msgid "cannot fork into background: %s"
 msgstr ""
 
-#: dnsmasq.c:1010
+#: dnsmasq.c:1020
 #, c-format
 msgid "failed to create helper: %s"
 msgstr ""
 
-#: dnsmasq.c:1013
+#: dnsmasq.c:1023
 #, c-format
 msgid "setting capabilities failed: %s"
 msgstr ""
 
-#: dnsmasq.c:1016
+#: dnsmasq.c:1026
 #, c-format
 msgid "failed to change user-id to %s: %s"
 msgstr ""
 
-#: dnsmasq.c:1019
+#: dnsmasq.c:1029
 #, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr ""
 
-#: dnsmasq.c:1022
+#: dnsmasq.c:1032
 #, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr ""
 
-#: dnsmasq.c:1025
+#: dnsmasq.c:1035
 #, c-format
 msgid "cannot open log %s: %s"
 msgstr ""
 
-#: dnsmasq.c:1028
+#: dnsmasq.c:1038
 #, c-format
 msgid "failed to load Lua script: %s"
 msgstr ""
 
-#: dnsmasq.c:1031
+#: dnsmasq.c:1041
 #, c-format
 msgid "TFTP directory %s inaccessible: %s"
 msgstr ""
 
-#: dnsmasq.c:1095
+#: dnsmasq.c:1105
 #, c-format
 msgid "script process killed by signal %d"
 msgstr ""
 
-#: dnsmasq.c:1099
+#: dnsmasq.c:1109
 #, c-format
 msgid "script process exited with status %d"
 msgstr ""
 
-#: dnsmasq.c:1103
+#: dnsmasq.c:1113
 #, c-format
 msgid "failed to execute %s: %s"
 msgstr ""
 
-#: dnsmasq.c:1148
+#: dnsmasq.c:1158
 msgid "exiting on receipt of SIGTERM"
 msgstr ""
 
-#: dnsmasq.c:1176
+#: dnsmasq.c:1186
 #, c-format
 msgid "failed to access %s: %s"
 msgstr ""
 
-#: dnsmasq.c:1206
+#: dnsmasq.c:1216
 #, c-format
 msgid "reading %s"
 msgstr ""
 
-#: dnsmasq.c:1217
+#: dnsmasq.c:1227
 #, c-format
 msgid "no servers found in %s, will retry"
 msgstr ""
 
-#: dhcp.c:49
+#: dhcp.c:53
 #, c-format
 msgid "cannot create DHCP socket: %s"
 msgstr ""
 
-#: dhcp.c:64
+#: dhcp.c:68
 #, c-format
 msgid "failed to set options on DHCP socket: %s"
 msgstr ""
 
-#: dhcp.c:77
+#: dhcp.c:89
 #, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
 msgstr ""
 
-#: dhcp.c:89
+#: dhcp.c:101
 #, c-format
 msgid "failed to bind DHCP server socket: %s"
 msgstr ""
 
-#: dhcp.c:115
+#: dhcp.c:127
 #, c-format
 msgid "cannot create ICMP raw socket: %s."
 msgstr ""
 
-#: dhcp.c:225
+#: dhcp.c:239
 #, c-format
 msgid "unknown interface %s in bridge-interface"
 msgstr ""
 
-#: dhcp.c:250
+#: dhcp.c:278
 #, c-format
 msgid "DHCP packet received on %s which has no address"
 msgstr ""
 
-#: dhcp.c:457
+#: dhcp.c:505
 #, c-format
 msgid "DHCP range %s -- %s is not consistent with netmask %s"
 msgstr ""
 
-#: dhcp.c:832
+#: dhcp.c:806
 #, c-format
 msgid "bad line at %s line %d"
 msgstr ""
 
-#: dhcp.c:875
+#: dhcp.c:849
 #, c-format
 msgid "ignoring %s line %d, duplicate name or IP address"
 msgstr ""
 
+#: dhcp.c:993 rfc3315.c:2047
+#, c-format
+msgid "DHCP relay %s -> %s"
+msgstr ""
+
 #: lease.c:61
 #, c-format
 msgid "cannot open or create lease file %s: %s"
 msgstr ""
 
-#: lease.c:133
+#: lease.c:134
 msgid "too many stored leases"
 msgstr ""
 
-#: lease.c:164
+#: lease.c:165
 #, c-format
 msgid "cannot run lease-init script %s: %s"
 msgstr ""
 
-#: lease.c:170
+#: lease.c:171
 #, c-format
 msgid "lease-init script returned exit code %s"
 msgstr ""
 
-#: lease.c:339
+#: lease.c:342
 #, c-format
 msgid "failed to write %s: %s (retry in %us)"
 msgstr ""
 
-#: lease.c:843
+#: lease.c:871
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr ""
 
-#: rfc2131.c:337
+#: rfc2131.c:338
 #, c-format
 msgid "no address range available for DHCP request %s %s"
 msgstr ""
 
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "with subnet selector"
 msgstr ""
 
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "via"
 msgstr ""
 
-#: rfc2131.c:350
+#: rfc2131.c:351
 #, c-format
 msgid "%u available DHCP subnet: %s/%s"
 msgstr ""
 
-#: rfc2131.c:353 rfc3315.c:272
+#: rfc2131.c:354 rfc3315.c:292
 #, c-format
 msgid "%u available DHCP range: %s -- %s"
 msgstr ""
 
-#: rfc2131.c:382
-msgid "disabled"
-msgstr ""
-
-#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771
-#: rfc3315.c:1017
-msgid "ignored"
-msgstr ""
-
-#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814
-msgid "address in use"
-msgstr ""
-
-#: rfc2131.c:452 rfc2131.c:1007
-msgid "no address available"
-msgstr ""
-
-#: rfc2131.c:459 rfc2131.c:1154
-msgid "wrong network"
-msgstr ""
-
-#: rfc2131.c:474
-msgid "no address configured"
-msgstr ""
-
-#: rfc2131.c:480 rfc2131.c:1204
-msgid "no leases left"
-msgstr ""
-
-#: rfc2131.c:576 rfc3315.c:428
-#, c-format
-msgid "%u client provides name: %s"
-msgstr ""
-
-#: rfc2131.c:731
+#: rfc2131.c:465
 #, c-format
 msgid "%u vendor class: %s"
 msgstr ""
 
-#: rfc2131.c:733
+#: rfc2131.c:467
 #, c-format
 msgid "%u user class: %s"
 msgstr ""
 
+#: rfc2131.c:494
+msgid "disabled"
+msgstr ""
+
+#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813
+#: rfc3315.c:1082
+msgid "ignored"
+msgstr ""
+
+#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863
+msgid "address in use"
+msgstr ""
+
+#: rfc2131.c:564 rfc2131.c:1015
+msgid "no address available"
+msgstr ""
+
+#: rfc2131.c:571 rfc2131.c:1162
+msgid "wrong network"
+msgstr ""
+
+#: rfc2131.c:586
+msgid "no address configured"
+msgstr ""
+
+#: rfc2131.c:592 rfc2131.c:1212
+msgid "no leases left"
+msgstr ""
+
+#: rfc2131.c:687 rfc3315.c:466
+#, c-format
+msgid "%u client provides name: %s"
+msgstr ""
+
 #: rfc2131.c:792
 msgid "PXE BIS not supported"
 msgstr ""
 
-#: rfc2131.c:923 rfc3315.c:1111
+#: rfc2131.c:931 rfc3315.c:1176
 #, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr ""
 
-#: rfc2131.c:944
+#: rfc2131.c:952
 msgid "unknown lease"
 msgstr ""
 
-#: rfc2131.c:976
+#: rfc2131.c:984
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr ""
 
-#: rfc2131.c:986
+#: rfc2131.c:994
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr ""
 
-#: rfc2131.c:989
+#: rfc2131.c:997
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr ""
 
-#: rfc2131.c:1005 rfc2131.c:1197
+#: rfc2131.c:1013 rfc2131.c:1205
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:1092
+#: rfc2131.c:1100
 msgid "wrong server-ID"
 msgstr ""
 
-#: rfc2131.c:1111
+#: rfc2131.c:1119
 msgid "wrong address"
 msgstr ""
 
-#: rfc2131.c:1129 rfc3315.c:911
+#: rfc2131.c:1137 rfc3315.c:959
 msgid "lease not found"
 msgstr ""
 
-#: rfc2131.c:1162
+#: rfc2131.c:1170
 msgid "address not available"
 msgstr ""
 
-#: rfc2131.c:1173
+#: rfc2131.c:1181
 msgid "static lease available"
 msgstr ""
 
-#: rfc2131.c:1177
+#: rfc2131.c:1185
 msgid "address reserved"
 msgstr ""
 
-#: rfc2131.c:1185
+#: rfc2131.c:1193
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr ""
 
-#: rfc2131.c:1679
+#: rfc2131.c:1701
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr ""
 
-#: rfc2131.c:1688
+#: rfc2131.c:1710
 #, c-format
 msgid "%u server name: %s"
 msgstr ""
 
-#: rfc2131.c:1696
+#: rfc2131.c:1718
 #, c-format
 msgid "%u next server: %s"
 msgstr ""
 
-#: rfc2131.c:1699
+#: rfc2131.c:1721
 #, c-format
 msgid "%u broadcast response"
 msgstr ""
 
-#: rfc2131.c:1762
+#: rfc2131.c:1784
 #, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr ""
 
-#: rfc2131.c:2002
+#: rfc2131.c:2025
 msgid "PXE menu too large"
 msgstr ""
 
-#: rfc2131.c:2139 rfc3315.c:1332
+#: rfc2131.c:2162 rfc3315.c:1420
 #, c-format
 msgid "%u requested options: %s"
 msgstr ""
 
-#: rfc2131.c:2415
+#: rfc2131.c:2442
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr ""
@@ -1526,7 +1556,7 @@
 msgid "cannot create netlink socket: %s"
 msgstr ""
 
-#: netlink.c:354
+#: netlink.c:363
 #, c-format
 msgid "netlink returns error: %s"
 msgstr ""
@@ -1535,53 +1565,53 @@
 msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
 msgstr ""
 
-#: dbus.c:308 dbus.c:504
+#: dbus.c:523
 msgid "setting upstream servers from DBus"
 msgstr ""
 
-#: dbus.c:561
+#: dbus.c:570
 msgid "could not register a DBus message handler"
 msgstr ""
 
-#: bpf.c:197
+#: bpf.c:245
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr ""
 
-#: bpf.c:225
+#: bpf.c:273
 #, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr ""
 
-#: helper.c:145
+#: helper.c:151
 msgid "lease() function missing in Lua script"
 msgstr ""
 
-#: tftp.c:290
+#: tftp.c:303
 msgid "unable to get free port for TFTP"
 msgstr ""
 
-#: tftp.c:306
+#: tftp.c:319
 #, c-format
 msgid "unsupported request from %s"
 msgstr ""
 
-#: tftp.c:420
+#: tftp.c:433
 #, c-format
 msgid "file %s not found"
 msgstr ""
 
-#: tftp.c:529
+#: tftp.c:542
 #, c-format
 msgid "error %d %s received from %s"
 msgstr ""
 
-#: tftp.c:571
+#: tftp.c:584
 #, c-format
 msgid "failed sending %s to %s"
 msgstr ""
 
-#: tftp.c:571
+#: tftp.c:584
 #, c-format
 msgid "sent %s to %s"
 msgstr ""
@@ -1605,176 +1635,195 @@
 msgid "Conntrack connection mark retrieval failed: %s"
 msgstr ""
 
-#: dhcp6.c:49
+#: dhcp6.c:59
 #, c-format
 msgid "cannot create DHCPv6 socket: %s"
 msgstr ""
 
-#: dhcp6.c:62
+#: dhcp6.c:80
 #, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s"
 msgstr ""
 
-#: dhcp6.c:74
+#: dhcp6.c:92
 #, c-format
 msgid "failed to bind DHCPv6 server socket: %s"
 msgstr ""
 
-#: rfc3315.c:135
+#: rfc3315.c:149
 #, c-format
 msgid "no address range available for DHCPv6 request from relay at %s"
 msgstr ""
 
-#: rfc3315.c:144
+#: rfc3315.c:158
 #, c-format
 msgid "no address range available for DHCPv6 request via %s"
 msgstr ""
 
-#: rfc3315.c:269
+#: rfc3315.c:289
 #, c-format
 msgid "%u available DHCPv6 subnet: %s/%d"
 msgstr ""
 
-#: rfc3315.c:350
+#: rfc3315.c:370
 #, c-format
 msgid "%u vendor class: %u"
 msgstr ""
 
-#: rfc3315.c:609
+#: rfc3315.c:418
+#, c-format
+msgid "%u client MAC address: %s"
+msgstr ""
+
+#: rfc3315.c:650
 #, c-format
 msgid "unknown prefix-class %d"
 msgstr ""
 
-#: rfc3315.c:741 rfc3315.c:854
+#: rfc3315.c:781 rfc3315.c:903
 msgid "success"
 msgstr ""
 
-#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864
+#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913
 msgid "no addresses available"
 msgstr ""
 
-#: rfc3315.c:806
+#: rfc3315.c:855
 msgid "address unavailable"
 msgstr ""
 
-#: rfc3315.c:841
+#: rfc3315.c:890
 msgid "not on link"
 msgstr ""
 
-#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150
+#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215
 msgid "no binding found"
 msgstr ""
 
-#: rfc3315.c:948
+#: rfc3315.c:1001
 msgid "deprecated"
 msgstr ""
 
-#: rfc3315.c:951
+#: rfc3315.c:1006
 msgid "address invalid"
 msgstr ""
 
-#: rfc3315.c:992
+#: rfc3315.c:1048
 msgid "confirm failed"
 msgstr ""
 
-#: rfc3315.c:1003
+#: rfc3315.c:1059
 msgid "all addresses still on link"
 msgstr ""
 
-#: rfc3315.c:1082
+#: rfc3315.c:1147
 msgid "release received"
 msgstr ""
 
+#: rfc3315.c:2038
+msgid "Cannot multicast to DHCPv6 server without correct interface"
+msgstr ""
+
 #: dhcp-common.c:145
 #, c-format
 msgid "Ignoring duplicate dhcp-option %d"
 msgstr ""
 
-#: dhcp-common.c:215
+#: dhcp-common.c:222
 #, c-format
 msgid "%u tags: %s"
 msgstr ""
 
-#: dhcp-common.c:296
+#: dhcp-common.c:407
 #, c-format
 msgid "%s has more than one address in hostsfile, using %s for DHCP"
 msgstr ""
 
-#: dhcp-common.c:319
+#: dhcp-common.c:430
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr ""
 
-#: dhcp-common.c:367
+#: dhcp-common.c:484
 #, c-format
 msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s"
 msgstr ""
 
-#: dhcp-common.c:489
+#: dhcp-common.c:606
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr ""
 
-#: dhcp-common.c:500
+#: dhcp-common.c:617
 #, c-format
 msgid "Known DHCPv6 options:\n"
 msgstr ""
 
-#: dhcp-common.c:693
+#: dhcp-common.c:814
 msgid ", prefix deprecated"
 msgstr ""
 
-#: dhcp-common.c:696
+#: dhcp-common.c:817
 #, c-format
 msgid ", lease time "
 msgstr ""
 
-#: dhcp-common.c:727
+#: dhcp-common.c:849
 #, c-format
 msgid "%s stateless on %s%.0s%.0s%s"
 msgstr ""
 
-#: dhcp-common.c:729
+#: dhcp-common.c:851
 #, c-format
 msgid "%s, static leases only on %.0s%s%s%.0s"
 msgstr ""
 
-#: dhcp-common.c:731
+#: dhcp-common.c:853
 #, c-format
 msgid "%s, proxy on subnet %.0s%s%.0s%.0s"
 msgstr ""
 
-#: dhcp-common.c:732
+#: dhcp-common.c:854
 #, c-format
 msgid "%s, IP range %s -- %s%s%.0s"
 msgstr ""
 
-#: dhcp-common.c:739
+#: dhcp-common.c:861
 #, c-format
 msgid "DHCPv4-derived IPv6 names on %s%s"
 msgstr ""
 
-#: dhcp-common.c:742
+#: dhcp-common.c:864
 #, c-format
 msgid "router advertisement on %s%s"
 msgstr ""
 
-#: radv.c:87
+#: dhcp-common.c:875
+#, c-format
+msgid "DHCP relay from %s to %s via %s"
+msgstr ""
+
+#: dhcp-common.c:877
+#, c-format
+msgid "DHCP relay from %s to %s"
+msgstr ""
+
+#: radv.c:93
 #, c-format
 msgid "cannot create ICMPv6 socket: %s"
 msgstr ""
 
-#: auth.c:402
+#: auth.c:435
 #, c-format
 msgid "ignoring zone transfer request from %s"
 msgstr ""
 
-#: ipset.c:71
+#: ipset.c:95
 #, c-format
 msgid "failed to find kernel version: %s"
 msgstr ""
 
-#: ipset.c:90
+#: ipset.c:114
 #, c-format
 msgid "failed to create IPset control socket: %s"
 msgstr ""
diff --git a/po/fr.po b/po/fr.po
index b5c8590..f6b9102 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -4,10 +4,10 @@
 # Translation completed by Gildas Le Nadan <3ntr0p13@gmail.com>
 msgid ""
 msgstr ""
-"Project-Id-Version: dnsmasq 2.66\n"
+"Project-Id-Version: dnsmasq 2.67\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-06-18 12:24+0100\n"
-"PO-Revision-Date: 2013-03-26 21:12+1100\n"
+"PO-Revision-Date: 2013-10-24 19:24+1100\n"
 "Last-Translator:  Gildas Le Nadan <3ntr0p13@gmail.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
@@ -19,17 +19,17 @@
 msgid "failed to load names from %s: %s"
 msgstr "Impossible de charger les noms à partir de %s : %s"
 
-#: cache.c:834 dhcp.c:845
+#: cache.c:834 dhcp.c:819
 #, c-format
 msgid "bad address at %s line %d"
 msgstr "mauvaise adresse dans %s ligne %d"
 
-#: cache.c:885 dhcp.c:861
+#: cache.c:885 dhcp.c:835
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "mauvais nom dans %s ligne %d"
 
-#: cache.c:892 dhcp.c:936
+#: cache.c:892 dhcp.c:910
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "lecture %s - %d adresses"
@@ -38,37 +38,37 @@
 msgid "cleared cache"
 msgstr "cache vidé"
 
-#: cache.c:1016
+#: cache.c:984
 #, c-format
 msgid "No IPv4 address found for %s"
 msgstr "Aucune adresse IPv4 trouvée pour %s"
 
-#: cache.c:1093
+#: cache.c:1061
 #, c-format
 msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
 msgstr "%s est un CNAME, il ne sera pas donné au bail DHCP de %s"
 
-#: cache.c:1117
+#: cache.c:1085
 #, c-format
 msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
 msgstr "ne donne pas de nom %s au bail DHCP de %s parce-que le nom existe dans %s avec l'adresse %s"
 
-#: cache.c:1162
+#: cache.c:1130
 #, c-format
 msgid "time %lu"
 msgstr "horodatage %lu"
 
-#: cache.c:1163
+#: cache.c:1131
 #, c-format
 msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
 msgstr "taille de cache %d, %d/%d insertions dans le cache entrées non-expirées réutilisées"
 
-#: cache.c:1165
+#: cache.c:1133
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr "requêtes transmises %u, requêtes résolues localement %u"
 
-#: cache.c:1188
+#: cache.c:1156
 #, c-format
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr "serveur %s#%d: requêtes envoyées %u, requêtes réessayées ou échouées %u"
@@ -78,557 +78,569 @@
 msgid "failed to seed the random number generator: %s"
 msgstr "impossible d'initialiser le générateur de nombre aléatoire : %s"
 
-#: util.c:189
+#: util.c:192
 msgid "failed to allocate memory"
 msgstr "impossible d'allouer la mémoire"
 
-#: util.c:227 option.c:531
+#: util.c:230 option.c:540
 msgid "could not get memory"
 msgstr "impossible d'allouer de la mémoire"
 
-#: util.c:237
+#: util.c:240
 #, c-format
 msgid "cannot create pipe: %s"
 msgstr "Ne peut pas créer le tube %s : %s"
 
-#: util.c:245
+#: util.c:248
 #, c-format
 msgid "failed to allocate %d bytes"
 msgstr "impossible d'allouer %d octets"
 
-#: util.c:400
+#: util.c:403
 #, c-format
 msgid "infinite"
 msgstr "illimité(e)"
 
-#: option.c:286
+#: option.c:292
 msgid "Specify local address(es) to listen on."
 msgstr "Spécifie la ou les adresse(s) locales où le démon doit se mettre à l'écoute."
 
-#: option.c:287
+#: option.c:293
 msgid "Return ipaddr for all hosts in specified domains."
 msgstr "Retourne les adresses IP pour toutes les machines présentes dans les domaines spécifiés"
 
-#: option.c:288
+#: option.c:294
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr "Traduction inverse truquée pour la plage d'adresse privée RFC1918"
 
-#: option.c:289
+#: option.c:295
 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
 msgstr "Traite l'adresse IP comme un domaine inexistant NXDOMAIN (contourne le systeme de redirection de Verisign)"
 
-#: option.c:290
+#: option.c:296
 #, c-format
 msgid "Specify the size of the cache in entries (defaults to %s)."
 msgstr "Spécifie le nombre d'entrées que contiendra le cache (par défaut : %s)."
 
-#: option.c:291
+#: option.c:297
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr "Spécifie le nom du fichier de configuration (par défaut : %s)"
 
-#: option.c:292
+#: option.c:298
 msgid "Do NOT fork into the background: run in debug mode."
 msgstr "Ne passe pas en tâche de fond : démarre en mode debug"
 
-#: option.c:293
+#: option.c:299
 msgid "Do NOT forward queries with no domain part."
 msgstr "Ne retransmet pas les requêtes qui n'ont pas de domaine."
 
-#: option.c:294
+#: option.c:300
 msgid "Return self-pointing MX records for local hosts."
 msgstr "Retourne les champs MX pour les machines locales."
 
-#: option.c:295
+#: option.c:301
 msgid "Expand simple names in /etc/hosts with domain-suffix."
 msgstr "Etend les noms uniques des machines dans /etc/hosts avec le suffixe du domaine."
 
-#: option.c:296
+#: option.c:302
 msgid "Don't forward spurious DNS requests from Windows hosts."
 msgstr "Ne retransmet pas les fausses requêtes DNS en provenance des machines Windows."
 
-#: option.c:297
+#: option.c:303
 msgid "Enable DHCP in the range given with lease duration."
 msgstr "Autorise DHCP dans la plage d'adresses donnée sur la durée de validité du bail."
 
-#: option.c:298
+#: option.c:304
 #, c-format
 msgid "Change to this group after startup (defaults to %s)."
 msgstr "On change pour ce groupe après le démarrage (par défaut : %s)."
 
-#: option.c:299
+#: option.c:305
 msgid "Set address or hostname for a specified machine."
 msgstr "On assigne une adresse ou un nom pour une machine spécifiée."
 
-#: option.c:300
+#: option.c:306
 msgid "Read DHCP host specs from file."
 msgstr "Lecture des spécifications d'hôtes DHCP à partir du fichier"
 
-#: option.c:301
+#: option.c:307
 msgid "Read DHCP option specs from file."
 msgstr "Lecture des options DHCP à partir du fichier"
 
-#: option.c:302
+#: option.c:308
 msgid "Evaluate conditional tag expression."
 msgstr "Expression d'évaluation conditionnelle d'étiquette"
 
-#: option.c:303
+#: option.c:309
 #, c-format
 msgid "Do NOT load %s file."
 msgstr "Ne charge PAS le fichier %s."
 
-#: option.c:304
+#: option.c:310
 #, c-format
 msgid "Specify a hosts file to be read in addition to %s."
 msgstr "Spécifie un nom de fichier hosts à lire en complément de %s"
 
-#: option.c:305
+#: option.c:311
 msgid "Specify interface(s) to listen on."
 msgstr "Spécifie la ou les interface(s) où le démon doit se mettre à l'écoute."
 
-#: option.c:306
+#: option.c:312
 msgid "Specify interface(s) NOT to listen on."
 msgstr "Spécifie la ou les interface(s) que le démon ne doit PAS traiter."
 
 #
-#: option.c:307
+#: option.c:313
 msgid "Map DHCP user class to tag."
 msgstr "Associe les classes d'utilisateurs ('user class') DHCP aux options."
 
-#: option.c:308
+#: option.c:314
 msgid "Map RFC3046 circuit-id to tag."
 msgstr "Associe les identifiants de circuits RFC3046 ('circuit-id') aux options"
 
-#: option.c:309
+#: option.c:315
 msgid "Map RFC3046 remote-id to tag."
 msgstr "Associe les identifiants distants RFC3046 ('remote-id') aux options"
 
-#: option.c:310
+#: option.c:316
 msgid "Map RFC3993 subscriber-id to tag."
 msgstr "Associe les identifiants de souscripteurs RFC3993 ('subscriber-id') aux options"
 
 #
-#: option.c:311
+#: option.c:317
 msgid "Don't do DHCP for hosts with tag set."
 msgstr "Ne pas autoriser DHCP pour les machines énumerées dans les options."
 
 #
-#: option.c:312
+#: option.c:318
 msgid "Force broadcast replies for hosts with tag set."
 msgstr "Forcer les réponses par 'broadcast' pour les machines énumerées dans les options."
 
-#: option.c:313
+#: option.c:319
 msgid "Do NOT fork into the background, do NOT run in debug mode."
 msgstr "Ne passe pas en tâche de fond, ne pas s'exécuter en mode debug."
 
-#: option.c:314
+#: option.c:320
 msgid "Assume we are the only DHCP server on the local network."
 msgstr "On considère que l'on est le seul serveur DHCP sur le réseau local."
 
-#: option.c:315
+#: option.c:321
 #, c-format
 msgid "Specify where to store DHCP leases (defaults to %s)."
 msgstr "Spécifie où il faut sauvegarder les baux DHCP (par défaut : %s)."
 
-#: option.c:316
+#: option.c:322
 msgid "Return MX records for local hosts."
 msgstr "Retourne les champs MX pour les machines locales."
 
-#: option.c:317
+#: option.c:323
 msgid "Specify an MX record."
 msgstr "Spécifie un champ MX."
 
-#: option.c:318
+#: option.c:324
 msgid "Specify BOOTP options to DHCP server."
 msgstr "Spécifie les options BOOTP pour le serveur DHCP."
 
-#: option.c:319
+#: option.c:325
 #, c-format
 msgid "Do NOT poll %s file, reload only on SIGHUP."
 msgstr "Ne pas scruter le fichier %s, ne recharger les modifications que sur réception du signal SIGHUP."
 
-#: option.c:320
+#: option.c:326
 msgid "Do NOT cache failed search results."
 msgstr "Ne place pas en cache le résultat des requêtes qui ont échouées."
 
-#: option.c:321
+#: option.c:327
 #, c-format
 msgid "Use nameservers strictly in the order given in %s."
 msgstr "Utilise les serveurs de noms dans l'ordre donné dans %s."
 
 #
-#: option.c:322
+#: option.c:328
 msgid "Specify options to be sent to DHCP clients."
 msgstr "Options supplémentaires à associer aux clients DHCP."
 
-#: option.c:323
+#: option.c:329
 msgid "DHCP option sent even if the client does not request it."
 msgstr "Option DHCP envoyée même si le client de la demande pas."
 
-#: option.c:324
+#: option.c:330
 msgid "Specify port to listen for DNS requests on (defaults to 53)."
 msgstr "Spécifie le port où il faut écouter les requêtes DNS (par défaut : 53)."
 
-#: option.c:325
+#: option.c:331
 #, c-format
 msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
 msgstr "Taille maximale des paquets UDP supportés pour EDNS.0 (par défaut : %s)."
 
 #
-#: option.c:326
+#: option.c:332
 msgid "Log DNS queries."
 msgstr "Enregistre les requêtes DNS dans un journal d'activité."
 
 #
-#: option.c:327
+#: option.c:333
 msgid "Force the originating port for upstream DNS queries."
 msgstr "Force le port d'origine pour les requêtes vers les serveurs amonts."
 
-#: option.c:328
+#: option.c:334
 msgid "Do NOT read resolv.conf."
 msgstr "Ne pas lire le fichier resolv.conf."
 
-#: option.c:329
+#: option.c:335
 #, c-format
 msgid "Specify path to resolv.conf (defaults to %s)."
 msgstr "Spécifie le chemin pour le fichier resolv.conf (par défaut : %s)."
 
-#: option.c:330
+#: option.c:336
 msgid "Specify address(es) of upstream servers with optional domains."
 msgstr "Spécifie la ou les adresses des serveurs amonts avec des domaines optionels."
 
-#: option.c:331
+#: option.c:337
 msgid "Never forward queries to specified domains."
 msgstr "Ne jamais retransmettre les requêtes pour les domaines spécifiés."
 
-#: option.c:332
+#: option.c:338
 msgid "Specify the domain to be assigned in DHCP leases."
 msgstr "Spécifie le domaine qui doit etre assigné aux baux DHCP."
 
-#: option.c:333
+#: option.c:339
 msgid "Specify default target in an MX record."
 msgstr "Spécifie la cible par défaut dans un champ MX."
 
-#: option.c:334
+#: option.c:340
 msgid "Specify time-to-live in seconds for replies from /etc/hosts."
 msgstr "Spécifie le TTL en secondes pour les réponses qui utilisent /etc/hosts."
 
 #
-#: option.c:335
+#: option.c:341
 msgid "Specify time-to-live in seconds for negative caching."
 msgstr "Spécifie le TTL en secondes pour les réponses qui utilisent /etc/hosts."
 
-#: option.c:336
+#: option.c:342
 msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
 msgstr "Spécifie, en secondes, la valeur maximum de TTL à renvoyer aux clients."
 
-#: option.c:337
+#: option.c:343
 #, c-format
 msgid "Change to this user after startup. (defaults to %s)."
 msgstr "Change pour cet utilisateur après le démarrage (par défaut : %s)."
 
 #
-#: option.c:338
+#: option.c:344
 msgid "Map DHCP vendor class to tag."
 msgstr "Associe les classes de fournisseurs ('vendor class') DHCP aux options."
 
-#: option.c:339
+#: option.c:345
 msgid "Display dnsmasq version and copyright information."
 msgstr "Affiche la version de Dnsmasq et les informations liées au copyright."
 
-#: option.c:340
+#: option.c:346
 msgid "Translate IPv4 addresses from upstream servers."
 msgstr "Traduit les adresses IPV4 des serveurs amonts."
 
-#: option.c:341
+#: option.c:347
 msgid "Specify a SRV record."
 msgstr "Spécifie un champ SRV."
 
-#: option.c:342
+#: option.c:348
 msgid "Display this message. Use --help dhcp for known DHCP options."
 msgstr "Afficher ce message. Utiliser --help dhcp pour obtenir la liste des options DHCP connues."
 
-#: option.c:343
+#: option.c:349
 #, c-format
 msgid "Specify path of PID file (defaults to %s)."
 msgstr "Spécifie un chemin pour le fichier PID (par défaut : %s)."
 
-#: option.c:344
+#: option.c:350
 #, c-format
 msgid "Specify maximum number of DHCP leases (defaults to %s)."
 msgstr "Spécifie le nombre maximum de baux DHCP (par défaut : %s)."
 
-#: option.c:345
+#: option.c:351
 msgid "Answer DNS queries based on the interface a query was sent to."
 msgstr "Repond aux requêtes DNS en se basant sur l'interface ou a été envoyée la requête."
 
-#: option.c:346
+#: option.c:352
 msgid "Specify TXT DNS record."
 msgstr "Spécifie un champ DNS TXT"
 
 #
-#: option.c:347
+#: option.c:353
 msgid "Specify PTR DNS record."
 msgstr "Spécifie un champ DNS PTR"
 
-#: option.c:348
+#: option.c:354
 msgid "Give DNS name to IPv4 address of interface."
 msgstr "Donne le nom DNS pour l'adresse IPv4 de l'interface."
 
-#: option.c:349
+#: option.c:355
 msgid "Bind only to interfaces in use."
 msgstr "Association uniquement aux interfaces réseau actuellement actives."
 
-#: option.c:350
+#: option.c:356
 #, c-format
 msgid "Read DHCP static host information from %s."
 msgstr "Lecture des informations de DHCP statique à partir de %s."
 
-#: option.c:351
+#: option.c:357
 msgid "Enable the DBus interface for setting upstream servers, etc."
 msgstr "Autorise l'interface DBus pour la configuration des serveurs amonts, etc."
 
-#: option.c:352
+#: option.c:358
 msgid "Do not provide DHCP on this interface, only provide DNS."
 msgstr "Ne pas assurer de fonction DHCP sur cette interface, mais seulement la fonction DNS."
 
-#: option.c:353
+#: option.c:359
 msgid "Enable dynamic address allocation for bootp."
 msgstr "Autorise l'allocation dynamique d'adresse pour bootp."
 
 #
-#: option.c:354
+#: option.c:360
 msgid "Map MAC address (with wildcards) to option set."
 msgstr "Associe l'adresse MAC (avec les jokers) aux options."
 
-#: option.c:355
+#: option.c:361
 msgid "Treat DHCP requests on aliases as arriving from interface."
 msgstr "Traiter les requêtes DHCP sur les alias comme arrivant de l'interface."
 
-#: option.c:356
+#: option.c:362
 msgid "Disable ICMP echo address checking in the DHCP server."
 msgstr "Supprime la vérification d'adresse sur le serveur au moyen de paquets ICMP echo"
 
-#: option.c:357
+#: option.c:363
 msgid "Shell script to run on DHCP lease creation and destruction."
 msgstr "Script shell à exécuter lors de la création ou destruction de bail DHCP."
 
-#: option.c:358
+#: option.c:364
 msgid "Lua script to run on DHCP lease creation and destruction."
 msgstr "Script Lua à exécuter lors de la création ou destruction de bail DHCP."
 
-#: option.c:359
+#: option.c:365
 msgid "Run lease-change scripts as this user."
 msgstr "Lancer le script 'lease-change' avec cet utilisateur."
 
-#: option.c:360
+#: option.c:366
 msgid "Read configuration from all the files in this directory."
 msgstr "Lecture de la configuration dans tous les fichiers de ce répertoire."
 
 #
-#: option.c:361
+#: option.c:367
 msgid "Log to this syslog facility or file. (defaults to DAEMON)"
 msgstr "Enregistrer les journaux d'activité dans cette facilité syslog. (défaut : DAEMON)"
 
-#: option.c:362
+#: option.c:368
 msgid "Do not use leasefile."
 msgstr "Ne pas utiliser de fichier de baux."
 
-#: option.c:363
+#: option.c:369
 #, c-format
 msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
 msgstr "Spécifie le nombre maximum de requêtes DHCP concurrentes (par défaut : %s)."
 
-#: option.c:364
+#: option.c:370
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr "Vider le cache DNS lors du rechargement de %s."
 
-#: option.c:365
+#: option.c:371
 msgid "Ignore hostnames provided by DHCP clients."
 msgstr "Ignorer les noms d'hôtes fournis par les clients DHCP"
 
-#: option.c:366
+#: option.c:372
 msgid "Do NOT reuse filename and server fields for extra DHCP options."
 msgstr "Ne pas réutiliser les champs nom de fichier et serveur dans les options DHCP supplémentaires."
 
-#: option.c:367
+#: option.c:373
 msgid "Enable integrated read-only TFTP server."
 msgstr "Activer le server TFTP intégré (fonctionnant en lecture seulement)"
 
-#: option.c:368
+#: option.c:374
 msgid "Export files by TFTP only from the specified subtree."
 msgstr "N'exporter par TFTP que les fichiers de l'arborescence de fichier spécifiée"
 
-#: option.c:369
+#: option.c:375
 msgid "Add client IP address to tftp-root."
 msgstr "Ajouter les adresses IP clientes à la racine tftp ('tftp-root')."
 
-#: option.c:370
+#: option.c:376
 msgid "Allow access only to files owned by the user running dnsmasq."
 msgstr "Accès aux seuls fichiers appartenants à l'utilisateur sous lequel tourne dnsmasq"
 
-#: option.c:371
+#: option.c:377
 #, c-format
 msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
 msgstr "Spécifie le nombre maximum de transfert TFTP concurrents (défaut : %s)."
 
-#: option.c:372
+#: option.c:378
 msgid "Disable the TFTP blocksize extension."
 msgstr "Désactivation de l'extension TFTP « taille de bloc »"
 
-#: option.c:373
+#: option.c:379
 msgid "Convert TFTP filenames to lowercase"
 msgstr "Convertis les noms de fichiers TFTP en minuscule"
 
-#: option.c:374
+#: option.c:380
 msgid "Ephemeral port range for use by TFTP transfers."
 msgstr "Gamme de ports dans laquelle seront choisis les ports temporaires utilisés dans les transferts TFTP."
 
-#: option.c:375
+#: option.c:381
 msgid "Extra logging for DHCP."
 msgstr "Traces supplémentaires pour le DHCP."
 
-#: option.c:376
+#: option.c:382
 msgid "Enable async. logging; optionally set queue length."
 msgstr "Active l'écriture de traces en mode asynchrone. Peut prendre en option la valeur de la longueur de la queue."
 
-#: option.c:377
+#: option.c:383
 msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
 msgstr "Stopper la réassociation DNS ('DNS rebinding'). Filtre les gammes d'adresses IP privées lors de la résolution."
 
-#: option.c:378
+#: option.c:384
 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
 msgstr "Autorise la réassociation de 127.0.0/8, pour les serveurs RBL (Realtime Blackhole List)"
 
-#: option.c:379
+#: option.c:385
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr "Désactive la protection contre les réassociation DNS pour ce domaine"
 
-#: option.c:380
+#: option.c:386
 msgid "Always perform DNS queries to all servers."
 msgstr "Toujours effectuer les requêtes DNS à tous les serveurs."
 
 #
-#: option.c:381
+#: option.c:387
 msgid "Set tag if client includes matching option in request."
 msgstr "Spécifie le label si le client inclus l'option dans la requête."
 
-#: option.c:382
+#: option.c:388
 msgid "Use alternative ports for DHCP."
 msgstr "Utiliser des ports alternatifs pour le DHCP."
 
 #
-#: option.c:383
+#: option.c:389
 msgid "Specify NAPTR DNS record."
 msgstr "Spécifie un champ DNS NAPTR."
 
-#: option.c:384
+#: option.c:390
 msgid "Specify lowest port available for DNS query transmission."
 msgstr "Définie le plus petit port utilisé pour la transmission d'une requête DNS."
 
-#: option.c:385
+#: option.c:391
 msgid "Use only fully qualified domain names for DHCP clients."
 msgstr "Utilise seulement les noms de domaine pleinement qualifiés pour les clients DHCP."
 
-#: option.c:386
+#: option.c:392
 msgid "Generate hostnames based on MAC address for nameless clients."
 msgstr "Génère les noms d'hôtes à partir de l'adresse MAC pour les clients sans nom."
 
-#: option.c:387
+#: option.c:393
 msgid "Use these DHCP relays as full proxies."
 msgstr "Utilise ces relais DHCP en temps que proxy complets."
 
-#: option.c:388
+#: option.c:394
+msgid "Relay DHCP requests to a remote server"
+msgstr "Requêtes de relais DHCP à un serveur distant"
+
+#: option.c:395
 msgid "Specify alias name for LOCAL DNS name."
 msgstr "Spécifie un alias pour un nom DNS local."
 
 #
-#: option.c:389
+#: option.c:396
 msgid "Prompt to send to PXE clients."
 msgstr "Invite à envoyer aux clients PXE."
 
-#: option.c:390
+#: option.c:397
 msgid "Boot service for PXE menu."
 msgstr "Service de démarrage pour menu PXE."
 
-#: option.c:391
+#: option.c:398
 msgid "Check configuration syntax."
 msgstr "vérification de la syntaxe de la configuration."
 
-#: option.c:392
+#: option.c:399
 msgid "Add requestor's MAC address to forwarded DNS queries."
 msgstr "Ajoute l'adresse MAC du requêteur aux requêtes DNS transmises"
 
-#: option.c:393
+#: option.c:400
 msgid "Proxy DNSSEC validation results from upstream nameservers."
 msgstr "Copie dans la réponse DNS le résultat de la validation DNSSEC effectuée par les serveurs DNS amonts."
 
-#: option.c:394
+#: option.c:401
 msgid "Attempt to allocate sequential IP addresses to DHCP clients."
 msgstr "Essaie d'allouer des adresses IP séquentielles aux clients DHCP."
 
-#: option.c:395
+#: option.c:402
 msgid "Copy connection-track mark from queries to upstream connections."
 msgstr "Copie les marques de suivi de connexion pour les requêtes amont."
 
-#: option.c:396
+#: option.c:403
 msgid "Allow DHCP clients to do their own DDNS updates."
 msgstr "Autoriser les clients DHCP à faire leurs propres mises à jour DDNS (Dynamic DNS)"
 
-#: option.c:397
+#: option.c:404
 msgid "Send router-advertisements for interfaces doing DHCPv6"
-msgstr "envoyer des annonces de routeurs pour toutes les interfaces faisant du DHCPv6"
+msgstr "Envoyer des annonces de routeurs pour toutes les interfaces faisant du DHCPv6"
 
-#: option.c:398
+#: option.c:405
+msgid "Always send frequent router-advertisements"
+msgstr "Envoyer des annonces de routeurs fréquentes"
+
+#: option.c:406
 msgid "Specify DUID_EN-type DHCPv6 server DUID"
 msgstr "Spécifie pour le serveur DHCPv6 un identifiant unique DHCP (DUID) basé sur un numéro unique de vendeur (DUID_EN)"
 
-#: option.c:399
+#: option.c:407
 msgid "Specify host (A/AAAA and PTR) records"
 msgstr "Spécifie les enregistrements (A/AAAA et PTR) d'un hôte."
 
-#: option.c:400
+#: option.c:408
 msgid "Specify arbitrary DNS resource record"
 msgstr "Définie une resource DNS d'un type spécifique"
 
-#: option.c:401
+#: option.c:409
 msgid "Bind to interfaces in use - check for new interfaces"
 msgstr "Se lie aux interfaces préexistantes - vérifie l'apparition de nouvelles interfaces"
 
-#: option.c:402
+#: option.c:410
 msgid "Export local names to global DNS"
 msgstr "Exporte les noms locaux dans le DNS global"
 
-#: option.c:403
+#: option.c:411
 msgid "Domain to export to global DNS"
 msgstr "Domaine à exporter dans le DNS global"
 
-#: option.c:404
+#: option.c:412
 msgid "Set TTL for authoritative replies"
 msgstr "Configure la durée de vie (Time To Live) pour les réponses faisant autorité"
 
-#: option.c:405
+#: option.c:413
 msgid "Set authoritive zone information"
 msgstr "Configure les informations pour une zone de nom faisant autorité"
 
-#: option.c:406
+#: option.c:414
 msgid "Secondary authoritative nameservers for forward domains"
 msgstr "Serveurs de noms secondaires faisant autorité pour les domaines délégués"
 
-#: option.c:407
+#: option.c:415
 msgid "Peers which are allowed to do zone transfer"
 msgstr "Pairs autorisés à faire des transferts de zone"
 
-#: option.c:408
+#: option.c:416
 msgid "Specify ipsets to which matching domains should be added"
 msgstr "Spécifie les ipsets auxquels les domaines correspondants doivent-être ajoutés"
 
-#: option.c:410
+#: option.c:417
+msgid "Specify a domain and address range for sythesised names"
+msgstr "Spécifie un domaine et une plage d'adresses pour les noms auto-générés"
+
+#: option.c:419
 msgid "Specify DHCPv6 prefix class"
 msgstr "Spécifie le préfixe de classe DHCPv6"
 
-#: option.c:596
+#: option.c:605
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -637,300 +649,308 @@
 "Usage : dnsmasq [options]\n"
 "\n"
 
-#: option.c:598
+#: option.c:607
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr "Utilisez les options courtes uniquement sur la ligne de commande.\n"
 
-#: option.c:600
+#: option.c:609
 #, c-format
 msgid "Valid options are:\n"
 msgstr "Les options valides sont :\n"
 
-#: option.c:650 option.c:654
+#: option.c:659 option.c:663
 msgid "bad port"
 msgstr "numéro de port incorrect"
 
-#: option.c:681 option.c:713
+#: option.c:690 option.c:722
 msgid "interface binding not supported"
 msgstr "association d'interface non supportée"
 
 #
-#: option.c:690 option.c:3179
+#: option.c:699 option.c:3275
 msgid "bad interface name"
 msgstr "nom d'interface invalide"
 
 #
-#: option.c:720
+#: option.c:729
 msgid "bad address"
 msgstr "mauvaise adresse"
 
-#: option.c:847
+#: option.c:863
 msgid "unsupported encapsulation for IPv6 option"
 msgstr "encapsulation d'option non supportée pour IPv6"
 
-#: option.c:861
+#: option.c:877
 msgid "bad dhcp-option"
 msgstr "mauvaise valeur de 'dhcp-option'"
 
 #
-#: option.c:929
+#: option.c:945
 msgid "bad IP address"
 msgstr "mauvaise adresse IP"
 
 #
-#: option.c:932 option.c:1070 option.c:2549
+#: option.c:948 option.c:1086 option.c:2620
 msgid "bad IPv6 address"
 msgstr "mauvaise adresse IPv6"
 
-#: option.c:1097 option.c:1191
+#: option.c:1113 option.c:1207
 msgid "bad domain in dhcp-option"
 msgstr "mauvais domaine dans dhcp-option"
 
-#: option.c:1229
+#: option.c:1245
 msgid "dhcp-option too long"
 msgstr "dhcp-option trop long"
 
-#: option.c:1236
+#: option.c:1252
 msgid "illegal dhcp-match"
 msgstr "valeur illégale pour 'dhcp-match'"
 
-#: option.c:1298
+#: option.c:1314
 msgid "illegal repeated flag"
 msgstr "Une option ne pouvant être spécifié qu'une seule fois à été donnée plusieurs fois"
 
-#: option.c:1306
+#: option.c:1322
 msgid "illegal repeated keyword"
 msgstr "Mot-clef ne pouvant être répété"
 
-#: option.c:1358 option.c:3702
+#: option.c:1374 option.c:3802
 #, c-format
 msgid "cannot access directory %s: %s"
 msgstr "Ne peut pas lire le répertoire %s : %s"
 
-#: option.c:1390 tftp.c:474
+#: option.c:1406 tftp.c:487
 #, c-format
 msgid "cannot access %s: %s"
 msgstr "Ne peut pas lire %s : %s"
 
-#: option.c:1426
+#: option.c:1442
 msgid "setting log facility is not possible under Android"
 msgstr "Sous android, impossible de positionner la cible (facility) pour les traces (logs)."
 
-#: option.c:1435
+#: option.c:1451
 msgid "bad log facility"
 msgstr "Mauvaise cible (facility) pour les traces."
 
-#: option.c:1484
+#: option.c:1500
 msgid "bad MX preference"
 msgstr "préference MX incorrecte"
 
-#: option.c:1489
+#: option.c:1505
 msgid "bad MX name"
 msgstr "nom MX incorrect"
 
-#: option.c:1503
+#: option.c:1519
 msgid "bad MX target"
 msgstr "valeur MX cible incorrecte"
 
-#: option.c:1515
+#: option.c:1531
 msgid "cannot run scripts under uClinux"
 msgstr "ne peut exécuter de script sous uClinux"
 
-#: option.c:1517
+#: option.c:1533
 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
 msgstr "recompiler en définissant HAVE_SCRIPT pour permettre l'exécution de scripts shell au changement de bail (lease-change)"
 
-#: option.c:1521
+#: option.c:1537
 msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
 msgstr "recompiler en définissant HAVE_LUASCRIPT pour permettre l'exécution de scripts LUA au changement de bail (lease-change)"
 
-#: option.c:1631
+#: option.c:1739 option.c:1800
 msgid "bad prefix"
 msgstr "mauvais préfixe"
 
-#: option.c:2043
+#: option.c:2094
 msgid "recompile with HAVE_IPSET defined to enable ipset directives"
 msgstr "recompiler en définissant HAVE_IPSET pour permettre l'utilisation de directives de groupes d'IP (IPset)"
 
 #
-#: option.c:2223
+#: option.c:2274
 msgid "bad port range"
 msgstr "gamme de ports incorrecte"
 
-#: option.c:2239
+#: option.c:2290
 msgid "bad bridge-interface"
 msgstr "interface-pont incorrecte"
 
-#: option.c:2297
+#: option.c:2350
 msgid "only one tag allowed"
 msgstr "une seule étiquette est autorisée"
 
-#: option.c:2317 option.c:2329 option.c:2461
+#: option.c:2370 option.c:2382 option.c:2491 option.c:2532
 msgid "bad dhcp-range"
 msgstr "plage d'adresses DHCP (dhcp-range) incorrecte"
 
-#: option.c:2344
+#: option.c:2397
 msgid "inconsistent DHCP range"
 msgstr "plage d'adresses DHCP incohérente"
 
-#: option.c:2402
-msgid "prefix must be exactly 64 for RA subnets"
+#: option.c:2459
+msgid "prefix length must be exactly 64 for RA subnets"
 msgstr "la taille du préfixe doit être exactement 64 pour les sous-réseaux d'annonces de routeurs (RA)"
 
-#: option.c:2404
-msgid "prefix must be exactly 64 for subnet constructors"
+#: option.c:2461
+msgid "prefix length must be exactly 64 for subnet constructors"
 msgstr "la taille du préfixe doit être exactement 64 pour le constructeur de sous-réseaux"
 
-#: option.c:2407
-msgid "prefix must be at least 64"
+#: option.c:2465
+msgid "prefix length must be at least 64"
 msgstr "la taille de préfixe doit être au minimum 64"
 
-#: option.c:2412
+#: option.c:2468
 msgid "inconsistent DHCPv6 range"
 msgstr "plage d'adresses DHCPv6 incohérente"
 
-#: option.c:2519 option.c:2567
+#: option.c:2479
+msgid "prefix must be zero with \"constructor:\" argument"
+msgstr "le préfixe doit avoir une taille de 0 lorsque l'argument \"constructor:\" est utilisé"
+
+#: option.c:2590 option.c:2638
 msgid "bad hex constant"
 msgstr "mauvaise constante hexadecimale"
 
-#: option.c:2541
+#: option.c:2612
 msgid "cannot match tags in --dhcp-host"
 msgstr "L'utilisation de labels est prohibée dans --dhcp-host"
 
-#: option.c:2589
+#: option.c:2660
 #, c-format
 msgid "duplicate dhcp-host IP address %s"
 msgstr "adresse IP dhcp-host dupliquée dans %s."
 
 #
-#: option.c:2645
+#: option.c:2716
 msgid "bad DHCP host name"
 msgstr "nom d'hôte DHCP incorrect"
 
-#: option.c:2727
+#: option.c:2798
 msgid "bad tag-if"
 msgstr "mauvaise étiquette tag-if"
 
-#: option.c:3051 option.c:3379
+#: option.c:3122 option.c:3479
 msgid "invalid port number"
 msgstr "numéro de port invalide"
 
 #
-#: option.c:3113
+#: option.c:3184
 msgid "bad dhcp-proxy address"
 msgstr "adresse dhcp-proxy incorrecte"
 
-#: option.c:3124
+#: option.c:3210
+msgid "Bad dhcp-relay"
+msgstr "valeur incorrecte pour le relais DHCP (dhcp-relay)"
+
+#: option.c:3220
 msgid "bad DUID"
 msgstr "mauvais identifiant unique DHCP (DUID)"
 
 #
-#: option.c:3166
+#: option.c:3262
 msgid "invalid alias range"
 msgstr "poids invalide"
 
-#: option.c:3205
+#: option.c:3305
 msgid "bad CNAME"
 msgstr "mauvais CNAME"
 
-#: option.c:3210
+#: option.c:3310
 msgid "duplicate CNAME"
 msgstr "ce CNAME existe déja"
 
 #
-#: option.c:3230
+#: option.c:3330
 msgid "bad PTR record"
 msgstr "mauvais champ PTR"
 
 #
-#: option.c:3261
+#: option.c:3361
 msgid "bad NAPTR record"
 msgstr "mauvais champ NAPTR"
 
 #
-#: option.c:3295
+#: option.c:3395
 msgid "bad RR record"
 msgstr "mauvais enregistrement RR"
 
-#: option.c:3324
+#: option.c:3424
 msgid "bad TXT record"
 msgstr "champ TXT invalide"
 
-#: option.c:3365
+#: option.c:3465
 msgid "bad SRV record"
 msgstr "champ SRV invalide"
 
-#: option.c:3372
+#: option.c:3472
 msgid "bad SRV target"
 msgstr "cible SRV invalide"
 
-#: option.c:3386
+#: option.c:3486
 msgid "invalid priority"
 msgstr "priorité invalide"
 
-#: option.c:3393
+#: option.c:3493
 msgid "invalid weight"
 msgstr "poids invalide"
 
 #
-#: option.c:3417
+#: option.c:3517
 msgid "Bad host-record"
 msgstr "mauvais champ host-record"
 
-#: option.c:3434
+#: option.c:3534
 msgid "Bad name in host-record"
 msgstr "mauvais nom dans le champ host-record"
 
-#: option.c:3464
+#: option.c:3564
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr "option non supportée (vérifier que Dnsmasq a été compilé avec le support DHCP/TFTP/DBus)"
 
-#: option.c:3522
+#: option.c:3622
 msgid "missing \""
 msgstr "il manque \""
 
-#: option.c:3579
+#: option.c:3679
 msgid "bad option"
 msgstr "mauvaise option"
 
-#: option.c:3581
+#: option.c:3681
 msgid "extraneous parameter"
 msgstr "paramètre en trop"
 
-#: option.c:3583
+#: option.c:3683
 msgid "missing parameter"
 msgstr "paramètre manquant"
 
-#: option.c:3590
+#: option.c:3690
 msgid "error"
 msgstr "erreur"
 
-#: option.c:3592
+#: option.c:3692
 #, c-format
 msgid " at line %d of %s"
 msgstr "à la ligne %d de %s"
 
-#: option.c:3656 tftp.c:648
+#: option.c:3756 tftp.c:661
 #, c-format
 msgid "cannot read %s: %s"
 msgstr "Ne peut pas lire %s : %s"
 
-#: option.c:3823 option.c:3859
+#: option.c:3923 option.c:3959
 #, c-format
 msgid "read %s"
 msgstr "Lecture de %s"
 
-#: option.c:3915
+#: option.c:4015
 msgid "junk found in command line"
 msgstr "la ligne de commande contient des éléments indésirables ou incompréhensibles"
 
-#: option.c:3950
+#: option.c:4050
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr "Version de Dnsmasq %s  %s\n"
 
-#: option.c:3951
+#: option.c:4051
 #, c-format
 msgid ""
 "Compile time options: %s\n"
@@ -939,62 +959,62 @@
 "Options à la compilation %s\n"
 "\n"
 
-#: option.c:3952
+#: option.c:4052
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr "Ce logiciel est fourni sans AUCUNE GARANTIE.\n"
 
-#: option.c:3953
+#: option.c:4053
 #, c-format
 msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
 msgstr "Dnsmasq est un logiciel libre, il vous est permis de le redistribuer\n"
 
-#: option.c:3954
+#: option.c:4054
 #, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr "sous les termes de la licence GPL (GNU General Public License), version 2 ou 3.\n"
 
-#: option.c:3965
+#: option.c:4065
 msgid "try --help"
 msgstr "essayez avec --help"
 
-#: option.c:3967
+#: option.c:4067
 msgid "try -w"
 msgstr "essayez avec -w"
 
-#: option.c:3969
+#: option.c:4069
 #, c-format
 msgid "bad command line options: %s"
 msgstr "mauvaises options en ligne de commande : %s."
 
-#: option.c:4018
+#: option.c:4118
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "ne peut pas obtenir le nom de la machine : %s"
 
-#: option.c:4046
+#: option.c:4146
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr "seul un fichier resolv.conf est autorisé dans le mode no-poll"
 
-#: option.c:4056
+#: option.c:4156
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr "un fichier resolv.conf (et un seul) est nécessaire pour y récuperer le nom de domaine."
 
-#: option.c:4059 network.c:1039 dhcp.c:794
+#: option.c:4159 network.c:1178 dhcp.c:768
 #, c-format
 msgid "failed to read %s: %s"
 msgstr "impossible de lire %s : %s"
 
-#: option.c:4076
+#: option.c:4176
 #, c-format
 msgid "no search directive found in %s"
 msgstr "pas de directive de recherche trouvée dans %s"
 
-#: option.c:4097
+#: option.c:4197
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr "un domaine par défaut doit être spécifié lorsque l'option --dhcp-fqdn est utilisée"
 
-#: option.c:4101
+#: option.c:4201
 msgid "syntax check OK"
 msgstr "vérification de syntaxe OK"
 
@@ -1013,103 +1033,108 @@
 msgid "possible DNS-rebind attack detected: %s"
 msgstr "détection d'une possible attaque de type DNS-rebind: %s"
 
-#: network.c:414
+#: forward.c:1216
+#, c-format
+msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+msgstr "Nombre maximum de requêtes DNS concurrentes atteint (maximum : %d)."
+
+#: network.c:551
 #, c-format
 msgid "failed to create listening socket for %s: %s"
 msgstr "impossible de créer une socket d'écoute pour %s : %s"
 
-#: network.c:743
+#: network.c:882
 #, c-format
 msgid "interface %s failed to join DHCPv6 multicast group: %s"
 msgstr "impossible de faire rejoindre l'interface %s dans le groupe multicast DHCPv6 %s"
 
-#: network.c:937
+#: network.c:1076
 #, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr "impossible de lier la socket de serveur pour %s : %s"
 
-#: network.c:974
+#: network.c:1113
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr "ignore le serveur de nom %s - interface locale"
 
-#: network.c:985
+#: network.c:1124
 #, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr "ignore le serveur de nom %s - ne peut construire/lier la socket : %m"
 
-#: network.c:1002
+#: network.c:1141
 msgid "unqualified"
 msgstr "non-qualifié(e)"
 
-#: network.c:1002
+#: network.c:1141
 msgid "names"
 msgstr "noms"
 
-#: network.c:1004
+#: network.c:1143
 msgid "default"
 msgstr "défaut"
 
-#: network.c:1006
+#: network.c:1145
 msgid "domain"
 msgstr "domaine"
 
-#: network.c:1009
+#: network.c:1148
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr "utilise les adresses locales seulement pour %s %s"
 
-#: network.c:1011
+#: network.c:1150
 #, c-format
 msgid "using standard nameservers for %s %s"
 msgstr "utilisation des serveurs de nom standards pour %s %s"
 
-#: network.c:1013
+#: network.c:1152
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr "utilise le serveur de nom %s#%d pour %s %s"
 
-#: network.c:1016
+#: network.c:1155
 #, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr "utilise le serveur de nom %s#%d (via %s)"
 
-#: network.c:1018
+#: network.c:1157
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr "utilise le serveur de nom %s#%d"
 
 #
-#: dnsmasq.c:131
+#: dnsmasq.c:134
 msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
 msgstr "TFTP n'est pas disponible : activez HAVE_TFTP dans src/config.h"
 
-#: dnsmasq.c:136
+#: dnsmasq.c:139
 msgid "Cannot use --conntrack AND --query-port"
 msgstr "impossible d'utiliser conjointement --conntrack et --query-port"
 
 #
-#: dnsmasq.c:139
+#: dnsmasq.c:142
 msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
 msgstr "Support de suivi de connexion non disponible : activez HAVE_CONNTRACK dans src/config.h"
 
-#: dnsmasq.c:144
+#: dnsmasq.c:147
 msgid "asychronous logging is not available under Solaris"
 msgstr "l'écriture de traces en mode asynchrone n'est pas disponible sous Solaris."
 
-#: dnsmasq.c:149
+#: dnsmasq.c:152
 msgid "asychronous logging is not available under Android"
 msgstr "l'écriture de traces en mode asynchrone n'est pas disponible sous Android."
 
-#: dnsmasq.c:154
+#: dnsmasq.c:157
 msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
 msgstr "le mode « autorité DNS » n'est pas disponible : activez HAVE_AUTH dans src/config.h"
 
-#: dnsmasq.c:164
+#: dnsmasq.c:167
 msgid "zone serial must be configured in --auth-soa"
 msgstr "le numéro de série de la zone doit être configuré dans --auth-soa"
 
-#: dnsmasq.c:186
+#: dnsmasq.c:185
 msgid "dhcp-range constructor not available on this platform"
 msgstr "le constructeur de plage dhcp n'est pas disponible sur cette plate-forme"
 
@@ -1127,429 +1152,434 @@
 msgid "unknown interface %s"
 msgstr "interface %s inconnue"
 
-#: dnsmasq.c:274 dnsmasq.c:860
+#: dnsmasq.c:275 dnsmasq.c:870
 #, c-format
 msgid "DBus error: %s"
 msgstr "Erreur DBus : %s"
 
-#: dnsmasq.c:277
+#: dnsmasq.c:278
 msgid "DBus not available: set HAVE_DBUS in src/config.h"
 msgstr "DBus n'est pas disponible : activez HAVE_DBUS dans src/config.h"
 
-#: dnsmasq.c:305
+#: dnsmasq.c:306
 #, c-format
 msgid "unknown user or group: %s"
 msgstr "utilisateur ou groupe inconnu : %s"
 
-#: dnsmasq.c:360
+#: dnsmasq.c:361
 #, c-format
 msgid "cannot chdir to filesystem root: %s"
 msgstr "Ne peut effectuer un 'chdir' à la racine du système de fichier : %s"
 
-#: dnsmasq.c:597
+#: dnsmasq.c:598
 #, c-format
 msgid "started, version %s DNS disabled"
 msgstr "démarrage avec le DNS désactivé (version %s)"
 
-#: dnsmasq.c:599
+#: dnsmasq.c:600
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr "demarré, version %s (taille de cache %d)"
 
-#: dnsmasq.c:601
+#: dnsmasq.c:602
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr "démarrage avec le cache désactivé (version %s)"
 
-#: dnsmasq.c:603
+#: dnsmasq.c:604
 #, c-format
 msgid "compile time options: %s"
 msgstr "options à la compilation : %s"
 
-#: dnsmasq.c:609
+#: dnsmasq.c:610
 msgid "DBus support enabled: connected to system bus"
 msgstr "Support DBus autorisé : connecté au bus système"
 
-#: dnsmasq.c:611
+#: dnsmasq.c:612
 msgid "DBus support enabled: bus connection pending"
 msgstr "Support DBus autorisé : connexion au bus en attente"
 
-#: dnsmasq.c:616
+#: dnsmasq.c:617
 #, c-format
 msgid "warning: failed to change owner of %s: %s"
 msgstr "Impossible de changer pour l'utilisateur %s : %s"
 
-#: dnsmasq.c:620
+#: dnsmasq.c:621
 msgid "setting --bind-interfaces option because of OS limitations"
 msgstr "active l'option --bind-interfaces à cause de limitations dans le système d'exploitation"
 
-#: dnsmasq.c:625
+#: dnsmasq.c:626
 #, c-format
 msgid "warning: interface %s does not currently exist"
 msgstr "attention : l'interface %s n'existe pas actuellement"
 
-#: dnsmasq.c:630
+#: dnsmasq.c:631
 msgid "warning: ignoring resolv-file flag because no-resolv is set"
 msgstr "attention : l'option « resolv-file » sera ignorée car « no-resolv » a été spécifié"
 
 #
-#: dnsmasq.c:633
+#: dnsmasq.c:634
 msgid "warning: no upstream servers configured"
 msgstr "attention : aucun serveur amont n'est configuré"
 
-#: dnsmasq.c:637
+#: dnsmasq.c:638
 #, c-format
 msgid "asynchronous logging enabled, queue limit is %d messages"
 msgstr "mode asynchrone d'écriture de traces, la taille maximum de la queue est de %d messages."
 
-#: dnsmasq.c:652
+#: dnsmasq.c:659
 msgid "IPv6 router advertisement enabled"
 msgstr "annonces de routeur IPv6 activées"
 
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 msgid "root is "
 msgstr "root est"
 
 #
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 msgid "enabled"
 msgstr "activé"
 
-#: dnsmasq.c:671
+#: dnsmasq.c:678
 msgid "secure mode"
 msgstr "mode sécurisé"
 
-#: dnsmasq.c:697
+#: dnsmasq.c:704
 #, c-format
 msgid "restricting maximum simultaneous TFTP transfers to %d"
 msgstr "le nombre maximum de transferts TFTP simultanés sera restreint à %d"
 
-#: dnsmasq.c:862
+#: dnsmasq.c:872
 msgid "connected to system DBus"
 msgstr "connecté au systeme DBus"
 
-#: dnsmasq.c:1007
+#: dnsmasq.c:1017
 #, c-format
 msgid "cannot fork into background: %s"
 msgstr "Ne peut se lancer en tâche de fond : %s"
 
-#: dnsmasq.c:1010
+#: dnsmasq.c:1020
 #, c-format
 msgid "failed to create helper: %s"
 msgstr "impossible de créer le 'helper' : %s"
 
-#: dnsmasq.c:1013
+#: dnsmasq.c:1023
 #, c-format
 msgid "setting capabilities failed: %s"
 msgstr "impossible de configurer la capacité %s"
 
-#: dnsmasq.c:1016
+#: dnsmasq.c:1026
 #, c-format
 msgid "failed to change user-id to %s: %s"
 msgstr "Impossible de changer l'identifiant utilisateur pour %s : %s"
 
-#: dnsmasq.c:1019
+#: dnsmasq.c:1029
 #, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr "Impossible de changer l'identifiant de groupe pour %s : %s"
 
-#: dnsmasq.c:1022
+#: dnsmasq.c:1032
 #, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr "impossible de lire le fichier de PID %s : %s"
 
-#: dnsmasq.c:1025
+#: dnsmasq.c:1035
 #, c-format
 msgid "cannot open log %s: %s"
 msgstr "Ne peut ouvrir le fichier de log %s : %s"
 
 #
-#: dnsmasq.c:1028
+#: dnsmasq.c:1038
 #, c-format
 msgid "failed to load Lua script: %s"
 msgstr "impossible de charger le script Lua : %s"
 
-#: dnsmasq.c:1031
+#: dnsmasq.c:1041
 #, c-format
 msgid "TFTP directory %s inaccessible: %s"
 msgstr "répertoire TFTP %s inaccessible : %s"
 
-#: dnsmasq.c:1095
+#: dnsmasq.c:1105
 #, c-format
 msgid "script process killed by signal %d"
 msgstr "Le script a été terminé par le signal %d"
 
-#: dnsmasq.c:1099
+#: dnsmasq.c:1109
 #, c-format
 msgid "script process exited with status %d"
 msgstr "Le script s'est terminé avec le statut %d"
 
-#: dnsmasq.c:1103
+#: dnsmasq.c:1113
 #, c-format
 msgid "failed to execute %s: %s"
 msgstr "impossible d'exécuter à %s : %s"
 
-#: dnsmasq.c:1148
+#: dnsmasq.c:1158
 msgid "exiting on receipt of SIGTERM"
 msgstr "sortie sur réception du signal SIGTERM"
 
-#: dnsmasq.c:1176
+#: dnsmasq.c:1186
 #, c-format
 msgid "failed to access %s: %s"
 msgstr "impossible d'accéder à %s : %s"
 
-#: dnsmasq.c:1206
+#: dnsmasq.c:1216
 #, c-format
 msgid "reading %s"
 msgstr "Lecture de %s"
 
-#: dnsmasq.c:1217
+#: dnsmasq.c:1227
 #, c-format
 msgid "no servers found in %s, will retry"
 msgstr "aucun serveur trouvé dans %s, va réessayer"
 
-#: dhcp.c:49
+#: dhcp.c:53
 #, c-format
 msgid "cannot create DHCP socket: %s"
 msgstr "ne peut créer la socket DHCP: %s"
 
-#: dhcp.c:64
+#: dhcp.c:68
 #, c-format
 msgid "failed to set options on DHCP socket: %s"
 msgstr "impossible d'appliquer les options sur la socket DHCP : %s"
 
-#: dhcp.c:77
+#: dhcp.c:89
 #, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
 msgstr "impossible de déclarer SO_REUSE{ADDR|PORT} sur la socket DHCP : %s"
 
-#: dhcp.c:89
+#: dhcp.c:101
 #, c-format
 msgid "failed to bind DHCP server socket: %s"
 msgstr "impossible de lier la socket serveur DHCP : %s"
 
-#: dhcp.c:115
+#: dhcp.c:127
 #, c-format
 msgid "cannot create ICMP raw socket: %s."
 msgstr "ne peut créer de socket en mode raw pour ICMP : %s."
 
-#: dhcp.c:225
+#: dhcp.c:239
 #, c-format
 msgid "unknown interface %s in bridge-interface"
 msgstr "interface %s inconnue spécifiée comme interface de pont"
 
-#: dhcp.c:250
+#: dhcp.c:278
 #, c-format
 msgid "DHCP packet received on %s which has no address"
 msgstr "Paquet DHCP reçu sur %s qui n'a pas d'adresse"
 
-#: dhcp.c:457
+#: dhcp.c:505
 #, c-format
 msgid "DHCP range %s -- %s is not consistent with netmask %s"
 msgstr "La plage d'adresses DHCP %s -- %s n'est pas cohérente avec le masque de réseau %s"
 
-#: dhcp.c:832
+#: dhcp.c:806
 #, c-format
 msgid "bad line at %s line %d"
 msgstr "mauvaise ligne dans %s ligne %d"
 
-#: dhcp.c:875
+#: dhcp.c:849
 #, c-format
 msgid "ignoring %s line %d, duplicate name or IP address"
 msgstr "ignore %s à la ligne %d : duplication de nom ou d'adresse IP"
 
+#: dhcp.c:993 rfc3315.c:2047
+#, c-format
+msgid "DHCP relay %s -> %s"
+msgstr "Relais DHCP %s -> %s"
+
 #: lease.c:61
 #, c-format
 msgid "cannot open or create lease file %s: %s"
 msgstr "ne peut ouvrir ou créer le fichiers de baux %s : %s"
 
-#: lease.c:133
+#: lease.c:134
 msgid "too many stored leases"
 msgstr "beaucoup trop de baux enregistrés"
 
-#: lease.c:164
+#: lease.c:165
 #, c-format
 msgid "cannot run lease-init script %s: %s"
 msgstr "Ne peut pas exécuter le script lease-init %s : %s"
 
-#: lease.c:170
+#: lease.c:171
 #, c-format
 msgid "lease-init script returned exit code %s"
 msgstr "le script lease-init a retourné le code %s"
 
-#: lease.c:339
+#: lease.c:342
 #, c-format
 msgid "failed to write %s: %s (retry in %us)"
 msgstr "impossible de lire %s : %s (prochain essai dans %us)"
 
-#: lease.c:843
+#: lease.c:871
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr "Le domaine %s est ignoré pour l'hôte DHCP %s"
 
-#: rfc2131.c:337
+#: rfc2131.c:338
 #, c-format
 msgid "no address range available for DHCP request %s %s"
 msgstr "pas de plage d'adresse disponible pour la requête DHCP %s %s"
 
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "with subnet selector"
 msgstr "avec sélecteur de sous-reseau"
 
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "via"
 msgstr "par l'intermédiaire de"
 
-#: rfc2131.c:350
+#: rfc2131.c:351
 #, c-format
 msgid "%u available DHCP subnet: %s/%s"
 msgstr "%u sous-réseaux DHCP disponibles : %s/%s"
 
-#: rfc2131.c:353 rfc3315.c:272
+#: rfc2131.c:354 rfc3315.c:292
 #, c-format
 msgid "%u available DHCP range: %s -- %s"
 msgstr "%u la gamme DHCP disponible est : %s -- %s"
 
-#: rfc2131.c:382
-msgid "disabled"
-msgstr "désactivé"
-
-#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771
-#: rfc3315.c:1017
-msgid "ignored"
-msgstr "ignoré"
-
-#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814
-msgid "address in use"
-msgstr "adresse déjà utilisée"
-
-#: rfc2131.c:452 rfc2131.c:1007
-msgid "no address available"
-msgstr "pas d'adresse disponible"
-
-#: rfc2131.c:459 rfc2131.c:1154
-msgid "wrong network"
-msgstr "mauvais réseau"
-
-#: rfc2131.c:474
-msgid "no address configured"
-msgstr "pas d'adresse configurée"
-
-#: rfc2131.c:480 rfc2131.c:1204
-msgid "no leases left"
-msgstr "plus aucun bail disponible"
-
-#: rfc2131.c:576 rfc3315.c:428
-#, c-format
-msgid "%u client provides name: %s"
-msgstr "le client %u fourni le nom : %s"
-
-#: rfc2131.c:731
+#: rfc2131.c:465
 #, c-format
 msgid "%u vendor class: %s"
 msgstr "%u Classe de vendeur ('Vendor Class') : %s"
 
-#: rfc2131.c:733
+#: rfc2131.c:467
 #, c-format
 msgid "%u user class: %s"
 msgstr "%u Classe d'utilisateur : %s"
 
+#: rfc2131.c:494
+msgid "disabled"
+msgstr "désactivé"
+
+#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813
+#: rfc3315.c:1082
+msgid "ignored"
+msgstr "ignoré"
+
+#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863
+msgid "address in use"
+msgstr "adresse déjà utilisée"
+
+#: rfc2131.c:564 rfc2131.c:1015
+msgid "no address available"
+msgstr "pas d'adresse disponible"
+
+#: rfc2131.c:571 rfc2131.c:1162
+msgid "wrong network"
+msgstr "mauvais réseau"
+
+#: rfc2131.c:586
+msgid "no address configured"
+msgstr "pas d'adresse configurée"
+
+#: rfc2131.c:592 rfc2131.c:1212
+msgid "no leases left"
+msgstr "plus aucun bail disponible"
+
+#: rfc2131.c:687 rfc3315.c:466
+#, c-format
+msgid "%u client provides name: %s"
+msgstr "le client %u fourni le nom : %s"
+
 #: rfc2131.c:792
 msgid "PXE BIS not supported"
 msgstr "Service PXE BIS (Boot Integrity Services) non supporté"
 
-#: rfc2131.c:923 rfc3315.c:1111
+#: rfc2131.c:931 rfc3315.c:1176
 #, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "désactive l'adresse statique DHCP %s pour %s"
 
-#: rfc2131.c:944
+#: rfc2131.c:952
 msgid "unknown lease"
 msgstr "bail inconnu"
 
-#: rfc2131.c:976
+#: rfc2131.c:984
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr "L'adresse statique %s ne sera pas utilisée car un bail est déjà attribué à %s"
 
-#: rfc2131.c:986
+#: rfc2131.c:994
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr "L'adresse statique %s ne sera pas utilisée car elle est utilisée par le serveur ou un relai"
 
-#: rfc2131.c:989
+#: rfc2131.c:997
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr "L'adresse statique %s ne sera pas utilisée car elle a préalablement été refusée"
 
-#: rfc2131.c:1005 rfc2131.c:1197
+#: rfc2131.c:1013 rfc2131.c:1205
 msgid "no unique-id"
 msgstr "pas d'identifiant unique"
 
-#: rfc2131.c:1092
+#: rfc2131.c:1100
 msgid "wrong server-ID"
 msgstr "mauvais identifiant de serveur"
 
-#: rfc2131.c:1111
+#: rfc2131.c:1119
 msgid "wrong address"
 msgstr "mauvaise adresse"
 
-#: rfc2131.c:1129 rfc3315.c:911
+#: rfc2131.c:1137 rfc3315.c:959
 msgid "lease not found"
 msgstr "bail non trouvé"
 
-#: rfc2131.c:1162
+#: rfc2131.c:1170
 msgid "address not available"
 msgstr "adresse non disponible"
 
-#: rfc2131.c:1173
+#: rfc2131.c:1181
 msgid "static lease available"
 msgstr "bail statique disponible"
 
-#: rfc2131.c:1177
+#: rfc2131.c:1185
 msgid "address reserved"
 msgstr "adresse reservée"
 
-#: rfc2131.c:1185
+#: rfc2131.c:1193
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr "abandon du bail de %s pour %s"
 
-#: rfc2131.c:1679
+#: rfc2131.c:1701
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr "%u nom de fichier 'bootfile' : %s"
 
-#: rfc2131.c:1688
+#: rfc2131.c:1710
 #, c-format
 msgid "%u server name: %s"
 msgstr "%u nom du serveur : %s"
 
-#: rfc2131.c:1696
+#: rfc2131.c:1718
 #, c-format
 msgid "%u next server: %s"
 msgstr "%u serveur suivant : %s"
 
-#: rfc2131.c:1699
+#: rfc2131.c:1721
 #, c-format
 msgid "%u broadcast response"
 msgstr "%u réponse broadcast"
 
-#: rfc2131.c:1762
+#: rfc2131.c:1784
 #, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr "Impossible d'envoyer l'option DHCP/BOOTP %d : pas assez d'espace dans le paquet"
 
-#: rfc2131.c:2002
+#: rfc2131.c:2025
 msgid "PXE menu too large"
 msgstr "menu PXE trop grand"
 
-#: rfc2131.c:2139 rfc3315.c:1332
+#: rfc2131.c:2162 rfc3315.c:1420
 #, c-format
 msgid "%u requested options: %s"
 msgstr "%u options demandées : %s"
 
-#: rfc2131.c:2415
+#: rfc2131.c:2442
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr "ne peux envoyer l'option RFC3925 : trop d'options pour le numéro d'entreprise %d"
@@ -1559,7 +1589,7 @@
 msgid "cannot create netlink socket: %s"
 msgstr "ne peux lier une socket netlink : %s"
 
-#: netlink.c:354
+#: netlink.c:363
 #, c-format
 msgid "netlink returns error: %s"
 msgstr "Erreur netlink : %s"
@@ -1568,53 +1598,53 @@
 msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
 msgstr "tentative de lier une adresse serveur IPV6 via DBus - pas de support IPV6"
 
-#: dbus.c:308 dbus.c:504
+#: dbus.c:523
 msgid "setting upstream servers from DBus"
 msgstr "configuration des serveurs amonts à partir de DBus"
 
-#: dbus.c:561
+#: dbus.c:570
 msgid "could not register a DBus message handler"
 msgstr "ne peut enregistrer une routine de traitement des messages DBus"
 
-#: bpf.c:197
+#: bpf.c:245
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr "impossible de créer une socket BPF pour DHCP : %s"
 
-#: bpf.c:225
+#: bpf.c:273
 #, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr "requête DHCP pour un type de matériel non supporté (%d) reçue sur %s"
 
-#: helper.c:145
+#: helper.c:151
 msgid "lease() function missing in Lua script"
 msgstr "la fonction lease() est absente du script Lua"
 
-#: tftp.c:290
+#: tftp.c:303
 msgid "unable to get free port for TFTP"
 msgstr "impossible d'obtenir un port libre pour TFTP"
 
-#: tftp.c:306
+#: tftp.c:319
 #, c-format
 msgid "unsupported request from %s"
 msgstr "requête de %s non supportée"
 
-#: tftp.c:420
+#: tftp.c:433
 #, c-format
 msgid "file %s not found"
 msgstr "fichier %s non trouvé"
 
-#: tftp.c:529
+#: tftp.c:542
 #, c-format
 msgid "error %d %s received from %s"
 msgstr "erreur %d %s reçu de %s"
 
-#: tftp.c:571
+#: tftp.c:584
 #, c-format
 msgid "failed sending %s to %s"
 msgstr "impossible d'envoyer %s à %s"
 
-#: tftp.c:571
+#: tftp.c:584
 #, c-format
 msgid "sent %s to %s"
 msgstr "envoyé %s à %s"
@@ -1638,176 +1668,195 @@
 msgid "Conntrack connection mark retrieval failed: %s"
 msgstr "La récupération de la marque de suivi de connexion a échoué : %s"
 
-#: dhcp6.c:49
+#: dhcp6.c:59
 #, c-format
 msgid "cannot create DHCPv6 socket: %s"
 msgstr "ne peut créer la socket DHCPv6: %s"
 
-#: dhcp6.c:62
+#: dhcp6.c:80
 #, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s"
 msgstr "impossible de déclarer SO_REUSE{ADDR|PORT} sur la socket DHCPv6 : %s"
 
-#: dhcp6.c:74
+#: dhcp6.c:92
 #, c-format
 msgid "failed to bind DHCPv6 server socket: %s"
 msgstr "impossible de lier la socket serveur DHCPv6 : %s"
 
-#: rfc3315.c:135
+#: rfc3315.c:149
 #, c-format
 msgid "no address range available for DHCPv6 request from relay at %s"
 msgstr "pas de plage d'adresse disponible pour la requête DHCPv6 transmise via le relai %s"
 
-#: rfc3315.c:144
+#: rfc3315.c:158
 #, c-format
 msgid "no address range available for DHCPv6 request via %s"
 msgstr "pas de plage d'adresse disponible pour la requête DHCPv6 via %s"
 
-#: rfc3315.c:269
+#: rfc3315.c:289
 #, c-format
 msgid "%u available DHCPv6 subnet: %s/%d"
 msgstr "%u sous-réseaux DHCPv6 disponibles : %s/%d"
 
-#: rfc3315.c:350
+#: rfc3315.c:370
 #, c-format
 msgid "%u vendor class: %u"
 msgstr "%u Classe de vendeur ('Vendor Class') : %u"
 
-#: rfc3315.c:609
+#: rfc3315.c:418
+#, c-format
+msgid "%u client MAC address: %s"
+msgstr "%u MAC adresse du client : %s"
+
+#: rfc3315.c:650
 #, c-format
 msgid "unknown prefix-class %d"
 msgstr "préfixe de classe inconnu %d"
 
-#: rfc3315.c:741 rfc3315.c:854
+#: rfc3315.c:781 rfc3315.c:903
 msgid "success"
 msgstr "réussi"
 
-#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864
+#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913
 msgid "no addresses available"
 msgstr "pas d'adresse disponible"
 
-#: rfc3315.c:806
+#: rfc3315.c:855
 msgid "address unavailable"
 msgstr "adresse non disponible"
 
-#: rfc3315.c:841
+#: rfc3315.c:890
 msgid "not on link"
 msgstr "pas sur ce lien"
 
-#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150
+#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215
 msgid "no binding found"
 msgstr "aucune liaison trouvée"
 
-#: rfc3315.c:948
+#: rfc3315.c:1001
 msgid "deprecated"
 msgstr "obsolète"
 
-#: rfc3315.c:951
+#: rfc3315.c:1006
 msgid "address invalid"
 msgstr "adresse non valide"
 
-#: rfc3315.c:992
+#: rfc3315.c:1048
 msgid "confirm failed"
 msgstr "confirmation d'échec"
 
-#: rfc3315.c:1003
+#: rfc3315.c:1059
 msgid "all addresses still on link"
 msgstr "toutes les adresses sont toujours sur le lien"
 
-#: rfc3315.c:1082
+#: rfc3315.c:1147
 msgid "release received"
 msgstr "libération reçue"
 
+#: rfc3315.c:2038
+msgid "Cannot multicast to DHCPv6 server without correct interface"
+msgstr "Impossible de faire du multicast au server DHCPv6 sans interface valide"
+
 #: dhcp-common.c:145
 #, c-format
 msgid "Ignoring duplicate dhcp-option %d"
 msgstr "L'option dhcp-option redondante %d sera ignorée"
 
-#: dhcp-common.c:215
+#: dhcp-common.c:222
 #, c-format
 msgid "%u tags: %s"
 msgstr "%u options: %s"
 
-#: dhcp-common.c:296
+#: dhcp-common.c:407
 #, c-format
 msgid "%s has more than one address in hostsfile, using %s for DHCP"
 msgstr "%s a plus d'une adresse dans le fichier d'hôte, utilisation de %s pour le DHCP."
 
-#: dhcp-common.c:319
+#: dhcp-common.c:430
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr "adresse IP %s (%s) dupliquée dans la directive dhcp-config."
 
-#: dhcp-common.c:367
+#: dhcp-common.c:484
 #, c-format
 msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s"
 msgstr "impossible de déclarer SO_BINDTODEVICE sur la socket DHCP : %s"
 
-#: dhcp-common.c:489
+#: dhcp-common.c:606
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr "Options DHCP connues :\n"
 
-#: dhcp-common.c:500
+#: dhcp-common.c:617
 #, c-format
 msgid "Known DHCPv6 options:\n"
 msgstr "Options DHCPv6 connues :\n"
 
-#: dhcp-common.c:693
+#: dhcp-common.c:814
 msgid ", prefix deprecated"
 msgstr ", préfixe obsolète"
 
-#: dhcp-common.c:696
+#: dhcp-common.c:817
 #, c-format
 msgid ", lease time "
 msgstr ", durée de bail "
 
-#: dhcp-common.c:727
+#: dhcp-common.c:849
 #, c-format
 msgid "%s stateless on %s%.0s%.0s%s"
 msgstr "%s sans état (stateless) sur %s%.0s%.0s%s"
 
-#: dhcp-common.c:729
+#: dhcp-common.c:851
 #, c-format
 msgid "%s, static leases only on %.0s%s%s%.0s"
 msgstr "%s, baux statiques seulement sur %.0s%s%s%.0s"
 
-#: dhcp-common.c:731
+#: dhcp-common.c:853
 #, c-format
 msgid "%s, proxy on subnet %.0s%s%.0s%.0s"
 msgstr "%s, proxy sur le sous-réseau %.0s%s%.0s"
 
-#: dhcp-common.c:732
+#: dhcp-common.c:854
 #, c-format
 msgid "%s, IP range %s -- %s%s%.0s"
 msgstr "%s, plage d'adresses IP %s -- %s%s%.0s"
 
-#: dhcp-common.c:739
+#: dhcp-common.c:861
 #, c-format
 msgid "DHCPv4-derived IPv6 names on %s%s"
 msgstr "noms IPv6 dérivés de DHCPv4 sur %s%s"
 
-#: dhcp-common.c:742
+#: dhcp-common.c:864
 #, c-format
 msgid "router advertisement on %s%s"
 msgstr "annonces de routeurs sur %s%s"
 
-#: radv.c:87
+#: dhcp-common.c:875
+#, c-format
+msgid "DHCP relay from %s to %s via %s"
+msgstr "Relais DHCP de %s à %s via %s"
+
+#: dhcp-common.c:877
+#, c-format
+msgid "DHCP relay from %s to %s"
+msgstr "Relais DHCP de %s à %s"
+
+#: radv.c:93
 #, c-format
 msgid "cannot create ICMPv6 socket: %s"
 msgstr "ne peut créer la socket ICMPv6: %s"
 
-#: auth.c:402
+#: auth.c:435
 #, c-format
 msgid "ignoring zone transfer request from %s"
 msgstr "la requête de transfert de zone en provenance de %s est ignorée"
 
-#: ipset.c:71
+#: ipset.c:95
 #, c-format
 msgid "failed to find kernel version: %s"
 msgstr "impossible de trouver la version de noyau : %s"
 
-#: ipset.c:90
+#: ipset.c:114
 #, c-format
 msgid "failed to create IPset control socket: %s"
 msgstr "impossible de créer une socket de contrôle IPset : %s"
diff --git a/po/id.po b/po/id.po
index 130738d..7e0c470 100644
--- a/po/id.po
+++ b/po/id.po
@@ -22,19 +22,19 @@
 msgstr "gagal memuat nama-nama dari %s: %s"
 
 # OK
-#: cache.c:834 dhcp.c:845
+#: cache.c:834 dhcp.c:819
 #, fuzzy, c-format
 msgid "bad address at %s line %d"
 msgstr "kesalahan nama pada %s baris %d"
 
 # OK
-#: cache.c:885 dhcp.c:861
+#: cache.c:885 dhcp.c:835
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "kesalahan nama pada %s baris %d"
 
 # OK
-#: cache.c:892 dhcp.c:936
+#: cache.c:892 dhcp.c:910
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "membaca %s - %d alamat"
@@ -44,39 +44,39 @@
 msgid "cleared cache"
 msgstr "cache telah dihapus"
 
-#: cache.c:1016
+#: cache.c:984
 #, c-format
 msgid "No IPv4 address found for %s"
 msgstr ""
 
-#: cache.c:1093
+#: cache.c:1061
 #, c-format
 msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
 msgstr ""
 
 # OK
-#: cache.c:1117
+#: cache.c:1085
 #, c-format
 msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
 msgstr "tidak memberikan nama %s kepada lease DHCP %s karena nama telah ada dalam %sdengan alamat %s"
 
-#: cache.c:1162
+#: cache.c:1130
 #, c-format
 msgid "time %lu"
 msgstr ""
 
 # OK
-#: cache.c:1163
+#: cache.c:1131
 #, fuzzy, c-format
 msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
 msgstr "ukuran cache %d, %d/%d penyisipan cache menimpa cache yang belum kadaluwarsa"
 
-#: cache.c:1165
+#: cache.c:1133
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr ""
 
-#: cache.c:1188
+#: cache.c:1156
 #, c-format
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr ""
@@ -88,637 +88,649 @@
 msgstr "gagal mendengarkan di socket: %s"
 
 # OK
-#: util.c:189
+#: util.c:192
 #, fuzzy
 msgid "failed to allocate memory"
 msgstr "gagal memuat %S: %m"
 
 # OK
-#: util.c:227 option.c:531
+#: util.c:230 option.c:540
 msgid "could not get memory"
 msgstr "tidak bisa mendapatkan memory"
 
 # OK
-#: util.c:237
+#: util.c:240
 #, fuzzy, c-format
 msgid "cannot create pipe: %s"
 msgstr "tidak bisa membaca %s: %s"
 
 # OK
-#: util.c:245
+#: util.c:248
 #, fuzzy, c-format
 msgid "failed to allocate %d bytes"
 msgstr "gagal memuat %S: %m"
 
 # OK
-#: util.c:400
+#: util.c:403
 #, c-format
 msgid "infinite"
 msgstr "tak terbatas"
 
 # OK
-#: option.c:286
+#: option.c:292
 msgid "Specify local address(es) to listen on."
 msgstr "Tentukan alamat lokal untuk mendengarkan."
 
 # OK
-#: option.c:287
+#: option.c:293
 msgid "Return ipaddr for all hosts in specified domains."
 msgstr "Menghasilkan ipaddr untuk semua host dalam domain yang dipilih."
 
 # OK
-#: option.c:288
+#: option.c:294
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr "Fake pencarian balik untuk alamat private sesuai dengan RFC1918."
 
 # OK
-#: option.c:289
+#: option.c:295
 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
 msgstr "Perlakukan ipaddr sebagai NXDOMAIN (mengalahkan wildcard Verisign)."
 
 # OK
-#: option.c:290
+#: option.c:296
 #, c-format
 msgid "Specify the size of the cache in entries (defaults to %s)."
 msgstr "Tentukan ukuran cache, dalam jumlah isian (default %s)."
 
 # OK
-#: option.c:291
+#: option.c:297
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr "Tentukan file konfigurasi (default %s)."
 
 # OK
-#: option.c:292
+#: option.c:298
 msgid "Do NOT fork into the background: run in debug mode."
 msgstr "JANGAN berjalan di background: berjalan dalam modus debug."
 
 # OK
-#: option.c:293
+#: option.c:299
 msgid "Do NOT forward queries with no domain part."
 msgstr "JANGAN teruskan permintaan tanpa bagian domain."
 
 # OK
-#: option.c:294
+#: option.c:300
 msgid "Return self-pointing MX records for local hosts."
 msgstr "Mengembalikan record MX untuk diri sendiri host-host lokal."
 
 # OK
-#: option.c:295
+#: option.c:301
 msgid "Expand simple names in /etc/hosts with domain-suffix."
 msgstr "Melengkapi nama-nama di /etc/hosts dengan akhiran domain."
 
 # OK
-#: option.c:296
+#: option.c:302
 msgid "Don't forward spurious DNS requests from Windows hosts."
 msgstr "Jangan meneruskan permintaan DNS spurious dari host-host Windows."
 
 # OK
-#: option.c:297
+#: option.c:303
 msgid "Enable DHCP in the range given with lease duration."
 msgstr "Bolehkan DHCP dalam jangkauan yang diberikan dengan durasi lease."
 
 # OK
-#: option.c:298
+#: option.c:304
 #, c-format
 msgid "Change to this group after startup (defaults to %s)."
 msgstr "Ubah ke group ini setelah mulai (default %s)."
 
 # OK
-#: option.c:299
+#: option.c:305
 msgid "Set address or hostname for a specified machine."
 msgstr "Setel alamat atau nama host untuk mesin yang disebutkan."
 
 # OK
-#: option.c:300
+#: option.c:306
 #, fuzzy
 msgid "Read DHCP host specs from file."
 msgstr "nama MX salah"
 
-#: option.c:301
+#: option.c:307
 msgid "Read DHCP option specs from file."
 msgstr ""
 
-#: option.c:302
+#: option.c:308
 msgid "Evaluate conditional tag expression."
 msgstr ""
 
 # OK
-#: option.c:303
+#: option.c:309
 #, c-format
 msgid "Do NOT load %s file."
 msgstr "JANGAN muat file %s."
 
 # OK
-#: option.c:304
+#: option.c:310
 #, c-format
 msgid "Specify a hosts file to be read in addition to %s."
 msgstr "Sebutkan sebuah file hosts yang harus dibaca sebagai tambahan untuk %s."
 
 # OK
-#: option.c:305
+#: option.c:311
 msgid "Specify interface(s) to listen on."
 msgstr "Sebutkan antarmuka untuk mendengarkan."
 
 # OK
-#: option.c:306
+#: option.c:312
 msgid "Specify interface(s) NOT to listen on."
 msgstr "Sebutkan antarmuka untuk TIDAK mendengarkan."
 
 # OK
-#: option.c:307
+#: option.c:313
 #, fuzzy
 msgid "Map DHCP user class to tag."
 msgstr "Petakan kelas user DHCP ke setelan yang dipilih."
 
-#: option.c:308
+#: option.c:314
 msgid "Map RFC3046 circuit-id to tag."
 msgstr ""
 
-#: option.c:309
+#: option.c:315
 msgid "Map RFC3046 remote-id to tag."
 msgstr ""
 
-#: option.c:310
+#: option.c:316
 msgid "Map RFC3993 subscriber-id to tag."
 msgstr ""
 
 # OK
-#: option.c:311
+#: option.c:317
 #, fuzzy
 msgid "Don't do DHCP for hosts with tag set."
 msgstr "Jangan menggunakan DHCP untuk host-host yang dipilih."
 
 # OK
-#: option.c:312
+#: option.c:318
 #, fuzzy
 msgid "Force broadcast replies for hosts with tag set."
 msgstr "Jangan menggunakan DHCP untuk host-host yang dipilih."
 
 # OK
-#: option.c:313
+#: option.c:319
 msgid "Do NOT fork into the background, do NOT run in debug mode."
 msgstr "JANGAN berjalan di background, jangan berjalan dalam modus debug."
 
 # OK
-#: option.c:314
+#: option.c:320
 msgid "Assume we are the only DHCP server on the local network."
 msgstr "Berpikir bahwa kita satu-satunya DHCP server dalam jaringan."
 
 # OK
-#: option.c:315
+#: option.c:321
 #, c-format
 msgid "Specify where to store DHCP leases (defaults to %s)."
 msgstr "Sebutkan lokasi untuk menyimpan lease DHCP (default %s)."
 
 # OK
-#: option.c:316
+#: option.c:322
 msgid "Return MX records for local hosts."
 msgstr "Kembalikan rekord MX untuk host-host lokal."
 
 # OK
-#: option.c:317
+#: option.c:323
 msgid "Specify an MX record."
 msgstr "Sebutkan sebuah rekord MX."
 
 # OK
-#: option.c:318
+#: option.c:324
 msgid "Specify BOOTP options to DHCP server."
 msgstr "Sebutkan pilihan-pilihan BOOTP untuk DHCP server."
 
-#: option.c:319
+#: option.c:325
 #, c-format
 msgid "Do NOT poll %s file, reload only on SIGHUP."
 msgstr "Jangan kumpulkan file %s, muat kembali saat SIGHUP."
 
 # OK
-#: option.c:320
+#: option.c:326
 msgid "Do NOT cache failed search results."
 msgstr "JANGAN menyimpan hasil pencarian yang gagal."
 
 # OK
-#: option.c:321
+#: option.c:327
 #, c-format
 msgid "Use nameservers strictly in the order given in %s."
 msgstr "Gunakan secara ketat namaserver yang disebutkan sesuai urutan di %s."
 
 # OK
-#: option.c:322
+#: option.c:328
 #, fuzzy
 msgid "Specify options to be sent to DHCP clients."
 msgstr "Setel pilihan-pilihan tambahan yang akan disetel untuk klien-klien DHCP."
 
-#: option.c:323
+#: option.c:329
 msgid "DHCP option sent even if the client does not request it."
 msgstr ""
 
 # OK
-#: option.c:324
+#: option.c:330
 msgid "Specify port to listen for DNS requests on (defaults to 53)."
 msgstr "Sebutkan port untuk mendengarkan permintaan DNS (default port 53)."
 
 # OK
-#: option.c:325
+#: option.c:331
 #, c-format
 msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
 msgstr "Ukuran maksimum paket UDP yang didukung untuk EDNS.0 (default %s)."
 
 # OK
-#: option.c:326
+#: option.c:332
 #, fuzzy
 msgid "Log DNS queries."
 msgstr "Permintaan log."
 
 # OK
-#: option.c:327
+#: option.c:333
 #, fuzzy
 msgid "Force the originating port for upstream DNS queries."
 msgstr "Paksa port asal untuk permintaan ke atas."
 
 # OK
-#: option.c:328
+#: option.c:334
 msgid "Do NOT read resolv.conf."
 msgstr "JANGAN baca resolv.conf."
 
 # OK
-#: option.c:329
+#: option.c:335
 #, c-format
 msgid "Specify path to resolv.conf (defaults to %s)."
 msgstr "Sebutkan path ke resolv.conf (default %s)."
 
 # OK
-#: option.c:330
+#: option.c:336
 msgid "Specify address(es) of upstream servers with optional domains."
 msgstr "Sebutkan alamat-alamat server di atas, boleh dilengkapi dengan nama domain."
 
 # OK
-#: option.c:331
+#: option.c:337
 msgid "Never forward queries to specified domains."
 msgstr "JANGAN pernah meneruskan permintaan ke domain yang disebutkan."
 
 # OK
-#: option.c:332
+#: option.c:338
 msgid "Specify the domain to be assigned in DHCP leases."
 msgstr "Sebutkan domain yang digunakan dalam lease DHCP."
 
 # OK
-#: option.c:333
+#: option.c:339
 msgid "Specify default target in an MX record."
 msgstr "Sebutkan tujuan default dalam rekord MX."
 
 # OK
-#: option.c:334
+#: option.c:340
 msgid "Specify time-to-live in seconds for replies from /etc/hosts."
 msgstr "Sebutkan time-to-live dalam detik untuk jawaban dari /etc/hosts."
 
 # OK
-#: option.c:335
+#: option.c:341
 #, fuzzy
 msgid "Specify time-to-live in seconds for negative caching."
 msgstr "Sebutkan time-to-live dalam detik untuk jawaban dari /etc/hosts."
 
 # OK
-#: option.c:336
+#: option.c:342
 #, fuzzy
 msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
 msgstr "Sebutkan time-to-live dalam detik untuk jawaban dari /etc/hosts."
 
 # OK
-#: option.c:337
+#: option.c:343
 #, c-format
 msgid "Change to this user after startup. (defaults to %s)."
 msgstr "Ubah ke user ini setelah mulai. (default %s)."
 
 # OK
-#: option.c:338
+#: option.c:344
 #, fuzzy
 msgid "Map DHCP vendor class to tag."
 msgstr "Memetakan kelas vendor DHCP ke daftar pilihan."
 
 # OK
-#: option.c:339
+#: option.c:345
 msgid "Display dnsmasq version and copyright information."
 msgstr "Menampilkan versi dan informasi hak cipta dnsmasq."
 
 # OK
-#: option.c:340
+#: option.c:346
 msgid "Translate IPv4 addresses from upstream servers."
 msgstr "Terjemahkan alamat-alamat IPv4 dari server-server di atas."
 
 # OK
-#: option.c:341
+#: option.c:347
 msgid "Specify a SRV record."
 msgstr "Sebutkan rekord SRV."
 
-#: option.c:342
+#: option.c:348
 msgid "Display this message. Use --help dhcp for known DHCP options."
 msgstr ""
 
 # OK
-#: option.c:343
+#: option.c:349
 #, fuzzy, c-format
 msgid "Specify path of PID file (defaults to %s)."
 msgstr "Sebutkan path file PID. (default %s)."
 
 # OK
-#: option.c:344
+#: option.c:350
 #, c-format
 msgid "Specify maximum number of DHCP leases (defaults to %s)."
 msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
 
 # OK
-#: option.c:345
+#: option.c:351
 msgid "Answer DNS queries based on the interface a query was sent to."
 msgstr "Jawab permintaan DNS berdasarkan antarmuka dimana permintaan dikirimkan."
 
 # OK
-#: option.c:346
+#: option.c:352
 msgid "Specify TXT DNS record."
 msgstr "Sebutkan rekord TXT DNS."
 
 # OK
-#: option.c:347
+#: option.c:353
 #, fuzzy
 msgid "Specify PTR DNS record."
 msgstr "Sebutkan rekord TXT DNS."
 
-#: option.c:348
+#: option.c:354
 msgid "Give DNS name to IPv4 address of interface."
 msgstr ""
 
 # OK
-#: option.c:349
+#: option.c:355
 msgid "Bind only to interfaces in use."
 msgstr "Hanya kaitkan ke antarmuka yang sedang digunakan saja."
 
 # OK
-#: option.c:350
+#: option.c:356
 #, c-format
 msgid "Read DHCP static host information from %s."
 msgstr "Baca informasi statik host DHCP dari %s."
 
 # OK
-#: option.c:351
+#: option.c:357
 msgid "Enable the DBus interface for setting upstream servers, etc."
 msgstr "Mungkinkan antar muka DBus untuk menyetel server-server di atas, dsb."
 
 # OK
-#: option.c:352
+#: option.c:358
 msgid "Do not provide DHCP on this interface, only provide DNS."
 msgstr "JANGAN menyediakan DHCP pada antarmuka ini, hanya menyediakan DNS."
 
 # OK
-#: option.c:353
+#: option.c:359
 msgid "Enable dynamic address allocation for bootp."
 msgstr "Mungkinkan alokasi alamat dinamis untuk bootp."
 
 # OK
-#: option.c:354
+#: option.c:360
 #, fuzzy
 msgid "Map MAC address (with wildcards) to option set."
 msgstr "Memetakan kelas vendor DHCP ke daftar pilihan."
 
-#: option.c:355
+#: option.c:361
 msgid "Treat DHCP requests on aliases as arriving from interface."
 msgstr ""
 
-#: option.c:356
+#: option.c:362
 msgid "Disable ICMP echo address checking in the DHCP server."
 msgstr ""
 
-#: option.c:357
+#: option.c:363
 msgid "Shell script to run on DHCP lease creation and destruction."
 msgstr ""
 
-#: option.c:358
+#: option.c:364
 msgid "Lua script to run on DHCP lease creation and destruction."
 msgstr ""
 
-#: option.c:359
+#: option.c:365
 msgid "Run lease-change scripts as this user."
 msgstr ""
 
-#: option.c:360
+#: option.c:366
 msgid "Read configuration from all the files in this directory."
 msgstr ""
 
 # OK
-#: option.c:361
+#: option.c:367
 #, fuzzy
 msgid "Log to this syslog facility or file. (defaults to DAEMON)"
 msgstr "Ubah ke user ini setelah mulai. (default %s)."
 
-#: option.c:362
+#: option.c:368
 msgid "Do not use leasefile."
 msgstr ""
 
 # OK
-#: option.c:363
+#: option.c:369
 #, fuzzy, c-format
 msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
 msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
 
-#: option.c:364
+#: option.c:370
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr ""
 
-#: option.c:365
+#: option.c:371
 msgid "Ignore hostnames provided by DHCP clients."
 msgstr ""
 
-#: option.c:366
+#: option.c:372
 msgid "Do NOT reuse filename and server fields for extra DHCP options."
 msgstr ""
 
-#: option.c:367
+#: option.c:373
 msgid "Enable integrated read-only TFTP server."
 msgstr ""
 
-#: option.c:368
+#: option.c:374
 msgid "Export files by TFTP only from the specified subtree."
 msgstr ""
 
-#: option.c:369
+#: option.c:375
 msgid "Add client IP address to tftp-root."
 msgstr ""
 
-#: option.c:370
+#: option.c:376
 msgid "Allow access only to files owned by the user running dnsmasq."
 msgstr ""
 
 # OK
-#: option.c:371
+#: option.c:377
 #, fuzzy, c-format
 msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
 msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
 
-#: option.c:372
+#: option.c:378
 msgid "Disable the TFTP blocksize extension."
 msgstr ""
 
-#: option.c:373
+#: option.c:379
 msgid "Convert TFTP filenames to lowercase"
 msgstr ""
 
-#: option.c:374
+#: option.c:380
 msgid "Ephemeral port range for use by TFTP transfers."
 msgstr ""
 
-#: option.c:375
+#: option.c:381
 msgid "Extra logging for DHCP."
 msgstr ""
 
-#: option.c:376
+#: option.c:382
 msgid "Enable async. logging; optionally set queue length."
 msgstr ""
 
-#: option.c:377
+#: option.c:383
 msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
 msgstr ""
 
-#: option.c:378
+#: option.c:384
 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
 msgstr ""
 
-#: option.c:379
+#: option.c:385
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr ""
 
-#: option.c:380
+#: option.c:386
 msgid "Always perform DNS queries to all servers."
 msgstr ""
 
-#: option.c:381
+#: option.c:387
 msgid "Set tag if client includes matching option in request."
 msgstr ""
 
-#: option.c:382
-msgid "Use alternative ports for DHCP."
-msgstr ""
-
-# OK
-#: option.c:383
-#, fuzzy
-msgid "Specify NAPTR DNS record."
-msgstr "Sebutkan rekord TXT DNS."
-
-#: option.c:384
-msgid "Specify lowest port available for DNS query transmission."
-msgstr ""
-
-#: option.c:385
-msgid "Use only fully qualified domain names for DHCP clients."
-msgstr ""
-
-#: option.c:386
-msgid "Generate hostnames based on MAC address for nameless clients."
-msgstr ""
-
-#: option.c:387
-msgid "Use these DHCP relays as full proxies."
-msgstr ""
-
 #: option.c:388
-msgid "Specify alias name for LOCAL DNS name."
+msgid "Use alternative ports for DHCP."
 msgstr ""
 
 # OK
 #: option.c:389
 #, fuzzy
-msgid "Prompt to send to PXE clients."
-msgstr "Setel pilihan-pilihan tambahan yang akan disetel untuk klien-klien DHCP."
+msgid "Specify NAPTR DNS record."
+msgstr "Sebutkan rekord TXT DNS."
 
 #: option.c:390
-msgid "Boot service for PXE menu."
+msgid "Specify lowest port available for DNS query transmission."
 msgstr ""
 
 #: option.c:391
-msgid "Check configuration syntax."
+msgid "Use only fully qualified domain names for DHCP clients."
 msgstr ""
 
 #: option.c:392
+msgid "Generate hostnames based on MAC address for nameless clients."
+msgstr ""
+
+#: option.c:393
+msgid "Use these DHCP relays as full proxies."
+msgstr ""
+
+#: option.c:394
+msgid "Relay DHCP requests to a remote server"
+msgstr ""
+
+#: option.c:395
+msgid "Specify alias name for LOCAL DNS name."
+msgstr ""
+
+# OK
+#: option.c:396
+#, fuzzy
+msgid "Prompt to send to PXE clients."
+msgstr "Setel pilihan-pilihan tambahan yang akan disetel untuk klien-klien DHCP."
+
+#: option.c:397
+msgid "Boot service for PXE menu."
+msgstr ""
+
+#: option.c:398
+msgid "Check configuration syntax."
+msgstr ""
+
+#: option.c:399
 msgid "Add requestor's MAC address to forwarded DNS queries."
 msgstr ""
 
 # OK
-#: option.c:393
+#: option.c:400
 #, fuzzy
 msgid "Proxy DNSSEC validation results from upstream nameservers."
 msgstr "Terjemahkan alamat-alamat IPv4 dari server-server di atas."
 
-#: option.c:394
+#: option.c:401
 msgid "Attempt to allocate sequential IP addresses to DHCP clients."
 msgstr ""
 
-#: option.c:395
+#: option.c:402
 msgid "Copy connection-track mark from queries to upstream connections."
 msgstr ""
 
-#: option.c:396
+#: option.c:403
 msgid "Allow DHCP clients to do their own DDNS updates."
 msgstr ""
 
-#: option.c:397
+#: option.c:404
 msgid "Send router-advertisements for interfaces doing DHCPv6"
 msgstr ""
 
-#: option.c:398
+#: option.c:405
+msgid "Always send frequent router-advertisements"
+msgstr ""
+
+#: option.c:406
 msgid "Specify DUID_EN-type DHCPv6 server DUID"
 msgstr ""
 
 # OK
-#: option.c:399
+#: option.c:407
 #, fuzzy
 msgid "Specify host (A/AAAA and PTR) records"
 msgstr "Sebutkan sebuah rekord MX."
 
 # OK
-#: option.c:400
+#: option.c:408
 #, fuzzy
 msgid "Specify arbitrary DNS resource record"
 msgstr "Sebutkan rekord TXT DNS."
 
 # OK
-#: option.c:401
+#: option.c:409
 #, fuzzy
 msgid "Bind to interfaces in use - check for new interfaces"
 msgstr "antarmuka tidak dikenal %s"
 
-#: option.c:402
+#: option.c:410
 msgid "Export local names to global DNS"
 msgstr ""
 
-#: option.c:403
+#: option.c:411
 msgid "Domain to export to global DNS"
 msgstr ""
 
-#: option.c:404
+#: option.c:412
 msgid "Set TTL for authoritative replies"
 msgstr ""
 
-#: option.c:405
+#: option.c:413
 msgid "Set authoritive zone information"
 msgstr ""
 
-#: option.c:406
+#: option.c:414
 msgid "Secondary authoritative nameservers for forward domains"
 msgstr ""
 
-#: option.c:407
+#: option.c:415
 msgid "Peers which are allowed to do zone transfer"
 msgstr ""
 
-#: option.c:408
+#: option.c:416
 msgid "Specify ipsets to which matching domains should be added"
 msgstr ""
 
-#: option.c:410
+#: option.c:417
+msgid "Specify a domain and address range for sythesised names"
+msgstr ""
+
+#: option.c:419
 msgid "Specify DHCPv6 prefix class"
 msgstr ""
 
 # OK
-#: option.c:596
+#: option.c:605
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -728,351 +740,361 @@
 "\n"
 
 # OK
-#: option.c:598
+#: option.c:607
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr "Gunakan pilihan pendek saja pada perintah baris.\n"
 
 # OK
-#: option.c:600
+#: option.c:609
 #, fuzzy, c-format
 msgid "Valid options are:\n"
 msgstr "Pilihan yang boleh adalah:\n"
 
 # OK
-#: option.c:650 option.c:654
+#: option.c:659 option.c:663
 msgid "bad port"
 msgstr "port salah"
 
-#: option.c:681 option.c:713
+#: option.c:690 option.c:722
 msgid "interface binding not supported"
 msgstr ""
 
 # OK
-#: option.c:690 option.c:3179
+#: option.c:699 option.c:3275
 #, fuzzy
 msgid "bad interface name"
 msgstr "nama MX salah"
 
 # OK
-#: option.c:720
+#: option.c:729
 #, fuzzy
 msgid "bad address"
 msgstr "membaca %s - %d alamat"
 
-#: option.c:847
+#: option.c:863
 msgid "unsupported encapsulation for IPv6 option"
 msgstr ""
 
 # OK
-#: option.c:861
+#: option.c:877
 msgid "bad dhcp-option"
 msgstr "dhcp-option salah"
 
 # OK
-#: option.c:929
+#: option.c:945
 #, fuzzy
 msgid "bad IP address"
 msgstr "membaca %s - %d alamat"
 
 # OK
-#: option.c:932 option.c:1070 option.c:2549
+#: option.c:948 option.c:1086 option.c:2620
 #, fuzzy
 msgid "bad IPv6 address"
 msgstr "membaca %s - %d alamat"
 
 # OK
-#: option.c:1097 option.c:1191
+#: option.c:1113 option.c:1207
 msgid "bad domain in dhcp-option"
 msgstr "domain dalam dhcp-option salah"
 
 # OK
-#: option.c:1229
+#: option.c:1245
 msgid "dhcp-option too long"
 msgstr "dhcp-option terlalu panjang"
 
-#: option.c:1236
+#: option.c:1252
 msgid "illegal dhcp-match"
 msgstr ""
 
-#: option.c:1298
+#: option.c:1314
 msgid "illegal repeated flag"
 msgstr ""
 
-#: option.c:1306
+#: option.c:1322
 msgid "illegal repeated keyword"
 msgstr ""
 
 # OK
-#: option.c:1358 option.c:3702
+#: option.c:1374 option.c:3802
 #, fuzzy, c-format
 msgid "cannot access directory %s: %s"
 msgstr "tidak bisa membaca %s: %s"
 
 # OK
-#: option.c:1390 tftp.c:474
+#: option.c:1406 tftp.c:487
 #, fuzzy, c-format
 msgid "cannot access %s: %s"
 msgstr "tidak bisa membaca %s: %s"
 
-#: option.c:1426
+#: option.c:1442
 msgid "setting log facility is not possible under Android"
 msgstr ""
 
-#: option.c:1435
+#: option.c:1451
 msgid "bad log facility"
 msgstr ""
 
 # OK
-#: option.c:1484
+#: option.c:1500
 msgid "bad MX preference"
 msgstr "kesukaan MX salah"
 
 # OK
-#: option.c:1489
+#: option.c:1505
 msgid "bad MX name"
 msgstr "nama MX salah"
 
 # OK
-#: option.c:1503
+#: option.c:1519
 msgid "bad MX target"
 msgstr "target MX salah"
 
-#: option.c:1515
+#: option.c:1531
 msgid "cannot run scripts under uClinux"
 msgstr ""
 
-#: option.c:1517
+#: option.c:1533
 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
 msgstr ""
 
-#: option.c:1521
+#: option.c:1537
 msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
 msgstr ""
 
 # OK
-#: option.c:1631
+#: option.c:1739 option.c:1800
 #, fuzzy
 msgid "bad prefix"
 msgstr "port salah"
 
-#: option.c:2043
+#: option.c:2094
 msgid "recompile with HAVE_IPSET defined to enable ipset directives"
 msgstr ""
 
 # OK
-#: option.c:2223
+#: option.c:2274
 #, fuzzy
 msgid "bad port range"
 msgstr "port salah"
 
-#: option.c:2239
+#: option.c:2290
 msgid "bad bridge-interface"
 msgstr ""
 
-#: option.c:2297
+#: option.c:2350
 msgid "only one tag allowed"
 msgstr ""
 
 # OK
-#: option.c:2317 option.c:2329 option.c:2461
+#: option.c:2370 option.c:2382 option.c:2491 option.c:2532
 msgid "bad dhcp-range"
 msgstr "dhcp-range salah"
 
 # OK
-#: option.c:2344
+#: option.c:2397
 msgid "inconsistent DHCP range"
 msgstr "jangkauan DHCP tidak konsisten"
 
-#: option.c:2402
-msgid "prefix must be exactly 64 for RA subnets"
+#: option.c:2459
+msgid "prefix length must be exactly 64 for RA subnets"
 msgstr ""
 
-#: option.c:2404
-msgid "prefix must be exactly 64 for subnet constructors"
+#: option.c:2461
+msgid "prefix length must be exactly 64 for subnet constructors"
 msgstr ""
 
-#: option.c:2407
-msgid "prefix must be at least 64"
+#: option.c:2465
+msgid "prefix length must be at least 64"
 msgstr ""
 
 # OK
-#: option.c:2412
+#: option.c:2468
 #, fuzzy
 msgid "inconsistent DHCPv6 range"
 msgstr "jangkauan DHCP tidak konsisten"
 
+#: option.c:2479
+msgid "prefix must be zero with \"constructor:\" argument"
+msgstr ""
+
 # OK
-#: option.c:2519 option.c:2567
+#: option.c:2590 option.c:2638
 #, fuzzy
 msgid "bad hex constant"
 msgstr "dhcp-host salah"
 
-#: option.c:2541
+#: option.c:2612
 msgid "cannot match tags in --dhcp-host"
 msgstr ""
 
 # OK
-#: option.c:2589
+#: option.c:2660
 #, fuzzy, c-format
 msgid "duplicate dhcp-host IP address %s"
 msgstr "alamat IP kembar %s dalam direktif dhcp-config"
 
 # OK
-#: option.c:2645
+#: option.c:2716
 #, fuzzy
 msgid "bad DHCP host name"
 msgstr "nama MX salah"
 
 # OK
-#: option.c:2727
+#: option.c:2798
 #, fuzzy
 msgid "bad tag-if"
 msgstr "target MX salah"
 
 # OK
-#: option.c:3051 option.c:3379
+#: option.c:3122 option.c:3479
 msgid "invalid port number"
 msgstr "nomor port tidak benar"
 
 # OK
-#: option.c:3113
+#: option.c:3184
 #, fuzzy
 msgid "bad dhcp-proxy address"
 msgstr "membaca %s - %d alamat"
 
-#: option.c:3124
+# OK
+#: option.c:3210
+#, fuzzy
+msgid "Bad dhcp-relay"
+msgstr "dhcp-range salah"
+
+#: option.c:3220
 msgid "bad DUID"
 msgstr ""
 
 # OK
-#: option.c:3166
+#: option.c:3262
 #, fuzzy
 msgid "invalid alias range"
 msgstr "weight tidak benar"
 
-#: option.c:3205
+#: option.c:3305
 msgid "bad CNAME"
 msgstr ""
 
-#: option.c:3210
+#: option.c:3310
 msgid "duplicate CNAME"
 msgstr ""
 
 # OK
-#: option.c:3230
+#: option.c:3330
 #, fuzzy
 msgid "bad PTR record"
 msgstr "rekord SRV salah"
 
 # OK
-#: option.c:3261
+#: option.c:3361
 #, fuzzy
 msgid "bad NAPTR record"
 msgstr "rekord SRV salah"
 
 # OK
-#: option.c:3295
+#: option.c:3395
 #, fuzzy
 msgid "bad RR record"
 msgstr "rekord SRV salah"
 
 # OK
-#: option.c:3324
+#: option.c:3424
 msgid "bad TXT record"
 msgstr "rekord TXT salah"
 
 # OK
-#: option.c:3365
+#: option.c:3465
 msgid "bad SRV record"
 msgstr "rekord SRV salah"
 
 # OK
-#: option.c:3372
+#: option.c:3472
 msgid "bad SRV target"
 msgstr "target SRV salah"
 
 # OK
-#: option.c:3386
+#: option.c:3486
 msgid "invalid priority"
 msgstr "prioritas tidak benar"
 
 # OK
-#: option.c:3393
+#: option.c:3493
 msgid "invalid weight"
 msgstr "weight tidak benar"
 
 # OK
-#: option.c:3417
+#: option.c:3517
 #, fuzzy
 msgid "Bad host-record"
 msgstr "rekord SRV salah"
 
 # OK
-#: option.c:3434
+#: option.c:3534
 #, fuzzy
 msgid "Bad name in host-record"
 msgstr "kesalahan nama di %s"
 
-#: option.c:3464
+#: option.c:3564
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr ""
 
 # OK
-#: option.c:3522
+#: option.c:3622
 msgid "missing \""
 msgstr "kurang \""
 
 # OK
-#: option.c:3579
+#: option.c:3679
 msgid "bad option"
 msgstr "pilihan salah"
 
 # OK
-#: option.c:3581
+#: option.c:3681
 msgid "extraneous parameter"
 msgstr "parameter berlebihan"
 
 # OK
-#: option.c:3583
+#: option.c:3683
 msgid "missing parameter"
 msgstr "parameter kurang"
 
 # OK
-#: option.c:3590
+#: option.c:3690
 msgid "error"
 msgstr "kesalahan"
 
 # OK
-#: option.c:3592
+#: option.c:3692
 #, fuzzy, c-format
 msgid " at line %d of %s"
 msgstr "%s pada baris %d dari %%s"
 
 # OK
-#: option.c:3656 tftp.c:648
+#: option.c:3756 tftp.c:661
 #, c-format
 msgid "cannot read %s: %s"
 msgstr "tidak bisa membaca %s: %s"
 
 # OK
-#: option.c:3823 option.c:3859
+#: option.c:3923 option.c:3959
 #, fuzzy, c-format
 msgid "read %s"
 msgstr "membaca %s"
 
-#: option.c:3915
+#: option.c:4015
 msgid "junk found in command line"
 msgstr ""
 
 # OK
-#: option.c:3950
+#: option.c:4050
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr "Dnsmasq versi %s  %s\n"
 
 # OK
-#: option.c:3951
+#: option.c:4051
 #, fuzzy, c-format
 msgid ""
 "Compile time options: %s\n"
@@ -1082,70 +1104,70 @@
 "\n"
 
 # OK
-#: option.c:3952
+#: option.c:4052
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr "Perangkat lunak ini tersedia TANPA JAMINAN SEDIKITPUN.\n"
 
 # OK
-#: option.c:3953
+#: option.c:4053
 #, c-format
 msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
 msgstr "Dnsdmasq adalah perangkat lunak bebas, dan Anda dipersilahkan untuk membagikannya\n"
 
 # OK
-#: option.c:3954
+#: option.c:4054
 #, fuzzy, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr "dengan aturan GNU General Public License, versi 2.\n"
 
-#: option.c:3965
+#: option.c:4065
 msgid "try --help"
 msgstr ""
 
-#: option.c:3967
+#: option.c:4067
 msgid "try -w"
 msgstr ""
 
 # OK
-#: option.c:3969
+#: option.c:4069
 #, fuzzy, c-format
 msgid "bad command line options: %s"
 msgstr "pilihan baris perintah salah: %s."
 
 # OK
-#: option.c:4018
+#: option.c:4118
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "tidak bisa mendapatkan host-name: %s"
 
 # OK
-#: option.c:4046
+#: option.c:4146
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr "hanya satu file resolv.conf yang diperbolehkan dalam modus no-poll."
 
 # OK
-#: option.c:4056
+#: option.c:4156
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr "harus mempunyai tepat satu resolv.conf untuk mendapatkan nama domain."
 
 # OK
-#: option.c:4059 network.c:1039 dhcp.c:794
+#: option.c:4159 network.c:1178 dhcp.c:768
 #, fuzzy, c-format
 msgid "failed to read %s: %s"
 msgstr "gagal membaca %s: %s"
 
 # OK
-#: option.c:4076
+#: option.c:4176
 #, c-format
 msgid "no search directive found in %s"
 msgstr "tidak ditemukan direktif search di %s"
 
-#: option.c:4097
+#: option.c:4197
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr ""
 
-#: option.c:4101
+#: option.c:4201
 msgid "syntax check OK"
 msgstr ""
 
@@ -1167,117 +1189,123 @@
 msgstr ""
 
 # OK
-#: network.c:414
+#: forward.c:1216
+#, fuzzy, c-format
+msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
+
+# OK
+#: network.c:551
 #, fuzzy, c-format
 msgid "failed to create listening socket for %s: %s"
 msgstr "gagal membuat socket: %s "
 
 # OK
-#: network.c:743
+#: network.c:882
 #, fuzzy, c-format
 msgid "interface %s failed to join DHCPv6 multicast group: %s"
 msgstr "gagal mem-bind socket server DHCP: %s"
 
-#: network.c:937
+#: network.c:1076
 #, fuzzy, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr "gagal mem-bind socket untuk mendengarkan %s: %s"
 
 # OK
-#: network.c:974
+#: network.c:1113
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr "mengabaikan nameserver %s - antarmuka lokal"
 
 # OK
-#: network.c:985
+#: network.c:1124
 #, fuzzy, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr "mengabaikan nameserver %s - tak dapat membuat/mem-bind socket: %s"
 
 # OK
-#: network.c:1002
+#: network.c:1141
 msgid "unqualified"
 msgstr "tidak memenuhi syarat"
 
-#: network.c:1002
+#: network.c:1141
 msgid "names"
 msgstr ""
 
-#: network.c:1004
+#: network.c:1143
 msgid "default"
 msgstr ""
 
 # OK
-#: network.c:1006
+#: network.c:1145
 msgid "domain"
 msgstr "domain"
 
 # OK
-#: network.c:1009
+#: network.c:1148
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr "menggunakan alamat lokal saja untuk %s %s"
 
 # OK
-#: network.c:1011
+#: network.c:1150
 #, fuzzy, c-format
 msgid "using standard nameservers for %s %s"
 msgstr "menggunakan nameserver %s#%d untuk %s %s"
 
 # OK
-#: network.c:1013
+#: network.c:1152
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr "menggunakan nameserver %s#%d untuk %s %s"
 
 # OK
-#: network.c:1016
+#: network.c:1155
 #, fuzzy, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr "menggunakan nameserver %s#%d"
 
 # OK
-#: network.c:1018
+#: network.c:1157
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr "menggunakan nameserver %s#%d"
 
 # OK
-#: dnsmasq.c:131
+#: dnsmasq.c:134
 #, fuzzy
 msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
 msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h"
 
-#: dnsmasq.c:136
+#: dnsmasq.c:139
 msgid "Cannot use --conntrack AND --query-port"
 msgstr ""
 
 # OK
-#: dnsmasq.c:139
+#: dnsmasq.c:142
 #, fuzzy
 msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
 msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h"
 
-#: dnsmasq.c:144
+#: dnsmasq.c:147
 msgid "asychronous logging is not available under Solaris"
 msgstr ""
 
-#: dnsmasq.c:149
+#: dnsmasq.c:152
 msgid "asychronous logging is not available under Android"
 msgstr ""
 
 # OK
-#: dnsmasq.c:154
+#: dnsmasq.c:157
 #, fuzzy
 msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
 msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h"
 
-#: dnsmasq.c:164
+#: dnsmasq.c:167
 msgid "zone serial must be configured in --auth-soa"
 msgstr ""
 
-#: dnsmasq.c:186
+#: dnsmasq.c:185
 msgid "dhcp-range constructor not available on this platform"
 msgstr ""
 
@@ -1298,267 +1326,272 @@
 msgstr "antarmuka tidak dikenal %s"
 
 # OK
-#: dnsmasq.c:274 dnsmasq.c:860
+#: dnsmasq.c:275 dnsmasq.c:870
 #, c-format
 msgid "DBus error: %s"
 msgstr "DBus error: %s"
 
 # OK
-#: dnsmasq.c:277
+#: dnsmasq.c:278
 msgid "DBus not available: set HAVE_DBUS in src/config.h"
 msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h"
 
-#: dnsmasq.c:305
+#: dnsmasq.c:306
 #, c-format
 msgid "unknown user or group: %s"
 msgstr ""
 
-#: dnsmasq.c:360
+#: dnsmasq.c:361
 #, c-format
 msgid "cannot chdir to filesystem root: %s"
 msgstr ""
 
 # OK
-#: dnsmasq.c:597
+#: dnsmasq.c:598
 #, fuzzy, c-format
 msgid "started, version %s DNS disabled"
 msgstr "dimulai, cache versi %s di disable"
 
 # OK
-#: dnsmasq.c:599
+#: dnsmasq.c:600
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr "dimulai, versi %s ukuran cache %d"
 
 # OK
-#: dnsmasq.c:601
+#: dnsmasq.c:602
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr "dimulai, cache versi %s di disable"
 
 # OK
-#: dnsmasq.c:603
+#: dnsmasq.c:604
 #, c-format
 msgid "compile time options: %s"
 msgstr "pilihan-pilihan saat kompilasi: %s"
 
 # OK
-#: dnsmasq.c:609
+#: dnsmasq.c:610
 msgid "DBus support enabled: connected to system bus"
 msgstr "dukungan DBus dimungkinkan: terkoneksi pada bus sistem"
 
 # OK
-#: dnsmasq.c:611
+#: dnsmasq.c:612
 msgid "DBus support enabled: bus connection pending"
 msgstr "dukungan DBus dimungkinkan: koneksi bus ditunda"
 
 # OK
-#: dnsmasq.c:616
+#: dnsmasq.c:617
 #, fuzzy, c-format
 msgid "warning: failed to change owner of %s: %s"
 msgstr "gagal memuat nama-nama dari %s: %s"
 
 # OK
-#: dnsmasq.c:620
+#: dnsmasq.c:621
 msgid "setting --bind-interfaces option because of OS limitations"
 msgstr "setelan opsi --bind-interfaces disebabkan keterbatasan OS"
 
 # OK
-#: dnsmasq.c:625
+#: dnsmasq.c:626
 #, c-format
 msgid "warning: interface %s does not currently exist"
 msgstr "peringatan: antarmuka %s tidak ada"
 
-#: dnsmasq.c:630
+#: dnsmasq.c:631
 msgid "warning: ignoring resolv-file flag because no-resolv is set"
 msgstr ""
 
 # OK
-#: dnsmasq.c:633
+#: dnsmasq.c:634
 #, fuzzy
 msgid "warning: no upstream servers configured"
 msgstr "menyetel server-server di atas dengan DBus"
 
-#: dnsmasq.c:637
+#: dnsmasq.c:638
 #, c-format
 msgid "asynchronous logging enabled, queue limit is %d messages"
 msgstr ""
 
-#: dnsmasq.c:652
+#: dnsmasq.c:659
 msgid "IPv6 router advertisement enabled"
 msgstr ""
 
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 msgid "root is "
 msgstr ""
 
 # OK
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 #, fuzzy
 msgid "enabled"
 msgstr "di disable"
 
-#: dnsmasq.c:671
+#: dnsmasq.c:678
 msgid "secure mode"
 msgstr ""
 
-#: dnsmasq.c:697
+#: dnsmasq.c:704
 #, c-format
 msgid "restricting maximum simultaneous TFTP transfers to %d"
 msgstr ""
 
 # OK
-#: dnsmasq.c:862
+#: dnsmasq.c:872
 msgid "connected to system DBus"
 msgstr "terhubung ke sistem DBus"
 
-#: dnsmasq.c:1007
+#: dnsmasq.c:1017
 #, c-format
 msgid "cannot fork into background: %s"
 msgstr ""
 
 # OK
-#: dnsmasq.c:1010
+#: dnsmasq.c:1020
 #, fuzzy, c-format
 msgid "failed to create helper: %s"
 msgstr "gagal membaca %s: %s"
 
-#: dnsmasq.c:1013
+#: dnsmasq.c:1023
 #, c-format
 msgid "setting capabilities failed: %s"
 msgstr ""
 
 # OK
-#: dnsmasq.c:1016
+#: dnsmasq.c:1026
 #, fuzzy, c-format
 msgid "failed to change user-id to %s: %s"
 msgstr "gagal memuat nama-nama dari %s: %s"
 
 # OK
-#: dnsmasq.c:1019
+#: dnsmasq.c:1029
 #, fuzzy, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr "gagal memuat nama-nama dari %s: %s"
 
 # OK
-#: dnsmasq.c:1022
+#: dnsmasq.c:1032
 #, fuzzy, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr "gagal membaca %s: %s"
 
 # OK
-#: dnsmasq.c:1025
+#: dnsmasq.c:1035
 #, fuzzy, c-format
 msgid "cannot open log %s: %s"
 msgstr "tidak bisa membuka %s:%s"
 
 # OK
-#: dnsmasq.c:1028
+#: dnsmasq.c:1038
 #, fuzzy, c-format
 msgid "failed to load Lua script: %s"
 msgstr "gagal memuat %S: %s"
 
-#: dnsmasq.c:1031
+#: dnsmasq.c:1041
 #, c-format
 msgid "TFTP directory %s inaccessible: %s"
 msgstr ""
 
-#: dnsmasq.c:1095
+#: dnsmasq.c:1105
 #, c-format
 msgid "script process killed by signal %d"
 msgstr ""
 
-#: dnsmasq.c:1099
+#: dnsmasq.c:1109
 #, c-format
 msgid "script process exited with status %d"
 msgstr ""
 
 # OK
-#: dnsmasq.c:1103
+#: dnsmasq.c:1113
 #, fuzzy, c-format
 msgid "failed to execute %s: %s"
 msgstr "gagal mengakses %s: %s"
 
-#: dnsmasq.c:1148
+#: dnsmasq.c:1158
 msgid "exiting on receipt of SIGTERM"
 msgstr "keluar karena menerima SIGTERM"
 
 # OK
-#: dnsmasq.c:1176
+#: dnsmasq.c:1186
 #, fuzzy, c-format
 msgid "failed to access %s: %s"
 msgstr "gagal mengakses %s: %s"
 
 # OK
-#: dnsmasq.c:1206
+#: dnsmasq.c:1216
 #, c-format
 msgid "reading %s"
 msgstr "membaca %s"
 
 # OK
-#: dnsmasq.c:1217
+#: dnsmasq.c:1227
 #, fuzzy, c-format
 msgid "no servers found in %s, will retry"
 msgstr "tidak ditemukan direktif search di %s"
 
 # OK
-#: dhcp.c:49
+#: dhcp.c:53
 #, c-format
 msgid "cannot create DHCP socket: %s"
 msgstr "tidak bisa membuat socket DHCP: %s"
 
 # OK
-#: dhcp.c:64
+#: dhcp.c:68
 #, c-format
 msgid "failed to set options on DHCP socket: %s"
 msgstr "gagal menyetel opsi pada socket DHCP: %s"
 
 # OK
-#: dhcp.c:77
+#: dhcp.c:89
 #, fuzzy, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
 msgstr "gagal menyetel SO_REUSEADDR pada socket DHCP: %s"
 
 # OK
-#: dhcp.c:89
+#: dhcp.c:101
 #, c-format
 msgid "failed to bind DHCP server socket: %s"
 msgstr "gagal mem-bind socket server DHCP: %s"
 
 # OK
-#: dhcp.c:115
+#: dhcp.c:127
 #, c-format
 msgid "cannot create ICMP raw socket: %s."
 msgstr "tidak dapat membuat socket ICMP raw: %s"
 
 # OK
-#: dhcp.c:225
+#: dhcp.c:239
 #, fuzzy, c-format
 msgid "unknown interface %s in bridge-interface"
 msgstr "antarmuka tidak dikenal %s"
 
-#: dhcp.c:250
+#: dhcp.c:278
 #, c-format
 msgid "DHCP packet received on %s which has no address"
 msgstr ""
 
 # OK
-#: dhcp.c:457
+#: dhcp.c:505
 #, c-format
 msgid "DHCP range %s -- %s is not consistent with netmask %s"
 msgstr "jangkauan DHCP %s -- %s tidak konsisten dengan netmask %s"
 
 # OK
-#: dhcp.c:832
+#: dhcp.c:806
 #, fuzzy, c-format
 msgid "bad line at %s line %d"
 msgstr "kesalahan nama pada %s baris %d"
 
-#: dhcp.c:875
+#: dhcp.c:849
 #, c-format
 msgid "ignoring %s line %d, duplicate name or IP address"
 msgstr ""
 
+#: dhcp.c:993 rfc3315.c:2047
+#, c-format
+msgid "DHCP relay %s -> %s"
+msgstr ""
+
 # OK
 #: lease.c:61
 #, fuzzy, c-format
@@ -1566,218 +1599,218 @@
 msgstr "tidak dapat membuka atau membuat file lease: %s"
 
 # OK
-#: lease.c:133
+#: lease.c:134
 msgid "too many stored leases"
 msgstr "terlalu banyak lease yang disimpan"
 
 # OK
-#: lease.c:164
+#: lease.c:165
 #, fuzzy, c-format
 msgid "cannot run lease-init script %s: %s"
 msgstr "tidak bisa membaca %s: %s"
 
-#: lease.c:170
+#: lease.c:171
 #, c-format
 msgid "lease-init script returned exit code %s"
 msgstr ""
 
 # OK
-#: lease.c:339
+#: lease.c:342
 #, fuzzy, c-format
 msgid "failed to write %s: %s (retry in %us)"
 msgstr "gagal membaca %s: %s"
 
-#: lease.c:843
+#: lease.c:871
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr ""
 
 # OK
-#: rfc2131.c:337
+#: rfc2131.c:338
 #, c-format
 msgid "no address range available for DHCP request %s %s"
 msgstr "tidak ada alamat yang bisa dipakai untuk permintaan DHCP %s %s"
 
 # OK
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "with subnet selector"
 msgstr "dengan pemilih subnet"
 
 # OK
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "via"
 msgstr "lewat"
 
 # OK
-#: rfc2131.c:350
+#: rfc2131.c:351
 #, fuzzy, c-format
 msgid "%u available DHCP subnet: %s/%s"
 msgstr "tidak ada alamat yang bisa dipakai untuk permintaan DHCP %s %s"
 
-#: rfc2131.c:353 rfc3315.c:272
+#: rfc2131.c:354 rfc3315.c:292
 #, c-format
 msgid "%u available DHCP range: %s -- %s"
 msgstr ""
 
 # OK
-#: rfc2131.c:382
-msgid "disabled"
-msgstr "di disable"
-
-# OK
-#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771
-#: rfc3315.c:1017
-msgid "ignored"
-msgstr "diabaikan"
-
-# OK
-#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814
-msgid "address in use"
-msgstr "alamat telah digunakan"
-
-# OK
-#: rfc2131.c:452 rfc2131.c:1007
-msgid "no address available"
-msgstr "tak ada alamat yang tersedia"
-
-# OK
-#: rfc2131.c:459 rfc2131.c:1154
-msgid "wrong network"
-msgstr "jaringan yang salah"
-
-# OK
-#: rfc2131.c:474
-msgid "no address configured"
-msgstr "tak ada alamat yang disetel"
-
-# OK
-#: rfc2131.c:480 rfc2131.c:1204
-msgid "no leases left"
-msgstr "tak ada lease yang tersisa"
-
-#: rfc2131.c:576 rfc3315.c:428
-#, c-format
-msgid "%u client provides name: %s"
-msgstr ""
-
-# OK
-#: rfc2131.c:731
+#: rfc2131.c:465
 #, fuzzy, c-format
 msgid "%u vendor class: %s"
 msgstr "DBus error: %s"
 
 # OK
-#: rfc2131.c:733
+#: rfc2131.c:467
 #, fuzzy, c-format
 msgid "%u user class: %s"
 msgstr "DBus error: %s"
 
+# OK
+#: rfc2131.c:494
+msgid "disabled"
+msgstr "di disable"
+
+# OK
+#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813
+#: rfc3315.c:1082
+msgid "ignored"
+msgstr "diabaikan"
+
+# OK
+#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863
+msgid "address in use"
+msgstr "alamat telah digunakan"
+
+# OK
+#: rfc2131.c:564 rfc2131.c:1015
+msgid "no address available"
+msgstr "tak ada alamat yang tersedia"
+
+# OK
+#: rfc2131.c:571 rfc2131.c:1162
+msgid "wrong network"
+msgstr "jaringan yang salah"
+
+# OK
+#: rfc2131.c:586
+msgid "no address configured"
+msgstr "tak ada alamat yang disetel"
+
+# OK
+#: rfc2131.c:592 rfc2131.c:1212
+msgid "no leases left"
+msgstr "tak ada lease yang tersisa"
+
+#: rfc2131.c:687 rfc3315.c:466
+#, c-format
+msgid "%u client provides name: %s"
+msgstr ""
+
 #: rfc2131.c:792
 msgid "PXE BIS not supported"
 msgstr ""
 
 # OK
-#: rfc2131.c:923 rfc3315.c:1111
+#: rfc2131.c:931 rfc3315.c:1176
 #, fuzzy, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "men-disable alamat statik DHCP %s"
 
 # OK
-#: rfc2131.c:944
+#: rfc2131.c:952
 msgid "unknown lease"
 msgstr "lease tidak diketahui"
 
-#: rfc2131.c:976
+#: rfc2131.c:984
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr ""
 
-#: rfc2131.c:986
+#: rfc2131.c:994
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr ""
 
-#: rfc2131.c:989
+#: rfc2131.c:997
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr ""
 
-#: rfc2131.c:1005 rfc2131.c:1197
+#: rfc2131.c:1013 rfc2131.c:1205
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:1092
+#: rfc2131.c:1100
 msgid "wrong server-ID"
 msgstr ""
 
 # OK
-#: rfc2131.c:1111
+#: rfc2131.c:1119
 msgid "wrong address"
 msgstr "alamat salah"
 
 # OK
-#: rfc2131.c:1129 rfc3315.c:911
+#: rfc2131.c:1137 rfc3315.c:959
 msgid "lease not found"
 msgstr "lease tak ditemukan"
 
 # OK
-#: rfc2131.c:1162
+#: rfc2131.c:1170
 msgid "address not available"
 msgstr "alamat tak tersedia"
 
 # OK
-#: rfc2131.c:1173
+#: rfc2131.c:1181
 msgid "static lease available"
 msgstr "lease statik tak tersedia"
 
 # OK
-#: rfc2131.c:1177
+#: rfc2131.c:1185
 msgid "address reserved"
 msgstr "alamat telah dipesan"
 
-#: rfc2131.c:1185
+#: rfc2131.c:1193
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr ""
 
-#: rfc2131.c:1679
+#: rfc2131.c:1701
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr ""
 
 # OK
-#: rfc2131.c:1688
+#: rfc2131.c:1710
 #, fuzzy, c-format
 msgid "%u server name: %s"
 msgstr "DBus error: %s"
 
 # OK
-#: rfc2131.c:1696
+#: rfc2131.c:1718
 #, fuzzy, c-format
 msgid "%u next server: %s"
 msgstr "DBus error: %s"
 
-#: rfc2131.c:1699
+#: rfc2131.c:1721
 #, c-format
 msgid "%u broadcast response"
 msgstr ""
 
-#: rfc2131.c:1762
+#: rfc2131.c:1784
 #, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr ""
 
-#: rfc2131.c:2002
+#: rfc2131.c:2025
 msgid "PXE menu too large"
 msgstr ""
 
 # OK
-#: rfc2131.c:2139 rfc3315.c:1332
+#: rfc2131.c:2162 rfc3315.c:1420
 #, fuzzy, c-format
 msgid "%u requested options: %s"
 msgstr "pilihan-pilihan saat kompilasi: %s"
 
-#: rfc2131.c:2415
+#: rfc2131.c:2442
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr ""
@@ -1789,7 +1822,7 @@
 msgstr "tidak bisa mem-bind netlink socket: %s"
 
 # OK
-#: netlink.c:354
+#: netlink.c:363
 #, fuzzy, c-format
 msgid "netlink returns error: %s"
 msgstr "DBus error: %s"
@@ -1800,58 +1833,58 @@
 msgstr "mencoba menyetel sebuah alamat IPv6 server lewat DBus - tidak ada dukungan untuk IPv6"
 
 # OK
-#: dbus.c:308 dbus.c:504
+#: dbus.c:523
 msgid "setting upstream servers from DBus"
 msgstr "menyetel server-server di atas dengan DBus"
 
 # OK
-#: dbus.c:561
+#: dbus.c:570
 msgid "could not register a DBus message handler"
 msgstr "tidak bisa mendaftar sebuah DBus message handler"
 
 # OK
-#: bpf.c:197
+#: bpf.c:245
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr "tidak dapat membuat socket DHCP BPF: %s"
 
 # OK
-#: bpf.c:225
+#: bpf.c:273
 #, fuzzy, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr "permintaan DHCP untuk tipe hardware yang tidak didukung (%d) diterima pada %s"
 
-#: helper.c:145
+#: helper.c:151
 msgid "lease() function missing in Lua script"
 msgstr ""
 
-#: tftp.c:290
+#: tftp.c:303
 msgid "unable to get free port for TFTP"
 msgstr ""
 
-#: tftp.c:306
+#: tftp.c:319
 #, c-format
 msgid "unsupported request from %s"
 msgstr ""
 
 # OK
-#: tftp.c:420
+#: tftp.c:433
 #, fuzzy, c-format
 msgid "file %s not found"
 msgstr "lease tak ditemukan"
 
-#: tftp.c:529
+#: tftp.c:542
 #, c-format
 msgid "error %d %s received from %s"
 msgstr ""
 
 # OK
-#: tftp.c:571
+#: tftp.c:584
 #, fuzzy, c-format
 msgid "failed sending %s to %s"
 msgstr "gagal membaca %s: %s"
 
-#: tftp.c:571
+#: tftp.c:584
 #, c-format
 msgid "sent %s to %s"
 msgstr ""
@@ -1877,208 +1910,224 @@
 msgstr ""
 
 # OK
-#: dhcp6.c:49
+#: dhcp6.c:59
 #, fuzzy, c-format
 msgid "cannot create DHCPv6 socket: %s"
 msgstr "tidak bisa membuat socket DHCP: %s"
 
 # OK
-#: dhcp6.c:62
+#: dhcp6.c:80
 #, fuzzy, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s"
 msgstr "gagal menyetel SO_REUSEADDR pada socket DHCP: %s"
 
 # OK
-#: dhcp6.c:74
+#: dhcp6.c:92
 #, fuzzy, c-format
 msgid "failed to bind DHCPv6 server socket: %s"
 msgstr "gagal mem-bind socket server DHCP: %s"
 
 # OK
-#: rfc3315.c:135
+#: rfc3315.c:149
 #, fuzzy, c-format
 msgid "no address range available for DHCPv6 request from relay at %s"
 msgstr "tidak ada alamat yang bisa dipakai untuk permintaan DHCP %s %s"
 
 # OK
-#: rfc3315.c:144
+#: rfc3315.c:158
 #, fuzzy, c-format
 msgid "no address range available for DHCPv6 request via %s"
 msgstr "tidak ada alamat yang bisa dipakai untuk permintaan DHCP %s %s"
 
 # OK
-#: rfc3315.c:269
+#: rfc3315.c:289
 #, fuzzy, c-format
 msgid "%u available DHCPv6 subnet: %s/%d"
 msgstr "tidak ada alamat yang bisa dipakai untuk permintaan DHCP %s %s"
 
 # OK
-#: rfc3315.c:350
+#: rfc3315.c:370
 #, fuzzy, c-format
 msgid "%u vendor class: %u"
 msgstr "DBus error: %s"
 
 # OK
-#: rfc3315.c:609
+#: rfc3315.c:418
+#, fuzzy, c-format
+msgid "%u client MAC address: %s"
+msgstr "tidak ada antarmuka dengan alamat %s"
+
+# OK
+#: rfc3315.c:650
 #, fuzzy, c-format
 msgid "unknown prefix-class %d"
 msgstr "lease tidak diketahui"
 
-#: rfc3315.c:741 rfc3315.c:854
+#: rfc3315.c:781 rfc3315.c:903
 msgid "success"
 msgstr ""
 
 # OK
-#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864
+#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913
 #, fuzzy
 msgid "no addresses available"
 msgstr "tak ada alamat yang tersedia"
 
 # OK
-#: rfc3315.c:806
+#: rfc3315.c:855
 #, fuzzy
 msgid "address unavailable"
 msgstr "alamat tak tersedia"
 
-#: rfc3315.c:841
+#: rfc3315.c:890
 msgid "not on link"
 msgstr ""
 
-#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150
+#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215
 msgid "no binding found"
 msgstr ""
 
-#: rfc3315.c:948
+#: rfc3315.c:1001
 msgid "deprecated"
 msgstr ""
 
 # OK
-#: rfc3315.c:951
+#: rfc3315.c:1006
 #, fuzzy
 msgid "address invalid"
 msgstr "alamat telah digunakan"
 
-#: rfc3315.c:992
+#: rfc3315.c:1048
 msgid "confirm failed"
 msgstr ""
 
 # OK
-#: rfc3315.c:1003
+#: rfc3315.c:1059
 #, fuzzy
 msgid "all addresses still on link"
 msgstr "kesalahan nama pada %s baris %d"
 
-#: rfc3315.c:1082
+#: rfc3315.c:1147
 msgid "release received"
 msgstr ""
 
+#: rfc3315.c:2038
+msgid "Cannot multicast to DHCPv6 server without correct interface"
+msgstr ""
+
 #: dhcp-common.c:145
 #, c-format
 msgid "Ignoring duplicate dhcp-option %d"
 msgstr ""
 
-#: dhcp-common.c:215
+#: dhcp-common.c:222
 #, c-format
 msgid "%u tags: %s"
 msgstr ""
 
-#: dhcp-common.c:296
+#: dhcp-common.c:407
 #, c-format
 msgid "%s has more than one address in hostsfile, using %s for DHCP"
 msgstr ""
 
 # OK
-#: dhcp-common.c:319
+#: dhcp-common.c:430
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr "alamat IP kembar %s (%s) dalam direktif dhcp-config"
 
 # OK
-#: dhcp-common.c:367
+#: dhcp-common.c:484
 #, fuzzy, c-format
 msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s"
 msgstr "gagal menyetel SO_REUSEADDR pada socket DHCP: %s"
 
-#: dhcp-common.c:489
+#: dhcp-common.c:606
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr ""
 
-#: dhcp-common.c:500
+#: dhcp-common.c:617
 #, c-format
 msgid "Known DHCPv6 options:\n"
 msgstr ""
 
-#: dhcp-common.c:693
+#: dhcp-common.c:814
 msgid ", prefix deprecated"
 msgstr ""
 
-#: dhcp-common.c:696
+#: dhcp-common.c:817
 #, c-format
 msgid ", lease time "
 msgstr ""
 
-#: dhcp-common.c:727
+#: dhcp-common.c:849
 #, c-format
 msgid "%s stateless on %s%.0s%.0s%s"
 msgstr ""
 
 # OK
-#: dhcp-common.c:729
+#: dhcp-common.c:851
 #, fuzzy, c-format
 msgid "%s, static leases only on %.0s%s%s%.0s"
 msgstr "DHCP, lease static pada %.0s%s, waktu lease %s"
 
-#: dhcp-common.c:731
+#: dhcp-common.c:853
 #, c-format
 msgid "%s, proxy on subnet %.0s%s%.0s%.0s"
 msgstr ""
 
 # OK
-#: dhcp-common.c:732
+#: dhcp-common.c:854
 #, fuzzy, c-format
 msgid "%s, IP range %s -- %s%s%.0s"
 msgstr "DHCP, jangkaun IP %s -- %s, waktu lease %s"
 
-#: dhcp-common.c:739
+#: dhcp-common.c:861
 #, c-format
 msgid "DHCPv4-derived IPv6 names on %s%s"
 msgstr ""
 
 # OK
-#: dhcp-common.c:742
+#: dhcp-common.c:864
 #, fuzzy, c-format
 msgid "router advertisement on %s%s"
 msgstr "DHCP, lease static pada %.0s%s, waktu lease %s"
 
+#: dhcp-common.c:875
+#, c-format
+msgid "DHCP relay from %s to %s via %s"
+msgstr ""
+
+#: dhcp-common.c:877
+#, c-format
+msgid "DHCP relay from %s to %s"
+msgstr ""
+
 # OK
-#: radv.c:87
+#: radv.c:93
 #, fuzzy, c-format
 msgid "cannot create ICMPv6 socket: %s"
 msgstr "tidak bisa membuat socket DHCP: %s"
 
-#: auth.c:402
+#: auth.c:435
 #, c-format
 msgid "ignoring zone transfer request from %s"
 msgstr ""
 
 # OK
-#: ipset.c:71
+#: ipset.c:95
 #, fuzzy, c-format
 msgid "failed to find kernel version: %s"
 msgstr "gagal mem-bind socket server DHCP: %s"
 
 # OK
-#: ipset.c:90
+#: ipset.c:114
 #, fuzzy, c-format
 msgid "failed to create IPset control socket: %s"
 msgstr "gagal membuat socket: %s "
 
 # OK
-#~ msgid "no interface with address %s"
-#~ msgstr "tidak ada antarmuka dengan alamat %s"
-
-# OK
 #~ msgid "duplicate IP address %s in dhcp-config directive."
 #~ msgstr "alamat IP kembar %s dalam direktif dhcp-config"
 
diff --git a/po/it.po b/po/it.po
index 9d414f8..1df5052 100644
--- a/po/it.po
+++ b/po/it.po
@@ -21,17 +21,17 @@
 msgid "failed to load names from %s: %s"
 msgstr ""
 
-#: cache.c:834 dhcp.c:845
+#: cache.c:834 dhcp.c:819
 #, c-format
 msgid "bad address at %s line %d"
 msgstr ""
 
-#: cache.c:885 dhcp.c:861
+#: cache.c:885 dhcp.c:835
 #, c-format
 msgid "bad name at %s line %d"
 msgstr ""
 
-#: cache.c:892 dhcp.c:936
+#: cache.c:892 dhcp.c:910
 #, c-format
 msgid "read %s - %d addresses"
 msgstr ""
@@ -40,37 +40,37 @@
 msgid "cleared cache"
 msgstr ""
 
-#: cache.c:1016
+#: cache.c:984
 #, c-format
 msgid "No IPv4 address found for %s"
 msgstr ""
 
-#: cache.c:1093
+#: cache.c:1061
 #, c-format
 msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
 msgstr ""
 
-#: cache.c:1117
+#: cache.c:1085
 #, c-format
 msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
 msgstr ""
 
-#: cache.c:1162
+#: cache.c:1130
 #, c-format
 msgid "time %lu"
 msgstr ""
 
-#: cache.c:1163
+#: cache.c:1131
 #, c-format
 msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
 msgstr ""
 
-#: cache.c:1165
+#: cache.c:1133
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr ""
 
-#: cache.c:1188
+#: cache.c:1156
 #, c-format
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr ""
@@ -80,893 +80,913 @@
 msgid "failed to seed the random number generator: %s"
 msgstr ""
 
-#: util.c:189
+#: util.c:192
 msgid "failed to allocate memory"
 msgstr ""
 
-#: util.c:227 option.c:531
+#: util.c:230 option.c:540
 msgid "could not get memory"
 msgstr ""
 
-#: util.c:237
+#: util.c:240
 #, c-format
 msgid "cannot create pipe: %s"
 msgstr ""
 
-#: util.c:245
+#: util.c:248
 #, c-format
 msgid "failed to allocate %d bytes"
 msgstr ""
 
-#: util.c:400
+#: util.c:403
 #, c-format
 msgid "infinite"
 msgstr ""
 
-#: option.c:286
+#: option.c:292
 msgid "Specify local address(es) to listen on."
 msgstr ""
 
-#: option.c:287
+#: option.c:293
 msgid "Return ipaddr for all hosts in specified domains."
 msgstr ""
 
-#: option.c:288
+#: option.c:294
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr ""
 
-#: option.c:289
+#: option.c:295
 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
 msgstr ""
 
-#: option.c:290
+#: option.c:296
 #, c-format
 msgid "Specify the size of the cache in entries (defaults to %s)."
 msgstr ""
 
-#: option.c:291
+#: option.c:297
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr ""
 
-#: option.c:292
+#: option.c:298
 msgid "Do NOT fork into the background: run in debug mode."
 msgstr ""
 
-#: option.c:293
+#: option.c:299
 msgid "Do NOT forward queries with no domain part."
 msgstr ""
 
-#: option.c:294
+#: option.c:300
 msgid "Return self-pointing MX records for local hosts."
 msgstr ""
 
-#: option.c:295
+#: option.c:301
 msgid "Expand simple names in /etc/hosts with domain-suffix."
 msgstr ""
 
-#: option.c:296
+#: option.c:302
 msgid "Don't forward spurious DNS requests from Windows hosts."
 msgstr ""
 
-#: option.c:297
-msgid "Enable DHCP in the range given with lease duration."
-msgstr ""
-
-#: option.c:298
-#, c-format
-msgid "Change to this group after startup (defaults to %s)."
-msgstr ""
-
-#: option.c:299
-msgid "Set address or hostname for a specified machine."
-msgstr ""
-
-#: option.c:300
-msgid "Read DHCP host specs from file."
-msgstr ""
-
-#: option.c:301
-msgid "Read DHCP option specs from file."
-msgstr ""
-
-#: option.c:302
-msgid "Evaluate conditional tag expression."
-msgstr ""
-
 #: option.c:303
-#, c-format
-msgid "Do NOT load %s file."
+msgid "Enable DHCP in the range given with lease duration."
 msgstr ""
 
 #: option.c:304
 #, c-format
-msgid "Specify a hosts file to be read in addition to %s."
+msgid "Change to this group after startup (defaults to %s)."
 msgstr ""
 
 #: option.c:305
-msgid "Specify interface(s) to listen on."
+msgid "Set address or hostname for a specified machine."
 msgstr ""
 
 #: option.c:306
-msgid "Specify interface(s) NOT to listen on."
+msgid "Read DHCP host specs from file."
 msgstr ""
 
 #: option.c:307
-msgid "Map DHCP user class to tag."
+msgid "Read DHCP option specs from file."
 msgstr ""
 
 #: option.c:308
-msgid "Map RFC3046 circuit-id to tag."
+msgid "Evaluate conditional tag expression."
 msgstr ""
 
 #: option.c:309
-msgid "Map RFC3046 remote-id to tag."
+#, c-format
+msgid "Do NOT load %s file."
 msgstr ""
 
 #: option.c:310
-msgid "Map RFC3993 subscriber-id to tag."
+#, c-format
+msgid "Specify a hosts file to be read in addition to %s."
 msgstr ""
 
 #: option.c:311
-msgid "Don't do DHCP for hosts with tag set."
+msgid "Specify interface(s) to listen on."
 msgstr ""
 
 #: option.c:312
-msgid "Force broadcast replies for hosts with tag set."
+msgid "Specify interface(s) NOT to listen on."
 msgstr ""
 
 #: option.c:313
-msgid "Do NOT fork into the background, do NOT run in debug mode."
+msgid "Map DHCP user class to tag."
 msgstr ""
 
 #: option.c:314
-msgid "Assume we are the only DHCP server on the local network."
+msgid "Map RFC3046 circuit-id to tag."
 msgstr ""
 
 #: option.c:315
-#, c-format
-msgid "Specify where to store DHCP leases (defaults to %s)."
+msgid "Map RFC3046 remote-id to tag."
 msgstr ""
 
 #: option.c:316
-msgid "Return MX records for local hosts."
+msgid "Map RFC3993 subscriber-id to tag."
 msgstr ""
 
 #: option.c:317
-msgid "Specify an MX record."
+msgid "Don't do DHCP for hosts with tag set."
 msgstr ""
 
 #: option.c:318
-msgid "Specify BOOTP options to DHCP server."
+msgid "Force broadcast replies for hosts with tag set."
 msgstr ""
 
 #: option.c:319
-#, c-format
-msgid "Do NOT poll %s file, reload only on SIGHUP."
+msgid "Do NOT fork into the background, do NOT run in debug mode."
 msgstr ""
 
 #: option.c:320
-msgid "Do NOT cache failed search results."
+msgid "Assume we are the only DHCP server on the local network."
 msgstr ""
 
 #: option.c:321
 #, c-format
-msgid "Use nameservers strictly in the order given in %s."
+msgid "Specify where to store DHCP leases (defaults to %s)."
 msgstr ""
 
 #: option.c:322
-msgid "Specify options to be sent to DHCP clients."
+msgid "Return MX records for local hosts."
 msgstr ""
 
 #: option.c:323
-msgid "DHCP option sent even if the client does not request it."
+msgid "Specify an MX record."
 msgstr ""
 
 #: option.c:324
-msgid "Specify port to listen for DNS requests on (defaults to 53)."
+msgid "Specify BOOTP options to DHCP server."
 msgstr ""
 
 #: option.c:325
 #, c-format
-msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
+msgid "Do NOT poll %s file, reload only on SIGHUP."
 msgstr ""
 
 #: option.c:326
-msgid "Log DNS queries."
+msgid "Do NOT cache failed search results."
 msgstr ""
 
 #: option.c:327
-msgid "Force the originating port for upstream DNS queries."
+#, c-format
+msgid "Use nameservers strictly in the order given in %s."
 msgstr ""
 
 #: option.c:328
-msgid "Do NOT read resolv.conf."
+msgid "Specify options to be sent to DHCP clients."
 msgstr ""
 
 #: option.c:329
+msgid "DHCP option sent even if the client does not request it."
+msgstr ""
+
+#: option.c:330
+msgid "Specify port to listen for DNS requests on (defaults to 53)."
+msgstr ""
+
+#: option.c:331
+#, c-format
+msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
+msgstr ""
+
+#: option.c:332
+msgid "Log DNS queries."
+msgstr ""
+
+#: option.c:333
+msgid "Force the originating port for upstream DNS queries."
+msgstr ""
+
+#: option.c:334
+msgid "Do NOT read resolv.conf."
+msgstr ""
+
+#: option.c:335
 #, c-format
 msgid "Specify path to resolv.conf (defaults to %s)."
 msgstr ""
 
-#: option.c:330
+#: option.c:336
 msgid "Specify address(es) of upstream servers with optional domains."
 msgstr ""
 
-#: option.c:331
+#: option.c:337
 msgid "Never forward queries to specified domains."
 msgstr ""
 
-#: option.c:332
+#: option.c:338
 msgid "Specify the domain to be assigned in DHCP leases."
 msgstr ""
 
-#: option.c:333
+#: option.c:339
 msgid "Specify default target in an MX record."
 msgstr ""
 
-#: option.c:334
+#: option.c:340
 msgid "Specify time-to-live in seconds for replies from /etc/hosts."
 msgstr ""
 
-#: option.c:335
+#: option.c:341
 msgid "Specify time-to-live in seconds for negative caching."
 msgstr ""
 
-#: option.c:336
-msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
-msgstr ""
-
-#: option.c:337
-#, c-format
-msgid "Change to this user after startup. (defaults to %s)."
-msgstr ""
-
-#: option.c:338
-msgid "Map DHCP vendor class to tag."
-msgstr ""
-
-#: option.c:339
-msgid "Display dnsmasq version and copyright information."
-msgstr ""
-
-#: option.c:340
-msgid "Translate IPv4 addresses from upstream servers."
-msgstr ""
-
-#: option.c:341
-msgid "Specify a SRV record."
-msgstr ""
-
 #: option.c:342
-msgid "Display this message. Use --help dhcp for known DHCP options."
+msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
 msgstr ""
 
 #: option.c:343
 #, c-format
-msgid "Specify path of PID file (defaults to %s)."
+msgid "Change to this user after startup. (defaults to %s)."
 msgstr ""
 
 #: option.c:344
-#, c-format
-msgid "Specify maximum number of DHCP leases (defaults to %s)."
+msgid "Map DHCP vendor class to tag."
 msgstr ""
 
 #: option.c:345
-msgid "Answer DNS queries based on the interface a query was sent to."
+msgid "Display dnsmasq version and copyright information."
 msgstr ""
 
 #: option.c:346
-msgid "Specify TXT DNS record."
+msgid "Translate IPv4 addresses from upstream servers."
 msgstr ""
 
 #: option.c:347
-msgid "Specify PTR DNS record."
+msgid "Specify a SRV record."
 msgstr ""
 
 #: option.c:348
-msgid "Give DNS name to IPv4 address of interface."
+msgid "Display this message. Use --help dhcp for known DHCP options."
 msgstr ""
 
 #: option.c:349
-msgid "Bind only to interfaces in use."
+#, c-format
+msgid "Specify path of PID file (defaults to %s)."
 msgstr ""
 
 #: option.c:350
 #, c-format
-msgid "Read DHCP static host information from %s."
+msgid "Specify maximum number of DHCP leases (defaults to %s)."
 msgstr ""
 
 #: option.c:351
-msgid "Enable the DBus interface for setting upstream servers, etc."
+msgid "Answer DNS queries based on the interface a query was sent to."
 msgstr ""
 
 #: option.c:352
-msgid "Do not provide DHCP on this interface, only provide DNS."
+msgid "Specify TXT DNS record."
 msgstr ""
 
 #: option.c:353
-msgid "Enable dynamic address allocation for bootp."
+msgid "Specify PTR DNS record."
 msgstr ""
 
 #: option.c:354
-msgid "Map MAC address (with wildcards) to option set."
+msgid "Give DNS name to IPv4 address of interface."
 msgstr ""
 
 #: option.c:355
-msgid "Treat DHCP requests on aliases as arriving from interface."
+msgid "Bind only to interfaces in use."
 msgstr ""
 
 #: option.c:356
-msgid "Disable ICMP echo address checking in the DHCP server."
+#, c-format
+msgid "Read DHCP static host information from %s."
 msgstr ""
 
 #: option.c:357
-msgid "Shell script to run on DHCP lease creation and destruction."
+msgid "Enable the DBus interface for setting upstream servers, etc."
 msgstr ""
 
 #: option.c:358
-msgid "Lua script to run on DHCP lease creation and destruction."
+msgid "Do not provide DHCP on this interface, only provide DNS."
 msgstr ""
 
 #: option.c:359
-msgid "Run lease-change scripts as this user."
+msgid "Enable dynamic address allocation for bootp."
 msgstr ""
 
 #: option.c:360
-msgid "Read configuration from all the files in this directory."
+msgid "Map MAC address (with wildcards) to option set."
 msgstr ""
 
 #: option.c:361
-msgid "Log to this syslog facility or file. (defaults to DAEMON)"
+msgid "Treat DHCP requests on aliases as arriving from interface."
 msgstr ""
 
 #: option.c:362
-msgid "Do not use leasefile."
+msgid "Disable ICMP echo address checking in the DHCP server."
 msgstr ""
 
 #: option.c:363
+msgid "Shell script to run on DHCP lease creation and destruction."
+msgstr ""
+
+#: option.c:364
+msgid "Lua script to run on DHCP lease creation and destruction."
+msgstr ""
+
+#: option.c:365
+msgid "Run lease-change scripts as this user."
+msgstr ""
+
+#: option.c:366
+msgid "Read configuration from all the files in this directory."
+msgstr ""
+
+#: option.c:367
+msgid "Log to this syslog facility or file. (defaults to DAEMON)"
+msgstr ""
+
+#: option.c:368
+msgid "Do not use leasefile."
+msgstr ""
+
+#: option.c:369
 #, c-format
 msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
 msgstr ""
 
-#: option.c:364
+#: option.c:370
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr ""
 
-#: option.c:365
+#: option.c:371
 msgid "Ignore hostnames provided by DHCP clients."
 msgstr ""
 
-#: option.c:366
+#: option.c:372
 msgid "Do NOT reuse filename and server fields for extra DHCP options."
 msgstr ""
 
-#: option.c:367
+#: option.c:373
 msgid "Enable integrated read-only TFTP server."
 msgstr ""
 
-#: option.c:368
+#: option.c:374
 msgid "Export files by TFTP only from the specified subtree."
 msgstr ""
 
-#: option.c:369
+#: option.c:375
 msgid "Add client IP address to tftp-root."
 msgstr ""
 
-#: option.c:370
+#: option.c:376
 msgid "Allow access only to files owned by the user running dnsmasq."
 msgstr ""
 
-#: option.c:371
+#: option.c:377
 #, c-format
 msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
 msgstr ""
 
-#: option.c:372
+#: option.c:378
 msgid "Disable the TFTP blocksize extension."
 msgstr ""
 
-#: option.c:373
+#: option.c:379
 msgid "Convert TFTP filenames to lowercase"
 msgstr ""
 
-#: option.c:374
+#: option.c:380
 msgid "Ephemeral port range for use by TFTP transfers."
 msgstr ""
 
-#: option.c:375
+#: option.c:381
 msgid "Extra logging for DHCP."
 msgstr ""
 
-#: option.c:376
+#: option.c:382
 msgid "Enable async. logging; optionally set queue length."
 msgstr ""
 
-#: option.c:377
+#: option.c:383
 msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
 msgstr ""
 
-#: option.c:378
+#: option.c:384
 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
 msgstr ""
 
-#: option.c:379
+#: option.c:385
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr ""
 
-#: option.c:380
+#: option.c:386
 msgid "Always perform DNS queries to all servers."
 msgstr ""
 
-#: option.c:381
+#: option.c:387
 msgid "Set tag if client includes matching option in request."
 msgstr ""
 
-#: option.c:382
+#: option.c:388
 msgid "Use alternative ports for DHCP."
 msgstr ""
 
-#: option.c:383
+#: option.c:389
 msgid "Specify NAPTR DNS record."
 msgstr ""
 
-#: option.c:384
+#: option.c:390
 msgid "Specify lowest port available for DNS query transmission."
 msgstr ""
 
-#: option.c:385
+#: option.c:391
 msgid "Use only fully qualified domain names for DHCP clients."
 msgstr ""
 
-#: option.c:386
+#: option.c:392
 msgid "Generate hostnames based on MAC address for nameless clients."
 msgstr ""
 
-#: option.c:387
+#: option.c:393
 msgid "Use these DHCP relays as full proxies."
 msgstr ""
 
-#: option.c:388
-msgid "Specify alias name for LOCAL DNS name."
-msgstr ""
-
-#: option.c:389
-msgid "Prompt to send to PXE clients."
-msgstr ""
-
-#: option.c:390
-msgid "Boot service for PXE menu."
-msgstr ""
-
-#: option.c:391
-msgid "Check configuration syntax."
-msgstr ""
-
-#: option.c:392
-msgid "Add requestor's MAC address to forwarded DNS queries."
-msgstr ""
-
-#: option.c:393
-msgid "Proxy DNSSEC validation results from upstream nameservers."
-msgstr ""
-
 #: option.c:394
-msgid "Attempt to allocate sequential IP addresses to DHCP clients."
+msgid "Relay DHCP requests to a remote server"
 msgstr ""
 
 #: option.c:395
-msgid "Copy connection-track mark from queries to upstream connections."
+msgid "Specify alias name for LOCAL DNS name."
 msgstr ""
 
 #: option.c:396
-msgid "Allow DHCP clients to do their own DDNS updates."
+msgid "Prompt to send to PXE clients."
 msgstr ""
 
 #: option.c:397
-msgid "Send router-advertisements for interfaces doing DHCPv6"
+msgid "Boot service for PXE menu."
 msgstr ""
 
 #: option.c:398
-msgid "Specify DUID_EN-type DHCPv6 server DUID"
+msgid "Check configuration syntax."
 msgstr ""
 
 #: option.c:399
-msgid "Specify host (A/AAAA and PTR) records"
+msgid "Add requestor's MAC address to forwarded DNS queries."
 msgstr ""
 
 #: option.c:400
-msgid "Specify arbitrary DNS resource record"
+msgid "Proxy DNSSEC validation results from upstream nameservers."
 msgstr ""
 
 #: option.c:401
-msgid "Bind to interfaces in use - check for new interfaces"
+msgid "Attempt to allocate sequential IP addresses to DHCP clients."
 msgstr ""
 
 #: option.c:402
-msgid "Export local names to global DNS"
+msgid "Copy connection-track mark from queries to upstream connections."
 msgstr ""
 
 #: option.c:403
-msgid "Domain to export to global DNS"
+msgid "Allow DHCP clients to do their own DDNS updates."
 msgstr ""
 
 #: option.c:404
-msgid "Set TTL for authoritative replies"
+msgid "Send router-advertisements for interfaces doing DHCPv6"
 msgstr ""
 
 #: option.c:405
-msgid "Set authoritive zone information"
+msgid "Always send frequent router-advertisements"
 msgstr ""
 
 #: option.c:406
-msgid "Secondary authoritative nameservers for forward domains"
+msgid "Specify DUID_EN-type DHCPv6 server DUID"
 msgstr ""
 
 #: option.c:407
-msgid "Peers which are allowed to do zone transfer"
+msgid "Specify host (A/AAAA and PTR) records"
 msgstr ""
 
 #: option.c:408
-msgid "Specify ipsets to which matching domains should be added"
+msgid "Specify arbitrary DNS resource record"
+msgstr ""
+
+#: option.c:409
+msgid "Bind to interfaces in use - check for new interfaces"
 msgstr ""
 
 #: option.c:410
+msgid "Export local names to global DNS"
+msgstr ""
+
+#: option.c:411
+msgid "Domain to export to global DNS"
+msgstr ""
+
+#: option.c:412
+msgid "Set TTL for authoritative replies"
+msgstr ""
+
+#: option.c:413
+msgid "Set authoritive zone information"
+msgstr ""
+
+#: option.c:414
+msgid "Secondary authoritative nameservers for forward domains"
+msgstr ""
+
+#: option.c:415
+msgid "Peers which are allowed to do zone transfer"
+msgstr ""
+
+#: option.c:416
+msgid "Specify ipsets to which matching domains should be added"
+msgstr ""
+
+#: option.c:417
+msgid "Specify a domain and address range for sythesised names"
+msgstr ""
+
+#: option.c:419
 msgid "Specify DHCPv6 prefix class"
 msgstr ""
 
-#: option.c:596
+#: option.c:605
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
 "\n"
 msgstr ""
 
-#: option.c:598
+#: option.c:607
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr ""
 
-#: option.c:600
+#: option.c:609
 #, c-format
 msgid "Valid options are:\n"
 msgstr ""
 
-#: option.c:650 option.c:654
+#: option.c:659 option.c:663
 msgid "bad port"
 msgstr ""
 
-#: option.c:681 option.c:713
+#: option.c:690 option.c:722
 msgid "interface binding not supported"
 msgstr ""
 
-#: option.c:690 option.c:3179
+#: option.c:699 option.c:3275
 msgid "bad interface name"
 msgstr ""
 
-#: option.c:720
+#: option.c:729
 msgid "bad address"
 msgstr ""
 
-#: option.c:847
+#: option.c:863
 msgid "unsupported encapsulation for IPv6 option"
 msgstr ""
 
-#: option.c:861
+#: option.c:877
 msgid "bad dhcp-option"
 msgstr ""
 
-#: option.c:929
+#: option.c:945
 msgid "bad IP address"
 msgstr ""
 
-#: option.c:932 option.c:1070 option.c:2549
+#: option.c:948 option.c:1086 option.c:2620
 msgid "bad IPv6 address"
 msgstr ""
 
-#: option.c:1097 option.c:1191
+#: option.c:1113 option.c:1207
 msgid "bad domain in dhcp-option"
 msgstr ""
 
-#: option.c:1229
+#: option.c:1245
 msgid "dhcp-option too long"
 msgstr ""
 
-#: option.c:1236
+#: option.c:1252
 msgid "illegal dhcp-match"
 msgstr ""
 
-#: option.c:1298
+#: option.c:1314
 msgid "illegal repeated flag"
 msgstr ""
 
-#: option.c:1306
+#: option.c:1322
 msgid "illegal repeated keyword"
 msgstr ""
 
-#: option.c:1358 option.c:3702
+#: option.c:1374 option.c:3802
 #, c-format
 msgid "cannot access directory %s: %s"
 msgstr ""
 
-#: option.c:1390 tftp.c:474
+#: option.c:1406 tftp.c:487
 #, c-format
 msgid "cannot access %s: %s"
 msgstr ""
 
-#: option.c:1426
+#: option.c:1442
 msgid "setting log facility is not possible under Android"
 msgstr ""
 
-#: option.c:1435
+#: option.c:1451
 msgid "bad log facility"
 msgstr ""
 
-#: option.c:1484
+#: option.c:1500
 msgid "bad MX preference"
 msgstr ""
 
-#: option.c:1489
+#: option.c:1505
 msgid "bad MX name"
 msgstr ""
 
-#: option.c:1503
+#: option.c:1519
 msgid "bad MX target"
 msgstr ""
 
-#: option.c:1515
+#: option.c:1531
 msgid "cannot run scripts under uClinux"
 msgstr ""
 
-#: option.c:1517
+#: option.c:1533
 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
 msgstr ""
 
-#: option.c:1521
+#: option.c:1537
 msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
 msgstr ""
 
-#: option.c:1631
+#: option.c:1739 option.c:1800
 msgid "bad prefix"
 msgstr ""
 
-#: option.c:2043
+#: option.c:2094
 msgid "recompile with HAVE_IPSET defined to enable ipset directives"
 msgstr ""
 
-#: option.c:2223
+#: option.c:2274
 msgid "bad port range"
 msgstr ""
 
-#: option.c:2239
+#: option.c:2290
 msgid "bad bridge-interface"
 msgstr ""
 
-#: option.c:2297
+#: option.c:2350
 msgid "only one tag allowed"
 msgstr ""
 
-#: option.c:2317 option.c:2329 option.c:2461
+#: option.c:2370 option.c:2382 option.c:2491 option.c:2532
 msgid "bad dhcp-range"
 msgstr ""
 
-#: option.c:2344
+#: option.c:2397
 msgid "inconsistent DHCP range"
 msgstr ""
 
-#: option.c:2402
-msgid "prefix must be exactly 64 for RA subnets"
+#: option.c:2459
+msgid "prefix length must be exactly 64 for RA subnets"
 msgstr ""
 
-#: option.c:2404
-msgid "prefix must be exactly 64 for subnet constructors"
+#: option.c:2461
+msgid "prefix length must be exactly 64 for subnet constructors"
 msgstr ""
 
-#: option.c:2407
-msgid "prefix must be at least 64"
+#: option.c:2465
+msgid "prefix length must be at least 64"
 msgstr ""
 
-#: option.c:2412
+#: option.c:2468
 msgid "inconsistent DHCPv6 range"
 msgstr ""
 
-#: option.c:2519 option.c:2567
+#: option.c:2479
+msgid "prefix must be zero with \"constructor:\" argument"
+msgstr ""
+
+#: option.c:2590 option.c:2638
 msgid "bad hex constant"
 msgstr ""
 
-#: option.c:2541
+#: option.c:2612
 msgid "cannot match tags in --dhcp-host"
 msgstr ""
 
-#: option.c:2589
+#: option.c:2660
 #, c-format
 msgid "duplicate dhcp-host IP address %s"
 msgstr ""
 
-#: option.c:2645
+#: option.c:2716
 msgid "bad DHCP host name"
 msgstr ""
 
-#: option.c:2727
+#: option.c:2798
 msgid "bad tag-if"
 msgstr ""
 
-#: option.c:3051 option.c:3379
+#: option.c:3122 option.c:3479
 msgid "invalid port number"
 msgstr ""
 
-#: option.c:3113
+#: option.c:3184
 msgid "bad dhcp-proxy address"
 msgstr ""
 
-#: option.c:3124
+#: option.c:3210
+msgid "Bad dhcp-relay"
+msgstr ""
+
+#: option.c:3220
 msgid "bad DUID"
 msgstr ""
 
-#: option.c:3166
+#: option.c:3262
 msgid "invalid alias range"
 msgstr ""
 
-#: option.c:3205
+#: option.c:3305
 msgid "bad CNAME"
 msgstr ""
 
-#: option.c:3210
+#: option.c:3310
 msgid "duplicate CNAME"
 msgstr ""
 
-#: option.c:3230
+#: option.c:3330
 msgid "bad PTR record"
 msgstr ""
 
-#: option.c:3261
+#: option.c:3361
 msgid "bad NAPTR record"
 msgstr ""
 
-#: option.c:3295
+#: option.c:3395
 msgid "bad RR record"
 msgstr ""
 
-#: option.c:3324
+#: option.c:3424
 msgid "bad TXT record"
 msgstr ""
 
-#: option.c:3365
+#: option.c:3465
 msgid "bad SRV record"
 msgstr ""
 
-#: option.c:3372
+#: option.c:3472
 msgid "bad SRV target"
 msgstr ""
 
-#: option.c:3386
+#: option.c:3486
 msgid "invalid priority"
 msgstr ""
 
-#: option.c:3393
+#: option.c:3493
 msgid "invalid weight"
 msgstr ""
 
-#: option.c:3417
+#: option.c:3517
 msgid "Bad host-record"
 msgstr ""
 
-#: option.c:3434
+#: option.c:3534
 msgid "Bad name in host-record"
 msgstr ""
 
-#: option.c:3464
+#: option.c:3564
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr ""
 
-#: option.c:3522
+#: option.c:3622
 msgid "missing \""
 msgstr ""
 
-#: option.c:3579
+#: option.c:3679
 msgid "bad option"
 msgstr ""
 
-#: option.c:3581
+#: option.c:3681
 msgid "extraneous parameter"
 msgstr ""
 
-#: option.c:3583
+#: option.c:3683
 msgid "missing parameter"
 msgstr ""
 
-#: option.c:3590
+#: option.c:3690
 msgid "error"
 msgstr ""
 
-#: option.c:3592
+#: option.c:3692
 #, c-format
 msgid " at line %d of %s"
 msgstr ""
 
-#: option.c:3656 tftp.c:648
+#: option.c:3756 tftp.c:661
 #, c-format
 msgid "cannot read %s: %s"
 msgstr ""
 
-#: option.c:3823 option.c:3859
+#: option.c:3923 option.c:3959
 #, c-format
 msgid "read %s"
 msgstr ""
 
-#: option.c:3915
+#: option.c:4015
 msgid "junk found in command line"
 msgstr ""
 
-#: option.c:3950
+#: option.c:4050
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr ""
 
-#: option.c:3951
+#: option.c:4051
 #, c-format
 msgid ""
 "Compile time options: %s\n"
 "\n"
 msgstr ""
 
-#: option.c:3952
+#: option.c:4052
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr ""
 
-#: option.c:3953
+#: option.c:4053
 #, c-format
 msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
 msgstr ""
 
-#: option.c:3954
+#: option.c:4054
 #, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr ""
 
-#: option.c:3965
+#: option.c:4065
 msgid "try --help"
 msgstr ""
 
-#: option.c:3967
+#: option.c:4067
 msgid "try -w"
 msgstr ""
 
-#: option.c:3969
+#: option.c:4069
 #, c-format
 msgid "bad command line options: %s"
 msgstr ""
 
-#: option.c:4018
+#: option.c:4118
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr ""
 
-#: option.c:4046
+#: option.c:4146
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr ""
 
-#: option.c:4056
+#: option.c:4156
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr ""
 
-#: option.c:4059 network.c:1039 dhcp.c:794
+#: option.c:4159 network.c:1178 dhcp.c:768
 #, c-format
 msgid "failed to read %s: %s"
 msgstr ""
 
-#: option.c:4076
+#: option.c:4176
 #, c-format
 msgid "no search directive found in %s"
 msgstr ""
 
-#: option.c:4097
+#: option.c:4197
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr ""
 
-#: option.c:4101
+#: option.c:4201
 msgid "syntax check OK"
 msgstr ""
 
@@ -985,101 +1005,106 @@
 msgid "possible DNS-rebind attack detected: %s"
 msgstr ""
 
-#: network.c:414
+#: forward.c:1216
+#, c-format
+msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+msgstr ""
+
+#: network.c:551
 #, c-format
 msgid "failed to create listening socket for %s: %s"
 msgstr ""
 
-#: network.c:743
+#: network.c:882
 #, c-format
 msgid "interface %s failed to join DHCPv6 multicast group: %s"
 msgstr ""
 
-#: network.c:937
+#: network.c:1076
 #, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr ""
 
-#: network.c:974
+#: network.c:1113
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr ""
 
-#: network.c:985
+#: network.c:1124
 #, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr ""
 
-#: network.c:1002
+#: network.c:1141
 msgid "unqualified"
 msgstr ""
 
-#: network.c:1002
+#: network.c:1141
 msgid "names"
 msgstr ""
 
-#: network.c:1004
+#: network.c:1143
 msgid "default"
 msgstr ""
 
-#: network.c:1006
+#: network.c:1145
 msgid "domain"
 msgstr ""
 
-#: network.c:1009
+#: network.c:1148
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr ""
 
-#: network.c:1011
+#: network.c:1150
 #, c-format
 msgid "using standard nameservers for %s %s"
 msgstr ""
 
-#: network.c:1013
+#: network.c:1152
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr ""
 
-#: network.c:1016
+#: network.c:1155
 #, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr ""
 
-#: network.c:1018
+#: network.c:1157
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr ""
 
-#: dnsmasq.c:131
+#: dnsmasq.c:134
 msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
 msgstr ""
 
-#: dnsmasq.c:136
+#: dnsmasq.c:139
 msgid "Cannot use --conntrack AND --query-port"
 msgstr ""
 
-#: dnsmasq.c:139
+#: dnsmasq.c:142
 msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
 msgstr ""
 
-#: dnsmasq.c:144
+#: dnsmasq.c:147
 msgid "asychronous logging is not available under Solaris"
 msgstr ""
 
-#: dnsmasq.c:149
+#: dnsmasq.c:152
 msgid "asychronous logging is not available under Android"
 msgstr ""
 
-#: dnsmasq.c:154
+#: dnsmasq.c:157
 msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
 msgstr ""
 
-#: dnsmasq.c:164
+#: dnsmasq.c:167
 msgid "zone serial must be configured in --auth-soa"
 msgstr ""
 
-#: dnsmasq.c:186
+#: dnsmasq.c:185
 msgid "dhcp-range constructor not available on this platform"
 msgstr ""
 
@@ -1097,426 +1122,431 @@
 msgid "unknown interface %s"
 msgstr ""
 
-#: dnsmasq.c:274 dnsmasq.c:860
+#: dnsmasq.c:275 dnsmasq.c:870
 #, c-format
 msgid "DBus error: %s"
 msgstr ""
 
-#: dnsmasq.c:277
+#: dnsmasq.c:278
 msgid "DBus not available: set HAVE_DBUS in src/config.h"
 msgstr ""
 
-#: dnsmasq.c:305
+#: dnsmasq.c:306
 #, c-format
 msgid "unknown user or group: %s"
 msgstr ""
 
-#: dnsmasq.c:360
+#: dnsmasq.c:361
 #, c-format
 msgid "cannot chdir to filesystem root: %s"
 msgstr ""
 
-#: dnsmasq.c:597
+#: dnsmasq.c:598
 #, c-format
 msgid "started, version %s DNS disabled"
 msgstr ""
 
-#: dnsmasq.c:599
+#: dnsmasq.c:600
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr ""
 
-#: dnsmasq.c:601
+#: dnsmasq.c:602
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr ""
 
-#: dnsmasq.c:603
+#: dnsmasq.c:604
 #, c-format
 msgid "compile time options: %s"
 msgstr ""
 
-#: dnsmasq.c:609
+#: dnsmasq.c:610
 msgid "DBus support enabled: connected to system bus"
 msgstr ""
 
-#: dnsmasq.c:611
+#: dnsmasq.c:612
 msgid "DBus support enabled: bus connection pending"
 msgstr ""
 
-#: dnsmasq.c:616
+#: dnsmasq.c:617
 #, c-format
 msgid "warning: failed to change owner of %s: %s"
 msgstr ""
 
-#: dnsmasq.c:620
+#: dnsmasq.c:621
 msgid "setting --bind-interfaces option because of OS limitations"
 msgstr ""
 
-#: dnsmasq.c:625
+#: dnsmasq.c:626
 #, c-format
 msgid "warning: interface %s does not currently exist"
 msgstr ""
 
-#: dnsmasq.c:630
+#: dnsmasq.c:631
 msgid "warning: ignoring resolv-file flag because no-resolv is set"
 msgstr ""
 
-#: dnsmasq.c:633
+#: dnsmasq.c:634
 msgid "warning: no upstream servers configured"
 msgstr ""
 
-#: dnsmasq.c:637
+#: dnsmasq.c:638
 #, c-format
 msgid "asynchronous logging enabled, queue limit is %d messages"
 msgstr ""
 
-#: dnsmasq.c:652
+#: dnsmasq.c:659
 msgid "IPv6 router advertisement enabled"
 msgstr ""
 
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 msgid "root is "
 msgstr ""
 
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 msgid "enabled"
 msgstr ""
 
-#: dnsmasq.c:671
+#: dnsmasq.c:678
 msgid "secure mode"
 msgstr ""
 
-#: dnsmasq.c:697
+#: dnsmasq.c:704
 #, c-format
 msgid "restricting maximum simultaneous TFTP transfers to %d"
 msgstr ""
 
-#: dnsmasq.c:862
+#: dnsmasq.c:872
 msgid "connected to system DBus"
 msgstr ""
 
-#: dnsmasq.c:1007
+#: dnsmasq.c:1017
 #, c-format
 msgid "cannot fork into background: %s"
 msgstr ""
 
-#: dnsmasq.c:1010
+#: dnsmasq.c:1020
 #, c-format
 msgid "failed to create helper: %s"
 msgstr ""
 
-#: dnsmasq.c:1013
+#: dnsmasq.c:1023
 #, c-format
 msgid "setting capabilities failed: %s"
 msgstr ""
 
-#: dnsmasq.c:1016
+#: dnsmasq.c:1026
 #, c-format
 msgid "failed to change user-id to %s: %s"
 msgstr ""
 
-#: dnsmasq.c:1019
+#: dnsmasq.c:1029
 #, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr ""
 
-#: dnsmasq.c:1022
+#: dnsmasq.c:1032
 #, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr ""
 
-#: dnsmasq.c:1025
+#: dnsmasq.c:1035
 #, c-format
 msgid "cannot open log %s: %s"
 msgstr ""
 
-#: dnsmasq.c:1028
+#: dnsmasq.c:1038
 #, c-format
 msgid "failed to load Lua script: %s"
 msgstr ""
 
-#: dnsmasq.c:1031
+#: dnsmasq.c:1041
 #, c-format
 msgid "TFTP directory %s inaccessible: %s"
 msgstr ""
 
-#: dnsmasq.c:1095
+#: dnsmasq.c:1105
 #, c-format
 msgid "script process killed by signal %d"
 msgstr ""
 
-#: dnsmasq.c:1099
+#: dnsmasq.c:1109
 #, c-format
 msgid "script process exited with status %d"
 msgstr ""
 
-#: dnsmasq.c:1103
+#: dnsmasq.c:1113
 #, c-format
 msgid "failed to execute %s: %s"
 msgstr ""
 
-#: dnsmasq.c:1148
+#: dnsmasq.c:1158
 msgid "exiting on receipt of SIGTERM"
 msgstr ""
 
-#: dnsmasq.c:1176
+#: dnsmasq.c:1186
 #, c-format
 msgid "failed to access %s: %s"
 msgstr ""
 
-#: dnsmasq.c:1206
+#: dnsmasq.c:1216
 #, c-format
 msgid "reading %s"
 msgstr ""
 
-#: dnsmasq.c:1217
+#: dnsmasq.c:1227
 #, c-format
 msgid "no servers found in %s, will retry"
 msgstr ""
 
-#: dhcp.c:49
+#: dhcp.c:53
 #, c-format
 msgid "cannot create DHCP socket: %s"
 msgstr ""
 
-#: dhcp.c:64
+#: dhcp.c:68
 #, c-format
 msgid "failed to set options on DHCP socket: %s"
 msgstr ""
 
-#: dhcp.c:77
+#: dhcp.c:89
 #, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
 msgstr ""
 
-#: dhcp.c:89
+#: dhcp.c:101
 #, c-format
 msgid "failed to bind DHCP server socket: %s"
 msgstr ""
 
-#: dhcp.c:115
+#: dhcp.c:127
 #, c-format
 msgid "cannot create ICMP raw socket: %s."
 msgstr ""
 
-#: dhcp.c:225
+#: dhcp.c:239
 #, c-format
 msgid "unknown interface %s in bridge-interface"
 msgstr ""
 
-#: dhcp.c:250
+#: dhcp.c:278
 #, c-format
 msgid "DHCP packet received on %s which has no address"
 msgstr ""
 
-#: dhcp.c:457
+#: dhcp.c:505
 #, c-format
 msgid "DHCP range %s -- %s is not consistent with netmask %s"
 msgstr ""
 
-#: dhcp.c:832
+#: dhcp.c:806
 #, c-format
 msgid "bad line at %s line %d"
 msgstr ""
 
-#: dhcp.c:875
+#: dhcp.c:849
 #, c-format
 msgid "ignoring %s line %d, duplicate name or IP address"
 msgstr ""
 
+#: dhcp.c:993 rfc3315.c:2047
+#, c-format
+msgid "DHCP relay %s -> %s"
+msgstr ""
+
 #: lease.c:61
 #, c-format
 msgid "cannot open or create lease file %s: %s"
 msgstr ""
 
-#: lease.c:133
+#: lease.c:134
 msgid "too many stored leases"
 msgstr ""
 
-#: lease.c:164
+#: lease.c:165
 #, c-format
 msgid "cannot run lease-init script %s: %s"
 msgstr ""
 
-#: lease.c:170
+#: lease.c:171
 #, c-format
 msgid "lease-init script returned exit code %s"
 msgstr ""
 
-#: lease.c:339
+#: lease.c:342
 #, c-format
 msgid "failed to write %s: %s (retry in %us)"
 msgstr ""
 
-#: lease.c:843
+#: lease.c:871
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr ""
 
-#: rfc2131.c:337
+#: rfc2131.c:338
 #, c-format
 msgid "no address range available for DHCP request %s %s"
 msgstr ""
 
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "with subnet selector"
 msgstr ""
 
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "via"
 msgstr ""
 
-#: rfc2131.c:350
+#: rfc2131.c:351
 #, c-format
 msgid "%u available DHCP subnet: %s/%s"
 msgstr ""
 
-#: rfc2131.c:353 rfc3315.c:272
+#: rfc2131.c:354 rfc3315.c:292
 #, c-format
 msgid "%u available DHCP range: %s -- %s"
 msgstr ""
 
-#: rfc2131.c:382
-msgid "disabled"
-msgstr ""
-
-#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771
-#: rfc3315.c:1017
-msgid "ignored"
-msgstr ""
-
-#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814
-msgid "address in use"
-msgstr ""
-
-#: rfc2131.c:452 rfc2131.c:1007
-msgid "no address available"
-msgstr ""
-
-#: rfc2131.c:459 rfc2131.c:1154
-msgid "wrong network"
-msgstr ""
-
-#: rfc2131.c:474
-msgid "no address configured"
-msgstr ""
-
-#: rfc2131.c:480 rfc2131.c:1204
-msgid "no leases left"
-msgstr ""
-
-#: rfc2131.c:576 rfc3315.c:428
-#, c-format
-msgid "%u client provides name: %s"
-msgstr ""
-
-#: rfc2131.c:731
+#: rfc2131.c:465
 #, c-format
 msgid "%u vendor class: %s"
 msgstr ""
 
-#: rfc2131.c:733
+#: rfc2131.c:467
 #, c-format
 msgid "%u user class: %s"
 msgstr ""
 
+#: rfc2131.c:494
+msgid "disabled"
+msgstr ""
+
+#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813
+#: rfc3315.c:1082
+msgid "ignored"
+msgstr ""
+
+#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863
+msgid "address in use"
+msgstr ""
+
+#: rfc2131.c:564 rfc2131.c:1015
+msgid "no address available"
+msgstr ""
+
+#: rfc2131.c:571 rfc2131.c:1162
+msgid "wrong network"
+msgstr ""
+
+#: rfc2131.c:586
+msgid "no address configured"
+msgstr ""
+
+#: rfc2131.c:592 rfc2131.c:1212
+msgid "no leases left"
+msgstr ""
+
+#: rfc2131.c:687 rfc3315.c:466
+#, c-format
+msgid "%u client provides name: %s"
+msgstr ""
+
 #: rfc2131.c:792
 msgid "PXE BIS not supported"
 msgstr ""
 
-#: rfc2131.c:923 rfc3315.c:1111
+#: rfc2131.c:931 rfc3315.c:1176
 #, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr ""
 
-#: rfc2131.c:944
+#: rfc2131.c:952
 msgid "unknown lease"
 msgstr ""
 
-#: rfc2131.c:976
+#: rfc2131.c:984
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr ""
 
-#: rfc2131.c:986
+#: rfc2131.c:994
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr ""
 
-#: rfc2131.c:989
+#: rfc2131.c:997
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr ""
 
-#: rfc2131.c:1005 rfc2131.c:1197
+#: rfc2131.c:1013 rfc2131.c:1205
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:1092
+#: rfc2131.c:1100
 msgid "wrong server-ID"
 msgstr ""
 
-#: rfc2131.c:1111
+#: rfc2131.c:1119
 msgid "wrong address"
 msgstr ""
 
-#: rfc2131.c:1129 rfc3315.c:911
+#: rfc2131.c:1137 rfc3315.c:959
 msgid "lease not found"
 msgstr ""
 
-#: rfc2131.c:1162
+#: rfc2131.c:1170
 msgid "address not available"
 msgstr ""
 
-#: rfc2131.c:1173
+#: rfc2131.c:1181
 msgid "static lease available"
 msgstr ""
 
-#: rfc2131.c:1177
+#: rfc2131.c:1185
 msgid "address reserved"
 msgstr ""
 
-#: rfc2131.c:1185
+#: rfc2131.c:1193
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr ""
 
-#: rfc2131.c:1679
+#: rfc2131.c:1701
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr ""
 
-#: rfc2131.c:1688
+#: rfc2131.c:1710
 #, c-format
 msgid "%u server name: %s"
 msgstr ""
 
-#: rfc2131.c:1696
+#: rfc2131.c:1718
 #, c-format
 msgid "%u next server: %s"
 msgstr ""
 
-#: rfc2131.c:1699
+#: rfc2131.c:1721
 #, c-format
 msgid "%u broadcast response"
 msgstr ""
 
-#: rfc2131.c:1762
+#: rfc2131.c:1784
 #, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr ""
 
-#: rfc2131.c:2002
+#: rfc2131.c:2025
 msgid "PXE menu too large"
 msgstr ""
 
-#: rfc2131.c:2139 rfc3315.c:1332
+#: rfc2131.c:2162 rfc3315.c:1420
 #, c-format
 msgid "%u requested options: %s"
 msgstr ""
 
-#: rfc2131.c:2415
+#: rfc2131.c:2442
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr ""
@@ -1526,7 +1556,7 @@
 msgid "cannot create netlink socket: %s"
 msgstr ""
 
-#: netlink.c:354
+#: netlink.c:363
 #, c-format
 msgid "netlink returns error: %s"
 msgstr ""
@@ -1535,53 +1565,53 @@
 msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
 msgstr ""
 
-#: dbus.c:308 dbus.c:504
+#: dbus.c:523
 msgid "setting upstream servers from DBus"
 msgstr ""
 
-#: dbus.c:561
+#: dbus.c:570
 msgid "could not register a DBus message handler"
 msgstr ""
 
-#: bpf.c:197
+#: bpf.c:245
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr ""
 
-#: bpf.c:225
+#: bpf.c:273
 #, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr ""
 
-#: helper.c:145
+#: helper.c:151
 msgid "lease() function missing in Lua script"
 msgstr ""
 
-#: tftp.c:290
+#: tftp.c:303
 msgid "unable to get free port for TFTP"
 msgstr ""
 
-#: tftp.c:306
+#: tftp.c:319
 #, c-format
 msgid "unsupported request from %s"
 msgstr ""
 
-#: tftp.c:420
+#: tftp.c:433
 #, c-format
 msgid "file %s not found"
 msgstr ""
 
-#: tftp.c:529
+#: tftp.c:542
 #, c-format
 msgid "error %d %s received from %s"
 msgstr ""
 
-#: tftp.c:571
+#: tftp.c:584
 #, c-format
 msgid "failed sending %s to %s"
 msgstr ""
 
-#: tftp.c:571
+#: tftp.c:584
 #, c-format
 msgid "sent %s to %s"
 msgstr ""
@@ -1605,176 +1635,195 @@
 msgid "Conntrack connection mark retrieval failed: %s"
 msgstr ""
 
-#: dhcp6.c:49
+#: dhcp6.c:59
 #, c-format
 msgid "cannot create DHCPv6 socket: %s"
 msgstr ""
 
-#: dhcp6.c:62
+#: dhcp6.c:80
 #, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s"
 msgstr ""
 
-#: dhcp6.c:74
+#: dhcp6.c:92
 #, c-format
 msgid "failed to bind DHCPv6 server socket: %s"
 msgstr ""
 
-#: rfc3315.c:135
+#: rfc3315.c:149
 #, c-format
 msgid "no address range available for DHCPv6 request from relay at %s"
 msgstr ""
 
-#: rfc3315.c:144
+#: rfc3315.c:158
 #, c-format
 msgid "no address range available for DHCPv6 request via %s"
 msgstr ""
 
-#: rfc3315.c:269
+#: rfc3315.c:289
 #, c-format
 msgid "%u available DHCPv6 subnet: %s/%d"
 msgstr ""
 
-#: rfc3315.c:350
+#: rfc3315.c:370
 #, c-format
 msgid "%u vendor class: %u"
 msgstr ""
 
-#: rfc3315.c:609
+#: rfc3315.c:418
+#, c-format
+msgid "%u client MAC address: %s"
+msgstr ""
+
+#: rfc3315.c:650
 #, c-format
 msgid "unknown prefix-class %d"
 msgstr ""
 
-#: rfc3315.c:741 rfc3315.c:854
+#: rfc3315.c:781 rfc3315.c:903
 msgid "success"
 msgstr ""
 
-#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864
+#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913
 msgid "no addresses available"
 msgstr ""
 
-#: rfc3315.c:806
+#: rfc3315.c:855
 msgid "address unavailable"
 msgstr ""
 
-#: rfc3315.c:841
+#: rfc3315.c:890
 msgid "not on link"
 msgstr ""
 
-#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150
+#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215
 msgid "no binding found"
 msgstr ""
 
-#: rfc3315.c:948
+#: rfc3315.c:1001
 msgid "deprecated"
 msgstr ""
 
-#: rfc3315.c:951
+#: rfc3315.c:1006
 msgid "address invalid"
 msgstr ""
 
-#: rfc3315.c:992
+#: rfc3315.c:1048
 msgid "confirm failed"
 msgstr ""
 
-#: rfc3315.c:1003
+#: rfc3315.c:1059
 msgid "all addresses still on link"
 msgstr ""
 
-#: rfc3315.c:1082
+#: rfc3315.c:1147
 msgid "release received"
 msgstr ""
 
+#: rfc3315.c:2038
+msgid "Cannot multicast to DHCPv6 server without correct interface"
+msgstr ""
+
 #: dhcp-common.c:145
 #, c-format
 msgid "Ignoring duplicate dhcp-option %d"
 msgstr ""
 
-#: dhcp-common.c:215
+#: dhcp-common.c:222
 #, c-format
 msgid "%u tags: %s"
 msgstr ""
 
-#: dhcp-common.c:296
+#: dhcp-common.c:407
 #, c-format
 msgid "%s has more than one address in hostsfile, using %s for DHCP"
 msgstr ""
 
-#: dhcp-common.c:319
+#: dhcp-common.c:430
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr ""
 
-#: dhcp-common.c:367
+#: dhcp-common.c:484
 #, c-format
 msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s"
 msgstr ""
 
-#: dhcp-common.c:489
+#: dhcp-common.c:606
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr ""
 
-#: dhcp-common.c:500
+#: dhcp-common.c:617
 #, c-format
 msgid "Known DHCPv6 options:\n"
 msgstr ""
 
-#: dhcp-common.c:693
+#: dhcp-common.c:814
 msgid ", prefix deprecated"
 msgstr ""
 
-#: dhcp-common.c:696
+#: dhcp-common.c:817
 #, c-format
 msgid ", lease time "
 msgstr ""
 
-#: dhcp-common.c:727
+#: dhcp-common.c:849
 #, c-format
 msgid "%s stateless on %s%.0s%.0s%s"
 msgstr ""
 
-#: dhcp-common.c:729
+#: dhcp-common.c:851
 #, c-format
 msgid "%s, static leases only on %.0s%s%s%.0s"
 msgstr ""
 
-#: dhcp-common.c:731
+#: dhcp-common.c:853
 #, c-format
 msgid "%s, proxy on subnet %.0s%s%.0s%.0s"
 msgstr ""
 
-#: dhcp-common.c:732
+#: dhcp-common.c:854
 #, c-format
 msgid "%s, IP range %s -- %s%s%.0s"
 msgstr ""
 
-#: dhcp-common.c:739
+#: dhcp-common.c:861
 #, c-format
 msgid "DHCPv4-derived IPv6 names on %s%s"
 msgstr ""
 
-#: dhcp-common.c:742
+#: dhcp-common.c:864
 #, c-format
 msgid "router advertisement on %s%s"
 msgstr ""
 
-#: radv.c:87
+#: dhcp-common.c:875
+#, c-format
+msgid "DHCP relay from %s to %s via %s"
+msgstr ""
+
+#: dhcp-common.c:877
+#, c-format
+msgid "DHCP relay from %s to %s"
+msgstr ""
+
+#: radv.c:93
 #, c-format
 msgid "cannot create ICMPv6 socket: %s"
 msgstr ""
 
-#: auth.c:402
+#: auth.c:435
 #, c-format
 msgid "ignoring zone transfer request from %s"
 msgstr ""
 
-#: ipset.c:71
+#: ipset.c:95
 #, c-format
 msgid "failed to find kernel version: %s"
 msgstr ""
 
-#: ipset.c:90
+#: ipset.c:114
 #, c-format
 msgid "failed to create IPset control socket: %s"
 msgstr ""
diff --git a/po/no.po b/po/no.po
index 34164c5..b721a53 100644
--- a/po/no.po
+++ b/po/no.po
@@ -23,17 +23,17 @@
 msgid "failed to load names from %s: %s"
 msgstr "feilet å laste navn fra %s: %s"
 
-#: cache.c:834 dhcp.c:845
+#: cache.c:834 dhcp.c:819
 #, c-format
 msgid "bad address at %s line %d"
 msgstr "dårlig adresse ved %s linje %d"
 
-#: cache.c:885 dhcp.c:861
+#: cache.c:885 dhcp.c:835
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "dårlig navn ved %s linje %d"
 
-#: cache.c:892 dhcp.c:936
+#: cache.c:892 dhcp.c:910
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "les %s - %d adresser"
@@ -42,37 +42,37 @@
 msgid "cleared cache"
 msgstr "mellomlager tømt"
 
-#: cache.c:1016
+#: cache.c:984
 #, c-format
 msgid "No IPv4 address found for %s"
 msgstr ""
 
-#: cache.c:1093
+#: cache.c:1061
 #, c-format
 msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
 msgstr ""
 
-#: cache.c:1117
+#: cache.c:1085
 #, c-format
 msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
 msgstr "gir ikke navnet %s til DHCP leien for %s fordi navnet eksisterer i %s med adressen %s"
 
-#: cache.c:1162
+#: cache.c:1130
 #, c-format
 msgid "time %lu"
 msgstr ""
 
-#: cache.c:1163
+#: cache.c:1131
 #, fuzzy, c-format
 msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
 msgstr "mellomlager størrelse %d, %d/%d mellomlager innsettinger re-bruker mellomlager plasser som ikke er utløpt"
 
-#: cache.c:1165
+#: cache.c:1133
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr ""
 
-#: cache.c:1188
+#: cache.c:1156
 #, c-format
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr ""
@@ -82,563 +82,575 @@
 msgid "failed to seed the random number generator: %s"
 msgstr "feilet å lytte på socket: %s"
 
-#: util.c:189
+#: util.c:192
 #, fuzzy
 msgid "failed to allocate memory"
 msgstr "feilet å laste %d bytes"
 
-#: util.c:227 option.c:531
+#: util.c:230 option.c:540
 msgid "could not get memory"
 msgstr "kunne ikke få minne"
 
-#: util.c:237
+#: util.c:240
 #, fuzzy, c-format
 msgid "cannot create pipe: %s"
 msgstr "kan ikke lese %s: %s"
 
-#: util.c:245
+#: util.c:248
 #, fuzzy, c-format
 msgid "failed to allocate %d bytes"
 msgstr "feilet å laste %d bytes"
 
-#: util.c:400
+#: util.c:403
 #, c-format
 msgid "infinite"
 msgstr "uendelig"
 
-#: option.c:286
+#: option.c:292
 msgid "Specify local address(es) to listen on."
 msgstr "Spesifiser lokal(e) adresse(r) å lytte på."
 
-#: option.c:287
+#: option.c:293
 msgid "Return ipaddr for all hosts in specified domains."
 msgstr "Returner ipaddr for alle verter i det spesifiserte domenet."
 
-#: option.c:288
+#: option.c:294
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr "Forfalsk revers oppslag for RFC1918 private adresse områder."
 
-#: option.c:289
+#: option.c:295
 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
 msgstr "Behandle ipaddr som NXDOMAIN (omgår Verisign wildcard)."
 
-#: option.c:290
+#: option.c:296
 #, c-format
 msgid "Specify the size of the cache in entries (defaults to %s)."
 msgstr "Spesifiser størrelsen på mellomlager plassene (standard er %s)."
 
-#: option.c:291
+#: option.c:297
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr "Spesifiser konfigurasjonsfil (standard er %s)."
 
-#: option.c:292
+#: option.c:298
 msgid "Do NOT fork into the background: run in debug mode."
 msgstr "IKKE legg (fork) som bakgrunnsprosess: kjør i debug modus."
 
-#: option.c:293
+#: option.c:299
 msgid "Do NOT forward queries with no domain part."
 msgstr "IKKE videresend oppslag som mangler domene del."
 
-#: option.c:294
+#: option.c:300
 msgid "Return self-pointing MX records for local hosts."
 msgstr "Returner selv-pekende MX post for lokale verter."
 
-#: option.c:295
+#: option.c:301
 msgid "Expand simple names in /etc/hosts with domain-suffix."
 msgstr "Utvid enkle navn i /etc/hosts med domene-suffiks."
 
-#: option.c:296
+#: option.c:302
 msgid "Don't forward spurious DNS requests from Windows hosts."
 msgstr "Ikke videresend falske/uekte DNS forespørsler fra Windows verter."
 
-#: option.c:297
+#: option.c:303
 msgid "Enable DHCP in the range given with lease duration."
 msgstr "Aktiver DHCP i det gitte området med leie varighet"
 
-#: option.c:298
+#: option.c:304
 #, c-format
 msgid "Change to this group after startup (defaults to %s)."
 msgstr "Skift til denne gruppen etter oppstart (standard er %s)."
 
-#: option.c:299
+#: option.c:305
 msgid "Set address or hostname for a specified machine."
 msgstr "Sett adresse eller vertsnavn for en spesifikk maskin."
 
-#: option.c:300
+#: option.c:306
 #, fuzzy
 msgid "Read DHCP host specs from file."
 msgstr "dårlig MX navn"
 
-#: option.c:301
+#: option.c:307
 msgid "Read DHCP option specs from file."
 msgstr ""
 
-#: option.c:302
+#: option.c:308
 msgid "Evaluate conditional tag expression."
 msgstr ""
 
-#: option.c:303
+#: option.c:309
 #, c-format
 msgid "Do NOT load %s file."
 msgstr "IKKE last %s filen."
 
-#: option.c:304
+#: option.c:310
 #, c-format
 msgid "Specify a hosts file to be read in addition to %s."
 msgstr "Spesifiser en verts (hosts) fil som skal leses i tilleg til %s."
 
-#: option.c:305
+#: option.c:311
 msgid "Specify interface(s) to listen on."
 msgstr "Spesifiser nettverkskort det skal lyttes på."
 
-#: option.c:306
+#: option.c:312
 msgid "Specify interface(s) NOT to listen on."
 msgstr "Spesifiser nettverkskort det IKKE skal lyttes på."
 
-#: option.c:307
+#: option.c:313
 #, fuzzy
 msgid "Map DHCP user class to tag."
 msgstr "Map DHCP bruker klasse til opsjon sett."
 
-#: option.c:308
+#: option.c:314
 msgid "Map RFC3046 circuit-id to tag."
 msgstr ""
 
-#: option.c:309
+#: option.c:315
 msgid "Map RFC3046 remote-id to tag."
 msgstr ""
 
-#: option.c:310
+#: option.c:316
 msgid "Map RFC3993 subscriber-id to tag."
 msgstr ""
 
-#: option.c:311
+#: option.c:317
 #, fuzzy
 msgid "Don't do DHCP for hosts with tag set."
 msgstr "Ikke utfør DHCP for klienter i opsjon sett."
 
-#: option.c:312
+#: option.c:318
 #, fuzzy
 msgid "Force broadcast replies for hosts with tag set."
 msgstr "Ikke utfør DHCP for klienter i opsjon sett."
 
-#: option.c:313
+#: option.c:319
 msgid "Do NOT fork into the background, do NOT run in debug mode."
 msgstr "IKKE last (fork) som bakgrunnsprosess, IKKE kjør i debug modus."
 
-#: option.c:314
+#: option.c:320
 msgid "Assume we are the only DHCP server on the local network."
 msgstr "Anta at vi er den eneste DHCP tjeneren på det lokale nettverket."
 
-#: option.c:315
+#: option.c:321
 #, c-format
 msgid "Specify where to store DHCP leases (defaults to %s)."
 msgstr "Spesifiser hvor DHCP leiene skal lagres (standard er %s)."
 
-#: option.c:316
+#: option.c:322
 msgid "Return MX records for local hosts."
 msgstr "Returner MX records for lokale verter."
 
-#: option.c:317
+#: option.c:323
 msgid "Specify an MX record."
 msgstr "Spesifiser en MX post."
 
-#: option.c:318
+#: option.c:324
 msgid "Specify BOOTP options to DHCP server."
 msgstr "Spesifiser BOOTP opsjoner til DHCP tjener."
 
-#: option.c:319
+#: option.c:325
 #, c-format
 msgid "Do NOT poll %s file, reload only on SIGHUP."
 msgstr "IKKE spør (poll) %s fil, les på nytt kun ved SIGHUP"
 
-#: option.c:320
+#: option.c:326
 msgid "Do NOT cache failed search results."
 msgstr "IKKE mellomlagre søkeresultater som feiler."
 
-#: option.c:321
+#: option.c:327
 #, c-format
 msgid "Use nameservers strictly in the order given in %s."
 msgstr "Bruk navnetjenere kun som bestemt i rekkefølgen gitt i %s."
 
-#: option.c:322
+#: option.c:328
 #, fuzzy
 msgid "Specify options to be sent to DHCP clients."
 msgstr "Sett ekstra opsjoner som skal fordeles til DHCP klientene."
 
-#: option.c:323
+#: option.c:329
 msgid "DHCP option sent even if the client does not request it."
 msgstr ""
 
-#: option.c:324
+#: option.c:330
 msgid "Specify port to listen for DNS requests on (defaults to 53)."
 msgstr "Spesifiser lytteport for DNS oppslag (standard er 53)."
 
-#: option.c:325
+#: option.c:331
 #, c-format
 msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
 msgstr "Maksimal støttet UDP pakkestørrelse for EDNS.0 (standard er %s)."
 
-#: option.c:326
+#: option.c:332
 #, fuzzy
 msgid "Log DNS queries."
 msgstr "Logg oppslag."
 
-#: option.c:327
+#: option.c:333
 #, fuzzy
 msgid "Force the originating port for upstream DNS queries."
 msgstr "Tving bruk av opprinnelig port for oppstrøms oppslag."
 
-#: option.c:328
+#: option.c:334
 msgid "Do NOT read resolv.conf."
 msgstr "IKKE les resolv.conf."
 
-#: option.c:329
+#: option.c:335
 #, c-format
 msgid "Specify path to resolv.conf (defaults to %s)."
 msgstr "Spesifiser stien til resolv.conf (standard er %s)."
 
-#: option.c:330
+#: option.c:336
 msgid "Specify address(es) of upstream servers with optional domains."
 msgstr "Spesifiser adressen(e) til oppstrøms tjenere med valgfrie domener."
 
-#: option.c:331
+#: option.c:337
 msgid "Never forward queries to specified domains."
 msgstr "Aldri videresend oppslag til spesifiserte domener."
 
-#: option.c:332
+#: option.c:338
 msgid "Specify the domain to be assigned in DHCP leases."
 msgstr "Spesifiser domenet som skal tildeles i DHCP leien."
 
-#: option.c:333
+#: option.c:339
 msgid "Specify default target in an MX record."
 msgstr "Spesifiser default mål i en MX post."
 
-#: option.c:334
+#: option.c:340
 msgid "Specify time-to-live in seconds for replies from /etc/hosts."
 msgstr "Spesifiser time-to-live i sekunder for svar fra /etc/hosts."
 
-#: option.c:335
+#: option.c:341
 #, fuzzy
 msgid "Specify time-to-live in seconds for negative caching."
 msgstr "Spesifiser time-to-live i sekunder for svar fra /etc/hosts."
 
-#: option.c:336
+#: option.c:342
 #, fuzzy
 msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
 msgstr "Spesifiser time-to-live i sekunder for svar fra /etc/hosts."
 
-#: option.c:337
+#: option.c:343
 #, c-format
 msgid "Change to this user after startup. (defaults to %s)."
 msgstr "Skift til denne bruker etter oppstart (standard er %s)."
 
-#: option.c:338
+#: option.c:344
 #, fuzzy
 msgid "Map DHCP vendor class to tag."
 msgstr "Map DHCP produsent klasse til opsjon sett."
 
-#: option.c:339
+#: option.c:345
 msgid "Display dnsmasq version and copyright information."
 msgstr "Vis dnsmasq versjon og copyright informasjon."
 
-#: option.c:340
+#: option.c:346
 msgid "Translate IPv4 addresses from upstream servers."
 msgstr "Oversett IPv4 adresser fra oppstrøms tjenere."
 
-#: option.c:341
+#: option.c:347
 msgid "Specify a SRV record."
 msgstr "Spesifiser en SRV post."
 
-#: option.c:342
+#: option.c:348
 msgid "Display this message. Use --help dhcp for known DHCP options."
 msgstr ""
 
-#: option.c:343
+#: option.c:349
 #, fuzzy, c-format
 msgid "Specify path of PID file (defaults to %s)."
 msgstr "Spesifiser stien til PID fil. (standard er %s)."
 
-#: option.c:344
+#: option.c:350
 #, c-format
 msgid "Specify maximum number of DHCP leases (defaults to %s)."
 msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
 
-#: option.c:345
+#: option.c:351
 msgid "Answer DNS queries based on the interface a query was sent to."
 msgstr "Svar DNS oppslag basert på nettverkskortet oppslaget ble sendt til."
 
-#: option.c:346
+#: option.c:352
 msgid "Specify TXT DNS record."
 msgstr "Spesifiser TXT DNS post."
 
-#: option.c:347
+#: option.c:353
 #, fuzzy
 msgid "Specify PTR DNS record."
 msgstr "Spesifiser TXT DNS post."
 
-#: option.c:348
+#: option.c:354
 msgid "Give DNS name to IPv4 address of interface."
 msgstr ""
 
-#: option.c:349
+#: option.c:355
 msgid "Bind only to interfaces in use."
 msgstr "Bind kun til nettverkskort som er i bruk."
 
-#: option.c:350
+#: option.c:356
 #, c-format
 msgid "Read DHCP static host information from %s."
 msgstr "Les DHCP statisk vert informasjon fra %s."
 
-#: option.c:351
+#: option.c:357
 msgid "Enable the DBus interface for setting upstream servers, etc."
 msgstr "Aktiver DBus interface for å sette oppstrøms tjenere, osv."
 
-#: option.c:352
+#: option.c:358
 msgid "Do not provide DHCP on this interface, only provide DNS."
 msgstr "Ikke lever DHCP på dette nettverkskortet, kun lever DNS."
 
-#: option.c:353
+#: option.c:359
 msgid "Enable dynamic address allocation for bootp."
 msgstr "Aktiver dynamisk adresse allokering for bootp."
 
-#: option.c:354
+#: option.c:360
 #, fuzzy
 msgid "Map MAC address (with wildcards) to option set."
 msgstr "Map DHCP produsent klasse til opsjon sett."
 
-#: option.c:355
+#: option.c:361
 msgid "Treat DHCP requests on aliases as arriving from interface."
 msgstr ""
 
-#: option.c:356
+#: option.c:362
 msgid "Disable ICMP echo address checking in the DHCP server."
 msgstr ""
 
-#: option.c:357
+#: option.c:363
 msgid "Shell script to run on DHCP lease creation and destruction."
 msgstr ""
 
-#: option.c:358
+#: option.c:364
 msgid "Lua script to run on DHCP lease creation and destruction."
 msgstr ""
 
-#: option.c:359
+#: option.c:365
 msgid "Run lease-change scripts as this user."
 msgstr ""
 
-#: option.c:360
+#: option.c:366
 msgid "Read configuration from all the files in this directory."
 msgstr ""
 
-#: option.c:361
+#: option.c:367
 #, fuzzy
 msgid "Log to this syslog facility or file. (defaults to DAEMON)"
 msgstr "Skift til denne bruker etter oppstart (standard er %s)."
 
-#: option.c:362
+#: option.c:368
 msgid "Do not use leasefile."
 msgstr ""
 
-#: option.c:363
+#: option.c:369
 #, fuzzy, c-format
 msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
 msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
 
-#: option.c:364
+#: option.c:370
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr ""
 
-#: option.c:365
+#: option.c:371
 msgid "Ignore hostnames provided by DHCP clients."
 msgstr ""
 
-#: option.c:366
+#: option.c:372
 msgid "Do NOT reuse filename and server fields for extra DHCP options."
 msgstr ""
 
-#: option.c:367
+#: option.c:373
 msgid "Enable integrated read-only TFTP server."
 msgstr ""
 
-#: option.c:368
+#: option.c:374
 msgid "Export files by TFTP only from the specified subtree."
 msgstr ""
 
-#: option.c:369
+#: option.c:375
 msgid "Add client IP address to tftp-root."
 msgstr ""
 
-#: option.c:370
+#: option.c:376
 msgid "Allow access only to files owned by the user running dnsmasq."
 msgstr ""
 
-#: option.c:371
+#: option.c:377
 #, fuzzy, c-format
 msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
 msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
 
-#: option.c:372
+#: option.c:378
 msgid "Disable the TFTP blocksize extension."
 msgstr ""
 
-#: option.c:373
+#: option.c:379
 msgid "Convert TFTP filenames to lowercase"
 msgstr ""
 
-#: option.c:374
+#: option.c:380
 msgid "Ephemeral port range for use by TFTP transfers."
 msgstr ""
 
-#: option.c:375
+#: option.c:381
 msgid "Extra logging for DHCP."
 msgstr ""
 
-#: option.c:376
+#: option.c:382
 msgid "Enable async. logging; optionally set queue length."
 msgstr ""
 
-#: option.c:377
+#: option.c:383
 msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
 msgstr ""
 
-#: option.c:378
+#: option.c:384
 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
 msgstr ""
 
-#: option.c:379
+#: option.c:385
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr ""
 
-#: option.c:380
+#: option.c:386
 msgid "Always perform DNS queries to all servers."
 msgstr ""
 
-#: option.c:381
+#: option.c:387
 msgid "Set tag if client includes matching option in request."
 msgstr ""
 
-#: option.c:382
-msgid "Use alternative ports for DHCP."
-msgstr ""
-
-#: option.c:383
-#, fuzzy
-msgid "Specify NAPTR DNS record."
-msgstr "Spesifiser TXT DNS post."
-
-#: option.c:384
-msgid "Specify lowest port available for DNS query transmission."
-msgstr ""
-
-#: option.c:385
-msgid "Use only fully qualified domain names for DHCP clients."
-msgstr ""
-
-#: option.c:386
-msgid "Generate hostnames based on MAC address for nameless clients."
-msgstr ""
-
-#: option.c:387
-msgid "Use these DHCP relays as full proxies."
-msgstr ""
-
 #: option.c:388
-msgid "Specify alias name for LOCAL DNS name."
+msgid "Use alternative ports for DHCP."
 msgstr ""
 
 #: option.c:389
 #, fuzzy
-msgid "Prompt to send to PXE clients."
-msgstr "Sett ekstra opsjoner som skal fordeles til DHCP klientene."
+msgid "Specify NAPTR DNS record."
+msgstr "Spesifiser TXT DNS post."
 
 #: option.c:390
-msgid "Boot service for PXE menu."
+msgid "Specify lowest port available for DNS query transmission."
 msgstr ""
 
 #: option.c:391
-msgid "Check configuration syntax."
+msgid "Use only fully qualified domain names for DHCP clients."
 msgstr ""
 
 #: option.c:392
-msgid "Add requestor's MAC address to forwarded DNS queries."
+msgid "Generate hostnames based on MAC address for nameless clients."
 msgstr ""
 
 #: option.c:393
+msgid "Use these DHCP relays as full proxies."
+msgstr ""
+
+#: option.c:394
+msgid "Relay DHCP requests to a remote server"
+msgstr ""
+
+#: option.c:395
+msgid "Specify alias name for LOCAL DNS name."
+msgstr ""
+
+#: option.c:396
+#, fuzzy
+msgid "Prompt to send to PXE clients."
+msgstr "Sett ekstra opsjoner som skal fordeles til DHCP klientene."
+
+#: option.c:397
+msgid "Boot service for PXE menu."
+msgstr ""
+
+#: option.c:398
+msgid "Check configuration syntax."
+msgstr ""
+
+#: option.c:399
+msgid "Add requestor's MAC address to forwarded DNS queries."
+msgstr ""
+
+#: option.c:400
 #, fuzzy
 msgid "Proxy DNSSEC validation results from upstream nameservers."
 msgstr "Oversett IPv4 adresser fra oppstrøms tjenere."
 
-#: option.c:394
+#: option.c:401
 msgid "Attempt to allocate sequential IP addresses to DHCP clients."
 msgstr ""
 
-#: option.c:395
+#: option.c:402
 msgid "Copy connection-track mark from queries to upstream connections."
 msgstr ""
 
-#: option.c:396
+#: option.c:403
 msgid "Allow DHCP clients to do their own DDNS updates."
 msgstr ""
 
-#: option.c:397
+#: option.c:404
 msgid "Send router-advertisements for interfaces doing DHCPv6"
 msgstr ""
 
-#: option.c:398
+#: option.c:405
+msgid "Always send frequent router-advertisements"
+msgstr ""
+
+#: option.c:406
 msgid "Specify DUID_EN-type DHCPv6 server DUID"
 msgstr ""
 
-#: option.c:399
+#: option.c:407
 #, fuzzy
 msgid "Specify host (A/AAAA and PTR) records"
 msgstr "Spesifiser en MX post."
 
-#: option.c:400
+#: option.c:408
 #, fuzzy
 msgid "Specify arbitrary DNS resource record"
 msgstr "Spesifiser TXT DNS post."
 
-#: option.c:401
+#: option.c:409
 #, fuzzy
 msgid "Bind to interfaces in use - check for new interfaces"
 msgstr "ukjent tilknytning (interface) %s"
 
-#: option.c:402
+#: option.c:410
 msgid "Export local names to global DNS"
 msgstr ""
 
-#: option.c:403
+#: option.c:411
 msgid "Domain to export to global DNS"
 msgstr ""
 
-#: option.c:404
+#: option.c:412
 msgid "Set TTL for authoritative replies"
 msgstr ""
 
-#: option.c:405
+#: option.c:413
 msgid "Set authoritive zone information"
 msgstr ""
 
-#: option.c:406
+#: option.c:414
 msgid "Secondary authoritative nameservers for forward domains"
 msgstr ""
 
-#: option.c:407
+#: option.c:415
 msgid "Peers which are allowed to do zone transfer"
 msgstr ""
 
-#: option.c:408
+#: option.c:416
 msgid "Specify ipsets to which matching domains should be added"
 msgstr ""
 
-#: option.c:410
+#: option.c:417
+msgid "Specify a domain and address range for sythesised names"
+msgstr ""
+
+#: option.c:419
 msgid "Specify DHCPv6 prefix class"
 msgstr ""
 
-#: option.c:596
+#: option.c:605
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -647,305 +659,314 @@
 "Bruk: dnsmasq [opsjoner]\n"
 "\n"
 
-#: option.c:598
+#: option.c:607
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr "Bruk korte opsjoner kun på kommandolinjen.\n"
 
-#: option.c:600
+#: option.c:609
 #, fuzzy, c-format
 msgid "Valid options are:\n"
 msgstr "Gyldige opsjoner er :\n"
 
-#: option.c:650 option.c:654
+#: option.c:659 option.c:663
 msgid "bad port"
 msgstr "dårlig port"
 
-#: option.c:681 option.c:713
+#: option.c:690 option.c:722
 msgid "interface binding not supported"
 msgstr ""
 
-#: option.c:690 option.c:3179
+#: option.c:699 option.c:3275
 #, fuzzy
 msgid "bad interface name"
 msgstr "dårlig MX navn"
 
-#: option.c:720
+#: option.c:729
 #, fuzzy
 msgid "bad address"
 msgstr "les %s - %d adresser"
 
-#: option.c:847
+#: option.c:863
 msgid "unsupported encapsulation for IPv6 option"
 msgstr ""
 
-#: option.c:861
+#: option.c:877
 msgid "bad dhcp-option"
 msgstr "dårlig dhcp-opsjon"
 
-#: option.c:929
+#: option.c:945
 #, fuzzy
 msgid "bad IP address"
 msgstr "les %s - %d adresser"
 
-#: option.c:932 option.c:1070 option.c:2549
+#: option.c:948 option.c:1086 option.c:2620
 #, fuzzy
 msgid "bad IPv6 address"
 msgstr "les %s - %d adresser"
 
-#: option.c:1097 option.c:1191
+#: option.c:1113 option.c:1207
 msgid "bad domain in dhcp-option"
 msgstr "dårlig domene i dhcp-opsjon"
 
-#: option.c:1229
+#: option.c:1245
 msgid "dhcp-option too long"
 msgstr "dhcp-opsjon for lang"
 
-#: option.c:1236
+#: option.c:1252
 msgid "illegal dhcp-match"
 msgstr ""
 
-#: option.c:1298
+#: option.c:1314
 msgid "illegal repeated flag"
 msgstr ""
 
-#: option.c:1306
+#: option.c:1322
 msgid "illegal repeated keyword"
 msgstr ""
 
-#: option.c:1358 option.c:3702
+#: option.c:1374 option.c:3802
 #, fuzzy, c-format
 msgid "cannot access directory %s: %s"
 msgstr "kan ikke lese %s: %s"
 
-#: option.c:1390 tftp.c:474
+#: option.c:1406 tftp.c:487
 #, fuzzy, c-format
 msgid "cannot access %s: %s"
 msgstr "kan ikke lese %s: %s"
 
-#: option.c:1426
+#: option.c:1442
 msgid "setting log facility is not possible under Android"
 msgstr ""
 
-#: option.c:1435
+#: option.c:1451
 msgid "bad log facility"
 msgstr ""
 
-#: option.c:1484
+#: option.c:1500
 msgid "bad MX preference"
 msgstr "dårlig MX preferanse"
 
-#: option.c:1489
+#: option.c:1505
 msgid "bad MX name"
 msgstr "dårlig MX navn"
 
-#: option.c:1503
+#: option.c:1519
 msgid "bad MX target"
 msgstr "dårlig MX mål"
 
-#: option.c:1515
+#: option.c:1531
 msgid "cannot run scripts under uClinux"
 msgstr ""
 
-#: option.c:1517
+#: option.c:1533
 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
 msgstr ""
 
-#: option.c:1521
+#: option.c:1537
 msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
 msgstr ""
 
-#: option.c:1631
+#: option.c:1739 option.c:1800
 #, fuzzy
 msgid "bad prefix"
 msgstr "dårlig port"
 
-#: option.c:2043
+#: option.c:2094
 msgid "recompile with HAVE_IPSET defined to enable ipset directives"
 msgstr ""
 
-#: option.c:2223
+#: option.c:2274
 #, fuzzy
 msgid "bad port range"
 msgstr "dårlig port"
 
-#: option.c:2239
+#: option.c:2290
 msgid "bad bridge-interface"
 msgstr ""
 
-#: option.c:2297
+#: option.c:2350
 msgid "only one tag allowed"
 msgstr ""
 
-#: option.c:2317 option.c:2329 option.c:2461
+#: option.c:2370 option.c:2382 option.c:2491 option.c:2532
 msgid "bad dhcp-range"
 msgstr "dårlig dhcp-område"
 
-#: option.c:2344
+#: option.c:2397
 msgid "inconsistent DHCP range"
 msgstr "ikke konsistent DHCP område"
 
-#: option.c:2402
-msgid "prefix must be exactly 64 for RA subnets"
+#: option.c:2459
+msgid "prefix length must be exactly 64 for RA subnets"
 msgstr ""
 
-#: option.c:2404
-msgid "prefix must be exactly 64 for subnet constructors"
+#: option.c:2461
+msgid "prefix length must be exactly 64 for subnet constructors"
 msgstr ""
 
-#: option.c:2407
-msgid "prefix must be at least 64"
+#: option.c:2465
+msgid "prefix length must be at least 64"
 msgstr ""
 
-#: option.c:2412
+#: option.c:2468
 #, fuzzy
 msgid "inconsistent DHCPv6 range"
 msgstr "ikke konsistent DHCP område"
 
-#: option.c:2519 option.c:2567
+#: option.c:2479
+msgid "prefix must be zero with \"constructor:\" argument"
+msgstr ""
+
+#: option.c:2590 option.c:2638
 #, fuzzy
 msgid "bad hex constant"
 msgstr "dårlig dhcp-vert"
 
-#: option.c:2541
+#: option.c:2612
 msgid "cannot match tags in --dhcp-host"
 msgstr ""
 
-#: option.c:2589
+#: option.c:2660
 #, fuzzy, c-format
 msgid "duplicate dhcp-host IP address %s"
 msgstr "dubliserte IP adresser i %s dhcp-config direktiv."
 
-#: option.c:2645
+#: option.c:2716
 #, fuzzy
 msgid "bad DHCP host name"
 msgstr "dårlig MX navn"
 
-#: option.c:2727
+#: option.c:2798
 #, fuzzy
 msgid "bad tag-if"
 msgstr "dårlig MX mål"
 
-#: option.c:3051 option.c:3379
+#: option.c:3122 option.c:3479
 msgid "invalid port number"
 msgstr "ugyldig portnummer"
 
-#: option.c:3113
+#: option.c:3184
 #, fuzzy
 msgid "bad dhcp-proxy address"
 msgstr "les %s - %d adresser"
 
-#: option.c:3124
+#: option.c:3210
+#, fuzzy
+msgid "Bad dhcp-relay"
+msgstr "dårlig dhcp-område"
+
+#: option.c:3220
 msgid "bad DUID"
 msgstr ""
 
-#: option.c:3166
+#: option.c:3262
 #, fuzzy
 msgid "invalid alias range"
 msgstr "ugyldig vekt"
 
-#: option.c:3205
+#: option.c:3305
 msgid "bad CNAME"
 msgstr ""
 
-#: option.c:3210
+#: option.c:3310
 msgid "duplicate CNAME"
 msgstr ""
 
-#: option.c:3230
+#: option.c:3330
 #, fuzzy
 msgid "bad PTR record"
 msgstr "dårlig SRV post"
 
-#: option.c:3261
+#: option.c:3361
 #, fuzzy
 msgid "bad NAPTR record"
 msgstr "dårlig SRV post"
 
-#: option.c:3295
+#: option.c:3395
 #, fuzzy
 msgid "bad RR record"
 msgstr "dårlig SRV post"
 
-#: option.c:3324
+#: option.c:3424
 msgid "bad TXT record"
 msgstr "dårlig TXT post"
 
-#: option.c:3365
+#: option.c:3465
 msgid "bad SRV record"
 msgstr "dårlig SRV post"
 
-#: option.c:3372
+#: option.c:3472
 msgid "bad SRV target"
 msgstr "dårlig SRV mål"
 
-#: option.c:3386
+#: option.c:3486
 msgid "invalid priority"
 msgstr "ugyldig prioritet"
 
-#: option.c:3393
+#: option.c:3493
 msgid "invalid weight"
 msgstr "ugyldig vekt"
 
-#: option.c:3417
+#: option.c:3517
 #, fuzzy
 msgid "Bad host-record"
 msgstr "dårlig SRV post"
 
-#: option.c:3434
+#: option.c:3534
 #, fuzzy
 msgid "Bad name in host-record"
 msgstr "dårlig navn i %s"
 
-#: option.c:3464
+#: option.c:3564
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr ""
 
-#: option.c:3522
+#: option.c:3622
 msgid "missing \""
 msgstr "mangler \""
 
-#: option.c:3579
+#: option.c:3679
 msgid "bad option"
 msgstr "dårlig opsjon"
 
-#: option.c:3581
+#: option.c:3681
 msgid "extraneous parameter"
 msgstr "overflødig parameter"
 
-#: option.c:3583
+#: option.c:3683
 msgid "missing parameter"
 msgstr "mangler parameter"
 
-#: option.c:3590
+#: option.c:3690
 msgid "error"
 msgstr "feil"
 
-#: option.c:3592
+#: option.c:3692
 #, fuzzy, c-format
 msgid " at line %d of %s"
 msgstr "%s på linje %d av %%s"
 
-#: option.c:3656 tftp.c:648
+#: option.c:3756 tftp.c:661
 #, c-format
 msgid "cannot read %s: %s"
 msgstr "kan ikke lese %s: %s"
 
-#: option.c:3823 option.c:3859
+#: option.c:3923 option.c:3959
 #, fuzzy, c-format
 msgid "read %s"
 msgstr "leser %s"
 
-#: option.c:3915
+#: option.c:4015
 msgid "junk found in command line"
 msgstr ""
 
-#: option.c:3950
+#: option.c:4050
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr "Dnsmasq versjon %s %s\n"
 
-#: option.c:3951
+#: option.c:4051
 #, fuzzy, c-format
 msgid ""
 "Compile time options: %s\n"
@@ -954,62 +975,62 @@
 "Kompileringsopsjoner %s\n"
 "\n"
 
-#: option.c:3952
+#: option.c:4052
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr "Denne programvaren kommer med ABSOLUTT INGEN GARANTI.\n"
 
-#: option.c:3953
+#: option.c:4053
 #, c-format
 msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
 msgstr "DNsmasq er fri programvare, du er velkommen til å redistribuere den\n"
 
-#: option.c:3954
+#: option.c:4054
 #, fuzzy, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr "under vilkårene gitt i GNU General Public License, versjon 2.\n"
 
-#: option.c:3965
+#: option.c:4065
 msgid "try --help"
 msgstr ""
 
-#: option.c:3967
+#: option.c:4067
 msgid "try -w"
 msgstr ""
 
-#: option.c:3969
+#: option.c:4069
 #, fuzzy, c-format
 msgid "bad command line options: %s"
 msgstr "dårlige kommandlinje opsjoner: %s."
 
-#: option.c:4018
+#: option.c:4118
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "klarer ikke å få vertsnavn: %s"
 
-#: option.c:4046
+#: option.c:4146
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr "kun en resolv.conf fil tillat i no-poll modus."
 
-#: option.c:4056
+#: option.c:4156
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr "må ha nøyaktig en resolv.conf å lese domene fra."
 
-#: option.c:4059 network.c:1039 dhcp.c:794
+#: option.c:4159 network.c:1178 dhcp.c:768
 #, fuzzy, c-format
 msgid "failed to read %s: %s"
 msgstr "feilet å lese %s: %s"
 
-#: option.c:4076
+#: option.c:4176
 #, c-format
 msgid "no search directive found in %s"
 msgstr "intet søke direktiv funnet i %s"
 
-#: option.c:4097
+#: option.c:4197
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr ""
 
-#: option.c:4101
+#: option.c:4201
 msgid "syntax check OK"
 msgstr ""
 
@@ -1028,104 +1049,109 @@
 msgid "possible DNS-rebind attack detected: %s"
 msgstr ""
 
-#: network.c:414
+#: forward.c:1216
+#, fuzzy, c-format
+msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
+
+#: network.c:551
 #, fuzzy, c-format
 msgid "failed to create listening socket for %s: %s"
 msgstr "feilet å lage lytte socket: %s"
 
-#: network.c:743
+#: network.c:882
 #, fuzzy, c-format
 msgid "interface %s failed to join DHCPv6 multicast group: %s"
 msgstr "feilet å binde DHCP tjener socket: %s"
 
-#: network.c:937
+#: network.c:1076
 #, fuzzy, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr "feilet å binde lytte socket for %s: %s"
 
-#: network.c:974
+#: network.c:1113
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr "ignorerer navnetjener %s - lokal tilknytning"
 
-#: network.c:985
+#: network.c:1124
 #, fuzzy, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr "ignorerer navnetjener %s - kan ikke lage/dinde socket: %s"
 
-#: network.c:1002
+#: network.c:1141
 msgid "unqualified"
 msgstr "ikke kvalifisert"
 
-#: network.c:1002
+#: network.c:1141
 msgid "names"
 msgstr ""
 
-#: network.c:1004
+#: network.c:1143
 msgid "default"
 msgstr ""
 
-#: network.c:1006
+#: network.c:1145
 msgid "domain"
 msgstr "domene"
 
-#: network.c:1009
+#: network.c:1148
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr "benytter lokale adresser kun for %s %s"
 
-#: network.c:1011
+#: network.c:1150
 #, fuzzy, c-format
 msgid "using standard nameservers for %s %s"
 msgstr "benytter navnetjener %s#%d for %s %s"
 
-#: network.c:1013
+#: network.c:1152
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr "benytter navnetjener %s#%d for %s %s"
 
-#: network.c:1016
+#: network.c:1155
 #, fuzzy, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr "benytter navnetjener %s#%d"
 
-#: network.c:1018
+#: network.c:1157
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr "benytter navnetjener %s#%d"
 
-#: dnsmasq.c:131
+#: dnsmasq.c:134
 #, fuzzy
 msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
 msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h"
 
-#: dnsmasq.c:136
+#: dnsmasq.c:139
 msgid "Cannot use --conntrack AND --query-port"
 msgstr ""
 
-#: dnsmasq.c:139
+#: dnsmasq.c:142
 #, fuzzy
 msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
 msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h"
 
-#: dnsmasq.c:144
+#: dnsmasq.c:147
 msgid "asychronous logging is not available under Solaris"
 msgstr ""
 
-#: dnsmasq.c:149
+#: dnsmasq.c:152
 msgid "asychronous logging is not available under Android"
 msgstr ""
 
-#: dnsmasq.c:154
+#: dnsmasq.c:157
 #, fuzzy
 msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
 msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h"
 
-#: dnsmasq.c:164
+#: dnsmasq.c:167
 msgid "zone serial must be configured in --auth-soa"
 msgstr ""
 
-#: dnsmasq.c:186
+#: dnsmasq.c:185
 msgid "dhcp-range constructor not available on this platform"
 msgstr ""
 
@@ -1143,428 +1169,433 @@
 msgid "unknown interface %s"
 msgstr "ukjent tilknytning (interface) %s"
 
-#: dnsmasq.c:274 dnsmasq.c:860
+#: dnsmasq.c:275 dnsmasq.c:870
 #, c-format
 msgid "DBus error: %s"
 msgstr "DBus feil: %s"
 
-#: dnsmasq.c:277
+#: dnsmasq.c:278
 msgid "DBus not available: set HAVE_DBUS in src/config.h"
 msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h"
 
-#: dnsmasq.c:305
+#: dnsmasq.c:306
 #, c-format
 msgid "unknown user or group: %s"
 msgstr ""
 
-#: dnsmasq.c:360
+#: dnsmasq.c:361
 #, c-format
 msgid "cannot chdir to filesystem root: %s"
 msgstr ""
 
-#: dnsmasq.c:597
+#: dnsmasq.c:598
 #, fuzzy, c-format
 msgid "started, version %s DNS disabled"
 msgstr "startet, versjon %s mellomlager deaktivert"
 
-#: dnsmasq.c:599
+#: dnsmasq.c:600
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr "startet, versjon %s mellomlager størrelse %d"
 
-#: dnsmasq.c:601
+#: dnsmasq.c:602
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr "startet, versjon %s mellomlager deaktivert"
 
-#: dnsmasq.c:603
+#: dnsmasq.c:604
 #, c-format
 msgid "compile time options: %s"
 msgstr "kompilerings opsjoner: %s"
 
-#: dnsmasq.c:609
+#: dnsmasq.c:610
 msgid "DBus support enabled: connected to system bus"
 msgstr "DBus støtte aktivert: koblet til system buss"
 
-#: dnsmasq.c:611
+#: dnsmasq.c:612
 msgid "DBus support enabled: bus connection pending"
 msgstr "DBus støtte aktivert: avventer buss tilkobling"
 
-#: dnsmasq.c:616
+#: dnsmasq.c:617
 #, fuzzy, c-format
 msgid "warning: failed to change owner of %s: %s"
 msgstr "feilet å laste navn fra %s: %s"
 
-#: dnsmasq.c:620
+#: dnsmasq.c:621
 msgid "setting --bind-interfaces option because of OS limitations"
 msgstr "setter --bind-interfaces opsjon på grunn av OS begrensninger"
 
-#: dnsmasq.c:625
+#: dnsmasq.c:626
 #, c-format
 msgid "warning: interface %s does not currently exist"
 msgstr "advarsel: nettverkskort %s eksisterer ikke for tiden"
 
-#: dnsmasq.c:630
+#: dnsmasq.c:631
 msgid "warning: ignoring resolv-file flag because no-resolv is set"
 msgstr ""
 
-#: dnsmasq.c:633
+#: dnsmasq.c:634
 #, fuzzy
 msgid "warning: no upstream servers configured"
 msgstr "setter oppstrøms tjener fra DBus"
 
-#: dnsmasq.c:637
+#: dnsmasq.c:638
 #, c-format
 msgid "asynchronous logging enabled, queue limit is %d messages"
 msgstr ""
 
-#: dnsmasq.c:652
+#: dnsmasq.c:659
 msgid "IPv6 router advertisement enabled"
 msgstr ""
 
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 msgid "root is "
 msgstr ""
 
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 #, fuzzy
 msgid "enabled"
 msgstr "deaktivert"
 
-#: dnsmasq.c:671
+#: dnsmasq.c:678
 msgid "secure mode"
 msgstr ""
 
-#: dnsmasq.c:697
+#: dnsmasq.c:704
 #, c-format
 msgid "restricting maximum simultaneous TFTP transfers to %d"
 msgstr ""
 
-#: dnsmasq.c:862
+#: dnsmasq.c:872
 msgid "connected to system DBus"
 msgstr "tilkoblet til system DBus"
 
-#: dnsmasq.c:1007
+#: dnsmasq.c:1017
 #, c-format
 msgid "cannot fork into background: %s"
 msgstr ""
 
-#: dnsmasq.c:1010
+#: dnsmasq.c:1020
 #, fuzzy, c-format
 msgid "failed to create helper: %s"
 msgstr "feilet å lese %s: %s"
 
-#: dnsmasq.c:1013
+#: dnsmasq.c:1023
 #, c-format
 msgid "setting capabilities failed: %s"
 msgstr ""
 
-#: dnsmasq.c:1016
+#: dnsmasq.c:1026
 #, fuzzy, c-format
 msgid "failed to change user-id to %s: %s"
 msgstr "feilet å laste navn fra %s: %s"
 
-#: dnsmasq.c:1019
+#: dnsmasq.c:1029
 #, fuzzy, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr "feilet å laste navn fra %s: %s"
 
-#: dnsmasq.c:1022
+#: dnsmasq.c:1032
 #, fuzzy, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr "feilet å lese %s: %s"
 
-#: dnsmasq.c:1025
+#: dnsmasq.c:1035
 #, fuzzy, c-format
 msgid "cannot open log %s: %s"
 msgstr "kan ikke åpne %s:%s"
 
-#: dnsmasq.c:1028
+#: dnsmasq.c:1038
 #, fuzzy, c-format
 msgid "failed to load Lua script: %s"
 msgstr "feilet å laste %s: %s"
 
-#: dnsmasq.c:1031
+#: dnsmasq.c:1041
 #, c-format
 msgid "TFTP directory %s inaccessible: %s"
 msgstr ""
 
-#: dnsmasq.c:1095
+#: dnsmasq.c:1105
 #, c-format
 msgid "script process killed by signal %d"
 msgstr ""
 
-#: dnsmasq.c:1099
+#: dnsmasq.c:1109
 #, c-format
 msgid "script process exited with status %d"
 msgstr ""
 
-#: dnsmasq.c:1103
+#: dnsmasq.c:1113
 #, fuzzy, c-format
 msgid "failed to execute %s: %s"
 msgstr "feilet å få tilgang til %s: %s"
 
-#: dnsmasq.c:1148
+#: dnsmasq.c:1158
 msgid "exiting on receipt of SIGTERM"
 msgstr "avslutter etter mottak av SIGTERM"
 
-#: dnsmasq.c:1176
+#: dnsmasq.c:1186
 #, fuzzy, c-format
 msgid "failed to access %s: %s"
 msgstr "feilet å få tilgang til %s: %s"
 
-#: dnsmasq.c:1206
+#: dnsmasq.c:1216
 #, c-format
 msgid "reading %s"
 msgstr "leser %s"
 
-#: dnsmasq.c:1217
+#: dnsmasq.c:1227
 #, fuzzy, c-format
 msgid "no servers found in %s, will retry"
 msgstr "intet søke direktiv funnet i %s"
 
-#: dhcp.c:49
+#: dhcp.c:53
 #, c-format
 msgid "cannot create DHCP socket: %s"
 msgstr "kan ikke lage DHCP socket: %s"
 
-#: dhcp.c:64
+#: dhcp.c:68
 #, c-format
 msgid "failed to set options on DHCP socket: %s"
 msgstr "feilet å sette opsjoner på DHCP socket: %s"
 
-#: dhcp.c:77
+#: dhcp.c:89
 #, fuzzy, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
 msgstr "feilet å sette SO_REUSEADDR på DHCP socket: %s"
 
-#: dhcp.c:89
+#: dhcp.c:101
 #, c-format
 msgid "failed to bind DHCP server socket: %s"
 msgstr "feilet å binde DHCP tjener socket: %s"
 
-#: dhcp.c:115
+#: dhcp.c:127
 #, c-format
 msgid "cannot create ICMP raw socket: %s."
 msgstr "kan ikke lage ICMP raw socket: %s"
 
-#: dhcp.c:225
+#: dhcp.c:239
 #, fuzzy, c-format
 msgid "unknown interface %s in bridge-interface"
 msgstr "ukjent tilknytning (interface) %s"
 
-#: dhcp.c:250
+#: dhcp.c:278
 #, c-format
 msgid "DHCP packet received on %s which has no address"
 msgstr ""
 
-#: dhcp.c:457
+#: dhcp.c:505
 #, c-format
 msgid "DHCP range %s -- %s is not consistent with netmask %s"
 msgstr "DHCP område %s -- %s er ikke konsistent med nettmaske %s"
 
-#: dhcp.c:832
+#: dhcp.c:806
 #, c-format
 msgid "bad line at %s line %d"
 msgstr "dårlig linje ved %s linje %d"
 
-#: dhcp.c:875
+#: dhcp.c:849
 #, c-format
 msgid "ignoring %s line %d, duplicate name or IP address"
 msgstr ""
 
+#: dhcp.c:993 rfc3315.c:2047
+#, c-format
+msgid "DHCP relay %s -> %s"
+msgstr ""
+
 #: lease.c:61
 #, fuzzy, c-format
 msgid "cannot open or create lease file %s: %s"
 msgstr "kan ikke åpne eller lage leie fil: %s"
 
-#: lease.c:133
+#: lease.c:134
 msgid "too many stored leases"
 msgstr "for mange lagrede leier"
 
-#: lease.c:164
+#: lease.c:165
 #, fuzzy, c-format
 msgid "cannot run lease-init script %s: %s"
 msgstr "kan ikke lese %s: %s"
 
-#: lease.c:170
+#: lease.c:171
 #, c-format
 msgid "lease-init script returned exit code %s"
 msgstr ""
 
-#: lease.c:339
+#: lease.c:342
 #, fuzzy, c-format
 msgid "failed to write %s: %s (retry in %us)"
 msgstr "feilet å lese %s: %s"
 
-#: lease.c:843
+#: lease.c:871
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr ""
 
-#: rfc2131.c:337
+#: rfc2131.c:338
 #, c-format
 msgid "no address range available for DHCP request %s %s"
 msgstr "ingen adresse område tilgjengelig for DHCP krav %s %s"
 
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "with subnet selector"
 msgstr "med subnet velger"
 
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "via"
 msgstr "via"
 
-#: rfc2131.c:350
+#: rfc2131.c:351
 #, fuzzy, c-format
 msgid "%u available DHCP subnet: %s/%s"
 msgstr "ingen adresse område tilgjengelig for DHCP krav %s %s"
 
-#: rfc2131.c:353 rfc3315.c:272
+#: rfc2131.c:354 rfc3315.c:292
 #, c-format
 msgid "%u available DHCP range: %s -- %s"
 msgstr ""
 
-#: rfc2131.c:382
-msgid "disabled"
-msgstr "deaktivert"
-
-#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771
-#: rfc3315.c:1017
-msgid "ignored"
-msgstr "oversett"
-
-#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814
-msgid "address in use"
-msgstr "adresse i bruk"
-
-#: rfc2131.c:452 rfc2131.c:1007
-msgid "no address available"
-msgstr "ingen adresse tilgjengelig"
-
-#: rfc2131.c:459 rfc2131.c:1154
-msgid "wrong network"
-msgstr "galt nettverk"
-
-#: rfc2131.c:474
-msgid "no address configured"
-msgstr "ingen adresse konfigurert"
-
-#: rfc2131.c:480 rfc2131.c:1204
-msgid "no leases left"
-msgstr "ingen leier igjen"
-
-#: rfc2131.c:576 rfc3315.c:428
-#, c-format
-msgid "%u client provides name: %s"
-msgstr ""
-
-#: rfc2131.c:731
+#: rfc2131.c:465
 #, fuzzy, c-format
 msgid "%u vendor class: %s"
 msgstr "DBus feil: %s"
 
-#: rfc2131.c:733
+#: rfc2131.c:467
 #, fuzzy, c-format
 msgid "%u user class: %s"
 msgstr "DBus feil: %s"
 
+#: rfc2131.c:494
+msgid "disabled"
+msgstr "deaktivert"
+
+#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813
+#: rfc3315.c:1082
+msgid "ignored"
+msgstr "oversett"
+
+#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863
+msgid "address in use"
+msgstr "adresse i bruk"
+
+#: rfc2131.c:564 rfc2131.c:1015
+msgid "no address available"
+msgstr "ingen adresse tilgjengelig"
+
+#: rfc2131.c:571 rfc2131.c:1162
+msgid "wrong network"
+msgstr "galt nettverk"
+
+#: rfc2131.c:586
+msgid "no address configured"
+msgstr "ingen adresse konfigurert"
+
+#: rfc2131.c:592 rfc2131.c:1212
+msgid "no leases left"
+msgstr "ingen leier igjen"
+
+#: rfc2131.c:687 rfc3315.c:466
+#, c-format
+msgid "%u client provides name: %s"
+msgstr ""
+
 #: rfc2131.c:792
 msgid "PXE BIS not supported"
 msgstr ""
 
-#: rfc2131.c:923 rfc3315.c:1111
+#: rfc2131.c:931 rfc3315.c:1176
 #, fuzzy, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "deaktiverer DHCP statisk adresse %s"
 
-#: rfc2131.c:944
+#: rfc2131.c:952
 msgid "unknown lease"
 msgstr "ukjent leie"
 
-#: rfc2131.c:976
+#: rfc2131.c:984
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr ""
 
-#: rfc2131.c:986
+#: rfc2131.c:994
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr ""
 
-#: rfc2131.c:989
+#: rfc2131.c:997
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr ""
 
-#: rfc2131.c:1005 rfc2131.c:1197
+#: rfc2131.c:1013 rfc2131.c:1205
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:1092
+#: rfc2131.c:1100
 msgid "wrong server-ID"
 msgstr ""
 
-#: rfc2131.c:1111
+#: rfc2131.c:1119
 msgid "wrong address"
 msgstr "gal adresse"
 
-#: rfc2131.c:1129 rfc3315.c:911
+#: rfc2131.c:1137 rfc3315.c:959
 msgid "lease not found"
 msgstr "leie ikke funnet"
 
-#: rfc2131.c:1162
+#: rfc2131.c:1170
 msgid "address not available"
 msgstr "adresse ikke tilgjengelig"
 
-#: rfc2131.c:1173
+#: rfc2131.c:1181
 msgid "static lease available"
 msgstr "statisk leie tilgjengelig"
 
-#: rfc2131.c:1177
+#: rfc2131.c:1185
 msgid "address reserved"
 msgstr "adresse reservert"
 
-#: rfc2131.c:1185
+#: rfc2131.c:1193
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr ""
 
-#: rfc2131.c:1679
+#: rfc2131.c:1701
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr ""
 
-#: rfc2131.c:1688
+#: rfc2131.c:1710
 #, fuzzy, c-format
 msgid "%u server name: %s"
 msgstr "DBus feil: %s"
 
-#: rfc2131.c:1696
+#: rfc2131.c:1718
 #, fuzzy, c-format
 msgid "%u next server: %s"
 msgstr "DBus feil: %s"
 
-#: rfc2131.c:1699
+#: rfc2131.c:1721
 #, c-format
 msgid "%u broadcast response"
 msgstr ""
 
-#: rfc2131.c:1762
+#: rfc2131.c:1784
 #, fuzzy, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr "kan ikke sende DHCP opsjon %d: ikke mer plass i pakken"
 
-#: rfc2131.c:2002
+#: rfc2131.c:2025
 msgid "PXE menu too large"
 msgstr ""
 
-#: rfc2131.c:2139 rfc3315.c:1332
+#: rfc2131.c:2162 rfc3315.c:1420
 #, fuzzy, c-format
 msgid "%u requested options: %s"
 msgstr "kompilerings opsjoner: %s"
 
-#: rfc2131.c:2415
+#: rfc2131.c:2442
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr ""
@@ -1574,7 +1605,7 @@
 msgid "cannot create netlink socket: %s"
 msgstr "kan ikke binde netlink socket: %s"
 
-#: netlink.c:354
+#: netlink.c:363
 #, fuzzy, c-format
 msgid "netlink returns error: %s"
 msgstr "DBus feil: %s"
@@ -1583,53 +1614,53 @@
 msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
 msgstr "forsøk på å sette en IPv6 tjener adresse via DBus - ingen IPv6 støtte"
 
-#: dbus.c:308 dbus.c:504
+#: dbus.c:523
 msgid "setting upstream servers from DBus"
 msgstr "setter oppstrøms tjener fra DBus"
 
-#: dbus.c:561
+#: dbus.c:570
 msgid "could not register a DBus message handler"
 msgstr "kunne ikke registrere en DBus meldingshåndterer"
 
-#: bpf.c:197
+#: bpf.c:245
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr "kan ikke lage DHCP BPF socket: %s"
 
-#: bpf.c:225
+#: bpf.c:273
 #, fuzzy, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr "DHCP krav for ikke støttet maskinvare type (%d) mottatt på %s"
 
-#: helper.c:145
+#: helper.c:151
 msgid "lease() function missing in Lua script"
 msgstr ""
 
-#: tftp.c:290
+#: tftp.c:303
 msgid "unable to get free port for TFTP"
 msgstr ""
 
-#: tftp.c:306
+#: tftp.c:319
 #, c-format
 msgid "unsupported request from %s"
 msgstr ""
 
-#: tftp.c:420
+#: tftp.c:433
 #, fuzzy, c-format
 msgid "file %s not found"
 msgstr "leie ikke funnet"
 
-#: tftp.c:529
+#: tftp.c:542
 #, c-format
 msgid "error %d %s received from %s"
 msgstr ""
 
-#: tftp.c:571
+#: tftp.c:584
 #, fuzzy, c-format
 msgid "failed sending %s to %s"
 msgstr "feilet å lese %s: %s"
 
-#: tftp.c:571
+#: tftp.c:584
 #, c-format
 msgid "sent %s to %s"
 msgstr ""
@@ -1653,187 +1684,203 @@
 msgid "Conntrack connection mark retrieval failed: %s"
 msgstr ""
 
-#: dhcp6.c:49
+#: dhcp6.c:59
 #, fuzzy, c-format
 msgid "cannot create DHCPv6 socket: %s"
 msgstr "kan ikke lage DHCP socket: %s"
 
-#: dhcp6.c:62
+#: dhcp6.c:80
 #, fuzzy, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s"
 msgstr "feilet å sette SO_REUSEADDR på DHCP socket: %s"
 
-#: dhcp6.c:74
+#: dhcp6.c:92
 #, fuzzy, c-format
 msgid "failed to bind DHCPv6 server socket: %s"
 msgstr "feilet å binde DHCP tjener socket: %s"
 
-#: rfc3315.c:135
+#: rfc3315.c:149
 #, fuzzy, c-format
 msgid "no address range available for DHCPv6 request from relay at %s"
 msgstr "ingen adresse område tilgjengelig for DHCP krav %s %s"
 
-#: rfc3315.c:144
+#: rfc3315.c:158
 #, fuzzy, c-format
 msgid "no address range available for DHCPv6 request via %s"
 msgstr "ingen adresse område tilgjengelig for DHCP krav %s %s"
 
-#: rfc3315.c:269
+#: rfc3315.c:289
 #, fuzzy, c-format
 msgid "%u available DHCPv6 subnet: %s/%d"
 msgstr "ingen adresse område tilgjengelig for DHCP krav %s %s"
 
-#: rfc3315.c:350
+#: rfc3315.c:370
 #, fuzzy, c-format
 msgid "%u vendor class: %u"
 msgstr "DBus feil: %s"
 
-#: rfc3315.c:609
+#: rfc3315.c:418
+#, fuzzy, c-format
+msgid "%u client MAC address: %s"
+msgstr "ingen tilknytning (interface) med adresse %s"
+
+#: rfc3315.c:650
 #, fuzzy, c-format
 msgid "unknown prefix-class %d"
 msgstr "ukjent leie"
 
-#: rfc3315.c:741 rfc3315.c:854
+#: rfc3315.c:781 rfc3315.c:903
 msgid "success"
 msgstr ""
 
-#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864
+#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913
 #, fuzzy
 msgid "no addresses available"
 msgstr "ingen adresse tilgjengelig"
 
-#: rfc3315.c:806
+#: rfc3315.c:855
 #, fuzzy
 msgid "address unavailable"
 msgstr "adresse ikke tilgjengelig"
 
-#: rfc3315.c:841
+#: rfc3315.c:890
 msgid "not on link"
 msgstr ""
 
-#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150
+#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215
 msgid "no binding found"
 msgstr ""
 
-#: rfc3315.c:948
+#: rfc3315.c:1001
 msgid "deprecated"
 msgstr ""
 
-#: rfc3315.c:951
+#: rfc3315.c:1006
 #, fuzzy
 msgid "address invalid"
 msgstr "adresse i bruk"
 
-#: rfc3315.c:992
+#: rfc3315.c:1048
 msgid "confirm failed"
 msgstr ""
 
-#: rfc3315.c:1003
+#: rfc3315.c:1059
 #, fuzzy
 msgid "all addresses still on link"
 msgstr "dårlig adresse ved %s linje %d"
 
-#: rfc3315.c:1082
+#: rfc3315.c:1147
 msgid "release received"
 msgstr ""
 
+#: rfc3315.c:2038
+msgid "Cannot multicast to DHCPv6 server without correct interface"
+msgstr ""
+
 #: dhcp-common.c:145
 #, c-format
 msgid "Ignoring duplicate dhcp-option %d"
 msgstr ""
 
-#: dhcp-common.c:215
+#: dhcp-common.c:222
 #, c-format
 msgid "%u tags: %s"
 msgstr ""
 
-#: dhcp-common.c:296
+#: dhcp-common.c:407
 #, c-format
 msgid "%s has more than one address in hostsfile, using %s for DHCP"
 msgstr ""
 
-#: dhcp-common.c:319
+#: dhcp-common.c:430
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr "dubliserte IP adresser i %s (%s) i dhcp-config direktiv"
 
-#: dhcp-common.c:367
+#: dhcp-common.c:484
 #, fuzzy, c-format
 msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s"
 msgstr "feilet å sette SO_REUSEADDR på DHCP socket: %s"
 
-#: dhcp-common.c:489
+#: dhcp-common.c:606
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr ""
 
-#: dhcp-common.c:500
+#: dhcp-common.c:617
 #, c-format
 msgid "Known DHCPv6 options:\n"
 msgstr ""
 
-#: dhcp-common.c:693
+#: dhcp-common.c:814
 msgid ", prefix deprecated"
 msgstr ""
 
-#: dhcp-common.c:696
+#: dhcp-common.c:817
 #, c-format
 msgid ", lease time "
 msgstr ""
 
-#: dhcp-common.c:727
+#: dhcp-common.c:849
 #, c-format
 msgid "%s stateless on %s%.0s%.0s%s"
 msgstr ""
 
-#: dhcp-common.c:729
+#: dhcp-common.c:851
 #, fuzzy, c-format
 msgid "%s, static leases only on %.0s%s%s%.0s"
 msgstr "DHCP, statisk leie kun på %.0s%s, leie tid %s"
 
-#: dhcp-common.c:731
+#: dhcp-common.c:853
 #, c-format
 msgid "%s, proxy on subnet %.0s%s%.0s%.0s"
 msgstr ""
 
-#: dhcp-common.c:732
+#: dhcp-common.c:854
 #, fuzzy, c-format
 msgid "%s, IP range %s -- %s%s%.0s"
 msgstr "DHCP, IP område %s -- %s, leie tid %s"
 
-#: dhcp-common.c:739
+#: dhcp-common.c:861
 #, c-format
 msgid "DHCPv4-derived IPv6 names on %s%s"
 msgstr ""
 
-#: dhcp-common.c:742
+#: dhcp-common.c:864
 #, fuzzy, c-format
 msgid "router advertisement on %s%s"
 msgstr "DHCP, statisk leie kun på %.0s%s, leie tid %s"
 
-#: radv.c:87
+#: dhcp-common.c:875
+#, c-format
+msgid "DHCP relay from %s to %s via %s"
+msgstr ""
+
+#: dhcp-common.c:877
+#, c-format
+msgid "DHCP relay from %s to %s"
+msgstr ""
+
+#: radv.c:93
 #, fuzzy, c-format
 msgid "cannot create ICMPv6 socket: %s"
 msgstr "kan ikke lage DHCP socket: %s"
 
-#: auth.c:402
+#: auth.c:435
 #, c-format
 msgid "ignoring zone transfer request from %s"
 msgstr ""
 
-#: ipset.c:71
+#: ipset.c:95
 #, fuzzy, c-format
 msgid "failed to find kernel version: %s"
 msgstr "feilet å binde DHCP tjener socket: %s"
 
-#: ipset.c:90
+#: ipset.c:114
 #, fuzzy, c-format
 msgid "failed to create IPset control socket: %s"
 msgstr "feilet å lage lytte socket: %s"
 
-#~ msgid "no interface with address %s"
-#~ msgstr "ingen tilknytning (interface) med adresse %s"
-
 #~ msgid "duplicate IP address %s in dhcp-config directive."
 #~ msgstr "dubliserte IP adresser i %s dhcp-config direktiv."
 
diff --git a/po/pl.po b/po/pl.po
index 437f324..61d72e9 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -10,15 +10,15 @@
 "Project-Id-Version: pl\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-06-10 20:57+0100\n"
-"PO-Revision-Date: 2013-04-02 01:44+0200\n"
+"PO-Revision-Date: 2013-10-01 23:23+0200\n"
 "Last-Translator: Jan Psota <jasiupsota@gmail.com>\n"
 "Language-Team: polski <>\n"
-"Language: \n"
+"Language: pl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: poedit-1.4.6.1\n"
+"Content-Transfer-Encoding: 8bits\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: Gtranslator 2.91.6\n"
 "X-Language: pl_PL\n"
 
 #: cache.c:808
@@ -26,17 +26,17 @@
 msgid "failed to load names from %s: %s"
 msgstr "nie potrafię wczytać nazw z %s: %s"
 
-#: cache.c:834 dhcp.c:845
+#: cache.c:834 dhcp.c:819
 #, c-format
 msgid "bad address at %s line %d"
 msgstr "błędny adres w pliku %s, w linii %d"
 
-#: cache.c:885 dhcp.c:861
+#: cache.c:885 dhcp.c:835
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "błędna nazwa w pliku %s, w linii %d"
 
-#: cache.c:892 dhcp.c:936
+#: cache.c:892 dhcp.c:910
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "wczytaÅ‚em %s - %d adresów"
@@ -45,37 +45,37 @@
 msgid "cleared cache"
 msgstr "wyczyszczono pamięć podręczną"
 
-#: cache.c:1016
+#: cache.c:984
 #, c-format
 msgid "No IPv4 address found for %s"
 msgstr "Nie znalazłem adresu IPv4 komputera %s"
 
-#: cache.c:1093
+#: cache.c:1061
 #, c-format
 msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
 msgstr "%s to nazwa CNAME, nie przypisuję jej dzierżawie DHCP %s"
 
-#: cache.c:1117
+#: cache.c:1085
 #, c-format
 msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
 msgstr "nazwa %s nie została nadana dzierżawie DHCP %s, ponieważ nazwa istnieje w %s i ma już adres %s"
 
-#: cache.c:1162
+#: cache.c:1130
 #, c-format
 msgid "time %lu"
 msgstr "czas %lu"
 
-#: cache.c:1163
+#: cache.c:1131
 #, c-format
 msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
 msgstr "wielkość pamiÄ™ci podrÄ™cznej: %d; %d z %d miejsc aktualnych wpisów użyto ponownie."
 
-#: cache.c:1165
+#: cache.c:1133
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr "%u zapytań przesłanych dalej, %u odpowiedzi udzielonych samodzielnie"
 
-#: cache.c:1188
+#: cache.c:1156
 #, c-format
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr "serwer %s#%d: %u zapytań wysłanych, %u ponowionych lub nieudanych"
@@ -85,543 +85,555 @@
 msgid "failed to seed the random number generator: %s"
 msgstr "brak możliwości użycia generatora liczb losowych: %s"
 
-#: util.c:189
+#: util.c:192
 msgid "failed to allocate memory"
 msgstr "nie udało się przydzielić pamięci"
 
-#: util.c:227 option.c:531
+#: util.c:230 option.c:540
 msgid "could not get memory"
 msgstr "nie można dostać pamięci"
 
-#: util.c:237
+#: util.c:240
 #, c-format
 msgid "cannot create pipe: %s"
 msgstr "bÅ‚Ä…d podczas próby utworzenia potoku: %s"
 
-#: util.c:245
+#: util.c:248
 #, c-format
 msgid "failed to allocate %d bytes"
 msgstr "niemożliwość przydzielenia %d bajtów pamiÄ™ci"
 
-#: util.c:400
+#: util.c:403
 #, c-format
 msgid "infinite"
 msgstr "nieskończona"
 
-#: option.c:286
+#: option.c:292
 msgid "Specify local address(es) to listen on."
 msgstr "Wskazanie adresów, na których należy nasÅ‚uchiwać."
 
-#: option.c:287
+#: option.c:293
 msgid "Return ipaddr for all hosts in specified domains."
 msgstr "Zwracanie adresu IP dla wszystkich hostów we wskazanych domenach."
 
-#: option.c:288
+#: option.c:294
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr "WyÅ‚Ä…czenie przekazywania zapytaÅ„ odwrotnych dla prywatnych zakresów IP."
 
-#: option.c:289
+#: option.c:295
 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
 msgstr "Traktowanie adresu IP jako NXDOMAIN (unieważnia ,,Verisign wildcard'')."
 
-#: option.c:290
+#: option.c:296
 #, c-format
 msgid "Specify the size of the cache in entries (defaults to %s)."
 msgstr "Wskazanie wielkości pamięci podręcznej (domyślnie: %s miejsc)."
 
-#: option.c:291
+#: option.c:297
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr "Wskazanie pliku konfiguracyjnego (domyślnie: %s)."
 
-#: option.c:292
+#: option.c:298
 msgid "Do NOT fork into the background: run in debug mode."
 msgstr "NIE twórz procesu potomnego w tle: dziaÅ‚anie w trybie debugowania."
 
-#: option.c:293
+#: option.c:299
 msgid "Do NOT forward queries with no domain part."
 msgstr "Wyłączenie przekazywania zapytań bez podanej części domenowej."
 
-#: option.c:294
+#: option.c:300
 msgid "Return self-pointing MX records for local hosts."
 msgstr "Zwracanie samowskazujÄ…cego rekordu MX dla lokalnych hostów."
 
-#: option.c:295
+#: option.c:301
 msgid "Expand simple names in /etc/hosts with domain-suffix."
 msgstr "Rozwijanie prostych nazw z /etc/hosts przyrostkiem domenowym."
 
-#: option.c:296
+#: option.c:302
 msgid "Don't forward spurious DNS requests from Windows hosts."
 msgstr "WyÅ‚Ä…czenie przekazywania pozornych zapytaÅ„ DNS z komputerów dziaÅ‚ajÄ…cych pod Windows."
 
-#: option.c:297
+#: option.c:303
 msgid "Enable DHCP in the range given with lease duration."
 msgstr "WÅ‚Ä…czenie serwera DHCP dla wskazanego zakresu adresów."
 
-#: option.c:298
+#: option.c:304
 #, c-format
 msgid "Change to this group after startup (defaults to %s)."
 msgstr "Po uruchomieniu zmiana grupy procesu na podaną (domyślnie: %s)."
 
-#: option.c:299
+#: option.c:305
 msgid "Set address or hostname for a specified machine."
 msgstr "Ustawienie adresu lub nazwy dla wskazanego komputera."
 
-#: option.c:300
+#: option.c:306
 msgid "Read DHCP host specs from file."
 msgstr "Wskazanie pliku z wartościami 'dhcp-host='."
 
-#: option.c:301
+#: option.c:307
 msgid "Read DHCP option specs from file."
 msgstr "Wskazanie pliku z wartościami 'dhcp-option='."
 
-#: option.c:302
+#: option.c:308
 msgid "Evaluate conditional tag expression."
 msgstr "Warunkowe ustawianie znaczników."
 
-#: option.c:303
+#: option.c:309
 #, c-format
 msgid "Do NOT load %s file."
 msgstr "NIE wczytywanie pliku %s."
 
-#: option.c:304
+#: option.c:310
 #, c-format
 msgid "Specify a hosts file to be read in addition to %s."
 msgstr "Wskazanie dodatkowego pliku 'hosts' oprócz %s."
 
-#: option.c:305
+#: option.c:311
 msgid "Specify interface(s) to listen on."
 msgstr "Interfejsy, na których nasÅ‚uchiwać."
 
-#: option.c:306
+#: option.c:312
 msgid "Specify interface(s) NOT to listen on."
 msgstr "Interfejsy, na których NIE nasÅ‚uchiwać."
 
-#: option.c:307
+#: option.c:313
 msgid "Map DHCP user class to tag."
 msgstr "Przyporządkowanie znacznika w zależności od klasy użytkownika DHCP."
 
-#: option.c:308
+#: option.c:314
 msgid "Map RFC3046 circuit-id to tag."
 msgstr "Przyporządkowanie znacznika w zależności od numeru obwodu (w rozumieniu RFC3046)."
 
-#: option.c:309
+#: option.c:315
 msgid "Map RFC3046 remote-id to tag."
 msgstr "Przyporządkowanie znacznika w zależności od numeru agenta (w rozumieniu RFC3046)."
 
-#: option.c:310
+#: option.c:316
 msgid "Map RFC3993 subscriber-id to tag."
 msgstr "Przyporządkowanie znacznika w zależności od numeru subskrybenta (w rozumieniu RFC3993)."
 
-#: option.c:311
+#: option.c:317
 msgid "Don't do DHCP for hosts with tag set."
 msgstr "WyÅ‚Ä…czenie DHCP dla hostów z okreÅ›lonym znacznikiem."
 
-#: option.c:312
+#: option.c:318
 msgid "Force broadcast replies for hosts with tag set."
 msgstr "Wymuszenie odpowiedzi w trybie rozgÅ‚oszeniowym dla hostów z okreÅ›lonym znacznikiem."
 
-#: option.c:313
+#: option.c:319
 msgid "Do NOT fork into the background, do NOT run in debug mode."
 msgstr "NIE twórz procesu potomnego w tle i NIE wÅ‚Ä…czaj trybu debugowania."
 
-#: option.c:314
+#: option.c:320
 msgid "Assume we are the only DHCP server on the local network."
 msgstr "Zakładanie, że jesteśmy jedynym serwerem DHCP w sieci lokalnej."
 
-#: option.c:315
+#: option.c:321
 #, c-format
 msgid "Specify where to store DHCP leases (defaults to %s)."
 msgstr "Ścieżka przechowywania pliku dzierżaw DHCP (domyślnie: %s)."
 
-#: option.c:316
+#: option.c:322
 msgid "Return MX records for local hosts."
 msgstr "WÅ‚Ä…czenie zwracania rekordu MX dla hostów lokalnych."
 
-#: option.c:317
+#: option.c:323
 msgid "Specify an MX record."
 msgstr "Specyfikacja rekordu MX."
 
-#: option.c:318
+#: option.c:324
 msgid "Specify BOOTP options to DHCP server."
 msgstr "Określenie opcji BOOTP serwera DHCP."
 
-#: option.c:319
+#: option.c:325
 #, c-format
 msgid "Do NOT poll %s file, reload only on SIGHUP."
 msgstr "Wyłączenie obserwowania pliku %s; ponowne odczytywanie tylko po odebraniu sygnału SIGHUP."
 
-#: option.c:320
+#: option.c:326
 msgid "Do NOT cache failed search results."
 msgstr "WyÅ‚Ä…czenie przechowywania w pamiÄ™ci podrÄ™cznej wyników nieudanych wyszukiwaÅ„."
 
-#: option.c:321
+#: option.c:327
 #, c-format
 msgid "Use nameservers strictly in the order given in %s."
 msgstr "Odpytywanie serwerów nazw w kolejnoÅ›ci ich wystÄ…pienia w %s."
 
-#: option.c:322
+#: option.c:328
 msgid "Specify options to be sent to DHCP clients."
 msgstr "Specyfikacja opcji wysyÅ‚anej do klientów DHCP."
 
-#: option.c:323
+#: option.c:329
 msgid "DHCP option sent even if the client does not request it."
 msgstr "Opcja DHCP wysyłana nawet jeżeli klient o nią nie prosi."
 
-#: option.c:324
+#: option.c:330
 msgid "Specify port to listen for DNS requests on (defaults to 53)."
 msgstr "Wskazanie portu do nasłuchiwania zapytań DNS (domyślnie: 53)."
 
-#: option.c:325
+#: option.c:331
 #, c-format
 msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
 msgstr "Maksymalna obsługiwana wielkość pakietu EDNS.0 (domyślnie: %s)."
 
-#: option.c:326
+#: option.c:332
 msgid "Log DNS queries."
 msgstr "Włączenie spisywania zapytań DNS do logu."
 
-#: option.c:327
+#: option.c:333
 msgid "Force the originating port for upstream DNS queries."
 msgstr "Wymuszenie użycia wskazanego portu UDP do odpytywania nadrzÄ™dnych serwerów DNS i odbierania od nich odpowiedzi."
 
-#: option.c:328
+#: option.c:334
 msgid "Do NOT read resolv.conf."
 msgstr "Wyłączenie czytania pliku resolv.conf."
 
-#: option.c:329
+#: option.c:335
 #, c-format
 msgid "Specify path to resolv.conf (defaults to %s)."
 msgstr "Wskazanie położenia pliku resolv.conf (domyślnie: %s)."
 
-#: option.c:330
+#: option.c:336
 msgid "Specify address(es) of upstream servers with optional domains."
 msgstr "Wskazywanie adresów serwerów nazw, opcjonalnie z przypisaniem do domeny."
 
-#: option.c:331
+#: option.c:337
 msgid "Never forward queries to specified domains."
 msgstr "Wyłączenie przekazywania zapytań do wskazanych domen."
 
-#: option.c:332
+#: option.c:338
 msgid "Specify the domain to be assigned in DHCP leases."
 msgstr "Wskazanie domeny dla serwera DHCP."
 
-#: option.c:333
+#: option.c:339
 msgid "Specify default target in an MX record."
 msgstr "Określenie domyślnego celu w rekordzie MX."
 
-#: option.c:334
+#: option.c:340
 msgid "Specify time-to-live in seconds for replies from /etc/hosts."
 msgstr "Określenie (w sekundach) czasu ważności odpowiedzi udzielonych na podstawie /etc/hosts (domyślnie 0)."
 
-#: option.c:335
+#: option.c:341
 msgid "Specify time-to-live in seconds for negative caching."
 msgstr "Określenie (w sekundach) czasu ważności negatywnych odpowiedzi."
 
-#: option.c:336
+#: option.c:342
 msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
 msgstr "Ograniczenie maksymalnego czasu ważności odpowiedzi (TTL) podawanego klientom [w sekundach]."
 
-#: option.c:337
+#: option.c:343
 #, c-format
 msgid "Change to this user after startup. (defaults to %s)."
 msgstr "Zmiana użytkownika procesu na wskazanego (po uruchomieniu, domyślnie: %s)."
 
-#: option.c:338
+#: option.c:344
 msgid "Map DHCP vendor class to tag."
 msgstr "Przyporządkowanie znacznika w zależności od typu klienta DHCP."
 
-#: option.c:339
+#: option.c:345
 msgid "Display dnsmasq version and copyright information."
 msgstr "Wydrukowanie informacji o programie i ochronie praw autorskich."
 
-#: option.c:340
+#: option.c:346
 msgid "Translate IPv4 addresses from upstream servers."
 msgstr "TÅ‚umaczenie adresów IPv4 z serwerów nadrzÄ™dnych."
 
-#: option.c:341
+#: option.c:347
 msgid "Specify a SRV record."
 msgstr "Określenie rekordu SRV."
 
-#: option.c:342
+#: option.c:348
 msgid "Display this message. Use --help dhcp for known DHCP options."
 msgstr "Wyświetla ten komunikat. Użyj '--help dhcp' chcąc przejrzeć listę opcji DHCP (dhcp-option=xxx,...)."
 
-#: option.c:343
+#: option.c:349
 #, c-format
 msgid "Specify path of PID file (defaults to %s)."
 msgstr "Określenie ścieżki do pliku PID (domyślnie: %s)."
 
-#: option.c:344
+#: option.c:350
 #, c-format
 msgid "Specify maximum number of DHCP leases (defaults to %s)."
 msgstr "Maksymalna liczba dzierżaw DHCP (domyślnie: %s)."
 
-#: option.c:345
+#: option.c:351
 msgid "Answer DNS queries based on the interface a query was sent to."
 msgstr "Uzależnienie odpowiedzi DNS od interfejsu, na którym odebrano zapytanie (wygodne dla serwerów kilku podsieci z różnymi adresami w /etc/hosts)."
 
-#: option.c:346
+#: option.c:352
 msgid "Specify TXT DNS record."
 msgstr "Specyfikacja rekordu DNS TXT."
 
-#: option.c:347
+#: option.c:353
 msgid "Specify PTR DNS record."
 msgstr "Specyfikacja rekordu DNS PTR."
 
-#: option.c:348
+#: option.c:354
 msgid "Give DNS name to IPv4 address of interface."
 msgstr "Zwraca nazwÄ™ domenowÄ… powiÄ…zanÄ… z adresem interfejsu sieciowego."
 
-#: option.c:349
+#: option.c:355
 msgid "Bind only to interfaces in use."
 msgstr "NasÅ‚uchiwanie tylko na wykorzystywanych interfejsach (umożliwia uruchomienie osobnych serwerów dla różnych kart)."
 
-#: option.c:350
+#: option.c:356
 #, c-format
 msgid "Read DHCP static host information from %s."
 msgstr "Wczytanie przyporzÄ…dkowaÅ„ adresów z %s."
 
-#: option.c:351
+#: option.c:357
 msgid "Enable the DBus interface for setting upstream servers, etc."
 msgstr "Włączenie używania interfejsu DBus do informowania o zmianach konfiguracji."
 
-#: option.c:352
+#: option.c:358
 msgid "Do not provide DHCP on this interface, only provide DNS."
 msgstr "Uruchomienie na wskazanym interfejsie tylko DNS-a, bez usług DHCP i TFTP."
 
-#: option.c:353
+#: option.c:359
 msgid "Enable dynamic address allocation for bootp."
 msgstr "WÅ‚Ä…czenie dynamicznego przydzielania adresów dla klientów BOOTP."
 
-#: option.c:354
+#: option.c:360
 msgid "Map MAC address (with wildcards) to option set."
 msgstr "PrzyporzÄ…dkowanie znacznika w zależnoÅ›ci od adresu MAC (można używać uogólnieÅ„: *)."
 
-#: option.c:355
+#: option.c:361
 msgid "Treat DHCP requests on aliases as arriving from interface."
 msgstr "Traktowanie żądań DHCP odebranych na interfejsach alias, ..., jako odebranych na iface."
 
-#: option.c:356
+#: option.c:362
 msgid "Disable ICMP echo address checking in the DHCP server."
 msgstr "Pominięcie sprawdzania za pomocą ICMP niezajętości adresu przed jego wydzierżawieniem."
 
-#: option.c:357
+#: option.c:363
 msgid "Shell script to run on DHCP lease creation and destruction."
 msgstr "Skrypt powłoki uruchamiany po przyznaniu lub zwolnieniu adresu."
 
-#: option.c:358
+#: option.c:364
 msgid "Lua script to run on DHCP lease creation and destruction."
 msgstr "Skrypt Lua uruchamiany po przyznaniu lub zwolnieniu adresu."
 
-#: option.c:359
+#: option.c:365
 msgid "Run lease-change scripts as this user."
 msgstr "Wskazanie użytkownika z którego uprawnieniami bÄ™dÄ… uruchamiane skrypty."
 
-#: option.c:360
+#: option.c:366
 msgid "Read configuration from all the files in this directory."
 msgstr "Wczytanie wszystkich plików ze wskazanego katalogu jako konfiguracyjnych."
 
-#: option.c:361
+#: option.c:367
 msgid "Log to this syslog facility or file. (defaults to DAEMON)"
 msgstr "Wskazanie kanaÅ‚u syslog-a do którego majÄ… trafiać komunikaty (domyÅ›lnie: DAEMON)"
 
-#: option.c:362
+#: option.c:368
 msgid "Do not use leasefile."
 msgstr "Nieużywanie bazy dzierżaw."
 
-#: option.c:363
+#: option.c:369
 #, c-format
 msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
 msgstr "Maksymalna liczba jednocześnie obsługiwanych zapytań DNS (domyślnie: %s)"
 
-#: option.c:364
+#: option.c:370
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr "Czyszczenie pamięci podręcznej serwera nazw w przypadku ponownego odczytu %s."
 
-#: option.c:365
+#: option.c:371
 msgid "Ignore hostnames provided by DHCP clients."
 msgstr "Nie zwracanie uwagi na nazwÄ™ podawanÄ… przez klienta w przypadku dopasowania wszystkich wymienionych znaczników."
 
-#: option.c:366
+#: option.c:372
 msgid "Do NOT reuse filename and server fields for extra DHCP options."
 msgstr "WyÅ‚Ä…czenie oszczÄ™dzania miejsca w pakiecie DHCP przez przesuwanie pól servername i filename do opcji DHCP. Wymusza prostszy tryb budowy pakietu rozwiÄ…zujÄ…c problemy z nieprzystosowanymi klientami DHCP."
 
-#: option.c:367
+#: option.c:373
 msgid "Enable integrated read-only TFTP server."
 msgstr "Włączenie wbudowanego serwera TFTP (tylko do wysyłania)."
 
-#: option.c:368
+#: option.c:374
 msgid "Export files by TFTP only from the specified subtree."
 msgstr "Ograniczenie dziaÅ‚ania serwera TFTP do wskazanego katalogu i podkatalogów. Nazwy z .. sÄ… odrzucane, / odnosi siÄ™ do wskazanego katalogu."
 
-#: option.c:369
+#: option.c:375
 msgid "Add client IP address to tftp-root."
 msgstr "Doklejanie adresu IP klienta do gÅ‚ównego katalogu TFTP. Jeżeli wynikowy katalog nie istnieje, nadal wykorzystuje siÄ™ tftp-root."
 
-#: option.c:370
+#: option.c:376
 msgid "Allow access only to files owned by the user running dnsmasq."
 msgstr "Ograniczenie dostÄ™pu do plików przez TFTP do tych, których wÅ‚aÅ›cicielem jest użytkownik uruchamiajÄ…cy dnsmasq-a."
 
-#: option.c:371
+#: option.c:377
 #, c-format
 msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
 msgstr "Maksymalna liczba jednocześnie obsługiwanych połączeń TFTP (domyślnie %s)."
 
-#: option.c:372
+#: option.c:378
 msgid "Disable the TFTP blocksize extension."
 msgstr "WyÅ‚Ä…czenie możliwoÅ›ci negocjowania wielkoÅ›ci bloku dla przesyÅ‚ów przez TFTP."
 
-#: option.c:373
+#: option.c:379
 msgid "Convert TFTP filenames to lowercase"
 msgstr "Konwertowanie nazw plików żądanych przez TFTP do maÅ‚ych liter"
 
-#: option.c:374
+#: option.c:380
 msgid "Ephemeral port range for use by TFTP transfers."
 msgstr "Wskazanie zakresu portów do użytku TFTP."
 
-#: option.c:375
+#: option.c:381
 msgid "Extra logging for DHCP."
 msgstr "WÅ‚Ä…czenie spisywania w logu operacji DHCP."
 
-#: option.c:376
+#: option.c:382
 msgid "Enable async. logging; optionally set queue length."
 msgstr "Włączenie asynchronicznego zapisywania do logu z ewentualnym wskazaniem długości kolejki."
 
-#: option.c:377
+#: option.c:383
 msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
 msgstr "Odfiltrowywanie adresów wskazujÄ…cych na komputery w sieciach wewnÄ™trznych spoÅ›ród odpowiedzi od zewnÄ™trznych serwerów DNS."
 
-#: option.c:378
+#: option.c:384
 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
 msgstr "Zezwolenie na przekazywanie odpowiedzi w klasie 127.0.0.0/8. Dla serwerów RBL."
 
-#: option.c:379
+#: option.c:385
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr "Dezaktywacja zabezpieczenia przed atakami DNS-rebind dla wskazanych domen."
 
-#: option.c:380
+#: option.c:386
 msgid "Always perform DNS queries to all servers."
 msgstr "Jednoczesne odpytywanie wszystkich serwerów nadrzÄ™dnych; klientowi przekazywana jest pierwsza odpowiedź."
 
-#: option.c:381
+#: option.c:387
 msgid "Set tag if client includes matching option in request."
 msgstr "Ustawienie znacznika jeżeli w żądaniu DHCP pojawi się wskazana opcja, ewentualnie o konkretnej wartości."
 
-#: option.c:382
+#: option.c:388
 msgid "Use alternative ports for DHCP."
 msgstr "Użycie alternatywnych portów dla usÅ‚ugi DHCP."
 
-#: option.c:383
+#: option.c:389
 msgid "Specify NAPTR DNS record."
 msgstr "Specyfikacja rekordu DNS NAPTR."
 
-#: option.c:384
+#: option.c:390
 msgid "Specify lowest port available for DNS query transmission."
 msgstr "Ustawienie dolnej granicy numerów portów do przesyÅ‚ania zapytaÅ„ DNS."
 
-#: option.c:385
+#: option.c:391
 msgid "Use only fully qualified domain names for DHCP clients."
 msgstr "Przechowywanie w serwerze DNS dnsmasq-a tylko w peÅ‚ni kwalifikowanych nazw zgÅ‚aszanych przez klientów DHCP."
 
-#: option.c:386
+#: option.c:392
 msgid "Generate hostnames based on MAC address for nameless clients."
 msgstr "Generowanie nazw na podstawie MAC-adresów dla klientów bez nazwy."
 
-#: option.c:387
+#: option.c:393
 msgid "Use these DHCP relays as full proxies."
 msgstr "Traktowanie wskazanych serwerów poÅ›redniczÄ…cych DHCP jako dziaÅ‚ajÄ…cych w trybie \"peÅ‚nomocnika\" (full-proxy)."
 
-#: option.c:388
+#: option.c:394
+msgid "Relay DHCP requests to a remote server"
+msgstr "Przekazywanie żądań DHCP do zdalnego serwera"
+
+#: option.c:395
 msgid "Specify alias name for LOCAL DNS name."
 msgstr "Wskazanie synonimu nazwy komputera lokalnego - znanego z /etc/hosts albo z DHCP."
 
-#: option.c:389
+#: option.c:396
 msgid "Prompt to send to PXE clients."
 msgstr "Zgłoszenie wysyłane klientom PXE."
 
-#: option.c:390
+#: option.c:397
 msgid "Boot service for PXE menu."
 msgstr "Składnik menu PXE (--> man)."
 
-#: option.c:391
+#: option.c:398
 msgid "Check configuration syntax."
 msgstr "Sprawdzenie składni."
 
-#: option.c:392
+#: option.c:399
 msgid "Add requestor's MAC address to forwarded DNS queries."
 msgstr "Przekazywanie MAC-adresu komputera pytajÄ…cego w ruchu wychodzÄ…cym DNS."
 
-#: option.c:393
+#: option.c:400
 msgid "Proxy DNSSEC validation results from upstream nameservers."
 msgstr "Przekazywanie wyników weryfikacji DNSSEC z serwerów nadrzÄ™dnych."
 
-#: option.c:394
+#: option.c:401
 msgid "Attempt to allocate sequential IP addresses to DHCP clients."
 msgstr "Zmiana sposobu przydzielania adresów IP na sekwencyjny."
 
-#: option.c:395
+#: option.c:402
 msgid "Copy connection-track mark from queries to upstream connections."
 msgstr "Zachowanie znacznika połączenia z odebranego zapytania DNS w ruchu zewnętrznym."
 
-#: option.c:396
+#: option.c:403
 msgid "Allow DHCP clients to do their own DDNS updates."
 msgstr "Zezwolenie klientom DHCP na uaktualnianie DDNS-ów."
 
-#: option.c:397
+#: option.c:404
 msgid "Send router-advertisements for interfaces doing DHCPv6"
 msgstr "Załączenie anonsowania (RA) na interfejsach serwujących DHCPv6"
 
-#: option.c:398
+#: option.c:405
+msgid "Always send frequent router-advertisements"
+msgstr "RozsyÅ‚anie wielokrotne anonsów rutera (RA)"
+
+#: option.c:406
 msgid "Specify DUID_EN-type DHCPv6 server DUID"
 msgstr "Określenie DHCPv6 DUID"
 
-#: option.c:399
+#: option.c:407
 msgid "Specify host (A/AAAA and PTR) records"
 msgstr "OkreÅ›lenie rekordów A/AAAA i PTR"
 
-#: option.c:400
+#: option.c:408
 msgid "Specify arbitrary DNS resource record"
 msgstr "Określenie rekordu TXT"
 
-#: option.c:401
+#: option.c:409
 msgid "Bind to interfaces in use - check for new interfaces"
 msgstr "Dynamiczne podpinanie do interfejsów sieciowych"
 
-#: option.c:402
+#: option.c:410
 msgid "Export local names to global DNS"
 msgstr "Eksportowanie lokalnych nazw hostów do globalnego DNS-a"
 
-#: option.c:403
+#: option.c:411
 msgid "Domain to export to global DNS"
 msgstr "Domena pod którÄ… bÄ™dÄ… eksportowane lokalne nazwy"
 
-#: option.c:404
+#: option.c:412
 msgid "Set TTL for authoritative replies"
 msgstr "Określenie TTL dla odpowiedzi autorytatywnych"
 
-#: option.c:405
+#: option.c:413
 msgid "Set authoritive zone information"
 msgstr "Określenie danych strefy autorytatywnej (SOA)"
 
-#: option.c:406
+#: option.c:414
 msgid "Secondary authoritative nameservers for forward domains"
 msgstr "Pomocnicze serwery autorytatywne dla forwardowanych domen"
 
-#: option.c:407
+#: option.c:415
 msgid "Peers which are allowed to do zone transfer"
 msgstr "Wskazanie serwerów uprawnionych do transferu stref"
 
-#: option.c:408
+#: option.c:416
 msgid "Specify ipsets to which matching domains should be added"
 msgstr "Wyszczególnienie ipset-ów, do których bÄ™dÄ… dopisywane adresy IP leżące we wskazanych domenach"
 
-#: option.c:410
+#: option.c:417
+msgid "Specify a domain and address range for sythesised names"
+msgstr "OkreÅ›lenie domeny i zakresu adresów dla tworzonych nazw"
+
+#: option.c:419
 msgid "Specify DHCPv6 prefix class"
 msgstr "Określenie prefiksu klasy DHCPv6"
 
-#: option.c:596
+#: option.c:605
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -630,288 +642,296 @@
 "Użycie: dnsmasq [opcje]\n"
 "\n"
 
-#: option.c:598
+#: option.c:607
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr "W tym systemie w linii poleceń można używać wyłącznie jednoliterowych opcji.\n"
 
-#: option.c:600
+#: option.c:609
 #, c-format
 msgid "Valid options are:\n"
 msgstr "Dostępne opcje:\n"
 
-#: option.c:650 option.c:654
+#: option.c:659 option.c:663
 msgid "bad port"
 msgstr "nieprawidłowy numer portu"
 
-#: option.c:681 option.c:713
+#: option.c:690 option.c:722
 msgid "interface binding not supported"
 msgstr "nie ma możliwości dowiązywania do interfejsu"
 
-#: option.c:690 option.c:3179
+#: option.c:699 option.c:3275
 msgid "bad interface name"
 msgstr "nieprawidłowa nazwa interfejsu"
 
-#: option.c:720
+#: option.c:729
 msgid "bad address"
 msgstr "zły adres"
 
-#: option.c:847
+#: option.c:863
 msgid "unsupported encapsulation for IPv6 option"
 msgstr "nieobsługiwany rodzaj enkapsulacji opcji IPv6"
 
-#: option.c:861
+#: option.c:877
 msgid "bad dhcp-option"
 msgstr "błąd w dhcp-option"
 
-#: option.c:929
+#: option.c:945
 msgid "bad IP address"
 msgstr "zły adres IP"
 
-#: option.c:932 option.c:1070 option.c:2549
+#: option.c:948 option.c:1086 option.c:2620
 msgid "bad IPv6 address"
 msgstr "zły adres IPv6"
 
-#: option.c:1097 option.c:1191
+#: option.c:1113 option.c:1207
 msgid "bad domain in dhcp-option"
 msgstr "nieprawidłowa nazwa domeny w dhcp-option"
 
-#: option.c:1229
+#: option.c:1245
 msgid "dhcp-option too long"
 msgstr "zbyt dÅ‚uga dhcp-option (>255 znaków)"
 
-#: option.c:1236
+#: option.c:1252
 msgid "illegal dhcp-match"
 msgstr "niedopuszczalne dhcp-match"
 
-#: option.c:1298
+#: option.c:1314
 msgid "illegal repeated flag"
 msgstr "wielokrotne użycie opcji niedozwolone (pojawiła się wcześniej w linii poleceń)"
 
-#: option.c:1306
+#: option.c:1322
 msgid "illegal repeated keyword"
 msgstr "wielokrotne użycie opcji niedozwolone (pojawiła się wsześniej w pliku konfiguracyjnym)"
 
-#: option.c:1358 option.c:3702
+#: option.c:1374 option.c:3802
 #, c-format
 msgid "cannot access directory %s: %s"
 msgstr "brak dostępu do katalogu %s: %s"
 
-#: option.c:1390 tftp.c:474
+#: option.c:1406 tftp.c:487
 #, c-format
 msgid "cannot access %s: %s"
 msgstr "brak dostępu do %s: %s"
 
-#: option.c:1426
+#: option.c:1442
 msgid "setting log facility is not possible under Android"
 msgstr "zmiana log-facility w systemie Android nie jest możliwa"
 
-#: option.c:1435
+#: option.c:1451
 msgid "bad log facility"
 msgstr "nierozpoznany znacznik logów"
 
-#: option.c:1484
+#: option.c:1500
 msgid "bad MX preference"
 msgstr "nieprawidłowa wartość preferencji MX"
 
-#: option.c:1489
+#: option.c:1505
 msgid "bad MX name"
 msgstr "nieprawidłowa nazwa MX"
 
-#: option.c:1503
+#: option.c:1519
 msgid "bad MX target"
 msgstr "nieprawidłowa wartość celu MX"
 
-#: option.c:1515
+#: option.c:1531
 msgid "cannot run scripts under uClinux"
 msgstr "w uClinuksie nie ma możliwoÅ›ci uruchamiania skryptów"
 
-#: option.c:1517
+#: option.c:1533
 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
 msgstr "żeby mieć możliwość używania skryptów wywoÅ‚ywanych przy zmianie dzierżawy, przekompiluj dnsmasq-a z wÅ‚Ä…czonÄ… flagÄ… HAVE_SCRIPT"
 
-#: option.c:1521
+#: option.c:1537
 msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
 msgstr "używanie skryptów Lua, wymaga skompilowania dnsmasq-a z flagÄ… HAVE_LUASCRIPT"
 
-#: option.c:1631
+#: option.c:1739 option.c:1800
 msgid "bad prefix"
 msgstr "zła maska"
 
-#: option.c:2043
+#: option.c:2094
 msgid "recompile with HAVE_IPSET defined to enable ipset directives"
 msgstr "chcąc korzystać z ipsets przekompiluj dnsmasq-a z HAVE_IPSET"
 
-#: option.c:2223
+#: option.c:2274
 msgid "bad port range"
 msgstr "nieprawidÅ‚owy zakres numerów portów"
 
-#: option.c:2239
+#: option.c:2290
 msgid "bad bridge-interface"
 msgstr "nieprawidłowa nazwa urządzenia w bridge-interface"
 
-#: option.c:2297
+#: option.c:2350
 msgid "only one tag allowed"
 msgstr "można wskazać tylko jeden znacznik sieci"
 
-#: option.c:2317 option.c:2329 option.c:2461
+#: option.c:2370 option.c:2382 option.c:2491 option.c:2532
 msgid "bad dhcp-range"
 msgstr "nieprawidłowy zakres dhcp-range"
 
-#: option.c:2344
+#: option.c:2397
 msgid "inconsistent DHCP range"
 msgstr "niespójny zakres adresów DHCP"
 
-#: option.c:2402
-msgid "prefix must be exactly 64 for RA subnets"
-msgstr "prefix musi mieć wartość =64 dla podsieci RA"
+#: option.c:2459
+msgid "prefix length must be exactly 64 for RA subnets"
+msgstr "długość prefiksu musi wynosić dokładnie 64 dla podsieci RA"
 
-#: option.c:2404
-msgid "prefix must be exactly 64 for subnet constructors"
-msgstr "prefix dla podsieci musi wynosić równo 64"
+#: option.c:2461
+msgid "prefix length must be exactly 64 for subnet constructors"
+msgstr "dÅ‚ugość prefiksu musi wynosić dokÅ‚adnie 64 dla konstruktorów podsieci"
 
-#: option.c:2407
-msgid "prefix must be at least 64"
-msgstr "prefix musi mieć wartość >=64"
+#: option.c:2465
+msgid "prefix length must be at least 64"
+msgstr "długość prefiksu musi wynosić co najmniej 64"
 
-#: option.c:2412
+#: option.c:2468
 msgid "inconsistent DHCPv6 range"
 msgstr "niespójny zakres adresów DHCPv6"
 
-#: option.c:2519 option.c:2567
+#: option.c:2479
+msgid "prefix must be zero with \"constructor:\" argument"
+msgstr "prefiks musi wynosić zero z argumentem \"constructor:\""
+
+#: option.c:2590 option.c:2638
 msgid "bad hex constant"
 msgstr "zapis niezgodny z formatem szesnastkowym"
 
-#: option.c:2541
+#: option.c:2612
 msgid "cannot match tags in --dhcp-host"
 msgstr "--dhcp-host nie dopuszcza dopasowywania na podstawie znaczników"
 
-#: option.c:2589
+#: option.c:2660
 #, c-format
 msgid "duplicate dhcp-host IP address %s"
 msgstr "powtórzony adres IP %s w specyfikacji dhcp-host"
 
-#: option.c:2645
+#: option.c:2716
 msgid "bad DHCP host name"
 msgstr "niedopuszczalna nazwa komputera w dhcp-host"
 
-#: option.c:2727
+#: option.c:2798
 msgid "bad tag-if"
 msgstr "nieprawidłowa składnia 'tag-if'"
 
-#: option.c:3051 option.c:3379
+#: option.c:3122 option.c:3479
 msgid "invalid port number"
 msgstr "nieprawidłowy numer portu"
 
-#: option.c:3113
+#: option.c:3184
 msgid "bad dhcp-proxy address"
 msgstr "zły adres dhcp-proxy"
 
-#: option.c:3124
+#: option.c:3210
+msgid "Bad dhcp-relay"
+msgstr "zły dhcp-relay"
+
+#: option.c:3220
 msgid "bad DUID"
 msgstr "zły DUID"
 
-#: option.c:3166
+#: option.c:3262
 msgid "invalid alias range"
 msgstr "nieprawidÅ‚owy zakres adresów w --alias"
 
-#: option.c:3205
+#: option.c:3305
 msgid "bad CNAME"
 msgstr "zła CNAME"
 
-#: option.c:3210
+#: option.c:3310
 msgid "duplicate CNAME"
 msgstr "powtórzona CNAME"
 
-#: option.c:3230
+#: option.c:3330
 msgid "bad PTR record"
 msgstr "nieprawidłowy zapis rekordu PTR"
 
-#: option.c:3261
+#: option.c:3361
 msgid "bad NAPTR record"
 msgstr "nieprawidłowy zapis rekordu NAPTR"
 
-#: option.c:3295
+#: option.c:3395
 msgid "bad RR record"
 msgstr "nieprawidłowy zapis rekordu RR"
 
-#: option.c:3324
+#: option.c:3424
 msgid "bad TXT record"
 msgstr "nieprawidłowy zapis rekordu TXT"
 
-#: option.c:3365
+#: option.c:3465
 msgid "bad SRV record"
 msgstr "nieprawidłowy zapis rekordu SRV"
 
-#: option.c:3372
+#: option.c:3472
 msgid "bad SRV target"
 msgstr "nieprawidłowa wartość celu SRV"
 
-#: option.c:3386
+#: option.c:3486
 msgid "invalid priority"
 msgstr "nieprawidłowy priorytet"
 
-#: option.c:3393
+#: option.c:3493
 msgid "invalid weight"
 msgstr "nieprawidłowa waga"
 
-#: option.c:3417
+#: option.c:3517
 msgid "Bad host-record"
 msgstr "nieprawidłowy zapis host-record"
 
-#: option.c:3434
+#: option.c:3534
 msgid "Bad name in host-record"
 msgstr "niedopuszczalna nazwa w host-record"
 
-#: option.c:3464
+#: option.c:3564
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr "nieobsługiwana opcja (sprawdź, czy obsługa DHCP/TFTP/DBus została wkompilowana)"
 
-#: option.c:3522
+#: option.c:3622
 msgid "missing \""
 msgstr "brakuje \""
 
-#: option.c:3579
+#: option.c:3679
 msgid "bad option"
 msgstr "nieprawidłowa opcja"
 
-#: option.c:3581
+#: option.c:3681
 msgid "extraneous parameter"
 msgstr "nadwyżkowy parametr"
 
-#: option.c:3583
+#: option.c:3683
 msgid "missing parameter"
 msgstr "brak parametru"
 
-#: option.c:3590
+#: option.c:3690
 msgid "error"
 msgstr "błąd"
 
-#: option.c:3592
+#: option.c:3692
 #, c-format
 msgid " at line %d of %s"
 msgstr " w linii %d pliku %s"
 
-#: option.c:3656 tftp.c:648
+#: option.c:3756 tftp.c:661
 #, c-format
 msgid "cannot read %s: %s"
 msgstr "błąd odczytu z pliku %s: %s"
 
-#: option.c:3823 option.c:3859
+#: option.c:3923 option.c:3959
 #, c-format
 msgid "read %s"
 msgstr "przeczytałem %s"
 
-#: option.c:3915
+#: option.c:4015
 msgid "junk found in command line"
 msgstr "jakieś śmieci w linii poleceń"
 
-#: option.c:3950
+#: option.c:4050
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr "Dnsmasq, wersja %s  %s\n"
 
-#: option.c:3951
+#: option.c:4051
 #, c-format
 msgid ""
 "Compile time options: %s\n"
@@ -920,62 +940,62 @@
 "Wkompilowane opcje %s\n"
 "\n"
 
-#: option.c:3952
+#: option.c:4052
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr "Autor nie daje ŻADNYCH GWARANCJI egzekwowalnych prawnie.\n"
 
-#: option.c:3953
+#: option.c:4053
 #, c-format
 msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
 msgstr "Dnsmasq jest wolnym oprogramowaniem, możesz go rozprowadzać\n"
 
-#: option.c:3954
+#: option.c:4054
 #, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr "na warunkach określonych w GNU General Public Licence, w wersji 2 lub 3.\n"
 
-#: option.c:3965
+#: option.c:4065
 msgid "try --help"
 msgstr "spróbuj: --help"
 
-#: option.c:3967
+#: option.c:4067
 msgid "try -w"
 msgstr "spróbuj: -w"
 
-#: option.c:3969
+#: option.c:4069
 #, c-format
 msgid "bad command line options: %s"
 msgstr "nieprawidłowa opcja w linii poleceń %s"
 
-#: option.c:4018
+#: option.c:4118
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "nie można pobrać nazwy hosta: %s"
 
-#: option.c:4046
+#: option.c:4146
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr "w trybie no-poll można wskazać najwyżej jeden plik resolv.conf."
 
-#: option.c:4056
+#: option.c:4156
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr "musisz mieć dokładnie jeden plik resolv.conf do odczytu domen."
 
-#: option.c:4059 network.c:1039 dhcp.c:794
+#: option.c:4159 network.c:1178 dhcp.c:768
 #, c-format
 msgid "failed to read %s: %s"
 msgstr "nie udało się odczytać %s: %s"
 
-#: option.c:4076
+#: option.c:4176
 #, c-format
 msgid "no search directive found in %s"
 msgstr "brak wytycznych wyszukiwania w %s"
 
-#: option.c:4097
+#: option.c:4197
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr "w przypadku używania --dhcp-fqdn trzeba wskazać domyślną domenę"
 
-#: option.c:4101
+#: option.c:4201
 msgid "syntax check OK"
 msgstr "składnia sprawdzona, jest prawidłowa"
 
@@ -994,101 +1014,106 @@
 msgid "possible DNS-rebind attack detected: %s"
 msgstr "prawdopodobnie wykryto atak DNS-rebind: %s"
 
-#: network.c:414
+#: forward.c:1216
+#, c-format
+msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+msgstr "Osiągnięto graniczną ilość jednocześnie obsługiwanych zapytań DNS (maks: %d)"
+
+#: network.c:551
 #, c-format
 msgid "failed to create listening socket for %s: %s"
 msgstr "nie udało się otworzyć gniazda %s: %s"
 
-#: network.c:743
+#: network.c:882
 #, c-format
 msgid "interface %s failed to join DHCPv6 multicast group: %s"
 msgstr "interfejs %s nie pozwolił się przyłączyć do grupy rozgłoszeniowej DHCPv6: %s"
 
-#: network.c:937
+#: network.c:1076
 #, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr "błąd przy przyznawaniu nazwy gniazdu serwera %s: %s"
 
-#: network.c:974
+#: network.c:1113
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr "ignorowanie serwera nazw %s - interfejs lokalny"
 
-#: network.c:985
+#: network.c:1124
 #, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr "ignorowanie serwera nazw %s - nie można utworzyć/dowiązać gniazda: %s"
 
-#: network.c:1002
+#: network.c:1141
 msgid "unqualified"
 msgstr "niekwalifikowane(-a)"
 
-#: network.c:1002
+#: network.c:1141
 msgid "names"
 msgstr "nazwy"
 
-#: network.c:1004
+#: network.c:1143
 msgid "default"
 msgstr "domyślne"
 
-#: network.c:1006
+#: network.c:1145
 msgid "domain"
 msgstr "domeny"
 
-#: network.c:1009
+#: network.c:1148
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr "używam adresów lokalnych tylko dla %s %s"
 
-#: network.c:1011
+#: network.c:1150
 #, c-format
 msgid "using standard nameservers for %s %s"
 msgstr "używam standardowych serwerów nazw dla %s %s"
 
-#: network.c:1013
+#: network.c:1152
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr "używam serwera nazw %s#%d dla %s %s"
 
-#: network.c:1016
+#: network.c:1155
 #, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr "używam serwera nazw %s#%d (przez %s)"
 
-#: network.c:1018
+#: network.c:1157
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr "używam serwera nazw %s#%d"
 
-#: dnsmasq.c:131
+#: dnsmasq.c:134
 msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
 msgstr "Serwer TFTP nie został wkompilowany -- ustaw HAVE_TFTP w src/config.h"
 
-#: dnsmasq.c:136
+#: dnsmasq.c:139
 msgid "Cannot use --conntrack AND --query-port"
 msgstr "--conntrack i --query-port wykluczajÄ… siÄ™ wzajemnie"
 
-#: dnsmasq.c:139
+#: dnsmasq.c:142
 msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
 msgstr "Wsparcie dla przekazywania znaczników poÅ‚Ä…czeÅ„ (conntrack) nie zostaÅ‚o wkompilowane - ustaw HAVE_CONNTRACK w src/config.h"
 
-#: dnsmasq.c:144
+#: dnsmasq.c:147
 msgid "asychronous logging is not available under Solaris"
 msgstr "zapis do logów w trybie asynchronicznym nie jest dostÄ™pny w Solarisie"
 
-#: dnsmasq.c:149
+#: dnsmasq.c:152
 msgid "asychronous logging is not available under Android"
 msgstr "zapis do logów w trybie asynchronicznym nie jest dostÄ™pny w Androidzie"
 
-#: dnsmasq.c:154
+#: dnsmasq.c:157
 msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
 msgstr "tryb autorytatywny DNS-a niedostępny - ustaw HAVE_AUTH w src/config.h"
 
-#: dnsmasq.c:164
+#: dnsmasq.c:167
 msgid "zone serial must be configured in --auth-soa"
 msgstr "za pomocą --auth-soa musi zostać ustawiony numer seryjny strefy"
 
-#: dnsmasq.c:186
+#: dnsmasq.c:185
 msgid "dhcp-range constructor not available on this platform"
 msgstr "konstrukcja dhcp-range nie jest dostępna w tym systemie"
 
@@ -1106,426 +1131,431 @@
 msgid "unknown interface %s"
 msgstr "nieznany interfejs %s"
 
-#: dnsmasq.c:274 dnsmasq.c:860
+#: dnsmasq.c:275 dnsmasq.c:870
 #, c-format
 msgid "DBus error: %s"
 msgstr "błąd DBus: %s"
 
-#: dnsmasq.c:277
+#: dnsmasq.c:278
 msgid "DBus not available: set HAVE_DBUS in src/config.h"
 msgstr "Obsługa DBus nie została wkompilowana -- ustaw HAVE_DBUS w src/config.h"
 
-#: dnsmasq.c:305
+#: dnsmasq.c:306
 #, c-format
 msgid "unknown user or group: %s"
 msgstr "nieznany użytkownik lub grupa: %s"
 
-#: dnsmasq.c:360
+#: dnsmasq.c:361
 #, c-format
 msgid "cannot chdir to filesystem root: %s"
 msgstr "nie potrafiÄ™ wejść do gÅ‚ównego katalogu: %s"
 
-#: dnsmasq.c:597
+#: dnsmasq.c:598
 #, c-format
 msgid "started, version %s DNS disabled"
 msgstr "uruchomiony, wersja %s, DNS wyłączony"
 
-#: dnsmasq.c:599
+#: dnsmasq.c:600
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr "uruchomiony, wersja %s, %d miejsc w pamięci podręcznej"
 
-#: dnsmasq.c:601
+#: dnsmasq.c:602
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr "uruchomiony, wersja %s, pamięć podręczna wyłączona"
 
-#: dnsmasq.c:603
+#: dnsmasq.c:604
 #, c-format
 msgid "compile time options: %s"
 msgstr "opcje kompilacji: %s"
 
-#: dnsmasq.c:609
+#: dnsmasq.c:610
 msgid "DBus support enabled: connected to system bus"
 msgstr "obsługa DBus włączona, podłączono do serwera DBus"
 
-#: dnsmasq.c:611
+#: dnsmasq.c:612
 msgid "DBus support enabled: bus connection pending"
 msgstr "obsługa DBus włączona, trwa podłączanie do serwera DBus"
 
-#: dnsmasq.c:616
+#: dnsmasq.c:617
 #, c-format
 msgid "warning: failed to change owner of %s: %s"
 msgstr "UWAGA! Nie udało się zmienić użytkownika pliku %s: %s"
 
-#: dnsmasq.c:620
+#: dnsmasq.c:621
 msgid "setting --bind-interfaces option because of OS limitations"
 msgstr "ustawiam --bind-interfaces z powodu ograniczeń systemu operacyjnego"
 
-#: dnsmasq.c:625
+#: dnsmasq.c:626
 #, c-format
 msgid "warning: interface %s does not currently exist"
 msgstr "uwaga: interfejs %s nie jest włączony"
 
-#: dnsmasq.c:630
+#: dnsmasq.c:631
 msgid "warning: ignoring resolv-file flag because no-resolv is set"
 msgstr "uwaga: ignoruję opcję resolv-file, ponieważ wybrano tryb no-resolv"
 
-#: dnsmasq.c:633
+#: dnsmasq.c:634
 msgid "warning: no upstream servers configured"
 msgstr "uwaga: nie wskazano nadrzÄ™dnych serwerów DNS"
 
-#: dnsmasq.c:637
+#: dnsmasq.c:638
 #, c-format
 msgid "asynchronous logging enabled, queue limit is %d messages"
 msgstr "wÅ‚Ä…czono asynchroniczny tryb zapisu do logów z kolejkÄ… na %d komunikatów"
 
-#: dnsmasq.c:652
+#: dnsmasq.c:659
 msgid "IPv6 router advertisement enabled"
-msgstr "anonsowanie routera IPv4 włączone"
+msgstr "anonsowanie rutera IPv6 włączone"
 
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 msgid "root is "
 msgstr "z gÅ‚ównym katalogiem w "
 
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 msgid "enabled"
 msgstr "włączony"
 
-#: dnsmasq.c:671
+#: dnsmasq.c:678
 msgid "secure mode"
 msgstr "w trybie bezpiecznym"
 
-#: dnsmasq.c:697
+#: dnsmasq.c:704
 #, c-format
 msgid "restricting maximum simultaneous TFTP transfers to %d"
 msgstr "ograniczam ilość jednoczesnych przesłań TFTP do %d"
 
-#: dnsmasq.c:862
+#: dnsmasq.c:872
 msgid "connected to system DBus"
 msgstr "podłączono do DBus-a"
 
-#: dnsmasq.c:1007
+#: dnsmasq.c:1017
 #, c-format
 msgid "cannot fork into background: %s"
 msgstr "nie potrafię przełączyć się do pracy w tle: %s"
 
-#: dnsmasq.c:1010
+#: dnsmasq.c:1020
 #, c-format
 msgid "failed to create helper: %s"
 msgstr "nie udało się utworzyć procesu pomocniczego: %s"
 
-#: dnsmasq.c:1013
+#: dnsmasq.c:1023
 #, c-format
 msgid "setting capabilities failed: %s"
 msgstr "nie powiodło się ustawianie ograniczeń (capabilities): %s"
 
-#: dnsmasq.c:1016
+#: dnsmasq.c:1026
 #, c-format
 msgid "failed to change user-id to %s: %s"
 msgstr "nie udało się zmienić użytkownika procesu na %s: %s"
 
-#: dnsmasq.c:1019
+#: dnsmasq.c:1029
 #, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr "nie udało się zmienić grupy procesu na %s: %s"
 
-#: dnsmasq.c:1022
+#: dnsmasq.c:1032
 #, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr "nie udało się otworzyć pliku z PID-em %s: %s"
 
-#: dnsmasq.c:1025
+#: dnsmasq.c:1035
 #, c-format
 msgid "cannot open log %s: %s"
 msgstr "nie udało się otworzyć logu %s: %s"
 
-#: dnsmasq.c:1028
+#: dnsmasq.c:1038
 #, c-format
 msgid "failed to load Lua script: %s"
 msgstr "nie udało się wczytać skryptu Lua: %s"
 
-#: dnsmasq.c:1031
+#: dnsmasq.c:1041
 #, c-format
 msgid "TFTP directory %s inaccessible: %s"
 msgstr "katalog TFTP %s nie jest dostępny: %s"
 
-#: dnsmasq.c:1095
+#: dnsmasq.c:1105
 #, c-format
 msgid "script process killed by signal %d"
 msgstr "skrypt został zabity sygnałem %d"
 
-#: dnsmasq.c:1099
+#: dnsmasq.c:1109
 #, c-format
 msgid "script process exited with status %d"
 msgstr "skrypt zakończył się z kodem powrotu %d"
 
-#: dnsmasq.c:1103
+#: dnsmasq.c:1113
 #, c-format
 msgid "failed to execute %s: %s"
 msgstr "nie udało się uruchomić %s: %s"
 
-#: dnsmasq.c:1148
+#: dnsmasq.c:1158
 msgid "exiting on receipt of SIGTERM"
 msgstr "zakończyłem działanie z powodu odebrania SIGTERM"
 
-#: dnsmasq.c:1176
+#: dnsmasq.c:1186
 #, c-format
 msgid "failed to access %s: %s"
 msgstr "brak dostępu do %s: %s"
 
-#: dnsmasq.c:1206
+#: dnsmasq.c:1216
 #, c-format
 msgid "reading %s"
 msgstr "czytanie %s"
 
-#: dnsmasq.c:1217
+#: dnsmasq.c:1227
 #, c-format
 msgid "no servers found in %s, will retry"
 msgstr "w %s nie znalazÅ‚em serwerów, spróbujÄ™ ponownie później"
 
-#: dhcp.c:49
+#: dhcp.c:53
 #, c-format
 msgid "cannot create DHCP socket: %s"
 msgstr "nie udało się utworzyć gniazda dla DHCP: %s"
 
-#: dhcp.c:64
+#: dhcp.c:68
 #, c-format
 msgid "failed to set options on DHCP socket: %s"
 msgstr "błąd podczas ustawiania opcji gniazda DHCP: %s"
 
-#: dhcp.c:77
+#: dhcp.c:89
 #, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
 msgstr "nie udało się ustawić SO_REUSE{ADDR|PORT} gniazda DHCP: %s"
 
-#: dhcp.c:89
+#: dhcp.c:101
 #, c-format
 msgid "failed to bind DHCP server socket: %s"
 msgstr "błąd przy przyznawaniu nazwy gniazdu serwera DHCP: %s"
 
-#: dhcp.c:115
+#: dhcp.c:127
 #, c-format
 msgid "cannot create ICMP raw socket: %s."
 msgstr "nie udało się utworzyć surowego gniazda ICMP: %s."
 
-#: dhcp.c:225
+#: dhcp.c:239
 #, c-format
 msgid "unknown interface %s in bridge-interface"
 msgstr "nieznany interfejs %s w bridge-u"
 
-#: dhcp.c:250
+#: dhcp.c:278
 #, c-format
 msgid "DHCP packet received on %s which has no address"
 msgstr "żądanie DHCP odebrano na interfejsie %s, który nie ma adresu"
 
-#: dhcp.c:457
+#: dhcp.c:505
 #, c-format
 msgid "DHCP range %s -- %s is not consistent with netmask %s"
 msgstr "zakres adresów DHCP %s -- %s jest niespójny z maskÄ… sieci %s"
 
-#: dhcp.c:832
+#: dhcp.c:806
 #, c-format
 msgid "bad line at %s line %d"
 msgstr "zła zawartość pliku %s, w linii %d"
 
-#: dhcp.c:875
+#: dhcp.c:849
 #, c-format
 msgid "ignoring %s line %d, duplicate name or IP address"
 msgstr "w %s pomijam liniÄ™ %d -- powtórzona nazwa lub adres IP"
 
+#: dhcp.c:993 rfc3315.c:2047
+#, c-format
+msgid "DHCP relay %s -> %s"
+msgstr "przekazywanie DHCP %s -> %s"
+
 #: lease.c:61
 #, c-format
 msgid "cannot open or create lease file %s: %s"
 msgstr "nie potrafię otworzyć albo utworzyć pliku dzierżaw %s: %s"
 
-#: lease.c:133
+#: lease.c:134
 msgid "too many stored leases"
 msgstr "zbyt duża ilość zapisanych dzierżaw"
 
-#: lease.c:164
+#: lease.c:165
 #, c-format
 msgid "cannot run lease-init script %s: %s"
 msgstr "nie potrafię uruchomić skryptu %s: %s"
 
-#: lease.c:170
+#: lease.c:171
 #, c-format
 msgid "lease-init script returned exit code %s"
 msgstr "skrypt zakończył się z kodem powrotu %s"
 
-#: lease.c:339
+#: lease.c:342
 #, c-format
 msgid "failed to write %s: %s (retry in %us)"
 msgstr "bÅ‚Ä…d zapisu do %s: %s (spróbujÄ™ ponownie za %us)"
 
-#: lease.c:843
+#: lease.c:871
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr "Nie uwzględniam części domenowej (%s) dla komputera %s"
 
-#: rfc2131.c:337
+#: rfc2131.c:338
 #, c-format
 msgid "no address range available for DHCP request %s %s"
 msgstr "nie zdefiniowano zakresu adresów odpowiedniego dla żądania %s %s"
 
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "with subnet selector"
 msgstr "z wyborem podsieci"
 
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "via"
 msgstr "przez"
 
-#: rfc2131.c:350
+#: rfc2131.c:351
 #, c-format
 msgid "%u available DHCP subnet: %s/%s"
 msgstr "%u dostępna podsieć DHCP: %s/%s"
 
-#: rfc2131.c:353 rfc3315.c:272
+#: rfc2131.c:354 rfc3315.c:292
 #, c-format
 msgid "%u available DHCP range: %s -- %s"
 msgstr "%u dostÄ™pny zakres adresów DHCP: %s -- %s"
 
-#: rfc2131.c:382
-msgid "disabled"
-msgstr "wyłączony(a)"
-
-#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771
-#: rfc3315.c:1017
-msgid "ignored"
-msgstr "ignorujÄ™"
-
-#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814
-msgid "address in use"
-msgstr "adres jest w użyciu"
-
-#: rfc2131.c:452 rfc2131.c:1007
-msgid "no address available"
-msgstr "brak dostępnego adresu"
-
-#: rfc2131.c:459 rfc2131.c:1154
-msgid "wrong network"
-msgstr "nieprawidłowa sieć"
-
-#: rfc2131.c:474
-msgid "no address configured"
-msgstr "brak skonfigurowanego adresu"
-
-#: rfc2131.c:480 rfc2131.c:1204
-msgid "no leases left"
-msgstr "brak wolnych dzierżaw"
-
-#: rfc2131.c:576 rfc3315.c:428
-#, c-format
-msgid "%u client provides name: %s"
-msgstr "klient %u przedstawia siÄ™ jako %s"
-
-#: rfc2131.c:731
+#: rfc2131.c:465
 #, c-format
 msgid "%u vendor class: %s"
 msgstr "%u klasa dostawcy: %s"
 
-#: rfc2131.c:733
+#: rfc2131.c:467
 #, c-format
 msgid "%u user class: %s"
 msgstr "%u klasa użytkownika: %s"
 
+#: rfc2131.c:494
+msgid "disabled"
+msgstr "wyłączony(a)"
+
+#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813
+#: rfc3315.c:1082
+msgid "ignored"
+msgstr "ignorujÄ™"
+
+#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863
+msgid "address in use"
+msgstr "adres jest w użyciu"
+
+#: rfc2131.c:564 rfc2131.c:1015
+msgid "no address available"
+msgstr "brak dostępnego adresu"
+
+#: rfc2131.c:571 rfc2131.c:1162
+msgid "wrong network"
+msgstr "nieprawidłowa sieć"
+
+#: rfc2131.c:586
+msgid "no address configured"
+msgstr "brak skonfigurowanego adresu"
+
+#: rfc2131.c:592 rfc2131.c:1212
+msgid "no leases left"
+msgstr "brak wolnych dzierżaw"
+
+#: rfc2131.c:687 rfc3315.c:466
+#, c-format
+msgid "%u client provides name: %s"
+msgstr "klient %u przedstawia siÄ™ jako %s"
+
 #: rfc2131.c:792
 msgid "PXE BIS not supported"
 msgstr "PXE BIS nie jest obsługiwane"
 
-#: rfc2131.c:923 rfc3315.c:1111
+#: rfc2131.c:931 rfc3315.c:1176
 #, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "wyłączam statyczne przypisanie adresu %s dla %s"
 
-#: rfc2131.c:944
+#: rfc2131.c:952
 msgid "unknown lease"
 msgstr "nieznana dzierżawa"
 
-#: rfc2131.c:976
+#: rfc2131.c:984
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr "nie proponuję zakładanego w konfiguracji adresu %s, bo jest on już wydzierżawiony komputerowi %s"
 
-#: rfc2131.c:986
+#: rfc2131.c:994
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr "nie proponujÄ™ zakÅ‚adanego w konfiguracji adresu %s, bo używa go któryÅ› z serwerów"
 
-#: rfc2131.c:989
+#: rfc2131.c:997
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr "nie proponuję zakładanego w konfiguracji adresu %s, bo już poprzednio został odrzucony"
 
-#: rfc2131.c:1005 rfc2131.c:1197
+#: rfc2131.c:1013 rfc2131.c:1205
 msgid "no unique-id"
 msgstr "brak unikalnego id"
 
-#: rfc2131.c:1092
+#: rfc2131.c:1100
 msgid "wrong server-ID"
 msgstr "nieprawidłowy identyfikator serwera (server-ID)"
 
-#: rfc2131.c:1111
+#: rfc2131.c:1119
 msgid "wrong address"
 msgstr "błędny adres"
 
-#: rfc2131.c:1129 rfc3315.c:911
+#: rfc2131.c:1137 rfc3315.c:959
 msgid "lease not found"
 msgstr "dzierżawa nieznaleziona"
 
-#: rfc2131.c:1162
+#: rfc2131.c:1170
 msgid "address not available"
 msgstr "adres niedostępny"
 
-#: rfc2131.c:1173
+#: rfc2131.c:1181
 msgid "static lease available"
 msgstr "dostępna statyczna dzierżawa"
 
-#: rfc2131.c:1177
+#: rfc2131.c:1185
 msgid "address reserved"
 msgstr "adres zarezerwowany"
 
-#: rfc2131.c:1185
+#: rfc2131.c:1193
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr "porzucam przypisanie do %s nazwy %s"
 
-#: rfc2131.c:1679
+#: rfc2131.c:1701
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr "%u nazwa pliku bootowania: %s"
 
-#: rfc2131.c:1688
+#: rfc2131.c:1710
 #, c-format
 msgid "%u server name: %s"
 msgstr "%u nazwa serwera: %s"
 
-#: rfc2131.c:1696
+#: rfc2131.c:1718
 #, c-format
 msgid "%u next server: %s"
 msgstr "%u następny serwer: %s"
 
-#: rfc2131.c:1699
+#: rfc2131.c:1721
 #, c-format
 msgid "%u broadcast response"
 msgstr "%u odpowiedź rozgłoszeniowa"
 
-#: rfc2131.c:1762
+#: rfc2131.c:1784
 #, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr "nie mam możliwości wysłania opcji %d DHCP/BOOTP: niedostateczna ilość miejsca w pakiecie"
 
-#: rfc2131.c:2002
+#: rfc2131.c:2025
 msgid "PXE menu too large"
 msgstr "menu PXE zbyt duże"
 
-#: rfc2131.c:2139 rfc3315.c:1332
+#: rfc2131.c:2162 rfc3315.c:1420
 #, c-format
 msgid "%u requested options: %s"
 msgstr "%u zażądano: %s"
 
-#: rfc2131.c:2415
+#: rfc2131.c:2442
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr "nie mogę wysłać opcji RFC3925: za długi łańcuch opcji przy numerze %d"
@@ -1535,7 +1565,7 @@
 msgid "cannot create netlink socket: %s"
 msgstr "nie potrafię utworzyć połączenia netlink %s"
 
-#: netlink.c:354
+#: netlink.c:363
 #, c-format
 msgid "netlink returns error: %s"
 msgstr "wystąpił błąd w połączeniu netlink %s"
@@ -1544,53 +1574,53 @@
 msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
 msgstr "próba ustawienia adresu IPv6 serwera przez DBus, ale brak obsÅ‚ugi IPv6"
 
-#: dbus.c:308 dbus.c:504
+#: dbus.c:523
 msgid "setting upstream servers from DBus"
 msgstr "ustawiam adresy serwerów nadrzÄ™dnych na podstawie informacji odebranych z DBus"
 
-#: dbus.c:561
+#: dbus.c:570
 msgid "could not register a DBus message handler"
 msgstr "nie można zarejestrować uchwytu DBus"
 
-#: bpf.c:197
+#: bpf.c:245
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr "nie potrafię utworzyć gniazda DHCP BPF: %s"
 
-#: bpf.c:225
+#: bpf.c:273
 #, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr "żądanie DHCP od urządzenia nieobsługiwanego typu (%d) odebrano na %s"
 
-#: helper.c:145
+#: helper.c:151
 msgid "lease() function missing in Lua script"
 msgstr "w skrypcie Lua brak funkcji lease()"
 
-#: tftp.c:290
+#: tftp.c:303
 msgid "unable to get free port for TFTP"
 msgstr "brak wolnego portu dla usługi TFTP"
 
-#: tftp.c:306
+#: tftp.c:319
 #, c-format
 msgid "unsupported request from %s"
 msgstr "nieobsługiwane żądanie od komputera %s"
 
-#: tftp.c:420
+#: tftp.c:433
 #, c-format
 msgid "file %s not found"
 msgstr "plik %s nie został znaleziony"
 
-#: tftp.c:529
+#: tftp.c:542
 #, c-format
 msgid "error %d %s received from %s"
 msgstr "błąd %d %s odebrano od %s"
 
-#: tftp.c:571
+#: tftp.c:584
 #, c-format
 msgid "failed sending %s to %s"
 msgstr "błąd wysyłania pliku %s do komputera %s"
 
-#: tftp.c:571
+#: tftp.c:584
 #, c-format
 msgid "sent %s to %s"
 msgstr "plik %s przesłano do %s"
@@ -1614,176 +1644,195 @@
 msgid "Conntrack connection mark retrieval failed: %s"
 msgstr "Nie udało się odcztać znacznika połączenia (conntrack): %s"
 
-#: dhcp6.c:49
+#: dhcp6.c:59
 #, c-format
 msgid "cannot create DHCPv6 socket: %s"
 msgstr "nie udało się utworzyć gniazda dla DHCPv6: %s"
 
-#: dhcp6.c:62
+#: dhcp6.c:80
 #, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s"
 msgstr "nie udało się ustawić SO_REUSE{ADDR|PORT} gniazda DHCPv6: %s"
 
-#: dhcp6.c:74
+#: dhcp6.c:92
 #, c-format
 msgid "failed to bind DHCPv6 server socket: %s"
 msgstr "dowiązywanie gniazda serwera DHCPv6 zakończone niepowodzeniem: %s"
 
-#: rfc3315.c:135
+#: rfc3315.c:149
 #, c-format
 msgid "no address range available for DHCPv6 request from relay at %s"
 msgstr "nie zdefiniowano zakresu adresów odpowiedniego dla żądania DHCPv6 przekazanego przez %s"
 
-#: rfc3315.c:144
+#: rfc3315.c:158
 #, c-format
 msgid "no address range available for DHCPv6 request via %s"
 msgstr "nie zdefiniowano zakresu adresów odpowiedniego dla żądania DHCPv6 od %s"
 
-#: rfc3315.c:269
+#: rfc3315.c:289
 #, c-format
 msgid "%u available DHCPv6 subnet: %s/%d"
 msgstr "%u dostępna podsieć DHCPv6: %s/%d"
 
-#: rfc3315.c:350
+#: rfc3315.c:370
 #, c-format
 msgid "%u vendor class: %u"
 msgstr "%u klasa dostawcy: %u"
 
-#: rfc3315.c:609
+#: rfc3315.c:418
+#, c-format
+msgid "%u client MAC address: %s"
+msgstr "adres MAC klienta %u: %s"
+
+#: rfc3315.c:650
 #, c-format
 msgid "unknown prefix-class %d"
 msgstr "nieznana klasa sieci %d"
 
-#: rfc3315.c:741 rfc3315.c:854
+#: rfc3315.c:781 rfc3315.c:903
 msgid "success"
 msgstr "udane"
 
-#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864
+#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913
 msgid "no addresses available"
 msgstr "brak wolnych adresów"
 
-#: rfc3315.c:806
+#: rfc3315.c:855
 msgid "address unavailable"
 msgstr "adres niedostępny"
 
-#: rfc3315.c:841
+#: rfc3315.c:890
 msgid "not on link"
 msgstr "poza zasięgiem"
 
-#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150
+#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215
 msgid "no binding found"
 msgstr "brak powiÄ…zania"
 
-#: rfc3315.c:948
+#: rfc3315.c:1001
 msgid "deprecated"
 msgstr "przestarzały"
 
-#: rfc3315.c:951
+#: rfc3315.c:1006
 msgid "address invalid"
 msgstr "niepoprawny adres"
 
-#: rfc3315.c:992
+#: rfc3315.c:1048
 msgid "confirm failed"
 msgstr "brak potwierdzenia"
 
-#: rfc3315.c:1003
+#: rfc3315.c:1059
 msgid "all addresses still on link"
 msgstr "wszystkie adresy ciągle w użyciu"
 
-#: rfc3315.c:1082
+#: rfc3315.c:1147
 msgid "release received"
 msgstr "adres został zwolniony"
 
+#: rfc3315.c:2038
+msgid "Cannot multicast to DHCPv6 server without correct interface"
+msgstr "Nie mogÄ™ rozesÅ‚ać do serwerów DHCPv6 nie majÄ…c prawidÅ‚owego interfejsu"
+
 #: dhcp-common.c:145
 #, c-format
 msgid "Ignoring duplicate dhcp-option %d"
 msgstr "Pomijam powtórzonÄ… dhcp-option %d"
 
-#: dhcp-common.c:215
+#: dhcp-common.c:222
 #, c-format
 msgid "%u tags: %s"
 msgstr "%u cechy: %s"
 
-#: dhcp-common.c:296
+#: dhcp-common.c:407
 #, c-format
 msgid "%s has more than one address in hostsfile, using %s for DHCP"
 msgstr "do komputera o nazwie %s pasuje więcej niż jeden adres, w odpowiedzi DHCP wysyłam %s"
 
-#: dhcp-common.c:319
+#: dhcp-common.c:430
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr "powtórzenie adresu IP %s (%s) w opcji dhcp-config"
 
-#: dhcp-common.c:367
+#: dhcp-common.c:484
 #, c-format
 msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s"
 msgstr "nie udało się ustawić SO_BINDTODEVICE gniazda DHCP: %s"
 
-#: dhcp-common.c:489
+#: dhcp-common.c:606
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr "Znane opcje DHCP:\n"
 
-#: dhcp-common.c:500
+#: dhcp-common.c:617
 #, c-format
 msgid "Known DHCPv6 options:\n"
 msgstr "Rozpoznawane opcje DHCPv6:\n"
 
-#: dhcp-common.c:693
+#: dhcp-common.c:814
 msgid ", prefix deprecated"
 msgstr ", przestarzały prefiks"
 
-#: dhcp-common.c:696
+#: dhcp-common.c:817
 #, c-format
 msgid ", lease time "
 msgstr ", czas dzierżawy"
 
-#: dhcp-common.c:727
+#: dhcp-common.c:849
 #, c-format
 msgid "%s stateless on %s%.0s%.0s%s"
 msgstr "%s bezstanowy na %s%.0s%.0s%s"
 
-#: dhcp-common.c:729
+#: dhcp-common.c:851
 #, c-format
 msgid "%s, static leases only on %.0s%s%s%.0s"
 msgstr "%s, wyłącznie statyczne dzierżawy na %.0s%s%s%.0s"
 
-#: dhcp-common.c:731
+#: dhcp-common.c:853
 #, c-format
 msgid "%s, proxy on subnet %.0s%s%.0s%.0s"
 msgstr "%s, wykryto pośrednika na podsieci %.0s%s%.0s%.0s"
 
-#: dhcp-common.c:732
+#: dhcp-common.c:854
 #, c-format
 msgid "%s, IP range %s -- %s%s%.0s"
 msgstr "%s, zakres IP %s -- %s%s%.0s"
 
-#: dhcp-common.c:739
+#: dhcp-common.c:866
 #, c-format
 msgid "DHCPv4-derived IPv6 names on %s%s"
 msgstr "pochodzÄ…ce z DHCPv4 nazwy IPv6 na %s%s"
 
-#: dhcp-common.c:742
+#: dhcp-common.c:869
 #, c-format
 msgid "router advertisement on %s%s"
-msgstr "anonsowanie routera na %s%s"
+msgstr "anonsowanie rutera na %s%s"
 
-#: radv.c:87
+#: dhcp-common.c:880
+#, c-format
+msgid "DHCP relay from %s to %s via %s"
+msgstr "przekazywanie DHCP z %s do %s za pomocÄ… %s"
+
+#: dhcp-common.c:882
+#, c-format
+msgid "DHCP relay from %s to %s"
+msgstr "przekazywanie DHCP z %s do %s"
+
+#: radv.c:93
 #, c-format
 msgid "cannot create ICMPv6 socket: %s"
 msgstr "nie udało się utworzyć gniazda dla ICMPv6: %s"
 
-#: auth.c:402
+#: auth.c:435
 #, c-format
 msgid "ignoring zone transfer request from %s"
 msgstr "ignoruję żądanie transferu strefy od %s"
 
-#: ipset.c:71
+#: ipset.c:95
 #, c-format
 msgid "failed to find kernel version: %s"
 msgstr "niezgodna wersja jÄ…dra: %s"
 
-#: ipset.c:90
+#: ipset.c:114
 #, c-format
 msgid "failed to create IPset control socket: %s"
 msgstr "nie powiodło się otwieranie gniazda sterującego IPset: %s"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 824a78f..3abae37 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -21,17 +21,17 @@
 msgid "failed to load names from %s: %s"
 msgstr ""
 
-#: cache.c:834 dhcp.c:845
+#: cache.c:834 dhcp.c:819
 #, c-format
 msgid "bad address at %s line %d"
 msgstr ""
 
-#: cache.c:885 dhcp.c:861
+#: cache.c:885 dhcp.c:835
 #, c-format
 msgid "bad name at %s line %d"
 msgstr ""
 
-#: cache.c:892 dhcp.c:936
+#: cache.c:892 dhcp.c:910
 #, c-format
 msgid "read %s - %d addresses"
 msgstr ""
@@ -40,37 +40,37 @@
 msgid "cleared cache"
 msgstr ""
 
-#: cache.c:1016
+#: cache.c:984
 #, c-format
 msgid "No IPv4 address found for %s"
 msgstr ""
 
-#: cache.c:1093
+#: cache.c:1061
 #, c-format
 msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
 msgstr ""
 
-#: cache.c:1117
+#: cache.c:1085
 #, c-format
 msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
 msgstr ""
 
-#: cache.c:1162
+#: cache.c:1130
 #, c-format
 msgid "time %lu"
 msgstr ""
 
-#: cache.c:1163
+#: cache.c:1131
 #, c-format
 msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
 msgstr ""
 
-#: cache.c:1165
+#: cache.c:1133
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr ""
 
-#: cache.c:1188
+#: cache.c:1156
 #, c-format
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr ""
@@ -80,893 +80,913 @@
 msgid "failed to seed the random number generator: %s"
 msgstr ""
 
-#: util.c:189
+#: util.c:192
 msgid "failed to allocate memory"
 msgstr ""
 
-#: util.c:227 option.c:531
+#: util.c:230 option.c:540
 msgid "could not get memory"
 msgstr ""
 
-#: util.c:237
+#: util.c:240
 #, c-format
 msgid "cannot create pipe: %s"
 msgstr ""
 
-#: util.c:245
+#: util.c:248
 #, c-format
 msgid "failed to allocate %d bytes"
 msgstr ""
 
-#: util.c:400
+#: util.c:403
 #, c-format
 msgid "infinite"
 msgstr ""
 
-#: option.c:286
+#: option.c:292
 msgid "Specify local address(es) to listen on."
 msgstr ""
 
-#: option.c:287
+#: option.c:293
 msgid "Return ipaddr for all hosts in specified domains."
 msgstr ""
 
-#: option.c:288
+#: option.c:294
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr ""
 
-#: option.c:289
+#: option.c:295
 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
 msgstr ""
 
-#: option.c:290
+#: option.c:296
 #, c-format
 msgid "Specify the size of the cache in entries (defaults to %s)."
 msgstr ""
 
-#: option.c:291
+#: option.c:297
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr ""
 
-#: option.c:292
+#: option.c:298
 msgid "Do NOT fork into the background: run in debug mode."
 msgstr ""
 
-#: option.c:293
+#: option.c:299
 msgid "Do NOT forward queries with no domain part."
 msgstr ""
 
-#: option.c:294
+#: option.c:300
 msgid "Return self-pointing MX records for local hosts."
 msgstr ""
 
-#: option.c:295
+#: option.c:301
 msgid "Expand simple names in /etc/hosts with domain-suffix."
 msgstr ""
 
-#: option.c:296
+#: option.c:302
 msgid "Don't forward spurious DNS requests from Windows hosts."
 msgstr ""
 
-#: option.c:297
-msgid "Enable DHCP in the range given with lease duration."
-msgstr ""
-
-#: option.c:298
-#, c-format
-msgid "Change to this group after startup (defaults to %s)."
-msgstr ""
-
-#: option.c:299
-msgid "Set address or hostname for a specified machine."
-msgstr ""
-
-#: option.c:300
-msgid "Read DHCP host specs from file."
-msgstr ""
-
-#: option.c:301
-msgid "Read DHCP option specs from file."
-msgstr ""
-
-#: option.c:302
-msgid "Evaluate conditional tag expression."
-msgstr ""
-
 #: option.c:303
-#, c-format
-msgid "Do NOT load %s file."
+msgid "Enable DHCP in the range given with lease duration."
 msgstr ""
 
 #: option.c:304
 #, c-format
-msgid "Specify a hosts file to be read in addition to %s."
+msgid "Change to this group after startup (defaults to %s)."
 msgstr ""
 
 #: option.c:305
-msgid "Specify interface(s) to listen on."
+msgid "Set address or hostname for a specified machine."
 msgstr ""
 
 #: option.c:306
-msgid "Specify interface(s) NOT to listen on."
+msgid "Read DHCP host specs from file."
 msgstr ""
 
 #: option.c:307
-msgid "Map DHCP user class to tag."
+msgid "Read DHCP option specs from file."
 msgstr ""
 
 #: option.c:308
-msgid "Map RFC3046 circuit-id to tag."
+msgid "Evaluate conditional tag expression."
 msgstr ""
 
 #: option.c:309
-msgid "Map RFC3046 remote-id to tag."
+#, c-format
+msgid "Do NOT load %s file."
 msgstr ""
 
 #: option.c:310
-msgid "Map RFC3993 subscriber-id to tag."
+#, c-format
+msgid "Specify a hosts file to be read in addition to %s."
 msgstr ""
 
 #: option.c:311
-msgid "Don't do DHCP for hosts with tag set."
+msgid "Specify interface(s) to listen on."
 msgstr ""
 
 #: option.c:312
-msgid "Force broadcast replies for hosts with tag set."
+msgid "Specify interface(s) NOT to listen on."
 msgstr ""
 
 #: option.c:313
-msgid "Do NOT fork into the background, do NOT run in debug mode."
+msgid "Map DHCP user class to tag."
 msgstr ""
 
 #: option.c:314
-msgid "Assume we are the only DHCP server on the local network."
+msgid "Map RFC3046 circuit-id to tag."
 msgstr ""
 
 #: option.c:315
-#, c-format
-msgid "Specify where to store DHCP leases (defaults to %s)."
+msgid "Map RFC3046 remote-id to tag."
 msgstr ""
 
 #: option.c:316
-msgid "Return MX records for local hosts."
+msgid "Map RFC3993 subscriber-id to tag."
 msgstr ""
 
 #: option.c:317
-msgid "Specify an MX record."
+msgid "Don't do DHCP for hosts with tag set."
 msgstr ""
 
 #: option.c:318
-msgid "Specify BOOTP options to DHCP server."
+msgid "Force broadcast replies for hosts with tag set."
 msgstr ""
 
 #: option.c:319
-#, c-format
-msgid "Do NOT poll %s file, reload only on SIGHUP."
+msgid "Do NOT fork into the background, do NOT run in debug mode."
 msgstr ""
 
 #: option.c:320
-msgid "Do NOT cache failed search results."
+msgid "Assume we are the only DHCP server on the local network."
 msgstr ""
 
 #: option.c:321
 #, c-format
-msgid "Use nameservers strictly in the order given in %s."
+msgid "Specify where to store DHCP leases (defaults to %s)."
 msgstr ""
 
 #: option.c:322
-msgid "Specify options to be sent to DHCP clients."
+msgid "Return MX records for local hosts."
 msgstr ""
 
 #: option.c:323
-msgid "DHCP option sent even if the client does not request it."
+msgid "Specify an MX record."
 msgstr ""
 
 #: option.c:324
-msgid "Specify port to listen for DNS requests on (defaults to 53)."
+msgid "Specify BOOTP options to DHCP server."
 msgstr ""
 
 #: option.c:325
 #, c-format
-msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
+msgid "Do NOT poll %s file, reload only on SIGHUP."
 msgstr ""
 
 #: option.c:326
-msgid "Log DNS queries."
+msgid "Do NOT cache failed search results."
 msgstr ""
 
 #: option.c:327
-msgid "Force the originating port for upstream DNS queries."
+#, c-format
+msgid "Use nameservers strictly in the order given in %s."
 msgstr ""
 
 #: option.c:328
-msgid "Do NOT read resolv.conf."
+msgid "Specify options to be sent to DHCP clients."
 msgstr ""
 
 #: option.c:329
+msgid "DHCP option sent even if the client does not request it."
+msgstr ""
+
+#: option.c:330
+msgid "Specify port to listen for DNS requests on (defaults to 53)."
+msgstr ""
+
+#: option.c:331
+#, c-format
+msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
+msgstr ""
+
+#: option.c:332
+msgid "Log DNS queries."
+msgstr ""
+
+#: option.c:333
+msgid "Force the originating port for upstream DNS queries."
+msgstr ""
+
+#: option.c:334
+msgid "Do NOT read resolv.conf."
+msgstr ""
+
+#: option.c:335
 #, c-format
 msgid "Specify path to resolv.conf (defaults to %s)."
 msgstr ""
 
-#: option.c:330
+#: option.c:336
 msgid "Specify address(es) of upstream servers with optional domains."
 msgstr ""
 
-#: option.c:331
+#: option.c:337
 msgid "Never forward queries to specified domains."
 msgstr ""
 
-#: option.c:332
+#: option.c:338
 msgid "Specify the domain to be assigned in DHCP leases."
 msgstr ""
 
-#: option.c:333
+#: option.c:339
 msgid "Specify default target in an MX record."
 msgstr ""
 
-#: option.c:334
+#: option.c:340
 msgid "Specify time-to-live in seconds for replies from /etc/hosts."
 msgstr ""
 
-#: option.c:335
+#: option.c:341
 msgid "Specify time-to-live in seconds for negative caching."
 msgstr ""
 
-#: option.c:336
-msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
-msgstr ""
-
-#: option.c:337
-#, c-format
-msgid "Change to this user after startup. (defaults to %s)."
-msgstr ""
-
-#: option.c:338
-msgid "Map DHCP vendor class to tag."
-msgstr ""
-
-#: option.c:339
-msgid "Display dnsmasq version and copyright information."
-msgstr ""
-
-#: option.c:340
-msgid "Translate IPv4 addresses from upstream servers."
-msgstr ""
-
-#: option.c:341
-msgid "Specify a SRV record."
-msgstr ""
-
 #: option.c:342
-msgid "Display this message. Use --help dhcp for known DHCP options."
+msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
 msgstr ""
 
 #: option.c:343
 #, c-format
-msgid "Specify path of PID file (defaults to %s)."
+msgid "Change to this user after startup. (defaults to %s)."
 msgstr ""
 
 #: option.c:344
-#, c-format
-msgid "Specify maximum number of DHCP leases (defaults to %s)."
+msgid "Map DHCP vendor class to tag."
 msgstr ""
 
 #: option.c:345
-msgid "Answer DNS queries based on the interface a query was sent to."
+msgid "Display dnsmasq version and copyright information."
 msgstr ""
 
 #: option.c:346
-msgid "Specify TXT DNS record."
+msgid "Translate IPv4 addresses from upstream servers."
 msgstr ""
 
 #: option.c:347
-msgid "Specify PTR DNS record."
+msgid "Specify a SRV record."
 msgstr ""
 
 #: option.c:348
-msgid "Give DNS name to IPv4 address of interface."
+msgid "Display this message. Use --help dhcp for known DHCP options."
 msgstr ""
 
 #: option.c:349
-msgid "Bind only to interfaces in use."
+#, c-format
+msgid "Specify path of PID file (defaults to %s)."
 msgstr ""
 
 #: option.c:350
 #, c-format
-msgid "Read DHCP static host information from %s."
+msgid "Specify maximum number of DHCP leases (defaults to %s)."
 msgstr ""
 
 #: option.c:351
-msgid "Enable the DBus interface for setting upstream servers, etc."
+msgid "Answer DNS queries based on the interface a query was sent to."
 msgstr ""
 
 #: option.c:352
-msgid "Do not provide DHCP on this interface, only provide DNS."
+msgid "Specify TXT DNS record."
 msgstr ""
 
 #: option.c:353
-msgid "Enable dynamic address allocation for bootp."
+msgid "Specify PTR DNS record."
 msgstr ""
 
 #: option.c:354
-msgid "Map MAC address (with wildcards) to option set."
+msgid "Give DNS name to IPv4 address of interface."
 msgstr ""
 
 #: option.c:355
-msgid "Treat DHCP requests on aliases as arriving from interface."
+msgid "Bind only to interfaces in use."
 msgstr ""
 
 #: option.c:356
-msgid "Disable ICMP echo address checking in the DHCP server."
+#, c-format
+msgid "Read DHCP static host information from %s."
 msgstr ""
 
 #: option.c:357
-msgid "Shell script to run on DHCP lease creation and destruction."
+msgid "Enable the DBus interface for setting upstream servers, etc."
 msgstr ""
 
 #: option.c:358
-msgid "Lua script to run on DHCP lease creation and destruction."
+msgid "Do not provide DHCP on this interface, only provide DNS."
 msgstr ""
 
 #: option.c:359
-msgid "Run lease-change scripts as this user."
+msgid "Enable dynamic address allocation for bootp."
 msgstr ""
 
 #: option.c:360
-msgid "Read configuration from all the files in this directory."
+msgid "Map MAC address (with wildcards) to option set."
 msgstr ""
 
 #: option.c:361
-msgid "Log to this syslog facility or file. (defaults to DAEMON)"
+msgid "Treat DHCP requests on aliases as arriving from interface."
 msgstr ""
 
 #: option.c:362
-msgid "Do not use leasefile."
+msgid "Disable ICMP echo address checking in the DHCP server."
 msgstr ""
 
 #: option.c:363
+msgid "Shell script to run on DHCP lease creation and destruction."
+msgstr ""
+
+#: option.c:364
+msgid "Lua script to run on DHCP lease creation and destruction."
+msgstr ""
+
+#: option.c:365
+msgid "Run lease-change scripts as this user."
+msgstr ""
+
+#: option.c:366
+msgid "Read configuration from all the files in this directory."
+msgstr ""
+
+#: option.c:367
+msgid "Log to this syslog facility or file. (defaults to DAEMON)"
+msgstr ""
+
+#: option.c:368
+msgid "Do not use leasefile."
+msgstr ""
+
+#: option.c:369
 #, c-format
 msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
 msgstr ""
 
-#: option.c:364
+#: option.c:370
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr ""
 
-#: option.c:365
+#: option.c:371
 msgid "Ignore hostnames provided by DHCP clients."
 msgstr ""
 
-#: option.c:366
+#: option.c:372
 msgid "Do NOT reuse filename and server fields for extra DHCP options."
 msgstr ""
 
-#: option.c:367
+#: option.c:373
 msgid "Enable integrated read-only TFTP server."
 msgstr ""
 
-#: option.c:368
+#: option.c:374
 msgid "Export files by TFTP only from the specified subtree."
 msgstr ""
 
-#: option.c:369
+#: option.c:375
 msgid "Add client IP address to tftp-root."
 msgstr ""
 
-#: option.c:370
+#: option.c:376
 msgid "Allow access only to files owned by the user running dnsmasq."
 msgstr ""
 
-#: option.c:371
+#: option.c:377
 #, c-format
 msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
 msgstr ""
 
-#: option.c:372
+#: option.c:378
 msgid "Disable the TFTP blocksize extension."
 msgstr ""
 
-#: option.c:373
+#: option.c:379
 msgid "Convert TFTP filenames to lowercase"
 msgstr ""
 
-#: option.c:374
+#: option.c:380
 msgid "Ephemeral port range for use by TFTP transfers."
 msgstr ""
 
-#: option.c:375
+#: option.c:381
 msgid "Extra logging for DHCP."
 msgstr ""
 
-#: option.c:376
+#: option.c:382
 msgid "Enable async. logging; optionally set queue length."
 msgstr ""
 
-#: option.c:377
+#: option.c:383
 msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
 msgstr ""
 
-#: option.c:378
+#: option.c:384
 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
 msgstr ""
 
-#: option.c:379
+#: option.c:385
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr ""
 
-#: option.c:380
+#: option.c:386
 msgid "Always perform DNS queries to all servers."
 msgstr ""
 
-#: option.c:381
+#: option.c:387
 msgid "Set tag if client includes matching option in request."
 msgstr ""
 
-#: option.c:382
+#: option.c:388
 msgid "Use alternative ports for DHCP."
 msgstr ""
 
-#: option.c:383
+#: option.c:389
 msgid "Specify NAPTR DNS record."
 msgstr ""
 
-#: option.c:384
+#: option.c:390
 msgid "Specify lowest port available for DNS query transmission."
 msgstr ""
 
-#: option.c:385
+#: option.c:391
 msgid "Use only fully qualified domain names for DHCP clients."
 msgstr ""
 
-#: option.c:386
+#: option.c:392
 msgid "Generate hostnames based on MAC address for nameless clients."
 msgstr ""
 
-#: option.c:387
+#: option.c:393
 msgid "Use these DHCP relays as full proxies."
 msgstr ""
 
-#: option.c:388
-msgid "Specify alias name for LOCAL DNS name."
-msgstr ""
-
-#: option.c:389
-msgid "Prompt to send to PXE clients."
-msgstr ""
-
-#: option.c:390
-msgid "Boot service for PXE menu."
-msgstr ""
-
-#: option.c:391
-msgid "Check configuration syntax."
-msgstr ""
-
-#: option.c:392
-msgid "Add requestor's MAC address to forwarded DNS queries."
-msgstr ""
-
-#: option.c:393
-msgid "Proxy DNSSEC validation results from upstream nameservers."
-msgstr ""
-
 #: option.c:394
-msgid "Attempt to allocate sequential IP addresses to DHCP clients."
+msgid "Relay DHCP requests to a remote server"
 msgstr ""
 
 #: option.c:395
-msgid "Copy connection-track mark from queries to upstream connections."
+msgid "Specify alias name for LOCAL DNS name."
 msgstr ""
 
 #: option.c:396
-msgid "Allow DHCP clients to do their own DDNS updates."
+msgid "Prompt to send to PXE clients."
 msgstr ""
 
 #: option.c:397
-msgid "Send router-advertisements for interfaces doing DHCPv6"
+msgid "Boot service for PXE menu."
 msgstr ""
 
 #: option.c:398
-msgid "Specify DUID_EN-type DHCPv6 server DUID"
+msgid "Check configuration syntax."
 msgstr ""
 
 #: option.c:399
-msgid "Specify host (A/AAAA and PTR) records"
+msgid "Add requestor's MAC address to forwarded DNS queries."
 msgstr ""
 
 #: option.c:400
-msgid "Specify arbitrary DNS resource record"
+msgid "Proxy DNSSEC validation results from upstream nameservers."
 msgstr ""
 
 #: option.c:401
-msgid "Bind to interfaces in use - check for new interfaces"
+msgid "Attempt to allocate sequential IP addresses to DHCP clients."
 msgstr ""
 
 #: option.c:402
-msgid "Export local names to global DNS"
+msgid "Copy connection-track mark from queries to upstream connections."
 msgstr ""
 
 #: option.c:403
-msgid "Domain to export to global DNS"
+msgid "Allow DHCP clients to do their own DDNS updates."
 msgstr ""
 
 #: option.c:404
-msgid "Set TTL for authoritative replies"
+msgid "Send router-advertisements for interfaces doing DHCPv6"
 msgstr ""
 
 #: option.c:405
-msgid "Set authoritive zone information"
+msgid "Always send frequent router-advertisements"
 msgstr ""
 
 #: option.c:406
-msgid "Secondary authoritative nameservers for forward domains"
+msgid "Specify DUID_EN-type DHCPv6 server DUID"
 msgstr ""
 
 #: option.c:407
-msgid "Peers which are allowed to do zone transfer"
+msgid "Specify host (A/AAAA and PTR) records"
 msgstr ""
 
 #: option.c:408
-msgid "Specify ipsets to which matching domains should be added"
+msgid "Specify arbitrary DNS resource record"
+msgstr ""
+
+#: option.c:409
+msgid "Bind to interfaces in use - check for new interfaces"
 msgstr ""
 
 #: option.c:410
+msgid "Export local names to global DNS"
+msgstr ""
+
+#: option.c:411
+msgid "Domain to export to global DNS"
+msgstr ""
+
+#: option.c:412
+msgid "Set TTL for authoritative replies"
+msgstr ""
+
+#: option.c:413
+msgid "Set authoritive zone information"
+msgstr ""
+
+#: option.c:414
+msgid "Secondary authoritative nameservers for forward domains"
+msgstr ""
+
+#: option.c:415
+msgid "Peers which are allowed to do zone transfer"
+msgstr ""
+
+#: option.c:416
+msgid "Specify ipsets to which matching domains should be added"
+msgstr ""
+
+#: option.c:417
+msgid "Specify a domain and address range for sythesised names"
+msgstr ""
+
+#: option.c:419
 msgid "Specify DHCPv6 prefix class"
 msgstr ""
 
-#: option.c:596
+#: option.c:605
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
 "\n"
 msgstr ""
 
-#: option.c:598
+#: option.c:607
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr ""
 
-#: option.c:600
+#: option.c:609
 #, c-format
 msgid "Valid options are:\n"
 msgstr ""
 
-#: option.c:650 option.c:654
+#: option.c:659 option.c:663
 msgid "bad port"
 msgstr ""
 
-#: option.c:681 option.c:713
+#: option.c:690 option.c:722
 msgid "interface binding not supported"
 msgstr ""
 
-#: option.c:690 option.c:3179
+#: option.c:699 option.c:3275
 msgid "bad interface name"
 msgstr ""
 
-#: option.c:720
+#: option.c:729
 msgid "bad address"
 msgstr ""
 
-#: option.c:847
+#: option.c:863
 msgid "unsupported encapsulation for IPv6 option"
 msgstr ""
 
-#: option.c:861
+#: option.c:877
 msgid "bad dhcp-option"
 msgstr ""
 
-#: option.c:929
+#: option.c:945
 msgid "bad IP address"
 msgstr ""
 
-#: option.c:932 option.c:1070 option.c:2549
+#: option.c:948 option.c:1086 option.c:2620
 msgid "bad IPv6 address"
 msgstr ""
 
-#: option.c:1097 option.c:1191
+#: option.c:1113 option.c:1207
 msgid "bad domain in dhcp-option"
 msgstr ""
 
-#: option.c:1229
+#: option.c:1245
 msgid "dhcp-option too long"
 msgstr ""
 
-#: option.c:1236
+#: option.c:1252
 msgid "illegal dhcp-match"
 msgstr ""
 
-#: option.c:1298
+#: option.c:1314
 msgid "illegal repeated flag"
 msgstr ""
 
-#: option.c:1306
+#: option.c:1322
 msgid "illegal repeated keyword"
 msgstr ""
 
-#: option.c:1358 option.c:3702
+#: option.c:1374 option.c:3802
 #, c-format
 msgid "cannot access directory %s: %s"
 msgstr ""
 
-#: option.c:1390 tftp.c:474
+#: option.c:1406 tftp.c:487
 #, c-format
 msgid "cannot access %s: %s"
 msgstr ""
 
-#: option.c:1426
+#: option.c:1442
 msgid "setting log facility is not possible under Android"
 msgstr ""
 
-#: option.c:1435
+#: option.c:1451
 msgid "bad log facility"
 msgstr ""
 
-#: option.c:1484
+#: option.c:1500
 msgid "bad MX preference"
 msgstr ""
 
-#: option.c:1489
+#: option.c:1505
 msgid "bad MX name"
 msgstr ""
 
-#: option.c:1503
+#: option.c:1519
 msgid "bad MX target"
 msgstr ""
 
-#: option.c:1515
+#: option.c:1531
 msgid "cannot run scripts under uClinux"
 msgstr ""
 
-#: option.c:1517
+#: option.c:1533
 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
 msgstr ""
 
-#: option.c:1521
+#: option.c:1537
 msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
 msgstr ""
 
-#: option.c:1631
+#: option.c:1739 option.c:1800
 msgid "bad prefix"
 msgstr ""
 
-#: option.c:2043
+#: option.c:2094
 msgid "recompile with HAVE_IPSET defined to enable ipset directives"
 msgstr ""
 
-#: option.c:2223
+#: option.c:2274
 msgid "bad port range"
 msgstr ""
 
-#: option.c:2239
+#: option.c:2290
 msgid "bad bridge-interface"
 msgstr ""
 
-#: option.c:2297
+#: option.c:2350
 msgid "only one tag allowed"
 msgstr ""
 
-#: option.c:2317 option.c:2329 option.c:2461
+#: option.c:2370 option.c:2382 option.c:2491 option.c:2532
 msgid "bad dhcp-range"
 msgstr ""
 
-#: option.c:2344
+#: option.c:2397
 msgid "inconsistent DHCP range"
 msgstr ""
 
-#: option.c:2402
-msgid "prefix must be exactly 64 for RA subnets"
+#: option.c:2459
+msgid "prefix length must be exactly 64 for RA subnets"
 msgstr ""
 
-#: option.c:2404
-msgid "prefix must be exactly 64 for subnet constructors"
+#: option.c:2461
+msgid "prefix length must be exactly 64 for subnet constructors"
 msgstr ""
 
-#: option.c:2407
-msgid "prefix must be at least 64"
+#: option.c:2465
+msgid "prefix length must be at least 64"
 msgstr ""
 
-#: option.c:2412
+#: option.c:2468
 msgid "inconsistent DHCPv6 range"
 msgstr ""
 
-#: option.c:2519 option.c:2567
+#: option.c:2479
+msgid "prefix must be zero with \"constructor:\" argument"
+msgstr ""
+
+#: option.c:2590 option.c:2638
 msgid "bad hex constant"
 msgstr ""
 
-#: option.c:2541
+#: option.c:2612
 msgid "cannot match tags in --dhcp-host"
 msgstr ""
 
-#: option.c:2589
+#: option.c:2660
 #, c-format
 msgid "duplicate dhcp-host IP address %s"
 msgstr ""
 
-#: option.c:2645
+#: option.c:2716
 msgid "bad DHCP host name"
 msgstr ""
 
-#: option.c:2727
+#: option.c:2798
 msgid "bad tag-if"
 msgstr ""
 
-#: option.c:3051 option.c:3379
+#: option.c:3122 option.c:3479
 msgid "invalid port number"
 msgstr ""
 
-#: option.c:3113
+#: option.c:3184
 msgid "bad dhcp-proxy address"
 msgstr ""
 
-#: option.c:3124
+#: option.c:3210
+msgid "Bad dhcp-relay"
+msgstr ""
+
+#: option.c:3220
 msgid "bad DUID"
 msgstr ""
 
-#: option.c:3166
+#: option.c:3262
 msgid "invalid alias range"
 msgstr ""
 
-#: option.c:3205
+#: option.c:3305
 msgid "bad CNAME"
 msgstr ""
 
-#: option.c:3210
+#: option.c:3310
 msgid "duplicate CNAME"
 msgstr ""
 
-#: option.c:3230
+#: option.c:3330
 msgid "bad PTR record"
 msgstr ""
 
-#: option.c:3261
+#: option.c:3361
 msgid "bad NAPTR record"
 msgstr ""
 
-#: option.c:3295
+#: option.c:3395
 msgid "bad RR record"
 msgstr ""
 
-#: option.c:3324
+#: option.c:3424
 msgid "bad TXT record"
 msgstr ""
 
-#: option.c:3365
+#: option.c:3465
 msgid "bad SRV record"
 msgstr ""
 
-#: option.c:3372
+#: option.c:3472
 msgid "bad SRV target"
 msgstr ""
 
-#: option.c:3386
+#: option.c:3486
 msgid "invalid priority"
 msgstr ""
 
-#: option.c:3393
+#: option.c:3493
 msgid "invalid weight"
 msgstr ""
 
-#: option.c:3417
+#: option.c:3517
 msgid "Bad host-record"
 msgstr ""
 
-#: option.c:3434
+#: option.c:3534
 msgid "Bad name in host-record"
 msgstr ""
 
-#: option.c:3464
+#: option.c:3564
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr ""
 
-#: option.c:3522
+#: option.c:3622
 msgid "missing \""
 msgstr ""
 
-#: option.c:3579
+#: option.c:3679
 msgid "bad option"
 msgstr ""
 
-#: option.c:3581
+#: option.c:3681
 msgid "extraneous parameter"
 msgstr ""
 
-#: option.c:3583
+#: option.c:3683
 msgid "missing parameter"
 msgstr ""
 
-#: option.c:3590
+#: option.c:3690
 msgid "error"
 msgstr ""
 
-#: option.c:3592
+#: option.c:3692
 #, c-format
 msgid " at line %d of %s"
 msgstr ""
 
-#: option.c:3656 tftp.c:648
+#: option.c:3756 tftp.c:661
 #, c-format
 msgid "cannot read %s: %s"
 msgstr ""
 
-#: option.c:3823 option.c:3859
+#: option.c:3923 option.c:3959
 #, c-format
 msgid "read %s"
 msgstr ""
 
-#: option.c:3915
+#: option.c:4015
 msgid "junk found in command line"
 msgstr ""
 
-#: option.c:3950
+#: option.c:4050
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr ""
 
-#: option.c:3951
+#: option.c:4051
 #, c-format
 msgid ""
 "Compile time options: %s\n"
 "\n"
 msgstr ""
 
-#: option.c:3952
+#: option.c:4052
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr ""
 
-#: option.c:3953
+#: option.c:4053
 #, c-format
 msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
 msgstr ""
 
-#: option.c:3954
+#: option.c:4054
 #, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr ""
 
-#: option.c:3965
+#: option.c:4065
 msgid "try --help"
 msgstr ""
 
-#: option.c:3967
+#: option.c:4067
 msgid "try -w"
 msgstr ""
 
-#: option.c:3969
+#: option.c:4069
 #, c-format
 msgid "bad command line options: %s"
 msgstr ""
 
-#: option.c:4018
+#: option.c:4118
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr ""
 
-#: option.c:4046
+#: option.c:4146
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr ""
 
-#: option.c:4056
+#: option.c:4156
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr ""
 
-#: option.c:4059 network.c:1039 dhcp.c:794
+#: option.c:4159 network.c:1178 dhcp.c:768
 #, c-format
 msgid "failed to read %s: %s"
 msgstr ""
 
-#: option.c:4076
+#: option.c:4176
 #, c-format
 msgid "no search directive found in %s"
 msgstr ""
 
-#: option.c:4097
+#: option.c:4197
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr ""
 
-#: option.c:4101
+#: option.c:4201
 msgid "syntax check OK"
 msgstr ""
 
@@ -985,101 +1005,106 @@
 msgid "possible DNS-rebind attack detected: %s"
 msgstr ""
 
-#: network.c:414
+#: forward.c:1216
+#, c-format
+msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+msgstr ""
+
+#: network.c:551
 #, c-format
 msgid "failed to create listening socket for %s: %s"
 msgstr ""
 
-#: network.c:743
+#: network.c:882
 #, c-format
 msgid "interface %s failed to join DHCPv6 multicast group: %s"
 msgstr ""
 
-#: network.c:937
+#: network.c:1076
 #, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr ""
 
-#: network.c:974
+#: network.c:1113
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr ""
 
-#: network.c:985
+#: network.c:1124
 #, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr ""
 
-#: network.c:1002
+#: network.c:1141
 msgid "unqualified"
 msgstr ""
 
-#: network.c:1002
+#: network.c:1141
 msgid "names"
 msgstr ""
 
-#: network.c:1004
+#: network.c:1143
 msgid "default"
 msgstr ""
 
-#: network.c:1006
+#: network.c:1145
 msgid "domain"
 msgstr ""
 
-#: network.c:1009
+#: network.c:1148
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr ""
 
-#: network.c:1011
+#: network.c:1150
 #, c-format
 msgid "using standard nameservers for %s %s"
 msgstr ""
 
-#: network.c:1013
+#: network.c:1152
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr ""
 
-#: network.c:1016
+#: network.c:1155
 #, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr ""
 
-#: network.c:1018
+#: network.c:1157
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr ""
 
-#: dnsmasq.c:131
+#: dnsmasq.c:134
 msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
 msgstr ""
 
-#: dnsmasq.c:136
+#: dnsmasq.c:139
 msgid "Cannot use --conntrack AND --query-port"
 msgstr ""
 
-#: dnsmasq.c:139
+#: dnsmasq.c:142
 msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
 msgstr ""
 
-#: dnsmasq.c:144
+#: dnsmasq.c:147
 msgid "asychronous logging is not available under Solaris"
 msgstr ""
 
-#: dnsmasq.c:149
+#: dnsmasq.c:152
 msgid "asychronous logging is not available under Android"
 msgstr ""
 
-#: dnsmasq.c:154
+#: dnsmasq.c:157
 msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
 msgstr ""
 
-#: dnsmasq.c:164
+#: dnsmasq.c:167
 msgid "zone serial must be configured in --auth-soa"
 msgstr ""
 
-#: dnsmasq.c:186
+#: dnsmasq.c:185
 msgid "dhcp-range constructor not available on this platform"
 msgstr ""
 
@@ -1097,426 +1122,431 @@
 msgid "unknown interface %s"
 msgstr ""
 
-#: dnsmasq.c:274 dnsmasq.c:860
+#: dnsmasq.c:275 dnsmasq.c:870
 #, c-format
 msgid "DBus error: %s"
 msgstr ""
 
-#: dnsmasq.c:277
+#: dnsmasq.c:278
 msgid "DBus not available: set HAVE_DBUS in src/config.h"
 msgstr ""
 
-#: dnsmasq.c:305
+#: dnsmasq.c:306
 #, c-format
 msgid "unknown user or group: %s"
 msgstr ""
 
-#: dnsmasq.c:360
+#: dnsmasq.c:361
 #, c-format
 msgid "cannot chdir to filesystem root: %s"
 msgstr ""
 
-#: dnsmasq.c:597
+#: dnsmasq.c:598
 #, c-format
 msgid "started, version %s DNS disabled"
 msgstr ""
 
-#: dnsmasq.c:599
+#: dnsmasq.c:600
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr ""
 
-#: dnsmasq.c:601
+#: dnsmasq.c:602
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr ""
 
-#: dnsmasq.c:603
+#: dnsmasq.c:604
 #, c-format
 msgid "compile time options: %s"
 msgstr ""
 
-#: dnsmasq.c:609
+#: dnsmasq.c:610
 msgid "DBus support enabled: connected to system bus"
 msgstr ""
 
-#: dnsmasq.c:611
+#: dnsmasq.c:612
 msgid "DBus support enabled: bus connection pending"
 msgstr ""
 
-#: dnsmasq.c:616
+#: dnsmasq.c:617
 #, c-format
 msgid "warning: failed to change owner of %s: %s"
 msgstr ""
 
-#: dnsmasq.c:620
+#: dnsmasq.c:621
 msgid "setting --bind-interfaces option because of OS limitations"
 msgstr ""
 
-#: dnsmasq.c:625
+#: dnsmasq.c:626
 #, c-format
 msgid "warning: interface %s does not currently exist"
 msgstr ""
 
-#: dnsmasq.c:630
+#: dnsmasq.c:631
 msgid "warning: ignoring resolv-file flag because no-resolv is set"
 msgstr ""
 
-#: dnsmasq.c:633
+#: dnsmasq.c:634
 msgid "warning: no upstream servers configured"
 msgstr ""
 
-#: dnsmasq.c:637
+#: dnsmasq.c:638
 #, c-format
 msgid "asynchronous logging enabled, queue limit is %d messages"
 msgstr ""
 
-#: dnsmasq.c:652
+#: dnsmasq.c:659
 msgid "IPv6 router advertisement enabled"
 msgstr ""
 
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 msgid "root is "
 msgstr ""
 
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 msgid "enabled"
 msgstr ""
 
-#: dnsmasq.c:671
+#: dnsmasq.c:678
 msgid "secure mode"
 msgstr ""
 
-#: dnsmasq.c:697
+#: dnsmasq.c:704
 #, c-format
 msgid "restricting maximum simultaneous TFTP transfers to %d"
 msgstr ""
 
-#: dnsmasq.c:862
+#: dnsmasq.c:872
 msgid "connected to system DBus"
 msgstr ""
 
-#: dnsmasq.c:1007
+#: dnsmasq.c:1017
 #, c-format
 msgid "cannot fork into background: %s"
 msgstr ""
 
-#: dnsmasq.c:1010
+#: dnsmasq.c:1020
 #, c-format
 msgid "failed to create helper: %s"
 msgstr ""
 
-#: dnsmasq.c:1013
+#: dnsmasq.c:1023
 #, c-format
 msgid "setting capabilities failed: %s"
 msgstr ""
 
-#: dnsmasq.c:1016
+#: dnsmasq.c:1026
 #, c-format
 msgid "failed to change user-id to %s: %s"
 msgstr ""
 
-#: dnsmasq.c:1019
+#: dnsmasq.c:1029
 #, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr ""
 
-#: dnsmasq.c:1022
+#: dnsmasq.c:1032
 #, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr ""
 
-#: dnsmasq.c:1025
+#: dnsmasq.c:1035
 #, c-format
 msgid "cannot open log %s: %s"
 msgstr ""
 
-#: dnsmasq.c:1028
+#: dnsmasq.c:1038
 #, c-format
 msgid "failed to load Lua script: %s"
 msgstr ""
 
-#: dnsmasq.c:1031
+#: dnsmasq.c:1041
 #, c-format
 msgid "TFTP directory %s inaccessible: %s"
 msgstr ""
 
-#: dnsmasq.c:1095
+#: dnsmasq.c:1105
 #, c-format
 msgid "script process killed by signal %d"
 msgstr ""
 
-#: dnsmasq.c:1099
+#: dnsmasq.c:1109
 #, c-format
 msgid "script process exited with status %d"
 msgstr ""
 
-#: dnsmasq.c:1103
+#: dnsmasq.c:1113
 #, c-format
 msgid "failed to execute %s: %s"
 msgstr ""
 
-#: dnsmasq.c:1148
+#: dnsmasq.c:1158
 msgid "exiting on receipt of SIGTERM"
 msgstr ""
 
-#: dnsmasq.c:1176
+#: dnsmasq.c:1186
 #, c-format
 msgid "failed to access %s: %s"
 msgstr ""
 
-#: dnsmasq.c:1206
+#: dnsmasq.c:1216
 #, c-format
 msgid "reading %s"
 msgstr ""
 
-#: dnsmasq.c:1217
+#: dnsmasq.c:1227
 #, c-format
 msgid "no servers found in %s, will retry"
 msgstr ""
 
-#: dhcp.c:49
+#: dhcp.c:53
 #, c-format
 msgid "cannot create DHCP socket: %s"
 msgstr ""
 
-#: dhcp.c:64
+#: dhcp.c:68
 #, c-format
 msgid "failed to set options on DHCP socket: %s"
 msgstr ""
 
-#: dhcp.c:77
+#: dhcp.c:89
 #, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
 msgstr ""
 
-#: dhcp.c:89
+#: dhcp.c:101
 #, c-format
 msgid "failed to bind DHCP server socket: %s"
 msgstr ""
 
-#: dhcp.c:115
+#: dhcp.c:127
 #, c-format
 msgid "cannot create ICMP raw socket: %s."
 msgstr ""
 
-#: dhcp.c:225
+#: dhcp.c:239
 #, c-format
 msgid "unknown interface %s in bridge-interface"
 msgstr ""
 
-#: dhcp.c:250
+#: dhcp.c:278
 #, c-format
 msgid "DHCP packet received on %s which has no address"
 msgstr ""
 
-#: dhcp.c:457
+#: dhcp.c:505
 #, c-format
 msgid "DHCP range %s -- %s is not consistent with netmask %s"
 msgstr ""
 
-#: dhcp.c:832
+#: dhcp.c:806
 #, c-format
 msgid "bad line at %s line %d"
 msgstr ""
 
-#: dhcp.c:875
+#: dhcp.c:849
 #, c-format
 msgid "ignoring %s line %d, duplicate name or IP address"
 msgstr ""
 
+#: dhcp.c:993 rfc3315.c:2047
+#, c-format
+msgid "DHCP relay %s -> %s"
+msgstr ""
+
 #: lease.c:61
 #, c-format
 msgid "cannot open or create lease file %s: %s"
 msgstr ""
 
-#: lease.c:133
+#: lease.c:134
 msgid "too many stored leases"
 msgstr ""
 
-#: lease.c:164
+#: lease.c:165
 #, c-format
 msgid "cannot run lease-init script %s: %s"
 msgstr ""
 
-#: lease.c:170
+#: lease.c:171
 #, c-format
 msgid "lease-init script returned exit code %s"
 msgstr ""
 
-#: lease.c:339
+#: lease.c:342
 #, c-format
 msgid "failed to write %s: %s (retry in %us)"
 msgstr ""
 
-#: lease.c:843
+#: lease.c:871
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr ""
 
-#: rfc2131.c:337
+#: rfc2131.c:338
 #, c-format
 msgid "no address range available for DHCP request %s %s"
 msgstr ""
 
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "with subnet selector"
 msgstr ""
 
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "via"
 msgstr ""
 
-#: rfc2131.c:350
+#: rfc2131.c:351
 #, c-format
 msgid "%u available DHCP subnet: %s/%s"
 msgstr ""
 
-#: rfc2131.c:353 rfc3315.c:272
+#: rfc2131.c:354 rfc3315.c:292
 #, c-format
 msgid "%u available DHCP range: %s -- %s"
 msgstr ""
 
-#: rfc2131.c:382
-msgid "disabled"
-msgstr ""
-
-#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771
-#: rfc3315.c:1017
-msgid "ignored"
-msgstr ""
-
-#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814
-msgid "address in use"
-msgstr ""
-
-#: rfc2131.c:452 rfc2131.c:1007
-msgid "no address available"
-msgstr ""
-
-#: rfc2131.c:459 rfc2131.c:1154
-msgid "wrong network"
-msgstr ""
-
-#: rfc2131.c:474
-msgid "no address configured"
-msgstr ""
-
-#: rfc2131.c:480 rfc2131.c:1204
-msgid "no leases left"
-msgstr ""
-
-#: rfc2131.c:576 rfc3315.c:428
-#, c-format
-msgid "%u client provides name: %s"
-msgstr ""
-
-#: rfc2131.c:731
+#: rfc2131.c:465
 #, c-format
 msgid "%u vendor class: %s"
 msgstr ""
 
-#: rfc2131.c:733
+#: rfc2131.c:467
 #, c-format
 msgid "%u user class: %s"
 msgstr ""
 
+#: rfc2131.c:494
+msgid "disabled"
+msgstr ""
+
+#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813
+#: rfc3315.c:1082
+msgid "ignored"
+msgstr ""
+
+#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863
+msgid "address in use"
+msgstr ""
+
+#: rfc2131.c:564 rfc2131.c:1015
+msgid "no address available"
+msgstr ""
+
+#: rfc2131.c:571 rfc2131.c:1162
+msgid "wrong network"
+msgstr ""
+
+#: rfc2131.c:586
+msgid "no address configured"
+msgstr ""
+
+#: rfc2131.c:592 rfc2131.c:1212
+msgid "no leases left"
+msgstr ""
+
+#: rfc2131.c:687 rfc3315.c:466
+#, c-format
+msgid "%u client provides name: %s"
+msgstr ""
+
 #: rfc2131.c:792
 msgid "PXE BIS not supported"
 msgstr ""
 
-#: rfc2131.c:923 rfc3315.c:1111
+#: rfc2131.c:931 rfc3315.c:1176
 #, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr ""
 
-#: rfc2131.c:944
+#: rfc2131.c:952
 msgid "unknown lease"
 msgstr ""
 
-#: rfc2131.c:976
+#: rfc2131.c:984
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr ""
 
-#: rfc2131.c:986
+#: rfc2131.c:994
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr ""
 
-#: rfc2131.c:989
+#: rfc2131.c:997
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr ""
 
-#: rfc2131.c:1005 rfc2131.c:1197
+#: rfc2131.c:1013 rfc2131.c:1205
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:1092
+#: rfc2131.c:1100
 msgid "wrong server-ID"
 msgstr ""
 
-#: rfc2131.c:1111
+#: rfc2131.c:1119
 msgid "wrong address"
 msgstr ""
 
-#: rfc2131.c:1129 rfc3315.c:911
+#: rfc2131.c:1137 rfc3315.c:959
 msgid "lease not found"
 msgstr ""
 
-#: rfc2131.c:1162
+#: rfc2131.c:1170
 msgid "address not available"
 msgstr ""
 
-#: rfc2131.c:1173
+#: rfc2131.c:1181
 msgid "static lease available"
 msgstr ""
 
-#: rfc2131.c:1177
+#: rfc2131.c:1185
 msgid "address reserved"
 msgstr ""
 
-#: rfc2131.c:1185
+#: rfc2131.c:1193
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr ""
 
-#: rfc2131.c:1679
+#: rfc2131.c:1701
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr ""
 
-#: rfc2131.c:1688
+#: rfc2131.c:1710
 #, c-format
 msgid "%u server name: %s"
 msgstr ""
 
-#: rfc2131.c:1696
+#: rfc2131.c:1718
 #, c-format
 msgid "%u next server: %s"
 msgstr ""
 
-#: rfc2131.c:1699
+#: rfc2131.c:1721
 #, c-format
 msgid "%u broadcast response"
 msgstr ""
 
-#: rfc2131.c:1762
+#: rfc2131.c:1784
 #, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr ""
 
-#: rfc2131.c:2002
+#: rfc2131.c:2025
 msgid "PXE menu too large"
 msgstr ""
 
-#: rfc2131.c:2139 rfc3315.c:1332
+#: rfc2131.c:2162 rfc3315.c:1420
 #, c-format
 msgid "%u requested options: %s"
 msgstr ""
 
-#: rfc2131.c:2415
+#: rfc2131.c:2442
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr ""
@@ -1526,7 +1556,7 @@
 msgid "cannot create netlink socket: %s"
 msgstr ""
 
-#: netlink.c:354
+#: netlink.c:363
 #, c-format
 msgid "netlink returns error: %s"
 msgstr ""
@@ -1535,53 +1565,53 @@
 msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
 msgstr ""
 
-#: dbus.c:308 dbus.c:504
+#: dbus.c:523
 msgid "setting upstream servers from DBus"
 msgstr ""
 
-#: dbus.c:561
+#: dbus.c:570
 msgid "could not register a DBus message handler"
 msgstr ""
 
-#: bpf.c:197
+#: bpf.c:245
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr ""
 
-#: bpf.c:225
+#: bpf.c:273
 #, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr ""
 
-#: helper.c:145
+#: helper.c:151
 msgid "lease() function missing in Lua script"
 msgstr ""
 
-#: tftp.c:290
+#: tftp.c:303
 msgid "unable to get free port for TFTP"
 msgstr ""
 
-#: tftp.c:306
+#: tftp.c:319
 #, c-format
 msgid "unsupported request from %s"
 msgstr ""
 
-#: tftp.c:420
+#: tftp.c:433
 #, c-format
 msgid "file %s not found"
 msgstr ""
 
-#: tftp.c:529
+#: tftp.c:542
 #, c-format
 msgid "error %d %s received from %s"
 msgstr ""
 
-#: tftp.c:571
+#: tftp.c:584
 #, c-format
 msgid "failed sending %s to %s"
 msgstr ""
 
-#: tftp.c:571
+#: tftp.c:584
 #, c-format
 msgid "sent %s to %s"
 msgstr ""
@@ -1605,176 +1635,195 @@
 msgid "Conntrack connection mark retrieval failed: %s"
 msgstr ""
 
-#: dhcp6.c:49
+#: dhcp6.c:59
 #, c-format
 msgid "cannot create DHCPv6 socket: %s"
 msgstr ""
 
-#: dhcp6.c:62
+#: dhcp6.c:80
 #, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s"
 msgstr ""
 
-#: dhcp6.c:74
+#: dhcp6.c:92
 #, c-format
 msgid "failed to bind DHCPv6 server socket: %s"
 msgstr ""
 
-#: rfc3315.c:135
+#: rfc3315.c:149
 #, c-format
 msgid "no address range available for DHCPv6 request from relay at %s"
 msgstr ""
 
-#: rfc3315.c:144
+#: rfc3315.c:158
 #, c-format
 msgid "no address range available for DHCPv6 request via %s"
 msgstr ""
 
-#: rfc3315.c:269
+#: rfc3315.c:289
 #, c-format
 msgid "%u available DHCPv6 subnet: %s/%d"
 msgstr ""
 
-#: rfc3315.c:350
+#: rfc3315.c:370
 #, c-format
 msgid "%u vendor class: %u"
 msgstr ""
 
-#: rfc3315.c:609
+#: rfc3315.c:418
+#, c-format
+msgid "%u client MAC address: %s"
+msgstr ""
+
+#: rfc3315.c:650
 #, c-format
 msgid "unknown prefix-class %d"
 msgstr ""
 
-#: rfc3315.c:741 rfc3315.c:854
+#: rfc3315.c:781 rfc3315.c:903
 msgid "success"
 msgstr ""
 
-#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864
+#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913
 msgid "no addresses available"
 msgstr ""
 
-#: rfc3315.c:806
+#: rfc3315.c:855
 msgid "address unavailable"
 msgstr ""
 
-#: rfc3315.c:841
+#: rfc3315.c:890
 msgid "not on link"
 msgstr ""
 
-#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150
+#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215
 msgid "no binding found"
 msgstr ""
 
-#: rfc3315.c:948
+#: rfc3315.c:1001
 msgid "deprecated"
 msgstr ""
 
-#: rfc3315.c:951
+#: rfc3315.c:1006
 msgid "address invalid"
 msgstr ""
 
-#: rfc3315.c:992
+#: rfc3315.c:1048
 msgid "confirm failed"
 msgstr ""
 
-#: rfc3315.c:1003
+#: rfc3315.c:1059
 msgid "all addresses still on link"
 msgstr ""
 
-#: rfc3315.c:1082
+#: rfc3315.c:1147
 msgid "release received"
 msgstr ""
 
+#: rfc3315.c:2038
+msgid "Cannot multicast to DHCPv6 server without correct interface"
+msgstr ""
+
 #: dhcp-common.c:145
 #, c-format
 msgid "Ignoring duplicate dhcp-option %d"
 msgstr ""
 
-#: dhcp-common.c:215
+#: dhcp-common.c:222
 #, c-format
 msgid "%u tags: %s"
 msgstr ""
 
-#: dhcp-common.c:296
+#: dhcp-common.c:407
 #, c-format
 msgid "%s has more than one address in hostsfile, using %s for DHCP"
 msgstr ""
 
-#: dhcp-common.c:319
+#: dhcp-common.c:430
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr ""
 
-#: dhcp-common.c:367
+#: dhcp-common.c:484
 #, c-format
 msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s"
 msgstr ""
 
-#: dhcp-common.c:489
+#: dhcp-common.c:606
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr ""
 
-#: dhcp-common.c:500
+#: dhcp-common.c:617
 #, c-format
 msgid "Known DHCPv6 options:\n"
 msgstr ""
 
-#: dhcp-common.c:693
+#: dhcp-common.c:814
 msgid ", prefix deprecated"
 msgstr ""
 
-#: dhcp-common.c:696
+#: dhcp-common.c:817
 #, c-format
 msgid ", lease time "
 msgstr ""
 
-#: dhcp-common.c:727
+#: dhcp-common.c:849
 #, c-format
 msgid "%s stateless on %s%.0s%.0s%s"
 msgstr ""
 
-#: dhcp-common.c:729
+#: dhcp-common.c:851
 #, c-format
 msgid "%s, static leases only on %.0s%s%s%.0s"
 msgstr ""
 
-#: dhcp-common.c:731
+#: dhcp-common.c:853
 #, c-format
 msgid "%s, proxy on subnet %.0s%s%.0s%.0s"
 msgstr ""
 
-#: dhcp-common.c:732
+#: dhcp-common.c:854
 #, c-format
 msgid "%s, IP range %s -- %s%s%.0s"
 msgstr ""
 
-#: dhcp-common.c:739
+#: dhcp-common.c:861
 #, c-format
 msgid "DHCPv4-derived IPv6 names on %s%s"
 msgstr ""
 
-#: dhcp-common.c:742
+#: dhcp-common.c:864
 #, c-format
 msgid "router advertisement on %s%s"
 msgstr ""
 
-#: radv.c:87
+#: dhcp-common.c:875
+#, c-format
+msgid "DHCP relay from %s to %s via %s"
+msgstr ""
+
+#: dhcp-common.c:877
+#, c-format
+msgid "DHCP relay from %s to %s"
+msgstr ""
+
+#: radv.c:93
 #, c-format
 msgid "cannot create ICMPv6 socket: %s"
 msgstr ""
 
-#: auth.c:402
+#: auth.c:435
 #, c-format
 msgid "ignoring zone transfer request from %s"
 msgstr ""
 
-#: ipset.c:71
+#: ipset.c:95
 #, c-format
 msgid "failed to find kernel version: %s"
 msgstr ""
 
-#: ipset.c:90
+#: ipset.c:114
 #, c-format
 msgid "failed to create IPset control socket: %s"
 msgstr ""
diff --git a/po/ro.po b/po/ro.po
index be75933..60393c7 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -21,17 +21,17 @@
 msgid "failed to load names from %s: %s"
 msgstr "încărcarea numelor din %s: %s a eÅŸuat"
 
-#: cache.c:834 dhcp.c:845
+#: cache.c:834 dhcp.c:819
 #, c-format
 msgid "bad address at %s line %d"
 msgstr "adresă greÅŸită în %s, linia %d"
 
-#: cache.c:885 dhcp.c:861
+#: cache.c:885 dhcp.c:835
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "nume greÅŸit în %s linia %d"
 
-#: cache.c:892 dhcp.c:936
+#: cache.c:892 dhcp.c:910
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "citesc %s - %d adrese"
@@ -40,37 +40,37 @@
 msgid "cleared cache"
 msgstr "memoria temporară a fost ştearsă"
 
-#: cache.c:1016
+#: cache.c:984
 #, c-format
 msgid "No IPv4 address found for %s"
 msgstr ""
 
-#: cache.c:1093
+#: cache.c:1061
 #, c-format
 msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
 msgstr ""
 
-#: cache.c:1117
+#: cache.c:1085
 #, c-format
 msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
 msgstr "nu pot da numele %s împrumutului de adresă DHCP a lui %s deoarece numeleexistă în %s cu adresa %s"
 
-#: cache.c:1162
+#: cache.c:1130
 #, c-format
 msgid "time %lu"
 msgstr ""
 
-#: cache.c:1163
+#: cache.c:1131
 #, fuzzy, c-format
 msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
 msgstr "cantitate de memorie temporară %d, %d/%d stocări temporare aureutilizat locaţii neexpirate."
 
-#: cache.c:1165
+#: cache.c:1133
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr ""
 
-#: cache.c:1188
+#: cache.c:1156
 #, c-format
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr ""
@@ -80,563 +80,575 @@
 msgid "failed to seed the random number generator: %s"
 msgstr "ascultarea pe socket a eÅŸuat: %s"
 
-#: util.c:189
+#: util.c:192
 #, fuzzy
 msgid "failed to allocate memory"
 msgstr "nu pot încărca %d bytes"
 
-#: util.c:227 option.c:531
+#: util.c:230 option.c:540
 msgid "could not get memory"
 msgstr "nu am putut aloca memorie"
 
-#: util.c:237
+#: util.c:240
 #, fuzzy, c-format
 msgid "cannot create pipe: %s"
 msgstr "nu pot citi %s: %s"
 
-#: util.c:245
+#: util.c:248
 #, fuzzy, c-format
 msgid "failed to allocate %d bytes"
 msgstr "nu pot încărca %d bytes"
 
-#: util.c:400
+#: util.c:403
 #, c-format
 msgid "infinite"
 msgstr "infinit"
 
-#: option.c:286
+#: option.c:292
 msgid "Specify local address(es) to listen on."
 msgstr "Specificaţi adresele locale deservite."
 
-#: option.c:287
+#: option.c:293
 msgid "Return ipaddr for all hosts in specified domains."
 msgstr "AfiÅŸează adresele IP ale maÅŸinilor în domeniul dat."
 
-#: option.c:288
+#: option.c:294
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr "Simulează căutări după adresă pentru domenii de adresă private (RFC1918)."
 
-#: option.c:289
+#: option.c:295
 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
 msgstr "Interpretează adresa IP ca NXDOMAIN (împotriva manipulărilor Verisign)"
 
-#: option.c:290
+#: option.c:296
 #, c-format
 msgid "Specify the size of the cache in entries (defaults to %s)."
 msgstr "Specifică mărimea înregistrărilor temporare (implicit e %s)."
 
-#: option.c:291
+#: option.c:297
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr "Specifică fişier de configurare (implicit e %s)."
 
-#: option.c:292
+#: option.c:298
 msgid "Do NOT fork into the background: run in debug mode."
 msgstr "NU porneÅŸte în fundal: rulează în modul depanare."
 
-#: option.c:293
+#: option.c:299
 msgid "Do NOT forward queries with no domain part."
 msgstr "NU înainta cererile ce nu conÅ£in domeniu DNS."
 
-#: option.c:294
+#: option.c:300
 msgid "Return self-pointing MX records for local hosts."
 msgstr "Răspunde cu înregistrări MX spre el însuÅŸi pentru maÅŸini locale."
 
-#: option.c:295
+#: option.c:301
 msgid "Expand simple names in /etc/hosts with domain-suffix."
 msgstr "Adaugă numelor simple din /etc/hosts numele domeniului ca sufix."
 
-#: option.c:296
+#: option.c:302
 msgid "Don't forward spurious DNS requests from Windows hosts."
 msgstr "Nu inainta cereri DNS defecte provenite de la maÅŸini Windows."
 
-#: option.c:297
+#: option.c:303
 msgid "Enable DHCP in the range given with lease duration."
 msgstr "Activează DHCP în domeniul dat cu durată limitată de împrumut."
 
-#: option.c:298
+#: option.c:304
 #, c-format
 msgid "Change to this group after startup (defaults to %s)."
 msgstr "Rulează sub acest grup după pornire (implicit e %s)."
 
-#: option.c:299
+#: option.c:305
 msgid "Set address or hostname for a specified machine."
 msgstr "Schimbă adresa sau numele maşinii specificate."
 
-#: option.c:300
+#: option.c:306
 #, fuzzy
 msgid "Read DHCP host specs from file."
 msgstr "nume MX invalid"
 
-#: option.c:301
+#: option.c:307
 msgid "Read DHCP option specs from file."
 msgstr ""
 
-#: option.c:302
+#: option.c:308
 msgid "Evaluate conditional tag expression."
 msgstr ""
 
-#: option.c:303
+#: option.c:309
 #, c-format
 msgid "Do NOT load %s file."
 msgstr "Nu încarcă fiÅŸierul %s."
 
-#: option.c:304
+#: option.c:310
 #, c-format
 msgid "Specify a hosts file to be read in addition to %s."
 msgstr "Specifică spre citire un fişier hosts adiţional la %s."
 
-#: option.c:305
+#: option.c:311
 msgid "Specify interface(s) to listen on."
 msgstr "Specifică interfeţele deservite."
 
-#: option.c:306
+#: option.c:312
 msgid "Specify interface(s) NOT to listen on."
 msgstr "Specifică interfeţele NE-deservite."
 
-#: option.c:307
+#: option.c:313
 #, fuzzy
 msgid "Map DHCP user class to tag."
 msgstr "Leagă clasa de utilizator DHCP cu grup de opţiuni."
 
-#: option.c:308
+#: option.c:314
 msgid "Map RFC3046 circuit-id to tag."
 msgstr ""
 
-#: option.c:309
+#: option.c:315
 msgid "Map RFC3046 remote-id to tag."
 msgstr ""
 
-#: option.c:310
+#: option.c:316
 msgid "Map RFC3993 subscriber-id to tag."
 msgstr ""
 
-#: option.c:311
+#: option.c:317
 #, fuzzy
 msgid "Don't do DHCP for hosts with tag set."
 msgstr "Nu furniza DHCP maşinilor din grupul de opţiuni."
 
-#: option.c:312
+#: option.c:318
 #, fuzzy
 msgid "Force broadcast replies for hosts with tag set."
 msgstr "Nu furniza DHCP maşinilor din grupul de opţiuni."
 
-#: option.c:313
+#: option.c:319
 msgid "Do NOT fork into the background, do NOT run in debug mode."
 msgstr "NU porneÅŸte în fundal, NU rulează în modul depanare."
 
-#: option.c:314
+#: option.c:320
 msgid "Assume we are the only DHCP server on the local network."
 msgstr "Presupune că suntem singurul server DHCP din reţeaua locală."
 
-#: option.c:315
+#: option.c:321
 #, c-format
 msgid "Specify where to store DHCP leases (defaults to %s)."
 msgstr "Specifică fiÅŸierul de stocare a împrumuturilor DHCP (implicit e %s)."
 
-#: option.c:316
+#: option.c:322
 msgid "Return MX records for local hosts."
 msgstr "Răspunde cu întregistrări MX pentru maÅŸini locale."
 
-#: option.c:317
+#: option.c:323
 msgid "Specify an MX record."
 msgstr "Specifică o înregistrare MX."
 
-#: option.c:318
+#: option.c:324
 msgid "Specify BOOTP options to DHCP server."
 msgstr "Specifică opţiuni BOOTP serverului DHCP."
 
-#: option.c:319
+#: option.c:325
 #, c-format
 msgid "Do NOT poll %s file, reload only on SIGHUP."
 msgstr "Nu încărca fiÅŸierul %s, citeÅŸte-l doar la SIGHUP."
 
-#: option.c:320
+#: option.c:326
 msgid "Do NOT cache failed search results."
 msgstr "NU memora rezultatele de căutare DNS eşuatată."
 
-#: option.c:321
+#: option.c:327
 #, c-format
 msgid "Use nameservers strictly in the order given in %s."
 msgstr "FoloseÅŸte servere DNS strict în ordinea dată în %s."
 
-#: option.c:322
+#: option.c:328
 #, fuzzy
 msgid "Specify options to be sent to DHCP clients."
 msgstr "Configurează opÅ£iuni în plusce trebuie trimise clienÅ£ilor DHCP."
 
-#: option.c:323
+#: option.c:329
 msgid "DHCP option sent even if the client does not request it."
 msgstr ""
 
-#: option.c:324
+#: option.c:330
 msgid "Specify port to listen for DNS requests on (defaults to 53)."
 msgstr "Specifică numărul portului pentru cereri DNS (implicit e 53)."
 
-#: option.c:325
+#: option.c:331
 #, c-format
 msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
 msgstr "Marimea maximă a pachetului UDP pentru EDNS.0 (implicit e %s)."
 
-#: option.c:326
+#: option.c:332
 #, fuzzy
 msgid "Log DNS queries."
 msgstr "Înregistrează tranzacÅ£iile."
 
-#: option.c:327
+#: option.c:333
 #, fuzzy
 msgid "Force the originating port for upstream DNS queries."
 msgstr "Forţează acest port pentru datele ce pleacă."
 
-#: option.c:328
+#: option.c:334
 msgid "Do NOT read resolv.conf."
 msgstr "NU citi fiÅŸierul resolv.conf"
 
-#: option.c:329
+#: option.c:335
 #, c-format
 msgid "Specify path to resolv.conf (defaults to %s)."
 msgstr "Specifică calea către resolv.conf (implicit e %s)."
 
-#: option.c:330
+#: option.c:336
 msgid "Specify address(es) of upstream servers with optional domains."
 msgstr "Specifică adresele server(elor) superioare cu domenii opţionale."
 
-#: option.c:331
+#: option.c:337
 msgid "Never forward queries to specified domains."
 msgstr "Nu înaintează cererile spre domeniile specificate."
 
-#: option.c:332
+#: option.c:338
 msgid "Specify the domain to be assigned in DHCP leases."
 msgstr "Specifică domeniul de transmis prin DHCP."
 
-#: option.c:333
+#: option.c:339
 msgid "Specify default target in an MX record."
 msgstr "Specifică o Å£intă într-o înregistrare MX."
 
-#: option.c:334
+#: option.c:340
 msgid "Specify time-to-live in seconds for replies from /etc/hosts."
 msgstr "Specifică TTL în secunde pentru răspunsurile din /etc/hosts."
 
-#: option.c:335
+#: option.c:341
 #, fuzzy
 msgid "Specify time-to-live in seconds for negative caching."
 msgstr "Specifică TTL în secunde pentru răspunsurile din /etc/hosts."
 
-#: option.c:336
+#: option.c:342
 #, fuzzy
 msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
 msgstr "Specifică TTL în secunde pentru răspunsurile din /etc/hosts."
 
-#: option.c:337
+#: option.c:343
 #, c-format
 msgid "Change to this user after startup. (defaults to %s)."
 msgstr "Rulează sub acest utilizator după pornire. (implicit e %s)."
 
-#: option.c:338
+#: option.c:344
 #, fuzzy
 msgid "Map DHCP vendor class to tag."
 msgstr "Trimite opÅ£iuni DHCP în funcÅ£ie de marca plăcii de reÅ£ea."
 
-#: option.c:339
+#: option.c:345
 msgid "Display dnsmasq version and copyright information."
 msgstr "Afişează versiunea dnsmasq şi drepturile de autor."
 
-#: option.c:340
+#: option.c:346
 msgid "Translate IPv4 addresses from upstream servers."
 msgstr "Traduce adresele IPv4 de la serverele DNS superioare."
 
-#: option.c:341
+#: option.c:347
 msgid "Specify a SRV record."
 msgstr "Specifică o înregistrare SRV."
 
-#: option.c:342
+#: option.c:348
 msgid "Display this message. Use --help dhcp for known DHCP options."
 msgstr ""
 
-#: option.c:343
+#: option.c:349
 #, fuzzy, c-format
 msgid "Specify path of PID file (defaults to %s)."
 msgstr "Specifică o cale pentru fişierul PID. (implicit %s)."
 
-#: option.c:344
+#: option.c:350
 #, c-format
 msgid "Specify maximum number of DHCP leases (defaults to %s)."
 msgstr "Specifică numărul maxim de împrumuturi DHCP (implicit %s)."
 
-#: option.c:345
+#: option.c:351
 msgid "Answer DNS queries based on the interface a query was sent to."
 msgstr "Răspunde cererilor DNS în funcÅ£ie de interfaÅ£a pe care a venit cererea."
 
-#: option.c:346
+#: option.c:352
 msgid "Specify TXT DNS record."
 msgstr "Specifică o înregistrare TXT."
 
-#: option.c:347
+#: option.c:353
 #, fuzzy
 msgid "Specify PTR DNS record."
 msgstr "Specifică o înregistrare TXT."
 
-#: option.c:348
+#: option.c:354
 msgid "Give DNS name to IPv4 address of interface."
 msgstr ""
 
-#: option.c:349
+#: option.c:355
 msgid "Bind only to interfaces in use."
 msgstr "Ascultă doar pe interfeţele active."
 
-#: option.c:350
+#: option.c:356
 #, c-format
 msgid "Read DHCP static host information from %s."
 msgstr "Citeşte informaţii DHCP statice despre maşină din %s."
 
-#: option.c:351
+#: option.c:357
 msgid "Enable the DBus interface for setting upstream servers, etc."
 msgstr "Activeaza interfaţa DBus pentru configurarea serverelor superioare."
 
-#: option.c:352
+#: option.c:358
 msgid "Do not provide DHCP on this interface, only provide DNS."
 msgstr "Nu activează DHCP ci doar DNS pe această interfaţă."
 
-#: option.c:353
+#: option.c:359
 msgid "Enable dynamic address allocation for bootp."
 msgstr "Activează alocarea dinamică a adreselor pentru BOOTP."
 
-#: option.c:354
+#: option.c:360
 #, fuzzy
 msgid "Map MAC address (with wildcards) to option set."
 msgstr "Trimite opÅ£iuni DHCP în funcÅ£ie de marca plăcii de reÅ£ea."
 
-#: option.c:355
+#: option.c:361
 msgid "Treat DHCP requests on aliases as arriving from interface."
 msgstr ""
 
-#: option.c:356
+#: option.c:362
 msgid "Disable ICMP echo address checking in the DHCP server."
 msgstr ""
 
-#: option.c:357
+#: option.c:363
 msgid "Shell script to run on DHCP lease creation and destruction."
 msgstr ""
 
-#: option.c:358
+#: option.c:364
 msgid "Lua script to run on DHCP lease creation and destruction."
 msgstr ""
 
-#: option.c:359
+#: option.c:365
 msgid "Run lease-change scripts as this user."
 msgstr ""
 
-#: option.c:360
+#: option.c:366
 msgid "Read configuration from all the files in this directory."
 msgstr ""
 
-#: option.c:361
+#: option.c:367
 #, fuzzy
 msgid "Log to this syslog facility or file. (defaults to DAEMON)"
 msgstr "Rulează sub acest utilizator după pornire. (implicit e %s)."
 
-#: option.c:362
+#: option.c:368
 msgid "Do not use leasefile."
 msgstr ""
 
-#: option.c:363
+#: option.c:369
 #, fuzzy, c-format
 msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
 msgstr "Specifică numărul maxim de împrumuturi DHCP (implicit %s)."
 
-#: option.c:364
+#: option.c:370
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr ""
 
-#: option.c:365
+#: option.c:371
 msgid "Ignore hostnames provided by DHCP clients."
 msgstr ""
 
-#: option.c:366
+#: option.c:372
 msgid "Do NOT reuse filename and server fields for extra DHCP options."
 msgstr ""
 
-#: option.c:367
+#: option.c:373
 msgid "Enable integrated read-only TFTP server."
 msgstr ""
 
-#: option.c:368
+#: option.c:374
 msgid "Export files by TFTP only from the specified subtree."
 msgstr ""
 
-#: option.c:369
+#: option.c:375
 msgid "Add client IP address to tftp-root."
 msgstr ""
 
-#: option.c:370
+#: option.c:376
 msgid "Allow access only to files owned by the user running dnsmasq."
 msgstr ""
 
-#: option.c:371
+#: option.c:377
 #, fuzzy, c-format
 msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
 msgstr "Specifică numărul maxim de împrumuturi DHCP (implicit %s)."
 
-#: option.c:372
+#: option.c:378
 msgid "Disable the TFTP blocksize extension."
 msgstr ""
 
-#: option.c:373
+#: option.c:379
 msgid "Convert TFTP filenames to lowercase"
 msgstr ""
 
-#: option.c:374
+#: option.c:380
 msgid "Ephemeral port range for use by TFTP transfers."
 msgstr ""
 
-#: option.c:375
+#: option.c:381
 msgid "Extra logging for DHCP."
 msgstr ""
 
-#: option.c:376
+#: option.c:382
 msgid "Enable async. logging; optionally set queue length."
 msgstr ""
 
-#: option.c:377
+#: option.c:383
 msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
 msgstr ""
 
-#: option.c:378
+#: option.c:384
 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
 msgstr ""
 
-#: option.c:379
+#: option.c:385
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr ""
 
-#: option.c:380
+#: option.c:386
 msgid "Always perform DNS queries to all servers."
 msgstr ""
 
-#: option.c:381
+#: option.c:387
 msgid "Set tag if client includes matching option in request."
 msgstr ""
 
-#: option.c:382
-msgid "Use alternative ports for DHCP."
-msgstr ""
-
-#: option.c:383
-#, fuzzy
-msgid "Specify NAPTR DNS record."
-msgstr "Specifică o înregistrare TXT."
-
-#: option.c:384
-msgid "Specify lowest port available for DNS query transmission."
-msgstr ""
-
-#: option.c:385
-msgid "Use only fully qualified domain names for DHCP clients."
-msgstr ""
-
-#: option.c:386
-msgid "Generate hostnames based on MAC address for nameless clients."
-msgstr ""
-
-#: option.c:387
-msgid "Use these DHCP relays as full proxies."
-msgstr ""
-
 #: option.c:388
-msgid "Specify alias name for LOCAL DNS name."
+msgid "Use alternative ports for DHCP."
 msgstr ""
 
 #: option.c:389
 #, fuzzy
-msgid "Prompt to send to PXE clients."
-msgstr "Configurează opÅ£iuni în plusce trebuie trimise clienÅ£ilor DHCP."
+msgid "Specify NAPTR DNS record."
+msgstr "Specifică o înregistrare TXT."
 
 #: option.c:390
-msgid "Boot service for PXE menu."
+msgid "Specify lowest port available for DNS query transmission."
 msgstr ""
 
 #: option.c:391
-msgid "Check configuration syntax."
+msgid "Use only fully qualified domain names for DHCP clients."
 msgstr ""
 
 #: option.c:392
-msgid "Add requestor's MAC address to forwarded DNS queries."
+msgid "Generate hostnames based on MAC address for nameless clients."
 msgstr ""
 
 #: option.c:393
+msgid "Use these DHCP relays as full proxies."
+msgstr ""
+
+#: option.c:394
+msgid "Relay DHCP requests to a remote server"
+msgstr ""
+
+#: option.c:395
+msgid "Specify alias name for LOCAL DNS name."
+msgstr ""
+
+#: option.c:396
+#, fuzzy
+msgid "Prompt to send to PXE clients."
+msgstr "Configurează opÅ£iuni în plusce trebuie trimise clienÅ£ilor DHCP."
+
+#: option.c:397
+msgid "Boot service for PXE menu."
+msgstr ""
+
+#: option.c:398
+msgid "Check configuration syntax."
+msgstr ""
+
+#: option.c:399
+msgid "Add requestor's MAC address to forwarded DNS queries."
+msgstr ""
+
+#: option.c:400
 #, fuzzy
 msgid "Proxy DNSSEC validation results from upstream nameservers."
 msgstr "Traduce adresele IPv4 de la serverele DNS superioare."
 
-#: option.c:394
+#: option.c:401
 msgid "Attempt to allocate sequential IP addresses to DHCP clients."
 msgstr ""
 
-#: option.c:395
+#: option.c:402
 msgid "Copy connection-track mark from queries to upstream connections."
 msgstr ""
 
-#: option.c:396
+#: option.c:403
 msgid "Allow DHCP clients to do their own DDNS updates."
 msgstr ""
 
-#: option.c:397
+#: option.c:404
 msgid "Send router-advertisements for interfaces doing DHCPv6"
 msgstr ""
 
-#: option.c:398
+#: option.c:405
+msgid "Always send frequent router-advertisements"
+msgstr ""
+
+#: option.c:406
 msgid "Specify DUID_EN-type DHCPv6 server DUID"
 msgstr ""
 
-#: option.c:399
+#: option.c:407
 #, fuzzy
 msgid "Specify host (A/AAAA and PTR) records"
 msgstr "Specifică o înregistrare MX."
 
-#: option.c:400
+#: option.c:408
 #, fuzzy
 msgid "Specify arbitrary DNS resource record"
 msgstr "Specifică o înregistrare TXT."
 
-#: option.c:401
+#: option.c:409
 #, fuzzy
 msgid "Bind to interfaces in use - check for new interfaces"
 msgstr "interfaţă necunoscută %s"
 
-#: option.c:402
+#: option.c:410
 msgid "Export local names to global DNS"
 msgstr ""
 
-#: option.c:403
+#: option.c:411
 msgid "Domain to export to global DNS"
 msgstr ""
 
-#: option.c:404
+#: option.c:412
 msgid "Set TTL for authoritative replies"
 msgstr ""
 
-#: option.c:405
+#: option.c:413
 msgid "Set authoritive zone information"
 msgstr ""
 
-#: option.c:406
+#: option.c:414
 msgid "Secondary authoritative nameservers for forward domains"
 msgstr ""
 
-#: option.c:407
+#: option.c:415
 msgid "Peers which are allowed to do zone transfer"
 msgstr ""
 
-#: option.c:408
+#: option.c:416
 msgid "Specify ipsets to which matching domains should be added"
 msgstr ""
 
-#: option.c:410
+#: option.c:417
+msgid "Specify a domain and address range for sythesised names"
+msgstr ""
+
+#: option.c:419
 msgid "Specify DHCPv6 prefix class"
 msgstr ""
 
-#: option.c:596
+#: option.c:605
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -645,305 +657,314 @@
 "Utilizare: dnsmasq [opţiuni]\n"
 "\n"
 
-#: option.c:598
+#: option.c:607
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr "FolosiÅ£i opÅ£iunile prescurtate doar în linie de comandă.\n"
 
-#: option.c:600
+#: option.c:609
 #, fuzzy, c-format
 msgid "Valid options are:\n"
 msgstr "Opţiunile valide sunt:\n"
 
-#: option.c:650 option.c:654
+#: option.c:659 option.c:663
 msgid "bad port"
 msgstr "port invalid"
 
-#: option.c:681 option.c:713
+#: option.c:690 option.c:722
 msgid "interface binding not supported"
 msgstr ""
 
-#: option.c:690 option.c:3179
+#: option.c:699 option.c:3275
 #, fuzzy
 msgid "bad interface name"
 msgstr "nume MX invalid"
 
-#: option.c:720
+#: option.c:729
 #, fuzzy
 msgid "bad address"
 msgstr "citesc %s - %d adrese"
 
-#: option.c:847
+#: option.c:863
 msgid "unsupported encapsulation for IPv6 option"
 msgstr ""
 
-#: option.c:861
+#: option.c:877
 msgid "bad dhcp-option"
 msgstr "dhcp-option invalid"
 
-#: option.c:929
+#: option.c:945
 #, fuzzy
 msgid "bad IP address"
 msgstr "citesc %s - %d adrese"
 
-#: option.c:932 option.c:1070 option.c:2549
+#: option.c:948 option.c:1086 option.c:2620
 #, fuzzy
 msgid "bad IPv6 address"
 msgstr "citesc %s - %d adrese"
 
-#: option.c:1097 option.c:1191
+#: option.c:1113 option.c:1207
 msgid "bad domain in dhcp-option"
 msgstr "domeniu DNS invalid în declaraÅ£ia dhcp-option"
 
-#: option.c:1229
+#: option.c:1245
 msgid "dhcp-option too long"
 msgstr "declararea dhcp-option este prea lungă"
 
-#: option.c:1236
+#: option.c:1252
 msgid "illegal dhcp-match"
 msgstr ""
 
-#: option.c:1298
+#: option.c:1314
 msgid "illegal repeated flag"
 msgstr ""
 
-#: option.c:1306
+#: option.c:1322
 msgid "illegal repeated keyword"
 msgstr ""
 
-#: option.c:1358 option.c:3702
+#: option.c:1374 option.c:3802
 #, fuzzy, c-format
 msgid "cannot access directory %s: %s"
 msgstr "nu pot citi %s: %s"
 
-#: option.c:1390 tftp.c:474
+#: option.c:1406 tftp.c:487
 #, fuzzy, c-format
 msgid "cannot access %s: %s"
 msgstr "nu pot citi %s: %s"
 
-#: option.c:1426
+#: option.c:1442
 msgid "setting log facility is not possible under Android"
 msgstr ""
 
-#: option.c:1435
+#: option.c:1451
 msgid "bad log facility"
 msgstr ""
 
-#: option.c:1484
+#: option.c:1500
 msgid "bad MX preference"
 msgstr "preferinţă MX invalidă"
 
-#: option.c:1489
+#: option.c:1505
 msgid "bad MX name"
 msgstr "nume MX invalid"
 
-#: option.c:1503
+#: option.c:1519
 msgid "bad MX target"
 msgstr "ţintă MX invalidă"
 
-#: option.c:1515
+#: option.c:1531
 msgid "cannot run scripts under uClinux"
 msgstr ""
 
-#: option.c:1517
+#: option.c:1533
 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
 msgstr ""
 
-#: option.c:1521
+#: option.c:1537
 msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
 msgstr ""
 
-#: option.c:1631
+#: option.c:1739 option.c:1800
 #, fuzzy
 msgid "bad prefix"
 msgstr "port invalid"
 
-#: option.c:2043
+#: option.c:2094
 msgid "recompile with HAVE_IPSET defined to enable ipset directives"
 msgstr ""
 
-#: option.c:2223
+#: option.c:2274
 #, fuzzy
 msgid "bad port range"
 msgstr "port invalid"
 
-#: option.c:2239
+#: option.c:2290
 msgid "bad bridge-interface"
 msgstr ""
 
-#: option.c:2297
+#: option.c:2350
 msgid "only one tag allowed"
 msgstr ""
 
-#: option.c:2317 option.c:2329 option.c:2461
+#: option.c:2370 option.c:2382 option.c:2491 option.c:2532
 msgid "bad dhcp-range"
 msgstr "dhcp-range invalid"
 
-#: option.c:2344
+#: option.c:2397
 msgid "inconsistent DHCP range"
 msgstr "domeniu DHCP inconsistent"
 
-#: option.c:2402
-msgid "prefix must be exactly 64 for RA subnets"
+#: option.c:2459
+msgid "prefix length must be exactly 64 for RA subnets"
 msgstr ""
 
-#: option.c:2404
-msgid "prefix must be exactly 64 for subnet constructors"
+#: option.c:2461
+msgid "prefix length must be exactly 64 for subnet constructors"
 msgstr ""
 
-#: option.c:2407
-msgid "prefix must be at least 64"
+#: option.c:2465
+msgid "prefix length must be at least 64"
 msgstr ""
 
-#: option.c:2412
+#: option.c:2468
 #, fuzzy
 msgid "inconsistent DHCPv6 range"
 msgstr "domeniu DHCP inconsistent"
 
-#: option.c:2519 option.c:2567
+#: option.c:2479
+msgid "prefix must be zero with \"constructor:\" argument"
+msgstr ""
+
+#: option.c:2590 option.c:2638
 #, fuzzy
 msgid "bad hex constant"
 msgstr "dhcp-host invalid"
 
-#: option.c:2541
+#: option.c:2612
 msgid "cannot match tags in --dhcp-host"
 msgstr ""
 
-#: option.c:2589
+#: option.c:2660
 #, fuzzy, c-format
 msgid "duplicate dhcp-host IP address %s"
 msgstr "adresă IP duplicat %s în declaraÅ£ia dhcp-config."
 
-#: option.c:2645
+#: option.c:2716
 #, fuzzy
 msgid "bad DHCP host name"
 msgstr "nume MX invalid"
 
-#: option.c:2727
+#: option.c:2798
 #, fuzzy
 msgid "bad tag-if"
 msgstr "ţintă MX invalidă"
 
-#: option.c:3051 option.c:3379
+#: option.c:3122 option.c:3479
 msgid "invalid port number"
 msgstr "număr de port invalid"
 
-#: option.c:3113
+#: option.c:3184
 #, fuzzy
 msgid "bad dhcp-proxy address"
 msgstr "citesc %s - %d adrese"
 
-#: option.c:3124
+#: option.c:3210
+#, fuzzy
+msgid "Bad dhcp-relay"
+msgstr "dhcp-range invalid"
+
+#: option.c:3220
 msgid "bad DUID"
 msgstr ""
 
-#: option.c:3166
+#: option.c:3262
 #, fuzzy
 msgid "invalid alias range"
 msgstr "pondere invalidă"
 
-#: option.c:3205
+#: option.c:3305
 msgid "bad CNAME"
 msgstr ""
 
-#: option.c:3210
+#: option.c:3310
 msgid "duplicate CNAME"
 msgstr ""
 
-#: option.c:3230
+#: option.c:3330
 #, fuzzy
 msgid "bad PTR record"
 msgstr "înregistrare SRV invalidă"
 
-#: option.c:3261
+#: option.c:3361
 #, fuzzy
 msgid "bad NAPTR record"
 msgstr "înregistrare SRV invalidă"
 
-#: option.c:3295
+#: option.c:3395
 #, fuzzy
 msgid "bad RR record"
 msgstr "înregistrare SRV invalidă"
 
-#: option.c:3324
+#: option.c:3424
 msgid "bad TXT record"
 msgstr "înregistrare TXT invalidă"
 
-#: option.c:3365
+#: option.c:3465
 msgid "bad SRV record"
 msgstr "înregistrare SRV invalidă"
 
-#: option.c:3372
+#: option.c:3472
 msgid "bad SRV target"
 msgstr "ţintă SRV invalidă"
 
-#: option.c:3386
+#: option.c:3486
 msgid "invalid priority"
 msgstr "prioritate invalidă"
 
-#: option.c:3393
+#: option.c:3493
 msgid "invalid weight"
 msgstr "pondere invalidă"
 
-#: option.c:3417
+#: option.c:3517
 #, fuzzy
 msgid "Bad host-record"
 msgstr "înregistrare SRV invalidă"
 
-#: option.c:3434
+#: option.c:3534
 #, fuzzy
 msgid "Bad name in host-record"
 msgstr "nume invalid în %s"
 
-#: option.c:3464
+#: option.c:3564
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr ""
 
-#: option.c:3522
+#: option.c:3622
 msgid "missing \""
 msgstr "lipseÅŸte \""
 
-#: option.c:3579
+#: option.c:3679
 msgid "bad option"
 msgstr "opţiune invalidă"
 
-#: option.c:3581
+#: option.c:3681
 msgid "extraneous parameter"
 msgstr "parametru nerecunoscut"
 
-#: option.c:3583
+#: option.c:3683
 msgid "missing parameter"
 msgstr "parametru lipsa"
 
-#: option.c:3590
+#: option.c:3690
 msgid "error"
 msgstr "eroare"
 
-#: option.c:3592
+#: option.c:3692
 #, fuzzy, c-format
 msgid " at line %d of %s"
 msgstr "%s la linia %d din %%s"
 
-#: option.c:3656 tftp.c:648
+#: option.c:3756 tftp.c:661
 #, c-format
 msgid "cannot read %s: %s"
 msgstr "nu pot citi %s: %s"
 
-#: option.c:3823 option.c:3859
+#: option.c:3923 option.c:3959
 #, fuzzy, c-format
 msgid "read %s"
 msgstr "citesc %s"
 
-#: option.c:3915
+#: option.c:4015
 msgid "junk found in command line"
 msgstr ""
 
-#: option.c:3950
+#: option.c:4050
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr "dnsmasq versiunea %s  %s\n"
 
-#: option.c:3951
+#: option.c:4051
 #, fuzzy, c-format
 msgid ""
 "Compile time options: %s\n"
@@ -952,62 +973,62 @@
 "Opţiuni cu care a fost compilat %s\n"
 "\n"
 
-#: option.c:3952
+#: option.c:4052
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr "Acest program vine FÄ‚RÄ‚ NICI O GARANÅ¢IE.\n"
 
-#: option.c:3953
+#: option.c:4053
 #, c-format
 msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
 msgstr "Dnsmasq este un program gratuit, sunteţi invitaţi să-l redistribuiţi\n"
 
-#: option.c:3954
+#: option.c:4054
 #, fuzzy, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr "în termenii LicenÅ£ei publice generale GNU, versiunea 2.\n"
 
-#: option.c:3965
+#: option.c:4065
 msgid "try --help"
 msgstr ""
 
-#: option.c:3967
+#: option.c:4067
 msgid "try -w"
 msgstr ""
 
-#: option.c:3969
+#: option.c:4069
 #, fuzzy, c-format
 msgid "bad command line options: %s"
 msgstr "opÅ£iuni în linie de comandă invalide: %s."
 
-#: option.c:4018
+#: option.c:4118
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "nu pot citi numele maÅŸinii: %s"
 
-#: option.c:4046
+#: option.c:4146
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr "se permite un singur fiÅŸier resolv.conf în modul no-poll"
 
-#: option.c:4056
+#: option.c:4156
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr "am nevoie de un singur resolv.conf din care să citesc numele domeniului."
 
-#: option.c:4059 network.c:1039 dhcp.c:794
+#: option.c:4159 network.c:1178 dhcp.c:768
 #, fuzzy, c-format
 msgid "failed to read %s: %s"
 msgstr "nu pot citi %s: %s"
 
-#: option.c:4076
+#: option.c:4176
 #, c-format
 msgid "no search directive found in %s"
 msgstr "nu s-a găsit nici un criteriu de căutare în %s"
 
-#: option.c:4097
+#: option.c:4197
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr ""
 
-#: option.c:4101
+#: option.c:4201
 msgid "syntax check OK"
 msgstr ""
 
@@ -1026,104 +1047,109 @@
 msgid "possible DNS-rebind attack detected: %s"
 msgstr ""
 
-#: network.c:414
+#: forward.c:1216
+#, fuzzy, c-format
+msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+msgstr "Specifică numărul maxim de împrumuturi DHCP (implicit %s)."
+
+#: network.c:551
 #, fuzzy, c-format
 msgid "failed to create listening socket for %s: %s"
 msgstr "creearea socket-ului de ascultare a eÅŸuat: %s"
 
-#: network.c:743
+#: network.c:882
 #, fuzzy, c-format
 msgid "interface %s failed to join DHCPv6 multicast group: %s"
 msgstr "activarea socket-ului server-ului DHCP a eÅŸuat: %s"
 
-#: network.c:937
+#: network.c:1076
 #, fuzzy, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr "activarea socket-ului de ascultare pentru %s a eÅŸuat: %s"
 
-#: network.c:974
+#: network.c:1113
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr "ignorăm serverul DNS %s - interfaţă locală"
 
-#: network.c:985
+#: network.c:1124
 #, fuzzy, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr "ignorăm serverul DNS %s - nu pot creea/activa socket-ul: %s"
 
-#: network.c:1002
+#: network.c:1141
 msgid "unqualified"
 msgstr "invalid"
 
-#: network.c:1002
+#: network.c:1141
 msgid "names"
 msgstr ""
 
-#: network.c:1004
+#: network.c:1143
 msgid "default"
 msgstr ""
 
-#: network.c:1006
+#: network.c:1145
 msgid "domain"
 msgstr "domeniu"
 
-#: network.c:1009
+#: network.c:1148
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr "folosim adresele locale doar pentru %S %s"
 
-#: network.c:1011
+#: network.c:1150
 #, fuzzy, c-format
 msgid "using standard nameservers for %s %s"
 msgstr "folosim serverul DNS %s#%d pentru %s %s"
 
-#: network.c:1013
+#: network.c:1152
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr "folosim serverul DNS %s#%d pentru %s %s"
 
-#: network.c:1016
+#: network.c:1155
 #, fuzzy, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr "folosim serverul DNS %s#%d"
 
-#: network.c:1018
+#: network.c:1157
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr "folosim serverul DNS %s#%d"
 
-#: dnsmasq.c:131
+#: dnsmasq.c:134
 #, fuzzy
 msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
 msgstr "DBus nu este disponibil: puneţi HAVE_DBUS in src/config.h"
 
-#: dnsmasq.c:136
+#: dnsmasq.c:139
 msgid "Cannot use --conntrack AND --query-port"
 msgstr ""
 
-#: dnsmasq.c:139
+#: dnsmasq.c:142
 #, fuzzy
 msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
 msgstr "DBus nu este disponibil: puneţi HAVE_DBUS in src/config.h"
 
-#: dnsmasq.c:144
+#: dnsmasq.c:147
 msgid "asychronous logging is not available under Solaris"
 msgstr ""
 
-#: dnsmasq.c:149
+#: dnsmasq.c:152
 msgid "asychronous logging is not available under Android"
 msgstr ""
 
-#: dnsmasq.c:154
+#: dnsmasq.c:157
 #, fuzzy
 msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
 msgstr "DBus nu este disponibil: puneţi HAVE_DBUS in src/config.h"
 
-#: dnsmasq.c:164
+#: dnsmasq.c:167
 msgid "zone serial must be configured in --auth-soa"
 msgstr ""
 
-#: dnsmasq.c:186
+#: dnsmasq.c:185
 msgid "dhcp-range constructor not available on this platform"
 msgstr ""
 
@@ -1141,431 +1167,436 @@
 msgid "unknown interface %s"
 msgstr "interfaţă necunoscută %s"
 
-#: dnsmasq.c:274 dnsmasq.c:860
+#: dnsmasq.c:275 dnsmasq.c:870
 #, c-format
 msgid "DBus error: %s"
 msgstr "eroare DBus: %s"
 
-#: dnsmasq.c:277
+#: dnsmasq.c:278
 msgid "DBus not available: set HAVE_DBUS in src/config.h"
 msgstr "DBus nu este disponibil: puneţi HAVE_DBUS in src/config.h"
 
-#: dnsmasq.c:305
+#: dnsmasq.c:306
 #, c-format
 msgid "unknown user or group: %s"
 msgstr ""
 
-#: dnsmasq.c:360
+#: dnsmasq.c:361
 #, c-format
 msgid "cannot chdir to filesystem root: %s"
 msgstr ""
 
-#: dnsmasq.c:597
+#: dnsmasq.c:598
 #, fuzzy, c-format
 msgid "started, version %s DNS disabled"
 msgstr "am pornit, versiunea %s memorie temporară dezactivată"
 
-#: dnsmasq.c:599
+#: dnsmasq.c:600
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr "am ponit, versiunea %s memorie temporară %d"
 
-#: dnsmasq.c:601
+#: dnsmasq.c:602
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr "am pornit, versiunea %s memorie temporară dezactivată"
 
-#: dnsmasq.c:603
+#: dnsmasq.c:604
 #, c-format
 msgid "compile time options: %s"
 msgstr "compilat cu opţiunile: %s"
 
-#: dnsmasq.c:609
+#: dnsmasq.c:610
 msgid "DBus support enabled: connected to system bus"
 msgstr "suportul DBus activ: sunt conectat la magistrala sistem"
 
-#: dnsmasq.c:611
+#: dnsmasq.c:612
 msgid "DBus support enabled: bus connection pending"
 msgstr "suportul DBus activ: aştept conexiunea la magistrală"
 
 # for compatibility purposes the letters â, ă, ÅŸ, Å£ and î can be written as their look-alike correspondent.
-#: dnsmasq.c:616
+#: dnsmasq.c:617
 #, fuzzy, c-format
 msgid "warning: failed to change owner of %s: %s"
 msgstr "încărcarea numelor din %s: %s a eÅŸuat"
 
-#: dnsmasq.c:620
+#: dnsmasq.c:621
 msgid "setting --bind-interfaces option because of OS limitations"
 msgstr "specific opţiunea --bind-interfaces din cauza limitărilor SO"
 
-#: dnsmasq.c:625
+#: dnsmasq.c:626
 #, c-format
 msgid "warning: interface %s does not currently exist"
 msgstr "atenţie: interfaţa %s nu există momentan"
 
-#: dnsmasq.c:630
+#: dnsmasq.c:631
 msgid "warning: ignoring resolv-file flag because no-resolv is set"
 msgstr ""
 
-#: dnsmasq.c:633
+#: dnsmasq.c:634
 #, fuzzy
 msgid "warning: no upstream servers configured"
 msgstr "configurăm serverele superioare prin Dbus"
 
-#: dnsmasq.c:637
+#: dnsmasq.c:638
 #, c-format
 msgid "asynchronous logging enabled, queue limit is %d messages"
 msgstr ""
 
-#: dnsmasq.c:652
+#: dnsmasq.c:659
 msgid "IPv6 router advertisement enabled"
 msgstr ""
 
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 msgid "root is "
 msgstr ""
 
-#: dnsmasq.c:669
+#: dnsmasq.c:676
 #, fuzzy
 msgid "enabled"
 msgstr "dezactivat"
 
-#: dnsmasq.c:671
+#: dnsmasq.c:678
 msgid "secure mode"
 msgstr ""
 
-#: dnsmasq.c:697
+#: dnsmasq.c:704
 #, c-format
 msgid "restricting maximum simultaneous TFTP transfers to %d"
 msgstr ""
 
-#: dnsmasq.c:862
+#: dnsmasq.c:872
 msgid "connected to system DBus"
 msgstr "magistrala sistem Dbus conectată"
 
-#: dnsmasq.c:1007
+#: dnsmasq.c:1017
 #, c-format
 msgid "cannot fork into background: %s"
 msgstr ""
 
-#: dnsmasq.c:1010
+#: dnsmasq.c:1020
 #, fuzzy, c-format
 msgid "failed to create helper: %s"
 msgstr "nu pot citi %s: %s"
 
-#: dnsmasq.c:1013
+#: dnsmasq.c:1023
 #, c-format
 msgid "setting capabilities failed: %s"
 msgstr ""
 
 # for compatibility purposes the letters â, ă, ÅŸ, Å£ and î can be written as their look-alike correspondent.
-#: dnsmasq.c:1016
+#: dnsmasq.c:1026
 #, fuzzy, c-format
 msgid "failed to change user-id to %s: %s"
 msgstr "încărcarea numelor din %s: %s a eÅŸuat"
 
 # for compatibility purposes the letters â, ă, ÅŸ, Å£ and î can be written as their look-alike correspondent.
-#: dnsmasq.c:1019
+#: dnsmasq.c:1029
 #, fuzzy, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr "încărcarea numelor din %s: %s a eÅŸuat"
 
-#: dnsmasq.c:1022
+#: dnsmasq.c:1032
 #, fuzzy, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr "nu pot citi %s: %s"
 
-#: dnsmasq.c:1025
+#: dnsmasq.c:1035
 #, fuzzy, c-format
 msgid "cannot open log %s: %s"
 msgstr "nu pot deschide %s:%s"
 
-#: dnsmasq.c:1028
+#: dnsmasq.c:1038
 #, fuzzy, c-format
 msgid "failed to load Lua script: %s"
 msgstr "nu pot încărca %s: %s"
 
-#: dnsmasq.c:1031
+#: dnsmasq.c:1041
 #, c-format
 msgid "TFTP directory %s inaccessible: %s"
 msgstr ""
 
-#: dnsmasq.c:1095
+#: dnsmasq.c:1105
 #, c-format
 msgid "script process killed by signal %d"
 msgstr ""
 
-#: dnsmasq.c:1099
+#: dnsmasq.c:1109
 #, c-format
 msgid "script process exited with status %d"
 msgstr ""
 
-#: dnsmasq.c:1103
+#: dnsmasq.c:1113
 #, fuzzy, c-format
 msgid "failed to execute %s: %s"
 msgstr "accesarea serverului %s a eÅŸuat: %s"
 
-#: dnsmasq.c:1148
+#: dnsmasq.c:1158
 msgid "exiting on receipt of SIGTERM"
 msgstr "am primit SIGTERM, am terminat"
 
-#: dnsmasq.c:1176
+#: dnsmasq.c:1186
 #, fuzzy, c-format
 msgid "failed to access %s: %s"
 msgstr "accesarea serverului %s a eÅŸuat: %s"
 
-#: dnsmasq.c:1206
+#: dnsmasq.c:1216
 #, c-format
 msgid "reading %s"
 msgstr "citesc %s"
 
-#: dnsmasq.c:1217
+#: dnsmasq.c:1227
 #, fuzzy, c-format
 msgid "no servers found in %s, will retry"
 msgstr "nu s-a găsit nici un criteriu de căutare în %s"
 
-#: dhcp.c:49
+#: dhcp.c:53
 #, c-format
 msgid "cannot create DHCP socket: %s"
 msgstr "nu pot creea socket DHCP: %s"
 
-#: dhcp.c:64
+#: dhcp.c:68
 #, c-format
 msgid "failed to set options on DHCP socket: %s"
 msgstr "configurarea opţiunilor socketului DHCP a eşuat: %s"
 
-#: dhcp.c:77
+#: dhcp.c:89
 #, fuzzy, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
 msgstr "configurarea SO_REUSEADDR pe socket-ul DHCP a eÅŸuat: %s"
 
-#: dhcp.c:89
+#: dhcp.c:101
 #, c-format
 msgid "failed to bind DHCP server socket: %s"
 msgstr "activarea socket-ului server-ului DHCP a eÅŸuat: %s"
 
-#: dhcp.c:115
+#: dhcp.c:127
 #, c-format
 msgid "cannot create ICMP raw socket: %s."
 msgstr "nu pot creea socket ICMP raw: %s."
 
-#: dhcp.c:225
+#: dhcp.c:239
 #, fuzzy, c-format
 msgid "unknown interface %s in bridge-interface"
 msgstr "interfaţă necunoscută %s"
 
-#: dhcp.c:250
+#: dhcp.c:278
 #, c-format
 msgid "DHCP packet received on %s which has no address"
 msgstr ""
 
-#: dhcp.c:457
+#: dhcp.c:505
 #, c-format
 msgid "DHCP range %s -- %s is not consistent with netmask %s"
 msgstr "domeniu DHCP %s -- %s nu este consistent cu masca de reţea %s"
 
-#: dhcp.c:832
+#: dhcp.c:806
 #, c-format
 msgid "bad line at %s line %d"
 msgstr "linie invalidă în %s rândul %d"
 
-#: dhcp.c:875
+#: dhcp.c:849
 #, c-format
 msgid "ignoring %s line %d, duplicate name or IP address"
 msgstr ""
 
+#: dhcp.c:993 rfc3315.c:2047
+#, c-format
+msgid "DHCP relay %s -> %s"
+msgstr ""
+
 #: lease.c:61
 #, fuzzy, c-format
 msgid "cannot open or create lease file %s: %s"
 msgstr "nu pot creea sau deschide fiÅŸierul cu împrumuturi: %s"
 
-#: lease.c:133
+#: lease.c:134
 msgid "too many stored leases"
 msgstr "prea multe împrumuturi stocate"
 
-#: lease.c:164
+#: lease.c:165
 #, fuzzy, c-format
 msgid "cannot run lease-init script %s: %s"
 msgstr "nu pot citi %s: %s"
 
-#: lease.c:170
+#: lease.c:171
 #, c-format
 msgid "lease-init script returned exit code %s"
 msgstr ""
 
-#: lease.c:339
+#: lease.c:342
 #, fuzzy, c-format
 msgid "failed to write %s: %s (retry in %us)"
 msgstr "nu pot citi %s: %s"
 
-#: lease.c:843
+#: lease.c:871
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr ""
 
-#: rfc2131.c:337
+#: rfc2131.c:338
 #, c-format
 msgid "no address range available for DHCP request %s %s"
 msgstr "nici un domeniu de adrese disponibil pentru cererea DHCP %s %s"
 
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "with subnet selector"
 msgstr "cu selectorul de subreţea"
 
-#: rfc2131.c:338
+#: rfc2131.c:339
 msgid "via"
 msgstr "prin"
 
-#: rfc2131.c:350
+#: rfc2131.c:351
 #, fuzzy, c-format
 msgid "%u available DHCP subnet: %s/%s"
 msgstr "nici un domeniu de adrese disponibil pentru cererea DHCP %s %s"
 
-#: rfc2131.c:353 rfc3315.c:272
+#: rfc2131.c:354 rfc3315.c:292
 #, c-format
 msgid "%u available DHCP range: %s -- %s"
 msgstr ""
 
-#: rfc2131.c:382
-msgid "disabled"
-msgstr "dezactivat"
-
-#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771
-#: rfc3315.c:1017
-msgid "ignored"
-msgstr "ignorat"
-
-#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814
-msgid "address in use"
-msgstr "adresa este folosită"
-
-#: rfc2131.c:452 rfc2131.c:1007
-msgid "no address available"
-msgstr "nici o adresă disponibilă"
-
-#: rfc2131.c:459 rfc2131.c:1154
-msgid "wrong network"
-msgstr "reţea greşită"
-
-#: rfc2131.c:474
-msgid "no address configured"
-msgstr "adresă lipsă"
-
-#: rfc2131.c:480 rfc2131.c:1204
-msgid "no leases left"
-msgstr "nu mai am de unde să împrumut"
-
-#: rfc2131.c:576 rfc3315.c:428
-#, c-format
-msgid "%u client provides name: %s"
-msgstr ""
-
-#: rfc2131.c:731
+#: rfc2131.c:465
 #, fuzzy, c-format
 msgid "%u vendor class: %s"
 msgstr "eroare DBus: %s"
 
-#: rfc2131.c:733
+#: rfc2131.c:467
 #, fuzzy, c-format
 msgid "%u user class: %s"
 msgstr "eroare DBus: %s"
 
+#: rfc2131.c:494
+msgid "disabled"
+msgstr "dezactivat"
+
+#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813
+#: rfc3315.c:1082
+msgid "ignored"
+msgstr "ignorat"
+
+#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863
+msgid "address in use"
+msgstr "adresa este folosită"
+
+#: rfc2131.c:564 rfc2131.c:1015
+msgid "no address available"
+msgstr "nici o adresă disponibilă"
+
+#: rfc2131.c:571 rfc2131.c:1162
+msgid "wrong network"
+msgstr "reţea greşită"
+
+#: rfc2131.c:586
+msgid "no address configured"
+msgstr "adresă lipsă"
+
+#: rfc2131.c:592 rfc2131.c:1212
+msgid "no leases left"
+msgstr "nu mai am de unde să împrumut"
+
+#: rfc2131.c:687 rfc3315.c:466
+#, c-format
+msgid "%u client provides name: %s"
+msgstr ""
+
 #: rfc2131.c:792
 msgid "PXE BIS not supported"
 msgstr ""
 
-#: rfc2131.c:923 rfc3315.c:1111
+#: rfc2131.c:931 rfc3315.c:1176
 #, fuzzy, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "dezactivăm adresele DHCP statice %s"
 
-#: rfc2131.c:944
+#: rfc2131.c:952
 msgid "unknown lease"
 msgstr "împrumut necunoscut"
 
-#: rfc2131.c:976
+#: rfc2131.c:984
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr ""
 
-#: rfc2131.c:986
+#: rfc2131.c:994
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr ""
 
-#: rfc2131.c:989
+#: rfc2131.c:997
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr ""
 
-#: rfc2131.c:1005 rfc2131.c:1197
+#: rfc2131.c:1013 rfc2131.c:1205
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:1092
+#: rfc2131.c:1100
 msgid "wrong server-ID"
 msgstr ""
 
-#: rfc2131.c:1111
+#: rfc2131.c:1119
 msgid "wrong address"
 msgstr "adresă greşită"
 
-#: rfc2131.c:1129 rfc3315.c:911
+#: rfc2131.c:1137 rfc3315.c:959
 msgid "lease not found"
 msgstr "împrumutul nu a fost găsit"
 
-#: rfc2131.c:1162
+#: rfc2131.c:1170
 msgid "address not available"
 msgstr "adresă indisponibilă"
 
-#: rfc2131.c:1173
+#: rfc2131.c:1181
 msgid "static lease available"
 msgstr "împrumut static este disponibil"
 
-#: rfc2131.c:1177
+#: rfc2131.c:1185
 msgid "address reserved"
 msgstr "adresă rezervată"
 
-#: rfc2131.c:1185
+#: rfc2131.c:1193
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr ""
 
-#: rfc2131.c:1679
+#: rfc2131.c:1701
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr ""
 
-#: rfc2131.c:1688
+#: rfc2131.c:1710
 #, fuzzy, c-format
 msgid "%u server name: %s"
 msgstr "eroare DBus: %s"
 
-#: rfc2131.c:1696
+#: rfc2131.c:1718
 #, fuzzy, c-format
 msgid "%u next server: %s"
 msgstr "eroare DBus: %s"
 
-#: rfc2131.c:1699
+#: rfc2131.c:1721
 #, c-format
 msgid "%u broadcast response"
 msgstr ""
 
-#: rfc2131.c:1762
+#: rfc2131.c:1784
 #, fuzzy, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr "nu pot trimite opÅ£iunea DHCP %d: nu mai este loc în pachet"
 
-#: rfc2131.c:2002
+#: rfc2131.c:2025
 msgid "PXE menu too large"
 msgstr ""
 
-#: rfc2131.c:2139 rfc3315.c:1332
+#: rfc2131.c:2162 rfc3315.c:1420
 #, fuzzy, c-format
 msgid "%u requested options: %s"
 msgstr "compilat cu opţiunile: %s"
 
-#: rfc2131.c:2415
+#: rfc2131.c:2442
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr ""
@@ -1575,7 +1606,7 @@
 msgid "cannot create netlink socket: %s"
 msgstr "nu pot să activez socket-ul netlink: %s"
 
-#: netlink.c:354
+#: netlink.c:363
 #, fuzzy, c-format
 msgid "netlink returns error: %s"
 msgstr "eroare DBus: %s"
@@ -1584,53 +1615,53 @@
 msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
 msgstr "incerc să configurez un server IPv6 prin Dbus - nu este suport IPv6"
 
-#: dbus.c:308 dbus.c:504
+#: dbus.c:523
 msgid "setting upstream servers from DBus"
 msgstr "configurăm serverele superioare prin Dbus"
 
-#: dbus.c:561
+#: dbus.c:570
 msgid "could not register a DBus message handler"
 msgstr "nu pot activa o interfaţă de mesaje DBus"
 
-#: bpf.c:197
+#: bpf.c:245
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr "nu pot creea socket DHCP BPF: %s"
 
-#: bpf.c:225
+#: bpf.c:273
 #, fuzzy, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr "cerere DHCP pentru dispozitiv nesuportat (%d) recepţionată prin %s"
 
-#: helper.c:145
+#: helper.c:151
 msgid "lease() function missing in Lua script"
 msgstr ""
 
-#: tftp.c:290
+#: tftp.c:303
 msgid "unable to get free port for TFTP"
 msgstr ""
 
-#: tftp.c:306
+#: tftp.c:319
 #, c-format
 msgid "unsupported request from %s"
 msgstr ""
 
-#: tftp.c:420
+#: tftp.c:433
 #, fuzzy, c-format
 msgid "file %s not found"
 msgstr "împrumutul nu a fost găsit"
 
-#: tftp.c:529
+#: tftp.c:542
 #, c-format
 msgid "error %d %s received from %s"
 msgstr ""
 
-#: tftp.c:571
+#: tftp.c:584
 #, fuzzy, c-format
 msgid "failed sending %s to %s"
 msgstr "nu pot citi %s: %s"
 
-#: tftp.c:571
+#: tftp.c:584
 #, c-format
 msgid "sent %s to %s"
 msgstr ""
@@ -1654,187 +1685,203 @@
 msgid "Conntrack connection mark retrieval failed: %s"
 msgstr ""
 
-#: dhcp6.c:49
+#: dhcp6.c:59
 #, fuzzy, c-format
 msgid "cannot create DHCPv6 socket: %s"
 msgstr "nu pot creea socket DHCP: %s"
 
-#: dhcp6.c:62
+#: dhcp6.c:80
 #, fuzzy, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s"
 msgstr "configurarea SO_REUSEADDR pe socket-ul DHCP a eÅŸuat: %s"
 
-#: dhcp6.c:74
+#: dhcp6.c:92
 #, fuzzy, c-format
 msgid "failed to bind DHCPv6 server socket: %s"
 msgstr "activarea socket-ului server-ului DHCP a eÅŸuat: %s"
 
-#: rfc3315.c:135
+#: rfc3315.c:149
 #, fuzzy, c-format
 msgid "no address range available for DHCPv6 request from relay at %s"
 msgstr "nici un domeniu de adrese disponibil pentru cererea DHCP %s %s"
 
-#: rfc3315.c:144
+#: rfc3315.c:158
 #, fuzzy, c-format
 msgid "no address range available for DHCPv6 request via %s"
 msgstr "nici un domeniu de adrese disponibil pentru cererea DHCP %s %s"
 
-#: rfc3315.c:269
+#: rfc3315.c:289
 #, fuzzy, c-format
 msgid "%u available DHCPv6 subnet: %s/%d"
 msgstr "nici un domeniu de adrese disponibil pentru cererea DHCP %s %s"
 
-#: rfc3315.c:350
+#: rfc3315.c:370
 #, fuzzy, c-format
 msgid "%u vendor class: %u"
 msgstr "eroare DBus: %s"
 
-#: rfc3315.c:609
+#: rfc3315.c:418
+#, fuzzy, c-format
+msgid "%u client MAC address: %s"
+msgstr "nu exista interfaţă pentru adresa %s"
+
+#: rfc3315.c:650
 #, fuzzy, c-format
 msgid "unknown prefix-class %d"
 msgstr "împrumut necunoscut"
 
-#: rfc3315.c:741 rfc3315.c:854
+#: rfc3315.c:781 rfc3315.c:903
 msgid "success"
 msgstr ""
 
-#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864
+#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913
 #, fuzzy
 msgid "no addresses available"
 msgstr "nici o adresă disponibilă"
 
-#: rfc3315.c:806
+#: rfc3315.c:855
 #, fuzzy
 msgid "address unavailable"
 msgstr "adresă indisponibilă"
 
-#: rfc3315.c:841
+#: rfc3315.c:890
 msgid "not on link"
 msgstr ""
 
-#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150
+#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215
 msgid "no binding found"
 msgstr ""
 
-#: rfc3315.c:948
+#: rfc3315.c:1001
 msgid "deprecated"
 msgstr ""
 
-#: rfc3315.c:951
+#: rfc3315.c:1006
 #, fuzzy
 msgid "address invalid"
 msgstr "adresa este folosită"
 
-#: rfc3315.c:992
+#: rfc3315.c:1048
 msgid "confirm failed"
 msgstr ""
 
-#: rfc3315.c:1003
+#: rfc3315.c:1059
 #, fuzzy
 msgid "all addresses still on link"
 msgstr "adresă greÅŸită în %s, linia %d"
 
-#: rfc3315.c:1082
+#: rfc3315.c:1147
 msgid "release received"
 msgstr ""
 
+#: rfc3315.c:2038
+msgid "Cannot multicast to DHCPv6 server without correct interface"
+msgstr ""
+
 #: dhcp-common.c:145
 #, c-format
 msgid "Ignoring duplicate dhcp-option %d"
 msgstr ""
 
-#: dhcp-common.c:215
+#: dhcp-common.c:222
 #, c-format
 msgid "%u tags: %s"
 msgstr ""
 
-#: dhcp-common.c:296
+#: dhcp-common.c:407
 #, c-format
 msgid "%s has more than one address in hostsfile, using %s for DHCP"
 msgstr ""
 
-#: dhcp-common.c:319
+#: dhcp-common.c:430
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr "adresă IP duplicat %s (%s) în declaraÅ£ia dhcp-config."
 
-#: dhcp-common.c:367
+#: dhcp-common.c:484
 #, fuzzy, c-format
 msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s"
 msgstr "configurarea SO_REUSEADDR pe socket-ul DHCP a eÅŸuat: %s"
 
-#: dhcp-common.c:489
+#: dhcp-common.c:606
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr ""
 
-#: dhcp-common.c:500
+#: dhcp-common.c:617
 #, c-format
 msgid "Known DHCPv6 options:\n"
 msgstr ""
 
-#: dhcp-common.c:693
+#: dhcp-common.c:814
 msgid ", prefix deprecated"
 msgstr ""
 
-#: dhcp-common.c:696
+#: dhcp-common.c:817
 #, c-format
 msgid ", lease time "
 msgstr ""
 
-#: dhcp-common.c:727
+#: dhcp-common.c:849
 #, c-format
 msgid "%s stateless on %s%.0s%.0s%s"
 msgstr ""
 
-#: dhcp-common.c:729
+#: dhcp-common.c:851
 #, fuzzy, c-format
 msgid "%s, static leases only on %.0s%s%s%.0s"
 msgstr "DHCP, împrumuturi statice doar către  %.0s%s, timpul reînoirii %s"
 
-#: dhcp-common.c:731
+#: dhcp-common.c:853
 #, c-format
 msgid "%s, proxy on subnet %.0s%s%.0s%.0s"
 msgstr ""
 
-#: dhcp-common.c:732
+#: dhcp-common.c:854
 #, fuzzy, c-format
 msgid "%s, IP range %s -- %s%s%.0s"
 msgstr "DHCP, domeniu IP %s -- %s, timpul reînoirii %s"
 
-#: dhcp-common.c:739
+#: dhcp-common.c:861
 #, c-format
 msgid "DHCPv4-derived IPv6 names on %s%s"
 msgstr ""
 
-#: dhcp-common.c:742
+#: dhcp-common.c:864
 #, fuzzy, c-format
 msgid "router advertisement on %s%s"
 msgstr "DHCP, împrumuturi statice doar către  %.0s%s, timpul reînoirii %s"
 
-#: radv.c:87
+#: dhcp-common.c:875
+#, c-format
+msgid "DHCP relay from %s to %s via %s"
+msgstr ""
+
+#: dhcp-common.c:877
+#, c-format
+msgid "DHCP relay from %s to %s"
+msgstr ""
+
+#: radv.c:93
 #, fuzzy, c-format
 msgid "cannot create ICMPv6 socket: %s"
 msgstr "nu pot creea socket DHCP: %s"
 
-#: auth.c:402
+#: auth.c:435
 #, c-format
 msgid "ignoring zone transfer request from %s"
 msgstr ""
 
-#: ipset.c:71
+#: ipset.c:95
 #, fuzzy, c-format
 msgid "failed to find kernel version: %s"
 msgstr "activarea socket-ului server-ului DHCP a eÅŸuat: %s"
 
-#: ipset.c:90
+#: ipset.c:114
 #, fuzzy, c-format
 msgid "failed to create IPset control socket: %s"
 msgstr "creearea socket-ului de ascultare a eÅŸuat: %s"
 
-#~ msgid "no interface with address %s"
-#~ msgstr "nu exista interfaţă pentru adresa %s"
-
 #~ msgid "duplicate IP address %s in dhcp-config directive."
 #~ msgstr "adresă IP duplicat %s în declaraÅ£ia dhcp-config."
 
diff --git a/src/auth.c b/src/auth.c
index af2171c..4a1075b 100644
--- a/src/auth.c
+++ b/src/auth.c
@@ -62,7 +62,7 @@
   return filter_zone(zone, flag, addr_u) != NULL;
 }
 
-static int in_zone(struct auth_zone *zone, char *name, char **cut)
+int in_zone(struct auth_zone *zone, char *name, char **cut)
 {
   size_t namelen = strlen(name);
   size_t domainlen = strlen(zone->domain);
@@ -89,7 +89,7 @@
 }
 
 
-size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t now, union mysockaddr *peer_addr) 
+size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t now, union mysockaddr *peer_addr, int local_query) 
 {
   char *name = daemon->namebuff;
   unsigned char *p, *ansp;
@@ -97,7 +97,7 @@
   int nameoffset, axfroffset = 0;
   int q, anscount = 0, authcount = 0;
   struct crec *crecp;
-  int  auth = 1, trunc = 0, nxdomain = 1, soa = 0, ns = 0, axfr = 0;
+  int  auth = !local_query, trunc = 0, nxdomain = 1, soa = 0, ns = 0, axfr = 0;
   struct auth_zone *zone = NULL;
   struct subnet *subnet = NULL;
   char *cut;
@@ -110,7 +110,7 @@
   
   if (ntohs(header->qdcount) == 0 || OPCODE(header) != QUERY )
     return 0;
-  
+
   /* determine end of question section (we put answers there) */
   if (!(ansp = skip_questions(header, qlen)))
     return 0; /* bad packet */
@@ -144,16 +144,19 @@
 	  if (!(flag = in_arpa_name_2_addr(name, &addr)))
 	    continue;
 
-	  for (zone = daemon->auth_zones; zone; zone = zone->next)
-	    if ((subnet = filter_zone(zone, flag, &addr)))
-	      break;
-
-	  if (!zone)
+	  if (!local_query)
 	    {
-	      auth = 0;
-	      continue;
+	      for (zone = daemon->auth_zones; zone; zone = zone->next)
+		if ((subnet = filter_zone(zone, flag, &addr)))
+		  break;
+	      
+	      if (!zone)
+		{
+		  auth = 0;
+		  continue;
+		}
 	    }
-	  
+
 	  intr = NULL;
 
 	  if (flag == F_IPV4)
@@ -194,7 +197,7 @@
 	      if (in_zone(zone, intr->name, NULL))
 		{	
 		  found = 1;
-		  log_query(flag| F_REVERSE | F_CONFIG, intr->name, &addr, NULL);
+		  log_query(flag | F_REVERSE | F_CONFIG, intr->name, &addr, NULL);
 		  if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
 					  daemon->auth_ttl, NULL,
 					  T_PTR, C_IN, "d", intr->name))
@@ -358,25 +361,26 @@
 	 if (hostname_isequal(name, intr->name))
 	   {
 	     struct addrlist *addrlist;
-
+	     
 	     addrlist = intr->addr4;
 #ifdef HAVE_IPV6
 	     if (qtype == T_AAAA)
 	       addrlist = intr->addr6;
 #endif	
 	     nxdomain = 0;
-	
-	     for (; addrlist; addrlist = addrlist->next)  
-	       if (filter_constructed_dhcp(zone, flag, &addrlist->addr))
-		 {
-		   found = 1;
-		   log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
-		   if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
-					   daemon->auth_ttl, NULL, qtype, C_IN, 
-					   qtype == T_A ? "4" : "6", &addrlist->addr))
-		     anscount++;
-		 }
-	   }
+	     
+	     if (flag)
+	       for (; addrlist; addrlist = addrlist->next)  
+		 if (local_query || filter_constructed_dhcp(zone, flag, &addrlist->addr))
+		   {
+		     found = 1;
+		     log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
+		     if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
+					     daemon->auth_ttl, NULL, qtype, C_IN, 
+					     qtype == T_A ? "4" : "6", &addrlist->addr))
+		       anscount++;
+		   }
+	     }
        
        for (a = daemon->cnames; a; a = a->next)
 	 if (hostname_isequal(name, a->alias) )
@@ -390,7 +394,7 @@
 	       }
 	     found = 1;
 	     if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
-				     daemon->auth_ttl, NULL,
+				     daemon->auth_ttl, &nameoffset,
 				     T_CNAME, C_IN, "d", name))
 	       anscount++;
 	     
@@ -403,7 +407,7 @@
 	  
 	  if (qtype == T_SOA)
 	    {
-	      soa = 1; /* inhibits auth section */
+	      auth = soa = 1; /* inhibits auth section */
 	      found = 1;
 	      log_query(F_RRNAME | F_AUTH, zone->domain, NULL, "<SOA>");
 	    }
@@ -436,6 +440,7 @@
 		  return 0;
 		}
 	       	      
+	      auth = 1;
 	      soa = 1; /* inhibits auth section */
 	      ns = 1; /* ensure we include NS records! */
 	      axfr = 1;
@@ -445,6 +450,7 @@
 	    }
       	  else if (qtype == T_NS)
 	    {
+	      auth = 1;
 	      ns = 1; /* inhibits auth section */
 	      found = 1;
 	      log_query(F_RRNAME | F_AUTH, zone->domain, NULL, "<NS>"); 
@@ -462,7 +468,7 @@
 		  { 
 		    nxdomain = 0;
 		    if ((crecp->flags & flag) && 
-			(filter_constructed_dhcp(zone, flag, &(crecp->addr.addr))))
+			(local_query || filter_constructed_dhcp(zone, flag, &(crecp->addr.addr))))
 		      {
 			*cut = '.'; /* restore domain part */
 			log_query(crecp->flags, name, &crecp->addr.addr, record_source(crecp->uid));
@@ -485,7 +491,7 @@
 	    do
 	      { 
 		 nxdomain = 0;
-		 if ((crecp->flags & flag) && filter_constructed_dhcp(zone, flag, &(crecp->addr.addr)))
+		 if ((crecp->flags & flag) && (local_query || filter_constructed_dhcp(zone, flag, &(crecp->addr.addr))))
 		   {
 		     log_query(crecp->flags, name, &crecp->addr.addr, record_source(crecp->uid));
 		     found = 1;
@@ -675,14 +681,14 @@
 		  *cut = 0;
 		
 		for (addrlist = intr->addr4; addrlist; addrlist = addrlist->next) 
-		  if (filter_constructed_dhcp(zone, F_IPV4,  &addrlist->addr) && 
+		  if ((local_query || filter_constructed_dhcp(zone, F_IPV4,  &addrlist->addr)) && 
 		      add_resource_record(header, limit, &trunc, -axfroffset, &ansp, 
 					  daemon->auth_ttl, NULL, T_A, C_IN, "4", cut ? intr->name : NULL, &addrlist->addr))
 		    anscount++;
 		
 #ifdef HAVE_IPV6
 		for (addrlist = intr->addr6; addrlist; addrlist = addrlist->next) 
-		  if (filter_constructed_dhcp(zone, F_IPV6,  &addrlist->addr) &&
+		  if ((local_query || filter_constructed_dhcp(zone, F_IPV6,  &addrlist->addr)) &&
 		      add_resource_record(header, limit, &trunc, -axfroffset, &ansp, 
 					  daemon->auth_ttl, NULL, T_AAAA, C_IN, "6", cut ? intr->name : NULL, &addrlist->addr))
 		    anscount++;
@@ -722,7 +728,8 @@
 		  if ((crecp->flags & F_DHCP) && !option_bool(OPT_DHCP_FQDN))
 		    {
 		      char *cache_name = cache_get_name(crecp);
-		      if (!strchr(cache_name, '.') && filter_constructed_dhcp(zone, (crecp->flags & (F_IPV6 | F_IPV4)), &(crecp->addr.addr)))
+		      if (!strchr(cache_name, '.') && 
+			  (local_query || filter_constructed_dhcp(zone, (crecp->flags & (F_IPV6 | F_IPV4)), &(crecp->addr.addr))))
 			{
 			  qtype = T_A;
 #ifdef HAVE_IPV6
@@ -739,7 +746,8 @@
 		  if ((crecp->flags & F_HOSTS) || (((crecp->flags & F_DHCP) && option_bool(OPT_DHCP_FQDN))))
 		    {
 		      strcpy(name, cache_get_name(crecp));
-		      if (in_zone(zone, name, &cut) && filter_constructed_dhcp(zone, (crecp->flags & (F_IPV6 | F_IPV4)), &(crecp->addr.addr)))
+		      if (in_zone(zone, name, &cut) && 
+			  (local_query || filter_constructed_dhcp(zone, (crecp->flags & (F_IPV6 | F_IPV4)), &(crecp->addr.addr))))
 			{
 			  qtype = T_A;
 #ifdef HAVE_IPV6
@@ -774,8 +782,17 @@
   /* done all questions, set up header and return length of result */
   /* clear authoritative and truncated flags, set QR flag */
   header->hb3 = (header->hb3 & ~(HB3_AA | HB3_TC)) | HB3_QR;
-  /* clear RA flag */
-  header->hb4 &= ~HB4_RA;
+
+  if (local_query)
+    {
+      /* set RA flag */
+      header->hb4 |= HB4_RA;
+    }
+  else
+    {
+      /* clear RA flag */
+      header->hb4 &= ~HB4_RA;
+    }
 
   /* authoritive */
   if (auth)
@@ -785,7 +802,7 @@
   if (trunc)
     header->hb3 |= HB3_TC;
   
-  if (anscount == 0 && auth && nxdomain)
+  if ((auth || local_query) && nxdomain)
     SET_RCODE(header, NXDOMAIN);
   else
     SET_RCODE(header, NOERROR); /* no error */
diff --git a/src/bpf.c b/src/bpf.c
index 619a662..390d076 100644
--- a/src/bpf.c
+++ b/src/bpf.c
@@ -160,9 +160,15 @@
 		  if (ifr6.ifr_ifru.ifru_flags6 & IN6_IFF_DEPRECATED)
 		    flags |= IFACE_DEPRECATED;
 
+#ifdef IN6_IFF_TEMPORARY
 		  if (!(ifr6.ifr_ifru.ifru_flags6 & (IN6_IFF_AUTOCONF | IN6_IFF_TEMPORARY)))
 		    flags |= IFACE_PERMANENT;
+#endif
 
+#ifdef IN6_IFF_PRIVACY
+		  if (!(ifr6.ifr_ifru.ifru_flags6 & (IN6_IFF_AUTOCONF | IN6_IFF_PRIVACY)))
+		    flags |= IFACE_PERMANENT;
+#endif
 		}
 	      
 	      ifr6.ifr_addr = *((struct sockaddr_in6 *) addrs->ifa_addr);
diff --git a/src/cache.c b/src/cache.c
index a589079..fd0e02a 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -24,7 +24,7 @@
 static int cache_inserted = 0, cache_live_freed = 0, insert_error;
 static union bigname *big_free = NULL;
 static int bignames_left, hash_size;
-static int uid = 0;
+static int uid = 1;
 #ifdef HAVE_DNSSEC
 static struct keydata *keyblock_free = NULL;
 #endif
@@ -76,7 +76,7 @@
 {
   struct crec *crecp;
   int i;
-
+ 
   bignames_left = daemon->cachesize/10;
   
   if (daemon->cachesize > 0)
@@ -177,7 +177,10 @@
   crecp->flags &= ~F_FORWARD;
   crecp->flags &= ~F_REVERSE;
   crecp->uid = uid++; /* invalidate CNAMES pointing to this. */
-  
+
+  if (uid == -1)
+    uid++;
+
   if (cache_tail)
     cache_tail->next = crecp;
   else
@@ -235,6 +238,16 @@
   return crecp->name.sname;
 }
 
+char *cache_get_cname_target(struct crec *crecp)
+{
+  if (crecp->addr.cname.uid != -1)
+    return cache_get_name(crecp->addr.cname.target.cache);
+
+  return crecp->addr.cname.target.int_name->name;
+}
+
+
+
 struct crec *cache_enumerate(int init)
 {
   static int bucket;
@@ -260,14 +273,14 @@
 
 static int is_outdated_cname_pointer(struct crec *crecp)
 {
-  if (!(crecp->flags & F_CNAME))
+  if (!(crecp->flags & F_CNAME) || crecp->addr.cname.uid == -1)
     return 0;
   
   /* NB. record may be reused as DS or DNSKEY, where uid is 
      overloaded for something completely different */
-  if (crecp->addr.cname.cache && 
-      (crecp->addr.cname.cache->flags & (F_IPV4 | F_IPV6 | F_CNAME)) &&
-      crecp->addr.cname.uid == crecp->addr.cname.cache->uid)
+  if (crecp->addr.cname.target.cache && 
+      (crecp->addr.cname.target.cache->flags & (F_IPV4 | F_IPV6 | F_CNAME)) &&
+      crecp->addr.cname.uid == crecp->addr.cname.target.cache->uid)
     return 0;
   
   return 1;
@@ -680,9 +693,9 @@
     if (hostname_isequal(cache_get_name(target), a->target) &&
 	(crec = whine_malloc(sizeof(struct crec))))
       {
-	crec->flags = F_FORWARD | F_IMMORTAL | F_NAMEP | F_HOSTS | F_CNAME;
+	crec->flags = F_FORWARD | F_IMMORTAL | F_NAMEP | F_CONFIG | F_CNAME;
 	crec->name.namep = a->alias;
-	crec->addr.cname.cache = target;
+	crec->addr.cname.target.cache = target;
 	crec->addr.cname.uid = target->uid;
 	cache_hash(crec);
 	add_hosts_cname(crec); /* handle chains */
@@ -901,6 +914,8 @@
   struct hostsfile *ah;
   struct host_record *hr;
   struct name_list *nl;
+  struct cname *a;
+  struct interface_name *intr;
 
   cache_inserted = cache_live_freed = 0;
   
@@ -927,6 +942,20 @@
 	  up = &cache->hash_next;
       }
   
+  /* Add CNAMEs to interface_names to the cache */
+  for (a = daemon->cnames; a; a = a->next)
+    for (intr = daemon->int_names; intr; intr = intr->next)
+      if (hostname_isequal(a->target, intr->name))
+	{
+	  struct crec *aliasc = safe_malloc(sizeof(struct crec));
+	  aliasc->flags = F_FORWARD | F_NAMEP | F_CNAME | F_IMMORTAL | F_CONFIG;
+	  aliasc->name.namep = a->alias;
+	  aliasc->addr.cname.target.int_name = intr;
+	  aliasc->addr.cname.uid = -1;
+	  cache_hash(aliasc);
+	  add_hosts_cname(aliasc); /* handle chains */
+	}
+  
   /* borrow the packet buffer for a temporary by-address hash */
   memset(daemon->packet, 0, daemon->packet_buff_sz);
   revhashsz = daemon->packet_buff_sz / sizeof(struct crec *);
@@ -1019,13 +1048,13 @@
 	
 	if (aliasc)
 	  {
-	    aliasc->flags = F_FORWARD | F_NAMEP | F_DHCP | F_CNAME;
+	    aliasc->flags = F_FORWARD | F_NAMEP | F_DHCP | F_CNAME | F_CONFIG;
 	    if (ttd == 0)
 	      aliasc->flags |= F_IMMORTAL;
 	    else
 	      aliasc->ttd = ttd;
 	    aliasc->name.namep = a->alias;
-	    aliasc->addr.cname.cache = target;
+	    aliasc->addr.cname.target.cache = target;
 	    aliasc->addr.cname.uid = target->uid;
 	    cache_hash(aliasc);
 	    add_dhcp_cname(aliasc, ttd);
@@ -1132,6 +1161,9 @@
 	    daemon->cachesize, cache_live_freed, cache_inserted);
   my_syslog(LOG_INFO, _("queries forwarded %u, queries answered locally %u"), 
 	    daemon->queries_forwarded, daemon->local_answer);
+#ifdef HAVE_AUTH
+  my_syslog(LOG_INFO, _("queries for authoritative zones %u"), daemon->auth_answer);
+#endif
 
   /* sum counts from different records for same server */
   for (serv = daemon->servers; serv; serv = serv->next)
@@ -1173,7 +1205,7 @@
 	      {
 		a = "";
 		if (!is_outdated_cname_pointer(cache))
-		  a = cache_get_name(cache->addr.cname.cache);
+		  a = cache_get_cname_target(cache);
 	      }
 #ifdef HAVE_DNSSEC
 	    else if (cache->flags & F_DNSKEY)
diff --git a/src/config.h b/src/config.h
index 93dbf44..4bfa0b7 100644
--- a/src/config.h
+++ b/src/config.h
@@ -39,14 +39,12 @@
 #define TFTP_MAX_CONNECTIONS 50 /* max simultaneous connections */
 #define LOG_MAX 5 /* log-queue length */
 #define RANDFILE "/dev/urandom"
-#define EDNS0_OPTION_MAC 5 /* dyndns.org temporary assignment */
 #define DNSMASQ_SERVICE "uk.org.thekelleys.dnsmasq" /* Default - may be overridden by config */
 #define DNSMASQ_PATH "/uk/org/thekelleys/dnsmasq"
 #define AUTH_TTL 600 /* default TTL for auth DNS */
 #define SOA_REFRESH 1200 /* SOA refresh default */
 #define SOA_RETRY 180 /* SOA retry default */
 #define SOA_EXPIRY 1209600 /* SOA expiry default */
-#define RA_INTERVAL 600 /* Send unsolicited RA's this often when not provoked. */
  
 /* compile-time options: uncomment below to enable or do eg.
    make COPTS=-DHAVE_BROKEN_RTC
diff --git a/src/dhcp-common.c b/src/dhcp-common.c
index e5e136a..a92d728 100644
--- a/src/dhcp-common.c
+++ b/src/dhcp-common.c
@@ -253,6 +253,110 @@
   return 0;
 }
 
+int config_has_mac(struct dhcp_config *config, unsigned char *hwaddr, int len, int type)
+{
+  struct hwaddr_config *conf_addr;
+  
+  for (conf_addr = config->hwaddr; conf_addr; conf_addr = conf_addr->next)
+    if (conf_addr->wildcard_mask == 0 &&
+	conf_addr->hwaddr_len == len &&
+	(conf_addr->hwaddr_type == type || conf_addr->hwaddr_type == 0) &&
+	memcmp(conf_addr->hwaddr, hwaddr, len) == 0)
+      return 1;
+  
+  return 0;
+}
+
+static int is_config_in_context(struct dhcp_context *context, struct dhcp_config *config)
+{
+  if (!context) /* called via find_config() from lease_update_from_configs() */
+    return 1; 
+
+  if (!(config->flags & (CONFIG_ADDR | CONFIG_ADDR6)))
+    return 1;
+  
+#ifdef HAVE_DHCP6
+  if ((context->flags & CONTEXT_V6) && (config->flags & CONFIG_WILDCARD))
+    return 1;
+#endif
+
+  for (; context; context = context->current)
+#ifdef HAVE_DHCP6
+    if (context->flags & CONTEXT_V6) 
+      {
+	if ((config->flags & CONFIG_ADDR6) && is_same_net6(&config->addr6, &context->start6, context->prefix))
+	  return 1;
+      }
+    else 
+#endif
+      if ((config->flags & CONFIG_ADDR) && is_same_net(config->addr, context->start, context->netmask))
+	return 1;
+
+  return 0;
+}
+
+struct dhcp_config *find_config(struct dhcp_config *configs,
+				struct dhcp_context *context,
+				unsigned char *clid, int clid_len,
+				unsigned char *hwaddr, int hw_len, 
+				int hw_type, char *hostname)
+{
+  int count, new;
+  struct dhcp_config *config, *candidate; 
+  struct hwaddr_config *conf_addr;
+
+  if (clid)
+    for (config = configs; config; config = config->next)
+      if (config->flags & CONFIG_CLID)
+	{
+	  if (config->clid_len == clid_len && 
+	      memcmp(config->clid, clid, clid_len) == 0 &&
+	      is_config_in_context(context, config))
+	    return config;
+	  
+	  /* dhcpcd prefixes ASCII client IDs by zero which is wrong, but we try and
+	     cope with that here. This is IPv4 only. context==NULL implies IPv4, 
+	     see lease_update_from_configs() */
+	  if ((!context || !(context->flags & CONTEXT_V6)) && *clid == 0 && config->clid_len == clid_len-1  &&
+	      memcmp(config->clid, clid+1, clid_len-1) == 0 &&
+	      is_config_in_context(context, config))
+	    return config;
+	}
+  
+
+  if (hwaddr)
+    for (config = configs; config; config = config->next)
+      if (config_has_mac(config, hwaddr, hw_len, hw_type) &&
+	  is_config_in_context(context, config))
+	return config;
+  
+  if (hostname && context)
+    for (config = configs; config; config = config->next)
+      if ((config->flags & CONFIG_NAME) && 
+	  hostname_isequal(config->hostname, hostname) &&
+	  is_config_in_context(context, config))
+	return config;
+
+  
+  if (!hwaddr)
+    return NULL;
+
+  /* use match with fewest wildcard octets */
+  for (candidate = NULL, count = 0, config = configs; config; config = config->next)
+    if (is_config_in_context(context, config))
+      for (conf_addr = config->hwaddr; conf_addr; conf_addr = conf_addr->next)
+	if (conf_addr->wildcard_mask != 0 &&
+	    conf_addr->hwaddr_len == hw_len &&	
+	    (conf_addr->hwaddr_type == hw_type || conf_addr->hwaddr_type == 0) &&
+	    (new = memcmp_masked(conf_addr->hwaddr, hwaddr, hw_len, conf_addr->wildcard_mask)) > count)
+	  {
+	      count = new;
+	      candidate = config;
+	  }
+  
+  return candidate;
+}
+
 void dhcp_update_configs(struct dhcp_config *configs)
 {
   /* Some people like to keep all static IP addresses in /etc/hosts.
@@ -341,7 +445,7 @@
 }
 
 #ifdef HAVE_LINUX_NETWORK 
-void bindtodevice(int fd)
+char *whichdevice(void)
 {
   /* If we are doing DHCP on exactly one interface, and running linux, do SO_BINDTODEVICE
      to that device. This is for the use case of  (eg) OpenStack, which runs a new
@@ -349,17 +453,20 @@
      individual processes don't always see the packets they should.
      SO_BINDTODEVICE is only available Linux. 
 
-     Note that if wildcards are used in --interface, or a configured interface doesn't
-     yet exist, then more interfaces may arrive later, so we can't safely assert there
-     is only one interface and proceed.
+     Note that if wildcards are used in --interface, or --interface is not used at all,
+     or a configured interface doesn't yet exist, then more interfaces may arrive later, 
+     so we can't safely assert there is only one interface and proceed.
 */
   
   struct irec *iface, *found;
   struct iname *if_tmp;
-
+  
+  if (!daemon->if_names)
+    return NULL;
+  
   for (if_tmp = daemon->if_names; if_tmp; if_tmp = if_tmp->next)
     if (if_tmp->name && (!if_tmp->used || strchr(if_tmp->name, '*')))
-      return;
+      return NULL;
 
   for (found = NULL, iface = daemon->interfaces; iface; iface = iface->next)
     if (iface->dhcp_ok)
@@ -367,18 +474,24 @@
 	if (!found)
 	  found = iface;
 	else if (strcmp(found->name, iface->name) != 0) 
-	  return; /* more than one. */
+	  return NULL; /* more than one. */
       }
-  
+
   if (found)
-    {
-      struct ifreq ifr;
-      strcpy(ifr.ifr_name, found->name);
-      /* only allowed by root. */
-      if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(ifr)) == -1 &&
-	  errno != EPERM)
-	die(_("failed to set SO_BINDTODEVICE on DHCP socket: %s"), NULL, EC_BADNET);
-    }
+    return found->name;
+
+  return NULL;
+}
+ 
+void  bindtodevice(char *device, int fd)
+{
+  struct ifreq ifr;
+  
+  strcpy(ifr.ifr_name, device);
+  /* only allowed by root. */
+  if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(ifr)) == -1 &&
+      errno != EPERM)
+    die(_("failed to set SO_BINDTODEVICE on DHCP socket: %s"), NULL, EC_BADNET);
 }
 #endif
 
@@ -523,6 +636,8 @@
   const struct opttab_t *t;
   int i;
 
+  (void)prot;
+
 #ifdef HAVE_DHCP6
   if (prot == AF_INET6)
     t = opttab6;
@@ -542,6 +657,8 @@
   const struct opttab_t *t;
   int i;
 
+  (void)prot;
+
 #ifdef HAVE_DHCP6
   if (prot == AF_INET6)
     t = opttab6;
@@ -719,14 +836,14 @@
       template = p;
       p += sprintf(p, ", ");
       
-      if (indextoname(daemon->doing_dhcp6 ? daemon->dhcp6fd : daemon->icmp6fd, context->if_index, ifrn_name))
+      if (indextoname(daemon->icmp6fd, context->if_index, ifrn_name))
 	sprintf(p, "%s for %s", (context->flags & CONTEXT_OLD) ? "old prefix" : "constructed", ifrn_name);
     }
-  else if (context->flags & CONTEXT_TEMPLATE)
+  else if (context->flags & CONTEXT_TEMPLATE && !(context->flags & CONTEXT_RA_STATELESS))
     {
       template = p;
       p += sprintf(p, ", ");
-       
+      
       sprintf(p, "template for %s", context->template_interface);  
     }
 #endif
@@ -734,21 +851,37 @@
   if (!(context->flags & CONTEXT_OLD) &&
       ((context->flags & CONTEXT_DHCP) || family == AF_INET)) 
     {
-      inet_ntop(family, start, daemon->dhcp_buff, 256);
+#ifdef HAVE_DHCP6
+      if (context->flags & CONTEXT_RA_STATELESS)
+	{
+	  if (context->flags & CONTEXT_TEMPLATE)
+	    strncpy(daemon->dhcp_buff, context->template_interface, 256);
+	  else
+	    strcpy(daemon->dhcp_buff, daemon->addrbuff);
+	}
+      else 
+#endif
+	inet_ntop(family, start, daemon->dhcp_buff, 256);
       inet_ntop(family, end, daemon->dhcp_buff3, 256);
       my_syslog(MS_DHCP | LOG_INFO, 
-	      (context->flags & CONTEXT_RA_STATELESS) ? 
-	      _("%s stateless on %s%.0s%.0s%s") :
-	      (context->flags & CONTEXT_STATIC) ? 
-	      _("%s, static leases only on %.0s%s%s%.0s") :
-	      (context->flags & CONTEXT_PROXY) ?
-	      _("%s, proxy on subnet %.0s%s%.0s%.0s") :
-	      _("%s, IP range %s -- %s%s%.0s"),
-	      (family != AF_INET) ? "DHCPv6" : "DHCP",
+		(context->flags & CONTEXT_RA_STATELESS) ? 
+		_("%s stateless on %s%.0s%.0s%s") :
+		(context->flags & CONTEXT_STATIC) ? 
+		_("%s, static leases only on %.0s%s%s%.0s") :
+		(context->flags & CONTEXT_PROXY) ?
+		_("%s, proxy on subnet %.0s%s%.0s%.0s") :
+		_("%s, IP range %s -- %s%s%.0s"),
+		(family != AF_INET) ? "DHCPv6" : "DHCP",
 		daemon->dhcp_buff, daemon->dhcp_buff3, daemon->namebuff, template);
     }
   
 #ifdef HAVE_DHCP6
+  if (context->flags & CONTEXT_TEMPLATE)
+    {
+      strcpy(daemon->addrbuff, context->template_interface);
+      template = "";
+    }
+
   if ((context->flags & CONTEXT_RA_NAME) && !(context->flags & CONTEXT_OLD))
     my_syslog(MS_DHCP | LOG_INFO, _("DHCPv4-derived IPv6 names on %s%s"), daemon->addrbuff, template);
   
@@ -757,6 +890,16 @@
 #endif
 
 }
-      
 
+void log_relay(int family, struct dhcp_relay *relay)
+{
+  inet_ntop(family, &relay->local, daemon->addrbuff, ADDRSTRLEN);
+  inet_ntop(family, &relay->server, daemon->namebuff, ADDRSTRLEN); 
+
+  if (relay->interface)
+    my_syslog(MS_DHCP | LOG_INFO, _("DHCP relay from %s to %s via %s"), daemon->addrbuff, daemon->namebuff, relay->interface);
+  else
+    my_syslog(MS_DHCP | LOG_INFO, _("DHCP relay from %s to %s"), daemon->addrbuff, daemon->namebuff);
+}
+   
 #endif
diff --git a/src/dhcp.c b/src/dhcp.c
index b95a4ba..67a82b5 100644
--- a/src/dhcp.c
+++ b/src/dhcp.c
@@ -20,6 +20,8 @@
 
 struct iface_param {
   struct dhcp_context *current;
+  struct dhcp_relay *relay;
+  struct in_addr relay_local;
   int ind;
 };
 
@@ -32,6 +34,8 @@
 			    struct in_addr netmask, struct in_addr broadcast, void *vparam);
 static int check_listen_addrs(struct in_addr local, int if_index, char *label,
 			      struct in_addr netmask, struct in_addr broadcast, void *vparam);
+static int relay_upstream4(struct dhcp_relay *relay, struct dhcp_packet *mess, size_t sz, int iface_index);
+static struct dhcp_relay *relay_reply4(struct dhcp_packet *mess, char *arrival_interface);
 
 static int make_fd(int port)
 {
@@ -132,6 +136,8 @@
   int fd = pxe_fd ? daemon->pxefd : daemon->dhcpfd;
   struct dhcp_packet *mess;
   struct dhcp_context *context;
+  struct dhcp_relay *relay;
+  int is_relay_reply = 0;
   struct iname *tmp;
   struct ifreq ifr;
   struct msghdr msg;
@@ -250,57 +256,86 @@
     unicast_dest = 1;
 #endif
   
-  ifr.ifr_addr.sa_family = AF_INET;
-  if (ioctl(daemon->dhcpfd, SIOCGIFADDR, &ifr) != -1 )
-    iface_addr = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr;
+  if ((relay = relay_reply4((struct dhcp_packet *)daemon->dhcp_packet.iov_base, ifr.ifr_name)))
+    {
+      /* Reply from server, using us as relay. */
+      iface_index = relay->iface_index;
+      if (!indextoname(daemon->dhcpfd, iface_index, ifr.ifr_name))
+	return;
+      is_relay_reply = 1; 
+      iov.iov_len = sz;
+#ifdef HAVE_LINUX_NETWORK
+      strncpy(arp_req.arp_dev, ifr.ifr_name, 16);
+#endif 
+    }
   else
     {
-      my_syslog(MS_DHCP | LOG_WARNING, _("DHCP packet received on %s which has no address"), ifr.ifr_name);
-      return;
-    }
-  
-  for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next)
-    if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name))
-      return;
-  
-  /* unlinked contexts are marked by context->current == context */
-  for (context = daemon->dhcp; context; context = context->next)
-    context->current = context;
-  
-  parm.current = NULL;
-  parm.ind = iface_index;
-
-  if (!iface_check(AF_INET, (struct all_addr *)&iface_addr, ifr.ifr_name, NULL))
-    {
-      /* If we failed to match the primary address of the interface, see if we've got a --listen-address
-	 for a secondary */
-      struct match_param match;
+      ifr.ifr_addr.sa_family = AF_INET;
+      if (ioctl(daemon->dhcpfd, SIOCGIFADDR, &ifr) != -1 )
+	iface_addr = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr;
+      else
+	{
+	  my_syslog(MS_DHCP | LOG_WARNING, _("DHCP packet received on %s which has no address"), ifr.ifr_name);
+	  return;
+	}
       
-      match.matched = 0;
-      match.ind = iface_index;
+      for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next)
+	if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name))
+	  return;
       
-      if (!daemon->if_addrs ||
-	  !iface_enumerate(AF_INET, &match, check_listen_addrs) ||
-	  !match.matched)
+      /* unlinked contexts/relays are marked by context->current == context */
+      for (context = daemon->dhcp; context; context = context->next)
+	context->current = context;
+      
+      for (relay = daemon->relay4; relay; relay = relay->next)
+	relay->current = relay;
+      
+      parm.current = NULL;
+      parm.relay = NULL;
+      parm.relay_local.s_addr = 0;
+      parm.ind = iface_index;
+      
+      if (!iface_check(AF_INET, (struct all_addr *)&iface_addr, ifr.ifr_name, NULL))
+	{
+	  /* If we failed to match the primary address of the interface, see if we've got a --listen-address
+	     for a secondary */
+	  struct match_param match;
+	  
+	  match.matched = 0;
+	  match.ind = iface_index;
+	  
+	  if (!daemon->if_addrs ||
+	      !iface_enumerate(AF_INET, &match, check_listen_addrs) ||
+	      !match.matched)
+	    return;
+	  
+	  iface_addr = match.addr;
+	  /* make sure secondary address gets priority in case
+	     there is more than one address on the interface in the same subnet */
+	  complete_context(match.addr, iface_index, NULL, match.netmask, match.broadcast, &parm);
+	}    
+      
+      if (!iface_enumerate(AF_INET, &parm, complete_context))
 	return;
 
-      iface_addr = match.addr;
-      /* make sure secondary address gets priority in case
-	 there is more than one address on the interface in the same subnet */
-      complete_context(match.addr, iface_index, NULL, match.netmask, match.broadcast, &parm);
-    }    
+      /* We're relaying this request */
+      if  (parm.relay_local.s_addr != 0 &&
+	   relay_upstream4(parm.relay, (struct dhcp_packet *)daemon->dhcp_packet.iov_base, (size_t)sz, iface_index))
+	return;
+
+      /* May have configured relay, but not DHCP server */
+      if (!daemon->dhcp)
+	return;
+
+      lease_prune(NULL, now); /* lose any expired leases */
+      iov.iov_len = dhcp_reply(parm.current, ifr.ifr_name, iface_index, (size_t)sz, 
+			       now, unicast_dest, &is_inform, pxe_fd, iface_addr);
+      lease_update_file(now);
+      lease_update_dns(0);
       
-  if (!iface_enumerate(AF_INET, &parm, complete_context))
-    return;
-  
-  lease_prune(NULL, now); /* lose any expired leases */
-  iov.iov_len = dhcp_reply(parm.current, ifr.ifr_name, iface_index, (size_t)sz, 
-			   now, unicast_dest, &is_inform, pxe_fd, iface_addr);
-  lease_update_file(now);
-  lease_update_dns(0);
-    
-  if (iov.iov_len == 0)
-    return;
+      if (iov.iov_len == 0)
+	return;
+    }
   
   msg.msg_name = &dest;
   msg.msg_namelen = sizeof(dest);
@@ -321,7 +356,7 @@
       if (mess->ciaddr.s_addr != 0)
 	dest.sin_addr = mess->ciaddr;
     }
-  else if (mess->giaddr.s_addr)
+  else if (mess->giaddr.s_addr && !is_relay_reply)
     {
       /* Send to BOOTP relay  */
       dest.sin_port = htons(daemon->dhcp_server_port);
@@ -334,7 +369,7 @@
 	 source port too, and send back to that.  If we're replying 
 	 to a DHCPINFORM, trust the source address always. */
       if ((!is_inform && dest.sin_addr.s_addr != mess->ciaddr.s_addr) ||
-	  dest.sin_port == 0 || dest.sin_addr.s_addr == 0)
+	  dest.sin_port == 0 || dest.sin_addr.s_addr == 0 || is_relay_reply)
 	{
 	  dest.sin_port = htons(daemon->dhcp_client_port); 
 	  dest.sin_addr = mess->ciaddr;
@@ -450,6 +485,7 @@
 			    struct in_addr netmask, struct in_addr broadcast, void *vparam)
 {
   struct dhcp_context *context;
+  struct dhcp_relay *relay;
   struct iface_param *param = vparam;
 
   (void)label;
@@ -495,6 +531,15 @@
 	}		
     }
 
+  for (relay = daemon->relay4; relay; relay = relay->next)
+    if (if_index == param->ind && relay->local.addr.addr4.s_addr == local.s_addr && relay->current == relay &&
+	(param->relay_local.s_addr == 0 || param->relay_local.s_addr == local.s_addr))
+      {
+	relay->current = param->relay;
+	param->relay = relay;
+	param->relay_local = local;	
+      }
+
   return 1;
 }
 	  
@@ -704,89 +749,6 @@
   return 0;
 }
 
-static int is_addr_in_context(struct dhcp_context *context, struct dhcp_config *config)
-{
-  if (!context) /* called via find_config() from lease_update_from_configs() */
-    return 1; 
-  if (!(config->flags & CONFIG_ADDR))
-    return 1;
-  for (; context; context = context->current)
-    if (is_same_net(config->addr, context->start, context->netmask))
-      return 1;
-  
-  return 0;
-}
-
-int config_has_mac(struct dhcp_config *config, unsigned char *hwaddr, int len, int type)
-{
-  struct hwaddr_config *conf_addr;
-  
-  for (conf_addr = config->hwaddr; conf_addr; conf_addr = conf_addr->next)
-    if (conf_addr->wildcard_mask == 0 &&
-	conf_addr->hwaddr_len == len &&
-	(conf_addr->hwaddr_type == type || conf_addr->hwaddr_type == 0) &&
-	memcmp(conf_addr->hwaddr, hwaddr, len) == 0)
-      return 1;
-  
-  return 0;
-}
-
-struct dhcp_config *find_config(struct dhcp_config *configs,
-				struct dhcp_context *context,
-				unsigned char *clid, int clid_len,
-				unsigned char *hwaddr, int hw_len, 
-				int hw_type, char *hostname)
-{
-  int count, new;
-  struct dhcp_config *config, *candidate; 
-  struct hwaddr_config *conf_addr;
-
-  if (clid)
-    for (config = configs; config; config = config->next)
-      if (config->flags & CONFIG_CLID)
-	{
-	  if (config->clid_len == clid_len && 
-	      memcmp(config->clid, clid, clid_len) == 0 &&
-	      is_addr_in_context(context, config))
-	    return config;
-	  
-	  /* dhcpcd prefixes ASCII client IDs by zero which is wrong, but we try and
-	     cope with that here */
-	  if (*clid == 0 && config->clid_len == clid_len-1  &&
-	      memcmp(config->clid, clid+1, clid_len-1) == 0 &&
-	      is_addr_in_context(context, config))
-	    return config;
-	}
-  
-
-  for (config = configs; config; config = config->next)
-    if (config_has_mac(config, hwaddr, hw_len, hw_type) &&
-	is_addr_in_context(context, config))
-      return config;
-  
-  if (hostname && context)
-    for (config = configs; config; config = config->next)
-      if ((config->flags & CONFIG_NAME) && 
-	  hostname_isequal(config->hostname, hostname) &&
-	  is_addr_in_context(context, config))
-	return config;
-
-  /* use match with fewest wildcard octets */
-  for (candidate = NULL, count = 0, config = configs; config; config = config->next)
-    if (is_addr_in_context(context, config))
-      for (conf_addr = config->hwaddr; conf_addr; conf_addr = conf_addr->next)
-	if (conf_addr->wildcard_mask != 0 &&
-	    conf_addr->hwaddr_len == hw_len &&	
-	    (conf_addr->hwaddr_type == hw_type || conf_addr->hwaddr_type == 0) &&
-	    (new = memcmp_masked(conf_addr->hwaddr, hwaddr, hw_len, conf_addr->wildcard_mask)) > count)
-	  {
-	    count = new;
-	    candidate = config;
-	  }
-
-  return candidate;
-}
-
 void dhcp_read_ethers(void)
 {
   FILE *f = fopen(ETHERSFILE, "r");
@@ -988,5 +950,74 @@
   return NULL;
 }
 
-#endif
+static int  relay_upstream4(struct dhcp_relay *relay, struct dhcp_packet *mess, size_t sz, int iface_index)
+{
+  /* ->local is same value for all relays on ->current chain */
+  struct all_addr from;
+  
+  if (mess->op != BOOTREQUEST)
+    return 0;
 
+  /* source address == relay address */
+  from.addr.addr4 = relay->local.addr.addr4;
+  
+  /* already gatewayed ? */
+  if (mess->giaddr.s_addr)
+    {
+      /* if so check if by us, to stomp on loops. */
+      if (mess->giaddr.s_addr == relay->local.addr.addr4.s_addr)
+	return 1;
+    }
+  else
+    {
+      /* plug in our address */
+      mess->giaddr.s_addr = relay->local.addr.addr4.s_addr;
+    }
+
+  if ((mess->hops++) > 20)
+    return 1;
+
+  for (; relay; relay = relay->current)
+    {
+      union mysockaddr to;
+      
+      to.sa.sa_family = AF_INET;
+      to.in.sin_addr = relay->server.addr.addr4;
+      to.in.sin_port = htons(daemon->dhcp_server_port);
+      
+      send_from(daemon->dhcpfd, 0, (char *)mess, sz, &to, &from, 0);
+      
+      if (option_bool(OPT_LOG_OPTS))
+	{
+	  inet_ntop(AF_INET, &relay->local, daemon->addrbuff, ADDRSTRLEN);
+	  my_syslog(MS_DHCP | LOG_INFO, _("DHCP relay %s -> %s"), daemon->addrbuff, inet_ntoa(relay->server.addr.addr4));
+	}
+      
+      /* Save this for replies */
+      relay->iface_index = iface_index;
+    }
+  
+  return 1;
+}
+
+
+static struct dhcp_relay *relay_reply4(struct dhcp_packet *mess, char *arrival_interface)
+{
+  struct dhcp_relay *relay;
+
+  if (mess->giaddr.s_addr == 0 || mess->op != BOOTREPLY)
+    return NULL;
+
+  for (relay = daemon->relay4; relay; relay = relay->next)
+    {
+      if (mess->giaddr.s_addr == relay->local.addr.addr4.s_addr)
+	{
+	  if (!relay->interface || wildcard_match(relay->interface, arrival_interface))
+	    return relay->iface_index != 0 ? relay : NULL;
+	}
+    }
+  
+  return NULL;	 
+}     
+
+#endif
diff --git a/src/dhcp6-protocol.h b/src/dhcp6-protocol.h
index c4eef35..f8e98ec 100644
--- a/src/dhcp6-protocol.h
+++ b/src/dhcp6-protocol.h
@@ -59,6 +59,7 @@
 #define OPTION6_REMOTE_ID       37
 #define OPTION6_SUBSCRIBER_ID   38
 #define OPTION6_FQDN            39
+#define OPTION6_CLIENT_MAC      79
 
 /* replace this with the real number when allocated.
    defining this also enables the relevant code. */ 
diff --git a/src/dhcp6.c b/src/dhcp6.c
index 3bb855f..7b0adcf 100644
--- a/src/dhcp6.c
+++ b/src/dhcp6.c
@@ -18,16 +18,26 @@
 
 #ifdef HAVE_DHCP6
 
+#include <netinet/icmp6.h>
+
 struct iface_param {
   struct dhcp_context *current;
-  struct in6_addr fallback;
+  struct dhcp_relay *relay;
+  struct in6_addr fallback, relay_local;
   int ind, addr_match;
 };
 
+struct mac_param {
+  struct in6_addr *target;
+  unsigned char *mac;
+  unsigned int maclen;
+};
+
+
 static int complete_context6(struct in6_addr *local,  int prefix,
 			     int scope, int if_index, int flags, 
 			     unsigned int preferred, unsigned int valid, void *vparam);
-
+static int find_mac(int family, char *addrp, char *mac, size_t maclen, void *parmv);
 static int make_duid1(int index, unsigned int type, char *mac, size_t maclen, void *parm); 
 
 void dhcp6_init(void)
@@ -87,6 +97,7 @@
 void dhcp6_packet(time_t now)
 {
   struct dhcp_context *context;
+  struct dhcp_relay *relay;
   struct iface_param parm;
   struct cmsghdr *cmptr;
   struct msghdr msg;
@@ -100,6 +111,9 @@
   struct ifreq ifr;
   struct iname *tmp;
   unsigned short port;
+  struct in6_addr dst_addr;
+
+  memset(&dst_addr, 0, sizeof(dst_addr));
 
   msg.msg_control = control_u.control6;
   msg.msg_controllen = sizeof(control_u);
@@ -122,60 +136,86 @@
 	p.c = CMSG_DATA(cmptr);
         
 	if_index = p.p->ipi6_ifindex;
+	dst_addr = p.p->ipi6_addr;
       }
 
   if (!indextoname(daemon->dhcp6fd, if_index, ifr.ifr_name))
     return;
-    
-  for (tmp = daemon->if_except; tmp; tmp = tmp->next)
-    if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name))
-      return;
 
-  for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next)
-    if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name))
-      return;
- 
-  parm.current = NULL;
-  parm.ind = if_index;
-  parm.addr_match = 0;
-  memset(&parm.fallback, 0, IN6ADDRSZ);
-
-  for (context = daemon->dhcp6; context; context = context->next)
-    if (IN6_IS_ADDR_UNSPECIFIED(&context->start6) && context->prefix == 0)
-      {
-	/* wildcard context for DHCP-stateless only */
-	parm.current = context;
-	context->current = NULL;
-      }
-    else
-      {
-	/* unlinked contexts are marked by context->current == context */
-	context->current = context;
-	memset(&context->local6, 0, IN6ADDRSZ);
-      }
-  
-  if (!iface_enumerate(AF_INET6, &parm, complete_context6))
-    return;
-  
-  if (daemon->if_names || daemon->if_addrs)
+  if ((port = relay_reply6(&from, sz, ifr.ifr_name)) == 0)
     {
-      
-      for (tmp = daemon->if_names; tmp; tmp = tmp->next)
+      for (tmp = daemon->if_except; tmp; tmp = tmp->next)
 	if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name))
-	  break;
+	  return;
+      
+      for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next)
+	if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name))
+	  return;
+      
+      parm.current = NULL;
+      parm.relay = NULL;
+      memset(&parm.relay_local, 0, IN6ADDRSZ);
+      parm.ind = if_index;
+      parm.addr_match = 0;
+      memset(&parm.fallback, 0, IN6ADDRSZ);
+      
+      for (context = daemon->dhcp6; context; context = context->next)
+	if (IN6_IS_ADDR_UNSPECIFIED(&context->start6) && context->prefix == 0)
+	  {
+	    /* wildcard context for DHCP-stateless only */
+	    parm.current = context;
+	    context->current = NULL;
+	  }
+	else
+	  {
+	    /* unlinked contexts are marked by context->current == context */
+	    context->current = context;
+	    memset(&context->local6, 0, IN6ADDRSZ);
+	  }
 
-      if (!tmp && !parm.addr_match)
+      for (relay = daemon->relay6; relay; relay = relay->next)
+	relay->current = relay;
+      
+      if (!iface_enumerate(AF_INET6, &parm, complete_context6))
 	return;
+
+      if (daemon->if_names || daemon->if_addrs)
+	{
+	  
+	  for (tmp = daemon->if_names; tmp; tmp = tmp->next)
+	    if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name))
+	      break;
+	  
+	  if (!tmp && !parm.addr_match)
+	    return;
+	}
+      
+      if (parm.relay)
+	{
+	  /* Ignore requests sent to the ALL_SERVERS multicast address for relay when
+	     we're listening there for DHCPv6 server reasons. */
+	  struct in6_addr all_servers;
+	  
+	  inet_pton(AF_INET6, ALL_SERVERS, &all_servers);
+	  
+	  if (!IN6_ARE_ADDR_EQUAL(&dst_addr, &all_servers))
+	    relay_upstream6(parm.relay, sz, &from.sin6_addr, from.sin6_scope_id);
+	  return;
+	}
+      
+      /* May have configured relay, but not DHCP server */
+      if (!daemon->doing_dhcp6)
+	return;
+      
+      lease_prune(NULL, now); /* lose any expired leases */
+      
+      port = dhcp6_reply(parm.current, if_index, ifr.ifr_name, &parm.fallback, 
+			 sz, &from.sin6_addr, now);
+      
+      lease_update_file(now);
+      lease_update_dns(0);
     }
-
-  lease_prune(NULL, now); /* lose any expired leases */
-
-  port = dhcp6_reply(parm.current, if_index, ifr.ifr_name, &parm.fallback, 
-		     sz, IN6_IS_ADDR_MULTICAST(&from.sin6_addr), now);
-  
-  lease_update_file(now);
-  lease_update_dns(0);
-  
+			  
   /* The port in the source address of the original request should
      be correct, but at least once client sends from the server port,
      so we explicitly send to the client port to a client, and the
@@ -189,75 +229,156 @@
     }
 }
 
+void get_client_mac(struct in6_addr *client, int iface, unsigned char *mac, unsigned int *maclenp, unsigned int *mactypep)
+{
+  /* Recieving a packet from a host does not populate the neighbour
+     cache, so we send a neighbour discovery request if we can't 
+     find the sender. Repeat a few times in case of packet loss. */
+  
+  struct neigh_packet neigh;
+  struct sockaddr_in6 addr;
+  struct mac_param mac_param;
+  int i;
+
+  neigh.type = ND_NEIGHBOR_SOLICIT;
+  neigh.code = 0;
+  neigh.reserved = 0;
+  neigh.target = *client;
+  
+  memset(&addr, 0, sizeof(addr));
+#ifdef HAVE_SOCKADDR_SA_LEN
+  addr.sin6_len = sizeof(struct sockaddr_in6);
+#endif
+  addr.sin6_family = AF_INET6;
+  addr.sin6_port = htons(IPPROTO_ICMPV6);
+  addr.sin6_addr = *client;
+  addr.sin6_scope_id = iface;
+  
+  mac_param.target = client;
+  mac_param.maclen = 0;
+  mac_param.mac = mac;
+  
+  for (i = 0; i < 5; i++)
+    {
+      struct timespec ts;
+      
+      iface_enumerate(AF_UNSPEC, &mac_param, find_mac);
+      
+      if (mac_param.maclen != 0)
+	break;
+      
+      sendto(daemon->icmp6fd, &neigh, sizeof(neigh), 0, (struct sockaddr *)&addr, sizeof(addr));
+      
+      ts.tv_sec = 0;
+      ts.tv_nsec = 100000000; /* 100ms */
+      nanosleep(&ts, NULL);
+    }
+
+  *maclenp = mac_param.maclen;
+  *mactypep = ARPHRD_ETHER;
+}
+    
+static int find_mac(int family, char *addrp, char *mac, size_t maclen, void *parmv)
+{
+  struct mac_param *parm = parmv;
+  
+  if (family == AF_INET6 && IN6_ARE_ADDR_EQUAL(parm->target, (struct in6_addr *)addrp))
+    {
+      if (maclen <= DHCP_CHADDR_MAX)
+	{
+	  parm->maclen = maclen;
+	  memcpy(parm->mac, mac, maclen);
+	}
+      
+      return 0; /* found, abort */
+    }
+  
+  return 1;
+}
+
 static int complete_context6(struct in6_addr *local,  int prefix,
 			     int scope, int if_index, int flags, unsigned int preferred, 
 			     unsigned int valid, void *vparam)
 {
   struct dhcp_context *context;
+  struct dhcp_relay *relay;
   struct iface_param *param = vparam;
   struct iname *tmp;
  
   (void)scope; /* warning */
   
-  if (if_index == param->ind &&
-      !IN6_IS_ADDR_LOOPBACK(local) &&
-      !IN6_IS_ADDR_LINKLOCAL(local) &&
-      !IN6_IS_ADDR_MULTICAST(local))
+  if (if_index == param->ind)
     {
-      /* if we have --listen-address config, see if the 
-	 arrival interface has a matching address. */
-      for (tmp = daemon->if_addrs; tmp; tmp = tmp->next)
-	if (tmp->addr.sa.sa_family == AF_INET6 &&
-	    IN6_ARE_ADDR_EQUAL(&tmp->addr.in6.sin6_addr, local))
-	  param->addr_match = 1;
-      
-      /* Determine a globally address on the arrival interface, even
-	 if we have no matching dhcp-context, because we're only
-	 allocating on remote subnets via relays. This
-	 is used as a default for the DNS server option. */
-      param->fallback = *local;
-      
-      for (context = daemon->dhcp6; context; context = context->next)
+      if (!IN6_IS_ADDR_LOOPBACK(local) &&
+	  !IN6_IS_ADDR_LINKLOCAL(local) &&
+	  !IN6_IS_ADDR_MULTICAST(local))
 	{
-	  if ((context->flags & CONTEXT_DHCP) &&
-	      !(context->flags & (CONTEXT_TEMPLATE | CONTEXT_OLD)) &&
-	      prefix == context->prefix &&
-	      is_same_net6(local, &context->start6, prefix) &&
-	      is_same_net6(local, &context->end6, prefix))
+	  /* if we have --listen-address config, see if the 
+	     arrival interface has a matching address. */
+	  for (tmp = daemon->if_addrs; tmp; tmp = tmp->next)
+	    if (tmp->addr.sa.sa_family == AF_INET6 &&
+		IN6_ARE_ADDR_EQUAL(&tmp->addr.in6.sin6_addr, local))
+	      param->addr_match = 1;
+	  
+	  /* Determine a globally address on the arrival interface, even
+	     if we have no matching dhcp-context, because we're only
+	     allocating on remote subnets via relays. This
+	     is used as a default for the DNS server option. */
+	  param->fallback = *local;
+	  
+	  for (context = daemon->dhcp6; context; context = context->next)
 	    {
-
-
-	      /* link it onto the current chain if we've not seen it before */
-	      if (context->current == context)
+	      if ((context->flags & CONTEXT_DHCP) &&
+		  !(context->flags & (CONTEXT_TEMPLATE | CONTEXT_OLD)) &&
+		  prefix == context->prefix &&
+		  is_same_net6(local, &context->start6, prefix) &&
+		  is_same_net6(local, &context->end6, prefix))
 		{
-		  struct dhcp_context *tmp, **up;
 		  
-		  /* use interface values only for contructed contexts */
-		  if (!(context->flags & CONTEXT_CONSTRUCTED))
-		    preferred = valid = 0xffffffff;
-		  else if (flags & IFACE_DEPRECATED)
-		    preferred = 0;
-
-		  if (context->flags & CONTEXT_DEPRECATE)
-		    preferred = 0;
 		  
-		  /* order chain, longest preferred time first */
-		  for (up = &param->current, tmp = param->current; tmp; tmp = tmp->current)
-		    if (tmp->preferred <= preferred)
-		      break;
-		    else
-		      up = &tmp->current;
-		  
-		  context->current = *up;
-		  *up = context;
-		  context->local6 = *local;
-		  context->preferred = preferred;
-		  context->valid = valid;
+		  /* link it onto the current chain if we've not seen it before */
+		  if (context->current == context)
+		    {
+		      struct dhcp_context *tmp, **up;
+		      
+		      /* use interface values only for contructed contexts */
+		      if (!(context->flags & CONTEXT_CONSTRUCTED))
+			preferred = valid = 0xffffffff;
+		      else if (flags & IFACE_DEPRECATED)
+			preferred = 0;
+		      
+		      if (context->flags & CONTEXT_DEPRECATE)
+			preferred = 0;
+		      
+		      /* order chain, longest preferred time first */
+		      for (up = &param->current, tmp = param->current; tmp; tmp = tmp->current)
+			if (tmp->preferred <= preferred)
+			  break;
+			else
+			  up = &tmp->current;
+		      
+		      context->current = *up;
+		      *up = context;
+		      context->local6 = *local;
+		      context->preferred = preferred;
+		      context->valid = valid;
+		    }
 		}
 	    }
 	}
+
+      for (relay = daemon->relay6; relay; relay = relay->next)
+	if (IN6_ARE_ADDR_EQUAL(local, &relay->local.addr.addr6) && relay->current == relay &&
+	    (IN6_IS_ADDR_UNSPECIFIED(&param->relay_local) || IN6_ARE_ADDR_EQUAL(local, &param->relay_local)))
+	  {
+	    relay->current = param->relay;
+	    param->relay = relay;
+	    param->relay_local = *local;
+	  }
+      
     }          
-  return 1;
+ 
+ return 1;
 }
 
 struct dhcp_config *config_find_by_address6(struct dhcp_config *configs, struct in6_addr *net, int prefix, u64 addr)
@@ -400,48 +521,6 @@
   return 0;
 }
 
-static int is_config_in_context6(struct dhcp_context *context, struct dhcp_config *config)
-{
-  if (!(config->flags & CONFIG_ADDR6) || 
-      (config->flags & CONFIG_WILDCARD))
-
-    return 1;
-  
-  for (; context; context = context->current)
-    if (is_same_net6(&config->addr6, &context->start6, context->prefix))
-      return 1;
-      
-  return 0;
-}
-
-
-struct dhcp_config *find_config6(struct dhcp_config *configs,
-				 struct dhcp_context *context,
-				 unsigned char *duid, int duid_len,
-				 char *hostname)
-{
-  struct dhcp_config *config; 
-      
-  if (duid)
-    for (config = configs; config; config = config->next)
-      if (config->flags & CONFIG_CLID)
-	{
-	  if (config->clid_len == duid_len && 
-	      memcmp(config->clid, duid, duid_len) == 0 &&
-	      is_config_in_context6(context, config))
-	    return config;
-	}
-    
-  if (hostname && context)
-    for (config = configs; config; config = config->next)
-      if ((config->flags & CONFIG_NAME) && 
-          hostname_isequal(config->hostname, hostname) &&
-          is_config_in_context6(context, config))
-        return config;
-
-  return NULL;
-}
-
 void make_duid(time_t now)
 {
   if (daemon->duid_config)
@@ -475,6 +554,7 @@
   
   unsigned char *p;
   (void)index;
+  (void)parm;
 
   if (type >= 256)
     return 1;
@@ -522,7 +602,13 @@
       IN6_IS_ADDR_MULTICAST(local))
     return 1;
 
-  if (!indextoname(daemon->doing_dhcp6 ? daemon->dhcp6fd : daemon->icmp6fd, if_index, ifrn_name))
+  if (!(flags & IFACE_PERMANENT))
+    return 1;
+
+  if (flags & IFACE_DEPRECATED)
+    return 1;
+
+  if (!indextoname(daemon->icmp6fd, if_index, ifrn_name))
     return 0;
   
   for (template = daemon->dhcp6; template; template = template->next)
@@ -538,11 +624,8 @@
 	  }
 	
       }
-    else if ((addr6part(local) == addr6part(&template->start6) ||
-	      addr6part(local) == addr6part(&template->end6) ||
-	      (IN6_IS_ADDR_UNSPECIFIED(&template->start6) &&
-	       IFACE_PERMANENT == (flags & (IFACE_PERMANENT | IFACE_DEPRECATED)))) && 
-	     wildcard_match(template->template_interface, ifrn_name))
+    else if (wildcard_match(template->template_interface, ifrn_name) &&
+	     template->prefix == prefix)
       {
 	start6 = *local;
 	setaddr6part(&start6, addr6part(&template->start6));
diff --git a/src/dns-protocol.h b/src/dns-protocol.h
index 77bcd58..023be5f 100644
--- a/src/dns-protocol.h
+++ b/src/dns-protocol.h
@@ -60,6 +60,10 @@
 #define T_MAILB		253	
 #define T_ANY		255
 
+#define EDNS0_OPTION_MAC            65001 /* dyndns.org temporary assignment */
+#define EDNS0_OPTION_CLIENT_SUBNET  8     /* IANA */
+
+
 struct dns_header {
   u16 id;
   u8  hb3,hb4;
diff --git a/src/dnsmasq.c b/src/dnsmasq.c
index d8686a7..964c81f 100644
--- a/src/dnsmasq.c
+++ b/src/dnsmasq.c
@@ -50,8 +50,13 @@
 #if defined(HAVE_LINUX_NETWORK)
   cap_user_header_t hdr = NULL;
   cap_user_data_t data = NULL;
+  char *bound_device = NULL;
+  int did_bind = 0;
 #endif 
+#if defined(HAVE_DHCP) || defined(HAVE_DHCP6)
   struct dhcp_context *context;
+  struct dhcp_relay *relay;
+#endif
 
 #ifdef LOCALEDIR
   setlocale(LC_ALL, "");
@@ -167,50 +172,47 @@
   daemon->soa_sn = now;
 #endif
   
-#ifdef HAVE_DHCP
-  if (daemon->dhcp || daemon->dhcp6)
-    { 
+#ifdef HAVE_DHCP6
+  if (daemon->dhcp6)
+    {
+      daemon->doing_ra = option_bool(OPT_RA);
       
-#  ifdef HAVE_DHCP6
-      if (daemon->dhcp6)
+      for (context = daemon->dhcp6; context; context = context->next)
 	{
-	  daemon->doing_ra = option_bool(OPT_RA);
-	  
-	  for (context = daemon->dhcp6; context; context = context->next)
-	    {
-	      if (context->flags & CONTEXT_DHCP)
-		daemon->doing_dhcp6 = 1;
-	      if (context->flags & CONTEXT_RA)
-		daemon->doing_ra = 1;
+	  if (context->flags & CONTEXT_DHCP)
+	    daemon->doing_dhcp6 = 1;
+	  if (context->flags & CONTEXT_RA)
+	    daemon->doing_ra = 1;
 #ifndef  HAVE_LINUX_NETWORK
-	      if (context->flags & CONTEXT_TEMPLATE)
-		die (_("dhcp-range constructor not available on this platform"), NULL, EC_BADCONF);
+	  if (context->flags & CONTEXT_TEMPLATE)
+	    die (_("dhcp-range constructor not available on this platform"), NULL, EC_BADCONF);
 #endif 
-	    }
 	}
-#  endif
-
-      /* Note that order matters here, we must call lease_init before
-	 creating any file descriptors which shouldn't be leaked
-	 to the lease-script init process. We need to call common_init
-	 before lease_init to allocate buffers it uses.*/
-      if (daemon->dhcp || daemon->doing_dhcp6)
-	{
-	  dhcp_common_init();
-	  lease_init(now);
-	}
-
-      if (daemon->dhcp)
-	dhcp_init();
- 
-#  ifdef HAVE_DHCP6
-      if (daemon->doing_ra)
-	ra_init(now);
-      
-      if (daemon->doing_dhcp6)
-	dhcp6_init();
-#  endif
     }
+#endif
+  
+#ifdef HAVE_DHCP
+  /* Note that order matters here, we must call lease_init before
+     creating any file descriptors which shouldn't be leaked
+     to the lease-script init process. We need to call common_init
+     before lease_init to allocate buffers it uses.*/
+  if (daemon->dhcp || daemon->doing_dhcp6 || daemon->relay4 || daemon->relay6)
+    {
+      dhcp_common_init();
+      if (daemon->dhcp || daemon->doing_dhcp6)
+	lease_init(now);
+    }
+  
+  if (daemon->dhcp || daemon->relay4)
+    dhcp_init();
+  
+#  ifdef HAVE_DHCP6
+  if (daemon->doing_ra || daemon->doing_dhcp6 || daemon->relay6)
+    ra_init(now);
+  
+  if (daemon->doing_dhcp6 || daemon->relay6)
+    dhcp6_init();
+#  endif
 
 #endif
 
@@ -240,17 +242,29 @@
 
 #if defined(HAVE_LINUX_NETWORK) && defined(HAVE_DHCP)
       /* after enumerate_interfaces()  */
+      bound_device = whichdevice();
+      
       if (daemon->dhcp)
 	{
-	  bindtodevice(daemon->dhcpfd);
-	  if (daemon->enable_pxe)
-	    bindtodevice(daemon->pxefd);
+	  if (!daemon->relay4 && bound_device)
+	    {
+	      bindtodevice(bound_device, daemon->dhcpfd);
+	      did_bind = 1;
+	    }
+	  if (daemon->enable_pxe && bound_device)
+	    {
+	      bindtodevice(bound_device, daemon->pxefd);
+	      did_bind = 1;
+	    }
 	}
 #endif
 
 #if defined(HAVE_LINUX_NETWORK) && defined(HAVE_DHCP6)
-      if (daemon->doing_dhcp6)
-	bindtodevice(daemon->dhcp6fd);
+      if (daemon->doing_dhcp6 && !daemon->relay6 && bound_device)
+	{
+	  bindtodevice(bound_device, daemon->dhcp6fd);
+	  did_bind = 1;
+	}
 #endif
     }
   else 
@@ -258,7 +272,7 @@
  
 #ifdef HAVE_DHCP6
   /* after enumerate_interfaces() */
-  if (daemon->doing_dhcp6 || daemon->doing_ra)
+  if (daemon->doing_dhcp6 || daemon->relay6 || daemon->doing_ra)
     join_multicast(1);
 #endif
   
@@ -619,6 +633,8 @@
 
   if (bind_fallback)
     my_syslog(LOG_WARNING, _("setting --bind-interfaces option because of OS limitations"));
+
+  warn_bound_listeners();
   
   if (!option_bool(OPT_NOWILD)) 
     for (if_tmp = daemon->if_names; if_tmp; if_tmp = if_tmp->next)
@@ -642,10 +658,16 @@
   for (context = daemon->dhcp; context; context = context->next)
     log_context(AF_INET, context);
 
+  for (relay = daemon->relay4; relay; relay = relay->next)
+    log_relay(AF_INET, relay);
+
 #  ifdef HAVE_DHCP6
   for (context = daemon->dhcp6; context; context = context->next)
     log_context(AF_INET6, context);
 
+  for (relay = daemon->relay6; relay; relay = relay->next)
+    log_relay(AF_INET6, relay);
+  
   if (daemon->doing_dhcp6 || daemon->doing_ra)
     dhcp_construct_contexts(now);
   
@@ -653,6 +675,11 @@
     my_syslog(MS_DHCP | LOG_INFO, _("IPv6 router advertisement enabled"));
 #  endif
 
+#  ifdef HAVE_LINUX_NETWORK
+  if (did_bind)
+    my_syslog(MS_DHCP | LOG_INFO, _("DHCP, sockets bound exclusively to interface %s"), bound_device);
+#  endif
+
   /* after dhcp_contruct_contexts */
   if (daemon->dhcp || daemon->doing_dhcp6)
     lease_find_interfaces(now);
@@ -750,7 +777,7 @@
 #endif	
   
 #ifdef HAVE_DHCP
-      if (daemon->dhcp)
+      if (daemon->dhcp || daemon->relay4)
 	{
 	  FD_SET(daemon->dhcpfd, &rset);
 	  bump_maxfd(daemon->dhcpfd, &maxfd);
@@ -763,7 +790,7 @@
 #endif
 
 #ifdef HAVE_DHCP6
-      if (daemon->doing_dhcp6)
+      if (daemon->doing_dhcp6 || daemon->relay6)
 	{
 	  FD_SET(daemon->dhcp6fd, &rset);
 	  bump_maxfd(daemon->dhcp6fd, &maxfd);
@@ -832,6 +859,7 @@
 	  enumerate_interfaces(0);
 	  /* NB, is_dad_listeners() == 1 --> we're binding interfaces */
 	  create_bound_listeners(0);
+	  warn_bound_listeners();
 	}
 
 #ifdef HAVE_LINUX_NETWORK
@@ -875,7 +903,7 @@
 #endif      
 
 #ifdef HAVE_DHCP
-      if (daemon->dhcp)
+      if (daemon->dhcp || daemon->relay4)
 	{
 	  if (FD_ISSET(daemon->dhcpfd, &rset))
 	    dhcp_packet(now, 0);
@@ -884,7 +912,7 @@
 	}
 
 #ifdef HAVE_DHCP6
-      if (daemon->doing_dhcp6 && FD_ISSET(daemon->dhcp6fd, &rset))
+      if ((daemon->doing_dhcp6 || daemon->relay6) && FD_ISSET(daemon->dhcp6fd, &rset))
 	dhcp6_packet(now);
 
       if (daemon->doing_ra && FD_ISSET(daemon->icmp6fd, &rset))
@@ -1227,6 +1255,8 @@
 
 void clear_cache_and_reload(time_t now)
 {
+  (void)now;
+
   if (daemon->port != 0)
     cache_reload();
   
diff --git a/src/dnsmasq.h b/src/dnsmasq.h
index 429e95f..90173ac 100644
--- a/src/dnsmasq.h
+++ b/src/dnsmasq.h
@@ -224,9 +224,12 @@
 #define OPT_TFTP_LC        38
 #define OPT_CLEVERBIND     39
 #define OPT_TFTP           40
-#define OPT_FAST_RA        41
-#define OPT_DNSSEC_VALIDATE 42
-#define OPT_LAST           43
+#define OPT_CLIENT_SUBNET  41
+#define OPT_QUIET_DHCP     42
+#define OPT_QUIET_DHCP6    43
+#define OPT_QUIET_RA	   44
+#define OPT_DNSSEC_VALIDATE 45
+#define OPT_LAST           46
 
 /* extra flags for my_syslog, we use a couple of facilities since they are known 
    not to occupy the same bits as priorities, no matter how syslog.h is set up. */
@@ -338,8 +341,11 @@
   union {
     struct all_addr addr;
     struct {
-      struct crec *cache;
-      int uid;
+      union {
+	struct crec *cache;
+	struct interface_name *int_name;
+      } target;
+      int uid; /* -1 if union is interface-name */
     } cname;
     struct {
       struct keydata *keydata;
@@ -452,7 +458,7 @@
 struct irec {
   union mysockaddr addr;
   struct in_addr netmask; /* only valid for IPv4 */
-  int tftp_ok, dhcp_ok, mtu, done, dad, dns_auth, index, multicast_done;
+  int tftp_ok, dhcp_ok, mtu, done, warned, dad, dns_auth, index, multicast_done;
   char *name; 
   struct irec *next;
 };
@@ -491,6 +497,7 @@
 
 #define FREC_NOREBIND           1
 #define FREC_CHECKING_DISABLED  2
+#define FREC_HAS_SUBNET         4
 
 struct frec {
   union mysockaddr source;
@@ -543,13 +550,15 @@
 #ifdef HAVE_BROKEN_RTC
   unsigned int length;
 #endif
-  int hwaddr_len, hwaddr_type; /* hw_type used for iaid in v6 */
-  unsigned char hwaddr[DHCP_CHADDR_MAX]; /* also IPv6 address */
+  int hwaddr_len, hwaddr_type;
+  unsigned char hwaddr[DHCP_CHADDR_MAX]; 
   struct in_addr addr, override, giaddr;
   unsigned char *extradata;
   unsigned int extradata_len, extradata_size;
   int last_interface;
 #ifdef HAVE_DHCP6
+  struct in6_addr addr6;
+  int iaid;
   struct slaac_address {
     struct in6_addr addr, local;
     time_t ping_time;
@@ -703,6 +712,12 @@
 };
 #endif
 
+struct ra_interface {
+  char *name;
+  int interval, lifetime, prio;
+  struct ra_interface *next;
+};
+
 struct dhcp_context {
   unsigned int lease_time, addr_epoch;
   struct in_addr netmask, broadcast;
@@ -721,24 +736,25 @@
   struct dhcp_context *next, *current;
 };
 
-#define CONTEXT_STATIC         1
-#define CONTEXT_NETMASK        2
-#define CONTEXT_BRDCAST        4
-#define CONTEXT_PROXY          8
-#define CONTEXT_RA_ONLY       16
-#define CONTEXT_RA_DONE       32
-#define CONTEXT_RA_NAME       64
-#define CONTEXT_RA_STATELESS 128
-#define CONTEXT_DHCP         256
-#define CONTEXT_DEPRECATE    512
-#define CONTEXT_TEMPLATE    1024    /* create contexts using addresses */
-#define CONTEXT_CONSTRUCTED 2048
-#define CONTEXT_GC          4096
-#define CONTEXT_RA          8192
-#define CONTEXT_CONF_USED  16384
-#define CONTEXT_USED       32768
-#define CONTEXT_NOAUTH     65536
-#define CONTEXT_OLD       131072
+#define CONTEXT_STATIC         (1u<<0)
+#define CONTEXT_NETMASK        (1u<<1)
+#define CONTEXT_BRDCAST        (1u<<2)
+#define CONTEXT_PROXY          (1u<<3)
+#define CONTEXT_RA_ONLY        (1u<<4)
+#define CONTEXT_RA_DONE        (1u<<5)
+#define CONTEXT_RA_NAME        (1u<<6)
+#define CONTEXT_RA_STATELESS   (1u<<7)
+#define CONTEXT_DHCP           (1u<<8)
+#define CONTEXT_DEPRECATE      (1u<<9)
+#define CONTEXT_TEMPLATE       (1u<<10)    /* create contexts using addresses */
+#define CONTEXT_CONSTRUCTED    (1u<<11)
+#define CONTEXT_GC             (1u<<12)
+#define CONTEXT_RA             (1u<<13)
+#define CONTEXT_CONF_USED      (1u<<14)
+#define CONTEXT_USED           (1u<<15)
+#define CONTEXT_NOAUTH         (1u<<16)
+#define CONTEXT_OLD            (1u<<17)
+#define CONTEXT_V6             (1u<<18)
 
 
 struct ping_result {
@@ -779,6 +795,12 @@
   struct tftp_prefix *next;
 };
 
+struct dhcp_relay {
+  struct all_addr local, server;
+  char *interface; /* Allowable interface for replies from server, and dest for IPv6 multicast */
+  int iface_index; /* working - interface in which requests arrived, for return */
+  struct dhcp_relay *current, *next;
+};
 
 extern struct daemon {
   /* datastuctures representing the command-line and 
@@ -797,6 +819,8 @@
   struct auth_zone *auth_zones;
   struct interface_name *int_names;
   char *mxtarget;
+  int addr4_netmask;
+  int addr6_netmask;
   char *lease_file; 
   char *username, *groupname, *scriptuser;
   char *luascript;
@@ -820,6 +844,7 @@
   unsigned long local_ttl, neg_ttl, max_ttl, max_cache_ttl, auth_ttl;
   struct hostsfile *addn_hosts;
   struct dhcp_context *dhcp, *dhcp6;
+  struct ra_interface *ra_interfaces;
   struct dhcp_config *dhcp_conf;
   struct dhcp_opt *dhcp_opts, *dhcp_match, *dhcp_opts6, *dhcp_match6;
   struct dhcp_vendor *dhcp_vendors;
@@ -828,6 +853,7 @@
   struct pxe_service *pxe_services;
   struct tag_if *tag_if; 
   struct addr_list *override_relays;
+  struct dhcp_relay *relay4, *relay6;
   int override;
   int enable_pxe;
   int doing_ra, doing_dhcp6;
@@ -854,7 +880,7 @@
   char *packet; /* packet buffer */
   int packet_buff_sz; /* size of above */
   char *namebuff; /* MAXDNAME size buffer */
-  unsigned int local_answer, queries_forwarded;
+  unsigned int local_answer, queries_forwarded, auth_answer;
   struct frec *frec_list;
   struct serverfd *sfds;
   struct irec *interfaces;
@@ -922,6 +948,7 @@
 void cache_unhash_dhcp(void);
 void dump_cache(time_t now);
 char *cache_get_name(struct crec *crecp);
+char *cache_get_cname_target(struct crec *crecp);
 struct crec *cache_enumerate(int init);
 #ifdef HAVE_DNSSEC
 struct keydata *keydata_alloc(char *data, size_t len);
@@ -961,6 +988,8 @@
 size_t resize_packet(struct dns_header *header, size_t plen, 
 		  unsigned char *pheader, size_t hlen);
 size_t add_mac(struct dns_header *header, size_t plen, char *limit, union mysockaddr *l3);
+size_t add_source_addr(struct dns_header *header, size_t plen, char *limit, union mysockaddr *source);
+int check_source(struct dns_header *header, size_t plen, unsigned char *pseudoheader, union mysockaddr *peer);
 int add_resource_record(struct dns_header *header, char *limit, int *truncp,
 			int nameoffset, unsigned char **pp, unsigned long ttl, 
 			int *offset, unsigned short type, unsigned short class, char *format, ...);
@@ -968,10 +997,13 @@
 int extract_name(struct dns_header *header, size_t plen, unsigned char **pp, 
 		 char *name, int isExtract, int extrabytes);
 int in_arpa_name_2_addr(char *namein, struct all_addr *addrp);
+int private_net(struct in_addr addr, int ban_localhost);
 
 /* auth.c */
 #ifdef HAVE_AUTH
-size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t now, union mysockaddr *peer_addr);
+size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, 
+		   time_t now, union mysockaddr *peer_addr, int local_query);
+int in_zone(struct auth_zone *zone, char *name, char **cut);
 #endif
 
 /* dnssec.c */
@@ -1051,6 +1083,7 @@
 int enumerate_interfaces(int reset);
 void create_wildcard_listeners(void);
 void create_bound_listeners(int die);
+void warn_bound_listeners(void);
 int is_dad_listeners(void);
 int iface_check(int family, struct all_addr *addr, char *name, int *auth_dns);
 int loopback_exception(int fd, int family, struct all_addr *addr, char *name);
@@ -1077,12 +1110,6 @@
 int address_allocate(struct dhcp_context *context,
 		     struct in_addr *addrp, unsigned char *hwaddr, int hw_len,
 		     struct dhcp_netid *netids, time_t now);
-int config_has_mac(struct dhcp_config *config, unsigned char *hwaddr, int len, int type);
-struct dhcp_config *find_config(struct dhcp_config *configs,
-				struct dhcp_context *context,
-				unsigned char *clid, int clid_len,
-				unsigned char *hwaddr, int hw_len, 
-				int hw_type, char *hostname);
 void dhcp_read_ethers(void);
 struct dhcp_config *config_find_by_address(struct dhcp_config *configs, struct in_addr addr);
 char *host_from_dns(struct in_addr addr);
@@ -1104,6 +1131,7 @@
 u64 lease_find_max_addr6(struct dhcp_context *context);
 void lease_ping_reply(struct in6_addr *sender, unsigned char *packet, char *interface);
 void lease_update_slaac(time_t now);
+void lease_set_iaid(struct dhcp_lease *lease, int iaid);
 #endif
 void lease_set_hwaddr(struct dhcp_lease *lease, unsigned char *hwaddr,
 		      unsigned char *clid, int hw_len, int hw_type, int clid_len, time_t now, int force);
@@ -1215,20 +1243,21 @@
 				    struct in6_addr *taddr,
 				    struct dhcp_netid *netids,
 				    int plain_range);
-struct dhcp_config *find_config6(struct dhcp_config *configs,
-				 struct dhcp_context *context,
-				 unsigned char *duid, int duid_len,
-				 char *hostname);
 struct dhcp_config *config_find_by_address6(struct dhcp_config *configs, struct in6_addr *net, 
 					    int prefix, u64 addr);
 void make_duid(time_t now);
 void dhcp_construct_contexts(time_t now);
+void get_client_mac(struct in6_addr *client, int iface, unsigned char *mac, 
+		    unsigned int *maclenp, unsigned int *mactypep);
 #endif
-
+  
 /* rfc3315.c */
 #ifdef HAVE_DHCP6
 unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *iface_name,  
-			   struct in6_addr *fallback, size_t sz, int is_multicast, time_t now);
+			   struct in6_addr *fallback, size_t sz, struct in6_addr *client_addr, time_t now);
+void relay_upstream6(struct dhcp_relay *relay, ssize_t sz, struct in6_addr *peer_address, u32 scope_id);
+
+unsigned short relay_reply6( struct sockaddr_in6 *peer, ssize_t sz, char *arrival_interface);
 #endif
 
 /* dhcp-common.c */
@@ -1248,13 +1277,21 @@
 int lookup_dhcp_len(int prot, int val);
 char *option_string(int prot, unsigned int opt, unsigned char *val, 
 		    int opt_len, char *buf, int buf_len);
+struct dhcp_config *find_config(struct dhcp_config *configs,
+				struct dhcp_context *context,
+				unsigned char *clid, int clid_len,
+				unsigned char *hwaddr, int hw_len, 
+				int hw_type, char *hostname);
+int config_has_mac(struct dhcp_config *config, unsigned char *hwaddr, int len, int type);
 #ifdef HAVE_LINUX_NETWORK
-void bindtodevice(int fd);
+char *whichdevice(void);
+void bindtodevice(char *device, int fd);
 #endif
 #  ifdef HAVE_DHCP6
 void display_opts6(void);
 #  endif
 void log_context(int family, struct dhcp_context *context);
+void log_relay(int family, struct dhcp_relay *relay);
 #endif
 
 /* outpacket.c */
diff --git a/src/forward.c b/src/forward.c
index f93cc54..1c66acf 100644
--- a/src/forward.c
+++ b/src/forward.c
@@ -284,6 +284,7 @@
 	  forward->fd = udpfd;
 	  forward->crc = crc;
 	  forward->forwardall = 0;
+	  forward->flags = 0;
 	  if (norebind)
 	    forward->flags |= FREC_NOREBIND;
 	  if (header->hb4 & HB4_CD)
@@ -331,6 +332,16 @@
       if (option_bool(OPT_ADD_MAC))
 	plen = add_mac(header, plen, ((char *) header) + PACKETSZ, &forward->source);
       
+      if (option_bool(OPT_CLIENT_SUBNET))
+	{
+	  size_t new = add_source_addr(header, plen, ((char *) header) + PACKETSZ, &forward->source); 
+	  if (new != plen)
+	    {
+	      plen = new;
+	      forward->flags |= FREC_HAS_SUBNET;
+	    }
+	}
+
       while (1)
 	{ 
 	  /* only send to servers dealing with our domain.
@@ -435,8 +446,8 @@
   return 0;
 }
 
-static size_t process_reply(struct dns_header *header, time_t now, 
-			    struct server *server, size_t n, int check_rebind, int checking_disabled)
+static size_t process_reply(struct dns_header *header, time_t now, struct server *server, size_t n, int check_rebind, 
+			    int checking_disabled, int check_subnet, union mysockaddr *query_source)
 {
   unsigned char *pheader, *sizep;
   char **sets = 0;
@@ -465,15 +476,25 @@
      than we allow, trim it so that we don't get overlarge
      requests for the client. We can't do this for signed packets. */
 
-  if ((pheader = find_pseudoheader(header, n, &plen, &sizep, &is_sign)) && !is_sign)
+  if ((pheader = find_pseudoheader(header, n, &plen, &sizep, &is_sign)))
     {
-      unsigned short udpsz;
-      unsigned char *psave = sizep;
+      if (!is_sign)
+	{
+	  unsigned short udpsz;
+	  unsigned char *psave = sizep;
+	  
+	  GETSHORT(udpsz, sizep);
+	  if (udpsz > daemon->edns_pktsz)
+	    PUTSHORT(daemon->edns_pktsz, psave);
+	}
       
-      GETSHORT(udpsz, sizep);
-      if (udpsz > daemon->edns_pktsz)
-	PUTSHORT(daemon->edns_pktsz, psave);
+      if (check_subnet && !check_source(header, plen, pheader, query_source))
+	{
+	  my_syslog(LOG_WARNING, _("discarding DNS reply: subnet option mismatch"));
+	  return 0;
+	}
     }
+      
 
   /* RFC 4035 sect 4.6 para 3 */
   if (!is_sign && !option_bool(OPT_DNSSEC_PROXY))
@@ -637,7 +658,8 @@
       if (!option_bool(OPT_NO_REBIND))
 	check_rebind = 0;
       
-      if ((nn = process_reply(header, now, server, (size_t)n, check_rebind, forward->flags & FREC_CHECKING_DISABLED)))
+      if ((nn = process_reply(header, now, server, (size_t)n, check_rebind, forward->flags & FREC_CHECKING_DISABLED,
+			      forward->flags & FREC_HAS_SUBNET, &forward->source)))
 	{
 	  header->id = htons(forward->orig_id);
 	  header->hb4 |= HB4_RA; /* recursion if available */
@@ -659,7 +681,7 @@
   size_t m;
   ssize_t n;
   int if_index = 0;
-  int auth_dns = 0;
+  int local_auth = 0, auth_dns = 0;
   struct iovec iov[1];
   struct msghdr msg;
   struct cmsghdr *cmptr;
@@ -831,6 +853,9 @@
   if (extract_request(header, (size_t)n, daemon->namebuff, &type))
     {
       char types[20];
+#ifdef HAVE_AUTH
+      struct auth_zone *zone;
+#endif
 
       querystr(auth_dns ? "auth" : "query", types, type);
 
@@ -842,15 +867,30 @@
 	log_query(F_QUERY | F_IPV6 | F_FORWARD, daemon->namebuff, 
 		  (struct all_addr *)&source_addr.in6.sin6_addr, types);
 #endif
-    }
 
 #ifdef HAVE_AUTH
+      /* find queries for zones we're authoritative for, and answer them directly */
+      if (!auth_dns)
+	for (zone = daemon->auth_zones; zone; zone = zone->next)
+	  if (in_zone(zone, daemon->namebuff, NULL))
+	    {
+	      auth_dns = 1;
+	      local_auth = 1;
+	      break;
+	    }
+#endif
+    }
+  
+#ifdef HAVE_AUTH
   if (auth_dns)
     {
-      m = answer_auth(header, ((char *) header) + PACKETSZ, (size_t)n, now, &source_addr);
+      m = answer_auth(header, ((char *) header) + PACKETSZ, (size_t)n, now, &source_addr, local_auth);
       if (m >= 1)
-	send_from(listen->fd, option_bool(OPT_NOWILD) || option_bool(OPT_CLEVERBIND),
-		  (char *)header, m, &source_addr, &dst_addr, if_index);
+	{
+	  send_from(listen->fd, option_bool(OPT_NOWILD) || option_bool(OPT_CLEVERBIND),
+		    (char *)header, m, &source_addr, &dst_addr, if_index);
+	  daemon->auth_answer++;
+	}
     }
   else
 #endif
@@ -881,7 +921,8 @@
 {
   size_t size = 0;
   int norebind = 0;
-  int checking_disabled;
+  int local_auth = 0;
+  int checking_disabled, check_subnet;
   size_t m;
   unsigned short qtype;
   unsigned int gotname;
@@ -911,6 +952,8 @@
       if (size < (int)sizeof(struct dns_header))
 	continue;
       
+      check_subnet = 0;
+
       /* save state of "cd" flag in query */
       checking_disabled = header->hb4 & HB4_CD;
        
@@ -920,7 +963,9 @@
       if ((gotname = extract_request(header, (unsigned int)size, daemon->namebuff, &qtype)))
 	{
 	  char types[20];
-	  
+#ifdef HAVE_AUTH
+	  struct auth_zone *zone;
+#endif
 	  querystr(auth_dns ? "auth" : "query", types, qtype);
 	  
 	  if (peer_addr.sa.sa_family == AF_INET) 
@@ -931,6 +976,18 @@
 	    log_query(F_QUERY | F_IPV6 | F_FORWARD, daemon->namebuff, 
 		      (struct all_addr *)&peer_addr.in6.sin6_addr, types);
 #endif
+	  
+#ifdef HAVE_AUTH
+	  /* find queries for zones we're authoritative for, and answer them directly */
+	  if (!auth_dns)
+	    for (zone = daemon->auth_zones; zone; zone = zone->next)
+	      if (in_zone(zone, daemon->namebuff, NULL))
+		{
+		  auth_dns = 1;
+		  local_auth = 1;
+		  break;
+		}
+#endif
 	}
       
       if (local_addr->sa.sa_family == AF_INET)
@@ -940,7 +997,7 @@
       
 #ifdef HAVE_AUTH
       if (auth_dns)
-	m = answer_auth(header, ((char *) header) + 65536, (size_t)size, now, &peer_addr);
+	m = answer_auth(header, ((char *) header) + 65536, (size_t)size, now, &peer_addr, local_auth);
       else
 #endif
 	{
@@ -960,7 +1017,17 @@
 	      
 	      if (option_bool(OPT_ADD_MAC))
 		size = add_mac(header, size, ((char *) header) + 65536, &peer_addr);
-	      
+	      	
+	      if (option_bool(OPT_CLIENT_SUBNET))
+		{
+		  size_t new = add_source_addr(header, size, ((char *) header) + 65536, &peer_addr);
+		  if (size != new)
+		    {
+		      size = new;
+		      check_subnet = 1;
+		    }
+		}
+
 	      if (gotname)
 		flags = search_servers(now, &addrp, gotname, daemon->namebuff, &type, &domain, &norebind);
 	      
@@ -1061,7 +1128,8 @@
 			 sending replies containing questions and bogus answers. */
 		      if (crc == questions_crc(header, (unsigned int)m, daemon->namebuff))
 			m = process_reply(header, now, last_server, (unsigned int)m, 
-					  option_bool(OPT_NO_REBIND) && !norebind, checking_disabled);
+					  option_bool(OPT_NO_REBIND) && !norebind, checking_disabled,
+					  check_subnet, &peer_addr);
 		      
 		      break;
 		    }
diff --git a/src/helper.c b/src/helper.c
index ab691b7..24c2afd 100644
--- a/src/helper.c
+++ b/src/helper.c
@@ -61,9 +61,17 @@
 #else
   time_t expires;
 #endif
+#ifdef HAVE_TFTP
+  off_t file_len;
+#endif
+#ifdef HAVE_IPV6
+  struct in6_addr addr6;
+#endif
+#ifdef HAVE_DHCP6
+  int iaid, vendorclass_count;
+#endif
   unsigned char hwaddr[DHCP_CHADDR_MAX];
   char interface[IF_NAMESIZE];
-
 };
 
 static struct script_data *buf = NULL;
@@ -215,20 +223,17 @@
 	continue;
 
       	
-      if (!is6)
+      /* stringify MAC into dhcp_buff */
+      p = daemon->dhcp_buff;
+      if (data.hwaddr_type != ARPHRD_ETHER || data.hwaddr_len == 0) 
+	p += sprintf(p, "%.2x-", data.hwaddr_type);
+      for (i = 0; (i < data.hwaddr_len) && (i < DHCP_CHADDR_MAX); i++)
 	{
-	  /* stringify MAC into dhcp_buff */
-	  p = daemon->dhcp_buff;
-	  if (data.hwaddr_type != ARPHRD_ETHER || data.hwaddr_len == 0) 
-	    p += sprintf(p, "%.2x-", data.hwaddr_type);
-	  for (i = 0; (i < data.hwaddr_len) && (i < DHCP_CHADDR_MAX); i++)
-	    {
-	      p += sprintf(p, "%.2x", data.hwaddr[i]);
-	      if (i != data.hwaddr_len - 1)
-		p += sprintf(p, ":");
-	    }
+	  p += sprintf(p, "%.2x", data.hwaddr[i]);
+	  if (i != data.hwaddr_len - 1)
+	    p += sprintf(p, ":");
 	}
-       
+      
       /* supplied data may just exceed normal buffer (unlikely) */
       if ((data.hostname_len + data.ed_len + data.clid_len) > MAXDNAME && 
 	  !(alloc_buff = buf = malloc(data.hostname_len + data.ed_len + data.clid_len)))
@@ -239,32 +244,25 @@
 	continue;
 
       /* CLID into packet */
-      if (!is6)
-	for (p = daemon->packet, i = 0; i < data.clid_len; i++)
-	  {
-	    p += sprintf(p, "%.2x", buf[i]);
-	    if (i != data.clid_len - 1) 
+      for (p = daemon->packet, i = 0; i < data.clid_len; i++)
+	{
+	  p += sprintf(p, "%.2x", buf[i]);
+	  if (i != data.clid_len - 1) 
 	      p += sprintf(p, ":");
-	  }
+	}
+
 #ifdef HAVE_DHCP6
-      else
+      if (is6)
 	{
 	  /* or IAID and server DUID for IPv6 */
-	  sprintf(daemon->dhcp_buff3, "%s%u", data.flags & LEASE_TA ? "T" : "", data.hwaddr_type);	
-	  for (p = daemon->packet, i = 0; i < daemon->duid_len; i++)
+	  sprintf(daemon->dhcp_buff3, "%s%u", data.flags & LEASE_TA ? "T" : "", data.iaid);	
+	  for (p = daemon->dhcp_packet.iov_base, i = 0; i < daemon->duid_len; i++)
 	    {
 	      p += sprintf(p, "%.2x", daemon->duid[i]);
 	      if (i != daemon->duid_len - 1) 
 		p += sprintf(p, ":");
 	    }
 
-	  /* duid not MAC for IPv6 */
-	  for (p = daemon->dhcp_buff, i = 0; i < data.clid_len; i++)
-	    {
-	      p += sprintf(p, "%.2x", buf[i]);
-	      if (i != data.clid_len - 1) 
-		p += sprintf(p, ":");
-	    } 
 	}
 #endif
 
@@ -293,13 +291,15 @@
 	inet_ntop(AF_INET, &data.addr, daemon->addrbuff, ADDRSTRLEN);
 #ifdef HAVE_DHCP6
       else
-	inet_ntop(AF_INET6, &data.hwaddr, daemon->addrbuff, ADDRSTRLEN);
+	inet_ntop(AF_INET6, &data.addr6, daemon->addrbuff, ADDRSTRLEN);
 #endif
 
+#ifdef HAVE_TFTP
       /* file length */
       if (data.action == ACTION_TFTP)
-	sprintf(daemon->dhcp_buff, "%u", data.hwaddr_len);
-      
+	sprintf(is6 ? daemon->packet : daemon->dhcp_buff, "%lu", (unsigned long)data.file_len);
+#endif
+
 #ifdef HAVE_LUASCRIPT
       if (daemon->luascript)
 	{
@@ -316,7 +316,7 @@
 		  lua_setfield(lua, -2, "destination_address");
 		  lua_pushstring(lua, hostname);
 		  lua_setfield(lua, -2, "file_name"); 
-		  lua_pushstring(lua, daemon->dhcp_buff);
+		  lua_pushstring(lua, is6 ? daemon->packet : daemon->dhcp_buff);
 		  lua_setfield(lua, -2, "file_size");
 		  lua_call(lua, 2, 0);	/* pass 2 values, expect 0 */
 		}
@@ -329,9 +329,9 @@
 	      
 	      if (is6)
 		{
-		  lua_pushstring(lua, daemon->dhcp_buff);
-		  lua_setfield(lua, -2, "client_duid");
 		  lua_pushstring(lua, daemon->packet);
+		  lua_setfield(lua, -2, "client_duid");
+		  lua_pushstring(lua, daemon->dhcp_packet.iov_base);
 		  lua_setfield(lua, -2, "server_duid");
 		  lua_pushstring(lua, daemon->dhcp_buff3);
 		  lua_setfield(lua, -2, "iaid");
@@ -375,12 +375,16 @@
 	      if (!is6)
 		buf = grab_extradata_lua(buf, end, "vendor_class");
 #ifdef HAVE_DHCP6
-	      else
-		for (i = 0; i < data.hwaddr_len; i++)
-		  {
-		    sprintf(daemon->dhcp_buff2, "vendor_class%i", i);
-		    buf = grab_extradata_lua(buf, end, daemon->dhcp_buff2);
-		  }
+	      else  if (data.vendorclass_count != 0)
+		{
+		  sprintf(daemon->dhcp_buff2, "vendor_class_id");
+		  buf = grab_extradata_lua(buf, end, daemon->dhcp_buff2);
+		  for (i = 0; i < data.vendorclass_count - 1; i++)
+		    {
+		      sprintf(daemon->dhcp_buff2, "vendor_class%i", i);
+		      buf = grab_extradata_lua(buf, end, daemon->dhcp_buff2);
+		    }
+		}
 #endif
 	      
 	      buf = grab_extradata_lua(buf, end, "supplied_hostname");
@@ -423,7 +427,7 @@
 		  lua_setfield(lua, -2, "old_hostname");
 		}
 	      
-	      if (!is6)
+	      if (!is6 || data.hwaddr_len != 0)
 		{
 		  lua_pushstring(lua, daemon->dhcp_buff);
 		  lua_setfield(lua, -2, "mac_address");
@@ -476,17 +480,14 @@
       
       if (data.action != ACTION_TFTP)
 	{
-	  if (is6)
-	    {
-	      my_setenv("DNSMASQ_IAID", daemon->dhcp_buff3, &err);
-	      my_setenv("DNSMASQ_SERVER_DUID", daemon->packet, &err);
-	    }
+#ifdef HAVE_DHCP6
+	  my_setenv("DNSMASQ_IAID", is6 ? daemon->dhcp_buff3 : NULL, &err);
+	  my_setenv("DNSMASQ_SERVER_DUID", is6 ? daemon->dhcp_packet.iov_base : NULL, &err); 
+	  my_setenv("DNSMASQ_MAC", is6 && data.hwaddr_len != 0 ? daemon->dhcp_buff : NULL, &err);
+#endif
 	  
-	  if (!is6 && data.clid_len != 0)
-	    my_setenv("DNSMASQ_CLIENT_ID", daemon->packet, &err);
-	  
-	  if (strlen(data.interface) != 0)
-	    my_setenv("DNSMASQ_INTERFACE", data.interface, &err);
+	  my_setenv("DNSMASQ_CLIENT_ID", !is6 && data.clid_len != 0 ? daemon->packet : NULL, &err);
+	  my_setenv("DNSMASQ_INTERFACE", strlen(data.interface) != 0 ? data.interface : NULL, &err);
 	  
 #ifdef HAVE_BROKEN_RTC
 	  sprintf(daemon->dhcp_buff2, "%u", data.length);
@@ -496,8 +497,7 @@
 	  my_setenv("DNSMASQ_LEASE_EXPIRES", daemon->dhcp_buff2, &err); 
 #endif
 	  
-	  if (domain)
-	    my_setenv("DNSMASQ_DOMAIN", domain, &err);
+	  my_setenv("DNSMASQ_DOMAIN", domain, &err);
 	  
 	  end = extradata + data.ed_len;
 	  buf = extradata;
@@ -507,10 +507,10 @@
 #ifdef HAVE_DHCP6
 	  else
 	    {
-	      if (data.hwaddr_len != 0)
+	      if (data.vendorclass_count != 0)
 		{
 		  buf = grab_extradata(buf, end, "DNSMASQ_VENDOR_CLASS_ID", &err);
-		  for (i = 0; i < data.hwaddr_len - 1; i++)
+		  for (i = 0; i < data.vendorclass_count - 1; i++)
 		    {
 		      sprintf(daemon->dhcp_buff2, "DNSMASQ_VENDOR_CLASS%i", i);
 		      buf = grab_extradata(buf, end, daemon->dhcp_buff2, &err);
@@ -535,8 +535,8 @@
 
 	  if (is6)
 	    buf = grab_extradata(buf, end, "DNSMASQ_RELAY_ADDRESS", &err);
-	  else if (data.giaddr.s_addr != 0)
-	    my_setenv("DNSMASQ_RELAY_ADDRESS", inet_ntoa(data.giaddr), &err); 
+	  else 
+	    my_setenv("DNSMASQ_RELAY_ADDRESS", data.giaddr.s_addr != 0 ? inet_ntoa(data.giaddr) : NULL, &err); 
 	  
 	  for (i = 0; buf; i++)
 	    {
@@ -544,22 +544,16 @@
 	      buf = grab_extradata(buf, end, daemon->dhcp_buff2, &err);
 	    }
 	  
-	  if (data.action != ACTION_DEL && data.remaining_time != 0)
-	    {
-	      sprintf(daemon->dhcp_buff2, "%u", data.remaining_time);
-	      my_setenv("DNSMASQ_TIME_REMAINING", daemon->dhcp_buff2, &err);
-	    }
+	  sprintf(daemon->dhcp_buff2, "%u", data.remaining_time);
+	  my_setenv("DNSMASQ_TIME_REMAINING", data.action != ACTION_DEL && data.remaining_time != 0 ? daemon->dhcp_buff2 : NULL, &err);
 	  
-	  if (data.action == ACTION_OLD_HOSTNAME && hostname)
-	    {
-	      my_setenv("DNSMASQ_OLD_HOSTNAME", hostname, &err);
-	      hostname = NULL;
-	    }
+	  my_setenv("DNSMASQ_OLD_HOSTNAME", data.action == ACTION_OLD_HOSTNAME ? hostname : NULL, &err);
+	  if (data.action == ACTION_OLD_HOSTNAME)
+	    hostname = NULL;
 	}
 
-      if (option_bool(OPT_LOG_OPTS))
-	my_setenv("DNSMASQ_LOG_DHCP", "1", &err);
-	 
+      my_setenv("DNSMASQ_LOG_DHCP", option_bool(OPT_LOG_OPTS) ? "1" : NULL, &err);
+      
       /* we need to have the event_fd around if exec fails */
       if ((i = fcntl(event_fd, F_GETFD)) != -1)
 	fcntl(event_fd, F_SETFD, i | FD_CLOEXEC);
@@ -570,7 +564,8 @@
 	{
 	  execl(daemon->lease_change_command, 
 		p ? p+1 : daemon->lease_change_command,
-		action_str, daemon->dhcp_buff, daemon->addrbuff, hostname, (char*)NULL);
+		action_str, is6 ? daemon->packet : daemon->dhcp_buff, 
+		daemon->addrbuff, hostname, (char*)NULL);
 	  err = errno;
 	}
       /* failed, send event so the main process logs the problem */
@@ -581,31 +576,44 @@
 
 static void my_setenv(const char *name, const char *value, int *error)
 {
-  if (*error == 0 && setenv(name, value, 1) != 0)
-    *error = errno;
+  if (*error == 0)
+    {
+      if (!value)
+	unsetenv(name);
+      else if (setenv(name, value, 1) != 0)
+	*error = errno;
+    }
 }
  
 static unsigned char *grab_extradata(unsigned char *buf, unsigned char *end,  char *env, int *err)
 {
-  unsigned char *next;
+  unsigned char *next = NULL;
+  char *val = NULL;
 
-  if (!buf || (buf == end))
-    return NULL;
-
-  for (next = buf; *next != 0; next++)
-    if (next == end)
-      return NULL;
-  
-  if (next != buf)
+  if (buf && (buf != end))
     {
-      char *p;
-      /* No "=" in value */
-      if ((p = strchr((char *)buf, '=')))
-	*p = 0;
-      my_setenv(env, (char *)buf, err);
-    }
+      for (next = buf; ; next++)
+	if (next == end)
+	  {
+	    next = NULL;
+	    break;
+	  }
+	else if (*next == 0)
+	  break;
 
-  return next + 1;
+      if (next && (next != buf))
+	{
+	  char *p;
+	  /* No "=" in value */
+	  if ((p = strchr((char *)buf, '=')))
+	    *p = 0;
+	  val = (char *)buf;
+	}
+    }
+  
+  my_setenv(env, val, err);
+   
+  return next ? next + 1 : NULL;
 }
 
 #ifdef HAVE_LUASCRIPT
@@ -656,8 +664,6 @@
   unsigned int hostname_len = 0, clid_len = 0, ed_len = 0;
   int fd = daemon->dhcpfd;
 #ifdef HAVE_DHCP6 
-  int is6 = !!(lease->flags & (LEASE_TA | LEASE_NA));
-
   if (!daemon->dhcp)
     fd = daemon->dhcp6fd;
 #endif
@@ -678,11 +684,11 @@
   buf->action = action;
   buf->flags = lease->flags;
 #ifdef HAVE_DHCP6 
-  if (is6)
-    buf->hwaddr_len = lease->vendorclass_count;
-  else
+  buf->vendorclass_count = lease->vendorclass_count;
+  buf->addr6 = lease->addr6;
+  buf->iaid = lease->iaid;
 #endif
-    buf->hwaddr_len = lease->hwaddr_len;
+  buf->hwaddr_len = lease->hwaddr_len;
   buf->hwaddr_type = lease->hwaddr_type;
   buf->clid_len = clid_len;
   buf->ed_len = ed_len;
@@ -739,13 +745,13 @@
 
   buf->action = ACTION_TFTP;
   buf->hostname_len = filename_len;
-  buf->hwaddr_len = file_len;
+  buf->file_len = file_len;
 
   if ((buf->flags = peer->sa.sa_family) == AF_INET)
     buf->addr = peer->in.sin_addr;
 #ifdef HAVE_IPV6
   else
-    memcpy(buf->hwaddr, &peer->in6.sin6_addr, IN6ADDRSZ);
+    buf->addr6 = peer->in6.sin6_addr;
 #endif
 
   memcpy((unsigned char *)(buf+1), filename, filename_len);
diff --git a/src/lease.c b/src/lease.c
index b85cf57..4b4d10a 100644
--- a/src/lease.c
+++ b/src/lease.c
@@ -108,6 +108,7 @@
 	  {
 	    char *s = daemon->dhcp_buff2;
 	    int lease_type = LEASE_NA;
+	    int iaid;
 
 	    if (s[0] == 'T')
 	      {
@@ -115,12 +116,12 @@
 		s++;
 	      }
 	    
-	    hw_type = strtoul(s, NULL, 10);
+	    iaid = strtoul(s, NULL, 10);
 	    
 	    if ((lease = lease6_allocate(&addr.addr.addr6, lease_type)))
 	      {
-		lease_set_hwaddr(lease, NULL, (unsigned char *)daemon->packet, 0, hw_type, clid_len, now, 0);
-		
+		lease_set_hwaddr(lease, NULL, (unsigned char *)daemon->packet, 0, 0, clid_len, now, 0);
+		lease_set_iaid(lease, iaid);
 		if (strcmp(daemon->dhcp_buff, "*") !=  0)
 		  lease_set_hostname(lease, daemon->dhcp_buff, 0, get_domain6((struct in6_addr *)lease->hwaddr), NULL);
 	      }
@@ -187,10 +188,12 @@
   char *name;
   
   for (lease = leases; lease; lease = lease->next)
-    if ((config = find_config(daemon->dhcp_conf, NULL, lease->clid, lease->clid_len, 
-			      lease->hwaddr, lease->hwaddr_len, lease->hwaddr_type, NULL)) && 
-	(config->flags & CONFIG_NAME) &&
-	(!(config->flags & CONFIG_ADDR) || config->addr.s_addr == lease->addr.s_addr))
+    if (lease->flags & (LEASE_TA | LEASE_NA))
+      continue;
+    else if ((config = find_config(daemon->dhcp_conf, NULL, lease->clid, lease->clid_len, 
+				   lease->hwaddr, lease->hwaddr_len, lease->hwaddr_type, NULL)) && 
+	     (config->flags & CONFIG_NAME) &&
+	     (!(config->flags & CONFIG_ADDR) || config->addr.s_addr == lease->addr.s_addr))
       lease_set_hostname(lease, config->hostname, 1, get_domain(lease->addr), NULL);
     else if ((name = host_from_dns(lease->addr)))
       lease_set_hostname(lease, name, 1, get_domain(lease->addr), NULL); /* updates auth flag only */
@@ -277,10 +280,10 @@
 	      ourprintf(&err, "%lu ", (unsigned long)lease->expires);
 #endif
     
-	      inet_ntop(AF_INET6, lease->hwaddr, daemon->addrbuff, ADDRSTRLEN);
+	      inet_ntop(AF_INET6, &lease->addr6, daemon->addrbuff, ADDRSTRLEN);
 	 
 	      ourprintf(&err, "%s%u %s ", (lease->flags & LEASE_TA) ? "T" : "",
-			lease->hwaddr_type, daemon->addrbuff);
+			lease->iaid, daemon->addrbuff);
 	      ourprintf(&err, "%s ", lease->hostname ? lease->hostname : "*");
 	      
 	      if (lease->clid && lease->clid_len != 0)
@@ -376,7 +379,7 @@
 
   for (lease = leases; lease; lease = lease->next)
     if ((lease->flags & (LEASE_TA | LEASE_NA)))
-      if (is_same_net6(local, (struct in6_addr *)&lease->hwaddr, prefix))
+      if (is_same_net6(local, &lease->addr6, prefix))
 	lease_set_interface(lease, if_index, *((time_t *)vparam));
   
   return 1;
@@ -459,17 +462,24 @@
 		      cache_add_dhcp_entry(lease->hostname, AF_INET6, (struct all_addr *)&slaac->addr, lease->expires);
 		  }
 	    }
-#endif
 	  
 	  if (lease->fqdn)
 	    cache_add_dhcp_entry(lease->fqdn, prot, 
-				 prot == AF_INET ? (struct all_addr *)&lease->addr : (struct all_addr *)&lease->hwaddr,
+				 prot == AF_INET ? (struct all_addr *)&lease->addr : (struct all_addr *)&lease->addr6,
 				 lease->expires);
 	     
 	  if (!option_bool(OPT_DHCP_FQDN) && lease->hostname)
 	    cache_add_dhcp_entry(lease->hostname, prot, 
-				 prot == AF_INET ? (struct all_addr *)&lease->addr : (struct all_addr *)&lease->hwaddr, 
+				 prot == AF_INET ? (struct all_addr *)&lease->addr : (struct all_addr *)&lease->addr6, 
 				 lease->expires);
+       
+#else
+	  if (lease->fqdn)
+	    cache_add_dhcp_entry(lease->fqdn, prot, (struct all_addr *)&lease->addr, lease->expires);
+	  
+	  if (!option_bool(OPT_DHCP_FQDN) && lease->hostname)
+	    cache_add_dhcp_entry(lease->hostname, prot, (struct all_addr *)&lease->addr, lease->expires);
+#endif
 	}
       
       dns_dirty = 0;
@@ -564,10 +574,10 @@
   
   for (lease = leases; lease; lease = lease->next)
     {
-      if (!(lease->flags & lease_type) || lease->hwaddr_type != iaid)
+      if (!(lease->flags & lease_type) || lease->iaid != iaid)
 	continue;
 
-      if (memcmp(lease->hwaddr, addr, IN6ADDRSZ) != 0)
+      if (!IN6_ARE_ADDR_EQUAL(&lease->addr6, addr))
 	continue;
       
       if ((clid_len != lease->clid_len ||
@@ -604,7 +614,7 @@
       if (lease->flags & LEASE_USED)
 	continue;
 
-      if (!(lease->flags & lease_type) || lease->hwaddr_type != iaid)
+      if (!(lease->flags & lease_type) || lease->iaid != iaid)
 	continue;
  
       if ((clid_len != lease->clid_len ||
@@ -626,8 +636,8 @@
       if (!(lease->flags & (LEASE_TA | LEASE_NA)))
 	continue;
       
-      if (is_same_net6((struct in6_addr *)lease->hwaddr, net, prefix) &&
-	  (prefix == 128 || addr6part((struct in6_addr *)lease->hwaddr) == addr))
+      if (is_same_net6(&lease->addr6, net, prefix) &&
+	  (prefix == 128 || addr6part(&lease->addr6) == addr))
 	return lease;
     }
   
@@ -646,11 +656,11 @@
 	if (!(lease->flags & (LEASE_TA | LEASE_NA)))
 	  continue;
 
-	if (is_same_net6((struct in6_addr *)lease->hwaddr, &context->start6, 64) &&
-	    addr6part((struct in6_addr *)lease->hwaddr) > addr6part(&context->start6) &&
-	    addr6part((struct in6_addr *)lease->hwaddr) <= addr6part(&context->end6) &&
-	    addr6part((struct in6_addr *)lease->hwaddr) > addr)
-	  addr = addr6part((struct in6_addr *)lease->hwaddr);
+	if (is_same_net6(&lease->addr6, &context->start6, 64) &&
+	    addr6part(&lease->addr6) > addr6part(&context->start6) &&
+	    addr6part(&lease->addr6) <= addr6part(&context->end6) &&
+	    addr6part(&lease->addr6) > addr)
+	  addr = addr6part(&lease->addr6);
       }
   
   return addr;
@@ -692,6 +702,7 @@
 #ifdef HAVE_BROKEN_RTC
   lease->length = 0xffffffff; /* illegal value */
 #endif
+  lease->hwaddr_len = 256; /* illegal value */
   lease->next = leases;
   leases = lease;
   
@@ -705,11 +716,8 @@
 {
   struct dhcp_lease *lease = lease_allocate();
   if (lease)
-    {
-      lease->addr = addr;
-      lease->hwaddr_len = 256; /* illegal value */
-    }
-
+    lease->addr = addr;
+  
   return lease;
 }
 
@@ -720,8 +728,9 @@
 
   if (lease)
     {
-      memcpy(lease->hwaddr, addrp, sizeof(*addrp)) ;
+      lease->addr6 = *addrp;
       lease->flags |= lease_type;
+      lease->iaid = 0;
     }
 
   return lease;
@@ -758,6 +767,17 @@
 #endif
 } 
 
+#ifdef HAVE_DHCP6
+void lease_set_iaid(struct dhcp_lease *lease, int iaid)
+{
+  if (lease->iaid != iaid)
+    {
+      lease->iaid = iaid;
+      lease->flags |= LEASE_CHANGED;
+    }
+}
+#endif
+
 void lease_set_hwaddr(struct dhcp_lease *lease, unsigned char *hwaddr,
 		      unsigned char *clid, int hw_len, int hw_type, int clid_len, 
 		      time_t now, int force)
@@ -768,6 +788,7 @@
 #endif
 
   (void)force;
+  (void)now;
 
   if (hw_len != lease->hwaddr_len ||
       hw_type != lease->hwaddr_type || 
@@ -779,9 +800,6 @@
       lease->hwaddr_type = hw_type;
       lease->flags |= LEASE_CHANGED;
       file_dirty = 1; /* run script on change */
-#ifdef HAVE_DHCP6
-      change = 1;
-#endif
     }
 
   /* only update clid when one is available, stops packets
@@ -939,6 +957,8 @@
 
 void lease_set_interface(struct dhcp_lease *lease, int interface, time_t now)
 {
+  (void)now;
+
   if (lease->last_interface == interface)
     return;
 
@@ -967,6 +987,8 @@
 {
   struct dhcp_lease *lease;
 
+  (void)now;
+
 #ifdef HAVE_DBUS
   /* If we're going to be sending DBus signals, but the connection is not yet up,
      delay everything until it is. */
diff --git a/src/netlink.c b/src/netlink.c
index 43cd21e..d093988 100644
--- a/src/netlink.c
+++ b/src/netlink.c
@@ -402,18 +402,20 @@
   	
 static void nl_newaddress(time_t now)
 {
-  if (option_bool(OPT_CLEVERBIND) || daemon->doing_dhcp6 || daemon->doing_ra)
+  (void)now;
+
+  if (option_bool(OPT_CLEVERBIND) || daemon->doing_dhcp6 || daemon->relay6 || daemon->doing_ra)
     enumerate_interfaces(0);
   
   if (option_bool(OPT_CLEVERBIND))
     create_bound_listeners(0);
   
 #ifdef HAVE_DHCP6
+  if (daemon->doing_dhcp6 || daemon->relay6 || daemon->doing_ra)
+    join_multicast(0);
+  
   if (daemon->doing_dhcp6 || daemon->doing_ra)
-    {
-      join_multicast(0);
-      dhcp_construct_contexts(now);
-    }
+    dhcp_construct_contexts(now);
   
   if (daemon->doing_dhcp6)
     lease_find_interfaces(now);
diff --git a/src/network.c b/src/network.c
index 7a5d49e..de5d9f2 100644
--- a/src/network.c
+++ b/src/network.c
@@ -16,6 +16,10 @@
 
 #include "dnsmasq.h"
 
+#ifndef IN6_IS_ADDR_ULA
+#define IN6_IS_ADDR_ULA(a) ((((__const uint32_t *) (a))[0] & htonl (0xfe00000)) == htonl (0xfc000000))
+#endif
+
 #ifdef HAVE_LINUX_NETWORK
 
 int indextoname(int fd, int index, char *name)
@@ -115,7 +119,9 @@
   int ret = 1, match_addr = 0;
 
   /* Note: have to check all and not bail out early, so that we set the
-     "used" flags. */
+     "used" flags.
+
+     May be called with family == AF_LOCALto check interface by name only. */
   
   if (auth)
     *auth = 0;
@@ -241,7 +247,7 @@
   int tftp_ok = !!option_bool(OPT_TFTP);
   int dhcp_ok = 1;
   int auth_dns = 0;
-#ifdef HAVE_DHCP
+#if defined(HAVE_DHCP) || defined(HAVE_TFTP)
   struct iname *tmp;
 #endif
 
@@ -360,6 +366,7 @@
 #endif
  
   
+#ifdef HAVE_TFTP
   if (daemon->tftp_interfaces)
     {
       /* dedicated tftp interface list */
@@ -368,6 +375,7 @@
 	if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name))
 	  tftp_ok = 1;
     }
+#endif
   
   /* add to list */
   if ((iface = whine_malloc(sizeof(struct irec))))
@@ -379,7 +387,7 @@
       iface->dns_auth = auth_dns;
       iface->mtu = mtu;
       iface->dad = dad;
-      iface->done = iface->multicast_done = 0;
+      iface->done = iface->multicast_done = iface->warned = 0;
       iface->index = if_index;
       if ((iface->name = whine_malloc(strlen(ifr.ifr_name)+1)))
 	{
@@ -443,7 +451,7 @@
 int enumerate_interfaces(int reset)
 {
   static struct addrlist *spare = NULL;
-  static int done = 0;
+  static int done = 0, active = 0;
   struct iface_param param;
   int errsave, ret = 1;
   struct addrlist *addr, *tmp;
@@ -451,18 +459,21 @@
   
   /* Do this max once per select cycle  - also inhibits netlink socket use
    in TCP child processes. */
-  
+
   if (reset)
     {
       done = 0;
       return 1;
     }
 
-  if (done)
+  if (done || active)
     return 1;
 
   done = 1;
 
+  /* protect against recusive calls from iface_enumerate(); */
+  active = 1;
+
   if ((param.fd = socket(PF_INET, SOCK_DGRAM, 0)) == -1)
     return 0;
  
@@ -504,7 +515,8 @@
   errno = errsave;
 
   spare = param.spare;
-    
+  active = 0;
+
   return ret;
 }
 
@@ -701,6 +713,8 @@
   struct listener *l = NULL;
   int fd = -1, tcpfd = -1, tftpfd = -1;
 
+  (void)do_tftp;
+
   if (daemon->port != 0)
     {
       fd = make_sock(addr, SOCK_DGRAM, dienow);
@@ -814,6 +828,59 @@
       }
 }
 
+/* In --bind-interfaces, the only access control is the addresses we're listening on. 
+   There's nothing to avoid a query to the address of an internal interface arriving via
+   an external interface where we don't want to accept queries, except that in the usual 
+   case the addresses of internal interfaces are RFC1918. When bind-interfaces in use, 
+   and we listen on an address that looks like it's probably globally routeable, shout.
+
+   The fix is to use --bind-dynamic, which actually checks the arrival interface too.
+   Tough if your platform doesn't support this.
+*/
+
+void warn_bound_listeners(void)
+{
+  struct irec *iface; 	
+  int advice = 0;
+
+  for (iface = daemon->interfaces; iface; iface = iface->next)
+    if (option_bool(OPT_NOWILD) && !iface->dns_auth)
+      {
+	int warn = 0;
+	if (iface->addr.sa.sa_family == AF_INET)
+	  {
+	    if (!private_net(iface->addr.in.sin_addr, 1))
+	      {
+		inet_ntop(AF_INET, &iface->addr.in.sin_addr, daemon->addrbuff, ADDRSTRLEN);
+		warn = 1;
+	      }
+	  }
+#ifdef HAVE_IPV6
+	else
+	  {
+	    if (!IN6_IS_ADDR_LINKLOCAL(&iface->addr.in6.sin6_addr) &&
+		!IN6_IS_ADDR_SITELOCAL(&iface->addr.in6.sin6_addr) &&
+		!IN6_IS_ADDR_ULA(&iface->addr.in6.sin6_addr) &&
+		!IN6_IS_ADDR_LOOPBACK(&iface->addr.in6.sin6_addr))
+	      {
+		inet_ntop(AF_INET6, &iface->addr.in6.sin6_addr, daemon->addrbuff, ADDRSTRLEN);
+		warn = 1;
+	      }
+	  }
+#endif
+	if (warn)
+	  {
+	    iface->warned = advice = 1;
+	    my_syslog(LOG_WARNING, 
+		      _("LOUD WARNING: listening on %s may accept requests via interfaces other than %s. "),
+		      daemon->addrbuff, iface->name);
+	  }
+      }
+  
+  if (advice)
+    my_syslog(LOG_WARNING, _("LOUD WARNING: use --bind-dynamic rather than --bind-interfaces to avoid DNS amplification attacks via these interface(s).")); 
+}
+
 int is_dad_listeners(void)
 {
   struct irec *iface;
@@ -851,7 +918,7 @@
 	    
 	    inet_pton(AF_INET6, ALL_RELAY_AGENTS_AND_SERVERS, &mreq.ipv6mr_multiaddr);
 	    
-	    if (daemon->doing_dhcp6 &&
+	    if ((daemon->doing_dhcp6 || daemon->relay6) &&
 		setsockopt(daemon->dhcp6fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq, sizeof(mreq)) == -1)
 	      err = 1;
 	    
diff --git a/src/option.c b/src/option.c
index bcc72f6..defe014 100644
--- a/src/option.c
+++ b/src/option.c
@@ -64,76 +64,81 @@
 #define OPTSTRING "951yZDNLERKzowefnbvhdkqr:m:p:c:l:s:i:t:u:g:a:x:S:C:A:T:H:Q:I:B:F:G:O:M:X:V:U:j:P:J:W:Y:2:4:6:7:8:0:3:"
 
 /* options which don't have a one-char version */
-#define LOPT_RELOAD    256
-#define LOPT_NO_NAMES  257
-#define LOPT_TFTP      258
-#define LOPT_SECURE    259
-#define LOPT_PREFIX    260
-#define LOPT_PTR       261
-#define LOPT_BRIDGE    262
-#define LOPT_TFTP_MAX  263
-#define LOPT_FORCE     264
-#define LOPT_NOBLOCK   265
-#define LOPT_LOG_OPTS  266
-#define LOPT_MAX_LOGS  267
-#define LOPT_CIRCUIT   268
-#define LOPT_REMOTE    269
-#define LOPT_SUBSCR    270
-#define LOPT_INTNAME   271
-#define LOPT_BANK      272
-#define LOPT_DHCP_HOST 273
-#define LOPT_APREF     274
-#define LOPT_OVERRIDE  275
-#define LOPT_TFTPPORTS 276
-#define LOPT_REBIND    277
-#define LOPT_NOLAST    278
-#define LOPT_OPTS      279
-#define LOPT_DHCP_OPTS 280
-#define LOPT_MATCH     281
-#define LOPT_BROADCAST 282
-#define LOPT_NEGTTL    283
-#define LOPT_ALTPORT   284
-#define LOPT_SCRIPTUSR 285
-#define LOPT_LOCAL     286
-#define LOPT_NAPTR     287
-#define LOPT_MINPORT   288
-#define LOPT_DHCP_FQDN 289
-#define LOPT_CNAME     290
-#define LOPT_PXE_PROMT 291
-#define LOPT_PXE_SERV  292
-#define LOPT_TEST      293
-#define LOPT_TAG_IF    294
-#define LOPT_PROXY     295
-#define LOPT_GEN_NAMES 296
-#define LOPT_MAXTTL    297
-#define LOPT_NO_REBIND 298
-#define LOPT_LOC_REBND 299
-#define LOPT_ADD_MAC   300
-#define LOPT_SEC_PROXY 301
-#define LOPT_INCR_ADDR 302
-#define LOPT_CONNTRACK 303
-#define LOPT_FQDN      304
-#define LOPT_LUASCRIPT 305
-#define LOPT_RA        306
-#define LOPT_DUID      307
-#define LOPT_HOST_REC  308
-#define LOPT_TFTP_LC   309
-#define LOPT_RR        310
-#define LOPT_CLVERBIND 311
-#define LOPT_MAXCTTL   312
-#define LOPT_AUTHZONE  313
-#define LOPT_AUTHSERV  314
-#define LOPT_AUTHTTL   315
-#define LOPT_AUTHSOA   316
-#define LOPT_AUTHSFS   317
-#define LOPT_AUTHPEER  318
-#define LOPT_IPSET     319
-#define LOPT_SYNTH     320
-#define LOPT_SEC_VALID 321
+#define LOPT_RELOAD       256
+#define LOPT_NO_NAMES     257
+#define LOPT_TFTP         258
+#define LOPT_SECURE       259
+#define LOPT_PREFIX       260
+#define LOPT_PTR          261
+#define LOPT_BRIDGE       262
+#define LOPT_TFTP_MAX     263
+#define LOPT_FORCE        264
+#define LOPT_NOBLOCK      265
+#define LOPT_LOG_OPTS     266
+#define LOPT_MAX_LOGS     267
+#define LOPT_CIRCUIT      268
+#define LOPT_REMOTE       269
+#define LOPT_SUBSCR       270
+#define LOPT_INTNAME      271
+#define LOPT_BANK         272
+#define LOPT_DHCP_HOST    273
+#define LOPT_APREF        274
+#define LOPT_OVERRIDE     275
+#define LOPT_TFTPPORTS    276
+#define LOPT_REBIND       277
+#define LOPT_NOLAST       278
+#define LOPT_OPTS         279
+#define LOPT_DHCP_OPTS    280
+#define LOPT_MATCH        281
+#define LOPT_BROADCAST    282
+#define LOPT_NEGTTL       283
+#define LOPT_ALTPORT      284
+#define LOPT_SCRIPTUSR    285
+#define LOPT_LOCAL        286
+#define LOPT_NAPTR        287
+#define LOPT_MINPORT      288
+#define LOPT_DHCP_FQDN    289
+#define LOPT_CNAME        290
+#define LOPT_PXE_PROMT    291
+#define LOPT_PXE_SERV     292
+#define LOPT_TEST         293
+#define LOPT_TAG_IF       294
+#define LOPT_PROXY        295
+#define LOPT_GEN_NAMES    296
+#define LOPT_MAXTTL       297
+#define LOPT_NO_REBIND    298
+#define LOPT_LOC_REBND    299
+#define LOPT_ADD_MAC      300
+#define LOPT_DNSSEC       301
+#define LOPT_INCR_ADDR    302
+#define LOPT_CONNTRACK    303
+#define LOPT_FQDN         304
+#define LOPT_LUASCRIPT    305
+#define LOPT_RA           306
+#define LOPT_DUID         307
+#define LOPT_HOST_REC     308
+#define LOPT_TFTP_LC      309
+#define LOPT_RR           310
+#define LOPT_CLVERBIND    311
+#define LOPT_MAXCTTL      312
+#define LOPT_AUTHZONE     313
+#define LOPT_AUTHSERV     314
+#define LOPT_AUTHTTL      315
+#define LOPT_AUTHSOA      316
+#define LOPT_AUTHSFS      317
+#define LOPT_AUTHPEER     318
+#define LOPT_IPSET        319
+#define LOPT_SYNTH        320
 #ifdef OPTION6_PREFIX_CLASS 
-#define LOPT_PREF_CLSS 322
+#define LOPT_PREF_CLSS    321
 #endif
-#define LOPT_FAST_RA   322
+#define LOPT_RELAY        323
+#define LOPT_RA_PARAM     324
+#define LOPT_ADD_SBNET    325
+#define LOPT_QUIET_DHCP   326
+#define LOPT_QUIET_DHCP6  327
+#define LOPT_QUIET_RA     328
+#define LOPT_SEC_VALID    329
 
 
 #ifdef HAVE_GETOPT_LONG
@@ -252,7 +257,8 @@
     { "dhcp-generate-names", 2, 0, LOPT_GEN_NAMES },
     { "rebind-localhost-ok", 0, 0,  LOPT_LOC_REBND },
     { "add-mac", 0, 0, LOPT_ADD_MAC },
-    { "proxy-dnssec", 0, 0, LOPT_SEC_PROXY },
+    { "add-subnet", 2, 0, LOPT_ADD_SBNET },
+    { "proxy-dnssec", 0, 0, LOPT_DNSSEC },
     { "dhcp-sequential-ip", 0, 0,  LOPT_INCR_ADDR },
     { "conntrack", 0, 0, LOPT_CONNTRACK },
     { "dhcp-client-update", 0, 0, LOPT_FQDN },
@@ -273,7 +279,11 @@
 #ifdef OPTION6_PREFIX_CLASS 
     { "dhcp-prefix-class", 1, 0, LOPT_PREF_CLSS },
 #endif
-    { "force-fast-ra", 0, 0, LOPT_FAST_RA },
+    { "dhcp-relay", 1, 0, LOPT_RELAY },
+    { "ra-param", 1, 0, LOPT_RA_PARAM },
+    { "quiet-dhcp", 0, 0, LOPT_QUIET_DHCP },
+    { "quiet-dhcp6", 0, 0, LOPT_QUIET_DHCP6 },
+    { "quiet-ra", 0, 0, LOPT_QUIET_RA },
     { NULL, 0, 0, 0 }
   };
 
@@ -392,17 +402,18 @@
   { LOPT_DHCP_FQDN, OPT_DHCP_FQDN, NULL, gettext_noop("Use only fully qualified domain names for DHCP clients."), NULL },
   { LOPT_GEN_NAMES, ARG_DUP, "[=tag:<tag>]", gettext_noop("Generate hostnames based on MAC address for nameless clients."), NULL},
   { LOPT_PROXY, ARG_DUP, "[=<ipaddr>]...", gettext_noop("Use these DHCP relays as full proxies."), NULL },
+  { LOPT_RELAY, ARG_DUP, "<local-addr>,<server>[,<interface>]", gettext_noop("Relay DHCP requests to a remote server"), NULL},
   { LOPT_CNAME, ARG_DUP, "<alias>,<target>", gettext_noop("Specify alias name for LOCAL DNS name."), NULL },
   { LOPT_PXE_PROMT, ARG_DUP, "<prompt>,[<timeout>]", gettext_noop("Prompt to send to PXE clients."), NULL },
   { LOPT_PXE_SERV, ARG_DUP, "<service>", gettext_noop("Boot service for PXE menu."), NULL },
   { LOPT_TEST, 0, NULL, gettext_noop("Check configuration syntax."), NULL },
   { LOPT_ADD_MAC, OPT_ADD_MAC, NULL, gettext_noop("Add requestor's MAC address to forwarded DNS queries."), NULL },
-  { LOPT_SEC_PROXY, OPT_DNSSEC_PROXY, NULL, gettext_noop("Proxy DNSSEC validation results from upstream nameservers."), NULL },
+  { LOPT_ADD_SBNET, ARG_ONE, "<v4 pref>[,<v6 pref>]", gettext_noop("Add requestor's IP subnet to forwarded DNS queries."), NULL },
+  { LOPT_DNSSEC, OPT_DNSSEC_PROXY, NULL, gettext_noop("Proxy DNSSEC validation results from upstream nameservers."), NULL },
   { LOPT_INCR_ADDR, OPT_CONSEC_ADDR, NULL, gettext_noop("Attempt to allocate sequential IP addresses to DHCP clients."), NULL },
   { LOPT_CONNTRACK, OPT_CONNTRACK, NULL, gettext_noop("Copy connection-track mark from queries to upstream connections."), NULL },
   { LOPT_FQDN, OPT_FQDN_UPDATE, NULL, gettext_noop("Allow DHCP clients to do their own DDNS updates."), NULL },
   { LOPT_RA, OPT_RA, NULL, gettext_noop("Send router-advertisements for interfaces doing DHCPv6"), NULL },
-  { LOPT_FAST_RA, OPT_FAST_RA, NULL, gettext_noop("Always send frequent router-advertisements"), NULL },
   { LOPT_DUID, ARG_ONE, "<enterprise>,<duid>", gettext_noop("Specify DUID_EN-type DHCPv6 server DUID"), NULL },
   { LOPT_HOST_REC, ARG_DUP, "<name>,<address>", gettext_noop("Specify host (A/AAAA and PTR) records"), NULL },
   { LOPT_RR, ARG_DUP, "<name>,<RR-number>,[<data>]", gettext_noop("Specify arbitrary DNS resource record"), NULL },
@@ -414,13 +425,17 @@
   { LOPT_AUTHSFS, ARG_DUP, "<NS>[,<NS>...]", gettext_noop("Secondary authoritative nameservers for forward domains"), NULL },
   { LOPT_AUTHPEER, ARG_DUP, "<ipaddr>[,<ipaddr>...]", gettext_noop("Peers which are allowed to do zone transfer"), NULL },
   { LOPT_IPSET, ARG_DUP, "/<domain>/<ipset>[,<ipset>...]", gettext_noop("Specify ipsets to which matching domains should be added"), NULL },
-  { LOPT_SYNTH, ARG_DUP, "<domain>,<range>,[<prefix>]", gettext_noop("Specify a domain and address range for sythesised names"), NULL },
+  { LOPT_SYNTH, ARG_DUP, "<domain>,<range>,[<prefix>]", gettext_noop("Specify a domain and address range for synthesised names"), NULL },
 #ifdef HAVE_DNSSEC
   { LOPT_SEC_VALID, OPT_DNSSEC_VALIDATE, NULL, gettext_noop("Activate DNSSEC validation"), NULL },
 #endif
 #ifdef OPTION6_PREFIX_CLASS 
   { LOPT_PREF_CLSS, ARG_DUP, "set:tag,<class>", gettext_noop("Specify DHCPv6 prefix class"), NULL },
 #endif
+  { LOPT_RA_PARAM, ARG_DUP, "<interface>,[high,|low,]<interval>[,<lifetime>]", gettext_noop("Set priority, resend-interval and router-lifetime"), NULL },
+  { LOPT_QUIET_DHCP, OPT_QUIET_DHCP, NULL, gettext_noop("Do not log routine DHCP."), NULL },
+  { LOPT_QUIET_DHCP6, OPT_QUIET_DHCP6, NULL, gettext_noop("Do not log routine DHCPv6."), NULL },
+  { LOPT_QUIET_RA, OPT_QUIET_RA, NULL, gettext_noop("Do not log RA."), NULL },
   { 0, 0, NULL, NULL, NULL }
 }; 
 
@@ -1427,6 +1442,17 @@
 	break;
       }
 
+    case LOPT_ADD_SBNET: /* --add-subnet */
+      set_option_bool(OPT_CLIENT_SUBNET);
+      if (arg)
+	{
+	  comma = split(arg);
+	  if (!atoi_check(arg, &daemon->addr4_netmask) || 
+	      (comma && !atoi_check(comma, &daemon->addr6_netmask)))
+	     ret_err(gen_err);
+	}
+      break;
+
     case '1': /* --enable-dbus */
       set_option_bool(OPT_DBUS);
       if (arg)
@@ -1574,6 +1600,8 @@
 	break;
       }
       
+
+#ifdef HAVE_AUTH
     case LOPT_AUTHSERV: /* --auth-server */
       if (!(comma = split(arg)))
 	ret_err(gen_err);
@@ -1696,6 +1724,7 @@
 	}
 
       break;
+#endif
 
     case 's':         /* --domain */
     case LOPT_SYNTH:  /* --synth-domain */
@@ -1836,9 +1865,12 @@
 		      else
 			ret_err(gen_err);
 		    }
-		  else  
+		  else
 		    {
+		      char *prefstr;
 		      arg = split(comma);
+		      prefstr = split(arg);
+
 		      if (inet_pton(AF_INET, comma, &new->start))
 			{
 			  new->is6 = 0;
@@ -1859,6 +1891,13 @@
 #endif
 		      else 
 			ret_err(gen_err);
+
+		      if (option != 's' && prefstr)
+			{
+			  if (!(new->prefix = canonicalise_opt(prefstr)) ||
+			      strlen(new->prefix) > MAXLABEL - INET_ADDRSTRLEN)
+			    ret_err(_("bad prefix"));
+			}
 		    }
 
 		  new->domain = d;
@@ -2340,7 +2379,9 @@
 		    struct dhcp_netid *tt = opt_malloc(sizeof (struct dhcp_netid));
 		    tt->net = opt_string_alloc(arg+4);
 		    tt->next = new->filter;
-		    new->filter = tt;
+		    /* ignore empty tag */
+		    if (tt->net)
+		      new->filter = tt;
 		  }
 		else
 		  {
@@ -2405,6 +2446,7 @@
 #ifdef HAVE_DHCP6
 	else if (inet_pton(AF_INET6, a[0], &new->start6))
 	  {
+	    new->flags |= CONTEXT_V6; 
 	    new->prefix = 64; /* default */
 	    new->end6 = new->start6;
 	    new->next = daemon->dhcp6;
@@ -3184,9 +3226,59 @@
 	arg = comma;
       }
       break;
+
+    case LOPT_RELAY: /* --dhcp-relay */
+      {
+	struct dhcp_relay *new = opt_malloc(sizeof(struct dhcp_relay));
+	comma = split(arg);
+	new->interface = opt_string_alloc(split(comma));
+	new->iface_index = 0;
+	if (inet_pton(AF_INET, arg, &new->local) && inet_pton(AF_INET, comma, &new->server))
+	  {
+	    new->next = daemon->relay4;
+	    daemon->relay4 = new;
+	  }
+#ifdef HAVE_DHCP6
+	else if (inet_pton(AF_INET6, arg, &new->local) && inet_pton(AF_INET6, comma, &new->server))
+	  {
+	    new->next = daemon->relay6;
+	    daemon->relay6 = new;
+	  }
+#endif
+	else
+	  ret_err(_("Bad dhcp-relay"));
+	
+	break;
+      }
+
 #endif
       
 #ifdef HAVE_DHCP6
+    case LOPT_RA_PARAM: /* --ra-param */
+      if ((comma = split(arg)))
+	{
+	  struct ra_interface *new = opt_malloc(sizeof(struct ra_interface));
+	  new->lifetime = -1;
+	  new->prio = 0;
+	  new->name = opt_string_alloc(arg);
+	  if (strcasestr(comma, "high") == comma || strcasestr(comma, "low") == comma)
+	    {
+	      if (*comma == 'l' || *comma == 'L')
+		new->prio = 0x18;
+	      else
+		new->prio = 0x08;
+	      comma = split(comma);
+	    }
+	   arg = split(comma);
+	   if (!atoi_check(comma, &new->interval) || 
+	      (arg && !atoi_check(arg, &new->lifetime)))
+	    ret_err(_("bad RA-params"));
+	  
+	  new->next = daemon->ra_interfaces;
+	  daemon->ra_interfaces = new;
+	}
+      break;
+      
     case LOPT_DUID: /* --dhcp-duid */
       if (!(comma = split(arg)) || !atoi_check(arg, (int *)&daemon->duid_enterprise))
 	ret_err(_("bad DUID"));
diff --git a/src/outpacket.c b/src/outpacket.c
index 7f11cd3..9d64c01 100644
--- a/src/outpacket.c
+++ b/src/outpacket.c
@@ -70,9 +70,9 @@
 {
   void *p;
 
-  if ((p = expand(len)))
+  if ((p = expand(len)) && data)
     memcpy(p, data, len);   
-
+  
   return p;
 }
   
diff --git a/src/radv-protocol.h b/src/radv-protocol.h
index 1f0f88a..8d5b153 100644
--- a/src/radv-protocol.h
+++ b/src/radv-protocol.h
@@ -33,6 +33,13 @@
   u32 retrans_time;
 };
 
+struct neigh_packet {
+  u8 type, code;
+  u16 checksum;
+  u16 reserved;
+  struct in6_addr target;
+};
+
 struct prefix_opt {
   u8 type, len, prefix_len, flags;
   u32 valid_lifetime, preferred_lifetime, reserved;
diff --git a/src/radv.c b/src/radv.c
index 32dc60d..88395db 100644
--- a/src/radv.c
+++ b/src/radv.c
@@ -32,11 +32,12 @@
   char *if_name;
   struct dhcp_netid *tags;
   struct in6_addr link_local, link_global;
-  unsigned int pref_time;
+  unsigned int pref_time, adv_interval;
 };
 
 struct search_param {
   time_t now; int iface;
+  char name[IF_NAMESIZE+1];
 };
 
 static void send_ra(time_t now, int iface, char *iface_name, struct in6_addr *dest);
@@ -47,7 +48,11 @@
 			int scope, int if_index, int flags, 
 			int prefered, int valid, void *vparam);
 static int add_lla(int index, unsigned int type, char *mac, size_t maclen, void *parm);
-static void new_timeout(struct dhcp_context *context, time_t now);
+static void new_timeout(struct dhcp_context *context, char *iface_name, time_t now);
+static unsigned int calc_lifetime(struct ra_interface *ra);
+static unsigned int calc_interval(struct ra_interface *ra);
+static unsigned int calc_prio(struct ra_interface *ra);
+static struct ra_interface *find_iface_param(char *iface);
 
 static int hop_limit;
 
@@ -70,10 +75,15 @@
     if ((context->flags & CONTEXT_RA_NAME))
       break;
   
+  /* Need ICMP6 socket for transmission for DHCPv6 even when not doing RA. */
+
   ICMP6_FILTER_SETBLOCKALL(&filter);
-  ICMP6_FILTER_SETPASS(ND_ROUTER_SOLICIT, &filter);
-  if (context)
-    ICMP6_FILTER_SETPASS(ICMP6_ECHO_REPLY, &filter);
+  if (daemon->doing_ra)
+    {
+      ICMP6_FILTER_SETPASS(ND_ROUTER_SOLICIT, &filter);
+      if (context)
+	ICMP6_FILTER_SETPASS(ICMP6_ECHO_REPLY, &filter);
+    }
   
   if ((fd = socket(PF_INET6, SOCK_RAW, IPPROTO_ICMPV6)) == -1 ||
       getsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &hop_limit, &len) ||
@@ -89,7 +99,8 @@
   
    daemon->icmp6fd = fd;
    
-   ra_start_unsolicted(now, NULL);
+   if (daemon->doing_ra)
+     ra_start_unsolicted(now, NULL);
 }
 
 void ra_start_unsolicted(time_t now, struct dhcp_context *context)
@@ -178,7 +189,8 @@
 	  mac = daemon->namebuff;
 	}
          
-      my_syslog(MS_DHCP | LOG_INFO, "RTR-SOLICIT(%s) %s", interface, mac);
+      if (!option_bool(OPT_QUIET_RA))
+	my_syslog(MS_DHCP | LOG_INFO, "RTR-SOLICIT(%s) %s", interface, mac);
       /* source address may not be valid in solicit request. */
       send_ra(now, if_index, interface, !IN6_IS_ADDR_UNSPECIFIED(&from.sin6_addr) ? &from.sin6_addr : NULL);
     }
@@ -192,19 +204,20 @@
   struct dhcp_context *context, *tmp,  **up;
   struct dhcp_netid iface_id;
   struct dhcp_opt *opt_cfg;
+  struct ra_interface *ra_param = find_iface_param(iface_name);
   int done_dns = 0;
 #ifdef HAVE_LINUX_NETWORK
   FILE *f;
 #endif
-
+ 
   save_counter(0);
   ra = expand(sizeof(struct ra_packet));
   
   ra->type = ND_ROUTER_ADVERT;
   ra->code = 0;
   ra->hop_limit = hop_limit;
-  ra->flags = 0x00;
-  ra->lifetime = htons(RA_INTERVAL * 3); /* AdvDefaultLifetime * 3 */
+  ra->flags = calc_prio(ra_param);
+  ra->lifetime = htons(calc_lifetime(ra_param));
   ra->reachable_time = 0;
   ra->retrans_time = 0;
 
@@ -216,6 +229,7 @@
   parm.first = 1;
   parm.now = now;
   parm.pref_time = 0;
+  parm.adv_interval = calc_interval(ra_param);
   
   /* set tag with name == interface */
   iface_id.net = iface_name;
@@ -275,7 +289,8 @@
 		  opt->prefix = local;
 		  
 		  inet_ntop(AF_INET6, &local, daemon->addrbuff, ADDRSTRLEN);
-		  my_syslog(MS_DHCP | LOG_INFO, "RTR-ADVERT(%s) %s old prefix", iface_name, daemon->addrbuff); 		    
+		  if (!option_bool(OPT_QUIET_RA))
+		    my_syslog(MS_DHCP | LOG_INFO, "RTR-ADVERT(%s) %s old prefix", iface_name, daemon->addrbuff); 		    
 		}
 	   
 	      up = &context->next;
@@ -321,15 +336,15 @@
       if (opt_cfg->opt == OPTION6_DNS_SERVER)
         {
 	  struct in6_addr *a = (struct in6_addr *)opt_cfg->val;
-
+	  
 	  done_dns = 1;
-          if (opt_cfg->len == 0)
-            continue;
+          if (opt_cfg->len == 0 || (IN6_IS_ADDR_UNSPECIFIED(a) && parm.pref_time != 0))
+	    continue;
 	  
 	  put_opt6_char(ICMP6_OPT_RDNSS);
 	  put_opt6_char((opt_cfg->len/8) + 1);
 	  put_opt6_short(0);
-	  put_opt6_long(RA_INTERVAL * 2); /* lifetime - twice RA retransmit */
+	  put_opt6_long(parm.pref_time);
 	  /* zero means "self" */
 	  for (i = 0; i < opt_cfg->len; i += IN6ADDRSZ, a++)
 	    if (IN6_IS_ADDR_UNSPECIFIED(a))
@@ -345,7 +360,7 @@
 	  put_opt6_char(ICMP6_OPT_DNSSL);
 	  put_opt6_char(len + 1);
 	  put_opt6_short(0);
-	  put_opt6_long(RA_INTERVAL * 2); /* lifetime - twice RA retransmit */
+	  put_opt6_long(parm.pref_time); 
 	  put_opt6(opt_cfg->val, opt_cfg->len);
 	  
 	  /* pad */
@@ -354,14 +369,14 @@
 	}
     }
 	
-  if (daemon->port == NAMESERVER_PORT && !done_dns)
+  if (daemon->port == NAMESERVER_PORT && !done_dns && parm.pref_time != 0)
     {
       /* default == us, as long as we are supplying DNS service. */
       put_opt6_char(ICMP6_OPT_RDNSS);
       put_opt6_char(3);
       put_opt6_short(0);
-      put_opt6_long(RA_INTERVAL * 2); /* lifetime - twice RA retransmit */
-      put_opt6(&parm.link_global, IN6ADDRSZ);
+      put_opt6_long(parm.pref_time); 
+      put_opt6(&parm.link_local, IN6ADDRSZ);
     }
 
   /* set managed bits unless we're providing only RA on this link */
@@ -385,10 +400,13 @@
 	addr.sin6_scope_id = iface;
     }
   else
-    inet_pton(AF_INET6, ALL_NODES, &addr.sin6_addr); 
+    {
+      inet_pton(AF_INET6, ALL_NODES, &addr.sin6_addr); 
+      setsockopt(daemon->icmp6fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, &iface, sizeof(iface));
+    }
   
-  send_from(daemon->icmp6fd, 0, daemon->outpacket.iov_base, save_counter(0),
-	    (union mysockaddr *)&addr, (struct all_addr *)&parm.link_local, iface); 
+  while (sendto(daemon->icmp6fd, daemon->outpacket.iov_base, save_counter(0), 0, 
+		(struct sockaddr *)&addr, sizeof(addr)) == -1 && retry_send());
   
 }
 
@@ -446,8 +464,8 @@
 		if (time > context->lease_time)
 		  {
 		    time = context->lease_time;
-		    if (time < ((unsigned int)(3 * RA_INTERVAL)))
-		      time = 3 * RA_INTERVAL;
+		    if (time < ((unsigned int)(3 * param->adv_interval)))
+		      time = 3 * param->adv_interval;
 		  }
 
 		if (context->flags & CONTEXT_DEPRECATE)
@@ -520,7 +538,8 @@
 		  opt->prefix = *local;
 		  
 		  inet_ntop(AF_INET6, local, daemon->addrbuff, ADDRSTRLEN);
-		  my_syslog(MS_DHCP | LOG_INFO, "RTR-ADVERT(%s) %s", param->if_name, daemon->addrbuff); 		    
+		  if (!option_bool(OPT_QUIET_RA))
+		    my_syslog(MS_DHCP | LOG_INFO, "RTR-ADVERT(%s) %s", param->if_name, daemon->addrbuff); 		    
 		}
 
 	    }
@@ -555,8 +574,7 @@
   struct search_param param;
   struct dhcp_context *context;
   time_t next_event;
-  char interface[IF_NAMESIZE+1];
-  
+    
   param.now = now;
   param.iface = 0;
 
@@ -577,13 +595,15 @@
       if (!context)
 	break;
       
-      if ((context->flags & CONTEXT_OLD) && context->if_index != 0)
+      if ((context->flags & CONTEXT_OLD) && 
+	  context->if_index != 0 && 
+	  indextoname(daemon->icmp6fd, param.iface, param.name))
 	{
 	  /* A context for an old address. We'll not find the interface by 
-	     looking for addresses, but we know it anyway, as long as we
-	     sent at least one RA whilst the address was current. */
+	     looking for addresses, but we know it anyway, since the context is
+	     constructed */
 	  param.iface = context->if_index;
-	  new_timeout(context, now);
+	  new_timeout(context, param.name, now);
 	}
       else if (iface_enumerate(AF_INET6, &param, iface_search))
 	/* There's a context overdue, but we can't find an interface
@@ -594,15 +614,14 @@
 	context->ra_time = 0;
       
       if (param.iface != 0 &&
-	  indextoname(daemon->icmp6fd, param.iface, interface) &&
-	  iface_check(AF_LOCAL, NULL, interface, NULL))
+	  iface_check(AF_LOCAL, NULL, param.name, NULL))
 	{
 	  struct iname *tmp;
 	  for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next)
-	    if (tmp->name && wildcard_match(tmp->name, interface))
+	    if (tmp->name && wildcard_match(tmp->name, param.name))
 	      break;
 	  if (!tmp)
-	    send_ra(now, param.iface, interface, NULL); 
+	    send_ra(now, param.iface, param.name, NULL); 
 	}
     }      
   return next_event;
@@ -634,7 +653,14 @@
 	if (!(flags & IFACE_TENTATIVE))
 	  param->iface = if_index;
 	
-	new_timeout(context, param->now);
+	/* should never fail */
+	if (!indextoname(daemon->icmp6fd, if_index, param->name))
+	  {
+	    param->iface = 0;
+	    return 0;
+	  }
+	
+	new_timeout(context, param->name, param->now);
 	
 	/* zero timers for other contexts on the same subnet, so they don't timeout 
 	   independently */
@@ -650,14 +676,70 @@
   return 1; /* keep searching */
 }
  
-static void new_timeout(struct dhcp_context *context, time_t now)
+static void new_timeout(struct dhcp_context *context, char *iface_name, time_t now)
 {
-  if (difftime(now, context->ra_short_period_start) < 60.0 || option_bool(OPT_FAST_RA))
+  if (difftime(now, context->ra_short_period_start) < 60.0)
     /* range 5 - 20 */
     context->ra_time = now + 5 + (rand16()/4400);
   else
-    /* range 3/4 - 1 times RA_INTERVAL */
-    context->ra_time = now + (3 * RA_INTERVAL)/4 + ((RA_INTERVAL * (unsigned int)rand16()) >> 18);
+    {
+      /* range 3/4 - 1 times MaxRtrAdvInterval */
+      unsigned int adv_interval = calc_interval(find_iface_param(iface_name));
+      context->ra_time = now + (3 * adv_interval)/4 + ((adv_interval * (unsigned int)rand16()) >> 18);
+    }
+}
+
+static struct ra_interface *find_iface_param(char *iface)
+{
+  struct ra_interface *ra;
+  
+  for (ra = daemon->ra_interfaces; ra; ra = ra->next)
+    if (wildcard_match(ra->name, iface))
+      return ra;
+
+  return NULL;
+}
+
+static unsigned int calc_interval(struct ra_interface *ra)
+{
+  int interval = 600;
+  
+  if (ra && ra->interval != 0)
+    {
+      interval = ra->interval;
+      if (interval > 1800)
+	interval = 1800;
+      else if (interval < 4)
+	interval = 4;
+    }
+  
+  return (unsigned int)interval;
+}
+
+static unsigned int calc_lifetime(struct ra_interface *ra)
+{
+  int lifetime, interval = (int)calc_interval(ra);
+  
+  if (!ra || ra->lifetime == -1) /* not specified */
+    lifetime = 3 * interval;
+  else
+    {
+      lifetime = ra->lifetime;
+      if (lifetime < interval && lifetime != 0)
+	lifetime = interval;
+      else if (lifetime > 9000)
+	lifetime = 9000;
+    }
+  
+  return (unsigned int)lifetime;
+}
+
+static unsigned int calc_prio(struct ra_interface *ra)
+{
+  if (ra)
+    return ra->prio;
+  
+  return 0;
 }
 
 #endif
diff --git a/src/rfc1035.c b/src/rfc1035.c
index a5a769a..932470f 100644
--- a/src/rfc1035.c
+++ b/src/rfc1035.c
@@ -513,15 +513,81 @@
   size_t plen;
   union mysockaddr *l3;
 };
+ 
+static size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *limit, 
+			       int optno, unsigned char *opt, size_t optlen)
+{ 
+  unsigned char *lenp, *datap, *p;
+  int rdlen;
+  
+  if (ntohs(header->arcount) == 0)
+    {
+      /* We are adding the pseudoheader */
+      if (!(p = skip_questions(header, plen)) ||
+	  !(p = skip_section(p, 
+			     ntohs(header->ancount) + ntohs(header->nscount), 
+			     header, plen)))
+	return plen;
+      *p++ = 0; /* empty name */
+      PUTSHORT(T_OPT, p);
+      PUTSHORT(daemon->edns_pktsz, p); /* max packet length */
+      PUTLONG(0, p);    /* extended RCODE */
+      lenp = p;
+      PUTSHORT(0, p);    /* RDLEN */
+      rdlen = 0;
+      if (((ssize_t)optlen) > (limit - (p + 4)))
+	return plen; /* Too big */
+      header->arcount = htons(1);
+      datap = p;
+    }
+  else
+    {
+      int i, is_sign;
+      unsigned short code, len;
+      
+      if (ntohs(header->arcount) != 1 ||
+	  !(p = find_pseudoheader(header, plen, NULL, NULL, &is_sign)) ||
+	  is_sign ||
+	  (!(p = skip_name(p, header, plen, 10))))
+	return plen;
+      
+      p += 8; /* skip UDP length and RCODE */
+      
+      lenp = p;
+      GETSHORT(rdlen, p);
+      if (!CHECK_LEN(header, p, plen, rdlen))
+	return plen; /* bad packet */
+      datap = p;
+
+      /* check if option already there */
+      for (i = 0; i + 4 < rdlen; i += len + 4)
+	{
+	  GETSHORT(code, p);
+	  GETSHORT(len, p);
+	  if (code == optno)
+	    return plen;
+	  p += len;
+	}
+      
+      if (((ssize_t)optlen) > (limit - (p + 4)))
+	return plen; /* Too big */
+    }
+  
+  PUTSHORT(optno, p);
+  PUTSHORT(optlen, p);
+  memcpy(p, opt, optlen);
+  p += optlen;  
+
+  PUTSHORT(p - datap, lenp);
+  return p - (unsigned char *)header;
+  
+}
 
 static int filter_mac(int family, char *addrp, char *mac, size_t maclen, void *parmv)
 {
   struct macparm *parm = parmv;
   int match = 0;
-  unsigned short rdlen;
-  struct dns_header *header = parm->header;
-  unsigned char *lenp, *datap, *p;
-  
+    
   if (family == parm->l3->sa.sa_family)
     {
       if (family == AF_INET && memcmp (&parm->l3->in.sin_addr, addrp, INADDRSZ) == 0)
@@ -535,72 +601,12 @@
  
   if (!match)
     return 1; /* continue */
-  
-  if (ntohs(header->arcount) == 0)
-    {
-      /* We are adding the pseudoheader */
-      if (!(p = skip_questions(header, parm->plen)) ||
-	  !(p = skip_section(p, 
-			     ntohs(header->ancount) + ntohs(header->nscount), 
-			     header, parm->plen)))
-	return 0;
-      *p++ = 0; /* empty name */
-      PUTSHORT(T_OPT, p);
-      PUTSHORT(PACKETSZ, p); /* max packet length - is 512 suitable default for non-EDNS0 resolvers? */
-      PUTLONG(0, p);    /* extended RCODE */
-      lenp = p;
-      PUTSHORT(0, p);    /* RDLEN */
-      rdlen = 0;
-      if (((ssize_t)maclen) > (parm->limit - (p + 4)))
-	return 0; /* Too big */
-      header->arcount = htons(1);
-      datap = p;
-    }
-  else
-    {
-      int i, is_sign;
-      unsigned short code, len;
-      
-      if (ntohs(header->arcount) != 1 ||
-	  !(p = find_pseudoheader(header, parm->plen, NULL, NULL, &is_sign)) ||
-	  is_sign ||
-	  (!(p = skip_name(p, header, parm->plen, 10))))
-	return 0;
-      
-      p += 8; /* skip UDP length and RCODE */
-      
-      lenp = p;
-      GETSHORT(rdlen, p);
-      if (!CHECK_LEN(header, p, parm->plen, rdlen))
-	return 0; /* bad packet */
-      datap = p;
 
-      /* check if option already there */
-      for (i = 0; i + 4 < rdlen; i += len + 4)
-	{
-	  GETSHORT(code, p);
-	  GETSHORT(len, p);
-	  if (code == EDNS0_OPTION_MAC)
-	    return 0;
-	  p += len;
-	}
-      
-      if (((ssize_t)maclen) > (parm->limit - (p + 4)))
-	return 0; /* Too big */
-    }
-  
-  PUTSHORT(EDNS0_OPTION_MAC, p);
-  PUTSHORT(maclen, p);
-  memcpy(p, mac, maclen);
-  p += maclen;  
-
-  PUTSHORT(p - datap, lenp);
-  parm->plen = p - (unsigned char *)header;
+  parm->plen = add_pseudoheader(parm->header, parm->plen, parm->limit,  EDNS0_OPTION_MAC, (unsigned char *)mac, maclen);
   
   return 0; /* done */
 }	      
      
-
 size_t add_mac(struct dns_header *header, size_t plen, char *limit, union mysockaddr *l3)
 {
   struct macparm parm;
@@ -621,9 +627,104 @@
   return parm.plen; 
 }
 
-    
+struct subnet_opt {
+  u16 family;
+  u8 source_netmask, scope_netmask;
+#ifdef HAVE_IPV6 
+  u8 addr[IN6ADDRSZ];
+#else
+  u8 addr[INADDRSZ];
+#endif
+};
+
+size_t calc_subnet_opt(struct subnet_opt *opt, union mysockaddr *source)
+{
+  /* http://tools.ietf.org/html/draft-vandergaast-edns-client-subnet-02 */
+  
+  int len;
+  void *addrp;
+
+#ifdef HAVE_IPV6
+  if (source->sa.sa_family == AF_INET6)
+    {
+      opt->family = htons(2);
+      opt->source_netmask = daemon->addr6_netmask;
+      addrp = &source->in6.sin6_addr;
+    }
+  else
+#endif
+    {
+      opt->family = htons(1);
+      opt->source_netmask = daemon->addr4_netmask;
+      addrp = &source->in.sin_addr;
+    }
+  
+  opt->scope_netmask = 0;
+  len = 0;
+  
+  if (opt->source_netmask != 0)
+    {
+      len = ((opt->source_netmask - 1) >> 3) + 1;
+      memcpy(opt->addr, addrp, len);
+      if (opt->source_netmask & 7)
+	opt->addr[len-1] &= 0xff << (8 - (opt->source_netmask & 7));
+    }
+
+  return len + 4;
+}
+ 
+size_t add_source_addr(struct dns_header *header, size_t plen, char *limit, union mysockaddr *source)
+{
+  /* http://tools.ietf.org/html/draft-vandergaast-edns-client-subnet-02 */
+  
+  int len;
+  struct subnet_opt opt;
+  
+  len = calc_subnet_opt(&opt, source);
+  return add_pseudoheader(header, plen, (unsigned char *)limit, EDNS0_OPTION_CLIENT_SUBNET, (unsigned char *)&opt, len);
+}
+  
+int check_source(struct dns_header *header, size_t plen, unsigned char *pseudoheader, union mysockaddr *peer)
+{
+  /* Section 9.2, Check that subnet option in reply matches. */
+
+
+ int len, calc_len;
+  struct subnet_opt opt;
+  unsigned char *p;
+  int code, i, rdlen;
+  
+   calc_len = calc_subnet_opt(&opt, peer);
+   
+   if (!(p = skip_name(pseudoheader, header, plen, 10)))
+     return 1;
+   
+   p += 8; /* skip UDP length and RCODE */
+   
+   GETSHORT(rdlen, p);
+   if (!CHECK_LEN(header, p, plen, rdlen))
+     return 1; /* bad packet */
+   
+   /* check if option there */
+   for (i = 0; i + 4 < rdlen; i += len + 4)
+     {
+       GETSHORT(code, p);
+       GETSHORT(len, p);
+       if (code == EDNS0_OPTION_CLIENT_SUBNET)
+	 {
+	   /* make sure this doesn't mismatch. */
+	   opt.scope_netmask = p[3];
+	   if (len != calc_len || memcmp(p, &opt, len) != 0)
+	     return 0;
+	 }
+       p += len;
+     }
+   
+   return 1;
+}
+
 /* is addr in the non-globally-routed IP space? */ 
-static int private_net(struct in_addr addr, int ban_localhost) 
+int private_net(struct in_addr addr, int ban_localhost) 
 {
   in_addr_t ip_addr = ntohl(addr.s_addr);
 
@@ -910,91 +1011,88 @@
 	  else 
 	    continue;
 	    
-	  if (!(flags & F_NXDOMAIN))
+	cname_loop1:
+	  if (!(p1 = skip_questions(header, qlen)))
+	    return 0;
+	  
+	  for (j = ntohs(header->ancount); j != 0; j--) 
 	    {
-	    cname_loop1:
-	      if (!(p1 = skip_questions(header, qlen)))
-		return 0;
+	      if (!(res = extract_name(header, qlen, &p1, name, 0, 10)))
+		return 0; /* bad packet */
 	      
-	      for (j = ntohs(header->ancount); j != 0; j--) 
+	      GETSHORT(aqtype, p1); 
+	      GETSHORT(aqclass, p1);
+	      GETLONG(attl, p1);
+	      if ((daemon->max_ttl != 0) && (attl > daemon->max_ttl) && !is_sign)
 		{
-		  if (!(res = extract_name(header, qlen, &p1, name, 0, 10)))
-		    return 0; /* bad packet */
-		  
-		  GETSHORT(aqtype, p1); 
-		  GETSHORT(aqclass, p1);
-		  GETLONG(attl, p1);
-		  if ((daemon->max_ttl != 0) && (attl > daemon->max_ttl) && !is_sign)
+		  (p1) -= 4;
+		  PUTLONG(daemon->max_ttl, p1);
+		}
+	      GETSHORT(ardlen, p1);
+	      endrr = p1+ardlen;
+	      
+	      if (aqclass == C_IN && res != 2 && (aqtype == T_CNAME || aqtype == qtype))
+		{
+		  if (aqtype == T_CNAME)
 		    {
-		      (p1) -= 4;
-		      PUTLONG(daemon->max_ttl, p1);
-		    }
-		  GETSHORT(ardlen, p1);
-		  endrr = p1+ardlen;
-		  
-		  if (aqclass == C_IN && res != 2 && (aqtype == T_CNAME || aqtype == qtype))
-		    {
-		      if (aqtype == T_CNAME)
+		      if (!cname_count--)
+			return 0; /* looped CNAMES */
+		      newc = cache_insert(name, NULL, now, attl, F_CNAME | F_FORWARD);
+		      if (newc)
 			{
-			  if (!cname_count--)
-			    return 0; /* looped CNAMES */
-			  newc = cache_insert(name, NULL, now, attl, F_CNAME | F_FORWARD);
-			  if (newc)
+			  newc->addr.cname.target.cache = NULL;
+			  if (cpp)
 			    {
-			      newc->addr.cname.cache = NULL;
-			      if (cpp)
-				{
-				  cpp->addr.cname.cache = newc;
-				  cpp->addr.cname.uid = newc->uid;
-				}
-			    }
-
-			  cpp = newc;
-			  if (attl < cttl)
-			    cttl = attl;
-			  
-			  if (!extract_name(header, qlen, &p1, name, 1, 0))
-			    return 0;
-			  goto cname_loop1;
-			}
-		      else
-			{
-			  found = 1;
-			  
-			  /* copy address into aligned storage */
-			  if (!CHECK_LEN(header, p1, qlen, addrlen))
-			    return 0; /* bad packet */
-			  memcpy(&addr, p1, addrlen);
-			  
-			  /* check for returned address in private space */
-			  if (check_rebind &&
-			      (flags & F_IPV4) &&
-			      private_net(addr.addr.addr4, !option_bool(OPT_LOCAL_REBIND)))
-			    return 1;
-
-#ifdef HAVE_IPSET
-			  if (ipsets && (flags & (F_IPV4 | F_IPV6)))
-			    {
-			      ipsets_cur = ipsets;
-			      while (*ipsets_cur)
-				add_to_ipset(*ipsets_cur++, &addr, flags, 0);
-			    }
-#endif
-			  
-			  newc = cache_insert(name, &addr, now, attl, flags | F_FORWARD);
-			  if (newc && cpp)
-			    {
-			      cpp->addr.cname.cache = newc;
+			      cpp->addr.cname.target.cache = newc;
 			      cpp->addr.cname.uid = newc->uid;
 			    }
-			  cpp = NULL;
 			}
+		      
+		      cpp = newc;
+		      if (attl < cttl)
+			cttl = attl;
+		      
+		      if (!extract_name(header, qlen, &p1, name, 1, 0))
+			return 0;
+		      goto cname_loop1;
 		    }
-		  
-		  p1 = endrr;
-		  if (!CHECK_LEN(header, p1, qlen, 0))
-		    return 0; /* bad packet */
+		  else if (!(flags & F_NXDOMAIN))
+		    {
+		      found = 1;
+		      
+		      /* copy address into aligned storage */
+		      if (!CHECK_LEN(header, p1, qlen, addrlen))
+			return 0; /* bad packet */
+		      memcpy(&addr, p1, addrlen);
+		      
+		      /* check for returned address in private space */
+		      if (check_rebind &&
+			  (flags & F_IPV4) &&
+			  private_net(addr.addr.addr4, !option_bool(OPT_LOCAL_REBIND)))
+			return 1;
+		      
+#ifdef HAVE_IPSET
+		      if (ipsets && (flags & (F_IPV4 | F_IPV6)))
+			{
+			  ipsets_cur = ipsets;
+			  while (*ipsets_cur)
+			    add_to_ipset(*ipsets_cur++, &addr, flags, 0);
+			}
+#endif
+		      
+		      newc = cache_insert(name, &addr, now, attl, flags | F_FORWARD);
+		      if (newc && cpp)
+			{
+			  cpp->addr.cname.target.cache = newc;
+			  cpp->addr.cname.uid = newc->uid;
+			}
+		      cpp = NULL;
+		    }
 		}
+	      
+	      p1 = endrr;
+	      if (!CHECK_LEN(header, p1, qlen, 0))
+		return 0; /* bad packet */
 	    }
 	  
 	  if (!found && !option_bool(OPT_NO_NEG))
@@ -1011,7 +1109,7 @@
 		  newc = cache_insert(name, NULL, now, ttl ? ttl : cttl, F_FORWARD | F_NEG | flags);	
 		  if (newc && cpp)
 		    {
-		      cpp->addr.cname.cache = newc;
+		      cpp->addr.cname.target.cache = newc;
 		      cpp->addr.cname.uid = newc->uid;
 		    }
 		}
@@ -1619,7 +1717,7 @@
 		}
 
 	      /* interface name stuff */
-	      
+	    intname_restart:
 	      for (intr = daemon->int_names; intr; intr = intr->next)
 		if (hostname_isequal(name, intr->name))
 		  break;
@@ -1627,29 +1725,39 @@
 	      if (intr)
 		{
 		  struct addrlist *addrlist;
+		  int gotit = 0;
 
 		  enumerate_interfaces(0);
 		  
-		  addrlist = intr->addr4;
+		  for (intr = daemon->int_names; intr; intr = intr->next)
+		    if (hostname_isequal(name, intr->name))
+		      {
+			addrlist = intr->addr4;
 #ifdef HAVE_IPV6
-		  if (type == T_AAAA)
-		    addrlist = intr->addr6;
+			if (type == T_AAAA)
+			  addrlist = intr->addr6;
 #endif		  
-		  ans = 1;
-		  if (!dryrun)
-		    {
-		      if (!addrlist)
-			log_query(F_FORWARD | F_CONFIG | flag | F_NEG, name, NULL, NULL);
-		      else 
-			for (; addrlist; addrlist = addrlist->next)
+			ans = 1;
+			if (!dryrun)
 			  {
-			    log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
-			    if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
-						    daemon->local_ttl, NULL, type, C_IN, 
-						    type == T_A ? "4" : "6", &addrlist->addr))
-			      anscount++;
+			    if (addrlist)
+			      {
+				gotit = 1;
+				for (; addrlist; addrlist = addrlist->next)
+				  {
+				    log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
+				    if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
+							    daemon->local_ttl, NULL, type, C_IN, 
+							    type == T_A ? "4" : "6", &addrlist->addr))
+				      anscount++;
+				  }
+			      }
 			  }
-		    }
+		      }
+		  
+		  if (!dryrun && !gotit)
+		    log_query(F_FORWARD | F_CONFIG | flag | F_NEG, name, NULL, NULL);
+		     
 		  continue;
 		}
 
@@ -1678,22 +1786,28 @@
 		    { 
 		      /* don't answer wildcard queries with data not from /etc/hosts
 			 or DHCP leases */
-		      if (qtype == T_ANY && !(crecp->flags & (F_HOSTS | F_DHCP)))
+		      if (qtype == T_ANY && !(crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)))
 			break;
 		      
 		      if (crecp->flags & F_CNAME)
 			{
+			  char *cname_target = cache_get_cname_target(crecp);
+			  
 			  if (!dryrun)
 			    {
 			      log_query(crecp->flags, name, NULL, record_source(crecp->uid));
 			      if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
 						      crec_ttl(crecp, now), &nameoffset,
-						      T_CNAME, C_IN, "d", cache_get_name(crecp->addr.cname.cache)))
+						      T_CNAME, C_IN, "d", cname_target))
 				anscount++;
 			    }
 			  
-			  strcpy(name, cache_get_name(crecp->addr.cname.cache));
-			  goto cname_restart;
+			  strcpy(name, cname_target);
+			  /* check if target interface_name */
+			  if (crecp->addr.cname.uid == -1)
+			    goto intname_restart;
+			  else
+			    goto cname_restart;
 			}
 		      
 		      if (crecp->flags & F_NEG)
@@ -1755,7 +1869,7 @@
 		      log_query(crecp->flags, name, NULL, record_source(crecp->uid));
 		      if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
 					      crec_ttl(crecp, now), &nameoffset,
-					      T_CNAME, C_IN, "d", cache_get_name(crecp->addr.cname.cache)))
+					      T_CNAME, C_IN, "d", cache_get_cname_target(crecp)))
 			anscount++;
 		    }
 		}
@@ -1928,7 +2042,7 @@
   if (trunc)
     header->hb3 |= HB3_TC;
 
-  if (anscount == 0 && nxdomain)
+  if (nxdomain)
     SET_RCODE(header, NXDOMAIN);
   else
     SET_RCODE(header, NOERROR); /* no error */
diff --git a/src/rfc2131.c b/src/rfc2131.c
index cb1834b..a49e076 100644
--- a/src/rfc2131.c
+++ b/src/rfc2131.c
@@ -34,7 +34,7 @@
 static struct in_addr option_addr(unsigned char *opt);
 static unsigned int option_uint(unsigned char *opt, int i, int size);
 static void log_packet(char *type, void *addr, unsigned char *ext_mac, 
-		       int mac_len, char *interface, char *string, u32 xid);
+		       int mac_len, char *interface, char *string, char *err, u32 xid);
 static unsigned char *option_find(struct dhcp_packet *mess, size_t size, int opt_type, int minsize);
 static unsigned char *option_find1(unsigned char *p, unsigned char *end, int opt, int minsize);
 static size_t dhcp_packet_size(struct dhcp_packet *mess, unsigned char *agent_id, unsigned char *real_end);
@@ -610,7 +610,7 @@
 	    }
 	}
       
-      log_packet("BOOTP", logaddr, mess->chaddr, mess->hlen, iface_name, message, mess->xid);
+      log_packet("BOOTP", logaddr, mess->chaddr, mess->hlen, iface_name, NULL, message, mess->xid);
       
       return message ? 0 : dhcp_packet_size(mess, agent_id, real_end);
     }
@@ -827,7 +827,7 @@
 	  opt71.next = daemon->dhcp_opts;
 	  do_encap_opts(&opt71, OPTION_VENDOR_CLASS_OPT, DHOPT_VENDOR_MATCH, mess, end, 0);
 	  
-	  log_packet("PXE", &mess->yiaddr, emac, emac_len, iface_name, (char *)mess->file, mess->xid);
+	  log_packet("PXE", &mess->yiaddr, emac, emac_len, iface_name, (char *)mess->file, NULL, mess->xid);
 	  log_tags(tagif_netid, ntohl(mess->xid));
 	  return dhcp_packet_size(mess, agent_id, real_end);	  
 	}
@@ -887,7 +887,7 @@
 		  prune_vendor_opts(tagif_netid);
 		  do_encap_opts(pxe_opts(pxearch, tagif_netid, context->local, now), OPTION_VENDOR_CLASS_OPT, DHOPT_VENDOR_MATCH, mess, end, 0);
 		  
-		  log_packet("PXE", NULL, emac, emac_len, iface_name, ignore ? "proxy-ignored" : "proxy", mess->xid);
+		  log_packet("PXE", NULL, emac, emac_len, iface_name, ignore ? "proxy-ignored" : "proxy", NULL, mess->xid);
 		  log_tags(tagif_netid, ntohl(mess->xid));
 		  return ignore ? 0 : dhcp_packet_size(mess, agent_id, real_end);	  
 		}
@@ -919,7 +919,7 @@
       if (!(opt = option_find(mess, sz, OPTION_REQUESTED_IP, INADDRSZ)))
 	return 0;
       
-      log_packet("DHCPDECLINE", option_ptr(opt, 0), emac, emac_len, iface_name, daemon->dhcp_buff, mess->xid);
+      log_packet("DHCPDECLINE", option_ptr(opt, 0), emac, emac_len, iface_name, NULL, daemon->dhcp_buff, mess->xid);
       
       if (lease && lease->addr.s_addr == option_addr(opt).s_addr)
 	lease_prune(lease, now);
@@ -951,7 +951,7 @@
       else
 	message = _("unknown lease");
 
-      log_packet("DHCPRELEASE", &mess->ciaddr, emac, emac_len, iface_name, message, mess->xid);
+      log_packet("DHCPRELEASE", &mess->ciaddr, emac, emac_len, iface_name, NULL, message, mess->xid);
 	
       return 0;
       
@@ -1015,7 +1015,7 @@
 	    message = _("no address available");      
 	}
       
-      log_packet("DHCPDISCOVER", opt ? option_ptr(opt, 0) : NULL, emac, emac_len, iface_name, message, mess->xid); 
+      log_packet("DHCPDISCOVER", opt ? option_ptr(opt, 0) : NULL, emac, emac_len, iface_name, NULL, message, mess->xid); 
 
       if (message || !(context = narrow_context(context, mess->yiaddr, tagif_netid)))
 	return 0;
@@ -1028,7 +1028,7 @@
 
       log_tags(tagif_netid, ntohl(mess->xid));
       
-      log_packet("DHCPOFFER" , &mess->yiaddr, emac, emac_len, iface_name, NULL, mess->xid);
+      log_packet("DHCPOFFER" , &mess->yiaddr, emac, emac_len, iface_name, NULL, NULL, mess->xid);
       
       time = calc_time(context, config, option_find(mess, sz, OPTION_LEASE_TIME, 4));
       clear_packet(mess, end);
@@ -1144,7 +1144,7 @@
 	  mess->yiaddr = mess->ciaddr;
 	}
       
-      log_packet("DHCPREQUEST", &mess->yiaddr, emac, emac_len, iface_name, NULL, mess->xid);
+      log_packet("DHCPREQUEST", &mess->yiaddr, emac, emac_len, iface_name, NULL, NULL, mess->xid);
  
       if (!message)
 	{
@@ -1216,7 +1216,7 @@
 
       if (message)
 	{
-	  log_packet("DHCPNAK", &mess->yiaddr, emac, emac_len, iface_name, message, mess->xid);
+	  log_packet("DHCPNAK", &mess->yiaddr, emac, emac_len, iface_name, NULL, message, mess->xid);
 	  
 	  mess->yiaddr.s_addr = 0;
 	  clear_packet(mess, end);
@@ -1355,7 +1355,7 @@
 	  else
 	    override = lease->override;
 
-	  log_packet("DHCPACK", &mess->yiaddr, emac, emac_len, iface_name, hostname, mess->xid);  
+	  log_packet("DHCPACK", &mess->yiaddr, emac, emac_len, iface_name, hostname, NULL, mess->xid);  
 	  
 	  clear_packet(mess, end);
 	  option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPACK);
@@ -1378,7 +1378,7 @@
       if (ignore || have_config(config, CONFIG_DISABLE))
 	message = _("ignored");
       
-      log_packet("DHCPINFORM", &mess->ciaddr, emac, emac_len, iface_name, message, mess->xid);
+      log_packet("DHCPINFORM", &mess->ciaddr, emac, emac_len, iface_name, message, NULL, mess->xid);
      
       if (message || mess->ciaddr.s_addr == 0)
 	return 0;
@@ -1404,7 +1404,7 @@
 
       log_tags(tagif_netid, ntohl(mess->xid));
       
-      log_packet("DHCPACK", &mess->ciaddr, emac, emac_len, iface_name, hostname, mess->xid);
+      log_packet("DHCPACK", &mess->ciaddr, emac, emac_len, iface_name, hostname, NULL, mess->xid);
       
       if (lease)
 	{
@@ -1538,10 +1538,13 @@
 #endif
 
 static void log_packet(char *type, void *addr, unsigned char *ext_mac, 
-		       int mac_len, char *interface, char *string, u32 xid)
+		       int mac_len, char *interface, char *string, char *err, u32 xid)
 {
   struct in_addr a;
  
+  if (!err && !option_bool(OPT_LOG_OPTS) && option_bool(OPT_QUIET_DHCP))
+    return;
+  
   /* addr may be misaligned */
   if (addr)
     memcpy(&a, addr, sizeof(a));
@@ -1549,22 +1552,24 @@
   print_mac(daemon->namebuff, ext_mac, mac_len);
   
   if(option_bool(OPT_LOG_OPTS))
-     my_syslog(MS_DHCP | LOG_INFO, "%u %s(%s) %s%s%s %s",
+     my_syslog(MS_DHCP | LOG_INFO, "%u %s(%s) %s%s%s %s%s",
 	       ntohl(xid), 
 	       type,
 	       interface, 
 	       addr ? inet_ntoa(a) : "",
 	       addr ? " " : "",
 	       daemon->namebuff,
-	       string ? string : "");
+	       string ? string : "",
+	       err ? err : "");
   else
-    my_syslog(MS_DHCP | LOG_INFO, "%s(%s) %s%s%s %s",
+    my_syslog(MS_DHCP | LOG_INFO, "%s(%s) %s%s%s %s%s",
 	      type,
 	      interface, 
 	      addr ? inet_ntoa(a) : "",
 	      addr ? " " : "",
 	      daemon->namebuff,
-	      string ? string : "");
+	      string ? string : "",
+	      err ? err : "");
 }
 
 static void log_options(unsigned char *start, u32 xid)
diff --git a/src/rfc3315.c b/src/rfc3315.c
index e1292fb..bf3bacf 100644
--- a/src/rfc3315.c
+++ b/src/rfc3315.c
@@ -21,26 +21,27 @@
 
 struct state {
   unsigned char *clid;
-  int clid_len, iaid, ia_type, interface, hostname_auth;
+  int clid_len, iaid, ia_type, interface, hostname_auth, lease_allocate;
   char *client_hostname, *hostname, *domain, *send_domain;
   struct dhcp_context *context;
-  struct in6_addr *link_address;
+  struct in6_addr *link_address, *fallback;
   unsigned int xid, fqdn_flags;
   char *iface_name;
   void *packet_options, *end;
   struct dhcp_netid *tags, *context_tags;
+  unsigned char mac[DHCP_CHADDR_MAX];
+  unsigned int mac_len, mac_type;
 #ifdef OPTION6_PREFIX_CLASS
   struct prefix_class *send_prefix_class;
 #endif
 };
 
-static int dhcp6_maybe_relay(struct in6_addr *link_address, struct dhcp_netid **relay_tagsp, struct dhcp_context *context, 
-			     int interface, char *iface_name, struct in6_addr *fallback, void *inbuff, size_t sz, int is_unicast, time_t now);
-static int dhcp6_no_relay(int msg_type,  struct in6_addr *link_address, struct dhcp_netid *tags, struct dhcp_context *context, 
-			  int interface, char *iface_name, struct in6_addr *fallback, void *inbuff, size_t sz, int is_unicast, time_t now);
+static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz, 
+			     struct in6_addr *client_addr, int is_unicast, time_t now);
+static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_t sz, int is_unicast, time_t now);
 static void log6_opts(int nest, unsigned int xid, void *start_opts, void *end_opts);
 static void log6_packet(struct state *state, char *type, struct in6_addr *addr, char *string);
-
+static void log6_quiet(struct state *state, char *type, struct in6_addr *addr, char *string);
 static void *opt6_find (void *opts, void *end, unsigned int search, unsigned int minsize);
 static void *opt6_next(void *opts, void *end);
 static unsigned int opt6_uint(unsigned char *opt, int offset, int size);
@@ -51,14 +52,14 @@
 #ifdef OPTION6_PREFIX_CLASS
 static struct prefix_class *prefix_class_from_context(struct dhcp_context *context);
 #endif
-static void mark_context_used(struct state *state, struct dhcp_context *context, struct in6_addr *addr);
+static void mark_context_used(struct state *state, struct in6_addr *addr);
 static void mark_config_used(struct dhcp_context *context, struct in6_addr *addr);
 static int check_address(struct state *state, struct in6_addr *addr);
 static void add_address(struct state *state, struct dhcp_context *context, unsigned int lease_time, void *ia_option, 
-			unsigned int *min_time, struct in6_addr *addr, int update_lease, time_t now);
+			unsigned int *min_time, struct in6_addr *addr, time_t now);
 static void update_leases(struct state *state, struct dhcp_context *context, struct in6_addr *addr, unsigned int lease_time, time_t now);
 static int add_local_addrs(struct dhcp_context *context);
-static struct dhcp_netid *add_options(struct state *state, struct in6_addr *fallback, struct dhcp_context *context, int do_refresh);
+static struct dhcp_netid *add_options(struct state *state, int do_refresh);
 static void calculate_times(struct dhcp_context *context, unsigned int *min_time, unsigned int *valid_timep, 
 			    unsigned int *preferred_timep, unsigned int lease_time);
 
@@ -66,13 +67,17 @@
 #define opt6_type(opt) (opt6_uint(opt, -4, 2))
 #define opt6_ptr(opt, i) ((void *)&(((unsigned char *)(opt))[4+(i)]))
 
+#define opt6_user_vendor_ptr(opt, i) ((void *)&(((unsigned char *)(opt))[2+(i)]))
+#define opt6_user_vendor_len(opt) ((int)(opt6_uint(opt, -4, 2)))
+#define opt6_user_vendor_next(opt, end) (opt6_next(((void *) opt) - 2, end))
+ 
 
 unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *iface_name,
-			   struct in6_addr *fallback, size_t sz, int is_unicast, time_t now)
+			   struct in6_addr *fallback, size_t sz, struct in6_addr *client_addr, time_t now)
 {
-  struct dhcp_netid *relay_tags = NULL;
   struct dhcp_vendor *vendor;
   int msg_type;
+  struct state state;
   
   if (sz <= 4)
     return 0;
@@ -84,16 +89,24 @@
     vendor->netid.next = &vendor->netid;
   
   save_counter(0);
-  
-  if (dhcp6_maybe_relay(NULL, &relay_tags, context, interface, iface_name, fallback, daemon->dhcp_packet.iov_base, sz, is_unicast, now))
+  state.context = context;
+  state.interface = interface;
+  state.iface_name = iface_name;
+  state.fallback = fallback;
+  state.mac_len = 0;
+  state.tags = NULL;
+  state.link_address = NULL;
+
+  if (dhcp6_maybe_relay(&state, daemon->dhcp_packet.iov_base, sz, client_addr, 
+			IN6_IS_ADDR_MULTICAST(client_addr), now))
     return msg_type == DHCP6RELAYFORW ? DHCPV6_SERVER_PORT : DHCPV6_CLIENT_PORT;
 
   return 0;
 }
 
 /* This cost me blood to write, it will probably cost you blood to understand - srk. */
-static int dhcp6_maybe_relay(struct in6_addr *link_address, struct dhcp_netid **relay_tagsp, struct dhcp_context *context,
-			     int interface, char *iface_name, struct in6_addr *fallback, void *inbuff, size_t sz, int is_unicast, time_t now)
+static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz, 
+			     struct in6_addr *client_addr, int is_unicast, time_t now)
 {
   void *end = inbuff + sz;
   void *opts = inbuff + 34;
@@ -108,45 +121,50 @@
       /* if link_address != NULL if points to the link address field of the 
 	 innermost nested RELAYFORW message, which is where we find the
 	 address of the network on which we can allocate an address.
-	 Recalculate the available contexts using that information. */
+	 Recalculate the available contexts using that information. 
+
+      link_address == NULL means there's no relay in use, so we try and find the client's 
+      MAC address from the local ND cache. */
       
-      if (link_address)
+      if (!state->link_address)
+	get_client_mac(client_addr, state->interface, state->mac, &state->mac_len, &state->mac_type);
+      else
 	{
 	  struct dhcp_context *c;
-	  context = NULL;
+	  state->context = NULL;
 	   
-	  if (!IN6_IS_ADDR_LOOPBACK(link_address) &&
-	      !IN6_IS_ADDR_LINKLOCAL(link_address) &&
-	      !IN6_IS_ADDR_MULTICAST(link_address))
+	  if (!IN6_IS_ADDR_LOOPBACK(state->link_address) &&
+	      !IN6_IS_ADDR_LINKLOCAL(state->link_address) &&
+	      !IN6_IS_ADDR_MULTICAST(state->link_address))
 	    for (c = daemon->dhcp6; c; c = c->next)
 	      if ((c->flags & CONTEXT_DHCP) &&
 		  !(c->flags & (CONTEXT_TEMPLATE | CONTEXT_OLD)) &&
-		  is_same_net6(link_address, &c->start6, c->prefix) &&
-		  is_same_net6(link_address, &c->end6, c->prefix))
+		  is_same_net6(state->link_address, &c->start6, c->prefix) &&
+		  is_same_net6(state->link_address, &c->end6, c->prefix))
 		{
 		  c->preferred = c->valid = 0xffffffff;
-		  c->current = context;
-		  context = c;
+		  c->current = state->context;
+		  state->context = c;
 		}
 	  
-	  if (!context)
+	  if (!state->context)
 	    {
-	      inet_ntop(AF_INET6, link_address, daemon->addrbuff, ADDRSTRLEN); 
+	      inet_ntop(AF_INET6, state->link_address, daemon->addrbuff, ADDRSTRLEN); 
 	      my_syslog(MS_DHCP | LOG_WARNING, 
 			_("no address range available for DHCPv6 request from relay at %s"),
 			daemon->addrbuff);
 	      return 0;
 	    }
 	}
-
-      if (!context)
+	  
+      if (!state->context)
 	{
 	  my_syslog(MS_DHCP | LOG_WARNING, 
-		    _("no address range available for DHCPv6 request via %s"), iface_name);
+		    _("no address range available for DHCPv6 request via %s"), state->iface_name);
 	  return 0;
 	}
 
-      return dhcp6_no_relay(msg_type, link_address, *relay_tagsp, context, interface, iface_name, fallback, inbuff, sz, is_unicast, now);
+      return dhcp6_no_relay(state, msg_type, inbuff, sz, is_unicast, now);
     }
 
   /* must have at least msg_type+hopcount+link_address+peer_address+minimal size option
@@ -155,7 +173,8 @@
     return 0;
   
   /* copy header stuff into reply message and set type to reply */
-  outmsgtypep = put_opt6(inbuff, 34);
+  if (!(outmsgtypep = put_opt6(inbuff, 34)))
+    return 0;
   *outmsgtypep = DHCP6RELAYREPL;
 
   /* look for relay options and set tags if found. */
@@ -175,26 +194,35 @@
 	  memcmp(vendor->data, opt6_ptr(opt, 0), vendor->len) == 0 &&
 	  vendor->netid.next != &vendor->netid)
 	{
-	  vendor->netid.next = *relay_tagsp;
-	  *relay_tagsp = &vendor->netid;
+	  vendor->netid.next = state->tags;
+	  state->tags = &vendor->netid;
 	  break;
 	}
     }
   
+  /* RFC-6939 */
+  if ((opt = opt6_find(opts, end, OPTION6_CLIENT_MAC, 3)))
+    {
+      state->mac_type = opt6_uint(opt, 0, 2);
+      state->mac_len = opt6_len(opt) - 2;
+      memcpy(&state->mac[0], opt6_ptr(opt, 2), state->mac_len);
+    }
+  
   for (opt = opts; opt; opt = opt6_next(opt, end))
     {
       int o = new_opt6(opt6_type(opt));
       if (opt6_type(opt) == OPTION6_RELAY_MSG)
 	{
-	  struct in6_addr link_address;
+	  struct in6_addr align;
 	  /* the packet data is unaligned, copy to aligned storage */
-	  memcpy(&link_address, inbuff + 2, IN6ADDRSZ); 
-	  /* Not, zero is_unicast since that is now known to refer to the 
+	  memcpy(&align, inbuff + 2, IN6ADDRSZ); 
+	  state->link_address = &align;
+	  /* zero is_unicast since that is now known to refer to the 
 	     relayed packet, not the original sent by the client */
-	  if (!dhcp6_maybe_relay(&link_address, relay_tagsp, context, interface, iface_name, fallback, opt6_ptr(opt, 0), opt6_len(opt), 0, now))
+	  if (!dhcp6_maybe_relay(state, opt6_ptr(opt, 0), opt6_len(opt), client_addr, 0, now))
 	    return 0;
 	}
-      else
+      else if (opt6_type(opt) != OPTION6_CLIENT_MAC)
 	put_opt6(opt6_ptr(opt, 0), opt6_len(opt));
       end_opt6(o);	    
     }
@@ -202,8 +230,7 @@
   return 1;
 }
 
-static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dhcp_netid *tags, struct dhcp_context *context, 
-			  int interface, char *iface_name, struct in6_addr *fallback, void *inbuff, size_t sz, int is_unicast, time_t now)
+static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_t sz, int is_unicast, time_t now)
 {
   void *opt;
   int i, o, o1, start_opts;
@@ -214,53 +241,50 @@
   unsigned char *outmsgtypep;
   struct dhcp_vendor *vendor;
   struct dhcp_context *context_tmp;
+  struct dhcp_mac *mac_opt;
   unsigned int ignore = 0;
-  struct state state;
 #ifdef OPTION6_PREFIX_CLASS
   struct prefix_class *p;
   int dump_all_prefix_classes = 0;
 #endif
 
-  state.packet_options = inbuff + 4;
-  state.end = inbuff + sz;
-  state.clid = NULL;
-  state.clid_len = 0;
-  state.context_tags = NULL;
-  state.tags = tags;
-  state.link_address = link_address;
-  state.interface = interface;
-  state.domain = NULL;
-  state.send_domain = NULL;
-  state.context = context;
-  state.hostname_auth = 0;
-  state.hostname = NULL;
-  state.client_hostname = NULL;
-  state.iface_name = iface_name;
-  state.fqdn_flags = 0x01; /* default to send if we recieve no FQDN option */
+  state->packet_options = inbuff + 4;
+  state->end = inbuff + sz;
+  state->clid = NULL;
+  state->clid_len = 0;
+  state->lease_allocate = 0;
+  state->context_tags = NULL;
+  state->domain = NULL;
+  state->send_domain = NULL;
+  state->hostname_auth = 0;
+  state->hostname = NULL;
+  state->client_hostname = NULL;
+  state->fqdn_flags = 0x01; /* default to send if we recieve no FQDN option */
 #ifdef OPTION6_PREFIX_CLASS
-  state.send_prefix_class = NULL;
+  state->send_prefix_class = NULL;
 #endif
 
   /* set tag with name == interface */
-  iface_id.net = iface_name;
-  iface_id.next = state.tags;
-  state.tags = &iface_id; 
+  iface_id.net = state->iface_name;
+  iface_id.next = state->tags;
+  state->tags = &iface_id; 
 
   /* set tag "dhcpv6" */
   v6_id.net = "dhcpv6";
-  v6_id.next = state.tags;
-  state.tags = &v6_id;
+  v6_id.next = state->tags;
+  state->tags = &v6_id;
 
   /* copy over transaction-id, and save pointer to message type */
-  outmsgtypep = put_opt6(inbuff, 4);
+  if (!(outmsgtypep = put_opt6(inbuff, 4)))
+    return 0;
   start_opts = save_counter(-1);
-  state.xid = outmsgtypep[3] | outmsgtypep[2] << 8 | outmsgtypep[1] << 16;
+  state->xid = outmsgtypep[3] | outmsgtypep[2] << 8 | outmsgtypep[1] << 16;
    
   /* We're going to be linking tags from all context we use. 
      mark them as unused so we don't link one twice and break the list */
-  for (context_tmp = context; context_tmp; context_tmp = context_tmp->current)
+  for (context_tmp = state->context; context_tmp; context_tmp = context_tmp->current)
     {
-      context->netid.next = &context->netid;
+      context_tmp->netid.next = &context_tmp->netid;
 
       if (option_bool(OPT_LOG_OPTS))
 	{
@@ -268,19 +292,19 @@
 	   inet_ntop(AF_INET6, &context_tmp->end6, daemon->dhcp_buff2, ADDRSTRLEN); 
 	   if (context_tmp->flags & (CONTEXT_STATIC))
 	     my_syslog(MS_DHCP | LOG_INFO, _("%u available DHCPv6 subnet: %s/%d"),
-		       state.xid, daemon->dhcp_buff, context_tmp->prefix);
+		       state->xid, daemon->dhcp_buff, context_tmp->prefix);
 	   else
 	     my_syslog(MS_DHCP | LOG_INFO, _("%u available DHCP range: %s -- %s"), 
-		       state.xid, daemon->dhcp_buff, daemon->dhcp_buff2);
+		       state->xid, daemon->dhcp_buff, daemon->dhcp_buff2);
 	}
     }
 
-  if ((opt = opt6_find(state.packet_options, state.end, OPTION6_CLIENT_ID, 1)))
+  if ((opt = opt6_find(state->packet_options, state->end, OPTION6_CLIENT_ID, 1)))
     {
-      state.clid = opt6_ptr(opt, 0);
-      state.clid_len = opt6_len(opt);
+      state->clid = opt6_ptr(opt, 0);
+      state->clid_len = opt6_len(opt);
       o = new_opt6(OPTION6_CLIENT_ID);
-      put_opt6(state.clid, state.clid_len);
+      put_opt6(state->clid, state->clid_len);
       end_opt6(o);
     }
   else if (msg_type != DHCP6IREQ)
@@ -288,7 +312,7 @@
 
   /* server-id must match except for SOLICIT and CONFIRM messages */
   if (msg_type != DHCP6SOLICIT && msg_type != DHCP6CONFIRM && msg_type != DHCP6IREQ &&
-      (!(opt = opt6_find(state.packet_options, state.end, OPTION6_SERVER_ID, 1)) ||
+      (!(opt = opt6_find(state->packet_options, state->end, OPTION6_SERVER_ID, 1)) ||
        opt6_len(opt) != daemon->duid_len ||
        memcmp(opt6_ptr(opt, 0), daemon->duid, daemon->duid_len) != 0))
     return 0;
@@ -320,7 +344,7 @@
       else
 	continue;
 
-      if ((opt = opt6_find(state.packet_options, state.end, mopt, 2)))
+      if ((opt = opt6_find(state->packet_options, state->end, mopt, 2)))
 	{
 	  void *enc_opt, *enc_end = opt6_ptr(opt, opt6_len(opt));
 	  int offset = 0;
@@ -336,19 +360,20 @@
 	      offset = 4;
 	    }
  
-	  for (enc_opt = opt6_ptr(opt, offset); enc_opt; enc_opt = opt6_next(enc_opt, enc_end))
-	    for (i = 0; i <= (opt6_len(enc_opt) - vendor->len); i++)
-	      if (memcmp(vendor->data, opt6_ptr(enc_opt, i), vendor->len) == 0)
+	  /* Note that format if user/vendor classes is different to DHCP options - no option types. */
+	  for (enc_opt = opt6_ptr(opt, offset); enc_opt; enc_opt = opt6_user_vendor_next(enc_opt, enc_end))
+	    for (i = 0; i <= (opt6_user_vendor_len(enc_opt) - vendor->len); i++)
+	      if (memcmp(vendor->data, opt6_user_vendor_ptr(enc_opt, i), vendor->len) == 0)
 		{
-		  vendor->netid.next = state.tags;
-		  state.tags = &vendor->netid;
+		  vendor->netid.next = state->tags;
+		  state->tags = &vendor->netid;
 		  break;
 		}
 	}
     }
 
-  if (option_bool(OPT_LOG_OPTS) && (opt = opt6_find(state.packet_options, state.end, OPTION6_VENDOR_CLASS, 4)))
-    my_syslog(MS_DHCP | LOG_INFO, _("%u vendor class: %u"), state.xid, opt6_uint(opt, 0, 4));
+  if (option_bool(OPT_LOG_OPTS) && (opt = opt6_find(state->packet_options, state->end, OPTION6_VENDOR_CLASS, 4)))
+    my_syslog(MS_DHCP | LOG_INFO, _("%u vendor class: %u"), state->xid, opt6_uint(opt, 0, 4));
   
   /* dhcp-match. If we have hex-and-wildcards, look for a left-anchored match.
      Otherwise assume the option is an array, and look for a matching element. 
@@ -360,9 +385,9 @@
       
       if (opt_cfg->flags & DHOPT_RFC3925)
 	{
-	  for (opt = opt6_find(state.packet_options, state.end, OPTION6_VENDOR_OPTS, 4);
+	  for (opt = opt6_find(state->packet_options, state->end, OPTION6_VENDOR_OPTS, 4);
 	       opt;
-	       opt = opt6_find(opt6_next(opt, state.end), state.end, OPTION6_VENDOR_OPTS, 4))
+	       opt = opt6_find(opt6_next(opt, state->end), state->end, OPTION6_VENDOR_OPTS, 4))
 	    {
 	      void *vopt;
 	      void *vend = opt6_ptr(opt, opt6_len(opt));
@@ -378,7 +403,7 @@
 	}
       else
 	{
-	  if (!(opt = opt6_find(state.packet_options, state.end, opt_cfg->opt, 1)))
+	  if (!(opt = opt6_find(state->packet_options, state->end, opt_cfg->opt, 1)))
 	    continue;
 	  
 	  match = match_bytes(opt_cfg, opt6_ptr(opt, 0), opt6_len(opt));
@@ -386,23 +411,41 @@
   
       if (match)
 	{
-	  opt_cfg->netid->next = state.tags;
-	  state.tags = opt_cfg->netid;
+	  opt_cfg->netid->next = state->tags;
+	  state->tags = opt_cfg->netid;
 	}
     }
+
+  if (state->mac_len != 0)
+    {
+      if (option_bool(OPT_LOG_OPTS))
+	{
+	  print_mac(daemon->dhcp_buff, state->mac, state->mac_len);
+	  my_syslog(MS_DHCP | LOG_INFO, _("%u client MAC address: %s"), state->xid, daemon->dhcp_buff);
+	}
+
+      for (mac_opt = daemon->dhcp_macs; mac_opt; mac_opt = mac_opt->next)
+	if ((unsigned)mac_opt->hwaddr_len == state->mac_len &&
+	    ((unsigned)mac_opt->hwaddr_type == state->mac_type || mac_opt->hwaddr_type == 0) &&
+	    memcmp_masked(mac_opt->hwaddr, state->mac, state->mac_len, mac_opt->mask))
+	  {
+	    mac_opt->netid.next = state->tags;
+	    state->tags = &mac_opt->netid;
+	  }
+    }
   
-  if ((opt = opt6_find(state.packet_options, state.end, OPTION6_FQDN, 1)))
+  if ((opt = opt6_find(state->packet_options, state->end, OPTION6_FQDN, 1)))
     {
       /* RFC4704 refers */
        int len = opt6_len(opt) - 1;
        
-       state.fqdn_flags = opt6_uint(opt, 0, 1);
+       state->fqdn_flags = opt6_uint(opt, 0, 1);
        
        /* Always force update, since the client has no way to do it itself. */
-       if (!option_bool(OPT_FQDN_UPDATE) && !(state.fqdn_flags & 0x01))
-	 state.fqdn_flags |= 0x03;
+       if (!option_bool(OPT_FQDN_UPDATE) && !(state->fqdn_flags & 0x01))
+	 state->fqdn_flags |= 0x03;
  
-       state.fqdn_flags &= ~0x04;
+       state->fqdn_flags &= ~0x04;
 
        if (len != 0 && len < 255)
 	 {
@@ -424,36 +467,36 @@
 	   
 	   if (legal_hostname(daemon->dhcp_buff))
 	     {
-	       state.client_hostname = daemon->dhcp_buff;
+	       state->client_hostname = daemon->dhcp_buff;
 	       if (option_bool(OPT_LOG_OPTS))
-		 my_syslog(MS_DHCP | LOG_INFO, _("%u client provides name: %s"), state.xid, state.client_hostname); 
+		 my_syslog(MS_DHCP | LOG_INFO, _("%u client provides name: %s"), state->xid, state->client_hostname); 
 	     }
 	 }
     }	 
   
-  if (state.clid)
+  if (state->clid)
     {
-      config = find_config6(daemon->dhcp_conf, context, state.clid, state.clid_len, NULL);
+      config = find_config(daemon->dhcp_conf, state->context, state->clid, state->clid_len, state->mac, state->mac_len, state->mac_type, NULL);
       
       if (have_config(config, CONFIG_NAME))
 	{
-	  state.hostname = config->hostname;
-	  state.domain = config->domain;
-	  state.hostname_auth = 1;
+	  state->hostname = config->hostname;
+	  state->domain = config->domain;
+	  state->hostname_auth = 1;
 	}
-      else if (state.client_hostname)
+      else if (state->client_hostname)
 	{
-	  state.domain = strip_hostname(state.client_hostname);
+	  state->domain = strip_hostname(state->client_hostname);
 	  
-	  if (strlen(state.client_hostname) != 0)
+	  if (strlen(state->client_hostname) != 0)
 	    {
-	      state.hostname = state.client_hostname;
+	      state->hostname = state->client_hostname;
 	      if (!config)
 		{
 		  /* Search again now we have a hostname. 
 		     Only accept configs without CLID here, (it won't match)
 		     to avoid impersonation by name. */
-		  struct dhcp_config *new = find_config6(daemon->dhcp_conf, context, NULL, 0, state.hostname);
+		  struct dhcp_config *new = find_config(daemon->dhcp_conf, state->context, NULL, 0, NULL, 0, 0, state->hostname);
 		  if (new && !have_config(new, CONFIG_CLID) && !new->hwaddr)
 		    config = new;
 		}
@@ -467,14 +510,14 @@
       
       for (list = config->netid; list; list = list->next)
         {
-          list->list->next = state.tags;
-          state.tags = list->list;
+          list->list->next = state->tags;
+          state->tags = list->list;
         }
 
       /* set "known" tag for known hosts */
       known_id.net = "known";
-      known_id.next = state.tags;
-      state.tags = &known_id;
+      known_id.next = state->tags;
+      state->tags = &known_id;
 
       if (have_config(config, CONFIG_DISABLE))
 	ignore = 1;
@@ -486,7 +529,7 @@
     {
       void *oro;
       
-      if ((oro = opt6_find(state.packet_options, state.end, OPTION6_ORO, 0)))
+      if ((oro = opt6_find(state->packet_options, state->end, OPTION6_ORO, 0)))
 	for (i = 0; i <  opt6_len(oro) - 1; i += 2)
 	  if (opt6_uint(oro, i, 2) == OPTION6_PREFIX_CLASS)
 	    {
@@ -499,13 +542,13 @@
 	   Not done for SOLICIT as we add them  one-at-time. */
 	for (p = daemon->prefix_classes; p ; p = p->next)
 	  {
-	    p->tag.next = state.tags;
-	    state.tags = &p->tag;
+	    p->tag.next = state->tags;
+	    state->tags = &p->tag;
 	  }
     }    
 #endif
 
-  tagif = run_tag_if(state.tags);
+  tagif = run_tag_if(state->tags);
   
   /* if all the netids in the ignore list are present, ignore this client */
   if (daemon->dhcp_ignore)
@@ -518,7 +561,7 @@
     }
   
   /* if all the netids in the ignore_name list are present, ignore client-supplied name */
-  if (!state.hostname_auth)
+  if (!state->hostname_auth)
     {
        struct dhcp_netid_list *id_list;
        
@@ -526,7 +569,7 @@
 	 if ((!id_list->list) || match_netid(id_list->list, tagif, 0))
 	   break;
        if (id_list)
-	 state.hostname = NULL;
+	 state->hostname = NULL;
     }
   
 
@@ -534,26 +577,29 @@
     {
     default:
       return 0;
-
-
+      
+      
     case DHCP6SOLICIT:
       {
-	void *rapid_commit = opt6_find(state.packet_options, state.end, OPTION6_RAPID_COMMIT, 0);
       	int address_assigned = 0;
 	/* tags without all prefix-class tags */
-	struct dhcp_netid *solicit_tags = tagif;
+	struct dhcp_netid *solicit_tags;
 	struct dhcp_context *c;
-
-	if (rapid_commit)
+	
+	*outmsgtypep = DHCP6ADVERTISE;
+	
+	if (opt6_find(state->packet_options, state->end, OPTION6_RAPID_COMMIT, 0))
 	  {
+	    *outmsgtypep = DHCP6REPLY;
+	    state->lease_allocate = 1;
 	    o = new_opt6(OPTION6_RAPID_COMMIT);
 	    end_opt6(o);
 	  }
+	
+  	log6_quiet(state, "DHCPSOLICIT", NULL, ignore ? _("ignored") : NULL);
 
-	/* set reply message type */
-	*outmsgtypep = rapid_commit ? DHCP6REPLY : DHCP6ADVERTISE;
-
-	log6_packet(&state, "DHCPSOLICIT", NULL, ignore ? _("ignored") : NULL);
+      request_no_address:
+	solicit_tags = tagif;
 	
 	if (ignore)
 	  return 0;
@@ -562,10 +608,10 @@
 	lease6_reset();
 
 	/* Can use configured address max once per prefix */
-	for (c = context; c; c = c->current)
+	for (c = state->context; c; c = c->current)
 	  c->flags &= ~CONTEXT_CONF_USED;
 
-	for (opt = state.packet_options; opt; opt = opt6_next(opt, state.end))
+	for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end))
 	  {   
 	    void *ia_option, *ia_end;
 	    unsigned int min_time = 0xffffffff;
@@ -579,15 +625,15 @@
 	    struct in6_addr *req_addr;
 	    struct in6_addr addr;
 
-	    if (!check_ia(&state, opt, &ia_end, &ia_option))
+	    if (!check_ia(state, opt, &ia_end, &ia_option))
 	      continue;
 	    
 	    /* reset USED bits in contexts - one address per prefix per IAID */
-	    for (c = context; c; c = c->current)
+	    for (c = state->context; c; c = c->current)
 	      c->flags &= ~CONTEXT_USED;
 
 #ifdef OPTION6_PREFIX_CLASS
-	    if (daemon->prefix_classes && state.ia_type == OPTION6_IA_NA)
+	    if (daemon->prefix_classes && state->ia_type == OPTION6_IA_NA)
 	      {
 		void *prefix_opt;
 		int prefix_class;
@@ -611,10 +657,10 @@
 			else
 			  {
 			    /* add tag to list, and exclude undecorated dhcp-ranges */
-			    p->tag.next = state.tags;
+			    p->tag.next = state->tags;
 			    solicit_tags = run_tag_if(&p->tag);
 			    plain_range = 0;
-			    state.send_prefix_class = p;
+			    state->send_prefix_class = p;
 			  }
 		      }
 		    else
@@ -630,103 +676,103 @@
 			if (p)
 			  {
 			    plain_range = 0;
-			    state.send_prefix_class = p;
+			    state->send_prefix_class = p;
 			  }
 		      }
 
 		    if (p && option_bool(OPT_LOG_OPTS))
-		      my_syslog(MS_DHCP | LOG_INFO, "%u prefix class %d tag:%s", state.xid, p->class, p->tag.net); 
+		      my_syslog(MS_DHCP | LOG_INFO, "%u prefix class %d tag:%s", state->xid, p->class, p->tag.net); 
 		  }
 	      }
 #endif
 
-	    o = build_ia(&state, &t1cntr);
+	    o = build_ia(state, &t1cntr);
 
 	    for (ia_counter = 0; ia_option; ia_counter++, ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24))
 	      {
 		req_addr = opt6_ptr(ia_option, 0);
 				
-		if ((c = address6_valid(context, req_addr, solicit_tags, plain_range)))
+		if ((c = address6_valid(state->context, req_addr, solicit_tags, plain_range)))
 		  {
 		    lease_time = c->lease_time;
 		    /* If the client asks for an address on the same network as a configured address, 
 		       offer the configured address instead, to make moving to newly-configured
 		       addresses automatic. */
-		    if (!(c->flags & CONTEXT_CONF_USED) && config_valid(config, c, &addr) && check_address(&state, &addr))
+		    if (!(c->flags & CONTEXT_CONF_USED) && config_valid(config, c, &addr) && check_address(state, &addr))
 		      {
 			req_addr = &addr;
 			mark_config_used(c, &addr);
 			if (have_config(config, CONFIG_TIME))
 			  lease_time = config->lease_time;
 		      }
-		    else if (!(c = address6_available(context, req_addr, solicit_tags, plain_range)))
+		    else if (!(c = address6_available(state->context, req_addr, solicit_tags, plain_range)))
 		      continue; /* not an address we're allowed */
-		    else if (!check_address(&state, req_addr))
+		    else if (!check_address(state, req_addr))
 		      continue; /* address leased elsewhere */
 		    
 		    /* add address to output packet */
 #ifdef OPTION6_PREFIX_CLASS
-		    if (dump_all_prefix_classes && state.ia_type == OPTION6_IA_NA)
-		      state.send_prefix_class = prefix_class_from_context(c);
+		    if (dump_all_prefix_classes && state->ia_type == OPTION6_IA_NA)
+		      state->send_prefix_class = prefix_class_from_context(c);
 #endif		    
-		    add_address(&state, c, lease_time, ia_option, &min_time, req_addr, rapid_commit != NULL, now);
-		    mark_context_used(&state, context, req_addr);
-		    get_context_tag(&state, c);
+		    add_address(state, c, lease_time, ia_option, &min_time, req_addr, now);
+		    mark_context_used(state, req_addr);
+		    get_context_tag(state, c);
 		    address_assigned = 1;
 		  }
 	      }
 	    
 	    /* Suggest configured address(es) */
-	    for (c = context; c; c = c->current) 
+	    for (c = state->context; c; c = c->current) 
 	      if (!(c->flags & CONTEXT_CONF_USED) &&
 		  match_netid(c->filter, solicit_tags, plain_range) &&
 		  config_valid(config, c, &addr) && 
-		  check_address(&state, &addr))
+		  check_address(state, &addr))
 		{
-		  mark_config_used(context, &addr);
+		  mark_config_used(state->context, &addr);
 		  if (have_config(config, CONFIG_TIME))
 		    lease_time = config->lease_time;
 		  else
 		    lease_time = c->lease_time;
 		  /* add address to output packet */
 #ifdef OPTION6_PREFIX_CLASS
-		  if (dump_all_prefix_classes && state.ia_type == OPTION6_IA_NA)
-		    state.send_prefix_class = prefix_class_from_context(c);
+		  if (dump_all_prefix_classes && state->ia_type == OPTION6_IA_NA)
+		    state->send_prefix_class = prefix_class_from_context(c);
 #endif
-		  add_address(&state, c, lease_time, NULL, &min_time, &addr, rapid_commit != NULL, now);
-		  mark_context_used(&state, context, &addr);
-		  get_context_tag(&state, c);
+		  add_address(state, c, lease_time, NULL, &min_time, &addr, now);
+		  mark_context_used(state, &addr);
+		  get_context_tag(state, c);
 		  address_assigned = 1;
 		}
 	    
 	    /* return addresses for existing leases */
 	    ltmp = NULL;
-	    while ((ltmp = lease6_find_by_client(ltmp, state.ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA, state.clid, state.clid_len, state.iaid)))
+	    while ((ltmp = lease6_find_by_client(ltmp, state->ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA, state->clid, state->clid_len, state->iaid)))
 	      {
-		req_addr = (struct in6_addr *)ltmp->hwaddr;
-		if ((c = address6_available(context, req_addr, solicit_tags, plain_range)))
+		req_addr = &ltmp->addr6;
+		if ((c = address6_available(state->context, req_addr, solicit_tags, plain_range)))
 		  {
 #ifdef OPTION6_PREFIX_CLASS
-		    if (dump_all_prefix_classes && state.ia_type == OPTION6_IA_NA)
-		      state.send_prefix_class = prefix_class_from_context(c);
+		    if (dump_all_prefix_classes && state->ia_type == OPTION6_IA_NA)
+		      state->send_prefix_class = prefix_class_from_context(c);
 #endif
-		    add_address(&state, c, c->lease_time, NULL, &min_time, req_addr, rapid_commit != NULL, now);
-		    mark_context_used(&state, context, req_addr);
-		    get_context_tag(&state, c);
+		    add_address(state, c, c->lease_time, NULL, &min_time, req_addr, now);
+		    mark_context_used(state, req_addr);
+		    get_context_tag(state, c);
 		    address_assigned = 1;
 		  }
 	      }
 		 	   
 	    /* Return addresses for all valid contexts which don't yet have one */
-	    while ((c = address6_allocate(context, state.clid, state.clid_len, state.iaid, ia_counter, solicit_tags, plain_range, &addr)))
+	    while ((c = address6_allocate(state->context, state->clid, state->clid_len, state->iaid, ia_counter, solicit_tags, plain_range, &addr)))
 	      {
 #ifdef OPTION6_PREFIX_CLASS
-		if (dump_all_prefix_classes && state.ia_type == OPTION6_IA_NA)
-		  state.send_prefix_class = prefix_class_from_context(c);
+		if (dump_all_prefix_classes && state->ia_type == OPTION6_IA_NA)
+		  state->send_prefix_class = prefix_class_from_context(c);
 #endif
-		add_address(&state, c, c->lease_time, NULL, &min_time, &addr, rapid_commit != NULL, now);
-		mark_context_used(&state, context, &addr);
-		get_context_tag(&state, c);
+		add_address(state, c, c->lease_time, NULL, &min_time, &addr, now);
+		mark_context_used(state, &addr);
+		get_context_tag(state, c);
 		address_assigned = 1;
 	      }
 	    
@@ -746,7 +792,7 @@
 	    o = new_opt6(OPTION6_PREFERENCE);
 	    put_opt6_char(option_bool(OPT_AUTHORITATIVE) ? 255 : 0);
 	    end_opt6(o);
-	    tagif = add_options(&state, fallback, context, 0);
+	    tagif = add_options(state, 0);
 	  }
 	else
 	  { 
@@ -755,7 +801,7 @@
 	    put_opt6_short(DHCP6NOADDRS);
 	    put_opt6_string(_("no addresses available"));
 	    end_opt6(o1);
-	    log6_packet(&state, "DHCPADVERTISE", NULL, _("no addresses available"));
+	    log6_packet(state, "DHCPADVERTISE", NULL, _("no addresses available"));
 	  }
 
 	break;
@@ -764,25 +810,35 @@
     case DHCP6REQUEST:
       {
 	int address_assigned = 0;
-	
+	int start = save_counter(-1);
+
 	/* set reply message type */
 	*outmsgtypep = DHCP6REPLY;
+	state->lease_allocate = 1;
 
-	log6_packet(&state, "DHCPREQUEST", NULL, ignore ? _("ignored") : NULL);
+	log6_quiet(state, "DHCPREQUEST", NULL, ignore ? _("ignored") : NULL);
 	
 	if (ignore)
 	  return 0;
 	
-	for (opt = state.packet_options; opt; opt = opt6_next(opt, state.end))
+	for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end))
 	  {   
 	    void *ia_option, *ia_end;
 	    unsigned int min_time = 0xffffffff;
 	    int t1cntr;
 	    
-	     if (!check_ia(&state, opt, &ia_end, &ia_option))
+	     if (!check_ia(state, opt, &ia_end, &ia_option))
 	       continue;
-	    
-	    o = build_ia(&state, &t1cntr);
+
+	     if (!ia_option)
+	       {
+		 /* If we get a request with a IA_*A without addresses, treat it exactly like
+		    a SOLICT with rapid commit set. */
+		 save_counter(start);
+		 goto request_no_address; 
+	       }
+
+	    o = build_ia(state, &t1cntr);
 	      
 	    for (; ia_option; ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24))
 	      {
@@ -792,10 +848,10 @@
 		struct in6_addr addr;
 		int config_ok = 0;
 		
-		if ((c = address6_valid(context, req_addr, tagif, 1)))
+		if ((c = address6_valid(state->context, req_addr, tagif, 1)))
 		  config_ok = config_valid(config, c, &addr) && IN6_ARE_ADDR_EQUAL(&addr, req_addr);
 		
-		if ((dynamic = address6_available(context, req_addr, tagif, 1)) || c)
+		if ((dynamic = address6_available(state->context, req_addr, tagif, 1)) || c)
 		  {
 		    if (!dynamic && !config_ok)
 		      {
@@ -805,7 +861,7 @@
 			put_opt6_string(_("address unavailable"));
 			end_opt6(o1);
 		      }
-		    else if (!check_address(&state, req_addr))
+		    else if (!check_address(state, req_addr))
 		      {
 			/* Address leased to another DUID/IAID */
 			o1 = new_opt6(OPTION6_STATUS_CODE);
@@ -824,11 +880,11 @@
 			  lease_time = config->lease_time;
 
 #ifdef OPTION6_PREFIX_CLASS
-			if (dump_all_prefix_classes && state.ia_type == OPTION6_IA_NA)
-			  state.send_prefix_class = prefix_class_from_context(c);
+			if (dump_all_prefix_classes && state->ia_type == OPTION6_IA_NA)
+			  state->send_prefix_class = prefix_class_from_context(c);
 #endif
-			add_address(&state, dynamic, lease_time, ia_option, &min_time, req_addr, 1, now);
-			get_context_tag(&state, dynamic);
+			add_address(state, dynamic, lease_time, ia_option, &min_time, req_addr, now);
+			get_context_tag(state, dynamic);
 			address_assigned = 1;
 		      }
 		  }
@@ -860,10 +916,10 @@
 	    put_opt6_short(DHCP6NOADDRS);
 	    put_opt6_string(_("no addresses available"));
 	    end_opt6(o1);
-	    log6_packet(&state, "DHCPREPLY", NULL, _("no addresses available"));
+	    log6_packet(state, "DHCPREPLY", NULL, _("no addresses available"));
 	  }
 
-	tagif = add_options(&state, fallback, context, 0);
+	tagif = add_options(state, 0);
 	break;
       }
       
@@ -873,18 +929,18 @@
 	/* set reply message type */
 	*outmsgtypep = DHCP6REPLY;
 	
-	log6_packet(&state, "DHCPRENEW", NULL, NULL);
+	log6_quiet(state, "DHCPRENEW", NULL, NULL);
 
-	for (opt = state.packet_options; opt; opt = opt6_next(opt, state.end))
+	for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end))
 	  {
 	    void *ia_option, *ia_end;
 	    unsigned int min_time = 0xffffffff;
 	    int t1cntr, iacntr;
 	    
-	    if (!check_ia(&state, opt, &ia_end, &ia_option))
+	    if (!check_ia(state, opt, &ia_end, &ia_option))
 	      continue;
 	    
-	    o = build_ia(&state, &t1cntr);
+	    o = build_ia(state, &t1cntr);
 	    iacntr = save_counter(-1); 
 	    
 	    for (; ia_option; ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24))
@@ -896,9 +952,9 @@
 		char *message = NULL;
 		struct dhcp_context *this_context;
 		
-		if (!(lease = lease6_find(state.clid, state.clid_len,
-					  state.ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA, 
-					  state.iaid, req_addr)))
+		if (!(lease = lease6_find(state->clid, state->clid_len,
+					  state->ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA, 
+					  state->iaid, req_addr)))
 		  {
 		    /* If the server cannot find a client entry for the IA the server
 		       returns the IA containing no addresses with a Status Code option set
@@ -906,7 +962,7 @@
 		    save_counter(iacntr);
 		    t1cntr = 0;
 		    
-		    log6_packet(&state, "DHCPREPLY", req_addr, _("lease not found"));
+		    log6_packet(state, "DHCPREPLY", req_addr, _("lease not found"));
 		    
 		    o1 = new_opt6(OPTION6_STATUS_CODE);
 		    put_opt6_short(DHCP6NOBINDING);
@@ -918,13 +974,13 @@
 		  }
 		
 		
-		if ((this_context = address6_available(context, req_addr, tagif, 1)) ||
-		    (this_context = address6_valid(context, req_addr, tagif, 1)))
+		if ((this_context = address6_available(state->context, req_addr, tagif, 1)) ||
+		    (this_context = address6_valid(state->context, req_addr, tagif, 1)))
 		  {
 		    struct in6_addr addr;
 		    unsigned int lease_time;
 
-		    get_context_tag(&state, this_context);
+		    get_context_tag(state, this_context);
 		    
 		    if (config_valid(config, this_context, &addr) && IN6_ARE_ADDR_EQUAL(&addr, req_addr) && have_config(config, CONFIG_TIME))
 		      lease_time = config->lease_time;
@@ -934,13 +990,16 @@
 		    calculate_times(this_context, &min_time, &valid_time, &preferred_time, lease_time); 
 		    
 		    lease_set_expires(lease, valid_time, now);
-		    if (state.ia_type == OPTION6_IA_NA && state.hostname)
+		    /* Update MAC record in case it's new information. */
+		    if (state->mac_len != 0)
+		      lease_set_hwaddr(lease, state->mac, state->clid, state->mac_len, state->mac_type, state->clid_len, now, 0);
+		    if (state->ia_type == OPTION6_IA_NA && state->hostname)
 		      {
 			char *addr_domain = get_domain6(req_addr);
-			if (!state.send_domain)
-			  state.send_domain = addr_domain;
-			lease_set_hostname(lease, state.hostname, state.hostname_auth, addr_domain, state.domain); 
-			message = state.hostname;
+			if (!state->send_domain)
+			  state->send_domain = addr_domain;
+			lease_set_hostname(lease, state->hostname, state->hostname_auth, addr_domain, state->domain); 
+			message = state->hostname;
 		      }
 		    
 		    
@@ -953,8 +1012,11 @@
 		    message = _("address invalid");
 		  }
 
-		log6_packet(&state, "DHCPREPLY", req_addr, message);	
-		
+		if (message)
+		  log6_packet(state, "DHCPREPLY", req_addr, message);	
+		else
+		  log6_quiet(state, "DHCPREPLY", req_addr, message);
+	
 		o1 =  new_opt6(OPTION6_IAADDR);
 		put_opt6(req_addr, sizeof(*req_addr));
 		put_opt6_long(preferred_time);
@@ -966,7 +1028,7 @@
 	    end_opt6(o);
 	  }
 	
-	tagif = add_options(&state, fallback, context, 0);
+	tagif = add_options(state, 0);
 	break;
 	
       }
@@ -976,19 +1038,19 @@
 	/* set reply message type */
 	*outmsgtypep = DHCP6REPLY;
 	
-	log6_packet(&state, "DHCPCONFIRM", NULL, NULL);
+	log6_quiet(state, "DHCPCONFIRM", NULL, NULL);
 	
-	for (opt = state.packet_options; opt; opt = opt6_next(opt, state.end))
+	for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end))
 	  {
 	    void *ia_option, *ia_end;
 	    
-	    for (check_ia(&state, opt, &ia_end, &ia_option);
+	    for (check_ia(state, opt, &ia_end, &ia_option);
 		 ia_option;
 		 ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24))
 	      {
 		struct in6_addr *req_addr = opt6_ptr(ia_option, 0);
 		
-		if (!address6_available(context, req_addr, tagif, 1))
+		if (!address6_available(state->context, req_addr, tagif, 1))
 		  {
 		    o1 = new_opt6(OPTION6_STATUS_CODE);
 		    put_opt6_short(DHCP6NOTONLINK);
@@ -997,7 +1059,7 @@
 		    return 1;
 		  }
 
-		log6_packet(&state, "DHCPREPLY", req_addr, state.hostname);
+		log6_quiet(state, "DHCPREPLY", req_addr, state->hostname);
 	      }
 	  }	 
 
@@ -1012,25 +1074,25 @@
       {
 	/* We can't discriminate contexts based on address, as we don't know it.
 	   If there is only one possible context, we can use its tags */
-	if (context && context->netid.net && !context->current)
+	if (state->context && state->context->netid.net && !state->context->current)
 	  {
-	    context->netid.next = NULL;
-	    state.context_tags =  &context->netid;
+	    state->context->netid.next = NULL;
+	    state->context_tags =  &state->context->netid;
 	  }
 
 	/* Similarly, we can't determine domain from address, but if the FQDN is
 	   given in --dhcp-host, we can use that, and failing that we can use the 
 	   unqualified configured domain, if any. */
-	if (state.hostname_auth)
-	  state.send_domain = state.domain;
+	if (state->hostname_auth)
+	  state->send_domain = state->domain;
 	else
-	  state.send_domain = get_domain6(NULL);
+	  state->send_domain = get_domain6(NULL);
 
-	log6_packet(&state, "DHCPINFORMATION-REQUEST", NULL, ignore ? _("ignored") : state.hostname);
+	log6_quiet(state, "DHCPINFORMATION-REQUEST", NULL, ignore ? _("ignored") : state->hostname);
 	if (ignore)
 	  return 0;
 	*outmsgtypep = DHCP6REPLY;
-	tagif = add_options(&state, fallback, context, 1);
+	tagif = add_options(state, 1);
 	break;
       }
       
@@ -1040,29 +1102,29 @@
 	/* set reply message type */
 	*outmsgtypep = DHCP6REPLY;
 
-	log6_packet(&state, "DHCPRELEASE", NULL, NULL);
+	log6_quiet(state, "DHCPRELEASE", NULL, NULL);
 
-	for (opt = state.packet_options; opt; opt = opt6_next(opt, state.end))
+	for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end))
 	  {
 	    void *ia_option, *ia_end;
 	    int made_ia = 0;
 	    	    
-	    for (check_ia(&state, opt, &ia_end, &ia_option);
+	    for (check_ia(state, opt, &ia_end, &ia_option);
 		 ia_option;
 		 ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24)) 
 	      {
 		struct dhcp_lease *lease;
 		
-		if ((lease = lease6_find(state.clid, state.clid_len, state.ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA,
-					 state.iaid, opt6_ptr(ia_option, 0))))
+		if ((lease = lease6_find(state->clid, state->clid_len, state->ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA,
+					 state->iaid, opt6_ptr(ia_option, 0))))
 		  lease_prune(lease, now);
 		else
 		  {
 		    if (!made_ia)
 		      {
-			o = new_opt6(state.ia_type);
-			put_opt6_long(state.iaid);
-			if (state.ia_type == OPTION6_IA_NA)
+			o = new_opt6(state->ia_type);
+			put_opt6_long(state->iaid);
+			if (state->ia_type == OPTION6_IA_NA)
 			  {
 			    put_opt6_long(0);
 			    put_opt6_long(0); 
@@ -1102,14 +1164,14 @@
 	/* set reply message type */
 	*outmsgtypep = DHCP6REPLY;
 	
-	log6_packet(&state, "DHCPDECLINE", NULL, NULL);
+	log6_quiet(state, "DHCPDECLINE", NULL, NULL);
 
-	for (opt = state.packet_options; opt; opt = opt6_next(opt, state.end))
+	for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end))
 	  {
 	    void *ia_option, *ia_end;
 	    int made_ia = 0;
 	    	    
-	    for (check_ia(&state, opt, &ia_end, &ia_option);
+	    for (check_ia(state, opt, &ia_end, &ia_option);
 		 ia_option;
 		 ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24)) 
 	      {
@@ -1127,19 +1189,19 @@
 		  }
 		else
 		  /* make sure this host gets a different address next time. */
-		  for (; context; context = context->current)
-		    context->addr_epoch++;
+		  for (context_tmp = state->context; context_tmp; context_tmp = context_tmp->current)
+		    context_tmp->addr_epoch++;
 		
-		if ((lease = lease6_find(state.clid, state.clid_len, state.ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA,
-					 state.iaid, opt6_ptr(ia_option, 0))))
+		if ((lease = lease6_find(state->clid, state->clid_len, state->ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA,
+					 state->iaid, opt6_ptr(ia_option, 0))))
 		  lease_prune(lease, now);
 		else
 		  {
 		    if (!made_ia)
 		      {
-			o = new_opt6(state.ia_type);
-			put_opt6_long(state.iaid);
-			if (state.ia_type == OPTION6_IA_NA)
+			o = new_opt6(state->ia_type);
+			put_opt6_long(state->iaid);
+			if (state->ia_type == OPTION6_IA_NA)
 			  {
 			    put_opt6_long(0);
 			    put_opt6_long(0); 
@@ -1171,19 +1233,14 @@
 
     }
   
-  log_tags(tagif, state.xid);
-  
-  if (option_bool(OPT_LOG_OPTS))
-    log6_opts(0, state.xid, daemon->outpacket.iov_base + start_opts, daemon->outpacket.iov_base + save_counter(-1));
+  log_tags(tagif, state->xid);
+  log6_opts(0, state->xid, daemon->outpacket.iov_base + start_opts, daemon->outpacket.iov_base + save_counter(-1));
   
   return 1;
 
 }
 
-static struct dhcp_netid *add_options(struct state *state, 
-				      struct in6_addr *fallback, 
-				      struct dhcp_context *context, 
-				      int do_refresh)  
+static struct dhcp_netid *add_options(struct state *state, int do_refresh)  
 {
   void *oro;
   /* filter options based on tags, those we want get DHOPT_TAGOK bit set */
@@ -1231,8 +1288,8 @@
               /* zero means "self" (but not in vendorclass options.) */
               if (IN6_IS_ADDR_UNSPECIFIED(a))
                 {
-		  if (!add_local_addrs(context))
-		    put_opt6(fallback, IN6ADDRSZ);
+		  if (!add_local_addrs(state->context))
+		    put_opt6(state->fallback, IN6ADDRSZ);
 		}
               else
                 put_opt6(a, IN6ADDRSZ);
@@ -1246,12 +1303,12 @@
   if (daemon->port == NAMESERVER_PORT && !done_dns)
     {
       o = new_opt6(OPTION6_DNS_SERVER);
-      if (!add_local_addrs(context))
-	put_opt6(fallback, IN6ADDRSZ);
+      if (!add_local_addrs(state->context))
+	put_opt6(state->fallback, IN6ADDRSZ);
       end_opt6(o); 
     }
 
-  if (context && !done_refresh)
+  if (state->context && !done_refresh)
     {
       struct dhcp_context *c;
       unsigned int lease_time = 0xffffffff;
@@ -1259,7 +1316,7 @@
       /* Find the smallest lease tie of all contexts,
 	 subjext to the RFC-4242 stipulation that this must not 
 	 be less than 600. */
-      for (c = context; c; c = c->next)
+      for (c = state->context; c; c = c->next)
 	if (c->lease_time < lease_time)
 	  {
 	    if (c->lease_time < 600)
@@ -1503,7 +1560,7 @@
 }
 
 static void add_address(struct state *state, struct dhcp_context *context, unsigned int lease_time, void *ia_option, 
-			unsigned int *min_time, struct in6_addr *addr, int do_update, time_t now)
+			unsigned int *min_time, struct in6_addr *addr, time_t now)
 {
   unsigned int valid_time = 0, preferred_time = 0;
   int o = new_opt6(OPTION6_IAADDR);
@@ -1533,7 +1590,7 @@
 
   end_opt6(o);
   
-  if (do_update)
+  if (state->lease_allocate)
     update_leases(state, context, addr, valid_time, now);
 
   if ((lease = lease6_find_by_addr(addr, 128, 0)))
@@ -1557,21 +1614,22 @@
 	}
     }
 
-  log6_packet(state, do_update ? "DHCPREPLY" : "DHCPADVERTISE", addr, state->hostname);
+  log6_quiet(state, state->lease_allocate ? "DHCPREPLY" : "DHCPADVERTISE", addr, state->hostname);
 
 }
 
-static void mark_context_used(struct state *state, struct dhcp_context *context, struct in6_addr *addr)
+static void mark_context_used(struct state *state, struct in6_addr *addr)
 {
+  struct dhcp_context *context;
+
   /* Mark that we have an address for this prefix. */
 #ifdef OPTION6_PREFIX_CLASS
-  for (; context; context = context->current)
+  for (context = state->context; context; context = context->current)
     if (is_same_net6(addr, &context->start6, context->prefix) &&
 	(!state->send_prefix_class || state->send_prefix_class == prefix_class_from_context(context)))
       context->flags |= CONTEXT_USED;
 #else
-  (void)state; /* warning */
-  for (; context; context = context->current)
+  for (context = state->context; context; context = context->current)
     if (is_same_net6(addr, &context->start6, context->prefix))
       context->flags |= CONTEXT_USED;
 #endif
@@ -1594,7 +1652,7 @@
 
   if (lease->clid_len != state->clid_len || 
       memcmp(lease->clid, state->clid, state->clid_len) != 0 ||
-      lease->hwaddr_type != state->iaid)
+      lease->iaid != state->iaid)
     return 0;
 
   return 1;
@@ -1667,7 +1725,11 @@
 static void update_leases(struct state *state, struct dhcp_context *context, struct in6_addr *addr, unsigned int lease_time, time_t now)
 {
   struct dhcp_lease *lease = lease6_find_by_addr(addr, 128, 0);
+#ifdef HAVE_SCRIPT
   struct dhcp_netid *tagif = run_tag_if(state->tags);
+#endif
+
+  (void)context;
 
   if (!lease)
     lease = lease6_allocate(addr, state->ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA);
@@ -1675,7 +1737,8 @@
   if (lease)
     {
       lease_set_expires(lease, lease_time, now);
-      lease_set_hwaddr(lease, NULL, state->clid, 0, state->iaid, state->clid_len, now, 0);
+      lease_set_iaid(lease, state->iaid); 
+      lease_set_hwaddr(lease, state->mac, state->clid, state->mac_len, state->mac_type, state->clid_len, now, 0);
       lease_set_interface(lease, state->interface, now);
       if (state->hostname && state->ia_type == OPTION6_IA_NA)
 	{
@@ -1762,7 +1825,7 @@
   void *opt;
   char *desc = nest ? "nest" : "sent";
   
-  if (start_opts == end_opts)
+  if (!option_bool(OPT_LOG_OPTS) || start_opts == end_opts)
     return;
   
   for (opt = start_opts; opt; opt = opt6_next(opt, end_opts))
@@ -1821,6 +1884,12 @@
     }
 }		 
  
+static void log6_quiet(struct state *state, char *type, struct in6_addr *addr, char *string)
+{
+  if (option_bool(OPT_LOG_OPTS) || !option_bool(OPT_QUIET_DHCP6))
+    log6_packet(state, type, addr, string);
+}
+
 static void log6_packet(struct state *state, char *type, struct in6_addr *addr, char *string)
 {
   int clid_len = state->clid_len;
@@ -1912,4 +1981,130 @@
   return ret;
 } 
 
+void relay_upstream6(struct dhcp_relay *relay, ssize_t sz, struct in6_addr *peer_address, u32 scope_id)
+{
+  /* ->local is same value for all relays on ->current chain */
+  
+  struct all_addr from;
+  unsigned char *header;
+  unsigned char *inbuff = daemon->dhcp_packet.iov_base;
+  int msg_type = *inbuff;
+  int hopcount;
+  struct in6_addr multicast;
+  unsigned int maclen, mactype;
+  unsigned char mac[DHCP_CHADDR_MAX];
+
+  inet_pton(AF_INET6, ALL_SERVERS, &multicast);
+  get_client_mac(peer_address, scope_id, mac, &maclen, &mactype);
+
+  /* source address == relay address */
+  from.addr.addr6 = relay->local.addr.addr6;
+    
+  /* Get hop count from nested relayed message */ 
+  if (msg_type == DHCP6RELAYFORW)
+    hopcount = *((unsigned char *)inbuff+1) + 1;
+  else
+    hopcount = 0;
+
+  /* RFC 3315 HOP_COUNT_LIMIT */
+  if (hopcount > 32)
+    return;
+
+  save_counter(0);
+
+  if ((header = put_opt6(NULL, 34)))
+    {
+      int o;
+
+      header[0] = DHCP6RELAYFORW;
+      header[1] = hopcount;
+      memcpy(&header[2],  &relay->local.addr.addr6, IN6ADDRSZ);
+      memcpy(&header[18], peer_address, IN6ADDRSZ);
+ 
+      /* RFC-6939 */
+      if (maclen != 0)
+	{
+	  o = new_opt6(OPTION6_CLIENT_MAC);
+	  put_opt6_short(mactype);
+	  put_opt6(mac, maclen);
+	  end_opt6(o);
+	}
+      
+      o = new_opt6(OPTION6_RELAY_MSG);
+      put_opt6(inbuff, sz);
+      end_opt6(o);
+      
+      for (; relay; relay = relay->current)
+	{
+	  union mysockaddr to;
+	  
+	  to.sa.sa_family = AF_INET6;
+	  to.in6.sin6_addr = relay->server.addr.addr6;
+	  to.in6.sin6_port = htons(DHCPV6_SERVER_PORT);
+	  to.in6.sin6_flowinfo = 0;
+	  to.in6.sin6_scope_id = 0;
+
+	  if (IN6_ARE_ADDR_EQUAL(&relay->server.addr.addr6, &multicast))
+	    {
+	      int multicast_iface;
+	      if (!relay->interface || strchr(relay->interface, '*') ||
+		  (multicast_iface = if_nametoindex(relay->interface)) == 0 ||
+		  setsockopt(daemon->dhcp6fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, &multicast_iface, sizeof(multicast_iface)) == -1)
+		my_syslog(MS_DHCP | LOG_ERR, _("Cannot multicast to DHCPv6 server without correct interface"));
+	    }
+		
+	  send_from(daemon->dhcp6fd, 0, daemon->outpacket.iov_base, save_counter(0), &to, &from, 0);
+	  
+	  if (option_bool(OPT_LOG_OPTS))
+	    {
+	      inet_ntop(AF_INET6, &relay->local, daemon->addrbuff, ADDRSTRLEN);
+	      inet_ntop(AF_INET6, &relay->server, daemon->namebuff, ADDRSTRLEN);
+	      my_syslog(MS_DHCP | LOG_INFO, _("DHCP relay %s -> %s"), daemon->addrbuff, daemon->namebuff);
+	    }
+
+	  /* Save this for replies */
+	  relay->iface_index = scope_id;
+	}
+    }
+}
+
+unsigned short relay_reply6(struct sockaddr_in6 *peer, ssize_t sz, char *arrival_interface)
+{
+  struct dhcp_relay *relay;
+  struct in6_addr link;
+  unsigned char *inbuff = daemon->dhcp_packet.iov_base;
+  
+  /* must have at least msg_type+hopcount+link_address+peer_address+minimal size option
+     which is               1   +    1   +    16      +     16     + 2 + 2 = 38 */
+  
+  if (sz < 38 || *inbuff != DHCP6RELAYREPL)
+    return 0;
+  
+  memcpy(&link, &inbuff[2], IN6ADDRSZ); 
+  
+  for (relay = daemon->relay6; relay; relay = relay->next)
+    if (IN6_ARE_ADDR_EQUAL(&link, &relay->local.addr.addr6) &&
+	(!relay->interface || wildcard_match(relay->interface, arrival_interface)))
+      break;
+      
+  save_counter(0);
+
+  if (relay)
+    {
+      void *opt, *opts = inbuff + 34;
+      void *end = inbuff + sz;
+      for (opt = opts; opt; opt = opt6_next(opt, end))
+	if (opt6_type(opt) == OPTION6_RELAY_MSG && opt6_len(opt) > 0)
+	  {
+	    int encap_type = *((unsigned char *)opt6_ptr(opt, 0));
+	    put_opt6(opt6_ptr(opt, 0), opt6_len(opt));
+	    memcpy(&peer->sin6_addr, &inbuff[18], IN6ADDRSZ); 
+	    peer->sin6_scope_id = relay->iface_index;
+	    return encap_type == DHCP6RELAYREPL ? DHCPV6_SERVER_PORT : DHCPV6_CLIENT_PORT;
+	  }
+    }
+
+  return 0;
+}
+
 #endif
diff --git a/src/slaac.c b/src/slaac.c
index 0229d9e..43c2c38 100644
--- a/src/slaac.c
+++ b/src/slaac.c
@@ -200,7 +200,8 @@
 	    slaac->backoff = 0;
 	    gotone = 1;
 	    inet_ntop(AF_INET6, sender, daemon->addrbuff, ADDRSTRLEN);
-	    my_syslog(MS_DHCP | LOG_INFO, "SLAAC-CONFIRM(%s) %s %s", interface, daemon->addrbuff, lease->hostname); 
+	    if (!option_bool(OPT_QUIET_DHCP6))
+	      my_syslog(MS_DHCP | LOG_INFO, "SLAAC-CONFIRM(%s) %s %s", interface, daemon->addrbuff, lease->hostname); 
 	  }
   
   lease_update_dns(gotone);
diff --git a/src/tftp.c b/src/tftp.c
index d611dea..d752e71 100644
--- a/src/tftp.c
+++ b/src/tftp.c
@@ -49,9 +49,7 @@
   struct iovec iov;
   struct ifreq ifr;
   int is_err = 1, if_index = 0, mtu = 0;
-#ifdef HAVE_DHCP
   struct iname *tmp;
-#endif
   struct tftp_transfer *transfer;
   int port = daemon->start_tftp_port; /* may be zero to use ephemeral port */
 #if defined(IP_MTU_DISCOVER) && defined(IP_PMTUDISC_DONT)