BIND 10 trac826, updated. 0a707a589746a97c4cb8259f1e28f3c0b58e2352 [trac826] update

BIND 10 source code commits bind10-changes at lists.isc.org
Sun Oct 23 14:04:47 UTC 2011


The branch, trac826 has been updated
       via  0a707a589746a97c4cb8259f1e28f3c0b58e2352 (commit)
      from  b38415d5eb6577d2d998e92ac5968971613a1743 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 0a707a589746a97c4cb8259f1e28f3c0b58e2352
Author: Francis Dupont <fdupont at isc.org>
Date:   Sun Oct 23 16:04:30 2011 +0200

    [trac826] update
    
    Small changes in datasrc, updated Release.log and Debug.log, etc.

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   17 +
 AUTHORS => TODO                                    |    0 
 configure.ac                                       |   26 +-
 doc/Doxyfile                                       |    2 +-
 src/bin/auth/auth_messages.mes                     |    1 -
 src/bin/auth/query.cc                              |  115 ++-
 src/bin/auth/query.h                               |   43 +-
 src/bin/auth/tests/query_unittest.cc               |  269 +++-
 src/bin/dhcp6/iface_mgr.h                          |    1 -
 src/bin/msgq/Makefile.am                           |    2 +-
 src/bin/resolver/resolver.cc                       |    2 +-
 src/bin/stats/tests/Makefile.am                    |    3 +-
 src/bin/stats/tests/isc/log_messages/Makefile.am   |    7 -
 src/bin/stats/tests/isc/log_messages/__init__.py   |   18 -
 .../tests/isc/log_messages/stats_httpd_messages.py |   16 -
 .../stats/tests/isc/log_messages/stats_messages.py |   16 -
 src/bin/stats/tests/test_utils.py                  |   13 +-
 src/lib/asiodns/tests/io_service_unittest.cc       |    1 -
 src/lib/asiolink/io_endpoint.cc                    |    1 -
 src/lib/asiolink/tests/interval_timer_unittest.cc  |    1 -
 src/lib/asiolink/tests/io_endpoint_unittest.cc     |    1 -
 src/lib/asiolink/tests/tcp_endpoint_unittest.cc    |    2 -
 src/lib/asiolink/tests/udp_endpoint_unittest.cc    |    2 -
 src/lib/cache/message_cache.cc                     |    2 -
 src/lib/cache/rrset_cache.cc                       |    1 -
 src/lib/cache/tests/message_entry_unittest.cc      |    1 -
 src/lib/cache/tests/rrset_entry_unittest.cc        |    1 -
 src/lib/datasrc/database.cc                        |   15 +-
 src/lib/datasrc/tests/database_unittest.cc         |  142 ++-
 src/lib/datasrc/zone.h                             |   93 +-
 src/lib/dns/rdata/generic/nsec_47.cc               |    5 +
 src/lib/dns/rdata/generic/nsec_47.h                |   10 +
 src/lib/python/isc/datasrc/datasrc.cc              |    4 +
 src/lib/python/isc/datasrc/finder_inc.cc           |   57 +-
 src/lib/python/isc/datasrc/tests/datasrc_test.py   |   24 +
 src/lib/testutils/dnsmessage_test.h                |   28 +-
 tests/system/README                                |   53 +-
 tests/system/cleanall.sh                           |    2 +-
 tests/system/common/rndc.conf                      |   25 +
 tests/system/common/rndc.key                       |   22 +
 tests/system/conf.sh.in                            |   45 +-
 tests/system/ixfr/README                           |   86 ++
 tests/system/ixfr/b10-config.db.in                 |   23 +
 tests/system/ixfr/clean_ns.sh                      |   28 +
 tests/system/ixfr/common_tests.sh.in               |   78 +
 tests/system/ixfr/db.example.common                | 1556 ++++++++++++++++++++
 tests/system/ixfr/db.example.n0.in                 |   29 +
 tests/system/ixfr/db.example.n2.in                 |   28 +
 tests/system/ixfr/db.example.n2.refresh.in         |   28 +
 tests/system/ixfr/db.example.n4.in                 |   31 +
 tests/system/ixfr/db.example.n6.in                 |   29 +
 tests/system/ixfr/in-1/clean.sh                    |   28 +
 tests/system/ixfr/in-1/ns1/README                  |    3 +
 tests/system/ixfr/in-1/nsx2/README                 |    3 +
 tests/system/ixfr/in-1/setup.sh.in                 |   30 +
 tests/system/ixfr/in-1/tests.sh                    |   37 +
 tests/system/ixfr/in-2/clean.sh                    |   28 +
 tests/system/ixfr/in-2/ns1/README                  |    3 +
 tests/system/ixfr/in-2/nsx2/README                 |    3 +
 tests/system/ixfr/in-2/setup.sh.in                 |   29 +
 tests/system/ixfr/in-2/tests.sh                    |   81 +
 tests/system/ixfr/in-3/clean.sh                    |   28 +
 tests/system/ixfr/in-3/ns1/README                  |    3 +
 tests/system/ixfr/in-3/nsx2/README                 |    3 +
 tests/system/ixfr/in-3/setup.sh.in                 |   29 +
 tests/system/ixfr/in-3/tests.sh                    |   55 +
 tests/system/ixfr/in-4/clean.sh                    |   28 +
 tests/system/ixfr/in-4/ns1/README                  |    3 +
 tests/system/ixfr/in-4/nsx2/README                 |    3 +
 tests/system/ixfr/in-4/setup.sh.in                 |   30 +
 tests/system/ixfr/in-4/tests.sh                    |   53 +
 tests/system/ixfr/ixfr_init.sh.in                  |  330 +++++
 tests/system/ixfr/named_noixfr.conf                |   41 +
 tests/system/ixfr/named_nonotify.conf              |   40 +
 tests/system/ixfr/named_notify.conf                |   41 +
 tests/system/run.sh                                |  125 --
 tests/system/run.sh.in                             |  125 ++
 tests/system/start.pl                              |    4 +-
 win32build/VS2010/Debug.log                        |  173 +--
 win32build/VS2010/Release.log                      |   69 +-
 80 files changed, 3873 insertions(+), 560 deletions(-)
 copy AUTHORS => TODO (100%)
 delete mode 100644 src/bin/stats/tests/isc/log_messages/Makefile.am
 delete mode 100644 src/bin/stats/tests/isc/log_messages/__init__.py
 delete mode 100644 src/bin/stats/tests/isc/log_messages/stats_httpd_messages.py
 delete mode 100644 src/bin/stats/tests/isc/log_messages/stats_messages.py
 create mode 100644 tests/system/common/rndc.conf
 create mode 100644 tests/system/common/rndc.key
 create mode 100644 tests/system/ixfr/README
 create mode 100644 tests/system/ixfr/b10-config.db.in
 create mode 100644 tests/system/ixfr/clean_ns.sh
 create mode 100644 tests/system/ixfr/common_tests.sh.in
 create mode 100644 tests/system/ixfr/db.example.common
 create mode 100644 tests/system/ixfr/db.example.n0.in
 create mode 100644 tests/system/ixfr/db.example.n2.in
 create mode 100644 tests/system/ixfr/db.example.n2.refresh.in
 create mode 100644 tests/system/ixfr/db.example.n4.in
 create mode 100644 tests/system/ixfr/db.example.n6.in
 create mode 100644 tests/system/ixfr/in-1/clean.sh
 create mode 100644 tests/system/ixfr/in-1/ns1/README
 create mode 100644 tests/system/ixfr/in-1/nsx2/README
 create mode 100644 tests/system/ixfr/in-1/setup.sh.in
 create mode 100644 tests/system/ixfr/in-1/tests.sh
 create mode 100644 tests/system/ixfr/in-2/clean.sh
 create mode 100644 tests/system/ixfr/in-2/ns1/README
 create mode 100644 tests/system/ixfr/in-2/nsx2/README
 create mode 100644 tests/system/ixfr/in-2/setup.sh.in
 create mode 100644 tests/system/ixfr/in-2/tests.sh
 create mode 100644 tests/system/ixfr/in-3/clean.sh
 create mode 100644 tests/system/ixfr/in-3/ns1/README
 create mode 100644 tests/system/ixfr/in-3/nsx2/README
 create mode 100644 tests/system/ixfr/in-3/setup.sh.in
 create mode 100644 tests/system/ixfr/in-3/tests.sh
 create mode 100644 tests/system/ixfr/in-4/clean.sh
 create mode 100644 tests/system/ixfr/in-4/ns1/README
 create mode 100644 tests/system/ixfr/in-4/nsx2/README
 create mode 100644 tests/system/ixfr/in-4/setup.sh.in
 create mode 100644 tests/system/ixfr/in-4/tests.sh
 create mode 100644 tests/system/ixfr/ixfr_init.sh.in
 create mode 100644 tests/system/ixfr/named_noixfr.conf
 create mode 100644 tests/system/ixfr/named_nonotify.conf
 create mode 100644 tests/system/ixfr/named_notify.conf
 delete mode 100755 tests/system/run.sh
 create mode 100755 tests/system/run.sh.in

-----------------------------------------------------------------------
diff --git a/ChangeLog b/ChangeLog
index f1f8a9c..503964c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+301.	[func]		stephen
+	Add system test for IXFR over TCP.
+	(Trac #1213, git 68ee3818bcbecebf3e6789e81ea79d551a4ff3e8)
+
+300.	[func]*		tomek
+	libdhcp: DHCP packet library was implemented. Currently it handles
+	packet reception, option parsing, option generation and output
+	packet building. Generic and specialized classes for several
+	DHCPv6 options (IA_NA, IAADDR, address-list) are available. A
+	simple code was added that leverages libdhcp. It is a skeleton
+	DHCPv6 server. It receives incoming SOLICIT and REQUEST messages
+	and responds with proper ADVERTISE and REPLY. Note that since
+	LeaseManager is not implemented, server assigns the same
+	hardcoded lease for every client. This change removes existing
+	DHCPv6 echo server as it was only a proof of concept code.
+	(Trac #1186, git 67ea6de047d4dbd63c25fe7f03f5d5cc2452ad7d)
+
 299.	[build]		jreed
 	Do not install the libfake_session, libtestutils, or libbench
 	libraries. They are used by tests within the source tree.
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..e69de29
diff --git a/configure.ac b/configure.ac
index b0f5f45..1fdf5bf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ([2.59])
-AC_INIT(bind10-devel, 20110809, bind10-dev at isc.org)
+AC_INIT(bind10-devel, 20111021, bind10-dev at isc.org)
 AC_CONFIG_SRCDIR(README)
 AM_INIT_AUTOMAKE
 AC_CONFIG_HEADERS([config.h])
@@ -770,6 +770,8 @@ fi
 #
 AC_PATH_PROGS(PERL, perl5 perl)
 AC_SUBST(PERL)
+AC_PATH_PROGS(AWK, gawk awk)
+AC_SUBST(AWK)
 
 AC_ARG_ENABLE(man, [AC_HELP_STRING([--enable-man],
   [regenerate man pages [default=no]])], enable_man=yes, enable_man=no)
@@ -870,6 +872,8 @@ AC_CONFIG_FILES([Makefile
                  src/lib/dns/python/Makefile
                  src/lib/dns/python/tests/Makefile
                  src/lib/dns/benchmarks/Makefile
+                 src/lib/dhcp/Makefile
+                 src/lib/dhcp/tests/Makefile
                  src/lib/exceptions/Makefile
                  src/lib/exceptions/tests/Makefile
                  src/lib/datasrc/Makefile
@@ -965,9 +969,22 @@ AC_OUTPUT([doc/version.ent
            src/lib/util/python/gen_wiredata.py
            src/lib/server_common/tests/data_path.h
            tests/system/conf.sh
+           tests/system/run.sh
            tests/system/glue/setup.sh
            tests/system/glue/nsx1/b10-config.db
            tests/system/bindctl/nsx1/b10-config.db.template
+           tests/system/ixfr/db.example.n0
+           tests/system/ixfr/db.example.n2
+           tests/system/ixfr/db.example.n2.refresh
+           tests/system/ixfr/db.example.n4
+           tests/system/ixfr/db.example.n6
+           tests/system/ixfr/ixfr_init.sh
+           tests/system/ixfr/b10-config.db
+           tests/system/ixfr/common_tests.sh
+           tests/system/ixfr/in-1/setup.sh
+           tests/system/ixfr/in-2/setup.sh
+           tests/system/ixfr/in-3/setup.sh
+           tests/system/ixfr/in-4/setup.sh
           ], [
            chmod +x src/bin/cmdctl/run_b10-cmdctl.sh
            chmod +x src/bin/xfrin/run_b10-xfrin.sh
@@ -996,6 +1013,13 @@ AC_OUTPUT([doc/version.ent
            chmod +x src/lib/util/python/gen_wiredata.py
            chmod +x src/lib/python/isc/log/tests/log_console.py
            chmod +x tests/system/conf.sh
+           chmod +x tests/system/run.sh
+           chmod +x tests/system/ixfr/ixfr_init.sh
+           chmod +x tests/system/ixfr/common_tests.sh
+           chmod +x tests/system/ixfr/in-1/setup.sh
+           chmod +x tests/system/ixfr/in-2/setup.sh
+           chmod +x tests/system/ixfr/in-3/setup.sh
+           chmod +x tests/system/ixfr/in-4/setup.sh
           ])
 AC_OUTPUT
 
diff --git a/doc/Doxyfile b/doc/Doxyfile
index 8be9098..ee5aaf8 100644
--- a/doc/Doxyfile
+++ b/doc/Doxyfile
@@ -574,7 +574,7 @@ INPUT                  = ../src/lib/exceptions ../src/lib/cc \
     ../src/lib/log/compiler ../src/lib/asiolink/ ../src/lib/nsas \
     ../src/lib/testutils ../src/lib/cache ../src/lib/server_common/ \
     ../src/bin/sockcreator/ ../src/lib/util/ \
-    ../src/lib/resolve ../src/lib/acl ../src/bin/dhcp6
+    ../src/lib/resolve ../src/lib/acl ../src/bin/dhcp6 ../src/lib/dhcp
 
 # This tag can be used to specify the character encoding of the source files
 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
diff --git a/src/bin/auth/auth_messages.mes b/src/bin/auth/auth_messages.mes
index 1ffa687..4706690 100644
--- a/src/bin/auth/auth_messages.mes
+++ b/src/bin/auth/auth_messages.mes
@@ -260,4 +260,3 @@ NOTIFY request will not be honored.
 % AUTH_INVALID_STATISTICS_DATA invalid specification of statistics data specified
 An error was encountered when the authoritiative server specified
 statistics data which is invalid for the auth specification file.
-
diff --git a/src/bin/auth/query.cc b/src/bin/auth/query.cc
index ab6404e..5e8a9b1 100644
--- a/src/bin/auth/query.cc
+++ b/src/bin/auth/query.cc
@@ -12,6 +12,7 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
+#include <algorithm>            // for std::max
 #include <vector>
 #include <boost/foreach.hpp>
 
@@ -31,24 +32,24 @@ namespace isc {
 namespace auth {
 
 void
-Query::getAdditional(ZoneFinder& zone, const RRset& rrset) const {
+Query::addAdditional(ZoneFinder& zone, const RRset& rrset) {
     RdataIteratorPtr rdata_iterator(rrset.getRdataIterator());
     for (; !rdata_iterator->isLast(); rdata_iterator->next()) {
         const Rdata& rdata(rdata_iterator->getCurrent());
         if (rrset.getType() == RRType::NS()) {
             // Need to perform the search in the "GLUE OK" mode.
             const generic::NS& ns = dynamic_cast<const generic::NS&>(rdata);
-            findAddrs(zone, ns.getNSName(), ZoneFinder::FIND_GLUE_OK);
+            addAdditionalAddrs(zone, ns.getNSName(), ZoneFinder::FIND_GLUE_OK);
         } else if (rrset.getType() == RRType::MX()) {
             const generic::MX& mx(dynamic_cast<const generic::MX&>(rdata));
-            findAddrs(zone, mx.getMXName());
+            addAdditionalAddrs(zone, mx.getMXName());
         }
     }
 }
 
 void
-Query::findAddrs(ZoneFinder& zone, const Name& qname,
-                 const ZoneFinder::FindOptions options) const
+Query::addAdditionalAddrs(ZoneFinder& zone, const Name& qname,
+                          const ZoneFinder::FindOptions options)
 {
     // Out of zone name
     NameComparisonResult result = zone.getOrigin().compare(qname);
@@ -87,12 +88,12 @@ Query::findAddrs(ZoneFinder& zone, const Name& qname,
 }
 
 void
-Query::putSOA(ZoneFinder& zone) const {
-    ZoneFinder::FindResult soa_result(zone.find(zone.getOrigin(),
+Query::addSOA(ZoneFinder& finder) {
+    ZoneFinder::FindResult soa_result(finder.find(finder.getOrigin(),
         RRType::SOA(), NULL, dnssec_opt_));
     if (soa_result.code != ZoneFinder::SUCCESS) {
         isc_throw(NoSOA, "There's no SOA record in zone " <<
-            zone.getOrigin().toText());
+            finder.getOrigin().toText());
     } else {
         /*
          * FIXME:
@@ -104,26 +105,88 @@ Query::putSOA(ZoneFinder& zone) const {
     }
 }
 
+// Note: unless the data source client implementation or the zone content
+// is broken, 'nsec' should be a valid NSEC RR.  Likewise, the call to
+// find() in this method should result in NXDOMAIN and an NSEC RR that proves
+// the non existent of matching wildcard.  If these assumptions aren't met
+// due to a buggy data source implementation or a broken zone, we'll let
+// underlying libdns++ modules throw an exception, which would result in
+// either an SERVFAIL response or just ignoring the query.  We at least prevent
+// a complete crash due to such broken behavior.
 void
-Query::getAuthAdditional(ZoneFinder& zone) const {
+Query::addNXDOMAINProof(ZoneFinder& finder, ConstRRsetPtr nsec) {
+    if (nsec->getRdataCount() == 0) {
+        isc_throw(BadNSEC, "NSEC for NXDOMAIN is empty");
+        return;
+    }
+
+    // Add the NSEC proving NXDOMAIN to the authority section.
+    response_.addRRset(Message::SECTION_AUTHORITY,
+                       boost::const_pointer_cast<RRset>(nsec), dnssec_);
+
+    // Next, identify the best possible wildcard name that would match
+    // the query name.  It's the longer common suffix with the qname
+    // between the owner or the next domain of the NSEC that proves NXDOMAIN,
+    // prefixed by the wildcard label, "*".  For example, for query name
+    // a.b.example.com, if the NXDOMAIN NSEC is
+    // b.example.com. NSEC c.example.com., the longer suffix is b.example.com.,
+    // and the best possible wildcard is *.b.example.com.  If the NXDOMAIN
+    // NSEC is a.example.com. NSEC c.b.example.com., the longer suffix
+    // is the next domain of the NSEC, and we get the same wildcard name.
+    const int qlabels = qname_.getLabelCount();
+    const int olabels = qname_.compare(nsec->getName()).getCommonLabels();
+    const int nlabels = qname_.compare(
+        dynamic_cast<const generic::NSEC&>(nsec->getRdataIterator()->
+                                           getCurrent()).
+        getNextName()).getCommonLabels();
+    const int common_labels = std::max(olabels, nlabels);
+    const Name wildname(Name("*").concatenate(qname_.split(qlabels -
+                                                           common_labels)));
+
+    // Confirm the wildcard doesn't exist (this should result in NXDOMAIN;
+    // otherwise we shouldn't have got NXDOMAIN for the original query in
+    // the first place).
+    const ZoneFinder::FindResult fresult = finder.find(wildname,
+                                                       RRType::NSEC(), NULL,
+                                                       dnssec_opt_);
+    if (fresult.code != ZoneFinder::NXDOMAIN || !fresult.rrset ||
+        fresult.rrset->getRdataCount() == 0) {
+        isc_throw(BadNSEC, "Unexpected result for wildcard NXDOMAIN proof");
+        return;
+    }
+
+    // Add the (no-) wildcard proof only when it's different from the NSEC
+    // that proves NXDOMAIN; sometimes they can be the same.
+    // Note: name comparison is relatively expensive.  When we are at the
+    // stage of performance optimization, we should consider optimizing this
+    // for some optimized data source implementations.
+    if (nsec->getName() != fresult.rrset->getName()) {
+        response_.addRRset(Message::SECTION_AUTHORITY,
+                           boost::const_pointer_cast<RRset>(fresult.rrset),
+                           dnssec_);
+    }
+}
+
+void
+Query::addAuthAdditional(ZoneFinder& finder) {
     // Fill in authority and addtional sections.
-    ZoneFinder::FindResult ns_result = zone.find(zone.getOrigin(),
-                                                 RRType::NS(), NULL,
-                                                 dnssec_opt_);
+    ZoneFinder::FindResult ns_result = finder.find(finder.getOrigin(),
+                                                   RRType::NS(), NULL,
+                                                   dnssec_opt_);
     // zone origin name should have NS records
     if (ns_result.code != ZoneFinder::SUCCESS) {
         isc_throw(NoApexNS, "There's no apex NS records in zone " <<
-                zone.getOrigin().toText());
+                finder.getOrigin().toText());
     } else {
         response_.addRRset(Message::SECTION_AUTHORITY,
             boost::const_pointer_cast<RRset>(ns_result.rrset), dnssec_);
         // Handle additional for authority section
-        getAdditional(zone, *ns_result.rrset);
+        addAdditional(finder, *ns_result.rrset);
     }
 }
 
 void
-Query::process() const {
+Query::process() {
     bool keep_doing = true;
     const bool qtype_is_any = (qtype_ == RRType::ANY());
 
@@ -141,6 +204,7 @@ Query::process() const {
         response_.setRcode(Rcode::REFUSED());
         return;
     }
+    ZoneFinder& zfinder = *result.zone_finder;
 
     // Found a zone which is the nearest ancestor to QNAME, set the AA bit
     response_.setHeaderFlag(Message::HEADERFLAG_AA);
@@ -149,8 +213,7 @@ Query::process() const {
         keep_doing = false;
         std::auto_ptr<RRsetList> target(qtype_is_any ? new RRsetList : NULL);
         const ZoneFinder::FindResult db_result(
-            result.zone_finder->find(qname_, qtype_, target.get(),
-                                     dnssec_opt_));
+            zfinder.find(qname_, qtype_, target.get(), dnssec_opt_));
         switch (db_result.code) {
             case ZoneFinder::DNAME: {
                 // First, put the dname into the answer
@@ -217,14 +280,14 @@ Query::process() const {
                         response_.addRRset(Message::SECTION_ANSWER, rrset,
                                            dnssec_);
                         // Handle additional for answer section
-                        getAdditional(*result.zone_finder, *rrset.get());
+                        addAdditional(*result.zone_finder, *rrset.get());
                     }
                 } else {
                     response_.addRRset(Message::SECTION_ANSWER,
                         boost::const_pointer_cast<RRset>(db_result.rrset),
                         dnssec_);
                     // Handle additional for answer section
-                    getAdditional(*result.zone_finder, *db_result.rrset);
+                    addAdditional(*result.zone_finder, *db_result.rrset);
                 }
                 // If apex NS records haven't been provided in the answer
                 // section, insert apex NS records into the authority section
@@ -234,7 +297,7 @@ Query::process() const {
                     db_result.code != ZoneFinder::SUCCESS ||
                     (qtype_ != RRType::NS() && !qtype_is_any))
                 {
-                    getAuthAdditional(*result.zone_finder);
+                    addAuthAdditional(*result.zone_finder);
                 }
                 break;
             case ZoneFinder::DELEGATION:
@@ -242,16 +305,20 @@ Query::process() const {
                 response_.addRRset(Message::SECTION_AUTHORITY,
                     boost::const_pointer_cast<RRset>(db_result.rrset),
                     dnssec_);
-                getAdditional(*result.zone_finder, *db_result.rrset);
+                addAdditional(*result.zone_finder, *db_result.rrset);
                 break;
             case ZoneFinder::NXDOMAIN:
-                // Just empty answer with SOA in authority section
                 response_.setRcode(Rcode::NXDOMAIN());
-                putSOA(*result.zone_finder);
+                addSOA(*result.zone_finder);
+
+                // If DNSSEC proof is requested and we've got it, add it.
+                if (dnssec_ && db_result.rrset) {
+                    addNXDOMAINProof(zfinder, db_result.rrset);
+                }
                 break;
             case ZoneFinder::NXRRSET:
                 // Just empty answer with SOA in authority section
-                putSOA(*result.zone_finder);
+                addSOA(*result.zone_finder);
                 break;
             default:
                 // These are new result codes (WILDCARD and WILDCARD_NXRRSET)
diff --git a/src/bin/auth/query.h b/src/bin/auth/query.h
index 0ebbed8..f43dc77 100644
--- a/src/bin/auth/query.h
+++ b/src/bin/auth/query.h
@@ -69,10 +69,16 @@ private:
     /// Adds a SOA of the zone into the authority zone of response_.
     /// Can throw NoSOA.
     ///
-    void putSOA(isc::datasrc::ZoneFinder& zone) const;
+    void addSOA(isc::datasrc::ZoneFinder& finder);
+
+    /// Add NSEC RRs that prove an NXDOMAIN result.
+    ///
+    /// This corresponds to Section 3.1.3.2 of RFC 4035.
+    void addNXDOMAINProof(isc::datasrc::ZoneFinder& finder,
+                          isc::dns::ConstRRsetPtr nsec);
 
     /// \brief Look up additional data (i.e., address records for the names
-    /// included in NS or MX records).
+    /// included in NS or MX records) and add them to the additional section.
     ///
     /// Note: Any additional data which has already been provided in the
     /// answer section (i.e., if the original query happend to be for the
@@ -85,8 +91,8 @@ private:
     /// query is to be found.
     /// \param rrset The RRset (i.e., NS or MX rrset) which require additional
     /// processing.
-    void getAdditional(isc::datasrc::ZoneFinder& zone,
-                       const isc::dns::RRset& rrset) const;
+    void addAdditional(isc::datasrc::ZoneFinder& zone,
+                       const isc::dns::RRset& rrset);
 
     /// \brief Find address records for a specified name.
     ///
@@ -104,13 +110,13 @@ private:
     /// be found.
     /// \param qname The name in rrset RDATA.
     /// \param options The search options.
-    void findAddrs(isc::datasrc::ZoneFinder& zone,
-                   const isc::dns::Name& qname,
-                   const isc::datasrc::ZoneFinder::FindOptions options
-                   = isc::datasrc::ZoneFinder::FIND_DEFAULT) const;
+    void addAdditionalAddrs(isc::datasrc::ZoneFinder& zone,
+                            const isc::dns::Name& qname,
+                            const isc::datasrc::ZoneFinder::FindOptions options
+                            = isc::datasrc::ZoneFinder::FIND_DEFAULT);
 
     /// \brief Look up a zone's NS RRset and their address records for an
-    /// authoritative answer.
+    /// authoritative answer, and add them to the additional section.
     ///
     /// On returning an authoritative answer, insert a zone's NS into the
     /// authority section and AAAA/A RRs of each of the NS RDATA into the
@@ -125,9 +131,9 @@ private:
     /// include AAAA/A RRs under a zone cut in additional section. (BIND 9
     /// excludes under-cut RRs; NSD include them.)
     ///
-    /// \param zone The \c ZoneFinder through which the NS and additional data
-    /// for the query are to be found.
-    void getAuthAdditional(isc::datasrc::ZoneFinder& zone) const;
+    /// \param finder The \c ZoneFinder through which the NS and additional
+    /// data for the query are to be found.
+    void addAuthAdditional(isc::datasrc::ZoneFinder& finder);
 
 public:
     /// Constructor from query parameters.
@@ -176,7 +182,7 @@ public:
     /// This might throw BadZone or any of its specific subclasses, but that
     /// shouldn't happen in real-life (as BadZone means wrong data, it should
     /// have been rejected upon loading).
-    void process() const;
+    void process();
 
     /// \short Bad zone data encountered.
     ///
@@ -210,6 +216,17 @@ public:
         {}
     };
 
+    /// An invalid result is given when a valid NSEC is expected
+    ///
+    // This can only happen when the underlying data source implementation or
+    /// the zone is broken.  By throwing an exception we treat such cases
+    /// as SERVFAIL.
+    struct BadNSEC : public BadZone {
+        BadNSEC(const char* file, size_t line, const char* what) :
+            BadZone(file, line, what)
+        {}
+    };
+
 private:
     const isc::datasrc::DataSourceClient& datasrc_client_;
     const isc::dns::Name& qname_;
diff --git a/src/bin/auth/tests/query_unittest.cc b/src/bin/auth/tests/query_unittest.cc
index b2d1094..c5eb231 100644
--- a/src/bin/auth/tests/query_unittest.cc
+++ b/src/bin/auth/tests/query_unittest.cc
@@ -17,6 +17,7 @@
 #include <map>
 
 #include <boost/bind.hpp>
+#include <boost/scoped_ptr.hpp>
 
 #include <dns/masterload.h>
 #include <dns/message.h>
@@ -91,8 +92,49 @@ const char* const other_zone_rrs =
     "cnamemailer.example.com. 3600 IN CNAME www.example.com.\n"
     "cnamemx.example.com. 3600 IN MX 10 cnamemailer.example.com.\n"
     "mx.delegation.example.com. 3600 IN A 192.0.2.100\n";
-
-// This is a mock Zone class for testing.
+// Used in NXDOMAIN proof test.  We are going to test some unusual case where
+// the best possible wildcard is below the "next domain" of the NSEC RR that
+// proves the NXDOMAIN, i.e.,
+// mx.example.com. (exist)
+// (.no.example.com. (qname, NXDOMAIN)
+// ).no.example.com. (exist)
+// *.no.example.com. (best possible wildcard, not exist)
+const char* const no_txt =
+    ").no.example.com. 3600 IN AAAA 2001:db8::53\n";
+// NSEC records.
+const char* const nsec_apex_txt =
+    "example.com. 3600 IN NSEC cname.example.com. NS SOA NSEC RRSIG\n";
+const char* const nsec_mx_txt =
+    "mx.example.com. 3600 IN NSEC ).no.example.com. MX NSEC RRSIG\n";
+const char* const nsec_no_txt =
+    ").no.example.com. 3600 IN NSEC nz.no.example.com. AAAA NSEC RRSIG\n";
+
+// We'll also test the case where a single NSEC proves both NXDOMAIN and the
+// non existence of wildcard.  The following records will be used for that
+// test.
+// ).no.example.com. (exist, whose NSEC proves everything)
+// *.no.example.com. (best possible wildcard, not exist)
+// nx.no.example.com. (NXDOMAIN)
+// nz.no.example.com. (exist)
+const char* const nz_txt =
+    "nz.no.example.com. 3600 IN AAAA 2001:db8::5300\n";
+const char* const nsec_nz_txt =
+    "nz.no.example.com. 3600 IN NSEC noglue.example.com. AAAA NSEC RRSIG\n";
+const char* const nsec_nxdomain_txt =
+    "noglue.example.com. 3600 IN NSEC www.example.com. A\n";
+
+// A helper function that generates a textual representation of RRSIG RDATA
+// for the given covered type.  The resulting RRSIG may not necessarily make
+// sense in terms of the DNSSEC protocol, but for our testing purposes it's
+// okay.
+string
+getCommonRRSIGText(const string& type) {
+    return (type +
+            string(" 5 3 3600 20000101000000 20000201000000 12345 "
+                   "example.com. FAKEFAKEFAKE"));
+}
+
+// This is a mock Zone Finder class for testing.
 // It is a derived class of ZoneFinder for the convenient of tests.
 // Its find() method emulates the common behavior of protocol compliant
 // ZoneFinder classes, but simplifies some minor cases and also supports broken
@@ -112,16 +154,24 @@ public:
         has_SOA_(true),
         has_apex_NS_(true),
         rrclass_(RRClass::IN()),
-        include_rrsig_anyway_(false)
+        include_rrsig_anyway_(false),
+        nsec_name_(origin_)
     {
         stringstream zone_stream;
         zone_stream << soa_txt << zone_ns_txt << ns_addrs_txt <<
             delegation_txt << mx_txt << www_a_txt << cname_txt <<
             cname_nxdom_txt << cname_out_txt << dname_txt << dname_a_txt <<
-            other_zone_rrs;
+            other_zone_rrs << no_txt << nz_txt <<
+            nsec_apex_txt << nsec_mx_txt << nsec_no_txt << nsec_nz_txt <<
+            nsec_nxdomain_txt;
 
         masterLoad(zone_stream, origin_, rrclass_,
                    boost::bind(&MockZoneFinder::loadRRset, this, _1));
+
+        empty_nsec_rrset_ = ConstRRsetPtr(new RRset(Name::ROOT_NAME(),
+                                                    RRClass::IN(),
+                                                    RRType::NSEC(),
+                                                    RRTTL(3600)));
     }
     virtual isc::dns::Name getOrigin() const { return (origin_); }
     virtual isc::dns::RRClass getClass() const { return (rrclass_); }
@@ -141,10 +191,24 @@ public:
     // Turn this on if you want it to return RRSIGs regardless of FIND_GLUE_OK
     void setIncludeRRSIGAnyway(bool on) { include_rrsig_anyway_ = on; }
 
+    // Once called, this "faked" result will be returned when NSEC is expected
+    // for the specified query name.
+    void setNSECResult(const Name& nsec_name, Result code,
+                       ConstRRsetPtr rrset)
+    {
+        nsec_name_ = nsec_name;
+        nsec_result_.reset(new ZoneFinder::FindResult(code, rrset));
+    }
+
     Name findPreviousName(const Name&) const {
         isc_throw(isc::NotImplemented, "Mock doesn't support previous name");
     }
 
+public:
+    // We allow the tests to use these for convenience
+    ConstRRsetPtr delegation_rrset_;
+    ConstRRsetPtr empty_nsec_rrset_;
+
 private:
     typedef map<RRType, ConstRRsetPtr> RRsetStore;
     typedef map<Name, RRsetStore> Domains;
@@ -160,23 +224,17 @@ private:
         // Add some signatures
         } else if (rrset->getName() == Name("example.com.") &&
                    rrset->getType() == RRType::NS()) {
-            rrset->addRRsig(RdataPtr(new generic::RRSIG("NS 5 3 3600 "
-                                                        "20000101000000 "
-                                                        "20000201000000 "
-                                                        "12345 example.com. "
-                                                        "FAKEFAKEFAKE")));
-        } else if (rrset->getType() == RRType::A()) {
-            rrset->addRRsig(RdataPtr(new generic::RRSIG("A 5 3 3600 "
-                                                        "20000101000000 "
-                                                        "20000201000000 "
-                                                        "12345 example.com. "
-                                                        "FAKEFAKEFAKE")));
-        } else if (rrset->getType() == RRType::AAAA()) {
-            rrset->addRRsig(RdataPtr(new generic::RRSIG("AAAA 5 3 3600 "
-                                                        "20000101000000 "
-                                                        "20000201000000 "
-                                                        "12345 example.com. "
-                                                        "FAKEFAKEFAKE")));
+            // For NS, we only have RRSIG for the origin name.
+            rrset->addRRsig(RdataPtr(new generic::RRSIG(
+                                         getCommonRRSIGText("NS"))));
+        } else {
+            // For others generate RRSIG unconditionally.  Technically this
+            // is wrong because we shouldn't have it for names under a zone
+            // cut.  But in our tests that doesn't matter, so we add them
+            // just for simplicity.
+            rrset->addRRsig(RdataPtr(new generic::RRSIG(
+                                         getCommonRRSIGText(rrset->getType().
+                                                            toText()))));
         }
     }
 
@@ -186,10 +244,12 @@ private:
     const Name dname_name_;
     bool has_SOA_;
     bool has_apex_NS_;
-    ConstRRsetPtr delegation_rrset_;
     ConstRRsetPtr dname_rrset_;
     const RRClass rrclass_;
     bool include_rrsig_anyway_;
+    // The following two will be used for faked NSEC cases
+    Name nsec_name_;
+    boost::scoped_ptr<ZoneFinder::FindResult> nsec_result_;
 };
 
 ZoneFinder::FindResult
@@ -267,7 +327,33 @@ MockZoneFinder::find(const Name& name, const RRType& type,
         return (FindResult(NXRRSET, RRsetPtr()));
     }
 
-    // query name isn't found in our domains.  returns NXDOMAIN.
+    // query name isn't found in our domains.  This is an NXDOMAIN case.
+    // If we need DNSSEC proof, find the "previous name" that has an NSEC RR
+    // and return NXDOMAIN with the found NSEC.  Otherwise, just return the
+    // NXDOMAIN code and NULL.  If DNSSEC proof is requested but no NSEC is
+    // found, we return NULL, too.  (For simplicity under the test conditions
+    // we don't care about pathological cases such as the name is "smaller"
+    // than the origin)
+    if ((options & FIND_DNSSEC) != 0) {
+        // Emulate a broken DataSourceClient for some special names.
+        if (nsec_result_ && nsec_name_ == name) {
+            return (*nsec_result_);
+        }
+
+        // Normal case
+        // XXX: some older g++ complains about operator!= if we use
+        // const_reverse_iterator
+        for (Domains::reverse_iterator it = domains_.rbegin();
+             it != domains_.rend();
+             ++it) {
+            RRsetStore::const_iterator nsec_it;
+            if ((*it).first < name &&
+                (nsec_it = (*it).second.find(RRType::NSEC()))
+                != (*it).second.end()) {
+                return (FindResult(NXDOMAIN, (*nsec_it).second));
+            }
+        }
+    }
     return (FindResult(NXDOMAIN, RRsetPtr()));
 }
 
@@ -433,8 +519,9 @@ TEST_F(QueryTest, exactAnyMatch) {
     EXPECT_NO_THROW(Query(memory_client, Name("noglue.example.com"),
                           RRType::ANY(), response).process());
 
-    responseCheck(response, Rcode::NOERROR(), AA_FLAG, 1, 3, 2,
-                  "noglue.example.com. 3600 IN A 192.0.2.53\n",
+    responseCheck(response, Rcode::NOERROR(), AA_FLAG, 2, 3, 2,
+                  (string("noglue.example.com. 3600 IN A 192.0.2.53\n") +
+                   string(nsec_nxdomain_txt)).c_str(),
                   zone_ns_txt,
                   "glue.delegation.example.com. 3600 IN A 192.0.2.153\n"
                   "glue.delegation.example.com. 3600 IN AAAA 2001:db8::53\n");
@@ -445,19 +532,17 @@ TEST_F(QueryTest, apexAnyMatch) {
     // in the answer section from the additional.
     EXPECT_NO_THROW(Query(memory_client, Name("example.com"),
                           RRType::ANY(), response).process());
-    responseCheck(response, Rcode::NOERROR(), AA_FLAG, 4, 0, 3,
-                  "example.com. 3600 IN SOA . . 0 0 0 0 0\n"
-                  "example.com. 3600 IN NS glue.delegation.example.com.\n"
-                  "example.com. 3600 IN NS noglue.example.com.\n"
-                  "example.com. 3600 IN NS example.net.\n",
+    responseCheck(response, Rcode::NOERROR(), AA_FLAG, 5, 0, 3,
+                  (string(soa_txt) + string(zone_ns_txt) +
+                   string(nsec_apex_txt)).c_str(),
                   NULL, ns_addrs_txt, mock_finder->getOrigin());
 }
 
 TEST_F(QueryTest, mxANYMatch) {
     EXPECT_NO_THROW(Query(memory_client, Name("mx.example.com"),
                           RRType::ANY(), response).process());
-    responseCheck(response, Rcode::NOERROR(), AA_FLAG, 3, 3, 4,
-                  mx_txt, zone_ns_txt,
+    responseCheck(response, Rcode::NOERROR(), AA_FLAG, 4, 3, 4,
+                  (string(mx_txt) + string(nsec_mx_txt)).c_str(), zone_ns_txt,
                   (string(ns_addrs_txt) + string(www_a_txt)).c_str());
 }
 
@@ -502,6 +587,128 @@ TEST_F(QueryTest, nxdomain) {
                   NULL, soa_txt, NULL, mock_finder->getOrigin());
 }
 
+TEST_F(QueryTest, nxdomainWithNSEC) {
+    // NXDOMAIN with DNSSEC proof.  We should have SOA, NSEC that proves
+    // NXDOMAIN and NSEC that proves nonexistence of matching wildcard,
+    // as well as their RRSIGs.
+    EXPECT_NO_THROW(Query(memory_client, Name("nxdomain.example.com"), qtype,
+                          response, true).process());
+    responseCheck(response, Rcode::NXDOMAIN(), AA_FLAG, 0, 6, 0,
+                  NULL, (string(soa_txt) +
+                         string("example.com. 3600 IN RRSIG ") +
+                         getCommonRRSIGText("SOA") + "\n" +
+                         string(nsec_nxdomain_txt) + "\n" +
+                         string("noglue.example.com. 3600 IN RRSIG ") +
+                         getCommonRRSIGText("NSEC") + "\n" +
+                         string(nsec_apex_txt) + "\n" +
+                         string("example.com. 3600 IN RRSIG ") +
+                         getCommonRRSIGText("NSEC")).c_str(),
+                  NULL, mock_finder->getOrigin());
+}
+
+TEST_F(QueryTest, nxdomainWithNSEC2) {
+    // See comments about no_txt.  In this case the best possible wildcard
+    // is derived from the next domain of the NSEC that proves NXDOMAIN, and
+    // the NSEC to provide the non existence of wildcard is different from
+    // the first NSEC.
+    Query(memory_client, Name("(.no.example.com"), qtype,
+          response, true).process();
+    responseCheck(response, Rcode::NXDOMAIN(), AA_FLAG, 0, 6, 0,
+                  NULL, (string(soa_txt) +
+                         string("example.com. 3600 IN RRSIG ") +
+                         getCommonRRSIGText("SOA") + "\n" +
+                         string(nsec_mx_txt) + "\n" +
+                         string("mx.example.com. 3600 IN RRSIG ") +
+                         getCommonRRSIGText("NSEC") + "\n" +
+                         string(nsec_no_txt) + "\n" +
+                         string(").no.example.com. 3600 IN RRSIG ") +
+                         getCommonRRSIGText("NSEC")).c_str(),
+                  NULL, mock_finder->getOrigin());
+}
+
+TEST_F(QueryTest, nxdomainWithNSECDuplicate) {
+    // See comments about nz_txt.  In this case we only need one NSEC,
+    // which proves both NXDOMAIN and the non existence of wildcard.
+    Query(memory_client, Name("nx.no.example.com"), qtype,
+          response, true).process();
+    responseCheck(response, Rcode::NXDOMAIN(), AA_FLAG, 0, 4, 0,
+                  NULL, (string(soa_txt) +
+                         string("example.com. 3600 IN RRSIG ") +
+                         getCommonRRSIGText("SOA") + "\n" +
+                         string(nsec_no_txt) + "\n" +
+                         string(").no.example.com. 3600 IN RRSIG ") +
+                         getCommonRRSIGText("NSEC")).c_str(),
+                  NULL, mock_finder->getOrigin());
+}
+
+TEST_F(QueryTest, nxdomainBadNSEC1) {
+    // ZoneFinder::find() returns NXDOMAIN with non NSEC RR.
+    mock_finder->setNSECResult(Name("badnsec.example.com"),
+                               ZoneFinder::NXDOMAIN,
+                               mock_finder->delegation_rrset_);
+    EXPECT_THROW(Query(memory_client, Name("badnsec.example.com"), qtype,
+                       response, true).process(),
+                 std::bad_cast);
+}
+
+TEST_F(QueryTest, nxdomainBadNSEC2) {
+    // ZoneFinder::find() returns NXDOMAIN with an empty NSEC RR.
+    mock_finder->setNSECResult(Name("emptynsec.example.com"),
+                               ZoneFinder::NXDOMAIN,
+                               mock_finder->empty_nsec_rrset_);
+    EXPECT_THROW(Query(memory_client, Name("emptynsec.example.com"), qtype,
+                       response, true).process(),
+                 Query::BadNSEC);
+}
+
+TEST_F(QueryTest, nxdomainBadNSEC3) {
+    // "no-wildcard proof" returns SUCCESS.  it should be NXDOMAIN.
+    mock_finder->setNSECResult(Name("*.example.com"),
+                               ZoneFinder::SUCCESS,
+                               mock_finder->delegation_rrset_);
+    EXPECT_THROW(Query(memory_client, Name("nxdomain.example.com"), qtype,
+                       response, true).process(),
+                 Query::BadNSEC);
+}
+
+TEST_F(QueryTest, nxdomainBadNSEC4) {
+    // "no-wildcard proof" doesn't return RRset.
+    mock_finder->setNSECResult(Name("*.example.com"),
+                               ZoneFinder::NXDOMAIN, ConstRRsetPtr());
+    EXPECT_THROW(Query(memory_client, Name("nxdomain.example.com"), qtype,
+                       response, true).process(),
+                 Query::BadNSEC);
+}
+
+TEST_F(QueryTest, nxdomainBadNSEC5) {
+    // "no-wildcard proof" returns non NSEC.
+    mock_finder->setNSECResult(Name("*.example.com"),
+                               ZoneFinder::NXDOMAIN,
+                               mock_finder->delegation_rrset_);
+    // This is a bit odd, but we'll simply include the returned RRset.
+    Query(memory_client, Name("nxdomain.example.com"), qtype,
+          response, true).process();
+    responseCheck(response, Rcode::NXDOMAIN(), AA_FLAG, 0, 8, 0,
+                  NULL, (string(soa_txt) +
+                         string("example.com. 3600 IN RRSIG ") +
+                         getCommonRRSIGText("SOA") + "\n" +
+                         string(nsec_nxdomain_txt) + "\n" +
+                         string("noglue.example.com. 3600 IN RRSIG ") +
+                         getCommonRRSIGText("NSEC") + "\n" +
+                         delegation_txt).c_str(),
+                  NULL, mock_finder->getOrigin());
+}
+
+TEST_F(QueryTest, nxdomainBadNSEC6) {
+    // "no-wildcard proof" returns empty NSEC.
+    mock_finder->setNSECResult(Name("*.example.com"),
+                               ZoneFinder::NXDOMAIN,
+                               mock_finder->empty_nsec_rrset_);
+    EXPECT_THROW(Query(memory_client, Name("nxdomain.example.com"), qtype,
+                       response, true).process(),
+                 Query::BadNSEC);
+}
+
 TEST_F(QueryTest, nxrrset) {
     EXPECT_NO_THROW(Query(memory_client, Name("www.example.com"),
                           RRType::TXT(), response).process());
diff --git a/src/bin/dhcp6/iface_mgr.h b/src/bin/dhcp6/iface_mgr.h
index 45f6afe..249c7ef 100644
--- a/src/bin/dhcp6/iface_mgr.h
+++ b/src/bin/dhcp6/iface_mgr.h
@@ -15,7 +15,6 @@
 #ifndef IFACE_MGR_H
 #define IFACE_MGR_H
 
-#include <stdint.h>
 #include <list>
 #include <boost/shared_ptr.hpp>
 #include <boost/scoped_array.hpp>
diff --git a/src/bin/msgq/Makefile.am b/src/bin/msgq/Makefile.am
index 0eebf00..908cab5 100644
--- a/src/bin/msgq/Makefile.am
+++ b/src/bin/msgq/Makefile.am
@@ -1,7 +1,7 @@
 SUBDIRS = . tests
 
 pkglibexecdir = $(libexecdir)/@PACKAGE@
- 
+
 pkglibexec_SCRIPTS = b10-msgq
 
 CLEANFILES = b10-msgq msgq.pyc
diff --git a/src/bin/resolver/resolver.cc b/src/bin/resolver/resolver.cc
index e98d08f..1f59ce9 100644
--- a/src/bin/resolver/resolver.cc
+++ b/src/bin/resolver/resolver.cc
@@ -544,7 +544,7 @@ ResolverImpl::processNormalQuery(const IOMessage& io_message,
     // ACL passed.  Reject inappropriate queries for the resolver.
     if (qtype == RRType::AXFR()) {
         if (io_message.getSocket().getProtocol() == IPPROTO_UDP) {
-            // Can't process AXFR request receoved over UDP
+            // Can't process AXFR request received over UDP
             LOG_DEBUG(resolver_logger, RESOLVER_DBG_PROCESS, RESOLVER_AXFR_UDP);
             makeErrorMessage(query_message, answer_message, buffer,
                              Rcode::FORMERR());
diff --git a/src/bin/stats/tests/Makefile.am b/src/bin/stats/tests/Makefile.am
index b5edc59..afd572f 100644
--- a/src/bin/stats/tests/Makefile.am
+++ b/src/bin/stats/tests/Makefile.am
@@ -1,7 +1,7 @@
 PYCOVERAGE_RUN = @PYCOVERAGE_RUN@
 PYTESTS = b10-stats_test.py b10-stats-httpd_test.py
 EXTRA_DIST = $(PYTESTS) test_utils.py
-CLEANFILES = test_utils.pyc
+CLEANFILES = test_utils.pyc msgq_socket_test
 
 # If necessary (rare cases), explicitly specify paths to dynamic libraries
 # required by loadable python modules.
@@ -22,6 +22,7 @@ endif
 	$(LIBRARY_PATH_PLACEHOLDER) \
 	PYTHONPATH=$(COMMON_PYTHON_PATH):$(abs_top_builddir)/src/bin/stats:$(abs_top_builddir)/src/bin/stats/tests:$(abs_top_builddir)/src/bin/msgq:$(abs_top_builddir)/src/lib/python/isc/config \
 	B10_FROM_SOURCE=$(abs_top_srcdir) \
+	BIND10_MSGQ_SOCKET_FILE=$(abs_top_builddir)/msgq_socket \
 	CONFIG_TESTDATA_PATH=$(abs_top_srcdir)/src/lib/config/tests/testdata \
 	$(PYCOVERAGE_RUN) $(abs_srcdir)/$$pytest || exit ; \
 	done
diff --git a/src/bin/stats/tests/isc/log_messages/Makefile.am b/src/bin/stats/tests/isc/log_messages/Makefile.am
deleted file mode 100644
index 90b4499..0000000
--- a/src/bin/stats/tests/isc/log_messages/Makefile.am
+++ /dev/null
@@ -1,7 +0,0 @@
-EXTRA_DIST = __init__.py stats_messages.py stats_httpd_messages.py
-CLEANFILES = __init__.pyc stats_messages.pyc stats_httpd_messages.pyc
-
-CLEANDIRS = __pycache__
-
-clean-local:
-	rm -rf $(CLEANDIRS)
diff --git a/src/bin/stats/tests/isc/log_messages/__init__.py b/src/bin/stats/tests/isc/log_messages/__init__.py
deleted file mode 100644
index 58e99e3..0000000
--- a/src/bin/stats/tests/isc/log_messages/__init__.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (C) 2011  Internet Systems Consortium.
-#
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
-# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
-# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
-# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-'''
-This is a fake package that acts as a forwarder to the real package.
-'''
diff --git a/src/bin/stats/tests/isc/log_messages/stats_httpd_messages.py b/src/bin/stats/tests/isc/log_messages/stats_httpd_messages.py
deleted file mode 100644
index 0adb0f0..0000000
--- a/src/bin/stats/tests/isc/log_messages/stats_httpd_messages.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (C) 2011  Internet Systems Consortium.
-#
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
-# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
-# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
-# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-from work.stats_httpd_messages import *
diff --git a/src/bin/stats/tests/isc/log_messages/stats_messages.py b/src/bin/stats/tests/isc/log_messages/stats_messages.py
deleted file mode 100644
index c05a6a8..0000000
--- a/src/bin/stats/tests/isc/log_messages/stats_messages.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (C) 2011  Internet Systems Consortium.
-#
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
-# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
-# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
-# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-from work.stats_messages import *
diff --git a/src/bin/stats/tests/test_utils.py b/src/bin/stats/tests/test_utils.py
index da0bac4..5eb8f92 100644
--- a/src/bin/stats/tests/test_utils.py
+++ b/src/bin/stats/tests/test_utils.py
@@ -16,10 +16,6 @@ import isc.config.cfgmgr
 import stats
 import stats_httpd
 
-# Change value of BIND10_MSGQ_SOCKET_FILE in environment variables
-if 'BIND10_MSGQ_SOCKET_FILE' not in os.environ:
-    os.environ['BIND10_MSGQ_SOCKET_FILE'] = tempfile.mktemp(prefix='msgq_socket_')
-
 class SignalHandler():
     """A signal handler class for deadlock in unittest"""
     def __init__(self, fail_handler, timeout=20):
@@ -112,7 +108,7 @@ class MockMsgq:
             self.msgq.shutdown()
 
     def shutdown(self):
-        # do nothing for avoiding shutting down the msgq twice
+        # do nothing
         pass
 
 class MockCfgmgr:
@@ -362,3 +358,10 @@ class BaseModules:
         self.cfgmgr.shutdown()
         # MockMsgq
         self.msgq.shutdown()
+        # remove the unused socket file
+        socket_file = self.msgq.server.msgq.socket_file
+        try:
+            if os.path.exists(socket_file):
+                os.remove(socket_file)
+        except OSError:
+            pass
diff --git a/src/lib/asiodns/tests/io_service_unittest.cc b/src/lib/asiodns/tests/io_service_unittest.cc
index 198b29e..cc64022 100644
--- a/src/lib/asiodns/tests/io_service_unittest.cc
+++ b/src/lib/asiodns/tests/io_service_unittest.cc
@@ -13,7 +13,6 @@
 // PERFORMANCE OF THIS SOFTWARE.
 
 #include <config.h>
-#include <stdint.h>
 #include <gtest/gtest.h>
 
 #include <asio.hpp>
diff --git a/src/lib/asiolink/io_endpoint.cc b/src/lib/asiolink/io_endpoint.cc
index 4d020c5..c1d3668 100644
--- a/src/lib/asiolink/io_endpoint.cc
+++ b/src/lib/asiolink/io_endpoint.cc
@@ -13,7 +13,6 @@
 // PERFORMANCE OF THIS SOFTWARE.
 
 #include <config.h>
-#include <stdint.h>
 
 #ifdef _WIN32
 #include <ws2tcpip.h>
diff --git a/src/lib/asiolink/tests/interval_timer_unittest.cc b/src/lib/asiolink/tests/interval_timer_unittest.cc
index d75f855..9fb31db 100644
--- a/src/lib/asiolink/tests/interval_timer_unittest.cc
+++ b/src/lib/asiolink/tests/interval_timer_unittest.cc
@@ -13,7 +13,6 @@
 // PERFORMANCE OF THIS SOFTWARE.
 
 #include <config.h>
-#include <stdint.h>
 #include <gtest/gtest.h>
 
 #include <asio.hpp>
diff --git a/src/lib/asiolink/tests/io_endpoint_unittest.cc b/src/lib/asiolink/tests/io_endpoint_unittest.cc
index 257a1a1..500eb88 100644
--- a/src/lib/asiolink/tests/io_endpoint_unittest.cc
+++ b/src/lib/asiolink/tests/io_endpoint_unittest.cc
@@ -13,7 +13,6 @@
 // PERFORMANCE OF THIS SOFTWARE.
 
 #include <config.h>
-#include <stdint.h>
 #include <gtest/gtest.h>
 
 #ifdef _WIN32
diff --git a/src/lib/asiolink/tests/tcp_endpoint_unittest.cc b/src/lib/asiolink/tests/tcp_endpoint_unittest.cc
index 43d7dff..6988082 100644
--- a/src/lib/asiolink/tests/tcp_endpoint_unittest.cc
+++ b/src/lib/asiolink/tests/tcp_endpoint_unittest.cc
@@ -14,8 +14,6 @@
 
 #include <config.h>
 
-#include <stdint.h>
-
 #include <string>
 
 #include <gtest/gtest.h>
diff --git a/src/lib/asiolink/tests/udp_endpoint_unittest.cc b/src/lib/asiolink/tests/udp_endpoint_unittest.cc
index c0271c0..03de6b8 100644
--- a/src/lib/asiolink/tests/udp_endpoint_unittest.cc
+++ b/src/lib/asiolink/tests/udp_endpoint_unittest.cc
@@ -14,8 +14,6 @@
 
 #include <config.h>
 
-#include <stdint.h>
-
 #include <string>
 
 #include <gtest/gtest.h>
diff --git a/src/lib/cache/message_cache.cc b/src/lib/cache/message_cache.cc
index b72dec5..e141bb5 100644
--- a/src/lib/cache/message_cache.cc
+++ b/src/lib/cache/message_cache.cc
@@ -15,8 +15,6 @@
 
 #include <config.h>
 
-#include <time.h>
-
 #include <nsas/nsas_entry_compare.h>
 #include <nsas/hash_table.h>
 #include <nsas/hash_deleter.h>
diff --git a/src/lib/cache/rrset_cache.cc b/src/lib/cache/rrset_cache.cc
index b851c95..1a5fd48 100644
--- a/src/lib/cache/rrset_cache.cc
+++ b/src/lib/cache/rrset_cache.cc
@@ -16,7 +16,6 @@
 
 #include "rrset_cache.h"
 #include "logger.h"
-#include <ctime>
 #include <string>
 #include <nsas/nsas_entry_compare.h>
 #include <nsas/hash_table.h>
diff --git a/src/lib/cache/tests/message_entry_unittest.cc b/src/lib/cache/tests/message_entry_unittest.cc
index 5f5e0b0..8961ee9 100644
--- a/src/lib/cache/tests/message_entry_unittest.cc
+++ b/src/lib/cache/tests/message_entry_unittest.cc
@@ -12,7 +12,6 @@
 
 #include <config.h>
 #include <string>
-#include <time.h>
 #include <gtest/gtest.h>
 #include <dns/tests/unittest_util.h>
 #include <dns/message.h>
diff --git a/src/lib/cache/tests/rrset_entry_unittest.cc b/src/lib/cache/tests/rrset_entry_unittest.cc
index c2cc663..58f4b3f 100644
--- a/src/lib/cache/tests/rrset_entry_unittest.cc
+++ b/src/lib/cache/tests/rrset_entry_unittest.cc
@@ -14,7 +14,6 @@
 
 #include <config.h>
 #include <string>
-#include <time.h>
 #include <gtest/gtest.h>
 #include <cache/cache_entry_key.h>
 #include <cache/rrset_entry.h>
diff --git a/src/lib/datasrc/database.cc b/src/lib/datasrc/database.cc
index 454448e..39126b4 100644
--- a/src/lib/datasrc/database.cc
+++ b/src/lib/datasrc/database.cc
@@ -416,7 +416,7 @@ DatabaseClient::Finder::find(const isc::dns::Name& name,
     size_t last_known(origin_label_count);
     const size_t current_label_count(name.getLabelCount());
     // This is how many labels we remove to get origin
-    size_t remove_labels(current_label_count - origin_label_count);
+    const size_t remove_labels(current_label_count - origin_label_count);
 
     // Now go trough all superdomains from origin down
     for (int i(remove_labels); i > 0; --i) {
@@ -507,13 +507,18 @@ DatabaseClient::Finder::find(const isc::dns::Name& name,
                     arg(accessor_->getDBName()).arg(name);
                 records_found = true;
                 get_cover = dnssec_data;
+            } else if ((options & NO_WILDCARD) != 0) {
+                // If wildcard check is disabled, the search will ultimately
+                // terminate with NXDOMAIN. If DNSSEC is enabled, flag that
+                // we need to get the NSEC records to prove this.
+                if (dnssec_data) {
+                    get_cover = true;
+                }
             } else {
                 // It's not empty non-terminal. So check for wildcards.
                 // We remove labels one by one and look for the wildcard there.
                 // Go up to first non-empty domain.
-
-                remove_labels = current_label_count - last_known;
-                for (size_t i(1); i <= remove_labels; ++ i) {
+                for (size_t i(1); i <= current_label_count - last_known; ++i) {
                     // Construct the name with *
                     const Name superdomain(name.split(i));
                     const string wildcard("*." + superdomain.toText());
@@ -552,7 +557,7 @@ DatabaseClient::Finder::find(const isc::dns::Name& name,
                             if (cni != found.second.end() &&
                                 type != RRType::CNAME()) {
                                 result_rrset = cni->second;
-                                result_status = CNAME;
+                                result_status = WILDCARD_CNAME;
                             } else if (nsi != found.second.end()) {
                                 result_rrset = nsi->second;
                                 result_status = DELEGATION;
diff --git a/src/lib/datasrc/tests/database_unittest.cc b/src/lib/datasrc/tests/database_unittest.cc
index 6315b54..d9cf999 100644
--- a/src/lib/datasrc/tests/database_unittest.cc
+++ b/src/lib/datasrc/tests/database_unittest.cc
@@ -175,8 +175,11 @@ const char* const TEST_RECORDS[][5] = {
     {"*.delegatedwild.example.org.", "A", "3600", "", "192.0.2.5"},
     {"wild.*.foo.example.org.", "A", "3600", "", "192.0.2.5"},
     {"wild.*.foo.*.bar.example.org.", "A", "3600", "", "192.0.2.5"},
+    {"wild.*.foo.*.bar.example.org.", "NSEC", "3600", "",
+     "brokenns1.example.org. A NSEC"},
     {"bao.example.org.", "NSEC", "3600", "", "wild.*.foo.*.bar.example.org. NSEC"},
     {"*.cnamewild.example.org.", "CNAME", "3600", "", "www.example.org."},
+    {"*.dnamewild.example.org.", "DNAME", "3600", "", "dname.example.com."},
     {"*.nswild.example.org.", "NS", "3600", "", "ns.example.com."},
     // For NSEC empty non-terminal
     {"l.example.org.", "NSEC", "3600", "", "empty.nonterminal.example.org. NSEC"},
@@ -258,9 +261,16 @@ private:
  * implementation of the optional functionality.
  */
 class MockAccessor : public NopAccessor {
-    // Type of mock database "row"s
-    typedef std::map<std::string, std::vector< std::vector<std::string> > >
-        Domains;
+    // Type of mock database "row"s.  This is a map whose keys are the
+    // own names.  We internally sort them by the name comparison order.
+    struct NameCompare : public binary_function<string, string, bool> {
+        bool operator()(const string& n1, const string& n2) const {
+            return (Name(n1).compare(Name(n2)).getOrder() < 0);
+        }
+    };
+    typedef std::map<std::string,
+                     std::vector< std::vector<std::string> >,
+                     NameCompare > Domains;
 
 public:
     MockAccessor() : rollbacked_(false) {
@@ -343,7 +353,7 @@ private:
 
     private:
         const std::string searched_name_;
-        int cur_record_;
+        size_t cur_record_;
         std::vector< std::vector<std::string> > cur_name;
     };
 
@@ -558,30 +568,36 @@ public:
     virtual std::string findPreviousName(int id, const std::string& rname)
         const
     {
-        // Hardcoded for now, but we could compute it from the data
-        // Maybe do it when it is needed some time in future?
         if (id == -1) {
             isc_throw(isc::NotImplemented, "Test not implemented behaviour");
-        } else if (id == 42) {
-            if (rname == "org.example.nonterminal.") {
-                return ("l.example.org.");
-            } else if (rname == "org.example.aa.") {
-                return ("example.org.");
-            } else if (rname == "org.example.www2." ||
-                       rname == "org.example.www1.") {
-                return ("www.example.org.");
-            } else if (rname == "org.example.badnsec2.") {
+        } else if (id == READONLY_ZONE_ID) {
+            // For some specific names we intentionally return broken or
+            // unexpected result.
+            if (rname == "org.example.badnsec2.") {
                 return ("badnsec1.example.org.");
             } else if (rname == "org.example.brokenname.") {
                 return ("brokenname...example.org.");
-            } else if (rname == "org.example.bar.*.") {
-                return ("bao.example.org.");
             } else if (rname == "org.example.notimplnsec." ||
                        rname == "org.example.wild.here.") {
                 isc_throw(isc::NotImplemented, "Not implemented in this test");
-            } else {
+            }
+
+            // For the general case, we search for the first name N in the
+            // domains that meets N >= reverse(rname) using lower_bound.
+            // The "previous name" is the name of the previous entry of N.
+            // Note that Domains are internally sorted by the Name comparison
+            // order.  Due to the API requirement we are given a reversed
+            // name (rname), so we need to reverse it again to convert it
+            // to the original name.
+            Domains::const_iterator it(readonly_records_->lower_bound(
+                                           Name(rname).reverse().toText()));
+            if (it == readonly_records_->begin()) {
                 isc_throw(isc::Unexpected, "Unexpected name");
             }
+            if (it == readonly_records_->end()) {
+                return ((*readonly_records_->rbegin()).first);
+            }
+            return ((*(--it)).first);
         } else {
             isc_throw(isc::Unexpected, "Unknown zone ID");
         }
@@ -1031,8 +1047,8 @@ doFindTest(ZoneFinder& finder,
            const ZoneFinder::FindOptions options = ZoneFinder::FIND_DEFAULT)
 {
     SCOPED_TRACE("doFindTest " + name.toText() + " " + type.toText());
-    ZoneFinder::FindResult result =
-        finder.find(name, type, NULL, options);
+    const ZoneFinder::FindResult result = finder.find(name, type, NULL,
+                                                      options);
     ASSERT_EQ(expected_result, result.code) << name << " " << type;
     if (!expected_rdatas.empty() && result.rrset) {
         checkRRset(result.rrset, expected_name != Name(".") ? expected_name :
@@ -1599,21 +1615,21 @@ TYPED_TEST(DatabaseClientTest, wildcard) {
         "bar.example.org",
         NULL
     };
+    // Unless FIND_DNSSEC is specified, this is no different from other
+    // NXRRSET case.
     for (const char** name = negative_names; *name != NULL; ++ name) {
         doFindTest(*finder, isc::dns::Name(*name), this->qtype_,
                    this->qtype_, this->rrttl_, ZoneFinder::NXRRSET,
                    this->expected_rdatas_, this->expected_sig_rdatas_);
-        // FIXME: What should be returned in this case? How does the
-        // DNSSEC logic handle it?
     }
 
+    // With FIND_DNSSEC, it should result in WILDCARD_NXRRSET.
     const char* negative_dnssec_names[] = {
         "a.bar.example.org.",
         "foo.baz.bar.example.org.",
         "a.foo.bar.example.org.",
         NULL
     };
-
     this->expected_rdatas_.clear();
     this->expected_rdatas_.push_back("wild.*.foo.*.bar.example.org. NSEC");
     this->expected_sig_rdatas_.clear();
@@ -1624,15 +1640,27 @@ TYPED_TEST(DatabaseClientTest, wildcard) {
                    Name("bao.example.org."), ZoneFinder::FIND_DNSSEC);
     }
 
-    // Some strange things in the wild node
+    // CNAME on a wildcard.  Maybe not so common, but not disallowed.
     this->expected_rdatas_.clear();
     this->expected_rdatas_.push_back("www.example.org.");
     this->expected_sig_rdatas_.clear();
     doFindTest(*finder, isc::dns::Name("a.cnamewild.example.org."),
                isc::dns::RRType::TXT(), isc::dns::RRType::CNAME(),
-               this->rrttl_, ZoneFinder::CNAME,
+               this->rrttl_, ZoneFinder::WILDCARD_CNAME,
                this->expected_rdatas_, this->expected_sig_rdatas_);
 
+    // DNAME on a wildcard.  In our implementation we ignore DNAMEs on a
+    // wildcard, but at a higher level we say the behavior is "unspecified".
+    // rfc2672bis strongly discourages the mixture of DNAME and wildcard
+    // (with SHOULD NOT).
+    this->expected_rdatas_.clear();
+    this->expected_sig_rdatas_.clear();
+    doFindTest(*finder, Name("a.dnamewild.example.org."),
+               this->qtype_, this->qtype_, this->rrttl_,
+               ZoneFinder::WILDCARD_NXRRSET, this->expected_rdatas_,
+               this->expected_sig_rdatas_);
+
+    // Some strange things in the wild node
     this->expected_rdatas_.clear();
     this->expected_rdatas_.push_back("ns.example.com.");
     doFindTest(*finder, isc::dns::Name("a.nswild.example.org."),
@@ -1641,6 +1669,67 @@ TYPED_TEST(DatabaseClientTest, wildcard) {
                this->expected_rdatas_, this->expected_sig_rdatas_);
 }
 
+TYPED_TEST(DatabaseClientTest, noWildcard) {
+    // Tests with the NO_WILDCARD flag.
+
+    boost::shared_ptr<DatabaseClient::Finder> finder(this->getFinder());
+
+    // This would match *.wild.example.org, but with NO_WILDCARD should
+    // result in NXDOMAIN.
+    this->expected_rdatas_.push_back("cancel.here.wild.example.org. A "
+                                     "NSEC RRSIG");
+    this->expected_sig_rdatas_.push_back("NSEC 5 3 3600 20000101000000 "
+                                         "20000201000000 12345 example.org. "
+                                         "FAKEFAKEFAKE");
+    doFindTest(*finder, isc::dns::Name("a.wild.example.org"),
+               RRType::NSEC(), RRType::NSEC(), this->rrttl_,
+               ZoneFinder::NXDOMAIN, this->expected_rdatas_,
+               this->expected_sig_rdatas_, Name("*.wild.example.org."),
+               ZoneFinder::FIND_DNSSEC | ZoneFinder::NO_WILDCARD);
+
+    // Should be the same without FIND_DNSSEC (but in this case no RRsets
+    // will be returned)
+    doFindTest(*finder, isc::dns::Name("a.wild.example.org"),
+               RRType::NSEC(), RRType::NSEC(), this->rrttl_,
+               ZoneFinder::NXDOMAIN, this->empty_rdatas_,
+               this->empty_rdatas_, Name::ROOT_NAME(), // name is dummy
+               ZoneFinder::NO_WILDCARD);
+
+    // Same for wildcard empty non terminal.
+    this->expected_rdatas_.clear();
+    this->expected_rdatas_.push_back("brokenns1.example.org. A NSEC");
+    doFindTest(*finder, isc::dns::Name("a.bar.example.org"),
+               RRType::NSEC(), RRType::NSEC(), this->rrttl_,
+               ZoneFinder::NXDOMAIN, this->expected_rdatas_,
+               this->empty_rdatas_, Name("wild.*.foo.*.bar.example.org"),
+               ZoneFinder::FIND_DNSSEC | ZoneFinder::NO_WILDCARD);
+
+    // Search for a wildcard name with NO_WILDCARD.  There should be no
+    // difference.  This is, for example, necessary to provide non existence
+    // of matching wildcard for isnx.nonterminal.example.org.
+    this->expected_rdatas_.clear();
+    this->expected_rdatas_.push_back("empty.nonterminal.example.org. NSEC");
+    doFindTest(*finder, isc::dns::Name("*.nonterminal.example.org"),
+               RRType::NSEC(), RRType::NSEC(), this->rrttl_,
+               ZoneFinder::NXDOMAIN, this->expected_rdatas_,
+               this->empty_rdatas_, Name("l.example.org"),
+               ZoneFinder::FIND_DNSSEC | ZoneFinder::NO_WILDCARD);
+
+    // On the other hand, if there's exact match for the wildcard name
+    // it should be found regardless of NO_WILDCARD.
+    this->expected_rdatas_.clear();
+    this->expected_rdatas_.push_back("192.0.2.5");
+    this->expected_sig_rdatas_.clear();
+    this->expected_sig_rdatas_.push_back("A 5 3 3600 20000101000000 "
+                                         "20000201000000 12345 example.org. "
+                                         "FAKEFAKEFAKE");
+    doFindTest(*finder, isc::dns::Name("*.wild.example.org"),
+               this->qtype_, this->qtype_, this->rrttl_,
+               ZoneFinder::SUCCESS, this->expected_rdatas_,
+               this->expected_sig_rdatas_, Name("*.wild.example.org"),
+               ZoneFinder::NO_WILDCARD);
+}
+
 TYPED_TEST(DatabaseClientTest, NXRRSET_NSEC) {
     // The domain exists, but doesn't have this RRType
     // So we should get its NSEC
@@ -1749,8 +1838,7 @@ TYPED_TEST(DatabaseClientTest, getOrigin) {
     if (this->is_mock_) {
         EXPECT_EQ(READONLY_ZONE_ID, finder->zone_id());
     }
-    bool test(this->zname_ == finder->getOrigin());
-    EXPECT_EQ(test, true);
+    EXPECT_EQ(this->zname_, finder->getOrigin());
 }
 
 TYPED_TEST(DatabaseClientTest, updaterFinder) {
diff --git a/src/lib/datasrc/zone.h b/src/lib/datasrc/zone.h
index 04d0230..05f3e34 100644
--- a/src/lib/datasrc/zone.h
+++ b/src/lib/datasrc/zone.h
@@ -63,32 +63,70 @@ public:
     /// actually the best wildcard we have). Data sources that don't
     /// support DNSSEC don't need to distinguish them.
     ///
-    /// In case of NXRRSET related results, the returned NSEC record
-    /// belongs to the domain which would provide the result if it
-    /// contained the correct type (in case of NXRRSET, it is the queried
-    /// domain, in case of WILDCARD_NXRRSET, it is the wildcard domain
-    /// that matched the query name). In case of an empty nonterminal,
-    /// an NSEC is provided for the interval where the empty nonterminal
-    /// lives. The end of the interval is the subdomain causing existence
-    /// of the empty nonterminal (if there's sub.x.example.com, and no record
-    /// in x.example.com, then x.example.com exists implicitly - is the empty
-    /// nonterminal and sub.x.example.com is the subdomain causing it).
+    /// In case of CNAME, if the CNAME is a wildcard (i.e., its owner name
+    /// starts with the label "*"), WILDCARD_CNAME will be returned instead
+    /// of CNAME.
+    ///
+    /// In case of NXDOMAIN, the returned NSEC covers the queried domain
+    /// that proves that the query name does not exist in the zone.  Note that
+    /// this does not necessarily prove it doesn't even match a wildcard
+    /// (even if the result of NXDOMAIN can only happen when there's no
+    /// matching wildcard either).  It is caller's responsibility to provide
+    /// a proof that there is no matching wildcard if that proof is necessary.
+    ///
+    /// Various variants of "no data" cases are complicated, when involves
+    /// DNSSEC and wildcard processing.  Referring to Section 3.1.3 of
+    /// RFC4035, we need to consider the following cases:
+    /// -# (Normal) no data: there is a matching non-wildcard name with a
+    ///    different RR type.  This is the "No Data" case of the RFC.
+    /// -# (Normal) empty non terminal: there is no matching (exact or
+    ///    wildcard) name, but there is a subdomain with an RR of the query
+    ///    name.  This is one case of "Name Error" of the RFC.
+    /// -# Wildcard empty non terminal: similar to 2a, but the empty name
+    ///    is a wildcard, and matches the query name by wildcard expansion.
+    ///    This is a special case of "Name Error" of the RFC.
+    /// -# Wildcard no data: there is no exact match name, but there is a
+    ///    wildcard name that matches the query name with a different type
+    ///    of RR.  This is the "Wildcard No Data" case of the RFC.
+    ///
+    /// In any case, \c find() will result in \c NXRRSET with no RRset
+    /// unless the \c FIND_DNSSEC option is specified.  The rest of the
+    /// discussion only applies to the case where this option is specified.
+    ///
+    /// In case 1, \c find() will result in NXRRSET, and return NSEC of the
+    /// matching name.
+    ///
+    /// In case 2, \c find() will result in NXRRSET, and return NSEC for the
+    /// interval where the empty nonterminal lives. The end of the interval
+    /// is the subdomain causing existence of the empty nonterminal (if
+    /// there's sub.x.example.com, and no record in x.example.com, then
+    /// x.example.com exists implicitly - is the empty nonterminal and
+    /// sub.x.example.com is the subdomain causing it).  Note that this NSEC
+    /// proves not only the existence of empty non terminal name but also
+    /// the non existence of possibly matching wildcard name, because
+    /// there can be no better wildcard match than the exact matching empty
+    /// name.
+    ///
+    /// In case 3, \c find() will result in WILDCARD_NXRRSET, and return NSEC
+    /// for the interval where the wildcard empty nonterminal lives.
+    /// Cases 2 and 3 are especially complicated and confusing.  See the
+    /// examples below.
+    ///
+    /// In case 4, \c find() will result in WILDCARD_NXRRSET, and return
+    /// NSEC of the matching wildcard name.
     ///
     /// Examples: if zone "example.com" has the following record:
     /// \code
-    /// a.b.example.com. NSEC c.example.com.
+    /// a.example.com. NSEC a.b.example.com.
     /// \endcode
-    /// a call to \c find() for "b.example.com." will result in NXRRSET,
-    /// and if the FIND_DNSSEC option is set this NSEC will be returned.
+    /// a call to \c find() for "b.example.com." with the FIND_DNSSEC option
+    /// will result in NXRRSET, and this NSEC will be returned.
     /// Likewise, if zone "example.org" has the following record,
     /// \code
-    /// x.*.example.org. NSEC a.example.org.
+    /// a.example.org. NSEC x.*.b.example.org.
     /// \endcode
-    /// a call to \c find() for "y.example.org" will result in
-    /// WILDCARD_NXRRSET (*.example.org is an empty nonterminal wildcard node),
-    /// and if the FIND_DNSSEC option is set this NSEC will be returned.
-    ///
-    /// In case of NXDOMAIN, the returned NSEC covers the queried domain.
+    /// a call to \c find() for "y.b.example.org" with FIND_DNSSEC will
+    /// result in NXRRSET_NXRRSET, and this NSEC will be returned.
     enum Result {
         SUCCESS,                ///< An exact match is found.
         DELEGATION,             ///< The search encounters a zone cut.
@@ -97,6 +135,7 @@ public:
         CNAME,    ///< The search encounters and returns a CNAME RR
         DNAME,    ///< The search encounters and returns a DNAME RR
         WILDCARD, ///< Succes by wildcard match, for DNSSEC
+        WILDCARD_CNAME, ///< CNAME on wildcard, search returns CNAME, for DNSSEC
         WILDCARD_NXRRSET ///< NXRRSET on wildcard, for DNSSEC
     };
 
@@ -142,10 +181,11 @@ public:
     enum FindOptions {
         FIND_DEFAULT = 0,       ///< The default options
         FIND_GLUE_OK = 1,       ///< Allow search under a zone cut
-        FIND_DNSSEC = 2         ///< Require DNSSEC data in the answer
+        FIND_DNSSEC = 2,        ///< Require DNSSEC data in the answer
                                 ///< (RRSIG, NSEC, etc.). The implementation
                                 ///< is allowed to include it even if it is
                                 ///< not set.
+        NO_WILDCARD = 4         ///< Do not try wildcard matching.
     };
 
     ///
@@ -185,6 +225,7 @@ public:
     /// for the data that best matches the given name and type.
     /// This method is expected to be "intelligent", and identifies the
     /// best possible answer for the search key.  Specifically,
+    ///
     /// - If the search name belongs under a zone cut, it returns the code
     ///   of \c DELEGATION and the NS RRset at the zone cut.
     /// - If there is no matching name, it returns the code of \c NXDOMAIN,
@@ -203,12 +244,14 @@ public:
     /// - If the target isn't NULL, all RRsets under the domain are inserted
     ///   there and SUCCESS (or NXDOMAIN, in case of empty domain) is returned
     ///   instead of normall processing. This is intended to handle ANY query.
-    ///   \note: this behavior is controversial as we discussed in
-    ///   https://lists.isc.org/pipermail/bind10-dev/2011-January/001918.html
-    ///   We should revisit the interface before we heavily rely on it.
+    ///
+    /// \note This behavior is controversial as we discussed in
+    /// https://lists.isc.org/pipermail/bind10-dev/2011-January/001918.html
+    /// We should revisit the interface before we heavily rely on it.
     ///
     /// The \c options parameter specifies customized behavior of the search.
     /// Their semantics is as follows (they are or bit-field):
+    ///
     /// - \c FIND_GLUE_OK Allow search under a zone cut.  By default the search
     ///   will stop once it encounters a zone cut.  If this option is specified
     ///   it remembers information about the highest zone cut and continues
@@ -220,6 +263,10 @@ public:
     /// - \c FIND_DNSSEC Request that DNSSEC data (like NSEC, RRSIGs) are
     ///   returned with the answer. It is allowed for the data source to
     ///   include them even when not requested.
+    /// - \c NO_WILDCARD Do not try wildcard matching.  This option is of no
+    ///   use for normal lookups; it's intended to be used to get a DNSSEC
+    ///   proof of the non existence of any matching wildcard or non existence
+    ///   of an exact match when a wildcard match is found.
     ///
     /// A derived version of this method may involve internal resource
     /// allocation, especially for constructing the resulting RRset, and may
diff --git a/src/lib/dns/rdata/generic/nsec_47.cc b/src/lib/dns/rdata/generic/nsec_47.cc
index 9091ada..064f783 100644
--- a/src/lib/dns/rdata/generic/nsec_47.cc
+++ b/src/lib/dns/rdata/generic/nsec_47.cc
@@ -178,6 +178,11 @@ NSEC::toWire(AbstractMessageRenderer& renderer) const {
     renderer.writeData(&impl_->typebits_[0], impl_->typebits_.size());
 }
 
+const Name&
+NSEC::getNextName() const {
+    return (impl_->nextname_);
+}
+
 int
 NSEC::compare(const Rdata& other) const {
     const NSEC& other_nsec = dynamic_cast<const NSEC&>(other);
diff --git a/src/lib/dns/rdata/generic/nsec_47.h b/src/lib/dns/rdata/generic/nsec_47.h
index b86a25b..005dd3a 100644
--- a/src/lib/dns/rdata/generic/nsec_47.h
+++ b/src/lib/dns/rdata/generic/nsec_47.h
@@ -38,6 +38,16 @@ public:
     // END_COMMON_MEMBERS
     NSEC& operator=(const NSEC& source);
     ~NSEC();
+
+    // specialized methods
+
+    /// Return the next domain name.
+    ///
+    /// \exception std::bad_alloc Resource allocation failure in name copy.
+    ///
+    /// \return The next domain name field in the form of \c Name object.
+    const Name& getNextName() const;
+
 private:
     NSECImpl* impl_;
 };
diff --git a/src/lib/python/isc/datasrc/datasrc.cc b/src/lib/python/isc/datasrc/datasrc.cc
index 7676104..6ab29d8 100644
--- a/src/lib/python/isc/datasrc/datasrc.cc
+++ b/src/lib/python/isc/datasrc/datasrc.cc
@@ -132,6 +132,8 @@ initModulePart_ZoneFinder(PyObject* mod) {
                              Py_BuildValue("I", ZoneFinder::WILDCARD));
         installClassVariable(zonefinder_type, "WILDCARD_NXRRSET",
                              Py_BuildValue("I", ZoneFinder::WILDCARD_NXRRSET));
+        installClassVariable(zonefinder_type, "WILDCARD_CNAME",
+                             Py_BuildValue("I", ZoneFinder::WILDCARD_CNAME));
 
         installClassVariable(zonefinder_type, "FIND_DEFAULT",
                              Py_BuildValue("I", ZoneFinder::FIND_DEFAULT));
@@ -139,6 +141,8 @@ initModulePart_ZoneFinder(PyObject* mod) {
                              Py_BuildValue("I", ZoneFinder::FIND_GLUE_OK));
         installClassVariable(zonefinder_type, "FIND_DNSSEC",
                              Py_BuildValue("I", ZoneFinder::FIND_DNSSEC));
+        installClassVariable(zonefinder_type, "NO_WILDCARD",
+                             Py_BuildValue("I", ZoneFinder::NO_WILDCARD));
     } catch (const std::exception& ex) {
         const std::string ex_what =
             "Unexpected failure in ZoneFinder initialization: " +
diff --git a/src/lib/python/isc/datasrc/finder_inc.cc b/src/lib/python/isc/datasrc/finder_inc.cc
index bc8e62c..4a00e78 100644
--- a/src/lib/python/isc/datasrc/finder_inc.cc
+++ b/src/lib/python/isc/datasrc/finder_inc.cc
@@ -42,11 +42,20 @@ Return the RR class of the zone.\n\
 \n\
 ";
 
+// Main changes from the C++ doxygen version:
+// - Return type: use tuple instead of the dedicated FindResult type
+// - NULL->None
+// - exceptions
 const char* const ZoneFinder_find_doc = "\
-find(name, type, target=NULL, options=FIND_DEFAULT) -> (code, FindResult)\n\
+find(name, type, target=None, options=FIND_DEFAULT) -> (integer, RRset)\n\
 \n\
 Search the zone for a given pair of domain name and RR type.\n\
 \n\
+Each derived version of this method searches the underlying backend\n\
+for the data that best matches the given name and type. This method is\n\
+expected to be \"intelligent\", and identifies the best possible\n\
+answer for the search key. Specifically,\n\
+\n\
 - If the search name belongs under a zone cut, it returns the code of\n\
   DELEGATION and the NS RRset at the zone cut.\n\
 - If there is no matching name, it returns the code of NXDOMAIN, and,\n\
@@ -62,40 +71,46 @@ Search the zone for a given pair of domain name and RR type.\n\
   and the code of SUCCESS will be returned.\n\
 - If the search name matches a delegation point of DNAME, it returns\n\
   the code of DNAME and that DNAME RR.\n\
-- If the result was synthesized by a wildcard match, it returns the\n\
-  code WILDCARD and the synthesized RRset\n\
-- If the query matched a wildcard name, but not its type, it returns the\n\
-  code WILDCARD_NXRRSET, and None\n\
-- If the target is a list, all RRsets under the domain are inserted\n\
+- If the target isn't None, all RRsets under the domain are inserted\n\
   there and SUCCESS (or NXDOMAIN, in case of empty domain) is returned\n\
   instead of normall processing. This is intended to handle ANY query.\n\
-  : this behavior is controversial as we discussed in\n\
-  https://lists.isc.org/pipermail/bind10-dev/2011-January/001918.html\n\
-  We should revisit the interface before we heavily rely on it. The\n\
-  options parameter specifies customized behavior of the search. Their\n\
-  semantics is as follows:\n\
-  (This feature is disable at this time)\n\
-- GLUE_OK Allow search under a zone cut. By default the search will\n\
-  stop once it encounters a zone cut. If this option is specified it\n\
-  remembers information about the highest zone cut and continues the\n\
-  search until it finds an exact match for the given name or it\n\
+\n\
+Note: This behavior is controversial as we discussed in\n\
+https://lists.isc.org/pipermail/bind10-dev/2011-January/001918.html We\n\
+should revisit the interface before we heavily rely on it.\n\
+\n\
+The options parameter specifies customized behavior of the search.\n\
+Their semantics is as follows (they are or bit-field):\n\
+\n\
+- FIND_GLUE_OK Allow search under a zone cut. By default the search\n\
+  will stop once it encounters a zone cut. If this option is specified\n\
+  it remembers information about the highest zone cut and continues\n\
+  the search until it finds an exact match for the given name or it\n\
   detects there is no exact match. If an exact match is found, RRsets\n\
   for that name are searched just like the normal case; otherwise, if\n\
   the search has encountered a zone cut, DELEGATION with the\n\
   information of the highest zone cut will be returned.\n\
+- FIND_DNSSEC Request that DNSSEC data (like NSEC, RRSIGs) are\n\
+  returned with the answer. It is allowed for the data source to\n\
+  include them even when not requested.\n\
+- NO_WILDCARD Do not try wildcard matching. This option is of no use\n\
+  for normal lookups; it's intended to be used to get a DNSSEC proof\n\
+  of the non existence of any matching wildcard or non existence of an\n\
+  exact match when a wildcard match is found.\n\
+\n\
 \n\
-This method raises an isc.datasrc.Error exception if there is an internal\n\
-error in the datasource.\n\
+This method raises an isc.datasrc.Error exception if there is an\n\
+internal error in the datasource.\n\
 \n\
 Parameters:\n\
   name       The domain name to be searched for.\n\
   type       The RR type to be searched for.\n\
-  target     If target is not NULL, insert all RRs under the domain\n\
+  target     If target is not None, insert all RRs under the domain\n\
              into it.\n\
   options    The search options.\n\
 \n\
-Return Value(s): A tuple of a result code an a FindResult object enclosing\n\
-the search result (see above).\n\
+Return Value(s): A tuple of a result code (integer) and an RRset object\n\
+enclosing the search result (see above).\n\
 ";
 
 const char* const ZoneFinder_find_previous_name_doc = "\
diff --git a/src/lib/python/isc/datasrc/tests/datasrc_test.py b/src/lib/python/isc/datasrc/tests/datasrc_test.py
index 75a0cfb..15fa347 100644
--- a/src/lib/python/isc/datasrc/tests/datasrc_test.py
+++ b/src/lib/python/isc/datasrc/tests/datasrc_test.py
@@ -15,6 +15,7 @@
 
 import isc.log
 import isc.datasrc
+from isc.datasrc import ZoneFinder
 import isc.dns
 import unittest
 import os
@@ -191,6 +192,29 @@ class DataSrcClient(unittest.TestCase):
         # can't construct directly
         self.assertRaises(TypeError, isc.datasrc.ZoneFinder)
 
+    def test_findoptions(self):
+        '''A simple test to confirm no option is specified by default.
+
+        '''
+        self.assertFalse(ZoneFinder.FIND_DEFAULT & ZoneFinder.FIND_GLUE_OK)
+        self.assertFalse(ZoneFinder.FIND_DEFAULT & ZoneFinder.FIND_DNSSEC)
+        self.assertFalse(ZoneFinder.FIND_DEFAULT & ZoneFinder.NO_WILDCARD)
+
+    def test_findresults(self):
+        '''A simple test to confirm result codes are (defined and) different
+        for some combinations.
+
+        '''
+        self.assertNotEqual(ZoneFinder.SUCCESS, ZoneFinder.DELEGATION)
+        self.assertNotEqual(ZoneFinder.DELEGATION, ZoneFinder.NXDOMAIN)
+        self.assertNotEqual(ZoneFinder.NXDOMAIN, ZoneFinder.NXRRSET)
+        self.assertNotEqual(ZoneFinder.NXRRSET, ZoneFinder.CNAME)
+        self.assertNotEqual(ZoneFinder.CNAME, ZoneFinder.DNAME)
+        self.assertNotEqual(ZoneFinder.DNAME, ZoneFinder.WILDCARD)
+        self.assertNotEqual(ZoneFinder.WILDCARD, ZoneFinder.WILDCARD_CNAME)
+        self.assertNotEqual(ZoneFinder.WILDCARD_CNAME,
+                            ZoneFinder.WILDCARD_NXRRSET)
+
     def test_find(self):
         dsc = isc.datasrc.DataSourceClient("sqlite3", READ_ZONE_DB_CONFIG)
 
diff --git a/src/lib/testutils/dnsmessage_test.h b/src/lib/testutils/dnsmessage_test.h
index eda6a6b..8fc2216 100644
--- a/src/lib/testutils/dnsmessage_test.h
+++ b/src/lib/testutils/dnsmessage_test.h
@@ -21,6 +21,7 @@
 #include <dns/message.h>
 #include <dns/name.h>
 #include <dns/masterload.h>
+#include <dns/rdataclass.h>
 #include <dns/rrclass.h>
 #include <dns/rrset.h>
 
@@ -113,13 +114,32 @@ void rrsetCheck(isc::dns::ConstRRsetPtr expected_rrset,
 /// The definitions in this name space are not supposed to be used publicly,
 /// but are given here because they are used in templated functions.
 namespace detail {
-// Helper matching class used in rrsetsCheck()
+// Helper matching class used in rrsetsCheck().  Basically we only have to
+// check the equality of name, RR type and RR class, but for RRSIGs we need
+// special additional checks because they are essentially different if their
+// 'type covered' are different.  For simplicity, we only compare the types
+// of the first RRSIG RDATAs (and only check when they exist); if there's
+// further difference in the RDATA, the main comparison checks will detect it.
 struct RRsetMatch : public std::unary_function<isc::dns::ConstRRsetPtr, bool> {
     RRsetMatch(isc::dns::ConstRRsetPtr target) : target_(target) {}
     bool operator()(isc::dns::ConstRRsetPtr rrset) const {
-        return (rrset->getType() == target_->getType() &&
-                rrset->getClass() == target_->getClass() &&
-                rrset->getName() == target_->getName());
+        if (rrset->getType() != target_->getType() ||
+            rrset->getClass() != target_->getClass() ||
+            rrset->getName() != target_->getName()) {
+            return (false);
+        }
+        if (rrset->getType() != isc::dns::RRType::RRSIG()) {
+            return (true);
+        }
+        if (rrset->getRdataCount() == 0 || target_->getRdataCount() == 0) {
+            return (true);
+        }
+        isc::dns::RdataIteratorPtr rdit = rrset->getRdataIterator();
+        isc::dns::RdataIteratorPtr targetit = target_->getRdataIterator();
+        return (dynamic_cast<const isc::dns::rdata::generic::RRSIG&>(
+                    rdit->getCurrent()).typeCovered() ==
+                dynamic_cast<const isc::dns::rdata::generic::RRSIG&>(
+                    targetit->getCurrent()).typeCovered());
     }
     const isc::dns::ConstRRsetPtr target_;
 private:
diff --git a/tests/system/README b/tests/system/README
index a43d49e..a1c0a97 100644
--- a/tests/system/README
+++ b/tests/system/README
@@ -5,48 +5,49 @@ See COPYRIGHT in the source root or http://isc.org/copyright.html for terms.
 This is a simple test environment for running BIND 10 system tests
 involving multiple name servers.  It was originally developed for BIND
 9, and has been ported to test BIND 10 implementations.  Ideally we
-should share the same framework for both versions, so some part of
-the original setup are kept, even though they are BIND 9 specific and
-not currently used.
+should share the same framework for both versions, so some part of the
+original setup are kept, even though they are BIND 9 specific and not
+currently used.
 
-Also, these tests generally rely on BIND 9 programs, most commonly its
-dig, and will sometimes be its name server (named).  So, the test
+Also, these tests generally rely on BIND 9 programs, most commonly
+its dig, and will sometimes be its name server (named).  So, the test
 environment assumes that there's a source tree of BIND 9 where its
-programs are built, and that an environment variable "BIND9_TOP" is
-set to point to the top directory of the source tree.
+programs are built, and that an environment variable "BIND9_TOP" is set
+to point to the top directory of the source tree.
 
 There are multiple test suites, each in a separate subdirectory and
 involving a different DNS setup.  They are:
 
   bindctl/      Some basic management operations using the bindctl tool
-  glue/		Glue handling tests
+  glue/		    Glue handling tests
+  ixfr/         Incremental transfer tests
+
 (the following tests are planned to be added soon)
-  dnssec/	DNSSEC tests
+  dnssec/	    DNSSEC tests
   masterfile/	Master file parser
-  xfer/		Zone transfer tests
+  axfr/         Full-transfer tests
 
 Typically each test suite sets up 2-5 instances of BIND 10 (or BIND 9
-named) and then performs one or more tests against them.  Within the
-test suite subdirectory, each instance has a separate subdirectory
-containing its configuration data.  By convention, these
-subdirectories are named "nsx1", "nsx2", etc for BIND 10 ("x" means
-BIND 10), and "ns1", "ns2", etc. for BIND 9.
+named) and then performs one or more tests against them.  Within the test
+suite subdirectory, each instance has a separate subdirectory containing
+its configuration data.  By convention, these subdirectories are named
+"nsx1", "nsx2", etc for BIND 10 ("x" means BIND 10), and "ns1", "ns2",
+etc. for BIND 9.
 
 The tests are completely self-contained and do not require access to
-the real DNS.  Generally, one of the test servers (ns[x]1) is set up
-as a root name server and is listed in the hints file of the others.
+the real DNS.  Generally, one of the test servers (ns[x]1) is set up as
+a root name server and is listed in the hints file of the others.
 
-To enable all servers to run on the same machine, they bind to
-separate virtual IP address on the loopback interface.  ns[x]1 runs on
-10.53.0.1, ns[x]2 on 10.53.0.2, etc.  Before running any tests, you
-must set up these addresses by running "ifconfig.sh up" as root.
+To enable all servers to run on the same machine, they bind to separate
+virtual IP address on the loopback interface.  ns[x]1 runs on 10.53.0.1,
+ns[x]2 on 10.53.0.2, etc.  Before running any tests, you must set up
+these addresses by running "ifconfig.sh up" as root.
 
 Mac OS X:
-If you wish to make the interfaces survive across reboots
-copy org.isc.bind.system and org.isc.bind.system to
-/Library/LaunchDaemons then run
-"launchctl load /Library/LaunchDaemons/org.isc.bind.system.plist" as
-root.
+If you wish to make the interfaces survive across reboots copy
+org.isc.bind.system and org.isc.bind.system to /Library/LaunchDaemons
+then run "launchctl load /Library/LaunchDaemons/org.isc.bind.system.plist"
+as root.
 
 The servers use port 53210 instead of the usual port 53, so they can be
 run without root privileges once the interfaces have been set up.
diff --git a/tests/system/cleanall.sh b/tests/system/cleanall.sh
index d23d103..434c6b1 100755
--- a/tests/system/cleanall.sh
+++ b/tests/system/cleanall.sh
@@ -27,7 +27,7 @@ find . -type f \( \
 
 status=0
 
-for d in ./.* ./*
+for d in ./.* ./* ./*/*
 do
    case $d in ./.|./..) continue ;; esac
    test -d $d || continue
diff --git a/tests/system/common/rndc.conf b/tests/system/common/rndc.conf
new file mode 100644
index 0000000..a897548
--- /dev/null
+++ b/tests/system/common/rndc.conf
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2004, 2007  Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2000, 2001  Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+options {
+        default-key     "rndc_key";
+};
+
+key rndc_key {
+        algorithm       hmac-md5;
+        secret          "1234abcd8765";
+};
diff --git a/tests/system/common/rndc.key b/tests/system/common/rndc.key
new file mode 100644
index 0000000..c2c3457
--- /dev/null
+++ b/tests/system/common/rndc.key
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: rndc.key,v 1.3 2011-03-12 04:59:47 tbox Exp $ */
+
+key rndc_key {
+        secret "1234abcd8765";
+        algorithm hmac-md5;
+};
diff --git a/tests/system/conf.sh.in b/tests/system/conf.sh.in
index 66aa3f5..92f72fa 100755
--- a/tests/system/conf.sh.in
+++ b/tests/system/conf.sh.in
@@ -35,23 +35,36 @@ if [ -z $BIND9_TOP ]; then
 fi
 
 # Find the top of the source and test trees.
-TOP=@abs_top_srcdir@
-TEST_TOP=@abs_builddir@
-
-RUN_BIND10=$TOP/src/bin/bind10/run_bind10.sh
-RUN_BINDCTL=$TOP/src/bin/bindctl/run_bindctl.sh
-BINDCTL_CSV_DIR=@abs_srcdir@/common/
-B10_LOADZONE=$TOP/src/bin/loadzone/run_loadzone.sh
-BIND9_NAMED=$BIND9_TOP/bin/named/named
-DIG=$BIND9_TOP/bin/dig/dig
+export TOP=@abs_top_srcdir@
+export TEST_TOP=@abs_builddir@
+
+# Programs
+export RUN_BIND10=$TOP/src/bin/bind10/run_bind10.sh
+export RUN_BINDCTL=$TOP/src/bin/bindctl/run_bindctl.sh
+export BINDCTL_CSV_DIR=@abs_srcdir@/common/
+export B10_LOADZONE=$TOP/src/bin/loadzone/run_loadzone.sh
+export BIND9_NAMED=$BIND9_TOP/bin/named/named
+export DIG=$BIND9_TOP/bin/dig/dig
+export RNDC=$BIND9_TOP/bin/rndc/rndc
+
 # Test tools borrowed from BIND 9's system test (without change).
-TESTSOCK=$BIND9_TOP/bin/tests/system/testsock.pl
-DIGCOMP=$BIND9_TOP/bin/tests/system/digcomp.pl
+export TESTSOCK=$BIND9_TOP/bin/tests/system/testsock.pl
+export DIGCOMP=$BIND9_TOP/bin/tests/system/digcomp.pl
+
+export SUBDIRS="bindctl glue ixfr/in-2"
+# Add appropriate subdirectories to the above statement as the tests become
+# available.
+#SUBDIRS="dnssec masterfile ixfr/in-1 ixfr/in-2 ixfr/in-4"
 
-SUBDIRS="bindctl glue"
-#SUBDIRS="dnssec masterfile xfer"
+# PERL will be an empty string if no perl interpreter was found.  A similar
+# comment applies to AWK.
+export PERL=@PERL@
+export AWK=@AWK@
 
-# PERL will be an empty string if no perl interpreter was found.
-PERL=@PERL@
+# Other constants
+export RNDC_PORT=9953
+export DNS_PORT=53210
 
-export RUN_BIND10 BIND9_NAMED DIG SUBDIRS PERL TESTSOCK
+export TESTS_TOP=$TOP/tests
+export SYSTEM_TOP=$TESTS_TOP/system
+export IXFR_TOP=$SYSTEM_TOP/ixfr
diff --git a/tests/system/ixfr/README b/tests/system/ixfr/README
new file mode 100644
index 0000000..51cba8a
--- /dev/null
+++ b/tests/system/ixfr/README
@@ -0,0 +1,86 @@
+Introduction
+============
+The directories in-1 to in-4 implement the following tests of the IXFR-in
+capability of BIND 10.
+
+in-1: Check that BIND 10 can receive IXFR in a single UDP packet.
+in-2: Check that BIND 10 can receive IXFR via TCP.
+in-3: Check that BIND 10 will request AXFR if the server does not support IXFR.
+in-4: Check that BIND 10 will request IXFR when its SOA refresh times out
+
+The tests are described more fully in the document:
+
+http://bind10.isc.org/wiki/IxfrSystemTests
+
+Overview
+========
+All the tests use two nameservers:
+
+* A BIND 9 nameserver acting as the IXFR server (using the nomenclature
+of RFC 1995).
+* A BIND 10 nameserver acting at the IXFR client.
+
+In general, the tests attempt to set up the server and client independently.
+Communication is established between the systems by updating their
+configurations and a notification sent to the client.  This should cause the
+client to request an IXFR from the server. (The exception is test 4, where the
+request is a result of the expiration of the SOA refresh time.)
+
+A check of zone files - or in these tests, of SOA serial number - can only
+reveal that a transfer has taken place.  To check what has happened,
+e.g. whether the transfer was via UDP or whether a TCP request took place,
+the BIND 10 log file is searched for known message IDs.
+
+The searching of the log files for message IDs is one of the reasons that,
+unlike other system tests, the IXFR set of tests is broken up into separate
+tests that require the stopping and starting of nameservers (and tidying up of
+log files) between each test.  Doing this means that only the existence of a
+particular message ID needs to be checked - there is no risk that another test
+produced it.  The other reason is that the each IXFR test requires the
+nameservers to be in a specific state at the start of the test; this is easier
+to assure if they are not updating one another as the result of configuration
+settings established in the previous test.
+
+Test Files
+==========
+
+Data Files
+----------
+(All within tests/system/ixfr.  Some .in files are processed to substitute
+for build variables in the build process to give the files listed here.)
+
+db.example.nX. These files hold the RRs for a zone for which should not
+fit within a single UDP packet.  The files are different versions of the zone
+- the N-0 version (i.e. the latest version - "N" - the "-0" is present so
+that the files have a consistent name), N-2 etc. (See the full description
+of the tests for the meaning of N-2 etc.)
+
+db.example.common: A set of RRs to bulk out the zone to be larger than can
+be contained in a single UDP packet.
+
+db.example.n2.refresh: The N-2 version of the zone, but with a small SOA
+refresh time (for test 4).
+
+named_xxxx.conf: Various BIND 9 configuration files with NOTIFYs and/or
+IXFR enabled or disabled.
+
+Directories
+-----------
+The tests/system/ixfr directory holds the IXFR tests.  Within that
+directory are subdirectories in-1 through in-4 for each test.  And within
+each test directory are the directories ns1 (for the BIND 9 nameserver)
+and nsx2 (for the BIND 10 nameserver).
+
+Shell Scripts
+-------------
+The IXFR tests use the same framework as the rest of the system tests,
+being based around shell scripts.  Many have a ".in" form as they require
+substitution of build variables before they can be used, and so are
+listed in configure.ac.  The files specific to the IXFR tests are:
+
+tests/system/ixfr/ixfr_init.sh.in: defines environment variables and shell
+subroutines used in the tests.  (This references system/conf.sh.in which
+defines most of them.)
+
+tests/system/ixfr/common_tests.sh.in: tests in-1 and in-2 are virtually
+identical - this holds the common code.
diff --git a/tests/system/ixfr/b10-config.db.in b/tests/system/ixfr/b10-config.db.in
new file mode 100644
index 0000000..946d80f
--- /dev/null
+++ b/tests/system/ixfr/b10-config.db.in
@@ -0,0 +1,23 @@
+{"version": 2,
+    "Xfrin": {
+        "zones": [{
+            "master_addr": "10.53.0.1",
+            "master_port": 53210,
+            "name": "example.",
+            "use_ixfr": true
+        }]
+    },
+    "Auth": {
+        "listen_on": [{
+            "address": "10.53.0.2",
+            "port": 53210
+        }],
+        "database_file": "@abs_builddir@/zone.sqlite3"
+    },
+    "Zonemgr": {
+        "secondary_zones": [{
+            "name": "example.",
+            "class": "IN"
+        }]
+    }
+}
diff --git a/tests/system/ixfr/clean_ns.sh b/tests/system/ixfr/clean_ns.sh
new file mode 100644
index 0000000..88f4ff1
--- /dev/null
+++ b/tests/system/ixfr/clean_ns.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# Clean up nameserver directories after zone transfer tests.
+
+rm -f ns1/named.conf
+rm -f ns1/db.example*
+rm -f ns1/named.memstats
+
+rm -f nsx2/bind10.run
+rm -f nsx2/b10-config.db
+rm -f ../zone.sqlite3
+
+rm -f client.dig
+rm -f server.dig
diff --git a/tests/system/ixfr/common_tests.sh.in b/tests/system/ixfr/common_tests.sh.in
new file mode 100644
index 0000000..90d0284
--- /dev/null
+++ b/tests/system/ixfr/common_tests.sh.in
@@ -0,0 +1,78 @@
+#!/bin/sh
+#
+# Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# \file
+# This script is used in a couple of IXFR tests.
+#
+# Preconditions:\n
+# The BIND 9 nameserver (ns1, 10.53.0.1, acting as the IXFR server) is loaded
+# with the N-4 version of the zone.  (It may hold prior versions as well.)
+# Notifications are disabled.
+#
+# The BIND 10 nameserver (nsx2, 10.53.0.2, acting as the IXFR client) is loaded
+# with an earlier (unspecified) version of the zone.
+#
+# Actions:\n
+# This script updates the IXFR server with the N-2 and N-0 versions of the zone.
+# It then updates the BIND 10 configuration so that it looks for IXFRs from
+# the IXFR server and causes the server to send the client a NOTIFY.  After
+# waiting for the client to update from the server, it compares ther zones of
+# the two system, reporting an error if they are different.
+#
+# Caller Actions:\n
+# The caller can pre-load the BIND 10 IXFR client with whatever version of the
+# zone it requires.  It can also load the BIND 9 IXFR server with zones earlier
+# than N-4.
+#
+# After this test has finished, it is up to the caller to check the logs
+# to see if they report the expected behavior.
+#
+# \return 0 if the script executed successfully, non-zero otherwise
+
+# Set up variables etc.
+. @abs_top_builddir@/tests/system/conf.sh
+. $IXFR_TOP/ixfr_init.sh
+
+set -e
+
+# Store the SOA serial number of the BIND 10 client for later use.
+old_client_serial=`$DIG_SOA @$CLIENT_IP | $AWK '{print $3}'`
+echo "I:$CLIENT_NAME SOA serial of IXFR client is $old_client_serial"
+
+# Load the BIND 9 system (the IXFR server) with the "n - 2" and "n" version of
+# the zones.  With ixfr-from-differences set to "yes", the nameserver should
+# generate the differences between them.
+echo "I:$SERVER_NAME updating IXFR-server for ixfr-in tests"
+update_server_zone $SERVER_NAME $SERVER_IP $IXFR_TOP/db.example.n2
+
+# Wait a bit - it seems that if two updates are loaded in quick succession,
+# the second sometimes gets lost.
+sleep 5
+update_server_zone $SERVER_NAME $SERVER_IP $IXFR_TOP/db.example.n0
+
+echo "I:$CLIENT_NAME forcing IXFR client to retrieve new version of the zone"
+$RUN_BINDCTL << .
+Xfrin retransfer zone_name="example"
+.
+
+# Wait for the client to update itself.
+wait_for_update $CLIENT_NAME $CLIENT_IP $old_client_serial
+
+# Has updated, compare the client and server's versions of the zone s- they
+# should be the same.
+compare_zones $SERVER_NAME $SERVER_IP $CLIENT_NAME $CLIENT_IP
+
+set +e
diff --git a/tests/system/ixfr/db.example.common b/tests/system/ixfr/db.example.common
new file mode 100644
index 0000000..90435ce
--- /dev/null
+++ b/tests/system/ixfr/db.example.common
@@ -0,0 +1,1556 @@
+; Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+; This files holds a number of AAAA records to bulk out a zone file beyond
+; 16kB.  It is used in tests where it is required that the contents of a zone
+; do not fit into a single UDP packet.
+
+aaaa-000		IN	AAAA	2001:db8::0000
+aaaa-001		IN	AAAA	2001:db8::0001
+aaaa-002		IN	AAAA	2001:db8::0002
+aaaa-003		IN	AAAA	2001:db8::0003
+aaaa-004		IN	AAAA	2001:db8::0004
+aaaa-005		IN	AAAA	2001:db8::0005
+aaaa-006		IN	AAAA	2001:db8::0006
+aaaa-007		IN	AAAA	2001:db8::0007
+aaaa-008		IN	AAAA	2001:db8::0008
+aaaa-009		IN	AAAA	2001:db8::0009
+aaaa-010		IN	AAAA	2001:db8::000a
+aaaa-011		IN	AAAA	2001:db8::000b
+aaaa-012		IN	AAAA	2001:db8::000c
+aaaa-013		IN	AAAA	2001:db8::000d
+aaaa-014		IN	AAAA	2001:db8::000e
+aaaa-015		IN	AAAA	2001:db8::000f
+aaaa-016		IN	AAAA	2001:db8::0010
+aaaa-017		IN	AAAA	2001:db8::0011
+aaaa-018		IN	AAAA	2001:db8::0012
+aaaa-019		IN	AAAA	2001:db8::0013
+aaaa-020		IN	AAAA	2001:db8::0014
+aaaa-021		IN	AAAA	2001:db8::0015
+aaaa-022		IN	AAAA	2001:db8::0016
+aaaa-023		IN	AAAA	2001:db8::0017
+aaaa-024		IN	AAAA	2001:db8::0018
+aaaa-025		IN	AAAA	2001:db8::0019
+aaaa-026		IN	AAAA	2001:db8::001a
+aaaa-027		IN	AAAA	2001:db8::001b
+aaaa-028		IN	AAAA	2001:db8::001c
+aaaa-029		IN	AAAA	2001:db8::001d
+aaaa-030		IN	AAAA	2001:db8::001e
+aaaa-031		IN	AAAA	2001:db8::001f
+aaaa-032		IN	AAAA	2001:db8::0020
+aaaa-033		IN	AAAA	2001:db8::0021
+aaaa-034		IN	AAAA	2001:db8::0022
+aaaa-035		IN	AAAA	2001:db8::0023
+aaaa-036		IN	AAAA	2001:db8::0024
+aaaa-037		IN	AAAA	2001:db8::0025
+aaaa-038		IN	AAAA	2001:db8::0026
+aaaa-039		IN	AAAA	2001:db8::0027
+aaaa-040		IN	AAAA	2001:db8::0028
+aaaa-041		IN	AAAA	2001:db8::0029
+aaaa-042		IN	AAAA	2001:db8::002a
+aaaa-043		IN	AAAA	2001:db8::002b
+aaaa-044		IN	AAAA	2001:db8::002c
+aaaa-045		IN	AAAA	2001:db8::002d
+aaaa-046		IN	AAAA	2001:db8::002e
+aaaa-047		IN	AAAA	2001:db8::002f
+aaaa-048		IN	AAAA	2001:db8::0030
+aaaa-049		IN	AAAA	2001:db8::0031
+aaaa-050		IN	AAAA	2001:db8::0032
+aaaa-051		IN	AAAA	2001:db8::0033
+aaaa-052		IN	AAAA	2001:db8::0034
+aaaa-053		IN	AAAA	2001:db8::0035
+aaaa-054		IN	AAAA	2001:db8::0036
+aaaa-055		IN	AAAA	2001:db8::0037
+aaaa-056		IN	AAAA	2001:db8::0038
+aaaa-057		IN	AAAA	2001:db8::0039
+aaaa-058		IN	AAAA	2001:db8::003a
+aaaa-059		IN	AAAA	2001:db8::003b
+aaaa-060		IN	AAAA	2001:db8::003c
+aaaa-061		IN	AAAA	2001:db8::003d
+aaaa-062		IN	AAAA	2001:db8::003e
+aaaa-063		IN	AAAA	2001:db8::003f
+aaaa-064		IN	AAAA	2001:db8::0040
+aaaa-065		IN	AAAA	2001:db8::0041
+aaaa-066		IN	AAAA	2001:db8::0042
+aaaa-067		IN	AAAA	2001:db8::0043
+aaaa-068		IN	AAAA	2001:db8::0044
+aaaa-069		IN	AAAA	2001:db8::0045
+aaaa-070		IN	AAAA	2001:db8::0046
+aaaa-071		IN	AAAA	2001:db8::0047
+aaaa-072		IN	AAAA	2001:db8::0048
+aaaa-073		IN	AAAA	2001:db8::0049
+aaaa-074		IN	AAAA	2001:db8::004a
+aaaa-075		IN	AAAA	2001:db8::004b
+aaaa-076		IN	AAAA	2001:db8::004c
+aaaa-077		IN	AAAA	2001:db8::004d
+aaaa-078		IN	AAAA	2001:db8::004e
+aaaa-079		IN	AAAA	2001:db8::004f
+aaaa-080		IN	AAAA	2001:db8::0050
+aaaa-081		IN	AAAA	2001:db8::0051
+aaaa-082		IN	AAAA	2001:db8::0052
+aaaa-083		IN	AAAA	2001:db8::0053
+aaaa-084		IN	AAAA	2001:db8::0054
+aaaa-085		IN	AAAA	2001:db8::0055
+aaaa-086		IN	AAAA	2001:db8::0056
+aaaa-087		IN	AAAA	2001:db8::0057
+aaaa-088		IN	AAAA	2001:db8::0058
+aaaa-089		IN	AAAA	2001:db8::0059
+aaaa-090		IN	AAAA	2001:db8::005a
+aaaa-091		IN	AAAA	2001:db8::005b
+aaaa-092		IN	AAAA	2001:db8::005c
+aaaa-093		IN	AAAA	2001:db8::005d
+aaaa-094		IN	AAAA	2001:db8::005e
+aaaa-095		IN	AAAA	2001:db8::005f
+aaaa-096		IN	AAAA	2001:db8::0060
+aaaa-097		IN	AAAA	2001:db8::0061
+aaaa-098		IN	AAAA	2001:db8::0062
+aaaa-099		IN	AAAA	2001:db8::0063
+aaaa-100		IN	AAAA	2001:db8::0064
+aaaa-101		IN	AAAA	2001:db8::0065
+aaaa-102		IN	AAAA	2001:db8::0066
+aaaa-103		IN	AAAA	2001:db8::0067
+aaaa-104		IN	AAAA	2001:db8::0068
+aaaa-105		IN	AAAA	2001:db8::0069
+aaaa-106		IN	AAAA	2001:db8::006a
+aaaa-107		IN	AAAA	2001:db8::006b
+aaaa-108		IN	AAAA	2001:db8::006c
+aaaa-109		IN	AAAA	2001:db8::006d
+aaaa-110		IN	AAAA	2001:db8::006e
+aaaa-111		IN	AAAA	2001:db8::006f
+aaaa-112		IN	AAAA	2001:db8::0070
+aaaa-113		IN	AAAA	2001:db8::0071
+aaaa-114		IN	AAAA	2001:db8::0072
+aaaa-115		IN	AAAA	2001:db8::0073
+aaaa-116		IN	AAAA	2001:db8::0074
+aaaa-117		IN	AAAA	2001:db8::0075
+aaaa-118		IN	AAAA	2001:db8::0076
+aaaa-119		IN	AAAA	2001:db8::0077
+aaaa-120		IN	AAAA	2001:db8::0078
+aaaa-121		IN	AAAA	2001:db8::0079
+aaaa-122		IN	AAAA	2001:db8::007a
+aaaa-123		IN	AAAA	2001:db8::007b
+aaaa-124		IN	AAAA	2001:db8::007c
+aaaa-125		IN	AAAA	2001:db8::007d
+aaaa-126		IN	AAAA	2001:db8::007e
+aaaa-127		IN	AAAA	2001:db8::007f
+aaaa-128		IN	AAAA	2001:db8::0080
+aaaa-129		IN	AAAA	2001:db8::0081
+aaaa-130		IN	AAAA	2001:db8::0082
+aaaa-131		IN	AAAA	2001:db8::0083
+aaaa-132		IN	AAAA	2001:db8::0084
+aaaa-133		IN	AAAA	2001:db8::0085
+aaaa-134		IN	AAAA	2001:db8::0086
+aaaa-135		IN	AAAA	2001:db8::0087
+aaaa-136		IN	AAAA	2001:db8::0088
+aaaa-137		IN	AAAA	2001:db8::0089
+aaaa-138		IN	AAAA	2001:db8::008a
+aaaa-139		IN	AAAA	2001:db8::008b
+aaaa-140		IN	AAAA	2001:db8::008c
+aaaa-141		IN	AAAA	2001:db8::008d
+aaaa-142		IN	AAAA	2001:db8::008e
+aaaa-143		IN	AAAA	2001:db8::008f
+aaaa-144		IN	AAAA	2001:db8::0090
+aaaa-145		IN	AAAA	2001:db8::0091
+aaaa-146		IN	AAAA	2001:db8::0092
+aaaa-147		IN	AAAA	2001:db8::0093
+aaaa-148		IN	AAAA	2001:db8::0094
+aaaa-149		IN	AAAA	2001:db8::0095
+aaaa-150		IN	AAAA	2001:db8::0096
+aaaa-151		IN	AAAA	2001:db8::0097
+aaaa-152		IN	AAAA	2001:db8::0098
+aaaa-153		IN	AAAA	2001:db8::0099
+aaaa-154		IN	AAAA	2001:db8::009a
+aaaa-155		IN	AAAA	2001:db8::009b
+aaaa-156		IN	AAAA	2001:db8::009c
+aaaa-157		IN	AAAA	2001:db8::009d
+aaaa-158		IN	AAAA	2001:db8::009e
+aaaa-159		IN	AAAA	2001:db8::009f
+aaaa-160		IN	AAAA	2001:db8::00a0
+aaaa-161		IN	AAAA	2001:db8::00a1
+aaaa-162		IN	AAAA	2001:db8::00a2
+aaaa-163		IN	AAAA	2001:db8::00a3
+aaaa-164		IN	AAAA	2001:db8::00a4
+aaaa-165		IN	AAAA	2001:db8::00a5
+aaaa-166		IN	AAAA	2001:db8::00a6
+aaaa-167		IN	AAAA	2001:db8::00a7
+aaaa-168		IN	AAAA	2001:db8::00a8
+aaaa-169		IN	AAAA	2001:db8::00a9
+aaaa-170		IN	AAAA	2001:db8::00aa
+aaaa-171		IN	AAAA	2001:db8::00ab
+aaaa-172		IN	AAAA	2001:db8::00ac
+aaaa-173		IN	AAAA	2001:db8::00ad
+aaaa-174		IN	AAAA	2001:db8::00ae
+aaaa-175		IN	AAAA	2001:db8::00af
+aaaa-176		IN	AAAA	2001:db8::00b0
+aaaa-177		IN	AAAA	2001:db8::00b1
+aaaa-178		IN	AAAA	2001:db8::00b2
+aaaa-179		IN	AAAA	2001:db8::00b3
+aaaa-180		IN	AAAA	2001:db8::00b4
+aaaa-181		IN	AAAA	2001:db8::00b5
+aaaa-182		IN	AAAA	2001:db8::00b6
+aaaa-183		IN	AAAA	2001:db8::00b7
+aaaa-184		IN	AAAA	2001:db8::00b8
+aaaa-185		IN	AAAA	2001:db8::00b9
+aaaa-186		IN	AAAA	2001:db8::00ba
+aaaa-187		IN	AAAA	2001:db8::00bb
+aaaa-188		IN	AAAA	2001:db8::00bc
+aaaa-189		IN	AAAA	2001:db8::00bd
+aaaa-190		IN	AAAA	2001:db8::00be
+aaaa-191		IN	AAAA	2001:db8::00bf
+aaaa-192		IN	AAAA	2001:db8::00c0
+aaaa-193		IN	AAAA	2001:db8::00c1
+aaaa-194		IN	AAAA	2001:db8::00c2
+aaaa-195		IN	AAAA	2001:db8::00c3
+aaaa-196		IN	AAAA	2001:db8::00c4
+aaaa-197		IN	AAAA	2001:db8::00c5
+aaaa-198		IN	AAAA	2001:db8::00c6
+aaaa-199		IN	AAAA	2001:db8::00c7
+aaaa-200		IN	AAAA	2001:db8::00c8
+aaaa-201		IN	AAAA	2001:db8::00c9
+aaaa-202		IN	AAAA	2001:db8::00ca
+aaaa-203		IN	AAAA	2001:db8::00cb
+aaaa-204		IN	AAAA	2001:db8::00cc
+aaaa-205		IN	AAAA	2001:db8::00cd
+aaaa-206		IN	AAAA	2001:db8::00ce
+aaaa-207		IN	AAAA	2001:db8::00cf
+aaaa-208		IN	AAAA	2001:db8::00d0
+aaaa-209		IN	AAAA	2001:db8::00d1
+aaaa-210		IN	AAAA	2001:db8::00d2
+aaaa-211		IN	AAAA	2001:db8::00d3
+aaaa-212		IN	AAAA	2001:db8::00d4
+aaaa-213		IN	AAAA	2001:db8::00d5
+aaaa-214		IN	AAAA	2001:db8::00d6
+aaaa-215		IN	AAAA	2001:db8::00d7
+aaaa-216		IN	AAAA	2001:db8::00d8
+aaaa-217		IN	AAAA	2001:db8::00d9
+aaaa-218		IN	AAAA	2001:db8::00da
+aaaa-219		IN	AAAA	2001:db8::00db
+aaaa-220		IN	AAAA	2001:db8::00dc
+aaaa-221		IN	AAAA	2001:db8::00dd
+aaaa-222		IN	AAAA	2001:db8::00de
+aaaa-223		IN	AAAA	2001:db8::00df
+aaaa-224		IN	AAAA	2001:db8::00e0
+aaaa-225		IN	AAAA	2001:db8::00e1
+aaaa-226		IN	AAAA	2001:db8::00e2
+aaaa-227		IN	AAAA	2001:db8::00e3
+aaaa-228		IN	AAAA	2001:db8::00e4
+aaaa-229		IN	AAAA	2001:db8::00e5
+aaaa-230		IN	AAAA	2001:db8::00e6
+aaaa-231		IN	AAAA	2001:db8::00e7
+aaaa-232		IN	AAAA	2001:db8::00e8
+aaaa-233		IN	AAAA	2001:db8::00e9
+aaaa-234		IN	AAAA	2001:db8::00ea
+aaaa-235		IN	AAAA	2001:db8::00eb
+aaaa-236		IN	AAAA	2001:db8::00ec
+aaaa-237		IN	AAAA	2001:db8::00ed
+aaaa-238		IN	AAAA	2001:db8::00ee
+aaaa-239		IN	AAAA	2001:db8::00ef
+aaaa-240		IN	AAAA	2001:db8::00f0
+aaaa-241		IN	AAAA	2001:db8::00f1
+aaaa-242		IN	AAAA	2001:db8::00f2
+aaaa-243		IN	AAAA	2001:db8::00f3
+aaaa-244		IN	AAAA	2001:db8::00f4
+aaaa-245		IN	AAAA	2001:db8::00f5
+aaaa-246		IN	AAAA	2001:db8::00f6
+aaaa-247		IN	AAAA	2001:db8::00f7
+aaaa-248		IN	AAAA	2001:db8::00f8
+aaaa-249		IN	AAAA	2001:db8::00f9
+aaaa-250		IN	AAAA	2001:db8::00fa
+aaaa-251		IN	AAAA	2001:db8::00fb
+aaaa-252		IN	AAAA	2001:db8::00fc
+aaaa-253		IN	AAAA	2001:db8::00fd
+aaaa-254		IN	AAAA	2001:db8::00fe
+aaaa-255		IN	AAAA	2001:db8::00ff
+aaaa-256		IN	AAAA	2001:db8::0100
+aaaa-257		IN	AAAA	2001:db8::0101
+aaaa-258		IN	AAAA	2001:db8::0102
+aaaa-259		IN	AAAA	2001:db8::0103
+aaaa-260		IN	AAAA	2001:db8::0104
+aaaa-261		IN	AAAA	2001:db8::0105
+aaaa-262		IN	AAAA	2001:db8::0106
+aaaa-263		IN	AAAA	2001:db8::0107
+aaaa-264		IN	AAAA	2001:db8::0108
+aaaa-265		IN	AAAA	2001:db8::0109
+aaaa-266		IN	AAAA	2001:db8::010a
+aaaa-267		IN	AAAA	2001:db8::010b
+aaaa-268		IN	AAAA	2001:db8::010c
+aaaa-269		IN	AAAA	2001:db8::010d
+aaaa-270		IN	AAAA	2001:db8::010e
+aaaa-271		IN	AAAA	2001:db8::010f
+aaaa-272		IN	AAAA	2001:db8::0110
+aaaa-273		IN	AAAA	2001:db8::0111
+aaaa-274		IN	AAAA	2001:db8::0112
+aaaa-275		IN	AAAA	2001:db8::0113
+aaaa-276		IN	AAAA	2001:db8::0114
+aaaa-277		IN	AAAA	2001:db8::0115
+aaaa-278		IN	AAAA	2001:db8::0116
+aaaa-279		IN	AAAA	2001:db8::0117
+aaaa-280		IN	AAAA	2001:db8::0118
+aaaa-281		IN	AAAA	2001:db8::0119
+aaaa-282		IN	AAAA	2001:db8::011a
+aaaa-283		IN	AAAA	2001:db8::011b
+aaaa-284		IN	AAAA	2001:db8::011c
+aaaa-285		IN	AAAA	2001:db8::011d
+aaaa-286		IN	AAAA	2001:db8::011e
+aaaa-287		IN	AAAA	2001:db8::011f
+aaaa-288		IN	AAAA	2001:db8::0120
+aaaa-289		IN	AAAA	2001:db8::0121
+aaaa-290		IN	AAAA	2001:db8::0122
+aaaa-291		IN	AAAA	2001:db8::0123
+aaaa-292		IN	AAAA	2001:db8::0124
+aaaa-293		IN	AAAA	2001:db8::0125
+aaaa-294		IN	AAAA	2001:db8::0126
+aaaa-295		IN	AAAA	2001:db8::0127
+aaaa-296		IN	AAAA	2001:db8::0128
+aaaa-297		IN	AAAA	2001:db8::0129
+aaaa-298		IN	AAAA	2001:db8::012a
+aaaa-299		IN	AAAA	2001:db8::012b
+aaaa-300		IN	AAAA	2001:db8::012c
+aaaa-301		IN	AAAA	2001:db8::012d
+aaaa-302		IN	AAAA	2001:db8::012e
+aaaa-303		IN	AAAA	2001:db8::012f
+aaaa-304		IN	AAAA	2001:db8::0130
+aaaa-305		IN	AAAA	2001:db8::0131
+aaaa-306		IN	AAAA	2001:db8::0132
+aaaa-307		IN	AAAA	2001:db8::0133
+aaaa-308		IN	AAAA	2001:db8::0134
+aaaa-309		IN	AAAA	2001:db8::0135
+aaaa-310		IN	AAAA	2001:db8::0136
+aaaa-311		IN	AAAA	2001:db8::0137
+aaaa-312		IN	AAAA	2001:db8::0138
+aaaa-313		IN	AAAA	2001:db8::0139
+aaaa-314		IN	AAAA	2001:db8::013a
+aaaa-315		IN	AAAA	2001:db8::013b
+aaaa-316		IN	AAAA	2001:db8::013c
+aaaa-317		IN	AAAA	2001:db8::013d
+aaaa-318		IN	AAAA	2001:db8::013e
+aaaa-319		IN	AAAA	2001:db8::013f
+aaaa-320		IN	AAAA	2001:db8::0140
+aaaa-321		IN	AAAA	2001:db8::0141
+aaaa-322		IN	AAAA	2001:db8::0142
+aaaa-323		IN	AAAA	2001:db8::0143
+aaaa-324		IN	AAAA	2001:db8::0144
+aaaa-325		IN	AAAA	2001:db8::0145
+aaaa-326		IN	AAAA	2001:db8::0146
+aaaa-327		IN	AAAA	2001:db8::0147
+aaaa-328		IN	AAAA	2001:db8::0148
+aaaa-329		IN	AAAA	2001:db8::0149
+aaaa-330		IN	AAAA	2001:db8::014a
+aaaa-331		IN	AAAA	2001:db8::014b
+aaaa-332		IN	AAAA	2001:db8::014c
+aaaa-333		IN	AAAA	2001:db8::014d
+aaaa-334		IN	AAAA	2001:db8::014e
+aaaa-335		IN	AAAA	2001:db8::014f
+aaaa-336		IN	AAAA	2001:db8::0150
+aaaa-337		IN	AAAA	2001:db8::0151
+aaaa-338		IN	AAAA	2001:db8::0152
+aaaa-339		IN	AAAA	2001:db8::0153
+aaaa-340		IN	AAAA	2001:db8::0154
+aaaa-341		IN	AAAA	2001:db8::0155
+aaaa-342		IN	AAAA	2001:db8::0156
+aaaa-343		IN	AAAA	2001:db8::0157
+aaaa-344		IN	AAAA	2001:db8::0158
+aaaa-345		IN	AAAA	2001:db8::0159
+aaaa-346		IN	AAAA	2001:db8::015a
+aaaa-347		IN	AAAA	2001:db8::015b
+aaaa-348		IN	AAAA	2001:db8::015c
+aaaa-349		IN	AAAA	2001:db8::015d
+aaaa-350		IN	AAAA	2001:db8::015e
+aaaa-351		IN	AAAA	2001:db8::015f
+aaaa-352		IN	AAAA	2001:db8::0160
+aaaa-353		IN	AAAA	2001:db8::0161
+aaaa-354		IN	AAAA	2001:db8::0162
+aaaa-355		IN	AAAA	2001:db8::0163
+aaaa-356		IN	AAAA	2001:db8::0164
+aaaa-357		IN	AAAA	2001:db8::0165
+aaaa-358		IN	AAAA	2001:db8::0166
+aaaa-359		IN	AAAA	2001:db8::0167
+aaaa-360		IN	AAAA	2001:db8::0168
+aaaa-361		IN	AAAA	2001:db8::0169
+aaaa-362		IN	AAAA	2001:db8::016a
+aaaa-363		IN	AAAA	2001:db8::016b
+aaaa-364		IN	AAAA	2001:db8::016c
+aaaa-365		IN	AAAA	2001:db8::016d
+aaaa-366		IN	AAAA	2001:db8::016e
+aaaa-367		IN	AAAA	2001:db8::016f
+aaaa-368		IN	AAAA	2001:db8::0170
+aaaa-369		IN	AAAA	2001:db8::0171
+aaaa-370		IN	AAAA	2001:db8::0172
+aaaa-371		IN	AAAA	2001:db8::0173
+aaaa-372		IN	AAAA	2001:db8::0174
+aaaa-373		IN	AAAA	2001:db8::0175
+aaaa-374		IN	AAAA	2001:db8::0176
+aaaa-375		IN	AAAA	2001:db8::0177
+aaaa-376		IN	AAAA	2001:db8::0178
+aaaa-377		IN	AAAA	2001:db8::0179
+aaaa-378		IN	AAAA	2001:db8::017a
+aaaa-379		IN	AAAA	2001:db8::017b
+aaaa-380		IN	AAAA	2001:db8::017c
+aaaa-381		IN	AAAA	2001:db8::017d
+aaaa-382		IN	AAAA	2001:db8::017e
+aaaa-383		IN	AAAA	2001:db8::017f
+aaaa-384		IN	AAAA	2001:db8::0180
+aaaa-385		IN	AAAA	2001:db8::0181
+aaaa-386		IN	AAAA	2001:db8::0182
+aaaa-387		IN	AAAA	2001:db8::0183
+aaaa-388		IN	AAAA	2001:db8::0184
+aaaa-389		IN	AAAA	2001:db8::0185
+aaaa-390		IN	AAAA	2001:db8::0186
+aaaa-391		IN	AAAA	2001:db8::0187
+aaaa-392		IN	AAAA	2001:db8::0188
+aaaa-393		IN	AAAA	2001:db8::0189
+aaaa-394		IN	AAAA	2001:db8::018a
+aaaa-395		IN	AAAA	2001:db8::018b
+aaaa-396		IN	AAAA	2001:db8::018c
+aaaa-397		IN	AAAA	2001:db8::018d
+aaaa-398		IN	AAAA	2001:db8::018e
+aaaa-399		IN	AAAA	2001:db8::018f
+aaaa-400		IN	AAAA	2001:db8::0190
+aaaa-401		IN	AAAA	2001:db8::0191
+aaaa-402		IN	AAAA	2001:db8::0192
+aaaa-403		IN	AAAA	2001:db8::0193
+aaaa-404		IN	AAAA	2001:db8::0194
+aaaa-405		IN	AAAA	2001:db8::0195
+aaaa-406		IN	AAAA	2001:db8::0196
+aaaa-407		IN	AAAA	2001:db8::0197
+aaaa-408		IN	AAAA	2001:db8::0198
+aaaa-409		IN	AAAA	2001:db8::0199
+aaaa-410		IN	AAAA	2001:db8::019a
+aaaa-411		IN	AAAA	2001:db8::019b
+aaaa-412		IN	AAAA	2001:db8::019c
+aaaa-413		IN	AAAA	2001:db8::019d
+aaaa-414		IN	AAAA	2001:db8::019e
+aaaa-415		IN	AAAA	2001:db8::019f
+aaaa-416		IN	AAAA	2001:db8::01a0
+aaaa-417		IN	AAAA	2001:db8::01a1
+aaaa-418		IN	AAAA	2001:db8::01a2
+aaaa-419		IN	AAAA	2001:db8::01a3
+aaaa-420		IN	AAAA	2001:db8::01a4
+aaaa-421		IN	AAAA	2001:db8::01a5
+aaaa-422		IN	AAAA	2001:db8::01a6
+aaaa-423		IN	AAAA	2001:db8::01a7
+aaaa-424		IN	AAAA	2001:db8::01a8
+aaaa-425		IN	AAAA	2001:db8::01a9
+aaaa-426		IN	AAAA	2001:db8::01aa
+aaaa-427		IN	AAAA	2001:db8::01ab
+aaaa-428		IN	AAAA	2001:db8::01ac
+aaaa-429		IN	AAAA	2001:db8::01ad
+aaaa-430		IN	AAAA	2001:db8::01ae
+aaaa-431		IN	AAAA	2001:db8::01af
+aaaa-432		IN	AAAA	2001:db8::01b0
+aaaa-433		IN	AAAA	2001:db8::01b1
+aaaa-434		IN	AAAA	2001:db8::01b2
+aaaa-435		IN	AAAA	2001:db8::01b3
+aaaa-436		IN	AAAA	2001:db8::01b4
+aaaa-437		IN	AAAA	2001:db8::01b5
+aaaa-438		IN	AAAA	2001:db8::01b6
+aaaa-439		IN	AAAA	2001:db8::01b7
+aaaa-440		IN	AAAA	2001:db8::01b8
+aaaa-441		IN	AAAA	2001:db8::01b9
+aaaa-442		IN	AAAA	2001:db8::01ba
+aaaa-443		IN	AAAA	2001:db8::01bb
+aaaa-444		IN	AAAA	2001:db8::01bc
+aaaa-445		IN	AAAA	2001:db8::01bd
+aaaa-446		IN	AAAA	2001:db8::01be
+aaaa-447		IN	AAAA	2001:db8::01bf
+aaaa-448		IN	AAAA	2001:db8::01c0
+aaaa-449		IN	AAAA	2001:db8::01c1
+aaaa-450		IN	AAAA	2001:db8::01c2
+aaaa-451		IN	AAAA	2001:db8::01c3
+aaaa-452		IN	AAAA	2001:db8::01c4
+aaaa-453		IN	AAAA	2001:db8::01c5
+aaaa-454		IN	AAAA	2001:db8::01c6
+aaaa-455		IN	AAAA	2001:db8::01c7
+aaaa-456		IN	AAAA	2001:db8::01c8
+aaaa-457		IN	AAAA	2001:db8::01c9
+aaaa-458		IN	AAAA	2001:db8::01ca
+aaaa-459		IN	AAAA	2001:db8::01cb
+aaaa-460		IN	AAAA	2001:db8::01cc
+aaaa-461		IN	AAAA	2001:db8::01cd
+aaaa-462		IN	AAAA	2001:db8::01ce
+aaaa-463		IN	AAAA	2001:db8::01cf
+aaaa-464		IN	AAAA	2001:db8::01d0
+aaaa-465		IN	AAAA	2001:db8::01d1
+aaaa-466		IN	AAAA	2001:db8::01d2
+aaaa-467		IN	AAAA	2001:db8::01d3
+aaaa-468		IN	AAAA	2001:db8::01d4
+aaaa-469		IN	AAAA	2001:db8::01d5
+aaaa-470		IN	AAAA	2001:db8::01d6
+aaaa-471		IN	AAAA	2001:db8::01d7
+aaaa-472		IN	AAAA	2001:db8::01d8
+aaaa-473		IN	AAAA	2001:db8::01d9
+aaaa-474		IN	AAAA	2001:db8::01da
+aaaa-475		IN	AAAA	2001:db8::01db
+aaaa-476		IN	AAAA	2001:db8::01dc
+aaaa-477		IN	AAAA	2001:db8::01dd
+aaaa-478		IN	AAAA	2001:db8::01de
+aaaa-479		IN	AAAA	2001:db8::01df
+aaaa-480		IN	AAAA	2001:db8::01e0
+aaaa-481		IN	AAAA	2001:db8::01e1
+aaaa-482		IN	AAAA	2001:db8::01e2
+aaaa-483		IN	AAAA	2001:db8::01e3
+aaaa-484		IN	AAAA	2001:db8::01e4
+aaaa-485		IN	AAAA	2001:db8::01e5
+aaaa-486		IN	AAAA	2001:db8::01e6
+aaaa-487		IN	AAAA	2001:db8::01e7
+aaaa-488		IN	AAAA	2001:db8::01e8
+aaaa-489		IN	AAAA	2001:db8::01e9
+aaaa-490		IN	AAAA	2001:db8::01ea
+aaaa-491		IN	AAAA	2001:db8::01eb
+aaaa-492		IN	AAAA	2001:db8::01ec
+aaaa-493		IN	AAAA	2001:db8::01ed
+aaaa-494		IN	AAAA	2001:db8::01ee
+aaaa-495		IN	AAAA	2001:db8::01ef
+aaaa-496		IN	AAAA	2001:db8::01f0
+aaaa-497		IN	AAAA	2001:db8::01f1
+aaaa-498		IN	AAAA	2001:db8::01f2
+aaaa-499		IN	AAAA	2001:db8::01f3
+aaaa-500		IN	AAAA	2001:db8::01f4
+aaaa-501		IN	AAAA	2001:db8::01f5
+aaaa-502		IN	AAAA	2001:db8::01f6
+aaaa-503		IN	AAAA	2001:db8::01f7
+aaaa-504		IN	AAAA	2001:db8::01f8
+aaaa-505		IN	AAAA	2001:db8::01f9
+aaaa-506		IN	AAAA	2001:db8::01fa
+aaaa-507		IN	AAAA	2001:db8::01fb
+aaaa-508		IN	AAAA	2001:db8::01fc
+aaaa-509		IN	AAAA	2001:db8::01fd
+aaaa-510		IN	AAAA	2001:db8::01fe
+aaaa-511		IN	AAAA	2001:db8::01ff
+
+bbbb-000		IN	AAAA	2001:db8::1:0000
+bbbb-001		IN	AAAA	2001:db8::1:0001
+bbbb-002		IN	AAAA	2001:db8::1:0002
+bbbb-003		IN	AAAA	2001:db8::1:0003
+bbbb-004		IN	AAAA	2001:db8::1:0004
+bbbb-005		IN	AAAA	2001:db8::1:0005
+bbbb-006		IN	AAAA	2001:db8::1:0006
+bbbb-007		IN	AAAA	2001:db8::1:0007
+bbbb-008		IN	AAAA	2001:db8::1:0008
+bbbb-009		IN	AAAA	2001:db8::1:0009
+bbbb-010		IN	AAAA	2001:db8::1:000a
+bbbb-011		IN	AAAA	2001:db8::1:000b
+bbbb-012		IN	AAAA	2001:db8::1:000c
+bbbb-013		IN	AAAA	2001:db8::1:000d
+bbbb-014		IN	AAAA	2001:db8::1:000e
+bbbb-015		IN	AAAA	2001:db8::1:000f
+bbbb-016		IN	AAAA	2001:db8::1:0010
+bbbb-017		IN	AAAA	2001:db8::1:0011
+bbbb-018		IN	AAAA	2001:db8::1:0012
+bbbb-019		IN	AAAA	2001:db8::1:0013
+bbbb-020		IN	AAAA	2001:db8::1:0014
+bbbb-021		IN	AAAA	2001:db8::1:0015
+bbbb-022		IN	AAAA	2001:db8::1:0016
+bbbb-023		IN	AAAA	2001:db8::1:0017
+bbbb-024		IN	AAAA	2001:db8::1:0018
+bbbb-025		IN	AAAA	2001:db8::1:0019
+bbbb-026		IN	AAAA	2001:db8::1:001a
+bbbb-027		IN	AAAA	2001:db8::1:001b
+bbbb-028		IN	AAAA	2001:db8::1:001c
+bbbb-029		IN	AAAA	2001:db8::1:001d
+bbbb-030		IN	AAAA	2001:db8::1:001e
+bbbb-031		IN	AAAA	2001:db8::1:001f
+bbbb-032		IN	AAAA	2001:db8::1:0020
+bbbb-033		IN	AAAA	2001:db8::1:0021
+bbbb-034		IN	AAAA	2001:db8::1:0022
+bbbb-035		IN	AAAA	2001:db8::1:0023
+bbbb-036		IN	AAAA	2001:db8::1:0024
+bbbb-037		IN	AAAA	2001:db8::1:0025
+bbbb-038		IN	AAAA	2001:db8::1:0026
+bbbb-039		IN	AAAA	2001:db8::1:0027
+bbbb-040		IN	AAAA	2001:db8::1:0028
+bbbb-041		IN	AAAA	2001:db8::1:0029
+bbbb-042		IN	AAAA	2001:db8::1:002a
+bbbb-043		IN	AAAA	2001:db8::1:002b
+bbbb-044		IN	AAAA	2001:db8::1:002c
+bbbb-045		IN	AAAA	2001:db8::1:002d
+bbbb-046		IN	AAAA	2001:db8::1:002e
+bbbb-047		IN	AAAA	2001:db8::1:002f
+bbbb-048		IN	AAAA	2001:db8::1:0030
+bbbb-049		IN	AAAA	2001:db8::1:0031
+bbbb-050		IN	AAAA	2001:db8::1:0032
+bbbb-051		IN	AAAA	2001:db8::1:0033
+bbbb-052		IN	AAAA	2001:db8::1:0034
+bbbb-053		IN	AAAA	2001:db8::1:0035
+bbbb-054		IN	AAAA	2001:db8::1:0036
+bbbb-055		IN	AAAA	2001:db8::1:0037
+bbbb-056		IN	AAAA	2001:db8::1:0038
+bbbb-057		IN	AAAA	2001:db8::1:0039
+bbbb-058		IN	AAAA	2001:db8::1:003a
+bbbb-059		IN	AAAA	2001:db8::1:003b
+bbbb-060		IN	AAAA	2001:db8::1:003c
+bbbb-061		IN	AAAA	2001:db8::1:003d
+bbbb-062		IN	AAAA	2001:db8::1:003e
+bbbb-063		IN	AAAA	2001:db8::1:003f
+bbbb-064		IN	AAAA	2001:db8::1:0040
+bbbb-065		IN	AAAA	2001:db8::1:0041
+bbbb-066		IN	AAAA	2001:db8::1:0042
+bbbb-067		IN	AAAA	2001:db8::1:0043
+bbbb-068		IN	AAAA	2001:db8::1:0044
+bbbb-069		IN	AAAA	2001:db8::1:0045
+bbbb-070		IN	AAAA	2001:db8::1:0046
+bbbb-071		IN	AAAA	2001:db8::1:0047
+bbbb-072		IN	AAAA	2001:db8::1:0048
+bbbb-073		IN	AAAA	2001:db8::1:0049
+bbbb-074		IN	AAAA	2001:db8::1:004a
+bbbb-075		IN	AAAA	2001:db8::1:004b
+bbbb-076		IN	AAAA	2001:db8::1:004c
+bbbb-077		IN	AAAA	2001:db8::1:004d
+bbbb-078		IN	AAAA	2001:db8::1:004e
+bbbb-079		IN	AAAA	2001:db8::1:004f
+bbbb-080		IN	AAAA	2001:db8::1:0050
+bbbb-081		IN	AAAA	2001:db8::1:0051
+bbbb-082		IN	AAAA	2001:db8::1:0052
+bbbb-083		IN	AAAA	2001:db8::1:0053
+bbbb-084		IN	AAAA	2001:db8::1:0054
+bbbb-085		IN	AAAA	2001:db8::1:0055
+bbbb-086		IN	AAAA	2001:db8::1:0056
+bbbb-087		IN	AAAA	2001:db8::1:0057
+bbbb-088		IN	AAAA	2001:db8::1:0058
+bbbb-089		IN	AAAA	2001:db8::1:0059
+bbbb-090		IN	AAAA	2001:db8::1:005a
+bbbb-091		IN	AAAA	2001:db8::1:005b
+bbbb-092		IN	AAAA	2001:db8::1:005c
+bbbb-093		IN	AAAA	2001:db8::1:005d
+bbbb-094		IN	AAAA	2001:db8::1:005e
+bbbb-095		IN	AAAA	2001:db8::1:005f
+bbbb-096		IN	AAAA	2001:db8::1:0060
+bbbb-097		IN	AAAA	2001:db8::1:0061
+bbbb-098		IN	AAAA	2001:db8::1:0062
+bbbb-099		IN	AAAA	2001:db8::1:0063
+bbbb-100		IN	AAAA	2001:db8::1:0064
+bbbb-101		IN	AAAA	2001:db8::1:0065
+bbbb-102		IN	AAAA	2001:db8::1:0066
+bbbb-103		IN	AAAA	2001:db8::1:0067
+bbbb-104		IN	AAAA	2001:db8::1:0068
+bbbb-105		IN	AAAA	2001:db8::1:0069
+bbbb-106		IN	AAAA	2001:db8::1:006a
+bbbb-107		IN	AAAA	2001:db8::1:006b
+bbbb-108		IN	AAAA	2001:db8::1:006c
+bbbb-109		IN	AAAA	2001:db8::1:006d
+bbbb-110		IN	AAAA	2001:db8::1:006e
+bbbb-111		IN	AAAA	2001:db8::1:006f
+bbbb-112		IN	AAAA	2001:db8::1:0070
+bbbb-113		IN	AAAA	2001:db8::1:0071
+bbbb-114		IN	AAAA	2001:db8::1:0072
+bbbb-115		IN	AAAA	2001:db8::1:0073
+bbbb-116		IN	AAAA	2001:db8::1:0074
+bbbb-117		IN	AAAA	2001:db8::1:0075
+bbbb-118		IN	AAAA	2001:db8::1:0076
+bbbb-119		IN	AAAA	2001:db8::1:0077
+bbbb-120		IN	AAAA	2001:db8::1:0078
+bbbb-121		IN	AAAA	2001:db8::1:0079
+bbbb-122		IN	AAAA	2001:db8::1:007a
+bbbb-123		IN	AAAA	2001:db8::1:007b
+bbbb-124		IN	AAAA	2001:db8::1:007c
+bbbb-125		IN	AAAA	2001:db8::1:007d
+bbbb-126		IN	AAAA	2001:db8::1:007e
+bbbb-127		IN	AAAA	2001:db8::1:007f
+bbbb-128		IN	AAAA	2001:db8::1:0080
+bbbb-129		IN	AAAA	2001:db8::1:0081
+bbbb-130		IN	AAAA	2001:db8::1:0082
+bbbb-131		IN	AAAA	2001:db8::1:0083
+bbbb-132		IN	AAAA	2001:db8::1:0084
+bbbb-133		IN	AAAA	2001:db8::1:0085
+bbbb-134		IN	AAAA	2001:db8::1:0086
+bbbb-135		IN	AAAA	2001:db8::1:0087
+bbbb-136		IN	AAAA	2001:db8::1:0088
+bbbb-137		IN	AAAA	2001:db8::1:0089
+bbbb-138		IN	AAAA	2001:db8::1:008a
+bbbb-139		IN	AAAA	2001:db8::1:008b
+bbbb-140		IN	AAAA	2001:db8::1:008c
+bbbb-141		IN	AAAA	2001:db8::1:008d
+bbbb-142		IN	AAAA	2001:db8::1:008e
+bbbb-143		IN	AAAA	2001:db8::1:008f
+bbbb-144		IN	AAAA	2001:db8::1:0090
+bbbb-145		IN	AAAA	2001:db8::1:0091
+bbbb-146		IN	AAAA	2001:db8::1:0092
+bbbb-147		IN	AAAA	2001:db8::1:0093
+bbbb-148		IN	AAAA	2001:db8::1:0094
+bbbb-149		IN	AAAA	2001:db8::1:0095
+bbbb-150		IN	AAAA	2001:db8::1:0096
+bbbb-151		IN	AAAA	2001:db8::1:0097
+bbbb-152		IN	AAAA	2001:db8::1:0098
+bbbb-153		IN	AAAA	2001:db8::1:0099
+bbbb-154		IN	AAAA	2001:db8::1:009a
+bbbb-155		IN	AAAA	2001:db8::1:009b
+bbbb-156		IN	AAAA	2001:db8::1:009c
+bbbb-157		IN	AAAA	2001:db8::1:009d
+bbbb-158		IN	AAAA	2001:db8::1:009e
+bbbb-159		IN	AAAA	2001:db8::1:009f
+bbbb-160		IN	AAAA	2001:db8::1:00a0
+bbbb-161		IN	AAAA	2001:db8::1:00a1
+bbbb-162		IN	AAAA	2001:db8::1:00a2
+bbbb-163		IN	AAAA	2001:db8::1:00a3
+bbbb-164		IN	AAAA	2001:db8::1:00a4
+bbbb-165		IN	AAAA	2001:db8::1:00a5
+bbbb-166		IN	AAAA	2001:db8::1:00a6
+bbbb-167		IN	AAAA	2001:db8::1:00a7
+bbbb-168		IN	AAAA	2001:db8::1:00a8
+bbbb-169		IN	AAAA	2001:db8::1:00a9
+bbbb-170		IN	AAAA	2001:db8::1:00aa
+bbbb-171		IN	AAAA	2001:db8::1:00ab
+bbbb-172		IN	AAAA	2001:db8::1:00ac
+bbbb-173		IN	AAAA	2001:db8::1:00ad
+bbbb-174		IN	AAAA	2001:db8::1:00ae
+bbbb-175		IN	AAAA	2001:db8::1:00af
+bbbb-176		IN	AAAA	2001:db8::1:00b0
+bbbb-177		IN	AAAA	2001:db8::1:00b1
+bbbb-178		IN	AAAA	2001:db8::1:00b2
+bbbb-179		IN	AAAA	2001:db8::1:00b3
+bbbb-180		IN	AAAA	2001:db8::1:00b4
+bbbb-181		IN	AAAA	2001:db8::1:00b5
+bbbb-182		IN	AAAA	2001:db8::1:00b6
+bbbb-183		IN	AAAA	2001:db8::1:00b7
+bbbb-184		IN	AAAA	2001:db8::1:00b8
+bbbb-185		IN	AAAA	2001:db8::1:00b9
+bbbb-186		IN	AAAA	2001:db8::1:00ba
+bbbb-187		IN	AAAA	2001:db8::1:00bb
+bbbb-188		IN	AAAA	2001:db8::1:00bc
+bbbb-189		IN	AAAA	2001:db8::1:00bd
+bbbb-190		IN	AAAA	2001:db8::1:00be
+bbbb-191		IN	AAAA	2001:db8::1:00bf
+bbbb-192		IN	AAAA	2001:db8::1:00c0
+bbbb-193		IN	AAAA	2001:db8::1:00c1
+bbbb-194		IN	AAAA	2001:db8::1:00c2
+bbbb-195		IN	AAAA	2001:db8::1:00c3
+bbbb-196		IN	AAAA	2001:db8::1:00c4
+bbbb-197		IN	AAAA	2001:db8::1:00c5
+bbbb-198		IN	AAAA	2001:db8::1:00c6
+bbbb-199		IN	AAAA	2001:db8::1:00c7
+bbbb-200		IN	AAAA	2001:db8::1:00c8
+bbbb-201		IN	AAAA	2001:db8::1:00c9
+bbbb-202		IN	AAAA	2001:db8::1:00ca
+bbbb-203		IN	AAAA	2001:db8::1:00cb
+bbbb-204		IN	AAAA	2001:db8::1:00cc
+bbbb-205		IN	AAAA	2001:db8::1:00cd
+bbbb-206		IN	AAAA	2001:db8::1:00ce
+bbbb-207		IN	AAAA	2001:db8::1:00cf
+bbbb-208		IN	AAAA	2001:db8::1:00d0
+bbbb-209		IN	AAAA	2001:db8::1:00d1
+bbbb-210		IN	AAAA	2001:db8::1:00d2
+bbbb-211		IN	AAAA	2001:db8::1:00d3
+bbbb-212		IN	AAAA	2001:db8::1:00d4
+bbbb-213		IN	AAAA	2001:db8::1:00d5
+bbbb-214		IN	AAAA	2001:db8::1:00d6
+bbbb-215		IN	AAAA	2001:db8::1:00d7
+bbbb-216		IN	AAAA	2001:db8::1:00d8
+bbbb-217		IN	AAAA	2001:db8::1:00d9
+bbbb-218		IN	AAAA	2001:db8::1:00da
+bbbb-219		IN	AAAA	2001:db8::1:00db
+bbbb-220		IN	AAAA	2001:db8::1:00dc
+bbbb-221		IN	AAAA	2001:db8::1:00dd
+bbbb-222		IN	AAAA	2001:db8::1:00de
+bbbb-223		IN	AAAA	2001:db8::1:00df
+bbbb-224		IN	AAAA	2001:db8::1:00e0
+bbbb-225		IN	AAAA	2001:db8::1:00e1
+bbbb-226		IN	AAAA	2001:db8::1:00e2
+bbbb-227		IN	AAAA	2001:db8::1:00e3
+bbbb-228		IN	AAAA	2001:db8::1:00e4
+bbbb-229		IN	AAAA	2001:db8::1:00e5
+bbbb-230		IN	AAAA	2001:db8::1:00e6
+bbbb-231		IN	AAAA	2001:db8::1:00e7
+bbbb-232		IN	AAAA	2001:db8::1:00e8
+bbbb-233		IN	AAAA	2001:db8::1:00e9
+bbbb-234		IN	AAAA	2001:db8::1:00ea
+bbbb-235		IN	AAAA	2001:db8::1:00eb
+bbbb-236		IN	AAAA	2001:db8::1:00ec
+bbbb-237		IN	AAAA	2001:db8::1:00ed
+bbbb-238		IN	AAAA	2001:db8::1:00ee
+bbbb-239		IN	AAAA	2001:db8::1:00ef
+bbbb-240		IN	AAAA	2001:db8::1:00f0
+bbbb-241		IN	AAAA	2001:db8::1:00f1
+bbbb-242		IN	AAAA	2001:db8::1:00f2
+bbbb-243		IN	AAAA	2001:db8::1:00f3
+bbbb-244		IN	AAAA	2001:db8::1:00f4
+bbbb-245		IN	AAAA	2001:db8::1:00f5
+bbbb-246		IN	AAAA	2001:db8::1:00f6
+bbbb-247		IN	AAAA	2001:db8::1:00f7
+bbbb-248		IN	AAAA	2001:db8::1:00f8
+bbbb-249		IN	AAAA	2001:db8::1:00f9
+bbbb-250		IN	AAAA	2001:db8::1:00fa
+bbbb-251		IN	AAAA	2001:db8::1:00fb
+bbbb-252		IN	AAAA	2001:db8::1:00fc
+bbbb-253		IN	AAAA	2001:db8::1:00fd
+bbbb-254		IN	AAAA	2001:db8::1:00fe
+bbbb-255		IN	AAAA	2001:db8::1:00ff
+bbbb-256		IN	AAAA	2001:db8::1:0100
+bbbb-257		IN	AAAA	2001:db8::1:0101
+bbbb-258		IN	AAAA	2001:db8::1:0102
+bbbb-259		IN	AAAA	2001:db8::1:0103
+bbbb-260		IN	AAAA	2001:db8::1:0104
+bbbb-261		IN	AAAA	2001:db8::1:0105
+bbbb-262		IN	AAAA	2001:db8::1:0106
+bbbb-263		IN	AAAA	2001:db8::1:0107
+bbbb-264		IN	AAAA	2001:db8::1:0108
+bbbb-265		IN	AAAA	2001:db8::1:0109
+bbbb-266		IN	AAAA	2001:db8::1:010a
+bbbb-267		IN	AAAA	2001:db8::1:010b
+bbbb-268		IN	AAAA	2001:db8::1:010c
+bbbb-269		IN	AAAA	2001:db8::1:010d
+bbbb-270		IN	AAAA	2001:db8::1:010e
+bbbb-271		IN	AAAA	2001:db8::1:010f
+bbbb-272		IN	AAAA	2001:db8::1:0110
+bbbb-273		IN	AAAA	2001:db8::1:0111
+bbbb-274		IN	AAAA	2001:db8::1:0112
+bbbb-275		IN	AAAA	2001:db8::1:0113
+bbbb-276		IN	AAAA	2001:db8::1:0114
+bbbb-277		IN	AAAA	2001:db8::1:0115
+bbbb-278		IN	AAAA	2001:db8::1:0116
+bbbb-279		IN	AAAA	2001:db8::1:0117
+bbbb-280		IN	AAAA	2001:db8::1:0118
+bbbb-281		IN	AAAA	2001:db8::1:0119
+bbbb-282		IN	AAAA	2001:db8::1:011a
+bbbb-283		IN	AAAA	2001:db8::1:011b
+bbbb-284		IN	AAAA	2001:db8::1:011c
+bbbb-285		IN	AAAA	2001:db8::1:011d
+bbbb-286		IN	AAAA	2001:db8::1:011e
+bbbb-287		IN	AAAA	2001:db8::1:011f
+bbbb-288		IN	AAAA	2001:db8::1:0120
+bbbb-289		IN	AAAA	2001:db8::1:0121
+bbbb-290		IN	AAAA	2001:db8::1:0122
+bbbb-291		IN	AAAA	2001:db8::1:0123
+bbbb-292		IN	AAAA	2001:db8::1:0124
+bbbb-293		IN	AAAA	2001:db8::1:0125
+bbbb-294		IN	AAAA	2001:db8::1:0126
+bbbb-295		IN	AAAA	2001:db8::1:0127
+bbbb-296		IN	AAAA	2001:db8::1:0128
+bbbb-297		IN	AAAA	2001:db8::1:0129
+bbbb-298		IN	AAAA	2001:db8::1:012a
+bbbb-299		IN	AAAA	2001:db8::1:012b
+bbbb-300		IN	AAAA	2001:db8::1:012c
+bbbb-301		IN	AAAA	2001:db8::1:012d
+bbbb-302		IN	AAAA	2001:db8::1:012e
+bbbb-303		IN	AAAA	2001:db8::1:012f
+bbbb-304		IN	AAAA	2001:db8::1:0130
+bbbb-305		IN	AAAA	2001:db8::1:0131
+bbbb-306		IN	AAAA	2001:db8::1:0132
+bbbb-307		IN	AAAA	2001:db8::1:0133
+bbbb-308		IN	AAAA	2001:db8::1:0134
+bbbb-309		IN	AAAA	2001:db8::1:0135
+bbbb-310		IN	AAAA	2001:db8::1:0136
+bbbb-311		IN	AAAA	2001:db8::1:0137
+bbbb-312		IN	AAAA	2001:db8::1:0138
+bbbb-313		IN	AAAA	2001:db8::1:0139
+bbbb-314		IN	AAAA	2001:db8::1:013a
+bbbb-315		IN	AAAA	2001:db8::1:013b
+bbbb-316		IN	AAAA	2001:db8::1:013c
+bbbb-317		IN	AAAA	2001:db8::1:013d
+bbbb-318		IN	AAAA	2001:db8::1:013e
+bbbb-319		IN	AAAA	2001:db8::1:013f
+bbbb-320		IN	AAAA	2001:db8::1:0140
+bbbb-321		IN	AAAA	2001:db8::1:0141
+bbbb-322		IN	AAAA	2001:db8::1:0142
+bbbb-323		IN	AAAA	2001:db8::1:0143
+bbbb-324		IN	AAAA	2001:db8::1:0144
+bbbb-325		IN	AAAA	2001:db8::1:0145
+bbbb-326		IN	AAAA	2001:db8::1:0146
+bbbb-327		IN	AAAA	2001:db8::1:0147
+bbbb-328		IN	AAAA	2001:db8::1:0148
+bbbb-329		IN	AAAA	2001:db8::1:0149
+bbbb-330		IN	AAAA	2001:db8::1:014a
+bbbb-331		IN	AAAA	2001:db8::1:014b
+bbbb-332		IN	AAAA	2001:db8::1:014c
+bbbb-333		IN	AAAA	2001:db8::1:014d
+bbbb-334		IN	AAAA	2001:db8::1:014e
+bbbb-335		IN	AAAA	2001:db8::1:014f
+bbbb-336		IN	AAAA	2001:db8::1:0150
+bbbb-337		IN	AAAA	2001:db8::1:0151
+bbbb-338		IN	AAAA	2001:db8::1:0152
+bbbb-339		IN	AAAA	2001:db8::1:0153
+bbbb-340		IN	AAAA	2001:db8::1:0154
+bbbb-341		IN	AAAA	2001:db8::1:0155
+bbbb-342		IN	AAAA	2001:db8::1:0156
+bbbb-343		IN	AAAA	2001:db8::1:0157
+bbbb-344		IN	AAAA	2001:db8::1:0158
+bbbb-345		IN	AAAA	2001:db8::1:0159
+bbbb-346		IN	AAAA	2001:db8::1:015a
+bbbb-347		IN	AAAA	2001:db8::1:015b
+bbbb-348		IN	AAAA	2001:db8::1:015c
+bbbb-349		IN	AAAA	2001:db8::1:015d
+bbbb-350		IN	AAAA	2001:db8::1:015e
+bbbb-351		IN	AAAA	2001:db8::1:015f
+bbbb-352		IN	AAAA	2001:db8::1:0160
+bbbb-353		IN	AAAA	2001:db8::1:0161
+bbbb-354		IN	AAAA	2001:db8::1:0162
+bbbb-355		IN	AAAA	2001:db8::1:0163
+bbbb-356		IN	AAAA	2001:db8::1:0164
+bbbb-357		IN	AAAA	2001:db8::1:0165
+bbbb-358		IN	AAAA	2001:db8::1:0166
+bbbb-359		IN	AAAA	2001:db8::1:0167
+bbbb-360		IN	AAAA	2001:db8::1:0168
+bbbb-361		IN	AAAA	2001:db8::1:0169
+bbbb-362		IN	AAAA	2001:db8::1:016a
+bbbb-363		IN	AAAA	2001:db8::1:016b
+bbbb-364		IN	AAAA	2001:db8::1:016c
+bbbb-365		IN	AAAA	2001:db8::1:016d
+bbbb-366		IN	AAAA	2001:db8::1:016e
+bbbb-367		IN	AAAA	2001:db8::1:016f
+bbbb-368		IN	AAAA	2001:db8::1:0170
+bbbb-369		IN	AAAA	2001:db8::1:0171
+bbbb-370		IN	AAAA	2001:db8::1:0172
+bbbb-371		IN	AAAA	2001:db8::1:0173
+bbbb-372		IN	AAAA	2001:db8::1:0174
+bbbb-373		IN	AAAA	2001:db8::1:0175
+bbbb-374		IN	AAAA	2001:db8::1:0176
+bbbb-375		IN	AAAA	2001:db8::1:0177
+bbbb-376		IN	AAAA	2001:db8::1:0178
+bbbb-377		IN	AAAA	2001:db8::1:0179
+bbbb-378		IN	AAAA	2001:db8::1:017a
+bbbb-379		IN	AAAA	2001:db8::1:017b
+bbbb-380		IN	AAAA	2001:db8::1:017c
+bbbb-381		IN	AAAA	2001:db8::1:017d
+bbbb-382		IN	AAAA	2001:db8::1:017e
+bbbb-383		IN	AAAA	2001:db8::1:017f
+bbbb-384		IN	AAAA	2001:db8::1:0180
+bbbb-385		IN	AAAA	2001:db8::1:0181
+bbbb-386		IN	AAAA	2001:db8::1:0182
+bbbb-387		IN	AAAA	2001:db8::1:0183
+bbbb-388		IN	AAAA	2001:db8::1:0184
+bbbb-389		IN	AAAA	2001:db8::1:0185
+bbbb-390		IN	AAAA	2001:db8::1:0186
+bbbb-391		IN	AAAA	2001:db8::1:0187
+bbbb-392		IN	AAAA	2001:db8::1:0188
+bbbb-393		IN	AAAA	2001:db8::1:0189
+bbbb-394		IN	AAAA	2001:db8::1:018a
+bbbb-395		IN	AAAA	2001:db8::1:018b
+bbbb-396		IN	AAAA	2001:db8::1:018c
+bbbb-397		IN	AAAA	2001:db8::1:018d
+bbbb-398		IN	AAAA	2001:db8::1:018e
+bbbb-399		IN	AAAA	2001:db8::1:018f
+bbbb-400		IN	AAAA	2001:db8::1:0190
+bbbb-401		IN	AAAA	2001:db8::1:0191
+bbbb-402		IN	AAAA	2001:db8::1:0192
+bbbb-403		IN	AAAA	2001:db8::1:0193
+bbbb-404		IN	AAAA	2001:db8::1:0194
+bbbb-405		IN	AAAA	2001:db8::1:0195
+bbbb-406		IN	AAAA	2001:db8::1:0196
+bbbb-407		IN	AAAA	2001:db8::1:0197
+bbbb-408		IN	AAAA	2001:db8::1:0198
+bbbb-409		IN	AAAA	2001:db8::1:0199
+bbbb-410		IN	AAAA	2001:db8::1:019a
+bbbb-411		IN	AAAA	2001:db8::1:019b
+bbbb-412		IN	AAAA	2001:db8::1:019c
+bbbb-413		IN	AAAA	2001:db8::1:019d
+bbbb-414		IN	AAAA	2001:db8::1:019e
+bbbb-415		IN	AAAA	2001:db8::1:019f
+bbbb-416		IN	AAAA	2001:db8::1:01a0
+bbbb-417		IN	AAAA	2001:db8::1:01a1
+bbbb-418		IN	AAAA	2001:db8::1:01a2
+bbbb-419		IN	AAAA	2001:db8::1:01a3
+bbbb-420		IN	AAAA	2001:db8::1:01a4
+bbbb-421		IN	AAAA	2001:db8::1:01a5
+bbbb-422		IN	AAAA	2001:db8::1:01a6
+bbbb-423		IN	AAAA	2001:db8::1:01a7
+bbbb-424		IN	AAAA	2001:db8::1:01a8
+bbbb-425		IN	AAAA	2001:db8::1:01a9
+bbbb-426		IN	AAAA	2001:db8::1:01aa
+bbbb-427		IN	AAAA	2001:db8::1:01ab
+bbbb-428		IN	AAAA	2001:db8::1:01ac
+bbbb-429		IN	AAAA	2001:db8::1:01ad
+bbbb-430		IN	AAAA	2001:db8::1:01ae
+bbbb-431		IN	AAAA	2001:db8::1:01af
+bbbb-432		IN	AAAA	2001:db8::1:01b0
+bbbb-433		IN	AAAA	2001:db8::1:01b1
+bbbb-434		IN	AAAA	2001:db8::1:01b2
+bbbb-435		IN	AAAA	2001:db8::1:01b3
+bbbb-436		IN	AAAA	2001:db8::1:01b4
+bbbb-437		IN	AAAA	2001:db8::1:01b5
+bbbb-438		IN	AAAA	2001:db8::1:01b6
+bbbb-439		IN	AAAA	2001:db8::1:01b7
+bbbb-440		IN	AAAA	2001:db8::1:01b8
+bbbb-441		IN	AAAA	2001:db8::1:01b9
+bbbb-442		IN	AAAA	2001:db8::1:01ba
+bbbb-443		IN	AAAA	2001:db8::1:01bb
+bbbb-444		IN	AAAA	2001:db8::1:01bc
+bbbb-445		IN	AAAA	2001:db8::1:01bd
+bbbb-446		IN	AAAA	2001:db8::1:01be
+bbbb-447		IN	AAAA	2001:db8::1:01bf
+bbbb-448		IN	AAAA	2001:db8::1:01c0
+bbbb-449		IN	AAAA	2001:db8::1:01c1
+bbbb-450		IN	AAAA	2001:db8::1:01c2
+bbbb-451		IN	AAAA	2001:db8::1:01c3
+bbbb-452		IN	AAAA	2001:db8::1:01c4
+bbbb-453		IN	AAAA	2001:db8::1:01c5
+bbbb-454		IN	AAAA	2001:db8::1:01c6
+bbbb-455		IN	AAAA	2001:db8::1:01c7
+bbbb-456		IN	AAAA	2001:db8::1:01c8
+bbbb-457		IN	AAAA	2001:db8::1:01c9
+bbbb-458		IN	AAAA	2001:db8::1:01ca
+bbbb-459		IN	AAAA	2001:db8::1:01cb
+bbbb-460		IN	AAAA	2001:db8::1:01cc
+bbbb-461		IN	AAAA	2001:db8::1:01cd
+bbbb-462		IN	AAAA	2001:db8::1:01ce
+bbbb-463		IN	AAAA	2001:db8::1:01cf
+bbbb-464		IN	AAAA	2001:db8::1:01d0
+bbbb-465		IN	AAAA	2001:db8::1:01d1
+bbbb-466		IN	AAAA	2001:db8::1:01d2
+bbbb-467		IN	AAAA	2001:db8::1:01d3
+bbbb-468		IN	AAAA	2001:db8::1:01d4
+bbbb-469		IN	AAAA	2001:db8::1:01d5
+bbbb-470		IN	AAAA	2001:db8::1:01d6
+bbbb-471		IN	AAAA	2001:db8::1:01d7
+bbbb-472		IN	AAAA	2001:db8::1:01d8
+bbbb-473		IN	AAAA	2001:db8::1:01d9
+bbbb-474		IN	AAAA	2001:db8::1:01da
+bbbb-475		IN	AAAA	2001:db8::1:01db
+bbbb-476		IN	AAAA	2001:db8::1:01dc
+bbbb-477		IN	AAAA	2001:db8::1:01dd
+bbbb-478		IN	AAAA	2001:db8::1:01de
+bbbb-479		IN	AAAA	2001:db8::1:01df
+bbbb-480		IN	AAAA	2001:db8::1:01e0
+bbbb-481		IN	AAAA	2001:db8::1:01e1
+bbbb-482		IN	AAAA	2001:db8::1:01e2
+bbbb-483		IN	AAAA	2001:db8::1:01e3
+bbbb-484		IN	AAAA	2001:db8::1:01e4
+bbbb-485		IN	AAAA	2001:db8::1:01e5
+bbbb-486		IN	AAAA	2001:db8::1:01e6
+bbbb-487		IN	AAAA	2001:db8::1:01e7
+bbbb-488		IN	AAAA	2001:db8::1:01e8
+bbbb-489		IN	AAAA	2001:db8::1:01e9
+bbbb-490		IN	AAAA	2001:db8::1:01ea
+bbbb-491		IN	AAAA	2001:db8::1:01eb
+bbbb-492		IN	AAAA	2001:db8::1:01ec
+bbbb-493		IN	AAAA	2001:db8::1:01ed
+bbbb-494		IN	AAAA	2001:db8::1:01ee
+bbbb-495		IN	AAAA	2001:db8::1:01ef
+bbbb-496		IN	AAAA	2001:db8::1:01f0
+bbbb-497		IN	AAAA	2001:db8::1:01f1
+bbbb-498		IN	AAAA	2001:db8::1:01f2
+bbbb-499		IN	AAAA	2001:db8::1:01f3
+bbbb-500		IN	AAAA	2001:db8::1:01f4
+bbbb-501		IN	AAAA	2001:db8::1:01f5
+bbbb-502		IN	AAAA	2001:db8::1:01f6
+bbbb-503		IN	AAAA	2001:db8::1:01f7
+bbbb-504		IN	AAAA	2001:db8::1:01f8
+bbbb-505		IN	AAAA	2001:db8::1:01f9
+bbbb-506		IN	AAAA	2001:db8::1:01fa
+bbbb-507		IN	AAAA	2001:db8::1:01fb
+bbbb-508		IN	AAAA	2001:db8::1:01fc
+bbbb-509		IN	AAAA	2001:db8::1:01fd
+bbbb-510		IN	AAAA	2001:db8::1:01fe
+bbbb-511		IN	AAAA	2001:db8::1:01ff
+
+cccc-000		IN	AAAA	2001:db8::2:0000
+cccc-001		IN	AAAA	2001:db8::2:0001
+cccc-002		IN	AAAA	2001:db8::2:0002
+cccc-003		IN	AAAA	2001:db8::2:0003
+cccc-004		IN	AAAA	2001:db8::2:0004
+cccc-005		IN	AAAA	2001:db8::2:0005
+cccc-006		IN	AAAA	2001:db8::2:0006
+cccc-007		IN	AAAA	2001:db8::2:0007
+cccc-008		IN	AAAA	2001:db8::2:0008
+cccc-009		IN	AAAA	2001:db8::2:0009
+cccc-010		IN	AAAA	2001:db8::2:000a
+cccc-011		IN	AAAA	2001:db8::2:000b
+cccc-012		IN	AAAA	2001:db8::2:000c
+cccc-013		IN	AAAA	2001:db8::2:000d
+cccc-014		IN	AAAA	2001:db8::2:000e
+cccc-015		IN	AAAA	2001:db8::2:000f
+cccc-016		IN	AAAA	2001:db8::2:0010
+cccc-017		IN	AAAA	2001:db8::2:0011
+cccc-018		IN	AAAA	2001:db8::2:0012
+cccc-019		IN	AAAA	2001:db8::2:0013
+cccc-020		IN	AAAA	2001:db8::2:0014
+cccc-021		IN	AAAA	2001:db8::2:0015
+cccc-022		IN	AAAA	2001:db8::2:0016
+cccc-023		IN	AAAA	2001:db8::2:0017
+cccc-024		IN	AAAA	2001:db8::2:0018
+cccc-025		IN	AAAA	2001:db8::2:0019
+cccc-026		IN	AAAA	2001:db8::2:001a
+cccc-027		IN	AAAA	2001:db8::2:001b
+cccc-028		IN	AAAA	2001:db8::2:001c
+cccc-029		IN	AAAA	2001:db8::2:001d
+cccc-030		IN	AAAA	2001:db8::2:001e
+cccc-031		IN	AAAA	2001:db8::2:001f
+cccc-032		IN	AAAA	2001:db8::2:0020
+cccc-033		IN	AAAA	2001:db8::2:0021
+cccc-034		IN	AAAA	2001:db8::2:0022
+cccc-035		IN	AAAA	2001:db8::2:0023
+cccc-036		IN	AAAA	2001:db8::2:0024
+cccc-037		IN	AAAA	2001:db8::2:0025
+cccc-038		IN	AAAA	2001:db8::2:0026
+cccc-039		IN	AAAA	2001:db8::2:0027
+cccc-040		IN	AAAA	2001:db8::2:0028
+cccc-041		IN	AAAA	2001:db8::2:0029
+cccc-042		IN	AAAA	2001:db8::2:002a
+cccc-043		IN	AAAA	2001:db8::2:002b
+cccc-044		IN	AAAA	2001:db8::2:002c
+cccc-045		IN	AAAA	2001:db8::2:002d
+cccc-046		IN	AAAA	2001:db8::2:002e
+cccc-047		IN	AAAA	2001:db8::2:002f
+cccc-048		IN	AAAA	2001:db8::2:0030
+cccc-049		IN	AAAA	2001:db8::2:0031
+cccc-050		IN	AAAA	2001:db8::2:0032
+cccc-051		IN	AAAA	2001:db8::2:0033
+cccc-052		IN	AAAA	2001:db8::2:0034
+cccc-053		IN	AAAA	2001:db8::2:0035
+cccc-054		IN	AAAA	2001:db8::2:0036
+cccc-055		IN	AAAA	2001:db8::2:0037
+cccc-056		IN	AAAA	2001:db8::2:0038
+cccc-057		IN	AAAA	2001:db8::2:0039
+cccc-058		IN	AAAA	2001:db8::2:003a
+cccc-059		IN	AAAA	2001:db8::2:003b
+cccc-060		IN	AAAA	2001:db8::2:003c
+cccc-061		IN	AAAA	2001:db8::2:003d
+cccc-062		IN	AAAA	2001:db8::2:003e
+cccc-063		IN	AAAA	2001:db8::2:003f
+cccc-064		IN	AAAA	2001:db8::2:0040
+cccc-065		IN	AAAA	2001:db8::2:0041
+cccc-066		IN	AAAA	2001:db8::2:0042
+cccc-067		IN	AAAA	2001:db8::2:0043
+cccc-068		IN	AAAA	2001:db8::2:0044
+cccc-069		IN	AAAA	2001:db8::2:0045
+cccc-070		IN	AAAA	2001:db8::2:0046
+cccc-071		IN	AAAA	2001:db8::2:0047
+cccc-072		IN	AAAA	2001:db8::2:0048
+cccc-073		IN	AAAA	2001:db8::2:0049
+cccc-074		IN	AAAA	2001:db8::2:004a
+cccc-075		IN	AAAA	2001:db8::2:004b
+cccc-076		IN	AAAA	2001:db8::2:004c
+cccc-077		IN	AAAA	2001:db8::2:004d
+cccc-078		IN	AAAA	2001:db8::2:004e
+cccc-079		IN	AAAA	2001:db8::2:004f
+cccc-080		IN	AAAA	2001:db8::2:0050
+cccc-081		IN	AAAA	2001:db8::2:0051
+cccc-082		IN	AAAA	2001:db8::2:0052
+cccc-083		IN	AAAA	2001:db8::2:0053
+cccc-084		IN	AAAA	2001:db8::2:0054
+cccc-085		IN	AAAA	2001:db8::2:0055
+cccc-086		IN	AAAA	2001:db8::2:0056
+cccc-087		IN	AAAA	2001:db8::2:0057
+cccc-088		IN	AAAA	2001:db8::2:0058
+cccc-089		IN	AAAA	2001:db8::2:0059
+cccc-090		IN	AAAA	2001:db8::2:005a
+cccc-091		IN	AAAA	2001:db8::2:005b
+cccc-092		IN	AAAA	2001:db8::2:005c
+cccc-093		IN	AAAA	2001:db8::2:005d
+cccc-094		IN	AAAA	2001:db8::2:005e
+cccc-095		IN	AAAA	2001:db8::2:005f
+cccc-096		IN	AAAA	2001:db8::2:0060
+cccc-097		IN	AAAA	2001:db8::2:0061
+cccc-098		IN	AAAA	2001:db8::2:0062
+cccc-099		IN	AAAA	2001:db8::2:0063
+cccc-100		IN	AAAA	2001:db8::2:0064
+cccc-101		IN	AAAA	2001:db8::2:0065
+cccc-102		IN	AAAA	2001:db8::2:0066
+cccc-103		IN	AAAA	2001:db8::2:0067
+cccc-104		IN	AAAA	2001:db8::2:0068
+cccc-105		IN	AAAA	2001:db8::2:0069
+cccc-106		IN	AAAA	2001:db8::2:006a
+cccc-107		IN	AAAA	2001:db8::2:006b
+cccc-108		IN	AAAA	2001:db8::2:006c
+cccc-109		IN	AAAA	2001:db8::2:006d
+cccc-110		IN	AAAA	2001:db8::2:006e
+cccc-111		IN	AAAA	2001:db8::2:006f
+cccc-112		IN	AAAA	2001:db8::2:0070
+cccc-113		IN	AAAA	2001:db8::2:0071
+cccc-114		IN	AAAA	2001:db8::2:0072
+cccc-115		IN	AAAA	2001:db8::2:0073
+cccc-116		IN	AAAA	2001:db8::2:0074
+cccc-117		IN	AAAA	2001:db8::2:0075
+cccc-118		IN	AAAA	2001:db8::2:0076
+cccc-119		IN	AAAA	2001:db8::2:0077
+cccc-120		IN	AAAA	2001:db8::2:0078
+cccc-121		IN	AAAA	2001:db8::2:0079
+cccc-122		IN	AAAA	2001:db8::2:007a
+cccc-123		IN	AAAA	2001:db8::2:007b
+cccc-124		IN	AAAA	2001:db8::2:007c
+cccc-125		IN	AAAA	2001:db8::2:007d
+cccc-126		IN	AAAA	2001:db8::2:007e
+cccc-127		IN	AAAA	2001:db8::2:007f
+cccc-128		IN	AAAA	2001:db8::2:0080
+cccc-129		IN	AAAA	2001:db8::2:0081
+cccc-130		IN	AAAA	2001:db8::2:0082
+cccc-131		IN	AAAA	2001:db8::2:0083
+cccc-132		IN	AAAA	2001:db8::2:0084
+cccc-133		IN	AAAA	2001:db8::2:0085
+cccc-134		IN	AAAA	2001:db8::2:0086
+cccc-135		IN	AAAA	2001:db8::2:0087
+cccc-136		IN	AAAA	2001:db8::2:0088
+cccc-137		IN	AAAA	2001:db8::2:0089
+cccc-138		IN	AAAA	2001:db8::2:008a
+cccc-139		IN	AAAA	2001:db8::2:008b
+cccc-140		IN	AAAA	2001:db8::2:008c
+cccc-141		IN	AAAA	2001:db8::2:008d
+cccc-142		IN	AAAA	2001:db8::2:008e
+cccc-143		IN	AAAA	2001:db8::2:008f
+cccc-144		IN	AAAA	2001:db8::2:0090
+cccc-145		IN	AAAA	2001:db8::2:0091
+cccc-146		IN	AAAA	2001:db8::2:0092
+cccc-147		IN	AAAA	2001:db8::2:0093
+cccc-148		IN	AAAA	2001:db8::2:0094
+cccc-149		IN	AAAA	2001:db8::2:0095
+cccc-150		IN	AAAA	2001:db8::2:0096
+cccc-151		IN	AAAA	2001:db8::2:0097
+cccc-152		IN	AAAA	2001:db8::2:0098
+cccc-153		IN	AAAA	2001:db8::2:0099
+cccc-154		IN	AAAA	2001:db8::2:009a
+cccc-155		IN	AAAA	2001:db8::2:009b
+cccc-156		IN	AAAA	2001:db8::2:009c
+cccc-157		IN	AAAA	2001:db8::2:009d
+cccc-158		IN	AAAA	2001:db8::2:009e
+cccc-159		IN	AAAA	2001:db8::2:009f
+cccc-160		IN	AAAA	2001:db8::2:00a0
+cccc-161		IN	AAAA	2001:db8::2:00a1
+cccc-162		IN	AAAA	2001:db8::2:00a2
+cccc-163		IN	AAAA	2001:db8::2:00a3
+cccc-164		IN	AAAA	2001:db8::2:00a4
+cccc-165		IN	AAAA	2001:db8::2:00a5
+cccc-166		IN	AAAA	2001:db8::2:00a6
+cccc-167		IN	AAAA	2001:db8::2:00a7
+cccc-168		IN	AAAA	2001:db8::2:00a8
+cccc-169		IN	AAAA	2001:db8::2:00a9
+cccc-170		IN	AAAA	2001:db8::2:00aa
+cccc-171		IN	AAAA	2001:db8::2:00ab
+cccc-172		IN	AAAA	2001:db8::2:00ac
+cccc-173		IN	AAAA	2001:db8::2:00ad
+cccc-174		IN	AAAA	2001:db8::2:00ae
+cccc-175		IN	AAAA	2001:db8::2:00af
+cccc-176		IN	AAAA	2001:db8::2:00b0
+cccc-177		IN	AAAA	2001:db8::2:00b1
+cccc-178		IN	AAAA	2001:db8::2:00b2
+cccc-179		IN	AAAA	2001:db8::2:00b3
+cccc-180		IN	AAAA	2001:db8::2:00b4
+cccc-181		IN	AAAA	2001:db8::2:00b5
+cccc-182		IN	AAAA	2001:db8::2:00b6
+cccc-183		IN	AAAA	2001:db8::2:00b7
+cccc-184		IN	AAAA	2001:db8::2:00b8
+cccc-185		IN	AAAA	2001:db8::2:00b9
+cccc-186		IN	AAAA	2001:db8::2:00ba
+cccc-187		IN	AAAA	2001:db8::2:00bb
+cccc-188		IN	AAAA	2001:db8::2:00bc
+cccc-189		IN	AAAA	2001:db8::2:00bd
+cccc-190		IN	AAAA	2001:db8::2:00be
+cccc-191		IN	AAAA	2001:db8::2:00bf
+cccc-192		IN	AAAA	2001:db8::2:00c0
+cccc-193		IN	AAAA	2001:db8::2:00c1
+cccc-194		IN	AAAA	2001:db8::2:00c2
+cccc-195		IN	AAAA	2001:db8::2:00c3
+cccc-196		IN	AAAA	2001:db8::2:00c4
+cccc-197		IN	AAAA	2001:db8::2:00c5
+cccc-198		IN	AAAA	2001:db8::2:00c6
+cccc-199		IN	AAAA	2001:db8::2:00c7
+cccc-200		IN	AAAA	2001:db8::2:00c8
+cccc-201		IN	AAAA	2001:db8::2:00c9
+cccc-202		IN	AAAA	2001:db8::2:00ca
+cccc-203		IN	AAAA	2001:db8::2:00cb
+cccc-204		IN	AAAA	2001:db8::2:00cc
+cccc-205		IN	AAAA	2001:db8::2:00cd
+cccc-206		IN	AAAA	2001:db8::2:00ce
+cccc-207		IN	AAAA	2001:db8::2:00cf
+cccc-208		IN	AAAA	2001:db8::2:00d0
+cccc-209		IN	AAAA	2001:db8::2:00d1
+cccc-210		IN	AAAA	2001:db8::2:00d2
+cccc-211		IN	AAAA	2001:db8::2:00d3
+cccc-212		IN	AAAA	2001:db8::2:00d4
+cccc-213		IN	AAAA	2001:db8::2:00d5
+cccc-214		IN	AAAA	2001:db8::2:00d6
+cccc-215		IN	AAAA	2001:db8::2:00d7
+cccc-216		IN	AAAA	2001:db8::2:00d8
+cccc-217		IN	AAAA	2001:db8::2:00d9
+cccc-218		IN	AAAA	2001:db8::2:00da
+cccc-219		IN	AAAA	2001:db8::2:00db
+cccc-220		IN	AAAA	2001:db8::2:00dc
+cccc-221		IN	AAAA	2001:db8::2:00dd
+cccc-222		IN	AAAA	2001:db8::2:00de
+cccc-223		IN	AAAA	2001:db8::2:00df
+cccc-224		IN	AAAA	2001:db8::2:00e0
+cccc-225		IN	AAAA	2001:db8::2:00e1
+cccc-226		IN	AAAA	2001:db8::2:00e2
+cccc-227		IN	AAAA	2001:db8::2:00e3
+cccc-228		IN	AAAA	2001:db8::2:00e4
+cccc-229		IN	AAAA	2001:db8::2:00e5
+cccc-230		IN	AAAA	2001:db8::2:00e6
+cccc-231		IN	AAAA	2001:db8::2:00e7
+cccc-232		IN	AAAA	2001:db8::2:00e8
+cccc-233		IN	AAAA	2001:db8::2:00e9
+cccc-234		IN	AAAA	2001:db8::2:00ea
+cccc-235		IN	AAAA	2001:db8::2:00eb
+cccc-236		IN	AAAA	2001:db8::2:00ec
+cccc-237		IN	AAAA	2001:db8::2:00ed
+cccc-238		IN	AAAA	2001:db8::2:00ee
+cccc-239		IN	AAAA	2001:db8::2:00ef
+cccc-240		IN	AAAA	2001:db8::2:00f0
+cccc-241		IN	AAAA	2001:db8::2:00f1
+cccc-242		IN	AAAA	2001:db8::2:00f2
+cccc-243		IN	AAAA	2001:db8::2:00f3
+cccc-244		IN	AAAA	2001:db8::2:00f4
+cccc-245		IN	AAAA	2001:db8::2:00f5
+cccc-246		IN	AAAA	2001:db8::2:00f6
+cccc-247		IN	AAAA	2001:db8::2:00f7
+cccc-248		IN	AAAA	2001:db8::2:00f8
+cccc-249		IN	AAAA	2001:db8::2:00f9
+cccc-250		IN	AAAA	2001:db8::2:00fa
+cccc-251		IN	AAAA	2001:db8::2:00fb
+cccc-252		IN	AAAA	2001:db8::2:00fc
+cccc-253		IN	AAAA	2001:db8::2:00fd
+cccc-254		IN	AAAA	2001:db8::2:00fe
+cccc-255		IN	AAAA	2001:db8::2:00ff
+cccc-256		IN	AAAA	2001:db8::2:0100
+cccc-257		IN	AAAA	2001:db8::2:0101
+cccc-258		IN	AAAA	2001:db8::2:0102
+cccc-259		IN	AAAA	2001:db8::2:0103
+cccc-260		IN	AAAA	2001:db8::2:0104
+cccc-261		IN	AAAA	2001:db8::2:0105
+cccc-262		IN	AAAA	2001:db8::2:0106
+cccc-263		IN	AAAA	2001:db8::2:0107
+cccc-264		IN	AAAA	2001:db8::2:0108
+cccc-265		IN	AAAA	2001:db8::2:0109
+cccc-266		IN	AAAA	2001:db8::2:010a
+cccc-267		IN	AAAA	2001:db8::2:010b
+cccc-268		IN	AAAA	2001:db8::2:010c
+cccc-269		IN	AAAA	2001:db8::2:010d
+cccc-270		IN	AAAA	2001:db8::2:010e
+cccc-271		IN	AAAA	2001:db8::2:010f
+cccc-272		IN	AAAA	2001:db8::2:0110
+cccc-273		IN	AAAA	2001:db8::2:0111
+cccc-274		IN	AAAA	2001:db8::2:0112
+cccc-275		IN	AAAA	2001:db8::2:0113
+cccc-276		IN	AAAA	2001:db8::2:0114
+cccc-277		IN	AAAA	2001:db8::2:0115
+cccc-278		IN	AAAA	2001:db8::2:0116
+cccc-279		IN	AAAA	2001:db8::2:0117
+cccc-280		IN	AAAA	2001:db8::2:0118
+cccc-281		IN	AAAA	2001:db8::2:0119
+cccc-282		IN	AAAA	2001:db8::2:011a
+cccc-283		IN	AAAA	2001:db8::2:011b
+cccc-284		IN	AAAA	2001:db8::2:011c
+cccc-285		IN	AAAA	2001:db8::2:011d
+cccc-286		IN	AAAA	2001:db8::2:011e
+cccc-287		IN	AAAA	2001:db8::2:011f
+cccc-288		IN	AAAA	2001:db8::2:0120
+cccc-289		IN	AAAA	2001:db8::2:0121
+cccc-290		IN	AAAA	2001:db8::2:0122
+cccc-291		IN	AAAA	2001:db8::2:0123
+cccc-292		IN	AAAA	2001:db8::2:0124
+cccc-293		IN	AAAA	2001:db8::2:0125
+cccc-294		IN	AAAA	2001:db8::2:0126
+cccc-295		IN	AAAA	2001:db8::2:0127
+cccc-296		IN	AAAA	2001:db8::2:0128
+cccc-297		IN	AAAA	2001:db8::2:0129
+cccc-298		IN	AAAA	2001:db8::2:012a
+cccc-299		IN	AAAA	2001:db8::2:012b
+cccc-300		IN	AAAA	2001:db8::2:012c
+cccc-301		IN	AAAA	2001:db8::2:012d
+cccc-302		IN	AAAA	2001:db8::2:012e
+cccc-303		IN	AAAA	2001:db8::2:012f
+cccc-304		IN	AAAA	2001:db8::2:0130
+cccc-305		IN	AAAA	2001:db8::2:0131
+cccc-306		IN	AAAA	2001:db8::2:0132
+cccc-307		IN	AAAA	2001:db8::2:0133
+cccc-308		IN	AAAA	2001:db8::2:0134
+cccc-309		IN	AAAA	2001:db8::2:0135
+cccc-310		IN	AAAA	2001:db8::2:0136
+cccc-311		IN	AAAA	2001:db8::2:0137
+cccc-312		IN	AAAA	2001:db8::2:0138
+cccc-313		IN	AAAA	2001:db8::2:0139
+cccc-314		IN	AAAA	2001:db8::2:013a
+cccc-315		IN	AAAA	2001:db8::2:013b
+cccc-316		IN	AAAA	2001:db8::2:013c
+cccc-317		IN	AAAA	2001:db8::2:013d
+cccc-318		IN	AAAA	2001:db8::2:013e
+cccc-319		IN	AAAA	2001:db8::2:013f
+cccc-320		IN	AAAA	2001:db8::2:0140
+cccc-321		IN	AAAA	2001:db8::2:0141
+cccc-322		IN	AAAA	2001:db8::2:0142
+cccc-323		IN	AAAA	2001:db8::2:0143
+cccc-324		IN	AAAA	2001:db8::2:0144
+cccc-325		IN	AAAA	2001:db8::2:0145
+cccc-326		IN	AAAA	2001:db8::2:0146
+cccc-327		IN	AAAA	2001:db8::2:0147
+cccc-328		IN	AAAA	2001:db8::2:0148
+cccc-329		IN	AAAA	2001:db8::2:0149
+cccc-330		IN	AAAA	2001:db8::2:014a
+cccc-331		IN	AAAA	2001:db8::2:014b
+cccc-332		IN	AAAA	2001:db8::2:014c
+cccc-333		IN	AAAA	2001:db8::2:014d
+cccc-334		IN	AAAA	2001:db8::2:014e
+cccc-335		IN	AAAA	2001:db8::2:014f
+cccc-336		IN	AAAA	2001:db8::2:0150
+cccc-337		IN	AAAA	2001:db8::2:0151
+cccc-338		IN	AAAA	2001:db8::2:0152
+cccc-339		IN	AAAA	2001:db8::2:0153
+cccc-340		IN	AAAA	2001:db8::2:0154
+cccc-341		IN	AAAA	2001:db8::2:0155
+cccc-342		IN	AAAA	2001:db8::2:0156
+cccc-343		IN	AAAA	2001:db8::2:0157
+cccc-344		IN	AAAA	2001:db8::2:0158
+cccc-345		IN	AAAA	2001:db8::2:0159
+cccc-346		IN	AAAA	2001:db8::2:015a
+cccc-347		IN	AAAA	2001:db8::2:015b
+cccc-348		IN	AAAA	2001:db8::2:015c
+cccc-349		IN	AAAA	2001:db8::2:015d
+cccc-350		IN	AAAA	2001:db8::2:015e
+cccc-351		IN	AAAA	2001:db8::2:015f
+cccc-352		IN	AAAA	2001:db8::2:0160
+cccc-353		IN	AAAA	2001:db8::2:0161
+cccc-354		IN	AAAA	2001:db8::2:0162
+cccc-355		IN	AAAA	2001:db8::2:0163
+cccc-356		IN	AAAA	2001:db8::2:0164
+cccc-357		IN	AAAA	2001:db8::2:0165
+cccc-358		IN	AAAA	2001:db8::2:0166
+cccc-359		IN	AAAA	2001:db8::2:0167
+cccc-360		IN	AAAA	2001:db8::2:0168
+cccc-361		IN	AAAA	2001:db8::2:0169
+cccc-362		IN	AAAA	2001:db8::2:016a
+cccc-363		IN	AAAA	2001:db8::2:016b
+cccc-364		IN	AAAA	2001:db8::2:016c
+cccc-365		IN	AAAA	2001:db8::2:016d
+cccc-366		IN	AAAA	2001:db8::2:016e
+cccc-367		IN	AAAA	2001:db8::2:016f
+cccc-368		IN	AAAA	2001:db8::2:0170
+cccc-369		IN	AAAA	2001:db8::2:0171
+cccc-370		IN	AAAA	2001:db8::2:0172
+cccc-371		IN	AAAA	2001:db8::2:0173
+cccc-372		IN	AAAA	2001:db8::2:0174
+cccc-373		IN	AAAA	2001:db8::2:0175
+cccc-374		IN	AAAA	2001:db8::2:0176
+cccc-375		IN	AAAA	2001:db8::2:0177
+cccc-376		IN	AAAA	2001:db8::2:0178
+cccc-377		IN	AAAA	2001:db8::2:0179
+cccc-378		IN	AAAA	2001:db8::2:017a
+cccc-379		IN	AAAA	2001:db8::2:017b
+cccc-380		IN	AAAA	2001:db8::2:017c
+cccc-381		IN	AAAA	2001:db8::2:017d
+cccc-382		IN	AAAA	2001:db8::2:017e
+cccc-383		IN	AAAA	2001:db8::2:017f
+cccc-384		IN	AAAA	2001:db8::2:0180
+cccc-385		IN	AAAA	2001:db8::2:0181
+cccc-386		IN	AAAA	2001:db8::2:0182
+cccc-387		IN	AAAA	2001:db8::2:0183
+cccc-388		IN	AAAA	2001:db8::2:0184
+cccc-389		IN	AAAA	2001:db8::2:0185
+cccc-390		IN	AAAA	2001:db8::2:0186
+cccc-391		IN	AAAA	2001:db8::2:0187
+cccc-392		IN	AAAA	2001:db8::2:0188
+cccc-393		IN	AAAA	2001:db8::2:0189
+cccc-394		IN	AAAA	2001:db8::2:018a
+cccc-395		IN	AAAA	2001:db8::2:018b
+cccc-396		IN	AAAA	2001:db8::2:018c
+cccc-397		IN	AAAA	2001:db8::2:018d
+cccc-398		IN	AAAA	2001:db8::2:018e
+cccc-399		IN	AAAA	2001:db8::2:018f
+cccc-400		IN	AAAA	2001:db8::2:0190
+cccc-401		IN	AAAA	2001:db8::2:0191
+cccc-402		IN	AAAA	2001:db8::2:0192
+cccc-403		IN	AAAA	2001:db8::2:0193
+cccc-404		IN	AAAA	2001:db8::2:0194
+cccc-405		IN	AAAA	2001:db8::2:0195
+cccc-406		IN	AAAA	2001:db8::2:0196
+cccc-407		IN	AAAA	2001:db8::2:0197
+cccc-408		IN	AAAA	2001:db8::2:0198
+cccc-409		IN	AAAA	2001:db8::2:0199
+cccc-410		IN	AAAA	2001:db8::2:019a
+cccc-411		IN	AAAA	2001:db8::2:019b
+cccc-412		IN	AAAA	2001:db8::2:019c
+cccc-413		IN	AAAA	2001:db8::2:019d
+cccc-414		IN	AAAA	2001:db8::2:019e
+cccc-415		IN	AAAA	2001:db8::2:019f
+cccc-416		IN	AAAA	2001:db8::2:01a0
+cccc-417		IN	AAAA	2001:db8::2:01a1
+cccc-418		IN	AAAA	2001:db8::2:01a2
+cccc-419		IN	AAAA	2001:db8::2:01a3
+cccc-420		IN	AAAA	2001:db8::2:01a4
+cccc-421		IN	AAAA	2001:db8::2:01a5
+cccc-422		IN	AAAA	2001:db8::2:01a6
+cccc-423		IN	AAAA	2001:db8::2:01a7
+cccc-424		IN	AAAA	2001:db8::2:01a8
+cccc-425		IN	AAAA	2001:db8::2:01a9
+cccc-426		IN	AAAA	2001:db8::2:01aa
+cccc-427		IN	AAAA	2001:db8::2:01ab
+cccc-428		IN	AAAA	2001:db8::2:01ac
+cccc-429		IN	AAAA	2001:db8::2:01ad
+cccc-430		IN	AAAA	2001:db8::2:01ae
+cccc-431		IN	AAAA	2001:db8::2:01af
+cccc-432		IN	AAAA	2001:db8::2:01b0
+cccc-433		IN	AAAA	2001:db8::2:01b1
+cccc-434		IN	AAAA	2001:db8::2:01b2
+cccc-435		IN	AAAA	2001:db8::2:01b3
+cccc-436		IN	AAAA	2001:db8::2:01b4
+cccc-437		IN	AAAA	2001:db8::2:01b5
+cccc-438		IN	AAAA	2001:db8::2:01b6
+cccc-439		IN	AAAA	2001:db8::2:01b7
+cccc-440		IN	AAAA	2001:db8::2:01b8
+cccc-441		IN	AAAA	2001:db8::2:01b9
+cccc-442		IN	AAAA	2001:db8::2:01ba
+cccc-443		IN	AAAA	2001:db8::2:01bb
+cccc-444		IN	AAAA	2001:db8::2:01bc
+cccc-445		IN	AAAA	2001:db8::2:01bd
+cccc-446		IN	AAAA	2001:db8::2:01be
+cccc-447		IN	AAAA	2001:db8::2:01bf
+cccc-448		IN	AAAA	2001:db8::2:01c0
+cccc-449		IN	AAAA	2001:db8::2:01c1
+cccc-450		IN	AAAA	2001:db8::2:01c2
+cccc-451		IN	AAAA	2001:db8::2:01c3
+cccc-452		IN	AAAA	2001:db8::2:01c4
+cccc-453		IN	AAAA	2001:db8::2:01c5
+cccc-454		IN	AAAA	2001:db8::2:01c6
+cccc-455		IN	AAAA	2001:db8::2:01c7
+cccc-456		IN	AAAA	2001:db8::2:01c8
+cccc-457		IN	AAAA	2001:db8::2:01c9
+cccc-458		IN	AAAA	2001:db8::2:01ca
+cccc-459		IN	AAAA	2001:db8::2:01cb
+cccc-460		IN	AAAA	2001:db8::2:01cc
+cccc-461		IN	AAAA	2001:db8::2:01cd
+cccc-462		IN	AAAA	2001:db8::2:01ce
+cccc-463		IN	AAAA	2001:db8::2:01cf
+cccc-464		IN	AAAA	2001:db8::2:01d0
+cccc-465		IN	AAAA	2001:db8::2:01d1
+cccc-466		IN	AAAA	2001:db8::2:01d2
+cccc-467		IN	AAAA	2001:db8::2:01d3
+cccc-468		IN	AAAA	2001:db8::2:01d4
+cccc-469		IN	AAAA	2001:db8::2:01d5
+cccc-470		IN	AAAA	2001:db8::2:01d6
+cccc-471		IN	AAAA	2001:db8::2:01d7
+cccc-472		IN	AAAA	2001:db8::2:01d8
+cccc-473		IN	AAAA	2001:db8::2:01d9
+cccc-474		IN	AAAA	2001:db8::2:01da
+cccc-475		IN	AAAA	2001:db8::2:01db
+cccc-476		IN	AAAA	2001:db8::2:01dc
+cccc-477		IN	AAAA	2001:db8::2:01dd
+cccc-478		IN	AAAA	2001:db8::2:01de
+cccc-479		IN	AAAA	2001:db8::2:01df
+cccc-480		IN	AAAA	2001:db8::2:01e0
+cccc-481		IN	AAAA	2001:db8::2:01e1
+cccc-482		IN	AAAA	2001:db8::2:01e2
+cccc-483		IN	AAAA	2001:db8::2:01e3
+cccc-484		IN	AAAA	2001:db8::2:01e4
+cccc-485		IN	AAAA	2001:db8::2:01e5
+cccc-486		IN	AAAA	2001:db8::2:01e6
+cccc-487		IN	AAAA	2001:db8::2:01e7
+cccc-488		IN	AAAA	2001:db8::2:01e8
+cccc-489		IN	AAAA	2001:db8::2:01e9
+cccc-490		IN	AAAA	2001:db8::2:01ea
+cccc-491		IN	AAAA	2001:db8::2:01eb
+cccc-492		IN	AAAA	2001:db8::2:01ec
+cccc-493		IN	AAAA	2001:db8::2:01ed
+cccc-494		IN	AAAA	2001:db8::2:01ee
+cccc-495		IN	AAAA	2001:db8::2:01ef
+cccc-496		IN	AAAA	2001:db8::2:01f0
+cccc-497		IN	AAAA	2001:db8::2:01f1
+cccc-498		IN	AAAA	2001:db8::2:01f2
+cccc-499		IN	AAAA	2001:db8::2:01f3
+cccc-500		IN	AAAA	2001:db8::2:01f4
+cccc-501		IN	AAAA	2001:db8::2:01f5
+cccc-502		IN	AAAA	2001:db8::2:01f6
+cccc-503		IN	AAAA	2001:db8::2:01f7
+cccc-504		IN	AAAA	2001:db8::2:01f8
+cccc-505		IN	AAAA	2001:db8::2:01f9
+cccc-506		IN	AAAA	2001:db8::2:01fa
+cccc-507		IN	AAAA	2001:db8::2:01fb
+cccc-508		IN	AAAA	2001:db8::2:01fc
+cccc-509		IN	AAAA	2001:db8::2:01fd
+cccc-510		IN	AAAA	2001:db8::2:01fe
+cccc-511		IN	AAAA	2001:db8::2:01ff
diff --git a/tests/system/ixfr/db.example.n0.in b/tests/system/ixfr/db.example.n0.in
new file mode 100644
index 0000000..92fa0b0
--- /dev/null
+++ b/tests/system/ixfr/db.example.n0.in
@@ -0,0 +1,29 @@
+; Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+$ORIGIN example.
+$TTL 3600
+
+@       IN	SOA	ns1.example. hostmaster.example. 100 3600 900 7200 300
+
+        IN	NS	ns1.example.
+        IN	NS	ns2.example.
+
+ns1     IN  A   192.0.2.1
+ns2     IN  A   192.0.2.2
+
+a-1     IN  A   192.0.2.101
+b-1     IN  A   192.0.2.201
+
+$INCLUDE @abs_top_builddir@/tests/system/ixfr/db.example.common
diff --git a/tests/system/ixfr/db.example.n2.in b/tests/system/ixfr/db.example.n2.in
new file mode 100644
index 0000000..6a999af
--- /dev/null
+++ b/tests/system/ixfr/db.example.n2.in
@@ -0,0 +1,28 @@
+; Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+$ORIGIN example.
+$TTL 3600
+
+@       IN	SOA	ns1.example. hostmaster.example. 98 3600 900 7200 300
+
+        IN	NS	ns1.example.
+        IN	NS	ns2.example.
+
+ns1     IN  A   192.0.2.1
+ns2     IN  A   192.0.2.2
+
+a-1     IN  A   192.0.2.101
+
+$INCLUDE @abs_top_builddir@/tests/system/ixfr/db.example.common
diff --git a/tests/system/ixfr/db.example.n2.refresh.in b/tests/system/ixfr/db.example.n2.refresh.in
new file mode 100644
index 0000000..2c59416
--- /dev/null
+++ b/tests/system/ixfr/db.example.n2.refresh.in
@@ -0,0 +1,28 @@
+; Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+$ORIGIN example.
+$TTL 3600
+
+@       IN	SOA	ns1.example. hostmaster.example. 98 30 2 7200 300
+
+        IN	NS	ns1.example.
+        IN	NS	ns2.example.
+
+ns1     IN  A   192.0.2.1
+ns2     IN  A   192.0.2.2
+
+a-1     IN  A   192.0.2.101
+
+$INCLUDE @abs_top_builddir@/tests/system/ixfr/db.example.common
diff --git a/tests/system/ixfr/db.example.n4.in b/tests/system/ixfr/db.example.n4.in
new file mode 100644
index 0000000..ae15a54
--- /dev/null
+++ b/tests/system/ixfr/db.example.n4.in
@@ -0,0 +1,31 @@
+; Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+$ORIGIN example.
+$TTL 3600
+
+@       IN	SOA	ns1.example. hostmaster.example. 96 3600 900 7200 300
+
+        IN	NS	ns1.example.
+        IN	NS	ns2.example.
+
+ns1     IN  A   192.0.2.1
+ns2     IN  A   192.0.2.2
+
+a-1     IN  A   192.0.2.101
+a-2     IN  A   192.0.2.102
+b-1     IN  A   192.0.2.201
+b-2     IN  A   192.0.2.202
+
+$INCLUDE @abs_top_builddir@/tests/system/ixfr/db.example.common
diff --git a/tests/system/ixfr/db.example.n6.in b/tests/system/ixfr/db.example.n6.in
new file mode 100644
index 0000000..33a82a0
--- /dev/null
+++ b/tests/system/ixfr/db.example.n6.in
@@ -0,0 +1,29 @@
+; Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+$ORIGIN example.
+$TTL 3600
+
+@       IN	SOA	ns1.example. hostmaster.example. 94 3600 900 7200 300
+
+        IN	NS	ns1.example.
+        IN	NS	ns2.example.
+
+ns1     IN  A   192.0.2.1
+ns2     IN  A   192.0.2.2
+
+a-1     IN  A   192.0.2.101
+a-2     IN  A   192.0.2.102
+b-1     IN  A   192.0.2.201
+b-2     IN  A   192.0.2.202
diff --git a/tests/system/ixfr/in-1/clean.sh b/tests/system/ixfr/in-1/clean.sh
new file mode 100644
index 0000000..88f4ff1
--- /dev/null
+++ b/tests/system/ixfr/in-1/clean.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# Clean up nameserver directories after zone transfer tests.
+
+rm -f ns1/named.conf
+rm -f ns1/db.example*
+rm -f ns1/named.memstats
+
+rm -f nsx2/bind10.run
+rm -f nsx2/b10-config.db
+rm -f ../zone.sqlite3
+
+rm -f client.dig
+rm -f server.dig
diff --git a/tests/system/ixfr/in-1/ns1/README b/tests/system/ixfr/in-1/ns1/README
new file mode 100644
index 0000000..aaa8a31
--- /dev/null
+++ b/tests/system/ixfr/in-1/ns1/README
@@ -0,0 +1,3 @@
+This directory should be empty. A README file is placed here to ensure git
+notes the directory's presence.  It can be removed if other files are placed
+here.
diff --git a/tests/system/ixfr/in-1/nsx2/README b/tests/system/ixfr/in-1/nsx2/README
new file mode 100644
index 0000000..aaa8a31
--- /dev/null
+++ b/tests/system/ixfr/in-1/nsx2/README
@@ -0,0 +1,3 @@
+This directory should be empty. A README file is placed here to ensure git
+notes the directory's presence.  It can be removed if other files are placed
+here.
diff --git a/tests/system/ixfr/in-1/setup.sh.in b/tests/system/ixfr/in-1/setup.sh.in
new file mode 100644
index 0000000..d4c3978
--- /dev/null
+++ b/tests/system/ixfr/in-1/setup.sh.in
@@ -0,0 +1,30 @@
+#!/bin/sh
+#
+# Copyright (C) 2004, 2007, 2011  Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2001, 2002  Internet Software Consortium.
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+. @abs_top_builddir@/tests/system/conf.sh
+
+# Clean up from last time
+sh clean.sh
+
+# Set up the initial version of the IXFR server - load the n-4 version of the
+# zone.  The configuration file enables IXFR and disabled notifies.
+cp -f $IXFR_TOP/named_nonotify.conf ns1/named.conf
+cp -f $IXFR_TOP/db.example.n4 ns1/db.example
+
+# Set up the IXFR client - load the same version of the zone.
+cp -f $IXFR_TOP/b10-config.db nsx2/b10-config.db
+${B10_LOADZONE} -o . -d $IXFR_TOP/zone.sqlite3 $IXFR_TOP/db.example.n4
diff --git a/tests/system/ixfr/in-1/tests.sh b/tests/system/ixfr/in-1/tests.sh
new file mode 100644
index 0000000..2f49ddf
--- /dev/null
+++ b/tests/system/ixfr/in-1/tests.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+#
+# Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# \file
+# This script performs the first IXFR-IN test.  A BIND 9 nameserver (the
+# "server") contains a version of the zone (version N) and two previous
+# versions, N-2 and N-4.  A BIND 10 nameserver (the "client") is loaded with
+# version N-4 of the zone.  A NOTIFY is sent to it, and it is expected that
+# it will send an IXFR to the server and update itself with the latest version
+# of the zone.  (The changes are such that the update should be in the form of
+# a single UDP packet.)
+#
+# The pre-requisites for this test are the same as for the common tests, so
+# we can execute that directly.
+
+. ../common_tests.sh
+status=$?
+
+# TODO: Check the BIND 10 log, looking for the IXFR messages that indicate that
+# it has initiated an IXFR and that it received the update within a single
+# packet.
+
+echo "I:exit status: $status"
+exit $status
diff --git a/tests/system/ixfr/in-2/clean.sh b/tests/system/ixfr/in-2/clean.sh
new file mode 100644
index 0000000..88f4ff1
--- /dev/null
+++ b/tests/system/ixfr/in-2/clean.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# Clean up nameserver directories after zone transfer tests.
+
+rm -f ns1/named.conf
+rm -f ns1/db.example*
+rm -f ns1/named.memstats
+
+rm -f nsx2/bind10.run
+rm -f nsx2/b10-config.db
+rm -f ../zone.sqlite3
+
+rm -f client.dig
+rm -f server.dig
diff --git a/tests/system/ixfr/in-2/ns1/README b/tests/system/ixfr/in-2/ns1/README
new file mode 100644
index 0000000..aaa8a31
--- /dev/null
+++ b/tests/system/ixfr/in-2/ns1/README
@@ -0,0 +1,3 @@
+This directory should be empty. A README file is placed here to ensure git
+notes the directory's presence.  It can be removed if other files are placed
+here.
diff --git a/tests/system/ixfr/in-2/nsx2/README b/tests/system/ixfr/in-2/nsx2/README
new file mode 100644
index 0000000..aaa8a31
--- /dev/null
+++ b/tests/system/ixfr/in-2/nsx2/README
@@ -0,0 +1,3 @@
+This directory should be empty. A README file is placed here to ensure git
+notes the directory's presence.  It can be removed if other files are placed
+here.
diff --git a/tests/system/ixfr/in-2/setup.sh.in b/tests/system/ixfr/in-2/setup.sh.in
new file mode 100644
index 0000000..a5f64e5
--- /dev/null
+++ b/tests/system/ixfr/in-2/setup.sh.in
@@ -0,0 +1,29 @@
+#!/bin/sh
+#
+# Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+. @abs_top_builddir@/tests/system/conf.sh
+
+# Clean up from last time
+sh clean.sh
+
+# Set up the initial version of the IXFR server - load the n-6 version of the
+# zone.  The configuration file enables IXFR and disables notifies.
+cp -f $IXFR_TOP/named_nonotify.conf ns1/named.conf
+cp -f $IXFR_TOP/db.example.n6 ns1/db.example
+
+# Set up the IXFR client - load an earlier version of the zone
+cp -f $IXFR_TOP/b10-config.db nsx2/b10-config.db
+${B10_LOADZONE} -o . -d $IXFR_TOP/zone.sqlite3 $IXFR_TOP/db.example.n6
diff --git a/tests/system/ixfr/in-2/tests.sh b/tests/system/ixfr/in-2/tests.sh
new file mode 100644
index 0000000..7b1e2a8
--- /dev/null
+++ b/tests/system/ixfr/in-2/tests.sh
@@ -0,0 +1,81 @@
+#!/bin/sh
+#
+# Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# \file
+# This script performs the first IXFR-IN test.  A BIND 9 nameserver (the
+# "server") contains a version of the zone (version N) and three previous
+# versions, N-2, N-4 and N-6.  A BIND 10 nameserver (the "client") is loaded
+# with version N-6 of the zone.  A NOTIFY is sent to it, and it is expected that
+# it will send an IXFR to the server and update itself with the latest version
+# of the zone.  (The changes are such that the update will have to take place
+# over TCP.)
+
+. ../ixfr_init.sh
+
+# On entry, the IXFR server is at version N-6.  The common tests assume that
+# it is an N-4, so update it.
+echo "I:$SERVER_NAME updating IXFR-server to suitable start version"
+update_server_zone $SERVER_NAME $SERVER_IP $IXFR_TOP/db.example.n4
+if [ $? -ne 0 ];
+then
+    exit 1
+fi
+
+# The pre-requisites for this test are the same as for the common tests, so
+# we can execute that directly.
+. ../common_tests.sh
+if [ $? -ne 0 ];
+then
+    exit 1
+fi
+
+# TEMPORARY: at the time of writing (October 2011) BIND 10 does not attempt
+# a UDP transfer first.  Therefore just check for TCP transfer.
+
+# Check that the client initiated and completed an IXFR.  Use a simple grep as
+# the syntax and capabilities of egrep may vary between systems.
+grep XFRIN_XFR_TRANSFER_STARTED nsx2/bind10.run | grep IXFR > /dev/null
+if [ $? -ne 0 ];
+then
+    echo "R:$CLIENT_NAME FAIL no 'IXFR started' message in the BIND 10 log"
+    exit 1
+fi
+
+grep XFRIN_XFR_TRANSFER_SUCCESS nsx2/bind10.run | grep IXFR > /dev/null
+if [ $? -ne 0 ];
+then
+    echo "R:$CLIENT_NAME FAIL no 'IXFR successful' message in the BIND 10 log"
+    exit 1
+fi
+
+# Look in the named log file to see if a TCP IXFR was requested.  Again use a
+# simple grep.
+grep "transfer of" ns1/named.run | grep "sending TCP message" > /dev/null
+if [ $? -ne 0 ];
+then
+    echo "R:$SERVER_NAME FAIL no 'sending TCP' message in the BIND 9 log"
+    exit 1
+fi
+
+grep "IXFR ended" ns1/named.run > /dev/null
+if [ $? -ne 0 ];
+then
+    echo "R:$SERVER_NAME FAIL no 'IXFR ended' message in the BIND 9 log"
+    exit 1
+fi
+
+echo "I:exit status: 0"
+exit 0
diff --git a/tests/system/ixfr/in-3/clean.sh b/tests/system/ixfr/in-3/clean.sh
new file mode 100644
index 0000000..88f4ff1
--- /dev/null
+++ b/tests/system/ixfr/in-3/clean.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# Clean up nameserver directories after zone transfer tests.
+
+rm -f ns1/named.conf
+rm -f ns1/db.example*
+rm -f ns1/named.memstats
+
+rm -f nsx2/bind10.run
+rm -f nsx2/b10-config.db
+rm -f ../zone.sqlite3
+
+rm -f client.dig
+rm -f server.dig
diff --git a/tests/system/ixfr/in-3/ns1/README b/tests/system/ixfr/in-3/ns1/README
new file mode 100644
index 0000000..aaa8a31
--- /dev/null
+++ b/tests/system/ixfr/in-3/ns1/README
@@ -0,0 +1,3 @@
+This directory should be empty. A README file is placed here to ensure git
+notes the directory's presence.  It can be removed if other files are placed
+here.
diff --git a/tests/system/ixfr/in-3/nsx2/README b/tests/system/ixfr/in-3/nsx2/README
new file mode 100644
index 0000000..aaa8a31
--- /dev/null
+++ b/tests/system/ixfr/in-3/nsx2/README
@@ -0,0 +1,3 @@
+This directory should be empty. A README file is placed here to ensure git
+notes the directory's presence.  It can be removed if other files are placed
+here.
diff --git a/tests/system/ixfr/in-3/setup.sh.in b/tests/system/ixfr/in-3/setup.sh.in
new file mode 100644
index 0000000..867e06e
--- /dev/null
+++ b/tests/system/ixfr/in-3/setup.sh.in
@@ -0,0 +1,29 @@
+#!/bin/sh
+#
+# Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+. @abs_top_builddir@/tests/system/conf.sh
+# Clean up from last time
+
+sh clean.sh
+
+# Set up the initial version of the IXFR server - load the latest version of
+# the zone.
+cp -f $IXFR_TOP/named_noixfr.conf ns1/named.conf
+cp -f $IXFR_TOP/db.example.n0 ns1/db.example
+
+# Set up the IXFR client - load a previous version of the zone.
+cp -f $IXFR_TOP/b10-config.db nsx2/b10-config.db
+${B10_LOADZONE} -o . -d $IXFR_TOP/zone.sqlite3 $IXFR_TOP/db.example.n2
diff --git a/tests/system/ixfr/in-3/tests.sh b/tests/system/ixfr/in-3/tests.sh
new file mode 100644
index 0000000..858b815
--- /dev/null
+++ b/tests/system/ixfr/in-3/tests.sh
@@ -0,0 +1,55 @@
+#!/bin/sh
+#
+# Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# \file
+# This script performs the third IXFR-IN test.  A BIND 9 nameserver (the
+# "server") contains a version of the zone (version N) and has IXFRs disabled.
+# A BIND 10 nameserver (the "client") is loaded with version N-2 of the zone.
+# A NOTIFY is sent to it, and it is expected that it will send an IXFR to the
+# server; the server should not respond to the request, so the client should
+# then send an AXFR request and receive the latest copy of the zone.
+
+. ../ixfr_init.sh
+status=$?
+
+# Store the SOA serial number of the BIND 10 client for later use.
+old_client_serial=`$DIG_SOA @$CLIENT_IP | $AWK '{print $3}'`
+echo "I:SOA serial of IXFR client $CLIENT_NAME is $old_client_serial"
+
+# TODO: Need to alter configuration of BIND 10 server such that it accepts
+# NOTIFYs from and sends IXFR requests to the BIND 9 master.
+
+# If required, get the IXFR server to notify the IXFR client of the new zone.
+# Do this by allowing notifies and then triggering a re-notification of the
+# server.
+echo "I:notifying IXFR-client $CLIENT_NAME of presence of new version of zone"
+do_rndc $SERVER_NAME $SERVER_IP notify example
+status=`expr $status + $?`
+
+# Wait for the client to update itself.
+wait_for_update $CLIENT_NAME $CLIENT_IP $old_client_serial
+status=`expr $status + $?`
+
+# Has updated, get the latest serial of the client and server - they
+# should be the same.
+compare_soa $SERVER_NAME $SERVER_IP $CLIENT_NAME $CLIENT_IP
+status=`expr $status + $?`
+
+# TODO: Check the BIND 10 log, looking for the IXFR messages that indicate that
+# it has initiated an IXFR and then an AXFR.
+
+echo "I:exit status: $status"
+exit $status
diff --git a/tests/system/ixfr/in-4/clean.sh b/tests/system/ixfr/in-4/clean.sh
new file mode 100644
index 0000000..88f4ff1
--- /dev/null
+++ b/tests/system/ixfr/in-4/clean.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# Clean up nameserver directories after zone transfer tests.
+
+rm -f ns1/named.conf
+rm -f ns1/db.example*
+rm -f ns1/named.memstats
+
+rm -f nsx2/bind10.run
+rm -f nsx2/b10-config.db
+rm -f ../zone.sqlite3
+
+rm -f client.dig
+rm -f server.dig
diff --git a/tests/system/ixfr/in-4/ns1/README b/tests/system/ixfr/in-4/ns1/README
new file mode 100644
index 0000000..aaa8a31
--- /dev/null
+++ b/tests/system/ixfr/in-4/ns1/README
@@ -0,0 +1,3 @@
+This directory should be empty. A README file is placed here to ensure git
+notes the directory's presence.  It can be removed if other files are placed
+here.
diff --git a/tests/system/ixfr/in-4/nsx2/README b/tests/system/ixfr/in-4/nsx2/README
new file mode 100644
index 0000000..aaa8a31
--- /dev/null
+++ b/tests/system/ixfr/in-4/nsx2/README
@@ -0,0 +1,3 @@
+This directory should be empty. A README file is placed here to ensure git
+notes the directory's presence.  It can be removed if other files are placed
+here.
diff --git a/tests/system/ixfr/in-4/setup.sh.in b/tests/system/ixfr/in-4/setup.sh.in
new file mode 100644
index 0000000..7419e27
--- /dev/null
+++ b/tests/system/ixfr/in-4/setup.sh.in
@@ -0,0 +1,30 @@
+#!/bin/sh
+#
+# Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+. @abs_top_builddir@/tests/system/conf.sh
+# Clean up from last time
+
+sh clean.sh
+
+# Set up the initial version of the ixfr server - load the last-but-one version
+# of the zone.
+cp $IXFR_TOP/named_nonotify.conf ns1/named.conf
+cp -f $IXFR_TOP/db.example.n2.refresh ns1/db.example
+
+# Set up the IXFR client - load a previous version of the zone with a short
+# refresh time.
+cp -f $IXFR_TOP/b10-config.db nsx2/b10-config.db
+${B10_LOADZONE} -o . -d $IXFR_TOP/zone.sqlite3 $IXFR_TOP/db.example.n2.refresh
diff --git a/tests/system/ixfr/in-4/tests.sh b/tests/system/ixfr/in-4/tests.sh
new file mode 100644
index 0000000..3024253
--- /dev/null
+++ b/tests/system/ixfr/in-4/tests.sh
@@ -0,0 +1,53 @@
+#!/bin/sh
+#
+# Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# \file
+# This script performs the fourth IXFR-IN test.  A BIND 9 nameserver (the
+# "server") contains a version of the zone (version N) and has IXFRs enabled.
+# A BIND 10 nameserver (the "client") is loaded with version N-2 of the zone
+# and a small refresh time.  After this expires, the IXFR client should send
+# an IXFR request to the IXFR server.
+
+. ../ixfr_init.sh
+status=$?
+
+# Ensure the server has the latest copy of the zone.  The implicit assumption
+# here is that starting the two systems and reloading the IXFR server takes
+# less time than the SOA refresh time set in the "db.example.n2.refresh" zone
+# file.
+cp $IXFR_TOP/db.example.n0 ns1/db.example
+do_rndc $SERVER_NAME $SERVER_IP reload
+
+# Store the SOA serial number of the BIND 10 client for later use.
+old_client_serial=`$DIG_SOA @$CLIENT_IP | $AWK '{print $3}'`
+echo "I:SOA serial of IXFR client $CLIENT_NAME is $old_client_serial"
+
+# Wait for the client to update itself. 30 seconds has been given as the
+# refresh interface and 2 seconds as the retry interval.  The wait_for_update
+# function will check for up to a minute looking for the new serial.
+wait_for_update $CLIENT_NAME $CLIENT_IP $old_client_serial
+status=`expr $status + $?`
+
+# Has updated, get the latest serial of the client and server - they
+# should be the same.
+compare_soa $SERVER_NAME $SERVER_IP $CLIENT_NAME $CLIENT_IP
+status=`expr $status + $?`
+
+# TODO: Check the BIND 10 log, looking for the IXFR messages that indicate that
+# the client has initiated the IXFR.
+
+echo "I:exit status: $status"
+exit $status
diff --git a/tests/system/ixfr/ixfr_init.sh.in b/tests/system/ixfr/ixfr_init.sh.in
new file mode 100644
index 0000000..ba6049e
--- /dev/null
+++ b/tests/system/ixfr/ixfr_init.sh.in
@@ -0,0 +1,330 @@
+#!/bin/sh
+#
+# Copyright (C) 2011  Internet Software Consortium.
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# \file
+# This file should be run by all IXFR tests before doing anything else.  It
+# includes the main configuration script to set the environment variables as
+# well as defining useful shell subroutines.
+
+. @abs_top_builddir@/tests/system/conf.sh
+
+# Useful symbols used in the IXFR tests.
+
+# Short-hand for getting SOA - just supply address of the server
+DIG_SOA="$DIG +norecurse +short -p $DNS_PORT example. SOA"
+
+# All IXFR tests use a BIND 9 server serving a BIND 10 client.  These have the
+# smae name and use the same address in all tests.
+SERVER_NAME=ns1
+SERVER_IP=10.53.0.1   # BIND 9
+
+CLIENT_NAME=nsx2
+CLIENT_IP=10.53.0.2   # BIND 10
+
+# \brief Check Arguments
+#
+# Most functions take the name of  nameserver as the first argument and its IP
+# address as the second.  This function is passed "$*" and just checks that
+# both $1 and $2 are defined.
+#
+# \arg $* Arguments passed to caller
+#
+# \return status 0 => $1 and $2 are defined, 1 => they are not.
+check_name_ip() {
+
+    if [ "$1" = "" ];
+    then
+        echo "R:FAIL name of server not supplied"
+        return 1
+    fi
+
+    if [ "$2" = "" ];
+    then
+        echo "R:FAIL IP address of server not supplied"
+        return 1
+    fi
+
+    return 0
+}
+
+
+# \brief Perform RNDC Command
+#
+# Controls the BIND 9 IXFR server.  Called do_rndc (instead of rndc) to avoid
+# confusion if rndc itself is in the search path.
+#
+# \arg $1 - Name of the server (ns1, nsx2 etc.)
+# \arg $2 - IP address of the server
+# \arg $* - Command to execute (which may be multiple tokens)
+#
+# \return 0 on success, 1 on failure (in which case an error message will
+#         have been output).
+do_rndc () {
+
+    # If the following checks fail, the code is wrong.
+
+    check_name_ip $*
+    if [ $? -ne 0 ];
+    then
+        echo "R:FAIL do_rndc - name or ip address of server not supplied"
+        return 1
+    fi
+
+    name=$1
+    shift
+    ip=$1
+    shift
+
+    if [ "$1" = "" ];
+    then
+        echo "R:FAIL do_rndc - rndc command not supplied"
+        return 1
+    fi
+    
+    $RNDC -c $SYSTEM_TOP/common/rndc.conf -s $ip -p $RNDC_PORT $* 2>&1 \
+        | sed "s/^/I:$name /"
+}
+
+# \brief Wait for update
+#
+# Given a serial number and a server, poll the nameserver until the SOA serial
+# number is different from that given.  The poll takes place every five seconds
+# for a minute.
+#
+# \arg $1 - Name of the server
+# \arg $2 - IP address of the server
+# \arg $3 - Serial number to check against
+#
+# \return 0 if the serial number is different (requires another poll to obtain
+#         it), 1 if the serial number has not changed after one minute.
+wait_for_update() {
+
+    # If the following checks fail, the code is wrong.
+
+    check_name_ip $*
+    if [ $? -ne 0 ];
+    then
+        echo "R:FAIL wait_for_update - name or ip address of system not supplied"
+        return 1
+
+    fi
+
+    name=$1
+    shift
+    ip=$1
+    shift
+
+    serial=$1
+    if [ "$serial" = "" ];
+    then
+        echo "R:FAIL wait_for_update - serial number not supplied"
+        return 1
+    fi
+
+    # Now poll the server looking for the new serial number
+
+    echo "I:$name waiting for SOA serial to change from $serial"
+    for i in 1 2 3 4 5 6 7 8 9 10 11 12
+    do
+        if [ $i -gt 1 ];
+        then
+            sleep 5
+        fi
+
+        new_serial=`$DIG_SOA @$ip | $AWK '{print $3}'`
+        if [ "$new_serial" != "$serial" ];
+        then
+            echo "I:$name SOA serial was at $serial, now at $new_serial"
+            return 0
+        fi
+    done
+
+    echo "R:$name FAIL serial number has not updated"
+    return 1
+}
+
+
+
+# \brief Update server zone
+#
+# Reloads the example. zone in the BIND 9 IXFR server and waits a maximum of
+# one minute for it to be served.
+#
+# \arg $1 - Name of the server (ns1, nsx2 etc.)
+# \arg $2 - IP address of the server
+# \arg $3 - Zone file to load
+# \arg $* - Command to execute (which may be multiple tokens)
+#
+# \return 0 on success, 1 on failure (for which an error message will have
+#         been output).
+update_server_zone() {
+
+    # If the following checks fail, the code is wrong.
+
+    check_name_ip $*
+    if [ $? -ne 0 ];
+    then
+        echo "R:FAIL update_server_zone - name or ip address of server not supplied"
+        return 1
+    fi
+
+    name=$1
+    shift
+    ip=$1
+    shift
+
+    file=$1
+    shift
+    if [ "$file" = "" ];
+    then
+        echo "R:FAIL update_server_zone - new zone file not supplied"
+        return 1
+    fi
+
+    if [ ! -e $file ];
+    then
+        echo "R:FAIL update_server_zone - zone file does not exist: $file"
+        return 1
+    fi
+
+    old_serial=`$DIG_SOA @$ip | $AWK '{print $3}'`
+
+    echo "I:$name IXFR server loading $file"
+    cp $file $name/db.example
+    do_rndc $name $ip reload
+    if [ $? -ne 0 ];
+    then
+        return 1    # Message will have already been output
+    fi
+
+    wait_for_update $name $ip $old_serial
+    if [ $? -ne 0 ];
+    then
+        echo "R:$name FAIL IXFR server did not update zone after reload"
+        return 1
+    fi
+    new_serial=`$DIG_SOA @$ip | $AWK '{print $3}'`
+
+    return 0
+}
+
+# \brief Compare client and server SOAs
+#
+# Checks the SOAs of two systems and reports if they are not equal.
+#
+# \arg $1 Name of the IXFR server
+# \arg $2 IP of the IXFR server 
+# \arg $3 Name of the IXFR client
+# \arg $4 IP of the IXFR client
+#
+# \return 0 if the systems have the same SOA, 1 if not.  In the latter case,
+#         an error will be output.
+compare_soa() {
+
+    # If the following checks fail, the code is wrong.
+
+    check_name_ip $*
+    if [ $? -ne 0 ];
+    then
+        echo "R:FAIL compare_soa - name or ip address of server not supplied"
+        return 1
+    fi
+
+    server_name=$1
+    shift
+    server_ip=$1
+    shift
+
+    check_name_ip $*
+    if [ $? -ne 0 ];
+    then
+        echo "R:FAIL compare_soa - name or ip address of client not supplied"
+        return 1
+    fi
+
+    client_name=$1
+    shift
+    client_ip=$1
+    shift
+
+    client_serial=`$DIG_SOA @$client_ip | $AWK '{print $3}'`
+    server_serial=`$DIG_SOA @$server_ip | $AWK '{print $3}'`
+    if [ "$client_serial" != "$server_serial" ];
+    then
+        echo "R:FAIL client $client_name serial $client_serial not same as server $server_name serial $server_serial"
+        return 1
+    fi
+
+    return 0
+}
+
+# \brief Compare client and server zones
+#
+# Checks the zones of two systems and reports if they are not identical.
+#
+# The check is simplistic. Each zone is listed via "dig", after which comment
+# lines, blank lines and spaces/tabs are removed, and the result sorted.  The
+# output from each system is then compared.  They should be identical.
+#
+# \arg $1 Name of the IXFR server
+# \arg $2 IP of the IXFR server 
+# \arg $3 Name of the IXFR client
+# \arg $4 IP of the IXFR client
+#
+# \return 0 if the zones are the same, 1 if not.
+compare_zones() {
+
+    # If the following checks fail, the code is wrong.
+
+    check_name_ip $*
+    if [ $? -ne 0 ];
+    then
+        echo "R:FAIL compare_zones - name or ip address of server not supplied"
+        return 1
+    fi
+
+    server_name=$1
+    shift
+    server_ip=$1
+    shift
+
+    check_name_ip $*
+    if [ $? -ne 0 ];
+    then
+        echo "R:FAIL compare_zones - name or ip address of client not supplied"
+        return 1
+    fi
+
+    client_name=$1
+    shift
+    client_ip=$1
+    shift
+
+    $DIG @$client_ip -p $DNS_PORT example. axfr | grep -v '^;' | grep -v '^$' \
+         | sed -e 's/ //g' -e 's/\t//g' | sort > client.dig
+    $DIG @$server_ip -p $DNS_PORT example. axfr | grep -v '^;' | grep -v '^$' \
+         | sed -e 's/ //g' -e 's/\t//g' | sort > server.dig
+    diff client.dig server.dig
+    if [ $? -eq 0 ];
+    then
+        echo "I:client and server zones identical"
+    else
+        echo "R:FAIL client $client_name zone not same as server $server_name zone"
+        return 1
+    fi
+
+    return 0
+}
diff --git a/tests/system/ixfr/named_noixfr.conf b/tests/system/ixfr/named_noixfr.conf
new file mode 100644
index 0000000..b0d972a
--- /dev/null
+++ b/tests/system/ixfr/named_noixfr.conf
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2004, 2007, 2011  Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2000, 2001  Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+include "../../../common/rndc.key";
+
+controls {
+        inet 10.53.0.1 port 9953 allow { any; } keys { rndc_key; };
+};
+
+options {
+	query-source address 10.53.0.1;
+	notify-source 10.53.0.1;
+	transfer-source 10.53.0.1;
+	port 53210;
+	pid-file "named.pid";
+	listen-on { 10.53.0.1; };
+	listen-on-v6 { none; };
+	recursion no;
+	ixfr-from-differences no;
+	notify explicit;
+	also-notify { 10.53.0.2; };
+};
+
+zone "example" {
+	type master;
+	file "db.example";
+};
diff --git a/tests/system/ixfr/named_nonotify.conf b/tests/system/ixfr/named_nonotify.conf
new file mode 100644
index 0000000..c08c212
--- /dev/null
+++ b/tests/system/ixfr/named_nonotify.conf
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2004, 2007, 2011  Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2000, 2001  Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+include "../../../common/rndc.key";
+
+controls {
+        inet 10.53.0.1 port 9953 allow { any; } keys { rndc_key; };
+};
+
+options {
+	query-source address 10.53.0.1;
+	notify-source 10.53.0.1;
+	transfer-source 10.53.0.1;
+	port 53210;
+	pid-file "named.pid";
+	listen-on { 10.53.0.1; };
+	listen-on-v6 { none; };
+	recursion no;
+	ixfr-from-differences yes;
+	notify no;
+};
+
+zone "example" {
+	type master;
+	file "db.example";
+};
diff --git a/tests/system/ixfr/named_notify.conf b/tests/system/ixfr/named_notify.conf
new file mode 100644
index 0000000..df45e6f
--- /dev/null
+++ b/tests/system/ixfr/named_notify.conf
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2004, 2007, 2011  Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2000, 2001  Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+include "../../../common/rndc.key";
+
+controls {
+        inet 10.53.0.1 port 9953 allow { any; } keys { rndc_key; };
+};
+
+options {
+	query-source address 10.53.0.1;
+	notify-source 10.53.0.1;
+	transfer-source 10.53.0.1;
+	port 53210;
+	pid-file "named.pid";
+	listen-on { 10.53.0.1; };
+	listen-on-v6 { none; };
+	recursion no;
+	ixfr-from-differences yes;
+	notify explicit;
+	also-notify { 10.53.0.2; };
+};
+
+zone "example" {
+	type master;
+	file "db.example";
+};
diff --git a/tests/system/run.sh b/tests/system/run.sh
deleted file mode 100755
index 4f852f4..0000000
--- a/tests/system/run.sh
+++ /dev/null
@@ -1,125 +0,0 @@
-#!/bin/sh
-#
-# Copyright (C) 2004, 2007, 2010  Internet Systems Consortium, Inc. ("ISC")
-# Copyright (C) 2000, 2001  Internet Software Consortium.
-#
-# Permission to use, copy, modify, and/or distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-#
-# Run a system test.
-#
-
-SYSTEMTESTTOP=.
-. $SYSTEMTESTTOP/conf.sh
-
-stopservers=true
-
-case $1 in
-   --keep) stopservers=false; shift ;;
-esac
-
-test $# -gt 0 || { echo "usage: $0 [--keep] test-directory" >&2; exit 1; }
-
-test=$1
-shift
-
-test -d $test || { echo "$0: $test: no such test" >&2; exit 1; }
-
-echo "S:$test:`date`" >&2
-echo "T:$test:1:A" >&2
-echo "A:System test $test" >&2
-
-if [ x$PERL = x ]
-then
-    echo "I:Perl not available.  Skipping test." >&2
-    echo "R:UNTESTED" >&2
-    echo "E:$test:`date`" >&2
-    exit 0;
-fi
-
-$PERL $TESTSOCK || {
-    echo "I:Network interface aliases not set up.  Skipping test." >&2;
-    echo "R:UNTESTED" >&2;
-    echo "E:$test:`date`" >&2;
-    exit 0;
-}
-
-
-# Check for test-specific prerequisites.
-test ! -f $test/prereq.sh || ( cd $test && sh prereq.sh "$@" )
-result=$?
-
-if [ $result -eq 0 ]; then
-    : prereqs ok
-else
-    echo "I:Prerequisites for $test missing, skipping test." >&2
-    [ $result -eq 255 ] && echo "R:SKIPPED" || echo "R:UNTESTED"
-    echo "E:$test:`date`" >&2
-    exit 0
-fi
-
-# Check for PKCS#11 support
-if
-    test ! -f $test/usepkcs11 || sh cleanpkcs11.sh
-then
-    : pkcs11 ok
-else
-    echo "I:Need PKCS#11 for $test, skipping test." >&2
-    echo "R:PKCS11ONLY" >&2
-    echo "E:$test:`date`" >&2
-    exit 0
-fi
-
-# Set up any dynamically generated test data
-if test -f $test/setup.sh
-then
-   ( cd $test && sh setup.sh "$@" )
-fi
-
-# Start name servers running
-$PERL start.pl $test || exit 1
-
-# Run the tests
-( cd $test ; sh tests.sh )
-
-status=$?
-
-if $stopservers
-then
-    :
-else
-    exit $status
-fi
-
-# Shutdown
-$PERL stop.pl $test
-
-status=`expr $status + $?`
-
-if [ $status != 0 ]; then
-	echo "R:FAIL"
-	# Don't clean up - we need the evidence.
-	find . -name core -exec chmod 0644 '{}' \;
-else
-	echo "R:PASS"
-
-	# Clean up.
-	if test -f $test/clean.sh
-	then
-	   ( cd $test && sh clean.sh "$@" )
-	fi
-fi
-
-echo "E:$test:`date`"
-
-exit $status
diff --git a/tests/system/run.sh.in b/tests/system/run.sh.in
new file mode 100755
index 0000000..619b865
--- /dev/null
+++ b/tests/system/run.sh.in
@@ -0,0 +1,125 @@
+#!/bin/sh
+#
+# Copyright (C) 2004, 2007, 2010  Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2000, 2001  Internet Software Consortium.
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+#
+# Run a system test.
+#
+
+SYSTEMTOP=@abs_top_builddir@/tests/system
+. $SYSTEMTOP/conf.sh
+
+stopservers=true
+
+case $1 in
+   --keep) stopservers=false; shift ;;
+esac
+
+test $# -gt 0 || { echo "usage: $0 [--keep] test-directory" >&2; exit 1; }
+
+test=$1
+shift
+
+test -d $test || { echo "$0: $test: no such test" >&2; exit 1; }
+
+echo "S:$test:`date`" >&2
+echo "T:$test:1:A" >&2
+echo "A:System test $test" >&2
+
+if [ x$PERL = x ]
+then
+    echo "I:Perl not available.  Skipping test." >&2
+    echo "R:UNTESTED" >&2
+    echo "E:$test:`date`" >&2
+    exit 0;
+fi
+
+$PERL $TESTSOCK || {
+    echo "I:Network interface aliases not set up.  Skipping test." >&2;
+    echo "R:UNTESTED" >&2;
+    echo "E:$test:`date`" >&2;
+    exit 0;
+}
+
+
+# Check for test-specific prerequisites.
+test ! -f $test/prereq.sh || ( cd $test && sh prereq.sh "$@" )
+result=$?
+
+if [ $result -eq 0 ]; then
+    : prereqs ok
+else
+    echo "I:Prerequisites for $test missing, skipping test." >&2
+    [ $result -eq 255 ] && echo "R:SKIPPED" || echo "R:UNTESTED"
+    echo "E:$test:`date`" >&2
+    exit 0
+fi
+
+# Check for PKCS#11 support
+if
+    test ! -f $test/usepkcs11 || sh cleanpkcs11.sh
+then
+    : pkcs11 ok
+else
+    echo "I:Need PKCS#11 for $test, skipping test." >&2
+    echo "R:PKCS11ONLY" >&2
+    echo "E:$test:`date`" >&2
+    exit 0
+fi
+
+# Set up any dynamically generated test data
+if test -f $test/setup.sh
+then
+   ( cd $test && sh setup.sh "$@" )
+fi
+
+# Start name servers running
+$PERL $SYSTEMTOP/start.pl $test || exit 1
+
+# Run the tests
+( cd $test ; sh tests.sh )
+
+status=$?
+
+if $stopservers
+then
+    :
+else
+    exit $status
+fi
+
+# Shutdown
+$PERL $SYSTEMTOP/stop.pl $test
+
+status=`expr $status + $?`
+
+if [ $status != 0 ]; then
+	echo "R:FAIL"
+	# Don't clean up - we need the evidence.
+	find . -name core -exec chmod 0644 '{}' \;
+else
+	echo "R:PASS"
+
+	# Clean up.
+	if test -f $test/clean.sh
+	then
+	   ( cd $test && sh clean.sh "$@" )
+	fi
+fi
+
+echo "E:$test:`date`"
+
+exit $status
diff --git a/tests/system/start.pl b/tests/system/start.pl
index 56f00c4..daa4577 100755
--- a/tests/system/start.pl
+++ b/tests/system/start.pl
@@ -53,7 +53,7 @@ if ($server && !-d "$test/$server") {
 my $topdir = abs_path("$test/..");
 my $testdir = abs_path("$test");
 my $RUN_BIND10 = $ENV{'RUN_BIND10'};
-my $NAMED = $ENV{'NAMED'};
+my $NAMED = $ENV{'BIND9_NAMED'};
 my $LWRESD = $ENV{'LWRESD'};
 my $DIG = $ENV{'DIG'};
 my $PERL = $ENV{'PERL'};
@@ -182,7 +182,7 @@ sub start_server {
 		exit 1;
 	}
 
-	#               print "I:starting server $server\n";
+	print "I:starting server $server\n";
 
 	chdir "$testdir/$server";
 
diff --git a/win32build/VS2010/Debug.log b/win32build/VS2010/Debug.log
index 6f75ea9..5261f6c 100755
--- a/win32build/VS2010/Debug.log
+++ b/win32build/VS2010/Debug.log
@@ -204,11 +204,11 @@ c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(2528): warning C4
 c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(2670): warning C4244: 'argument' : conversion from 'int' to 'const uint8_t', possible loss of data
 c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(2671): warning C4244: 'argument' : conversion from 'int' to 'uint8_t', possible loss of data
 c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(2745): warning C4244: 'argument' : conversion from 'const int' to 'uint16_t', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(3188): warning C4244: 'argument' : conversion from 'unsigned int' to 'uint8_t', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(3188): warning C4244: 'argument' : conversion from 'unsigned int' to 'uint8_t', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(4233): warning C4244: 'argument' : conversion from 'const int32_t' to 'uint16_t', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(4233): warning C4244: 'argument' : conversion from 'const int32_t' to 'uint16_t', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(4233): warning C4244: 'argument' : conversion from 'const int32_t' to 'uint16_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(3193): warning C4244: 'argument' : conversion from 'unsigned int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(3193): warning C4244: 'argument' : conversion from 'unsigned int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(4238): warning C4244: 'argument' : conversion from 'const int32_t' to 'uint16_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(4238): warning C4244: 'argument' : conversion from 'const int32_t' to 'uint16_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(4238): warning C4244: 'argument' : conversion from 'const int32_t' to 'uint16_t', possible loss of data
 c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdata\generic\detail\ds_like.h(98): warning C4244: '=' : conversion from 'uint32_t' to 'uint16_t', possible loss of data
           c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdata\generic\detail\ds_like.h(65) : while compiling class template member function 'isc::dns::rdata::generic::detail::DSLikeImpl<Type,typeCode>::DSLikeImpl(const std::string &)'
           with
@@ -246,7 +246,7 @@ c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdata\generic\detail\txt_like.h
               Type=isc::dns::rdata::generic::SPF,
               typeCode=99
           ]
-          c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(3536) : see reference to class template instantiation 'isc::dns::rdata::generic::TXTLikeImpl<Type,typeCode>' being compiled
+          c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(3541) : see reference to class template instantiation 'isc::dns::rdata::generic::TXTLikeImpl<Type,typeCode>' being compiled
           with
           [
               Type=isc::dns::rdata::generic::SPF,
@@ -266,7 +266,7 @@ c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdata\generic\detail\txt_like.h
               Type=isc::dns::rdata::generic::TXT,
               typeCode=16
           ]
-          c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(3662) : see reference to class template instantiation 'isc::dns::rdata::generic::TXTLikeImpl<Type,typeCode>' being compiled
+          c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(3667) : see reference to class template instantiation 'isc::dns::rdata::generic::TXTLikeImpl<Type,typeCode>' being compiled
           with
           [
               Type=isc::dns::rdata::generic::TXT,
@@ -360,7 +360,7 @@ c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\message.cc(323): warning C4244:
 c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\message.cc(794): warning C4244: 'argument' : conversion from 'uint16_t' to 'const uint8_t', possible loss of data
 c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\message.cc(807): warning C4389: '!=' : signed/unsigned mismatch
   Generating Code...
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(2823): warning C4702: unreachable code
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(2828): warning C4702: unreachable code
   Compiling...
   masterload.cc
   exceptions.cc
@@ -739,46 +739,50 @@ c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(163): war
   libserver_common.vcxproj -> C:\cygwin\home\dupont\bind10.trac826\win32build\VS2010\libserver_common\Debug\libserver_common.lib
 ------ Build started: Project: libdhcp, Configuration: Debug Win32 ------
   pkt6.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(88): warning C4244: 'return' : conversion from 'unsigned int' to 'unsigned short', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(137): warning C4244: '=' : conversion from 'int' to 'char', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(147): warning C4244: 'initializing' : conversion from 'unsigned int' to 'unsigned short', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(292): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(72): warning C4244: 'return' : conversion from 'unsigned int' to 'unsigned short', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(105): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(115): warning C4244: 'initializing' : conversion from 'unsigned int' to 'unsigned short', possible loss of data
+  pkt4.cc
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
   option6_iaaddr.cc
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
   option6_ia.cc
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
   option6_addrlst.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option6_addrlst.cc(135): warning C4244: 'return' : conversion from 'unsigned int' to 'unsigned short', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option6_addrlst.cc(137): warning C4244: 'return' : conversion from 'const size_t' to 'unsigned short', possible loss of data
   option.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(73): warning C4244: '=' : conversion from 'unsigned short' to 'char', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(74): warning C4244: '=' : conversion from 'unsigned int' to 'char', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(95): warning C4244: 'argument' : conversion from 'int' to 'u_short', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(161): warning C4244: 'return' : conversion from 'int' to 'unsigned short', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(76): warning C4244: '=' : conversion from 'unsigned short' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(77): warning C4244: '=' : conversion from 'unsigned int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(171): warning C4244: 'return' : conversion from 'int' to 'unsigned short', possible loss of data
   libdhcp.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\libdhcp.cc(69): warning C4244: 'argument' : conversion from 'unsigned int' to 'unsigned short', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\libdhcp.cc(75): warning C4244: 'argument' : conversion from 'unsigned int' to 'unsigned short', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\libdhcp.cc(83): warning C4244: 'argument' : conversion from 'unsigned int' to 'unsigned short', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\libdhcp.cc(113): warning C4245: 'return' : conversion from 'int' to 'unsigned int', signed/unsigned mismatch
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
   Generating Code...
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\libdhcp.cc(134): warning C4702: unreachable code
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(119): warning C4702: unreachable code
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(128): warning C4702: unreachable code
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(109): warning C4702: unreachable code
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(196): warning C4702: unreachable code
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\libdhcp.cc(127): warning C4702: unreachable code
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(122): warning C4702: unreachable code
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(131): warning C4702: unreachable code
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(86): warning C4702: unreachable code
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(148): warning C4702: unreachable code
   libdhcp.vcxproj -> C:\cygwin\home\dupont\bind10.trac826\win32build\VS2010\libdhcp\Debug\libdhcp.lib
 ------ Build started: Project: b10-dhcp6, Configuration: Debug Win32 ------
           1 file(s) copied.
   getopt.cc
-  pkt6.cc
   main.cc
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
 c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\main.cc(105): warning C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
           c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h(433) : see declaration of 'getenv'
 c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\main.cc(107): warning C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
           c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h(433) : see declaration of 'getenv'
   iface_mgr.cc
-c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\iface_mgr.cc(271): warning C4244: 'argument' : conversion from 'int' to 'u_short', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\iface_mgr.cc(454): warning C4244: 'argument' : conversion from 'int' to 'u_short', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\iface_mgr.cc(267): warning C4244: 'argument' : conversion from 'int' to 'u_short', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\iface_mgr.cc(430): warning C4244: 'argument' : conversion from 'int' to 'u_short', possible loss of data
   dhcp6_srv.cc
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\dhcp6_srv.cc(130): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
   Generating Code...
-c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\dhcp6_srv.cc(60): warning C4702: unreachable code
   b10-dhcp6.vcxproj -> C:\cygwin\home\dupont\bind10.trac826\win32build\VS2010\b10-dhcp6\Debug\b10-dhcp6.exe
 ------ Build started: Project: b10-resolver, Configuration: Debug Win32 ------
           1 file(s) copied.
@@ -896,69 +900,38 @@ c:\cygwin\home\dupont\bind10.trac826\src\lib\resolve\tests\recursive_query_unitt
 ------ Build started: Project: libdhcp_tests, Configuration: Debug Win32 ------
   run_unittests.cc
   pkt6_unittest.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(67): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(68): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(68): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(71): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(71): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(71): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(72): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(72): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(72): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(72): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(73): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(75): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(78): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(78): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(78): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(79): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(79): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(79): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(79): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(80): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(82): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(84): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(85): warning C4309: '=' : truncation of constant value
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+  pkt4_unittest.cc
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt4_unittest.cc(54): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt4_unittest.cc(279): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt4_unittest.cc(280): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt4_unittest.cc(287): warning C4244: 'argument' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt4_unittest.cc(287): warning C4244: 'argument' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt4_unittest.cc(366): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt4_unittest.cc(367): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt4_unittest.cc(403): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt4_unittest.cc(404): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
   option_unittest.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(70): warning C4244: '=' : conversion from 'int' to 'char', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(102): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(103): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(104): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(105): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(146): warning C4244: '=' : conversion from 'int' to 'char', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(190): warning C4244: '=' : conversion from 'int' to 'char', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(224): warning C4244: '=' : conversion from 'int' to 'char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(74): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(154): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(200): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(236): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
   option6_ia_unittest.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(49): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(50): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(51): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(52): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(54): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(59): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(139): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(140): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(141): warning C4309: '=' : truncation of constant value
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(231): warning C4800: 'isc::dhcp::Option6IA *' : forcing value to bool 'true' or 'false' (performance warning)
   option6_iaaddr_unittest.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(49): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(52): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(53): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(54): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(55): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(60): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(62): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(63): warning C4309: '=' : truncation of constant value
   option6_addrlst_unittest.cc
   libdhcp_unittest.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\libdhcp_unittest.cc(52): warning C4244: '=' : conversion from 'int' to 'char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\libdhcp_unittest.cc(54): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
   Generating Code...
   libdhcp_tests.vcxproj -> C:\cygwin\home\dupont\bind10.trac826\win32build\VS2010\libdhcp_tests\Debug\run_unittests.exe
 ------ Build started: Project: libcache_tests, Configuration: Debug Win32 ------
   unittest_util.cc
   run_unittests.cc
   rrset_entry_unittest.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\cache\tests\rrset_entry_unittest.cc(114): warning C4244: 'initializing' : conversion from 'time_t' to 'uint32_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\cache\tests\rrset_entry_unittest.cc(113): warning C4244: 'initializing' : conversion from 'time_t' to 'uint32_t', possible loss of data
 c:\cygwin\home\dupont\gtest\include\gtest\gtest.h(1449): warning C4018: '<' : signed/unsigned mismatch
-          c:\cygwin\home\dupont\bind10.trac826\src\lib\cache\tests\rrset_entry_unittest.cc(103) : see reference to function template instantiation 'testing::AssertionResult testing::internal::CmpHelperLT<uint32_t,int>(const char *,const char *,const T1 &,const T2 &)' being compiled
+          c:\cygwin\home\dupont\bind10.trac826\src\lib\cache\tests\rrset_entry_unittest.cc(102) : see reference to function template instantiation 'testing::AssertionResult testing::internal::CmpHelperLT<uint32_t,int>(const char *,const char *,const T1 &,const T2 &)' being compiled
           with
           [
               T1=uint32_t,
@@ -1084,11 +1057,13 @@ c:\cygwin\home\dupont\gtest\include\gtest\gtest.h(1445): warning C4389: '!=' : s
   Generating Code...
   libnsas_tests.vcxproj -> C:\cygwin\home\dupont\bind10.trac826\win32build\VS2010\libnsas_tests\Debug\run_unittests.exe
 ------ Build started: Project: b10-dhcp6_tests, Configuration: Debug Win32 ------
-  pkt6_unittest.cc
   iface_mgr_unittest.cc
-c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\tests\iface_mgr_unittest.cc(270): warning C4244: '=' : conversion from 'int' to 'char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\tests\iface_mgr_unittest.cc(108): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+          c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(371) : see declaration of 'sprintf'
+c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\tests\iface_mgr_unittest.cc(410): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
 c:\cygwin\home\dupont\gtest\include\gtest\gtest.h(1445): warning C4389: '!=' : signed/unsigned mismatch
-          c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\tests\iface_mgr_unittest.cc(163) : see reference to function template instantiation 'testing::AssertionResult testing::internal::CmpHelperNE<int,SOCKET>(const char *,const char *,const T1 &,const T2 &)' being compiled
+          c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\tests\iface_mgr_unittest.cc(302) : see reference to function template instantiation 'testing::AssertionResult testing::internal::CmpHelperNE<int,SOCKET>(const char *,const char *,const T1 &,const T2 &)' being compiled
           with
           [
               T1=int,
@@ -1096,13 +1071,16 @@ c:\cygwin\home\dupont\gtest\include\gtest\gtest.h(1445): warning C4389: '!=' : s
           ]
   dhcp6_unittests.cc
   dhcp6_srv_unittest.cc
-  pkt6.cc
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\tests\dhcp6_srv_unittest.cc(83): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
   iface_mgr.cc
-c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\iface_mgr.cc(271): warning C4244: 'argument' : conversion from 'int' to 'u_short', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\iface_mgr.cc(454): warning C4244: 'argument' : conversion from 'int' to 'u_short', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\iface_mgr.cc(267): warning C4244: 'argument' : conversion from 'int' to 'u_short', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\iface_mgr.cc(430): warning C4244: 'argument' : conversion from 'int' to 'u_short', possible loss of data
   dhcp6_srv.cc
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\dhcp6_srv.cc(130): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
   Generating Code...
-c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\dhcp6_srv.cc(60): warning C4702: unreachable code
   b10-dhcp6_tests.vcxproj -> C:\cygwin\home\dupont\bind10.trac826\win32build\VS2010\b10-dhcp6_tests\Debug\dhcp6_unittests.exe
 ------ Build started: Project: libasiodns_tests, Configuration: Debug Win32 ------
   unittest_util.cc
@@ -1234,12 +1212,6 @@ c:\cygwin\home\dupont\bind10.trac826\src\lib\asiolink\tcp_endpoint.h(100): warni
   io_socket_unittest.cc
   io_endpoint_unittest.cc
   io_address_unittest.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\asiolink\tests\io_address_unittest.cc(68): warning C4309: 'initializing' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\asiolink\tests\io_address_unittest.cc(69): warning C4309: 'initializing' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\asiolink\tests\io_address_unittest.cc(69): warning C4309: 'initializing' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\asiolink\tests\io_address_unittest.cc(69): warning C4309: 'initializing' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\asiolink\tests\io_address_unittest.cc(69): warning C4309: 'initializing' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\asiolink\tests\io_address_unittest.cc(71): warning C4309: 'initializing' : truncation of constant value
   interval_timer_unittest.cc
 c:\program files (x86)\boost\boost_1_44\boost\token_functions.hpp(220): warning C4127: conditional expression is constant
           c:\program files (x86)\boost\boost_1_44\boost\token_functions.hpp(218) : while compiling class template member function 'bool boost::tokenizer_detail::traits_extension<traits>::isspace(char)'
@@ -1395,7 +1367,7 @@ c:\program files (x86)\boost\boost_1_44\boost\algorithm\string\detail\find_forma
           [
               T=boost::posix_time::time_duration
           ]
-          c:\cygwin\home\dupont\bind10.trac826\src\lib\asiolink\tests\interval_timer_unittest.cc(185) : see reference to function template instantiation 'testing::Message &testing::Message::operator <<<boost::posix_time::time_duration>(const T &)' being compiled
+          c:\cygwin\home\dupont\bind10.trac826\src\lib\asiolink\tests\interval_timer_unittest.cc(184) : see reference to function template instantiation 'testing::Message &testing::Message::operator <<<boost::posix_time::time_duration>(const T &)' being compiled
           with
           [
               T=boost::posix_time::time_duration
@@ -1464,11 +1436,11 @@ c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\finder_python.cc
 c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(162): warning C4211: nonstandard extension used : redefined extern to static
 c:\cygwin\home\dupont\bind10.trac826\src\lib\util\python\pycppwrapper_util.h(194): warning C4127: conditional expression is constant
 c:\cygwin\home\dupont\bind10.trac826\src\lib\util\python\pycppwrapper_util.h(203): warning C4127: conditional expression is constant
-c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(219): warning C4127: conditional expression is constant
-c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(224): warning C4127: conditional expression is constant
-c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(229): warning C4127: conditional expression is constant
-c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(234): warning C4127: conditional expression is constant
-c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(247): warning C4127: conditional expression is constant
+c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(223): warning C4127: conditional expression is constant
+c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(228): warning C4127: conditional expression is constant
+c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(233): warning C4127: conditional expression is constant
+c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(238): warning C4127: conditional expression is constant
+c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(251): warning C4127: conditional expression is constant
   client_python.cc
 c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(162): warning C4211: nonstandard extension used : redefined extern to static
 c:\cygwin\home\dupont\bind10.trac826\src\lib\util\python\pycppwrapper_util.h(194): warning C4127: conditional expression is constant
@@ -1749,7 +1721,6 @@ c:\cygwin\home\dupont\bind10.trac826\src\lib\datasrc\rbtree.h(134): warning C424
   datasrc_unittest.cc
 c:\cygwin\home\dupont\bind10.trac826\src\lib\datasrc\tests\datasrc_unittest.cc(63): warning C4244: 'initializing' : conversion from 'isc::dns::Opcode::CodeValue' to 'const uint16_t', possible loss of data
   database_unittest.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\datasrc\tests\database_unittest.cc(333): warning C4018: '<' : signed/unsigned mismatch
   client_unittest.cc
   cache_unittest.cc
   Generating Code...
diff --git a/win32build/VS2010/Release.log b/win32build/VS2010/Release.log
index b50fb0f..fdca50b 100755
--- a/win32build/VS2010/Release.log
+++ b/win32build/VS2010/Release.log
@@ -119,7 +119,7 @@ C:\cygwin\home\dupont\bind10.trac826\src\lib\dns/rdata/generic/detail/txt_like.h
               Type=isc::dns::rdata::generic::SPF,
               typeCode=99
           ]
-          ..\..\..\src\lib\dns\rdataclass.cc(3536) : see reference to class template instantiation 'isc::dns::rdata::generic::TXTLikeImpl<Type,typeCode>' being compiled
+          ..\..\..\src\lib\dns\rdataclass.cc(3541) : see reference to class template instantiation 'isc::dns::rdata::generic::TXTLikeImpl<Type,typeCode>' being compiled
           with
           [
               Type=isc::dns::rdata::generic::SPF,
@@ -132,7 +132,7 @@ C:\cygwin\home\dupont\bind10.trac826\src\lib\dns/rdata/generic/detail/txt_like.h
               Type=isc::dns::rdata::generic::TXT,
               typeCode=16
           ]
-          ..\..\..\src\lib\dns\rdataclass.cc(3662) : see reference to class template instantiation 'isc::dns::rdata::generic::TXTLikeImpl<Type,typeCode>' being compiled
+          ..\..\..\src\lib\dns\rdataclass.cc(3667) : see reference to class template instantiation 'isc::dns::rdata::generic::TXTLikeImpl<Type,typeCode>' being compiled
           with
           [
               Type=isc::dns::rdata::generic::TXT,
@@ -347,10 +347,11 @@ c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\utility(163): war
 ------ Build started: Project: libdhcp, Configuration: Release Win32 ------
   libdhcp.cc
   option.cc
-..\..\..\src\lib\dhcp\option.cc(73): warning C4244: '=' : conversion from 'unsigned short' to 'char', possible loss of data
+..\..\..\src\lib\dhcp\option.cc(76): warning C4244: '=' : conversion from 'unsigned short' to 'uint8_t', possible loss of data
   option6_addrlst.cc
   option6_ia.cc
   option6_iaaddr.cc
+  pkt4.cc
   pkt6.cc
   libdhcp.vcxproj -> C:\cygwin\home\dupont\bind10.trac826\win32build\VS2010\libdhcp\Release\libdhcp.lib
 ------ Build started: Project: b10-dhcp6, Configuration: Release Win32 ------
@@ -362,7 +363,6 @@ c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\utility(163): war
           c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdlib.h(433) : see declaration of 'getenv'
 ..\..\..\src\bin\dhcp6\main.cc(107): warning C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
           c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdlib.h(433) : see declaration of 'getenv'
-  pkt6.cc
   getopt.cc
   Generating code
   Finished generating code
@@ -438,53 +438,11 @@ C:\cygwin\home\dupont\gtest\include\gtest/gtest.h(1449): warning C4018: '<' : si
   libdhcp_unittest.cc
   option6_addrlst_unittest.cc
   option6_iaaddr_unittest.cc
-..\..\..\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(49): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(52): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(53): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(54): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(55): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(60): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(62): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(63): warning C4309: '=' : truncation of constant value
   option6_ia_unittest.cc
-..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(49): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(50): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(51): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(52): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(54): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(59): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(139): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(140): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(141): warning C4309: '=' : truncation of constant value
+..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(231): warning C4800: 'isc::dhcp::Option6IA *' : forcing value to bool 'true' or 'false' (performance warning)
   option_unittest.cc
-..\..\..\src\lib\dhcp\tests\option_unittest.cc(102): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option_unittest.cc(103): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option_unittest.cc(104): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option_unittest.cc(105): warning C4309: '=' : truncation of constant value
+  pkt4_unittest.cc
   pkt6_unittest.cc
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(67): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(68): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(68): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(71): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(71): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(71): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(72): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(72): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(72): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(72): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(73): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(75): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(78): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(78): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(78): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(79): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(79): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(79): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(79): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(80): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(82): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(84): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(85): warning C4309: '=' : truncation of constant value
   run_unittests.cc
   Generating code
   Finished generating code
@@ -497,9 +455,9 @@ C:\cygwin\home\dupont\gtest\include\gtest/gtest.h(1449): warning C4018: '<' : si
   resolver_cache_unittest.cc
   rrset_cache_unittest.cc
   rrset_entry_unittest.cc
-..\..\..\src\lib\cache\tests\rrset_entry_unittest.cc(114): warning C4244: 'initializing' : conversion from 'time_t' to 'uint32_t', possible loss of data
+..\..\..\src\lib\cache\tests\rrset_entry_unittest.cc(113): warning C4244: 'initializing' : conversion from 'time_t' to 'uint32_t', possible loss of data
 C:\cygwin\home\dupont\gtest\include\gtest/gtest.h(1449): warning C4018: '<' : signed/unsigned mismatch
-          ..\..\..\src\lib\cache\tests\rrset_entry_unittest.cc(103) : see reference to function template instantiation 'testing::AssertionResult testing::internal::CmpHelperLT<uint32_t,int>(const char *,const char *,const T1 &,const T2 &)' being compiled
+          ..\..\..\src\lib\cache\tests\rrset_entry_unittest.cc(102) : see reference to function template instantiation 'testing::AssertionResult testing::internal::CmpHelperLT<uint32_t,int>(const char *,const char *,const T1 &,const T2 &)' being compiled
           with
           [
               T1=uint32_t,
@@ -607,11 +565,11 @@ C:\cygwin\home\dupont\gtest\include\gtest/gtest.h(1453): warning C4018: '>' : si
 ------ Build started: Project: b10-dhcp6_tests, Configuration: Release Win32 ------
   dhcp6_srv.cc
   iface_mgr.cc
-  pkt6.cc
   dhcp6_srv_unittest.cc
   dhcp6_unittests.cc
   iface_mgr_unittest.cc
-  pkt6_unittest.cc
+..\..\..\src\bin\dhcp6\tests\iface_mgr_unittest.cc(108): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+          c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdio.h(371) : see declaration of 'sprintf'
   Generating code
   Finished generating code
   b10-dhcp6_tests.vcxproj -> C:\cygwin\home\dupont\bind10.trac826\win32build\VS2010\b10-dhcp6_tests\Release\dhcp6_unittests.exe
@@ -646,12 +604,6 @@ C:\cygwin\home\dupont\gtest\include\gtest/gtest.h(1453): warning C4018: '>' : si
 ------ Build started: Project: libasiolink_tests, Configuration: Release Win32 ------
   interval_timer_unittest.cc
   io_address_unittest.cc
-..\..\..\src\lib\asiolink\tests\io_address_unittest.cc(68): warning C4309: 'initializing' : truncation of constant value
-..\..\..\src\lib\asiolink\tests\io_address_unittest.cc(69): warning C4309: 'initializing' : truncation of constant value
-..\..\..\src\lib\asiolink\tests\io_address_unittest.cc(69): warning C4309: 'initializing' : truncation of constant value
-..\..\..\src\lib\asiolink\tests\io_address_unittest.cc(69): warning C4309: 'initializing' : truncation of constant value
-..\..\..\src\lib\asiolink\tests\io_address_unittest.cc(69): warning C4309: 'initializing' : truncation of constant value
-..\..\..\src\lib\asiolink\tests\io_address_unittest.cc(71): warning C4309: 'initializing' : truncation of constant value
   io_endpoint_unittest.cc
   io_socket_unittest.cc
   run_unittests.cc
@@ -926,7 +878,6 @@ C:\cygwin\home\dupont\gtest\include\gtest/gtest.h(1449): warning C4018: '<' : si
   cache_unittest.cc
   client_unittest.cc
   database_unittest.cc
-..\..\..\src\lib\datasrc\tests\database_unittest.cc(333): warning C4018: '<' : signed/unsigned mismatch
   datasrc_unittest.cc
   factory_unittest.cc
   logger_unittest.cc




More information about the bind10-changes mailing list