external/bsd/bind/dist/contrib/perftcpdns/perftcpdns.c
author msaitoh <msaitoh@NetBSD.org>
Fri, 26 Dec 2014 03:08:06 +0000
branchnetbsd-6-1
changeset 277066 8f6a14690a1a
child 257482 2be21b9dcdf6
permissions -rw-r--r--
Pull up following revision(s) (requested by spz in ticket #1217): distrib/sets/lists/base/ad.mips64eb patch distrib/sets/lists/base/ad.mips64el patch distrib/sets/lists/base/md.amd64 patch distrib/sets/lists/base/md.sparc64 patch distrib/sets/lists/base/shl.mi patch distrib/sets/lists/comp/ad.mips64eb patch distrib/sets/lists/comp/ad.mips64el patch distrib/sets/lists/comp/md.amd64 patch distrib/sets/lists/comp/md.sparc64 patch distrib/sets/lists/comp/mi patch distrib/sets/lists/comp/shl.mi patch external/bsd/bind/Makefile.inc patch external/bsd/bind/dist/CHANGES patch external/bsd/bind/dist/COPYRIGHT patch external/bsd/bind/dist/FAQ patch external/bsd/bind/dist/FAQ.xml patch external/bsd/bind/dist/HISTORY patch external/bsd/bind/dist/Makefile.in patch external/bsd/bind/dist/README patch external/bsd/bind/dist/REDIRECT-NOTES delete external/bsd/bind/dist/acconfig.h patch external/bsd/bind/dist/aclocal.m4 patch external/bsd/bind/dist/config.guess patch external/bsd/bind/dist/config.h.in patch external/bsd/bind/dist/config.h.win32 patch external/bsd/bind/dist/config.sub patch external/bsd/bind/dist/configure patch external/bsd/bind/dist/configure.in patch external/bsd/bind/dist/isc-config.sh.1 patch external/bsd/bind/dist/isc-config.sh.docbook patch external/bsd/bind/dist/isc-config.sh.html patch external/bsd/bind/dist/isc-config.sh.in patch external/bsd/bind/dist/ltmain.sh patch external/bsd/bind/dist/srcid patch external/bsd/bind/dist/version patch external/bsd/bind/dist/bin/Makefile.in patch external/bsd/bind/dist/bin/check/Makefile.in patch external/bsd/bind/dist/bin/check/check-tool.c patch external/bsd/bind/dist/bin/check/named-checkconf.8 patch external/bsd/bind/dist/bin/check/named-checkconf.c patch external/bsd/bind/dist/bin/check/named-checkconf.docbook patch external/bsd/bind/dist/bin/check/named-checkconf.html patch external/bsd/bind/dist/bin/check/named-checkzone.8 patch external/bsd/bind/dist/bin/check/named-checkzone.c patch external/bsd/bind/dist/bin/check/named-checkzone.docbook patch external/bsd/bind/dist/bin/check/named-checkzone.html patch external/bsd/bind/dist/bin/check/win32/checktool.dsp delete external/bsd/bind/dist/bin/check/win32/namedcheckconf.dsp delete external/bsd/bind/dist/bin/check/win32/namedcheckconf.dsw delete external/bsd/bind/dist/bin/check/win32/namedcheckconf.mak delete external/bsd/bind/dist/bin/check/win32/namedcheckzone.dsp delete external/bsd/bind/dist/bin/check/win32/namedcheckzone.dsw delete external/bsd/bind/dist/bin/check/win32/namedcheckzone.mak delete external/bsd/bind/dist/bin/confgen/ddns-confgen.8 patch external/bsd/bind/dist/bin/confgen/ddns-confgen.c patch external/bsd/bind/dist/bin/confgen/ddns-confgen.docbook patch external/bsd/bind/dist/bin/confgen/ddns-confgen.html patch external/bsd/bind/dist/bin/confgen/keygen.c patch external/bsd/bind/dist/bin/confgen/rndc-confgen.8 patch external/bsd/bind/dist/bin/confgen/rndc-confgen.c patch external/bsd/bind/dist/bin/confgen/rndc-confgen.docbook patch external/bsd/bind/dist/bin/confgen/rndc-confgen.html patch external/bsd/bind/dist/bin/confgen/win32/confgentool.dsp delete external/bsd/bind/dist/bin/confgen/win32/ddnsconfgen.dsp delete external/bsd/bind/dist/bin/confgen/win32/ddnsconfgen.mak delete external/bsd/bind/dist/bin/confgen/win32/rndcconfgen.dsp delete external/bsd/bind/dist/bin/confgen/win32/rndcconfgen.mak delete external/bsd/bind/dist/bin/dig/Makefile.in patch external/bsd/bind/dist/bin/dig/dig.1 patch external/bsd/bind/dist/bin/dig/dig.c patch external/bsd/bind/dist/bin/dig/dig.docbook patch external/bsd/bind/dist/bin/dig/dig.html patch external/bsd/bind/dist/bin/dig/dighost.c patch external/bsd/bind/dist/bin/dig/host.1 patch external/bsd/bind/dist/bin/dig/host.c patch external/bsd/bind/dist/bin/dig/host.docbook patch external/bsd/bind/dist/bin/dig/host.html patch external/bsd/bind/dist/bin/dig/nslookup.1 patch external/bsd/bind/dist/bin/dig/nslookup.c patch external/bsd/bind/dist/bin/dig/nslookup.docbook patch external/bsd/bind/dist/bin/dig/nslookup.html patch external/bsd/bind/dist/bin/dig/include/dig/dig.h patch external/bsd/bind/dist/bin/dig/win32/dig.dsp delete external/bsd/bind/dist/bin/dig/win32/dig.mak delete external/bsd/bind/dist/bin/dig/win32/dighost.dsp delete external/bsd/bind/dist/bin/dig/win32/host.dsp delete external/bsd/bind/dist/bin/dig/win32/host.mak delete external/bsd/bind/dist/bin/dig/win32/nslookup.dsp delete external/bsd/bind/dist/bin/dig/win32/nslookup.mak delete external/bsd/bind/dist/bin/dnssec/Makefile.in patch external/bsd/bind/dist/bin/dnssec/dnssec-dsfromkey.8 patch external/bsd/bind/dist/bin/dnssec/dnssec-dsfromkey.c patch external/bsd/bind/dist/bin/dnssec/dnssec-dsfromkey.docbook patch external/bsd/bind/dist/bin/dnssec/dnssec-dsfromkey.html patch external/bsd/bind/dist/bin/dnssec/dnssec-importkey.8 new external/bsd/bind/dist/bin/dnssec/dnssec-importkey.c new external/bsd/bind/dist/bin/dnssec/dnssec-importkey.docbook new external/bsd/bind/dist/bin/dnssec/dnssec-importkey.html new external/bsd/bind/dist/bin/dnssec/dnssec-keyfromlabel.8 patch external/bsd/bind/dist/bin/dnssec/dnssec-keyfromlabel.c patch external/bsd/bind/dist/bin/dnssec/dnssec-keyfromlabel.docbook patch external/bsd/bind/dist/bin/dnssec/dnssec-keyfromlabel.html patch external/bsd/bind/dist/bin/dnssec/dnssec-keygen.8 patch external/bsd/bind/dist/bin/dnssec/dnssec-keygen.c patch external/bsd/bind/dist/bin/dnssec/dnssec-keygen.docbook patch external/bsd/bind/dist/bin/dnssec/dnssec-keygen.html patch external/bsd/bind/dist/bin/dnssec/dnssec-revoke.8 patch external/bsd/bind/dist/bin/dnssec/dnssec-revoke.c patch external/bsd/bind/dist/bin/dnssec/dnssec-revoke.docbook patch external/bsd/bind/dist/bin/dnssec/dnssec-revoke.html patch external/bsd/bind/dist/bin/dnssec/dnssec-settime.8 patch external/bsd/bind/dist/bin/dnssec/dnssec-settime.c patch external/bsd/bind/dist/bin/dnssec/dnssec-settime.docbook patch external/bsd/bind/dist/bin/dnssec/dnssec-settime.html patch external/bsd/bind/dist/bin/dnssec/dnssec-signzone.8 patch external/bsd/bind/dist/bin/dnssec/dnssec-signzone.c patch external/bsd/bind/dist/bin/dnssec/dnssec-signzone.docbook patch external/bsd/bind/dist/bin/dnssec/dnssec-signzone.html patch external/bsd/bind/dist/bin/dnssec/dnssec-verify.8 patch external/bsd/bind/dist/bin/dnssec/dnssec-verify.c patch external/bsd/bind/dist/bin/dnssec/dnssec-verify.docbook patch external/bsd/bind/dist/bin/dnssec/dnssec-verify.html patch external/bsd/bind/dist/bin/dnssec/dnssectool.c patch external/bsd/bind/dist/bin/dnssec/dnssectool.h patch external/bsd/bind/dist/bin/dnssec/win32/dnssectool.dsp delete external/bsd/bind/dist/bin/dnssec/win32/dsfromkey.dsp delete external/bsd/bind/dist/bin/dnssec/win32/dsfromkey.mak delete external/bsd/bind/dist/bin/dnssec/win32/keyfromlabel.dsp delete external/bsd/bind/dist/bin/dnssec/win32/keyfromlabel.mak delete external/bsd/bind/dist/bin/dnssec/win32/keygen.dsp delete external/bsd/bind/dist/bin/dnssec/win32/keygen.mak delete external/bsd/bind/dist/bin/dnssec/win32/nsupdate.dsp delete external/bsd/bind/dist/bin/dnssec/win32/nsupdate.dsw delete external/bsd/bind/dist/bin/dnssec/win32/revoke.dsp delete external/bsd/bind/dist/bin/dnssec/win32/revoke.mak delete external/bsd/bind/dist/bin/dnssec/win32/settime.dsp delete external/bsd/bind/dist/bin/dnssec/win32/settime.mak delete external/bsd/bind/dist/bin/dnssec/win32/signzone.dsp delete external/bsd/bind/dist/bin/dnssec/win32/signzone.mak delete external/bsd/bind/dist/bin/named/Makefile.in patch external/bsd/bind/dist/bin/named/bind.keys.h patch external/bsd/bind/dist/bin/named/bind9.ver3.xsl new external/bsd/bind/dist/bin/named/bind9.ver3.xsl.h new external/bsd/bind/dist/bin/named/bind9.xsl.h patch external/bsd/bind/dist/bin/named/builtin.c patch external/bsd/bind/dist/bin/named/client.c patch external/bsd/bind/dist/bin/named/config.c patch external/bsd/bind/dist/bin/named/control.c patch external/bsd/bind/dist/bin/named/controlconf.c patch external/bsd/bind/dist/bin/named/interfacemgr.c patch external/bsd/bind/dist/bin/named/log.c patch external/bsd/bind/dist/bin/named/logconf.c patch external/bsd/bind/dist/bin/named/lwaddr.c patch external/bsd/bind/dist/bin/named/lwdgnba.c patch external/bsd/bind/dist/bin/named/lwdgrbn.c patch external/bsd/bind/dist/bin/named/lwresd.8 patch external/bsd/bind/dist/bin/named/lwresd.c patch external/bsd/bind/dist/bin/named/lwresd.docbook patch external/bsd/bind/dist/bin/named/lwresd.html patch external/bsd/bind/dist/bin/named/main.c patch external/bsd/bind/dist/bin/named/named.8 patch external/bsd/bind/dist/bin/named/named.conf.5 patch external/bsd/bind/dist/bin/named/named.conf.docbook patch external/bsd/bind/dist/bin/named/named.conf.html patch external/bsd/bind/dist/bin/named/named.docbook patch external/bsd/bind/dist/bin/named/named.html patch external/bsd/bind/dist/bin/named/query.c patch external/bsd/bind/dist/bin/named/server.c patch external/bsd/bind/dist/bin/named/statschannel.c patch external/bsd/bind/dist/bin/named/tkeyconf.c patch external/bsd/bind/dist/bin/named/tsigconf.c patch external/bsd/bind/dist/bin/named/update.c patch external/bsd/bind/dist/bin/named/xfrout.c patch external/bsd/bind/dist/bin/named/zoneconf.c patch external/bsd/bind/dist/bin/named/include/named/client.h patch external/bsd/bind/dist/bin/named/include/named/globals.h patch external/bsd/bind/dist/bin/named/include/named/main.h patch external/bsd/bind/dist/bin/named/include/named/query.h patch external/bsd/bind/dist/bin/named/include/named/server.h patch external/bsd/bind/dist/bin/named/unix/dlz_dlopen_driver.c patch external/bsd/bind/dist/bin/named/unix/os.c patch external/bsd/bind/dist/bin/named/win32/named.dsp delete external/bsd/bind/dist/bin/named/win32/named.mak delete external/bsd/bind/dist/bin/nsupdate/Makefile.in patch external/bsd/bind/dist/bin/nsupdate/nsupdate.1 patch external/bsd/bind/dist/bin/nsupdate/nsupdate.c patch external/bsd/bind/dist/bin/nsupdate/nsupdate.docbook patch external/bsd/bind/dist/bin/nsupdate/nsupdate.html patch external/bsd/bind/dist/bin/nsupdate/win32/nsupdate.dsp delete external/bsd/bind/dist/bin/nsupdate/win32/nsupdate.mak delete external/bsd/bind/dist/bin/pkcs11/openssl-0.9.8s-patch delete external/bsd/bind/dist/bin/pkcs11/openssl-0.9.8za-patch new external/bsd/bind/dist/bin/pkcs11/openssl-1.0.0f-patch delete external/bsd/bind/dist/bin/pkcs11/openssl-1.0.0m-patch new external/bsd/bind/dist/bin/pkcs11/openssl-1.0.1h-patch new external/bsd/bind/dist/bin/pkcs11/pkcs11-destroy.docbook patch external/bsd/bind/dist/bin/pkcs11/pkcs11-keygen.docbook patch external/bsd/bind/dist/bin/pkcs11/pkcs11-list.docbook patch external/bsd/bind/dist/bin/pkcs11/win32/pk11destroy.dsp delete external/bsd/bind/dist/bin/pkcs11/win32/pk11destroy.mak delete external/bsd/bind/dist/bin/pkcs11/win32/pk11keygen.dsp delete external/bsd/bind/dist/bin/pkcs11/win32/pk11keygen.mak delete external/bsd/bind/dist/bin/pkcs11/win32/pk11list.dsp delete external/bsd/bind/dist/bin/pkcs11/win32/pk11list.mak delete external/bsd/bind/dist/bin/python/Makefile.in patch external/bsd/bind/dist/bin/python/dnssec-checkds.8 patch external/bsd/bind/dist/bin/python/dnssec-checkds.docbook patch external/bsd/bind/dist/bin/python/dnssec-checkds.html patch external/bsd/bind/dist/bin/python/dnssec-checkds.py.in patch external/bsd/bind/dist/bin/python/dnssec-coverage.8 new external/bsd/bind/dist/bin/python/dnssec-coverage.docbook new external/bsd/bind/dist/bin/python/dnssec-coverage.html new external/bsd/bind/dist/bin/python/dnssec-coverage.py.in new external/bsd/bind/dist/bin/rndc/rndc.8 patch external/bsd/bind/dist/bin/rndc/rndc.c patch external/bsd/bind/dist/bin/rndc/rndc.conf.5 patch external/bsd/bind/dist/bin/rndc/rndc.conf.docbook patch external/bsd/bind/dist/bin/rndc/rndc.conf.html patch external/bsd/bind/dist/bin/rndc/rndc.docbook patch external/bsd/bind/dist/bin/rndc/rndc.html patch external/bsd/bind/dist/bin/rndc/win32/rndc.dsp delete external/bsd/bind/dist/bin/rndc/win32/rndc.mak delete external/bsd/bind/dist/bin/rndc/win32/rndcutil.dsp delete external/bsd/bind/dist/bin/tests/Makefile.in patch external/bsd/bind/dist/bin/tests/adb_test.c patch external/bsd/bind/dist/bin/tests/backtrace_test.c patch external/bsd/bind/dist/bin/tests/byaddr_test.c patch external/bsd/bind/dist/bin/tests/byname_test.c patch external/bsd/bind/dist/bin/tests/db_test.c patch external/bsd/bind/dist/bin/tests/fsaccess_test.c patch external/bsd/bind/dist/bin/tests/hash_test.c patch external/bsd/bind/dist/bin/tests/log_test.c patch external/bsd/bind/dist/bin/tests/rdata_test.c patch external/bsd/bind/dist/bin/tests/rwlock_test.c patch external/bsd/bind/dist/bin/tests/shutdown_test.c patch external/bsd/bind/dist/bin/tests/sig0_test.c patch external/bsd/bind/dist/bin/tests/sock_test.c patch external/bsd/bind/dist/bin/tests/task_test.c patch external/bsd/bind/dist/bin/tests/timer_test.c patch external/bsd/bind/dist/bin/tests/zone_test.c patch external/bsd/bind/dist/bin/tests/atomic/t_atomic.c patch external/bsd/bind/dist/bin/tests/db/t_db.c patch external/bsd/bind/dist/bin/tests/dst/Kdh.+002+18602.key delete external/bsd/bind/dist/bin/tests/dst/Kdh.+002+18602.key.in new external/bsd/bind/dist/bin/tests/dst/Kdh.+002+18602.private delete external/bsd/bind/dist/bin/tests/dst/Kdh.+002+18602.private.in new external/bsd/bind/dist/bin/tests/dst/Kdh.+002+48957.key delete external/bsd/bind/dist/bin/tests/dst/Kdh.+002+48957.key.in new external/bsd/bind/dist/bin/tests/dst/Kdh.+002+48957.private delete external/bsd/bind/dist/bin/tests/dst/Kdh.+002+48957.private.in new external/bsd/bind/dist/bin/tests/dst/Ktest.+001+00002.key delete external/bsd/bind/dist/bin/tests/dst/Ktest.+001+00002.key.in new external/bsd/bind/dist/bin/tests/dst/Ktest.+001+54622.key delete external/bsd/bind/dist/bin/tests/dst/Ktest.+001+54622.key.in new external/bsd/bind/dist/bin/tests/dst/Ktest.+001+54622.private delete external/bsd/bind/dist/bin/tests/dst/Ktest.+001+54622.private.in new external/bsd/bind/dist/bin/tests/dst/Ktest.+003+23616.key delete external/bsd/bind/dist/bin/tests/dst/Ktest.+003+23616.key.in new external/bsd/bind/dist/bin/tests/dst/Ktest.+003+23616.private delete external/bsd/bind/dist/bin/tests/dst/Ktest.+003+23616.private.in new external/bsd/bind/dist/bin/tests/dst/Ktest.+003+49667.key delete external/bsd/bind/dist/bin/tests/dst/Ktest.+003+49667.key.in new external/bsd/bind/dist/bin/tests/dst/Makefile.in patch external/bsd/bind/dist/bin/tests/dst/dst_2_data delete external/bsd/bind/dist/bin/tests/dst/dst_2_data.in new external/bsd/bind/dist/bin/tests/dst/dst_test.c patch external/bsd/bind/dist/bin/tests/dst/gsstest.c patch external/bsd/bind/dist/bin/tests/dst/t2_data_1 delete external/bsd/bind/dist/bin/tests/dst/t2_data_1.in new external/bsd/bind/dist/bin/tests/dst/t2_data_2 delete external/bsd/bind/dist/bin/tests/dst/t2_data_2.in new external/bsd/bind/dist/bin/tests/dst/t2_dsasig delete external/bsd/bind/dist/bin/tests/dst/t2_dsasig.in new external/bsd/bind/dist/bin/tests/dst/t2_rsasig delete external/bsd/bind/dist/bin/tests/dst/t2_rsasig.in new external/bsd/bind/dist/bin/tests/dst/t_dst.c patch external/bsd/bind/dist/bin/tests/hashes/t_hashes.c patch external/bsd/bind/dist/bin/tests/master/t_master.c patch external/bsd/bind/dist/bin/tests/mem/t_mem.c patch external/bsd/bind/dist/bin/tests/names/dns_name_hash_data patch external/bsd/bind/dist/bin/tests/names/t_names.c patch external/bsd/bind/dist/bin/tests/rbt/t_rbt.c patch external/bsd/bind/dist/bin/tests/resolver/t_resolver.c patch external/bsd/bind/dist/bin/tests/sockaddr/t_sockaddr.c patch external/bsd/bind/dist/bin/tests/system/Makefile.in patch external/bsd/bind/dist/bin/tests/system/README patch external/bsd/bind/dist/bin/tests/system/ans.pl patch external/bsd/bind/dist/bin/tests/system/cleanall.sh patch external/bsd/bind/dist/bin/tests/system/conf.sh.in patch external/bsd/bind/dist/bin/tests/system/digcomp.pl patch external/bsd/bind/dist/bin/tests/system/genzone.sh patch external/bsd/bind/dist/bin/tests/system/ifconfig.sh patch external/bsd/bind/dist/bin/tests/system/run.sh patch external/bsd/bind/dist/bin/tests/system/runall.sh patch external/bsd/bind/dist/bin/tests/system/setup.sh patch external/bsd/bind/dist/bin/tests/system/start.pl patch external/bsd/bind/dist/bin/tests/system/testcrypto.sh new external/bsd/bind/dist/bin/tests/system/testsock.pl patch external/bsd/bind/dist/bin/tests/system/testsock6.pl patch external/bsd/bind/dist/bin/tests/system/acl/clean.sh patch external/bsd/bind/dist/bin/tests/system/acl/setup.sh patch external/bsd/bind/dist/bin/tests/system/acl/tests.sh patch external/bsd/bind/dist/bin/tests/system/acl/ns2/named5.conf new external/bsd/bind/dist/bin/tests/system/additional/clean.sh new external/bsd/bind/dist/bin/tests/system/additional/setup.sh new external/bsd/bind/dist/bin/tests/system/additional/tests.sh new external/bsd/bind/dist/bin/tests/system/addzone/clean.sh patch external/bsd/bind/dist/bin/tests/system/addzone/setup.sh patch external/bsd/bind/dist/bin/tests/system/addzone/tests.sh patch external/bsd/bind/dist/bin/tests/system/addzone/ns1/inlineslave.db new external/bsd/bind/dist/bin/tests/system/addzone/ns1/named.conf new external/bsd/bind/dist/bin/tests/system/addzone/ns2/added.db patch external/bsd/bind/dist/bin/tests/system/addzone/ns2/inline.db new external/bsd/bind/dist/bin/tests/system/allow_query/tests.sh patch external/bsd/bind/dist/bin/tests/system/allow_query/ns2/named57.conf new external/bsd/bind/dist/bin/tests/system/autosign/clean.sh patch external/bsd/bind/dist/bin/tests/system/autosign/prereq.sh patch external/bsd/bind/dist/bin/tests/system/autosign/setup.sh patch external/bsd/bind/dist/bin/tests/system/autosign/tests.sh patch external/bsd/bind/dist/bin/tests/system/autosign/ns1/keygen.sh patch external/bsd/bind/dist/bin/tests/system/autosign/ns2/keygen.sh patch external/bsd/bind/dist/bin/tests/system/autosign/ns3/keygen.sh patch external/bsd/bind/dist/bin/tests/system/builtin/Makefile.in new external/bsd/bind/dist/bin/tests/system/builtin/clean.sh new external/bsd/bind/dist/bin/tests/system/builtin/gethostname.c new external/bsd/bind/dist/bin/tests/system/builtin/tests.sh patch external/bsd/bind/dist/bin/tests/system/builtin/ns2/named.conf new external/bsd/bind/dist/bin/tests/system/builtin/ns3/named.conf new external/bsd/bind/dist/bin/tests/system/cacheclean/tests.sh patch external/bsd/bind/dist/bin/tests/system/cacheclean/ns1/example.db patch external/bsd/bind/dist/bin/tests/system/case/clean.sh new external/bsd/bind/dist/bin/tests/system/case/tests.sh new external/bsd/bind/dist/bin/tests/system/case/ns1/example.db new external/bsd/bind/dist/bin/tests/system/case/ns1/named.conf new external/bsd/bind/dist/bin/tests/system/case/ns2/named.conf new external/bsd/bind/dist/bin/tests/system/checkconf/altdb.conf new external/bsd/bind/dist/bin/tests/system/checkconf/bad-also-notify.conf new external/bsd/bind/dist/bin/tests/system/checkconf/bad-dnssec.conf new external/bsd/bind/dist/bin/tests/system/checkconf/bad-hint.conf new external/bsd/bind/dist/bin/tests/system/checkconf/bad-inline-slave.conf new external/bsd/bind/dist/bin/tests/system/checkconf/bad-many.conf new external/bsd/bind/dist/bin/tests/system/checkconf/bad-master-request-ixfr.conf new external/bsd/bind/dist/bin/tests/system/checkconf/bad-noddns.conf new external/bsd/bind/dist/bin/tests/system/checkconf/bad-tsig.conf new external/bsd/bind/dist/bin/tests/system/checkconf/bad.conf delete external/bsd/bind/dist/bin/tests/system/checkconf/badtsig.conf delete external/bsd/bind/dist/bin/tests/system/checkconf/check-dup-records-fail.conf new external/bsd/bind/dist/bin/tests/system/checkconf/check-dup-records.db new external/bsd/bind/dist/bin/tests/system/checkconf/check-mx-cname-fail.conf new external/bsd/bind/dist/bin/tests/system/checkconf/check-mx-cname.db new external/bsd/bind/dist/bin/tests/system/checkconf/check-mx-fail.conf new external/bsd/bind/dist/bin/tests/system/checkconf/check-mx.db new external/bsd/bind/dist/bin/tests/system/checkconf/check-names-fail.conf new external/bsd/bind/dist/bin/tests/system/checkconf/check-names.db new external/bsd/bind/dist/bin/tests/system/checkconf/check-srv-cname-fail.conf new external/bsd/bind/dist/bin/tests/system/checkconf/check-srv-cname.db new external/bsd/bind/dist/bin/tests/system/checkconf/clean.sh patch external/bsd/bind/dist/bin/tests/system/checkconf/good.conf patch external/bsd/bind/dist/bin/tests/system/checkconf/hint-nofile.conf new external/bsd/bind/dist/bin/tests/system/checkconf/inline-bad.conf new external/bsd/bind/dist/bin/tests/system/checkconf/inline-good.conf new external/bsd/bind/dist/bin/tests/system/checkconf/inline-no.conf new external/bsd/bind/dist/bin/tests/system/checkconf/notify.conf new external/bsd/bind/dist/bin/tests/system/checkconf/tests.sh patch external/bsd/bind/dist/bin/tests/system/checkconf/warn-keydir.conf new external/bsd/bind/dist/bin/tests/system/checkds/clean.sh patch external/bsd/bind/dist/bin/tests/system/checkds/dig.pl new external/bsd/bind/dist/bin/tests/system/checkds/dig.sh patch external/bsd/bind/dist/bin/tests/system/checkds/missing.example.dlv.example.dlv.db patch external/bsd/bind/dist/bin/tests/system/checkds/setup.sh patch external/bsd/bind/dist/bin/tests/system/checkds/tests.sh patch external/bsd/bind/dist/bin/tests/system/checknames/clean.sh patch external/bsd/bind/dist/bin/tests/system/checknames/setup.sh patch external/bsd/bind/dist/bin/tests/system/checknames/tests.sh patch external/bsd/bind/dist/bin/tests/system/checknames/ns4/master-ignore.update.db.in new external/bsd/bind/dist/bin/tests/system/checknames/ns4/named.conf new external/bsd/bind/dist/bin/tests/system/checknames/ns4/root.hints new external/bsd/bind/dist/bin/tests/system/checkzone/tests.sh patch external/bsd/bind/dist/bin/tests/system/checkzone/zones/bad-nsec3-padded.db new external/bsd/bind/dist/bin/tests/system/checkzone/zones/bad-nsec3owner-padded.dbnew external/bsd/bind/dist/bin/tests/system/checkzone/zones/bad2.db new external/bsd/bind/dist/bin/tests/system/checkzone/zones/good-nsec3-nopadhash.db new external/bsd/bind/dist/bin/tests/system/checkzone/zones/spf.db new external/bsd/bind/dist/bin/tests/system/coverage/clean.sh new external/bsd/bind/dist/bin/tests/system/coverage/prereq.sh new external/bsd/bind/dist/bin/tests/system/coverage/setup.sh new external/bsd/bind/dist/bin/tests/system/coverage/tests.sh new external/bsd/bind/dist/bin/tests/system/coverage/01-ksk-inactive/README new external/bsd/bind/dist/bin/tests/system/coverage/01-ksk-inactive/expect new external/bsd/bind/dist/bin/tests/system/coverage/02-zsk-inactive/README new external/bsd/bind/dist/bin/tests/system/coverage/02-zsk-inactive/expect new external/bsd/bind/dist/bin/tests/system/coverage/03-ksk-unpublished/README new external/bsd/bind/dist/bin/tests/system/coverage/03-ksk-unpublished/expect new external/bsd/bind/dist/bin/tests/system/coverage/04-zsk-unpublished/README new external/bsd/bind/dist/bin/tests/system/coverage/04-zsk-unpublished/expect new external/bsd/bind/dist/bin/tests/system/coverage/05-ksk-unpub-active/README new external/bsd/bind/dist/bin/tests/system/coverage/05-ksk-unpub-active/expect new external/bsd/bind/dist/bin/tests/system/coverage/06-zsk-unpub-active/README new external/bsd/bind/dist/bin/tests/system/coverage/06-zsk-unpub-active/expect new external/bsd/bind/dist/bin/tests/system/coverage/07-ksk-ttl/README new external/bsd/bind/dist/bin/tests/system/coverage/07-ksk-ttl/expect new external/bsd/bind/dist/bin/tests/system/coverage/08-zsk-ttl/README new external/bsd/bind/dist/bin/tests/system/coverage/08-zsk-ttl/expect new external/bsd/bind/dist/bin/tests/system/dlv/clean.sh patch external/bsd/bind/dist/bin/tests/system/dlv/prereq.sh new external/bsd/bind/dist/bin/tests/system/dlv/setup.sh patch external/bsd/bind/dist/bin/tests/system/dlv/ns1/sign.sh patch external/bsd/bind/dist/bin/tests/system/dlv/ns2/sign.sh patch external/bsd/bind/dist/bin/tests/system/dlv/ns3/sign.sh patch external/bsd/bind/dist/bin/tests/system/dlv/ns6/sign.sh patch external/bsd/bind/dist/bin/tests/system/dlvauto/clean.sh patch external/bsd/bind/dist/bin/tests/system/dlvauto/prereq.sh new external/bsd/bind/dist/bin/tests/system/dlvauto/setup.sh patch external/bsd/bind/dist/bin/tests/system/dlvauto/tests.sh patch external/bsd/bind/dist/bin/tests/system/dlvauto/ns1/sign.sh patch external/bsd/bind/dist/bin/tests/system/dlz/tests.sh patch external/bsd/bind/dist/bin/tests/system/dlzexternal/Makefile.in patch external/bsd/bind/dist/bin/tests/system/dlzexternal/clean.sh patch external/bsd/bind/dist/bin/tests/system/dlzexternal/driver.c patch external/bsd/bind/dist/bin/tests/system/dlzexternal/prereq.sh patch external/bsd/bind/dist/bin/tests/system/dlzexternal/setup.sh patch external/bsd/bind/dist/bin/tests/system/dlzexternal/tests.sh patch external/bsd/bind/dist/bin/tests/system/dns64/clean.sh patch external/bsd/bind/dist/bin/tests/system/dns64/prereq.sh new external/bsd/bind/dist/bin/tests/system/dns64/setup.sh patch external/bsd/bind/dist/bin/tests/system/dns64/tests.sh patch external/bsd/bind/dist/bin/tests/system/dns64/ns1/example.db patch external/bsd/bind/dist/bin/tests/system/dns64/ns1/sign.sh patch external/bsd/bind/dist/bin/tests/system/dns64/ns2/named.conf patch external/bsd/bind/dist/bin/tests/system/dns64/ns2/rpz.db new external/bsd/bind/dist/bin/tests/system/dnssec/clean.sh patch external/bsd/bind/dist/bin/tests/system/dnssec/prereq.sh patch external/bsd/bind/dist/bin/tests/system/dnssec/setup.sh patch external/bsd/bind/dist/bin/tests/system/dnssec/tests.sh patch external/bsd/bind/dist/bin/tests/system/dnssec/ns1/root.db.in patch external/bsd/bind/dist/bin/tests/system/dnssec/ns1/sign.sh patch external/bsd/bind/dist/bin/tests/system/dnssec/ns2/example.db.in patch external/bsd/bind/dist/bin/tests/system/dnssec/ns2/in-addr.arpa.db.in new external/bsd/bind/dist/bin/tests/system/dnssec/ns2/insecure.secure.example.db patch external/bsd/bind/dist/bin/tests/system/dnssec/ns2/named.conf patch external/bsd/bind/dist/bin/tests/system/dnssec/ns2/sign.sh patch external/bsd/bind/dist/bin/tests/system/dnssec/ns3/named.conf patch external/bsd/bind/dist/bin/tests/system/dnssec/ns3/publish-inactive.example.db.in new external/bsd/bind/dist/bin/tests/system/dnssec/ns3/secure.example.db.in patch external/bsd/bind/dist/bin/tests/system/dnssec/ns3/siginterval.example.db.in new external/bsd/bind/dist/bin/tests/system/dnssec/ns3/siginterval1.conf new external/bsd/bind/dist/bin/tests/system/dnssec/ns3/siginterval2.conf new external/bsd/bind/dist/bin/tests/system/dnssec/ns3/sign.sh patch external/bsd/bind/dist/bin/tests/system/dnssec/ns4/named4.conf new external/bsd/bind/dist/bin/tests/system/dnssec/ns6/named.args new external/bsd/bind/dist/bin/tests/system/dnssec/ns6/named.conf patch external/bsd/bind/dist/bin/tests/system/dnssec/ns6/optout-tld.db.in new external/bsd/bind/dist/bin/tests/system/dnssec/ns6/sign.sh new external/bsd/bind/dist/bin/tests/system/dnssec/ns7/named.conf patch external/bsd/bind/dist/bin/tests/system/dnssec/ns7/sign.sh new external/bsd/bind/dist/bin/tests/system/dnssec/ns7/split-rrsig.db.in new external/bsd/bind/dist/bin/tests/system/dsdigest/prereq.sh new external/bsd/bind/dist/bin/tests/system/ecdsa/clean.sh patch external/bsd/bind/dist/bin/tests/system/ecdsa/prereq.sh new external/bsd/bind/dist/bin/tests/system/ecdsa/prereq.sh.in delete external/bsd/bind/dist/bin/tests/system/ecdsa/setup.sh patch external/bsd/bind/dist/bin/tests/system/ecdsa/tests.sh patch external/bsd/bind/dist/bin/tests/system/ecdsa/ns1/sign.sh patch external/bsd/bind/dist/bin/tests/system/emptyzones/clean.sh new external/bsd/bind/dist/bin/tests/system/emptyzones/setup.sh new external/bsd/bind/dist/bin/tests/system/emptyzones/tests.sh new external/bsd/bind/dist/bin/tests/system/emptyzones/ns1/empty.db new external/bsd/bind/dist/bin/tests/system/emptyzones/ns1/named1.conf new external/bsd/bind/dist/bin/tests/system/emptyzones/ns1/named2.conf new external/bsd/bind/dist/bin/tests/system/emptyzones/ns1/rfc1918.zones new external/bsd/bind/dist/bin/tests/system/emptyzones/ns1/root.hint new external/bsd/bind/dist/bin/tests/system/filter-aaaa/clean.sh patch external/bsd/bind/dist/bin/tests/system/filter-aaaa/prereq.sh patch external/bsd/bind/dist/bin/tests/system/filter-aaaa/setup.sh patch external/bsd/bind/dist/bin/tests/system/filter-aaaa/ns1/sign.sh patch external/bsd/bind/dist/bin/tests/system/filter-aaaa/ns1/signed.db.presigned new external/bsd/bind/dist/bin/tests/system/filter-aaaa/ns4/sign.sh patch external/bsd/bind/dist/bin/tests/system/filter-aaaa/ns4/signed.db.presigned new external/bsd/bind/dist/bin/tests/system/filter-aaaa/ns4/unsigned.db patch external/bsd/bind/dist/bin/tests/system/formerr/clean.sh new external/bsd/bind/dist/bin/tests/system/formerr/formerr.pl new external/bsd/bind/dist/bin/tests/system/formerr/nametoolong new external/bsd/bind/dist/bin/tests/system/formerr/noquestions new external/bsd/bind/dist/bin/tests/system/formerr/tests.sh new external/bsd/bind/dist/bin/tests/system/formerr/twoquestions new external/bsd/bind/dist/bin/tests/system/formerr/ns1/named.conf new external/bsd/bind/dist/bin/tests/system/formerr/ns1/root.db new external/bsd/bind/dist/bin/tests/system/forward/tests.sh patch external/bsd/bind/dist/bin/tests/system/forward/ns2/named.conf patch external/bsd/bind/dist/bin/tests/system/forward/ns4/named.conf patch external/bsd/bind/dist/bin/tests/system/glue/tests.sh patch external/bsd/bind/dist/bin/tests/system/gost/clean.sh patch external/bsd/bind/dist/bin/tests/system/gost/prereq.sh new external/bsd/bind/dist/bin/tests/system/gost/prereq.sh.in delete external/bsd/bind/dist/bin/tests/system/gost/setup.sh patch external/bsd/bind/dist/bin/tests/system/gost/tests.sh patch external/bsd/bind/dist/bin/tests/system/gost/ns1/sign.sh patch external/bsd/bind/dist/bin/tests/system/inline/checkdsa.sh.in new external/bsd/bind/dist/bin/tests/system/inline/clean.sh patch external/bsd/bind/dist/bin/tests/system/inline/prereq.sh new external/bsd/bind/dist/bin/tests/system/inline/setup.sh patch external/bsd/bind/dist/bin/tests/system/inline/tests.sh patch external/bsd/bind/dist/bin/tests/system/inline/ns1/root.db.in patch external/bsd/bind/dist/bin/tests/system/inline/ns1/sign.sh patch external/bsd/bind/dist/bin/tests/system/inline/ns2/named.conf patch external/bsd/bind/dist/bin/tests/system/inline/ns3/master3.db.in patch external/bsd/bind/dist/bin/tests/system/inline/ns3/master4.db.in new external/bsd/bind/dist/bin/tests/system/inline/ns3/named.conf patch external/bsd/bind/dist/bin/tests/system/inline/ns3/sign.sh patch external/bsd/bind/dist/bin/tests/system/ixfr/clean.sh patch external/bsd/bind/dist/bin/tests/system/ixfr/prereq.sh patch external/bsd/bind/dist/bin/tests/system/ixfr/setup.sh patch external/bsd/bind/dist/bin/tests/system/ixfr/tests.sh patch external/bsd/bind/dist/bin/tests/system/ixfr/ns3/named.conf patch external/bsd/bind/dist/bin/tests/system/logfileconfig/setup.sh patch external/bsd/bind/dist/bin/tests/system/logfileconfig/tests.sh patch external/bsd/bind/dist/bin/tests/system/lwresd/clean.sh patch external/bsd/bind/dist/bin/tests/system/lwresd/lwtest.c patch external/bsd/bind/dist/bin/tests/system/lwresd/tests.sh patch external/bsd/bind/dist/bin/tests/system/masterfile/knowngood.dig.out patch external/bsd/bind/dist/bin/tests/system/masterfile/ns1/include.db patch external/bsd/bind/dist/bin/tests/system/masterformat/clean.sh patch external/bsd/bind/dist/bin/tests/system/masterformat/prereq.sh new external/bsd/bind/dist/bin/tests/system/masterformat/setup.sh patch external/bsd/bind/dist/bin/tests/system/masterformat/tests.sh patch external/bsd/bind/dist/bin/tests/system/masterformat/ns1/example.db patch external/bsd/bind/dist/bin/tests/system/metadata/clean.sh patch external/bsd/bind/dist/bin/tests/system/metadata/prereq.sh patch external/bsd/bind/dist/bin/tests/system/metadata/setup.sh patch external/bsd/bind/dist/bin/tests/system/metadata/tests.sh patch external/bsd/bind/dist/bin/tests/system/nslookup/clean.sh new external/bsd/bind/dist/bin/tests/system/nslookup/setup.sh new external/bsd/bind/dist/bin/tests/system/nslookup/tests.sh new external/bsd/bind/dist/bin/tests/system/nslookup/ns1/named.conf new external/bsd/bind/dist/bin/tests/system/nsupdate/clean.sh patch external/bsd/bind/dist/bin/tests/system/nsupdate/prereq.sh new external/bsd/bind/dist/bin/tests/system/nsupdate/setup.sh patch external/bsd/bind/dist/bin/tests/system/nsupdate/tests.sh patch external/bsd/bind/dist/bin/tests/system/nsupdate/update_test.pl patch external/bsd/bind/dist/bin/tests/system/nsupdate/ns1/named.conf patch external/bsd/bind/dist/bin/tests/system/nsupdate/ns3/sign.sh patch external/bsd/bind/dist/bin/tests/system/pending/clean.sh patch external/bsd/bind/dist/bin/tests/system/pending/prereq.sh patch external/bsd/bind/dist/bin/tests/system/pending/setup.sh patch external/bsd/bind/dist/bin/tests/system/pending/ns1/sign.sh patch external/bsd/bind/dist/bin/tests/system/pending/ns2/sign.sh patch external/bsd/bind/dist/bin/tests/system/pkcs11/clean.sh patch external/bsd/bind/dist/bin/tests/system/pkcs11/prereq.sh patch external/bsd/bind/dist/bin/tests/system/pkcs11/setup.sh patch external/bsd/bind/dist/bin/tests/system/pkcs11/tests.sh patch external/bsd/bind/dist/bin/tests/system/redirect/clean.sh patch external/bsd/bind/dist/bin/tests/system/redirect/prereq.sh new external/bsd/bind/dist/bin/tests/system/redirect/setup.sh patch external/bsd/bind/dist/bin/tests/system/redirect/tests.sh patch external/bsd/bind/dist/bin/tests/system/redirect/ns1/sign.sh patch external/bsd/bind/dist/bin/tests/system/redirect/ns2/example.db.in new external/bsd/bind/dist/bin/tests/system/redirect/ns2/named.conf patch external/bsd/bind/dist/bin/tests/system/redirect/ns2/redirect.db delete external/bsd/bind/dist/bin/tests/system/redirect/ns2/redirect.db.in new external/bsd/bind/dist/bin/tests/system/resolver/clean.sh patch external/bsd/bind/dist/bin/tests/system/resolver/prereq.sh patch external/bsd/bind/dist/bin/tests/system/resolver/setup.sh patch external/bsd/bind/dist/bin/tests/system/resolver/tests.sh patch external/bsd/bind/dist/bin/tests/system/resolver/ans2/ans.pl patch external/bsd/bind/dist/bin/tests/system/resolver/ans3/ans.pl patch external/bsd/bind/dist/bin/tests/system/resolver/ns1/named.conf patch external/bsd/bind/dist/bin/tests/system/resolver/ns4/broken.db new external/bsd/bind/dist/bin/tests/system/resolver/ns4/named.conf patch external/bsd/bind/dist/bin/tests/system/resolver/ns6/broken.db new external/bsd/bind/dist/bin/tests/system/resolver/ns6/keygen.sh patch external/bsd/bind/dist/bin/tests/system/resolver/ns6/named.conf patch external/bsd/bind/dist/bin/tests/system/resolver/ns7/named.conf delete external/bsd/bind/dist/bin/tests/system/resolver/ns7/named1.conf new external/bsd/bind/dist/bin/tests/system/resolver/ns7/named2.conf new external/bsd/bind/dist/bin/tests/system/rndc/clean.sh patch external/bsd/bind/dist/bin/tests/system/rndc/setup.sh patch external/bsd/bind/dist/bin/tests/system/rndc/tests.sh patch external/bsd/bind/dist/bin/tests/system/rndc/ns3/named.conf new external/bsd/bind/dist/bin/tests/system/rpz/Makefile.in patch external/bsd/bind/dist/bin/tests/system/rpz/clean.sh patch external/bsd/bind/dist/bin/tests/system/rpz/prereq.sh new external/bsd/bind/dist/bin/tests/system/rpz/qperf.sh patch external/bsd/bind/dist/bin/tests/system/rpz/rpz.c patch external/bsd/bind/dist/bin/tests/system/rpz/setup.sh patch external/bsd/bind/dist/bin/tests/system/rpz/test1 patch external/bsd/bind/dist/bin/tests/system/rpz/test2 patch external/bsd/bind/dist/bin/tests/system/rpz/test3 patch external/bsd/bind/dist/bin/tests/system/rpz/test4 patch external/bsd/bind/dist/bin/tests/system/rpz/test4a new external/bsd/bind/dist/bin/tests/system/rpz/test5 patch external/bsd/bind/dist/bin/tests/system/rpz/tests.sh patch external/bsd/bind/dist/bin/tests/system/rpz/ns1/named.conf patch external/bsd/bind/dist/bin/tests/system/rpz/ns1/root.db patch external/bsd/bind/dist/bin/tests/system/rpz/ns2/base-tld2s.db patch external/bsd/bind/dist/bin/tests/system/rpz/ns2/bl.tld2.db.in new external/bsd/bind/dist/bin/tests/system/rpz/ns2/blv2.tld2.db.in new external/bsd/bind/dist/bin/tests/system/rpz/ns2/blv3.tld2.db.in new external/bsd/bind/dist/bin/tests/system/rpz/ns2/hints patch external/bsd/bind/dist/bin/tests/system/rpz/ns2/named.conf patch external/bsd/bind/dist/bin/tests/system/rpz/ns2/tld2.db patch external/bsd/bind/dist/bin/tests/system/rpz/ns3/base.db patch external/bsd/bind/dist/bin/tests/system/rpz/ns3/crash1 patch external/bsd/bind/dist/bin/tests/system/rpz/ns3/crash2 patch external/bsd/bind/dist/bin/tests/system/rpz/ns3/hints patch external/bsd/bind/dist/bin/tests/system/rpz/ns3/named.conf patch external/bsd/bind/dist/bin/tests/system/rpz/ns4/hints patch external/bsd/bind/dist/bin/tests/system/rpz/ns4/named.conf patch external/bsd/bind/dist/bin/tests/system/rpz/ns4/tld4.db patch external/bsd/bind/dist/bin/tests/system/rpz/ns5/hints patch external/bsd/bind/dist/bin/tests/system/rpz/ns5/named.args new external/bsd/bind/dist/bin/tests/system/rpz/ns5/named.conf patch external/bsd/bind/dist/bin/tests/system/rpz/ns5/tld5.db new external/bsd/bind/dist/bin/tests/system/rpz/ns6/hints new external/bsd/bind/dist/bin/tests/system/rpz/ns6/named.conf new external/bsd/bind/dist/bin/tests/system/rrl/Makefile.in new external/bsd/bind/dist/bin/tests/system/rrl/clean.sh new external/bsd/bind/dist/bin/tests/system/rrl/prereq.sh new external/bsd/bind/dist/bin/tests/system/rrl/rrl.c new external/bsd/bind/dist/bin/tests/system/rrl/setup.sh new external/bsd/bind/dist/bin/tests/system/rrl/tests.sh new external/bsd/bind/dist/bin/tests/system/rrl/ns1/named.conf new external/bsd/bind/dist/bin/tests/system/rrl/ns1/root.db new external/bsd/bind/dist/bin/tests/system/rrl/ns2/hints new external/bsd/bind/dist/bin/tests/system/rrl/ns2/named.conf new external/bsd/bind/dist/bin/tests/system/rrl/ns2/tld2.db new external/bsd/bind/dist/bin/tests/system/rrl/ns3/hints new external/bsd/bind/dist/bin/tests/system/rrl/ns3/named.conf new external/bsd/bind/dist/bin/tests/system/rrl/ns3/tld3.db new external/bsd/bind/dist/bin/tests/system/rrsetorder/tests.sh patch external/bsd/bind/dist/bin/tests/system/rrsetorder/ns1/named.conf patch external/bsd/bind/dist/bin/tests/system/rsabigexponent/bigkey.c patch external/bsd/bind/dist/bin/tests/system/rsabigexponent/clean.sh patch external/bsd/bind/dist/bin/tests/system/rsabigexponent/prereq.sh patch external/bsd/bind/dist/bin/tests/system/rsabigexponent/setup.sh patch external/bsd/bind/dist/bin/tests/system/rsabigexponent/ns1/sign.sh patch external/bsd/bind/dist/bin/tests/system/rsabigexponent/ns2/Xexample.+005+05896.private patch external/bsd/bind/dist/bin/tests/system/rsabigexponent/ns2/sign.sh patch external/bsd/bind/dist/bin/tests/system/smartsign/clean.sh patch external/bsd/bind/dist/bin/tests/system/smartsign/prereq.sh patch external/bsd/bind/dist/bin/tests/system/smartsign/setup.sh patch external/bsd/bind/dist/bin/tests/system/smartsign/tests.sh patch external/bsd/bind/dist/bin/tests/system/spf/clean.sh new external/bsd/bind/dist/bin/tests/system/spf/tests.sh new external/bsd/bind/dist/bin/tests/system/spf/ns1/named.conf new external/bsd/bind/dist/bin/tests/system/spf/ns1/spf.db new external/bsd/bind/dist/bin/tests/system/staticstub/clean.sh patch external/bsd/bind/dist/bin/tests/system/staticstub/prereq.sh new external/bsd/bind/dist/bin/tests/system/staticstub/setup.sh patch external/bsd/bind/dist/bin/tests/system/staticstub/tests.sh patch external/bsd/bind/dist/bin/tests/system/staticstub/ns3/sign.sh patch external/bsd/bind/dist/bin/tests/system/staticstub/ns4/sign.sh patch external/bsd/bind/dist/bin/tests/system/stress/tests.sh patch external/bsd/bind/dist/bin/tests/system/tkey/clean.sh patch external/bsd/bind/dist/bin/tests/system/tkey/keycreate.c patch external/bsd/bind/dist/bin/tests/system/tkey/keydelete.c patch external/bsd/bind/dist/bin/tests/system/tkey/prereq.sh patch external/bsd/bind/dist/bin/tests/system/tkey/setup.sh patch external/bsd/bind/dist/bin/tests/system/tkey/tests.sh patch external/bsd/bind/dist/bin/tests/system/tkey/ns1/example.db new external/bsd/bind/dist/bin/tests/system/tkey/ns1/named.conf.in patch external/bsd/bind/dist/bin/tests/system/tkey/ns1/setup.sh patch external/bsd/bind/dist/bin/tests/system/tsig/clean.sh patch external/bsd/bind/dist/bin/tests/system/tsig/tests.sh patch external/bsd/bind/dist/bin/tests/system/tsig/ns1/example.db patch external/bsd/bind/dist/bin/tests/system/tsiggss/clean.sh patch external/bsd/bind/dist/bin/tests/system/tsiggss/prereq.sh patch external/bsd/bind/dist/bin/tests/system/tsiggss/setup.sh patch external/bsd/bind/dist/bin/tests/system/tsiggss/tests.sh patch external/bsd/bind/dist/bin/tests/system/unknown/clean.sh patch external/bsd/bind/dist/bin/tests/system/unknown/large.out patch external/bsd/bind/dist/bin/tests/system/unknown/prereq.sh new external/bsd/bind/dist/bin/tests/system/unknown/setup.sh patch external/bsd/bind/dist/bin/tests/system/unknown/tests.sh patch external/bsd/bind/dist/bin/tests/system/unknown/ns1/example-in.db patch external/bsd/bind/dist/bin/tests/system/unknown/ns3/sign.sh patch external/bsd/bind/dist/bin/tests/system/unknown/zones/nan.bad new external/bsd/bind/dist/bin/tests/system/upforwd/prereq.sh patch external/bsd/bind/dist/bin/tests/system/upforwd/tests.sh patch external/bsd/bind/dist/bin/tests/system/upforwd/ans4/ans.pl patch external/bsd/bind/dist/bin/tests/system/verify/clean.sh patch external/bsd/bind/dist/bin/tests/system/verify/prereq.sh new external/bsd/bind/dist/bin/tests/system/verify/setup.sh patch external/bsd/bind/dist/bin/tests/system/verify/tests.sh patch external/bsd/bind/dist/bin/tests/system/verify/zones/genzones.sh patch external/bsd/bind/dist/bin/tests/system/wildcard/clean.sh new external/bsd/bind/dist/bin/tests/system/wildcard/prereq.sh new external/bsd/bind/dist/bin/tests/system/wildcard/setup.sh new external/bsd/bind/dist/bin/tests/system/wildcard/tests.sh new external/bsd/bind/dist/bin/tests/system/wildcard/ns1/dlv.db.in new external/bsd/bind/dist/bin/tests/system/wildcard/ns1/named.conf new external/bsd/bind/dist/bin/tests/system/wildcard/ns1/nsec.db.in new external/bsd/bind/dist/bin/tests/system/wildcard/ns1/nsec3.db.in new external/bsd/bind/dist/bin/tests/system/wildcard/ns1/private.nsec.db.in new external/bsd/bind/dist/bin/tests/system/wildcard/ns1/private.nsec3.db.innew external/bsd/bind/dist/bin/tests/system/wildcard/ns1/root.db.in new external/bsd/bind/dist/bin/tests/system/wildcard/ns1/sign.sh new external/bsd/bind/dist/bin/tests/system/wildcard/ns2/hints new external/bsd/bind/dist/bin/tests/system/wildcard/ns2/named.conf new external/bsd/bind/dist/bin/tests/system/wildcard/ns3/hints new external/bsd/bind/dist/bin/tests/system/wildcard/ns3/named.conf new external/bsd/bind/dist/bin/tests/system/wildcard/ns4/named.conf new external/bsd/bind/dist/bin/tests/system/wildcard/ns5/hints new external/bsd/bind/dist/bin/tests/system/wildcard/ns5/named.conf new external/bsd/bind/dist/bin/tests/system/xfer/clean.sh patch external/bsd/bind/dist/bin/tests/system/xfer/dig1.good patch external/bsd/bind/dist/bin/tests/system/xfer/dig2.good patch external/bsd/bind/dist/bin/tests/system/xfer/prereq.sh patch external/bsd/bind/dist/bin/tests/system/xfer/setup.sh patch external/bsd/bind/dist/bin/tests/system/xfer/tests.sh patch external/bsd/bind/dist/bin/tests/system/xfer/ns2/named.conf patch external/bsd/bind/dist/bin/tests/system/xfer/ns2/slave.db.in new external/bsd/bind/dist/bin/tests/system/zero/clean.sh new external/bsd/bind/dist/bin/tests/system/zero/setup.sh new external/bsd/bind/dist/bin/tests/system/zero/tests.sh new external/bsd/bind/dist/bin/tests/system/zero/ns1/named.conf new external/bsd/bind/dist/bin/tests/system/zero/ns1/root.db new external/bsd/bind/dist/bin/tests/system/zero/ns2/named.conf new external/bsd/bind/dist/bin/tests/system/zero/ns3/named.conf new external/bsd/bind/dist/bin/tests/system/zero/ns3/root.hint new external/bsd/bind/dist/bin/tests/system/zero/ns4/named.conf new external/bsd/bind/dist/bin/tests/system/zonechecks/prereq.sh new external/bsd/bind/dist/bin/tests/system/zonechecks/setup.sh new external/bsd/bind/dist/bin/tests/system/zonechecks/tests.sh patch external/bsd/bind/dist/bin/tests/system/zonechecks/ns1/named.conf new external/bsd/bind/dist/bin/tests/tasks/t_tasks.c patch external/bsd/bind/dist/bin/tests/timers/t_timers.c patch external/bsd/bind/dist/bin/tools/arpaname.1 patch external/bsd/bind/dist/bin/tools/arpaname.docbook patch external/bsd/bind/dist/bin/tools/arpaname.html patch external/bsd/bind/dist/bin/tools/genrandom.8 patch external/bsd/bind/dist/bin/tools/genrandom.c patch external/bsd/bind/dist/bin/tools/genrandom.docbook patch external/bsd/bind/dist/bin/tools/genrandom.html patch external/bsd/bind/dist/bin/tools/isc-hmac-fixup.8 patch external/bsd/bind/dist/bin/tools/isc-hmac-fixup.c patch external/bsd/bind/dist/bin/tools/isc-hmac-fixup.docbook patch external/bsd/bind/dist/bin/tools/isc-hmac-fixup.html patch external/bsd/bind/dist/bin/tools/named-journalprint.8 patch external/bsd/bind/dist/bin/tools/named-journalprint.docbook patch external/bsd/bind/dist/bin/tools/named-journalprint.html patch external/bsd/bind/dist/bin/tools/nsec3hash.8 patch external/bsd/bind/dist/bin/tools/nsec3hash.c patch external/bsd/bind/dist/bin/tools/nsec3hash.docbook patch external/bsd/bind/dist/bin/tools/nsec3hash.html patch external/bsd/bind/dist/bin/tools/win32/arpaname.dsp delete external/bsd/bind/dist/bin/tools/win32/arpaname.mak delete external/bsd/bind/dist/bin/tools/win32/genrandom.dsp delete external/bsd/bind/dist/bin/tools/win32/genrandom.mak delete external/bsd/bind/dist/bin/tools/win32/ischmacfixup.dsp delete external/bsd/bind/dist/bin/tools/win32/ischmacfixup.mak delete external/bsd/bind/dist/bin/tools/win32/journalprint.dsp delete external/bsd/bind/dist/bin/tools/win32/journalprint.mak delete external/bsd/bind/dist/bin/tools/win32/nsec3hash.dsp delete external/bsd/bind/dist/bin/tools/win32/nsec3hash.mak delete external/bsd/bind/dist/bin/win32/BINDInstall/BINDInstall.dsp delete external/bsd/bind/dist/bin/win32/BINDInstall/BINDInstall.mak delete external/bsd/bind/dist/contrib/README new external/bsd/bind/dist/contrib/check5011.pl new external/bsd/bind/dist/contrib/dane/mkdane.sh new external/bsd/bind/dist/contrib/dane/tlsa6698.pem new external/bsd/bind/dist/contrib/dbus/GetForwarders delete external/bsd/bind/dist/contrib/dbus/INSTALL delete external/bsd/bind/dist/contrib/dbus/Makefile.9.3.2b1 delete external/bsd/bind/dist/contrib/dbus/Makefile.9.3.3rc2 delete external/bsd/bind/dist/contrib/dbus/README.DBUS delete external/bsd/bind/dist/contrib/dbus/SetForwarders delete external/bsd/bind/dist/contrib/dbus/bind-9.3.2b1-dbus.patch delete external/bsd/bind/dist/contrib/dbus/bind-9.3.3rc2-dbus.patch delete external/bsd/bind/dist/contrib/dbus/dbus_mgr.c delete external/bsd/bind/dist/contrib/dbus/dbus_mgr.h delete external/bsd/bind/dist/contrib/dbus/dbus_service.c delete external/bsd/bind/dist/contrib/dbus/dbus_service.h delete external/bsd/bind/dist/contrib/dbus/named-dbus-system.conf delete external/bsd/bind/dist/contrib/dbus/named-dbus.service delete external/bsd/bind/dist/contrib/dlz/config.dlz.in patch external/bsd/bind/dist/contrib/dlz/drivers/dlz_filesystem_driver.c patch external/bsd/bind/dist/contrib/dlz/drivers/dlz_ldap_driver.c patch external/bsd/bind/dist/contrib/dlz/drivers/dlz_mysql_driver.c patch external/bsd/bind/dist/contrib/dlz/drivers/dlz_odbc_driver.c patch external/bsd/bind/dist/contrib/dlz/drivers/dlz_postgres_driver.c patch external/bsd/bind/dist/contrib/dlz/drivers/sdlz_helper.c patch external/bsd/bind/dist/contrib/dlz/example/Makefile patch external/bsd/bind/dist/contrib/dlz/example/README patch external/bsd/bind/dist/contrib/dlz/example/dlz_example.c patch external/bsd/bind/dist/contrib/dlz/example/dlz_minimal.h delete external/bsd/bind/dist/contrib/dlz/modules/dlz_minimal.h new external/bsd/bind/dist/contrib/dlz/modules/bdbhpt/Makefile new external/bsd/bind/dist/contrib/dlz/modules/bdbhpt/README.md new external/bsd/bind/dist/contrib/dlz/modules/bdbhpt/dlz_bdbhpt_dynamic.c new external/bsd/bind/dist/contrib/dlz/modules/bdbhpt/testing/bdbhpt-populate.pl new external/bsd/bind/dist/contrib/dlz/modules/bdbhpt/testing/dns-data.txt new external/bsd/bind/dist/contrib/named-bootconf/named-bootconf.sh patch external/bsd/bind/dist/contrib/nslint-2.1a3/strerror.c patch external/bsd/bind/dist/contrib/perftcpdns/Makefile.in new external/bsd/bind/dist/contrib/perftcpdns/configure new external/bsd/bind/dist/contrib/perftcpdns/configure.in new external/bsd/bind/dist/contrib/perftcpdns/perftcpdns.c new external/bsd/bind/dist/contrib/query-loc-0.4.0/loc.c patch external/bsd/bind/dist/contrib/query-loc-0.4.0/loc_ntoa.c patch external/bsd/bind/dist/contrib/queryperf/queryperf.c patch external/bsd/bind/dist/contrib/sdb/bdb/bdb.c patch external/bsd/bind/dist/contrib/sdb/dir/dirdb.c patch external/bsd/bind/dist/contrib/sdb/ldap/ldapdb.c patch external/bsd/bind/dist/contrib/sdb/pgsql/pgsqldb.c patch external/bsd/bind/dist/contrib/sdb/pgsql/zonetodb.c patch external/bsd/bind/dist/contrib/sdb/sqlite/sqlitedb.c patch external/bsd/bind/dist/contrib/sdb/sqlite/zone2sqlite.c patch external/bsd/bind/dist/contrib/sdb/tcl/tcldb.c patch external/bsd/bind/dist/contrib/sdb/time/timedb.c patch external/bsd/bind/dist/contrib/zkt/Makefile.in patch external/bsd/bind/dist/contrib/zkt/dki.c patch external/bsd/bind/dist/contrib/zkt/tags new external/bsd/bind/dist/contrib/zkt/zkt-soaserial.c patch external/bsd/bind/dist/doc/arm/Bv9ARM-book.xml patch external/bsd/bind/dist/doc/arm/Bv9ARM.ch01.html patch external/bsd/bind/dist/doc/arm/Bv9ARM.ch02.html patch external/bsd/bind/dist/doc/arm/Bv9ARM.ch03.html patch external/bsd/bind/dist/doc/arm/Bv9ARM.ch04.html patch external/bsd/bind/dist/doc/arm/Bv9ARM.ch05.html patch external/bsd/bind/dist/doc/arm/Bv9ARM.ch06.html patch external/bsd/bind/dist/doc/arm/Bv9ARM.ch07.html patch external/bsd/bind/dist/doc/arm/Bv9ARM.ch08.html patch external/bsd/bind/dist/doc/arm/Bv9ARM.ch09.html patch external/bsd/bind/dist/doc/arm/Bv9ARM.ch10.html patch external/bsd/bind/dist/doc/arm/Bv9ARM.html patch external/bsd/bind/dist/doc/arm/Makefile.in patch external/bsd/bind/dist/doc/arm/libdns.xml patch external/bsd/bind/dist/doc/arm/man.arpaname.html patch external/bsd/bind/dist/doc/arm/man.ddns-confgen.html patch external/bsd/bind/dist/doc/arm/man.dig.html patch external/bsd/bind/dist/doc/arm/man.dnssec-checkds.html new external/bsd/bind/dist/doc/arm/man.dnssec-coverage.html new external/bsd/bind/dist/doc/arm/man.dnssec-dsfromkey.html patch external/bsd/bind/dist/doc/arm/man.dnssec-keyfromlabel.html patch external/bsd/bind/dist/doc/arm/man.dnssec-keygen.html patch external/bsd/bind/dist/doc/arm/man.dnssec-revoke.html patch external/bsd/bind/dist/doc/arm/man.dnssec-settime.html patch external/bsd/bind/dist/doc/arm/man.dnssec-signzone.html patch external/bsd/bind/dist/doc/arm/man.dnssec-verify.html patch external/bsd/bind/dist/doc/arm/man.genrandom.html patch external/bsd/bind/dist/doc/arm/man.host.html patch external/bsd/bind/dist/doc/arm/man.isc-hmac-fixup.html patch external/bsd/bind/dist/doc/arm/man.named-checkconf.html patch external/bsd/bind/dist/doc/arm/man.named-checkzone.html patch external/bsd/bind/dist/doc/arm/man.named-journalprint.html patch external/bsd/bind/dist/doc/arm/man.named.html patch external/bsd/bind/dist/doc/arm/man.nsec3hash.html patch external/bsd/bind/dist/doc/arm/man.nsupdate.html patch external/bsd/bind/dist/doc/arm/man.rndc-confgen.html patch external/bsd/bind/dist/doc/arm/man.rndc.conf.html patch external/bsd/bind/dist/doc/arm/man.rndc.html patch external/bsd/bind/dist/doc/arm/pkcs11.xml patch external/bsd/bind/dist/doc/misc/options patch external/bsd/bind/dist/doc/xsl/isc-docbook-chunk.xsl.in patch external/bsd/bind/dist/doc/xsl/isc-docbook-html.xsl.in patch external/bsd/bind/dist/lib/Atffile patch external/bsd/bind/dist/lib/Makefile.in patch external/bsd/bind/dist/lib/bind9/Makefile.in patch external/bsd/bind/dist/lib/bind9/api patch external/bsd/bind/dist/lib/bind9/check.c patch external/bsd/bind/dist/lib/bind9/getaddresses.c patch external/bsd/bind/dist/lib/bind9/win32/libbind9.dsp delete external/bsd/bind/dist/lib/bind9/win32/libbind9.mak delete external/bsd/bind/dist/lib/dns/Makefile.in patch external/bsd/bind/dist/lib/dns/acache.c patch external/bsd/bind/dist/lib/dns/acl.c patch external/bsd/bind/dist/lib/dns/adb.c patch external/bsd/bind/dist/lib/dns/api patch external/bsd/bind/dist/lib/dns/byaddr.c patch external/bsd/bind/dist/lib/dns/cache.c patch external/bsd/bind/dist/lib/dns/client.c patch external/bsd/bind/dist/lib/dns/db.c patch external/bsd/bind/dist/lib/dns/dbtable.c patch external/bsd/bind/dist/lib/dns/diff.c patch external/bsd/bind/dist/lib/dns/dispatch.c patch external/bsd/bind/dist/lib/dns/dlz.c patch external/bsd/bind/dist/lib/dns/dns64.c patch external/bsd/bind/dist/lib/dns/dnssec.c patch external/bsd/bind/dist/lib/dns/dst_api.c patch external/bsd/bind/dist/lib/dns/dst_internal.h patch external/bsd/bind/dist/lib/dns/dst_openssl.h patch external/bsd/bind/dist/lib/dns/dst_parse.c patch external/bsd/bind/dist/lib/dns/dst_result.c patch external/bsd/bind/dist/lib/dns/ecdb.c patch external/bsd/bind/dist/lib/dns/gen-win32.h patch external/bsd/bind/dist/lib/dns/gen.c patch external/bsd/bind/dist/lib/dns/gssapi_link.c patch external/bsd/bind/dist/lib/dns/gssapictx.c patch external/bsd/bind/dist/lib/dns/hmac_link.c patch external/bsd/bind/dist/lib/dns/iptable.c patch external/bsd/bind/dist/lib/dns/journal.c patch external/bsd/bind/dist/lib/dns/keydata.c patch external/bsd/bind/dist/lib/dns/keytable.c patch external/bsd/bind/dist/lib/dns/log.c patch external/bsd/bind/dist/lib/dns/lookup.c patch external/bsd/bind/dist/lib/dns/master.c patch external/bsd/bind/dist/lib/dns/masterdump.c patch external/bsd/bind/dist/lib/dns/message.c patch external/bsd/bind/dist/lib/dns/name.c patch external/bsd/bind/dist/lib/dns/ncache.c patch external/bsd/bind/dist/lib/dns/nsec.c patch external/bsd/bind/dist/lib/dns/nsec3.c patch external/bsd/bind/dist/lib/dns/openssl_link.c patch external/bsd/bind/dist/lib/dns/openssldh_link.c patch external/bsd/bind/dist/lib/dns/openssldsa_link.c patch external/bsd/bind/dist/lib/dns/opensslecdsa_link.c patch external/bsd/bind/dist/lib/dns/opensslgost_link.c patch external/bsd/bind/dist/lib/dns/opensslrsa_link.c patch external/bsd/bind/dist/lib/dns/peer.c patch external/bsd/bind/dist/lib/dns/portlist.c patch external/bsd/bind/dist/lib/dns/private.c patch external/bsd/bind/dist/lib/dns/rbt.c patch external/bsd/bind/dist/lib/dns/rbtdb.c patch external/bsd/bind/dist/lib/dns/rcode.c patch external/bsd/bind/dist/lib/dns/rdata.c patch external/bsd/bind/dist/lib/dns/rdataslab.c patch external/bsd/bind/dist/lib/dns/request.c patch external/bsd/bind/dist/lib/dns/resolver.c patch external/bsd/bind/dist/lib/dns/result.c patch external/bsd/bind/dist/lib/dns/rootns.c patch external/bsd/bind/dist/lib/dns/rpz.c patch external/bsd/bind/dist/lib/dns/rrl.c new external/bsd/bind/dist/lib/dns/sdb.c patch external/bsd/bind/dist/lib/dns/sdlz.c patch external/bsd/bind/dist/lib/dns/spnego.c patch external/bsd/bind/dist/lib/dns/spnego_asn1.c patch external/bsd/bind/dist/lib/dns/ssu.c patch external/bsd/bind/dist/lib/dns/ssu_external.c patch external/bsd/bind/dist/lib/dns/time.c patch external/bsd/bind/dist/lib/dns/tkey.c patch external/bsd/bind/dist/lib/dns/tsig.c patch external/bsd/bind/dist/lib/dns/ttl.c patch external/bsd/bind/dist/lib/dns/update.c patch external/bsd/bind/dist/lib/dns/validator.c patch external/bsd/bind/dist/lib/dns/view.c patch external/bsd/bind/dist/lib/dns/xfrin.c patch external/bsd/bind/dist/lib/dns/zone.c patch external/bsd/bind/dist/lib/dns/include/dns/Makefile.in patch external/bsd/bind/dist/lib/dns/include/dns/acache.h patch external/bsd/bind/dist/lib/dns/include/dns/adb.h patch external/bsd/bind/dist/lib/dns/include/dns/cache.h patch external/bsd/bind/dist/lib/dns/include/dns/client.h patch external/bsd/bind/dist/lib/dns/include/dns/db.h patch external/bsd/bind/dist/lib/dns/include/dns/dispatch.h patch external/bsd/bind/dist/lib/dns/include/dns/dns64.h patch external/bsd/bind/dist/lib/dns/include/dns/dnssec.h patch external/bsd/bind/dist/lib/dns/include/dns/log.h patch external/bsd/bind/dist/lib/dns/include/dns/master.h patch external/bsd/bind/dist/lib/dns/include/dns/masterdump.h patch external/bsd/bind/dist/lib/dns/include/dns/message.h patch external/bsd/bind/dist/lib/dns/include/dns/name.h patch external/bsd/bind/dist/lib/dns/include/dns/ncache.h patch external/bsd/bind/dist/lib/dns/include/dns/nsec.h patch external/bsd/bind/dist/lib/dns/include/dns/nsec3.h patch external/bsd/bind/dist/lib/dns/include/dns/rbt.h patch external/bsd/bind/dist/lib/dns/include/dns/rdata.h patch external/bsd/bind/dist/lib/dns/include/dns/rdataset.h patch external/bsd/bind/dist/lib/dns/include/dns/resolver.h patch external/bsd/bind/dist/lib/dns/include/dns/result.h patch external/bsd/bind/dist/lib/dns/include/dns/rpz.h patch external/bsd/bind/dist/lib/dns/include/dns/rrl.h new external/bsd/bind/dist/lib/dns/include/dns/types.h patch external/bsd/bind/dist/lib/dns/include/dns/validator.h patch external/bsd/bind/dist/lib/dns/include/dns/view.h patch external/bsd/bind/dist/lib/dns/include/dns/zone.h patch external/bsd/bind/dist/lib/dns/include/dst/dst.h patch external/bsd/bind/dist/lib/dns/include/dst/gssapi.h patch external/bsd/bind/dist/lib/dns/rdata/any_255/tsig_250.c patch external/bsd/bind/dist/lib/dns/rdata/ch_3/a_1.c patch external/bsd/bind/dist/lib/dns/rdata/generic/afsdb_18.c patch external/bsd/bind/dist/lib/dns/rdata/generic/caa_257.c new external/bsd/bind/dist/lib/dns/rdata/generic/caa_257.h new external/bsd/bind/dist/lib/dns/rdata/generic/cdnskey_60.c new external/bsd/bind/dist/lib/dns/rdata/generic/cdnskey_60.h new external/bsd/bind/dist/lib/dns/rdata/generic/cds_59.c new external/bsd/bind/dist/lib/dns/rdata/generic/cds_59.h new external/bsd/bind/dist/lib/dns/rdata/generic/dlv_32769.c patch external/bsd/bind/dist/lib/dns/rdata/generic/dnskey_48.c patch external/bsd/bind/dist/lib/dns/rdata/generic/eui48_108.c new external/bsd/bind/dist/lib/dns/rdata/generic/eui48_108.h new external/bsd/bind/dist/lib/dns/rdata/generic/eui64_109.c new external/bsd/bind/dist/lib/dns/rdata/generic/eui64_109.h new external/bsd/bind/dist/lib/dns/rdata/generic/gpos_27.c patch external/bsd/bind/dist/lib/dns/rdata/generic/hinfo_13.c patch external/bsd/bind/dist/lib/dns/rdata/generic/hip_55.c patch external/bsd/bind/dist/lib/dns/rdata/generic/ipseckey_45.c patch external/bsd/bind/dist/lib/dns/rdata/generic/isdn_20.c patch external/bsd/bind/dist/lib/dns/rdata/generic/key_25.c patch external/bsd/bind/dist/lib/dns/rdata/generic/keydata_65533.c patch external/bsd/bind/dist/lib/dns/rdata/generic/l32_105.c new external/bsd/bind/dist/lib/dns/rdata/generic/l32_105.h new external/bsd/bind/dist/lib/dns/rdata/generic/l64_106.c new external/bsd/bind/dist/lib/dns/rdata/generic/l64_106.h new external/bsd/bind/dist/lib/dns/rdata/generic/lp_107.c new external/bsd/bind/dist/lib/dns/rdata/generic/lp_107.h new external/bsd/bind/dist/lib/dns/rdata/generic/mx_15.c patch external/bsd/bind/dist/lib/dns/rdata/generic/naptr_35.c patch external/bsd/bind/dist/lib/dns/rdata/generic/nid_104.c new external/bsd/bind/dist/lib/dns/rdata/generic/nid_104.h new external/bsd/bind/dist/lib/dns/rdata/generic/nsec3_50.c patch external/bsd/bind/dist/lib/dns/rdata/generic/opt_41.c patch external/bsd/bind/dist/lib/dns/rdata/generic/rrsig_46.c patch external/bsd/bind/dist/lib/dns/rdata/generic/rt_21.c patch external/bsd/bind/dist/lib/dns/rdata/generic/soa_6.c patch external/bsd/bind/dist/lib/dns/rdata/generic/spf_99.c patch external/bsd/bind/dist/lib/dns/rdata/generic/sshfp_44.c patch external/bsd/bind/dist/lib/dns/rdata/generic/tkey_249.c patch external/bsd/bind/dist/lib/dns/rdata/generic/tlsa_52.c patch external/bsd/bind/dist/lib/dns/rdata/generic/tlsa_52.h patch external/bsd/bind/dist/lib/dns/rdata/generic/txt_16.c patch external/bsd/bind/dist/lib/dns/rdata/generic/uri_256.c patch external/bsd/bind/dist/lib/dns/rdata/generic/x25_19.c patch external/bsd/bind/dist/lib/dns/rdata/hs_4/a_1.c patch external/bsd/bind/dist/lib/dns/rdata/in_1/a6_38.c patch external/bsd/bind/dist/lib/dns/rdata/in_1/a_1.c patch external/bsd/bind/dist/lib/dns/rdata/in_1/aaaa_28.c patch external/bsd/bind/dist/lib/dns/rdata/in_1/apl_42.c patch external/bsd/bind/dist/lib/dns/rdata/in_1/nsap_22.c patch external/bsd/bind/dist/lib/dns/rdata/in_1/wks_11.c patch external/bsd/bind/dist/lib/dns/tests/Makefile.in patch external/bsd/bind/dist/lib/dns/tests/db_test.c new external/bsd/bind/dist/lib/dns/tests/dbiterator_test.c patch external/bsd/bind/dist/lib/dns/tests/dbversion_test.c patch external/bsd/bind/dist/lib/dns/tests/dispatch_test.c new external/bsd/bind/dist/lib/dns/tests/dnstest.c patch external/bsd/bind/dist/lib/dns/tests/master_test.c patch external/bsd/bind/dist/lib/dns/tests/nsec3_test.c patch external/bsd/bind/dist/lib/dns/tests/private_test.c patch external/bsd/bind/dist/lib/dns/tests/rdata_test.c patch external/bsd/bind/dist/lib/dns/tests/zonemgr_test.c patch external/bsd/bind/dist/lib/dns/tests/testdata/master/master17.data new external/bsd/bind/dist/lib/dns/win32/gen.dsp delete external/bsd/bind/dist/lib/dns/win32/gen.mak delete external/bsd/bind/dist/lib/dns/win32/libdns.def delete external/bsd/bind/dist/lib/dns/win32/libdns.dsp delete external/bsd/bind/dist/lib/dns/win32/libdns.mak delete external/bsd/bind/dist/lib/export/dns/Makefile.in patch external/bsd/bind/dist/lib/export/irs/Makefile.in patch external/bsd/bind/dist/lib/export/isc/Makefile.in patch external/bsd/bind/dist/lib/export/isc/include/isc/Makefile.in patch external/bsd/bind/dist/lib/export/isc/nls/Makefile.in patch external/bsd/bind/dist/lib/export/isc/nothreads/Makefile.in patch external/bsd/bind/dist/lib/export/isc/pthreads/Makefile.in patch external/bsd/bind/dist/lib/export/isc/unix/Makefile.in patch external/bsd/bind/dist/lib/export/isccfg/Makefile.in patch external/bsd/bind/dist/lib/export/samples/Makefile.in patch external/bsd/bind/dist/lib/export/samples/nsprobe.c patch external/bsd/bind/dist/lib/export/samples/sample-async.c patch external/bsd/bind/dist/lib/export/samples/sample-gai.c patch external/bsd/bind/dist/lib/export/samples/sample-request.c patch external/bsd/bind/dist/lib/export/samples/sample-update.c patch external/bsd/bind/dist/lib/export/samples/sample.c patch external/bsd/bind/dist/lib/irs/Makefile.in patch external/bsd/bind/dist/lib/irs/api patch external/bsd/bind/dist/lib/irs/context.c patch external/bsd/bind/dist/lib/irs/dnsconf.c patch external/bsd/bind/dist/lib/irs/getaddrinfo.c patch external/bsd/bind/dist/lib/irs/getnameinfo.c patch external/bsd/bind/dist/lib/irs/resconf.c patch external/bsd/bind/dist/lib/irs/include/irs/Makefile.in patch external/bsd/bind/dist/lib/irs/include/irs/resconf.h patch external/bsd/bind/dist/lib/isc/Makefile.in patch external/bsd/bind/dist/lib/isc/api patch external/bsd/bind/dist/lib/isc/app_api.c patch external/bsd/bind/dist/lib/isc/backtrace.c patch external/bsd/bind/dist/lib/isc/base32.c patch external/bsd/bind/dist/lib/isc/base64.c patch external/bsd/bind/dist/lib/isc/bind9.c new external/bsd/bind/dist/lib/isc/buffer.c patch external/bsd/bind/dist/lib/isc/commandline.c patch external/bsd/bind/dist/lib/isc/counter.c new external/bsd/bind/dist/lib/isc/event.c patch external/bsd/bind/dist/lib/isc/hash.c patch external/bsd/bind/dist/lib/isc/heap.c patch external/bsd/bind/dist/lib/isc/hex.c patch external/bsd/bind/dist/lib/isc/hmacmd5.c patch external/bsd/bind/dist/lib/isc/hmacsha.c patch external/bsd/bind/dist/lib/isc/httpd.c patch external/bsd/bind/dist/lib/isc/inet_aton.c patch external/bsd/bind/dist/lib/isc/inet_pton.c patch external/bsd/bind/dist/lib/isc/lex.c patch external/bsd/bind/dist/lib/isc/lib.c patch external/bsd/bind/dist/lib/isc/log.c patch external/bsd/bind/dist/lib/isc/md5.c patch external/bsd/bind/dist/lib/isc/mem.c patch external/bsd/bind/dist/lib/isc/mem_api.c patch external/bsd/bind/dist/lib/isc/netaddr.c patch external/bsd/bind/dist/lib/isc/parseint.c patch external/bsd/bind/dist/lib/isc/pool.c new external/bsd/bind/dist/lib/isc/print.c patch external/bsd/bind/dist/lib/isc/radix.c patch external/bsd/bind/dist/lib/isc/random.c patch external/bsd/bind/dist/lib/isc/ratelimiter.c patch external/bsd/bind/dist/lib/isc/regex.c new external/bsd/bind/dist/lib/isc/result.c patch external/bsd/bind/dist/lib/isc/safe.c new external/bsd/bind/dist/lib/isc/sha1.c patch external/bsd/bind/dist/lib/isc/sha2.c patch external/bsd/bind/dist/lib/isc/sockaddr.c patch external/bsd/bind/dist/lib/isc/socket_api.c patch external/bsd/bind/dist/lib/isc/stats.c patch external/bsd/bind/dist/lib/isc/string.c patch external/bsd/bind/dist/lib/isc/strtoul.c patch external/bsd/bind/dist/lib/isc/symtab.c patch external/bsd/bind/dist/lib/isc/task.c patch external/bsd/bind/dist/lib/isc/task_api.c patch external/bsd/bind/dist/lib/isc/taskpool.c patch external/bsd/bind/dist/lib/isc/timer.c patch external/bsd/bind/dist/lib/isc/timer_api.c patch external/bsd/bind/dist/lib/isc/tm.c new external/bsd/bind/dist/lib/isc/include/isc/Makefile.in patch external/bsd/bind/dist/lib/isc/include/isc/app.h patch external/bsd/bind/dist/lib/isc/include/isc/base32.h patch external/bsd/bind/dist/lib/isc/include/isc/bind9.h patch external/bsd/bind/dist/lib/isc/include/isc/buffer.h patch external/bsd/bind/dist/lib/isc/include/isc/counter.h new external/bsd/bind/dist/lib/isc/include/isc/event.h patch external/bsd/bind/dist/lib/isc/include/isc/file.h patch external/bsd/bind/dist/lib/isc/include/isc/hash.h patch external/bsd/bind/dist/lib/isc/include/isc/httpd.h patch external/bsd/bind/dist/lib/isc/include/isc/iterated_hash.h patch external/bsd/bind/dist/lib/isc/include/isc/list.h patch external/bsd/bind/dist/lib/isc/include/isc/mem.h patch external/bsd/bind/dist/lib/isc/include/isc/namespace.h patch external/bsd/bind/dist/lib/isc/include/isc/platform.h.in patch external/bsd/bind/dist/lib/isc/include/isc/pool.h new external/bsd/bind/dist/lib/isc/include/isc/print.h patch external/bsd/bind/dist/lib/isc/include/isc/queue.h patch external/bsd/bind/dist/lib/isc/include/isc/radix.h patch external/bsd/bind/dist/lib/isc/include/isc/regex.h new external/bsd/bind/dist/lib/isc/include/isc/region.h patch external/bsd/bind/dist/lib/isc/include/isc/result.h patch external/bsd/bind/dist/lib/isc/include/isc/safe.h new external/bsd/bind/dist/lib/isc/include/isc/sockaddr.h patch external/bsd/bind/dist/lib/isc/include/isc/socket.h patch external/bsd/bind/dist/lib/isc/include/isc/stdio.h patch external/bsd/bind/dist/lib/isc/include/isc/string.h patch external/bsd/bind/dist/lib/isc/include/isc/task.h patch external/bsd/bind/dist/lib/isc/include/isc/timer.h patch external/bsd/bind/dist/lib/isc/include/isc/tm.h new external/bsd/bind/dist/lib/isc/include/isc/types.h patch external/bsd/bind/dist/lib/isc/nothreads/Makefile.in patch external/bsd/bind/dist/lib/isc/nothreads/include/isc/thread.h patch external/bsd/bind/dist/lib/isc/pthreads/thread.c patch external/bsd/bind/dist/lib/isc/pthreads/include/isc/thread.h patch external/bsd/bind/dist/lib/isc/sparc64/include/isc/atomic.h patch external/bsd/bind/dist/lib/isc/tests/Makefile.in patch external/bsd/bind/dist/lib/isc/tests/counter_test.c new external/bsd/bind/dist/lib/isc/tests/hash_test.c patch external/bsd/bind/dist/lib/isc/tests/isctest.c patch external/bsd/bind/dist/lib/isc/tests/isctest.h patch external/bsd/bind/dist/lib/isc/tests/lex_test.c new external/bsd/bind/dist/lib/isc/tests/parse_test.c new external/bsd/bind/dist/lib/isc/tests/pool_test.c new external/bsd/bind/dist/lib/isc/tests/print_test.c new external/bsd/bind/dist/lib/isc/tests/regex_test.c new external/bsd/bind/dist/lib/isc/tests/safe_test.c new external/bsd/bind/dist/lib/isc/tests/sockaddr_test.c new external/bsd/bind/dist/lib/isc/tests/symtab_test.c patch external/bsd/bind/dist/lib/isc/tests/time_test.c new external/bsd/bind/dist/lib/isc/unix/app.c patch external/bsd/bind/dist/lib/isc/unix/entropy.c patch external/bsd/bind/dist/lib/isc/unix/file.c patch external/bsd/bind/dist/lib/isc/unix/ifiter_getifaddrs.c patch external/bsd/bind/dist/lib/isc/unix/ifiter_ioctl.c patch external/bsd/bind/dist/lib/isc/unix/ifiter_sysctl.c patch external/bsd/bind/dist/lib/isc/unix/interfaceiter.c patch external/bsd/bind/dist/lib/isc/unix/net.c patch external/bsd/bind/dist/lib/isc/unix/socket.c patch external/bsd/bind/dist/lib/isc/unix/stdio.c patch external/bsd/bind/dist/lib/isc/unix/time.c patch external/bsd/bind/dist/lib/isc/unix/include/isc/Makefile.in patch external/bsd/bind/dist/lib/isc/unix/include/isc/net.h patch external/bsd/bind/dist/lib/isc/unix/include/isc/stat.h patch external/bsd/bind/dist/lib/isc/unix/include/isc/time.h patch external/bsd/bind/dist/lib/isc/win32/libisc.def delete external/bsd/bind/dist/lib/isc/win32/libisc.dsp delete external/bsd/bind/dist/lib/isc/win32/libisc.mak delete external/bsd/bind/dist/lib/isc/win32/include/isc/platform.h delete external/bsd/bind/dist/lib/isccc/Makefile.in patch external/bsd/bind/dist/lib/isccc/api patch external/bsd/bind/dist/lib/isccc/base64.c patch external/bsd/bind/dist/lib/isccc/cc.c patch external/bsd/bind/dist/lib/isccc/sexpr.c patch external/bsd/bind/dist/lib/isccc/include/isccc/util.h patch external/bsd/bind/dist/lib/isccc/win32/libisccc.dsp delete external/bsd/bind/dist/lib/isccc/win32/libisccc.mak delete external/bsd/bind/dist/lib/isccfg/Makefile.in patch external/bsd/bind/dist/lib/isccfg/aclconf.c patch external/bsd/bind/dist/lib/isccfg/api patch external/bsd/bind/dist/lib/isccfg/namedconf.c patch external/bsd/bind/dist/lib/isccfg/parser.c patch external/bsd/bind/dist/lib/isccfg/include/isccfg/Makefile.in patch external/bsd/bind/dist/lib/isccfg/include/isccfg/aclconf.h patch external/bsd/bind/dist/lib/isccfg/include/isccfg/cfg.h patch external/bsd/bind/dist/lib/isccfg/include/isccfg/grammar.h patch external/bsd/bind/dist/lib/isccfg/win32/libisccfg.dsp delete external/bsd/bind/dist/lib/isccfg/win32/libisccfg.mak delete external/bsd/bind/dist/lib/lwres/Atffile new external/bsd/bind/dist/lib/lwres/Makefile.in patch external/bsd/bind/dist/lib/lwres/api patch external/bsd/bind/dist/lib/lwres/compat.c new external/bsd/bind/dist/lib/lwres/context.c patch external/bsd/bind/dist/lib/lwres/gai_strerror.c patch external/bsd/bind/dist/lib/lwres/getaddrinfo.c patch external/bsd/bind/dist/lib/lwres/gethost.c patch external/bsd/bind/dist/lib/lwres/getipnode.c patch external/bsd/bind/dist/lib/lwres/getnameinfo.c patch external/bsd/bind/dist/lib/lwres/getrrset.c patch external/bsd/bind/dist/lib/lwres/herror.c patch external/bsd/bind/dist/lib/lwres/lwbuffer.c patch external/bsd/bind/dist/lib/lwres/lwconfig.c patch external/bsd/bind/dist/lib/lwres/lwinetaton.c patch external/bsd/bind/dist/lib/lwres/lwinetpton.c patch external/bsd/bind/dist/lib/lwres/lwres_gabn.c patch external/bsd/bind/dist/lib/lwres/lwres_gnba.c patch external/bsd/bind/dist/lib/lwres/lwres_grbn.c patch external/bsd/bind/dist/lib/lwres/lwres_noop.c patch external/bsd/bind/dist/lib/lwres/lwresutil.c patch external/bsd/bind/dist/lib/lwres/print.c patch external/bsd/bind/dist/lib/lwres/strtoul.c delete external/bsd/bind/dist/lib/lwres/include/lwres/Makefile.in patch external/bsd/bind/dist/lib/lwres/include/lwres/lwres.h patch external/bsd/bind/dist/lib/lwres/include/lwres/netdb.h.in patch external/bsd/bind/dist/lib/lwres/include/lwres/platform.h.in patch external/bsd/bind/dist/lib/lwres/include/lwres/stdlib.h patch external/bsd/bind/dist/lib/lwres/include/lwres/string.h new external/bsd/bind/dist/lib/lwres/man/lwres.3 patch external/bsd/bind/dist/lib/lwres/man/lwres.docbook patch external/bsd/bind/dist/lib/lwres/man/lwres.html patch external/bsd/bind/dist/lib/lwres/man/lwres_buffer.3 patch external/bsd/bind/dist/lib/lwres/man/lwres_buffer.docbook patch external/bsd/bind/dist/lib/lwres/man/lwres_buffer.html patch external/bsd/bind/dist/lib/lwres/man/lwres_config.3 patch external/bsd/bind/dist/lib/lwres/man/lwres_config.docbook patch external/bsd/bind/dist/lib/lwres/man/lwres_config.html patch external/bsd/bind/dist/lib/lwres/man/lwres_context.3 patch external/bsd/bind/dist/lib/lwres/man/lwres_context.docbook patch external/bsd/bind/dist/lib/lwres/man/lwres_context.html patch external/bsd/bind/dist/lib/lwres/man/lwres_gabn.3 patch external/bsd/bind/dist/lib/lwres/man/lwres_gabn.docbook patch external/bsd/bind/dist/lib/lwres/man/lwres_gabn.html patch external/bsd/bind/dist/lib/lwres/man/lwres_gai_strerror.3 patch external/bsd/bind/dist/lib/lwres/man/lwres_gai_strerror.docbook patch external/bsd/bind/dist/lib/lwres/man/lwres_gai_strerror.html patch external/bsd/bind/dist/lib/lwres/man/lwres_getaddrinfo.3 patch external/bsd/bind/dist/lib/lwres/man/lwres_getaddrinfo.docbook patch external/bsd/bind/dist/lib/lwres/man/lwres_getaddrinfo.html patch external/bsd/bind/dist/lib/lwres/man/lwres_gethostent.3 patch external/bsd/bind/dist/lib/lwres/man/lwres_gethostent.docbook patch external/bsd/bind/dist/lib/lwres/man/lwres_gethostent.html patch external/bsd/bind/dist/lib/lwres/man/lwres_getipnode.3 patch external/bsd/bind/dist/lib/lwres/man/lwres_getipnode.docbook patch external/bsd/bind/dist/lib/lwres/man/lwres_getipnode.html patch external/bsd/bind/dist/lib/lwres/man/lwres_getnameinfo.3 patch external/bsd/bind/dist/lib/lwres/man/lwres_getnameinfo.docbook patch external/bsd/bind/dist/lib/lwres/man/lwres_getnameinfo.html patch external/bsd/bind/dist/lib/lwres/man/lwres_getrrsetbyname.3 patch external/bsd/bind/dist/lib/lwres/man/lwres_getrrsetbyname.docbook patch external/bsd/bind/dist/lib/lwres/man/lwres_getrrsetbyname.html patch external/bsd/bind/dist/lib/lwres/man/lwres_gnba.3 patch external/bsd/bind/dist/lib/lwres/man/lwres_gnba.docbook patch external/bsd/bind/dist/lib/lwres/man/lwres_gnba.html patch external/bsd/bind/dist/lib/lwres/man/lwres_hstrerror.3 patch external/bsd/bind/dist/lib/lwres/man/lwres_hstrerror.docbook patch external/bsd/bind/dist/lib/lwres/man/lwres_hstrerror.html patch external/bsd/bind/dist/lib/lwres/man/lwres_inetntop.3 patch external/bsd/bind/dist/lib/lwres/man/lwres_inetntop.docbook patch external/bsd/bind/dist/lib/lwres/man/lwres_inetntop.html patch external/bsd/bind/dist/lib/lwres/man/lwres_noop.3 patch external/bsd/bind/dist/lib/lwres/man/lwres_noop.docbook patch external/bsd/bind/dist/lib/lwres/man/lwres_noop.html patch external/bsd/bind/dist/lib/lwres/man/lwres_packet.3 patch external/bsd/bind/dist/lib/lwres/man/lwres_packet.docbook patch external/bsd/bind/dist/lib/lwres/man/lwres_packet.html patch external/bsd/bind/dist/lib/lwres/man/lwres_resutil.3 patch external/bsd/bind/dist/lib/lwres/man/lwres_resutil.docbook patch external/bsd/bind/dist/lib/lwres/man/lwres_resutil.html patch external/bsd/bind/dist/lib/lwres/tests/Atffile new external/bsd/bind/dist/lib/lwres/tests/Makefile.in new external/bsd/bind/dist/lib/lwres/tests/config_test.c new external/bsd/bind/dist/lib/lwres/tests/testdata/link-local.conf new external/bsd/bind/dist/lib/lwres/win32/liblwres.dsp delete external/bsd/bind/dist/lib/lwres/win32/liblwres.mak delete external/bsd/bind/dist/lib/tests/t_api.c patch external/bsd/bind/dist/lib/tests/include/tests/t_api.h patch external/bsd/bind/dist/lib/win32/bindevt/bindevt.dsp delete external/bsd/bind/dist/lib/win32/bindevt/bindevt.mak delete external/bsd/bind/dist/make/mkdep.in patch external/bsd/bind/dist/make/rules.in patch external/bsd/bind/dist/unit/README patch external/bsd/bind/dist/unit/unittest.sh.in patch external/bsd/bind/dist/unit/atf-src/AUTHORS patch external/bsd/bind/dist/unit/atf-src/Atffile patch external/bsd/bind/dist/unit/atf-src/COPYING patch external/bsd/bind/dist/unit/atf-src/INSTALL patch external/bsd/bind/dist/unit/atf-src/Kyuafile new external/bsd/bind/dist/unit/atf-src/Makefile.am patch external/bsd/bind/dist/unit/atf-src/Makefile.in patch external/bsd/bind/dist/unit/atf-src/NEWS patch external/bsd/bind/dist/unit/atf-src/TODO new external/bsd/bind/dist/unit/atf-src/aclocal.m4 patch external/bsd/bind/dist/unit/atf-src/atf-c++.hpp patch external/bsd/bind/dist/unit/atf-src/atf-c.h patch external/bsd/bind/dist/unit/atf-src/configure patch external/bsd/bind/dist/unit/atf-src/configure.ac patch external/bsd/bind/dist/unit/atf-src/admin/Makefile.am.inc patch external/bsd/bind/dist/unit/atf-src/admin/check-install.sh delete external/bsd/bind/dist/unit/atf-src/admin/check-style-c.awk patch external/bsd/bind/dist/unit/atf-src/admin/check-style-common.awk patch external/bsd/bind/dist/unit/atf-src/admin/check-style-cpp.awk patch external/bsd/bind/dist/unit/atf-src/admin/check-style-man.awk patch external/bsd/bind/dist/unit/atf-src/admin/check-style-shell.awk patch external/bsd/bind/dist/unit/atf-src/admin/check-style.sh patch external/bsd/bind/dist/unit/atf-src/admin/compile patch external/bsd/bind/dist/unit/atf-src/admin/depcomp patch external/bsd/bind/dist/unit/atf-src/admin/install-sh patch external/bsd/bind/dist/unit/atf-src/admin/ltmain.sh patch external/bsd/bind/dist/unit/atf-src/admin/missing patch external/bsd/bind/dist/unit/atf-src/atf-c/Atffile patch external/bsd/bind/dist/unit/atf-src/atf-c/Kyuafile new external/bsd/bind/dist/unit/atf-src/atf-c/Makefile.am.inc patch external/bsd/bind/dist/unit/atf-src/atf-c/atf-c-api.3 patch external/bsd/bind/dist/unit/atf-src/atf-c/atf-c.m4 new external/bsd/bind/dist/unit/atf-src/atf-c/atf-common.m4 new external/bsd/bind/dist/unit/atf-src/atf-c/atf_c_test.c patch external/bsd/bind/dist/unit/atf-src/atf-c/check.c patch external/bsd/bind/dist/unit/atf-src/atf-c/check.h patch external/bsd/bind/dist/unit/atf-src/atf-c/check_test.c patch external/bsd/bind/dist/unit/atf-src/atf-c/config.c patch external/bsd/bind/dist/unit/atf-src/atf-c/config_test.c patch external/bsd/bind/dist/unit/atf-src/atf-c/defs.h.in patch external/bsd/bind/dist/unit/atf-src/atf-c/error.c patch external/bsd/bind/dist/unit/atf-src/atf-c/error.h patch external/bsd/bind/dist/unit/atf-src/atf-c/error_test.c patch external/bsd/bind/dist/unit/atf-src/atf-c/macros.h patch external/bsd/bind/dist/unit/atf-src/atf-c/macros_h_test.c patch external/bsd/bind/dist/unit/atf-src/atf-c/macros_test.c patch external/bsd/bind/dist/unit/atf-src/atf-c/pkg_config_test.sh patch external/bsd/bind/dist/unit/atf-src/atf-c/tc.c patch external/bsd/bind/dist/unit/atf-src/atf-c/tc.h patch external/bsd/bind/dist/unit/atf-src/atf-c/tc_test.c patch external/bsd/bind/dist/unit/atf-src/atf-c/tp.c patch external/bsd/bind/dist/unit/atf-src/atf-c/tp.h patch external/bsd/bind/dist/unit/atf-src/atf-c/tp_test.c patch external/bsd/bind/dist/unit/atf-src/atf-c/unused_test.c new external/bsd/bind/dist/unit/atf-src/atf-c/utils.c patch external/bsd/bind/dist/unit/atf-src/atf-c/utils.h patch external/bsd/bind/dist/unit/atf-src/atf-c/utils_test.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/Atffile patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/Kyuafile new external/bsd/bind/dist/unit/atf-src/atf-c/detail/Makefile.am.inc patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/dynstr.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/dynstr.h patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/dynstr_test.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/env.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/env_test.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/fs.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/fs.h patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/fs_test.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/list.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/list.h patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/list_test.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/map.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/map.h patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/map_test.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/process.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/process.h patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/process_helpers.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/process_test.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/sanity.h patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/sanity_test.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/test_helpers.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/test_helpers.h patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/test_helpers_test.c delete external/bsd/bind/dist/unit/atf-src/atf-c/detail/text.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/text.h patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/text_test.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/tp_main.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/user.c patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/user.h patch external/bsd/bind/dist/unit/atf-src/atf-c/detail/user_test.c patch external/bsd/bind/dist/unit/atf-src/atf-c++/Kyuafile new external/bsd/bind/dist/unit/atf-src/atf-c++/Makefile.am.inc patch external/bsd/bind/dist/unit/atf-src/atf-c++/atf-c++-api.3 patch external/bsd/bind/dist/unit/atf-src/atf-c++/atf-c++.m4 new external/bsd/bind/dist/unit/atf-src/atf-c++/check.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/check.hpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/check_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/config.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/config.hpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/config_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/macros.hpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/macros_hpp_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/macros_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/noncopyable.hpp new external/bsd/bind/dist/unit/atf-src/atf-c++/pkg_config_test.sh patch external/bsd/bind/dist/unit/atf-src/atf-c++/tests.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/tests.hpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/tests_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/unused_test.cpp new external/bsd/bind/dist/unit/atf-src/atf-c++/utils.cpp new external/bsd/bind/dist/unit/atf-src/atf-c++/utils.hpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/utils_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/Atffile patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/Kyuafile new external/bsd/bind/dist/unit/atf-src/atf-c++/detail/Makefile.am.inc patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/application.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/application.hpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/application_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/auto_array.hpp new external/bsd/bind/dist/unit/atf-src/atf-c++/detail/auto_array_test.cpp new external/bsd/bind/dist/unit/atf-src/atf-c++/detail/env.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/env.hpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/env_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/exceptions.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/exceptions.hpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/exceptions_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/expand.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/expand.hpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/expand_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/fs.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/fs.hpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/fs_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/parser.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/parser.hpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/parser_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/process.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/process.hpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/process_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/sanity.hpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/test_helpers.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/test_helpers.hpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/text.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/text.hpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/text_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/ui.cpp patch external/bsd/bind/dist/unit/atf-src/atf-c++/detail/ui.hpp patch external/bsd/bind/dist/unit/atf-src/atf-config/Kyuafile new external/bsd/bind/dist/unit/atf-src/atf-config/Makefile.am.inc patch external/bsd/bind/dist/unit/atf-src/atf-config/atf-config.1 patch external/bsd/bind/dist/unit/atf-src/atf-config/atf-config.cpp patch external/bsd/bind/dist/unit/atf-src/atf-config/integration_test.sh patch external/bsd/bind/dist/unit/atf-src/atf-report/Kyuafile new external/bsd/bind/dist/unit/atf-src/atf-report/Makefile.am.inc patch external/bsd/bind/dist/unit/atf-src/atf-report/atf-report.1 patch external/bsd/bind/dist/unit/atf-src/atf-report/atf-report.cpp patch external/bsd/bind/dist/unit/atf-src/atf-report/fail_helper.cpp patch external/bsd/bind/dist/unit/atf-src/atf-report/integration_test.sh patch external/bsd/bind/dist/unit/atf-src/atf-report/misc_helpers.cpp patch external/bsd/bind/dist/unit/atf-src/atf-report/pass_helper.cpp patch external/bsd/bind/dist/unit/atf-src/atf-report/reader.cpp patch external/bsd/bind/dist/unit/atf-src/atf-report/reader.hpp patch external/bsd/bind/dist/unit/atf-src/atf-report/reader_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-report/tests-results.css patch external/bsd/bind/dist/unit/atf-src/atf-report/tests-results.dtd patch external/bsd/bind/dist/unit/atf-src/atf-report/tests-results.xsl patch external/bsd/bind/dist/unit/atf-src/atf-run/Kyuafile new external/bsd/bind/dist/unit/atf-src/atf-run/Makefile.am.inc patch external/bsd/bind/dist/unit/atf-src/atf-run/atf-run.1 patch external/bsd/bind/dist/unit/atf-src/atf-run/atf-run.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/atffile.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/atffile.hpp patch external/bsd/bind/dist/unit/atf-src/atf-run/atffile_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/config.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/config_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/fs.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/fs.hpp patch external/bsd/bind/dist/unit/atf-src/atf-run/fs_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/integration_test.sh patch external/bsd/bind/dist/unit/atf-src/atf-run/io.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/io.hpp patch external/bsd/bind/dist/unit/atf-src/atf-run/io_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/misc_helpers.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/pass_helper.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/requirements.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/requirements_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/several_tcs_helper.c patch external/bsd/bind/dist/unit/atf-src/atf-run/signals.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/signals.hpp patch external/bsd/bind/dist/unit/atf-src/atf-run/signals_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/test-program.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/test_program_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/timer.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/timer.hpp patch external/bsd/bind/dist/unit/atf-src/atf-run/user.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/user.hpp patch external/bsd/bind/dist/unit/atf-src/atf-run/user_test.cpp patch external/bsd/bind/dist/unit/atf-src/atf-run/zero_tcs_helper.c patch external/bsd/bind/dist/unit/atf-src/atf-run/share/atf-run.hooks patch external/bsd/bind/dist/unit/atf-src/atf-sh/Kyuafile new external/bsd/bind/dist/unit/atf-src/atf-sh/Makefile.am.inc patch external/bsd/bind/dist/unit/atf-src/atf-sh/atf-check.1 patch external/bsd/bind/dist/unit/atf-src/atf-sh/atf-check.cpp patch external/bsd/bind/dist/unit/atf-src/atf-sh/atf-check_test.sh patch external/bsd/bind/dist/unit/atf-src/atf-sh/atf-sh-api.3 patch external/bsd/bind/dist/unit/atf-src/atf-sh/atf-sh.cpp patch external/bsd/bind/dist/unit/atf-src/atf-sh/atf-sh.m4 new external/bsd/bind/dist/unit/atf-src/atf-sh/atf-sh.pc.in new external/bsd/bind/dist/unit/atf-src/atf-sh/atf_check_test.sh patch external/bsd/bind/dist/unit/atf-src/atf-sh/config_test.sh patch external/bsd/bind/dist/unit/atf-src/atf-sh/libatf-sh.subr patch external/bsd/bind/dist/unit/atf-src/atf-sh/misc_helpers.sh patch external/bsd/bind/dist/unit/atf-src/atf-sh/normalize_test.sh patch external/bsd/bind/dist/unit/atf-src/atf-sh/tc_test.sh patch external/bsd/bind/dist/unit/atf-src/atf-sh/tp_test.sh patch external/bsd/bind/dist/unit/atf-src/atf-version/Makefile.am.inc patch external/bsd/bind/dist/unit/atf-src/atf-version/atf-version.1 patch external/bsd/bind/dist/unit/atf-src/atf-version/atf-version.cpp patch external/bsd/bind/dist/unit/atf-src/atf-version/generate-revision.sh patch external/bsd/bind/dist/unit/atf-src/bootstrap/Makefile.am.inc patch external/bsd/bind/dist/unit/atf-src/bootstrap/h_app_empty.cpp patch external/bsd/bind/dist/unit/atf-src/bootstrap/h_app_opts_args.cpp patch external/bsd/bind/dist/unit/atf-src/bootstrap/h_tp_atf_check_sh.sh patch external/bsd/bind/dist/unit/atf-src/bootstrap/h_tp_basic_cpp.cpp patch external/bsd/bind/dist/unit/atf-src/bootstrap/h_tp_basic_sh.sh patch external/bsd/bind/dist/unit/atf-src/bootstrap/package.m4 patch external/bsd/bind/dist/unit/atf-src/bootstrap/t_application_help.at patch external/bsd/bind/dist/unit/atf-src/bootstrap/t_application_opts_args.atpatch external/bsd/bind/dist/unit/atf-src/bootstrap/t_atf_config.at patch external/bsd/bind/dist/unit/atf-src/bootstrap/t_atf_run.at patch external/bsd/bind/dist/unit/atf-src/bootstrap/t_subr_atf_check.at patch external/bsd/bind/dist/unit/atf-src/bootstrap/t_test_program_compare.at patch external/bsd/bind/dist/unit/atf-src/bootstrap/t_test_program_filter.at patch external/bsd/bind/dist/unit/atf-src/bootstrap/t_test_program_list.at patch external/bsd/bind/dist/unit/atf-src/bootstrap/t_test_program_run.at patch external/bsd/bind/dist/unit/atf-src/bootstrap/testsuite patch external/bsd/bind/dist/unit/atf-src/bootstrap/testsuite.at patch external/bsd/bind/dist/unit/atf-src/doc/Makefile.am.inc patch external/bsd/bind/dist/unit/atf-src/doc/atf-formats.5 patch external/bsd/bind/dist/unit/atf-src/doc/atf-test-case.4 patch external/bsd/bind/dist/unit/atf-src/doc/atf-test-program.1 patch external/bsd/bind/dist/unit/atf-src/doc/atf.7.in patch external/bsd/bind/dist/unit/atf-src/m4/compiler-flags.m4 patch external/bsd/bind/dist/unit/atf-src/m4/cxx-std-funcs.m4 patch external/bsd/bind/dist/unit/atf-src/m4/developer-mode.m4 patch external/bsd/bind/dist/unit/atf-src/m4/module-application.m4 patch external/bsd/bind/dist/unit/atf-src/m4/module-defs.m4 patch external/bsd/bind/dist/unit/atf-src/m4/module-env.m4 patch external/bsd/bind/dist/unit/atf-src/m4/module-fs.m4 patch external/bsd/bind/dist/unit/atf-src/m4/module-sanity.m4 patch external/bsd/bind/dist/unit/atf-src/m4/module-signals.m4 patch external/bsd/bind/dist/unit/atf-src/test-programs/Atffile patch external/bsd/bind/dist/unit/atf-src/test-programs/Kyuafile new external/bsd/bind/dist/unit/atf-src/test-programs/Makefile.am.inc patch external/bsd/bind/dist/unit/atf-src/test-programs/c_helpers.c patch external/bsd/bind/dist/unit/atf-src/test-programs/config_test.sh patch external/bsd/bind/dist/unit/atf-src/test-programs/cpp_helpers.cpp patch external/bsd/bind/dist/unit/atf-src/test-programs/expect_test.sh patch external/bsd/bind/dist/unit/atf-src/test-programs/fork_test.sh delete external/bsd/bind/dist/unit/atf-src/test-programs/meta_data_test.sh patch external/bsd/bind/dist/unit/atf-src/test-programs/result_test.sh patch external/bsd/bind/dist/unit/atf-src/test-programs/sh_helpers.sh patch external/bsd/bind/dist/unit/atf-src/test-programs/srcdir_test.sh patch external/bsd/bind/dist/win32utils/BINDBuild.dsw delete external/bsd/bind/dist/win32utils/BuildAll.bat delete external/bsd/bind/dist/win32utils/BuildPost.bat delete external/bsd/bind/dist/win32utils/BuildSetup.bat delete external/bsd/bind/dist/win32utils/SetupLibs.bat delete external/bsd/bind/dist/win32utils/dnsheadergen.bat delete external/bsd/bind/dist/win32utils/makedefs.pl delete external/bsd/bind/dist/win32utils/makeversion.pl delete external/bsd/bind/dist/win32utils/setpk11provider.pl delete external/bsd/bind/dist/win32utils/updatelibxml2.pl delete external/bsd/bind/dist/win32utils/updateopenssl.pl delete external/bsd/bind/dist/win32utils/win32-build.txt delete external/bsd/bind/include/config.h patch external/bsd/bind/include/dns/code.h patch external/bsd/bind/include/dns/enumclass.h patch external/bsd/bind/include/dns/enumtype.h patch external/bsd/bind/include/dns/rdatastruct.h patch external/bsd/bind/include/irs/netdb.h new external/bsd/bind/include/irs/platform.h new external/bsd/bind/include/isc/platform.h patch external/bsd/bind/include/lwres/netdb.h patch external/bsd/bind/include/lwres/platform.h patch external/bsd/bind/lib/Makefile patch external/bsd/bind/lib/libbind9/Makefile patch external/bsd/bind/lib/libbind9/shlib_version patch external/bsd/bind/lib/libdns/Makefile patch external/bsd/bind/lib/libdns/shlib_version patch external/bsd/bind/lib/libirs/Makefile new external/bsd/bind/lib/libirs/shlib_version new external/bsd/bind/lib/libisc/Makefile patch external/bsd/bind/lib/libisc/shlib_version patch external/bsd/bind/lib/libisccc/Makefile patch external/bsd/bind/lib/libisccc/shlib_version patch external/bsd/bind/lib/libisccfg/Makefile patch external/bsd/bind/lib/libisccfg/shlib_version patch external/bsd/bind/lib/liblwres/shlib_version patch Update bind to 9.9.6-P1. CVE-2014-8500.

/*
 * Copyright (C) 2013, 2014  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.
 */

/*
 * TCP DNS perf tool
 *
 * main parameters are -r<rate> and <server>
 * standard options are 4|6 (IPv4|IPv6), rate computations, terminaisons,
 * EDNS0, NOERROR|NXDOMAIN, template (for your own query), diags,
 * alternate server port and UDP version.
 *
 * To help to crush kernels (unfortunately both client and server :-)
 * this version of the tool is multi-threaded:
 *  - the master thread inits, monitors the activity each millisecond,
 *   and report results when finished
 *  - the connecting thread computes the date of the next connection,
 *   creates a socket, makes it non blocking, binds it if wanted,
 *   connects it and pushes it on the output epoll queue
 *  - the sending thread gets by epoll connected sockets, timeouts
 *   embryonic connections, sends queries and pushes sockets on
 *   the input epoll queue
 *  - the receiving thread gets by epoll sockets with a pending
 *   response, receives responses, timeouts unanswered queries,
 *   and recycles (by closing them) all sockets.
 *
 * Rate computation details:
 *  - the target rate is in query+response per second.
 *  - rating is done by the connecting thread.
 *  - of course the tool is always late so the target rate is never
 *   reached. BTW there is no attempt to internally adjust the
 *   effective rate to the target one: this must be by tuning
 *   the rate related parameters, first the -r<rate> itself.
 *  - at the beginning of the connecting thread iteration loop
 *   (second "loops" counter) the date of the due (aka next) connect()
 *   call is computed from the last one with 101% of the rate.
 *  - the due date is compared with the current date (aka now).
 *  - if the due is before, lateconn counter is incremented, else
 *   the thread sleeps for the difference,
 *  - the next step is to reget the current date, if it is still
 *   before the due date (e.g., because the sleep was interrupted)
 *   the first shortwait counter is incremented.
 *  - if it is after (common case) the number of connect calls is
 *   computed from the difference between now and due divided by rate,
 *   rounded to the next number,
 *  - this number of connect() calls is bounded by the -a<aggressiveness>
 *   parameter to avoid too many back to back new connection attempts.
 *  - the compconn counter is incremented, errors (other than EINPROGRESS
 *   from not blocking connect()) are printed. When an error is
 *   related to a local limit (e.g., EMFILE, EADDRNOTAVAIL or the
 *   internal ENOMEM) the locallimit counter is incremented.
 */

#ifdef __linux__
#define _GNU_SOURCE
#endif

#include <sys/types.h>
#include <sys/epoll.h>
#include <sys/prctl.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <sys/wait.h>

#include <netinet/in.h>
#include <arpa/inet.h>

#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <math.h>
#include <netdb.h>
#include <pthread.h>
#include <signal.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>

/* DNS defines */

#define NS_TYPE_A		1
#define NS_TYPE_NS		2
#define NS_TYPE_CNAME		5
#define NS_TYPE_SOA		6
#define NS_TYPE_NULL		10
#define NS_TYPE_PTR		12
#define NS_TYPE_MX		15
#define NS_TYPE_TXT		16
#define NS_TYPE_AAAA		28
#define NS_TYPE_OPT		41
#define NS_TYPE_DS		43
#define NS_TYPE_RRSIG		46
#define NS_TYPE_NSEC		47
#define NS_TYPE_DNSKEY		48
#define NS_TYPE_NSEC3		50
#define NS_TYPE_NSEC3PARAM	51
#define NS_TYPE_TSIG		250
#define NS_TYPE_IXFR		251
#define NS_TYPE_AXFR		252
#define NS_TYPE_ANY		255

#define NS_CLASS_IN		1
#define NS_CLASS_ANY		255

#define NS_OFF_ID		0
#define NS_OFF_FLAGS		2
#define NS_OFF_QDCOUNT		4
#define NS_OFF_ANCOUNT		6
#define NS_OFF_NSCOUNT		8
#define NS_OFF_ARCOUNT		10
#define NS_OFF_QUESTION		12

#define NS_FLAG_QR		0x8000U
#define NS_FLAG_AA		0x0400U
#define NS_FLAG_TC		0x0200U
#define NS_FLAG_RD		0x0100U
#define NS_FLAG_RA		0x0080U
#define NS_FLAG_AD		0x0020U
#define NS_FLAG_CD		0x0010U

#define NS_XFLAG_DO		0x8000U

#define NS_OPCODE_MASK		0x7000U
#define NS_OPCODE_QUERY		0

#define NS_RCODE_MASK		0x000fU
#define NS_RCODE_NOERROR	0
#define NS_RCODE_FORMERR	1
#define NS_RCODE_SERVFAIL	2
#define NS_RCODE_NXDOMAIN	3
#define NS_RCODE_NOIMP		4
#define NS_RCODE_REFUSED	5
#define NS_RCODE_LAST		6

/* chaining macros */

#define ISC_INIT(head, headl)		do { \
	(head) = -1; \
	(headl) = &(head); \
} while (/*CONSTCOND*/0)

#define ISC_INSERT(head, headl, elm)	do { \
	(elm)->next = -1; \
	(elm)->prev = (headl); \
	*(headl) = (elm) - xlist; \
	(headl) = &((elm)->next); \
} while (/*CONSTCOND*/0)

#define ISC_REMOVE(headl, elm)		do { \
	if ((elm)->next != -1) \
		xlist[(elm)->next].prev = (elm)->prev; \
	else \
		(headl) = (elm)->prev; \
	*(elm)->prev = (elm)->next; \
} while (/*CONSTCOND*/0)

/*
 * Data structures
 */

/*
 * exchange:
 *    - per exchange values:
 *	* order (for debugging)
 *	* id
 *	* random (for debugging)
 *	* time-stamps
 *
 * sent/rcvd chain, "next to be received" on entry cache.
 */

struct exchange {				/* per exchange structure */
	int sock;				/* socket descriptor */
	int next, *prev;			/* chaining */
#define X_FREE	0
#define X_CONN	1
#define X_READY	2
#define X_SENT	3
	int state;				/* state */
	uint16_t id;				/* ID */
	uint64_t order;				/* number of this exchange */
	struct timespec ts0, ts1, ts2, ts3;	/* timespecs */
};
struct exchange *xlist;				/* exchange list */
int xlast;					/* number of exchanges */
int xconn, *xconnl;				/* connecting list */
int xready, *xreadyl;				/* connected list */
int xsent, *xsentl;				/* sent list */
int xfree, *xfreel;				/* free list */
int xused;					/* next to be used list */
pthread_mutex_t mtxconn, mtxsent, mtxfree;	/* mutexes */
uint64_t xccount;				/* connected counters */
uint64_t xscount;				/* sent counters */
uint64_t xrcount;				/* received counters */

/*
 * statictics counters and accumulators
 */

uint64_t recverr, tooshort, locallimit;		/* error counters */
uint64_t loops[4], shortwait[3];		/* rate stats */
uint64_t lateconn, compconn;			/* rate stats (cont) */
uint64_t badconn, collconn, badsent, collsent;	/* rate stats (cont) */
uint64_t badid, notresp;			/* bad response counters */
uint64_t rcodes[NS_RCODE_LAST + 1];		/* rcode counters */
double dmin = 999999999.;			/* minimum delay */
double dmax = 0.;				/* maximum delay */
double dsum = 0.;				/* delay sum */
double dsumsq = 0.;				/* square delay sum */

/*
 * command line parameters
 */

int edns0;				/* EDNS0 DO flag */
int ipversion = 0;			/* IP version */
int rate;				/* rate in connections per second */
int noreport;				/* disable auto reporting */
int report;				/* delay between two reports */
uint32_t range;				/* randomization range */
uint32_t maxrandom;			/* maximum random value */
int basecnt;				/* base count */
char *base[2];				/* bases */
int gotnumreq = -1;			/* numreq[0] was set */
int numreq[2];				/* number of exchanges */
int period;				/* test period */
int gotlosttime = -1;			/* losttime[0] was set */
double losttime[2] = {.5, 1.};		/* delay for a timeout  */
int gotmaxloss = -1;			/* max{p}loss[0] was set */
int maxloss[2];				/* maximum number of losses */
double maxploss[2] = {0., 0.};		/* maximum percentage */
char *localname;			/* local address or interface */
int aggressiveness = 1;			/* back to back connections */
int seeded;				/* is a seed provided */
unsigned int seed;			/* randomization seed */
char *templatefile;			/* template file name */
int rndoffset = -1;			/* template offset (random) */
char *diags;				/* diagnostic selectors */
char *servername;			/* server */
int ixann;				/* ixann NXDOMAIN */
int udp;				/* use UDP in place of TCP */
int minport, maxport, curport;		/* port range */

/*
 * global variables
 */

struct sockaddr_storage localaddr;	/* local socket address */
struct sockaddr_storage serveraddr;	/* server socket address */
in_port_t port = 53;			/* server socket port */

int epoll_ifd, epoll_ofd;		/* epoll file descriptors */
#ifndef EVENTS_CNT
#define EVENTS_CNT	16
#endif
struct epoll_event ievents[EVENTS_CNT];	/* polled input events */
struct epoll_event oevents[EVENTS_CNT];	/* polled output events */
int interrupted, fatal;			/* to finish flags */

uint8_t obuf[4098], ibuf[4098];		/* I/O buffers */
char tbuf[4098];			/* template buffer */

struct timespec boot;			/* the date of boot */
struct timespec last;			/* the date of last connect */
struct timespec due;			/* the date of next connect */
struct timespec dreport;		/* the date of next reporting */
struct timespec finished;		/* the date of finish */

/*
 * template
 */

size_t length_query;
uint8_t template_query[4096];
size_t random_query;

/*
 * threads
 */

pthread_t master, connector, sender, receiver;

/*
 * initialize data structures handling exchanges
 */

void
inits(void)
{
	int idx;

	ISC_INIT(xconn, xconnl);
	ISC_INIT(xready, xreadyl);
	ISC_INIT(xsent, xsentl);
	ISC_INIT(xfree, xfreel);

	if ((pthread_mutex_init(&mtxconn, NULL) != 0) ||
	    (pthread_mutex_init(&mtxsent, NULL) != 0) ||
	    (pthread_mutex_init(&mtxfree, NULL) != 0)) {
		fprintf(stderr, "pthread_mutex_init failed\n");
		exit(1);
	}

	epoll_ifd = epoll_create(EVENTS_CNT);
	if (epoll_ifd < 0) {
		perror("epoll_create(input)");
		exit(1);
	}
	epoll_ofd = epoll_create(EVENTS_CNT);
	if (epoll_ofd < 0) {
		perror("epoll_create(output)");
		exit(1);
	}

	xlist = (struct exchange *) malloc(xlast * sizeof(struct exchange));
	if (xlist == NULL) {
		perror("malloc(exchanges)");
		exit(1);
	}
	memset(xlist, 0, xlast * sizeof(struct exchange));

	for (idx = 0; idx < xlast; idx++)
		xlist[idx].sock = xlist[idx].next = -1;
}

/*
 * build a TCP DNS QUERY
 */

void
build_template_query(void)
{
	uint8_t *p = template_query;
	uint16_t v;

	/* flags */
	p += NS_OFF_FLAGS;
	v = NS_FLAG_RD;
	*p++ = v >> 8;
	*p++ = v & 0xff;
	/* qdcount */
	v = 1;
	*p++ = v >> 8;
	*p++ = v & 0xff;
	/* ancount */
	v = 0;
	*p++ = v >> 8;
	*p++ = v & 0xff;
	/* nscount */
	v = 0;
	*p++ = v >> 8;
	*p++ = v & 0xff;
	/* arcount */
	v = edns0;
	*p++ = v >> 8;
	*p++ = v & 0xff;
	/* icann.link (or ixann.link) */
	*p++ = 5;
	*p++ = 'i';
	if (ixann == 0)
		*p++ = 'c';
	else
		*p++ = 'x';
	*p++ = 'a';
	*p++ = 'n';
	*p++ = 'n';
	*p++ = 4;
	*p++ = 'l';
	*p++ = 'i';
	*p++ = 'n';
	*p++ = 'k';
	*p++ = 0;
	/* type A/AAAA */
	if (ipversion == 4)
		v = NS_TYPE_A;
	else
		v = NS_TYPE_AAAA;
	*p++ = v >> 8;
	*p++ = v & 0xff;
	/* class IN */
	v = NS_CLASS_IN;
	*p++ = v >> 8;
	*p++ = v & 0xff;
	/* EDNS0 OPT with DO */
	if (edns0) {
		/* root name */
		*p++ = 0;
		/* type OPT */
		v = NS_TYPE_OPT;
		*p++ = v >> 8;
		*p++ = v & 0xff;
		/* class UDP length */
		v = 4096;
		*p++ = v >> 8;
		*p++ = v & 0xff;
		/* extended rcode 0 */
		*p++ = 0;
		/* version 0 */
		*p++ = 0;
		/* extended flags DO */
		v = NS_XFLAG_DO;
		*p++ = v >> 8;
		*p++ = v & 0xff;
		/* rdlength */
		v = 0;
		*p++ = v >> 8;
		*p++ = v & 0xff;
	}
	/* length */
	length_query = p - template_query;
}

/*
 * get a TCP DNS client QUERY template
 * from the file given in the command line (-T<template-file>)
 * and rnd offset (-O<random-offset>)
 */

void
get_template_query(void)
{
	uint8_t *p = template_query;
	int fd, cc, i, j;

	fd = open(templatefile, O_RDONLY);
	if (fd < 0) {
		fprintf(stderr, "open(%s): %s\n",
			templatefile, strerror(errno));
		exit(2);
	}
	cc = read(fd, tbuf, sizeof(tbuf));
	(void) close(fd);
	if (cc < 0) {
		fprintf(stderr, "read(%s): %s\n",
			templatefile, strerror(errno));
		exit(1);
	}
	if (cc < NS_OFF_QUESTION + 6) {
		fprintf(stderr,"file '%s' too small\n", templatefile);
		exit(2);
	}
	if (cc > 4096) {
		fprintf(stderr,"file '%s' too large\n", templatefile);
		exit(2);
	}
	j = 0;
	for (i = 0; i < cc; i++) {
		if (isspace((int) tbuf[i]))
			continue;
		if (!isxdigit((int) tbuf[i])) {
			fprintf(stderr,
				"illegal char[%d]='%c' in file '%s'\n",
				i, (int) tbuf[i], templatefile);
			exit(2);
		}
		tbuf[j] = tbuf[i];
		j++;
	}
	cc = j;
	if ((cc & 1) != 0) {
		fprintf(stderr,
			"odd number of hexadecimal digits in file '%s'\n",
			templatefile);
		exit(2);
	}
	length_query = cc >> 1;
	for (i = 0; i < cc; i += 2)
		(void) sscanf(tbuf + i, "%02hhx", &p[i >> 1]);
	if (rndoffset >= 0)
		random_query = (size_t) rndoffset;
	if (random_query > length_query) {
		fprintf(stderr,
			"random (at %zu) outside the template (length %zu)?\n",
			random_query, length_query);
		exit(2);
	}
}

#if 0
/*
 * randomize the value of the given field:
 *   - offset of the field
 *   - random seed (used as it when suitable)
 *   - returns the random value which was used
 */

uint32_t
randomize(size_t offset, uint32_t r)
{
	uint32_t v;

	if (range == 0)
		return 0;
	if (range == UINT32_MAX)
		return r;
	if (maxrandom != 0)
		while (r >= maxrandom)
			r = (uint32_t) random();
	r %= range + 1;
	v = r;
	v += obuf[offset];
	obuf[offset] = v;
	if (v < 256)
		return r;
	v >>= 8;
	v += obuf[offset - 1];
	obuf[offset - 1] = v;
	if (v < 256)
		return r;
	v >>= 8;
	v += obuf[offset - 2];
	obuf[offset - 2] = v;
	if (v < 256)
		return r;
	v >>= 8;
	v += obuf[offset - 3];
	obuf[offset - 3] = v;
	return r;
}
#endif

/*
 * flush/timeout connect
 */

void
flushconnect(void)
{
	struct exchange *x;
	struct timespec now;
	int idx = xconn;
	int cnt = 10;
	double waited;

	if (clock_gettime(CLOCK_REALTIME, &now) < 0) {
		perror("clock_gettime(flushconnect)");
		fatal = 1;
		(void) pthread_kill(master, SIGTERM);
		return;
	}

	while (--cnt >= 0) {
		if (idx < 0)
			return;
		x = xlist + idx;
		idx = x->next;
		if (x->state != X_CONN)
			abort();
		/* check for a timed-out connection */
		waited = now.tv_sec - x->ts0.tv_sec;
		waited += (now.tv_nsec - x->ts0.tv_nsec) / 1e9;
		if (waited < losttime[0])
			return;
		/* garbage collect timed-out connections */
		if (pthread_mutex_lock(&mtxconn) != 0) {
			fprintf(stderr, "pthread_mutex_lock(flushconnect)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return;
		}
		ISC_REMOVE(xconnl, x);
		if (pthread_mutex_unlock(&mtxconn) != 0) {
			fprintf(stderr, "pthread_mutex_unlock(flushconnect)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return;
		}
		(void) close(x->sock);
		x->sock = -1;
		collconn++;
		if (pthread_mutex_lock(&mtxfree) != 0) {
			fprintf(stderr, "pthread_mutex_lock(flushconnect)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return;
		}
		x->state = X_FREE;
		ISC_INSERT(xfree, xfreel, x);
		if (pthread_mutex_unlock(&mtxfree) != 0) {
			fprintf(stderr, "pthread_mutex_unlock(flushconnect)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return;
		}
	}
}

/*
 * poll connected
 */

void
pollconnect(int topoll)
{
	struct exchange *x;
	int evn, idx, err;
	socklen_t len = sizeof(int);

	for (evn = 0; evn < topoll; evn++) {
		idx = oevents[evn].data.fd;
		x = xlist + idx;
		if (x->state != X_CONN)
			continue;
		if (oevents[evn].events == 0)
			continue;
		if (pthread_mutex_lock(&mtxconn) != 0) {
			fprintf(stderr, "pthread_mutex_lock(pollconnect)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return;
		}
		ISC_REMOVE(xconnl, x);
		if (pthread_mutex_unlock(&mtxconn) != 0) {
			fprintf(stderr, "pthread_mutex_unlock(pollconnect)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return;
		}
		oevents[evn].events = 0;
		if ((getsockopt(x->sock, SOL_SOCKET, SO_ERROR,
				&err, &len) < 0) ||
		    (err != 0)) {
			(void) close(x->sock);
			x->sock = -1;
			badconn++;
			if (pthread_mutex_lock(&mtxfree) != 0) {
				fprintf(stderr,
					"pthread_mutex_lock(pollconnect)");
				fatal = 1;
				(void) pthread_kill(master, SIGTERM);
				return;
			}
			x->state = X_FREE;
			ISC_INSERT(xfree, xfreel, x);
			if (pthread_mutex_unlock(&mtxfree) != 0) {
				fprintf(stderr,
					"pthread_mutex_unlock(pollconnect)");
				fatal = 1;
				(void) pthread_kill(master, SIGTERM);
				return;
			}
			continue;
		}
		x->state = X_READY;
		ISC_INSERT(xready, xreadyl, x);
	}
}

/*
 * send the TCP DNS QUERY
 */

int
sendquery(struct exchange *x)
{
	ssize_t ret;
	size_t off;

	if (udp)
		off = 0;
	else {
		off = 2;
		/* message length */
		obuf[0] = length_query >> 8;
		obuf[1]= length_query & 0xff;
	}
	/* message from template */
	memcpy(obuf + off, template_query, length_query);
	/* ID */
	memcpy(obuf + off + NS_OFF_ID, &x->id, 2);
#if 0
	/* random */
	if (random_query > 0)
		x->rnd = randomize(random_query + off, x->rnd);
#endif
	/* timestamp */
	errno = 0;
	ret = clock_gettime(CLOCK_REALTIME, &x->ts2);
	if (ret < 0) {
		perror("clock_gettime(send)");
		fatal = 1;
		(void) pthread_kill(master, SIGTERM);
		return -errno;
	}
	ret = send(x->sock, obuf, length_query + off, 0);
	if ((size_t) ret == length_query + off)
		return 0;
	return -errno;
}

/*
 * poll ready and send
 */

void
pollsend(void)
{
	struct exchange *x;
	int idx = xready;
	struct epoll_event ev;

	memset(&ev, 0, sizeof(ev));
	ev.events = EPOLLIN | EPOLLET | EPOLLONESHOT;
	for (;;) {
		if (idx < 0)
			return;
		x = xlist + idx;
		ev.data.fd = idx;
		idx = x->next;
		ISC_REMOVE(xreadyl, x);
		if (sendquery(x) < 0) {
			(void) close(x->sock);
			x->sock = -1;
			badsent++;
			if (pthread_mutex_lock(&mtxfree) != 0) {
				fprintf(stderr,
					"pthread_mutex_lock(pollsend)");
				fatal = 1;
				(void) pthread_kill(master, SIGTERM);
				return;
			}
			x->state = X_FREE;
			ISC_INSERT(xfree, xfreel, x);
			if (pthread_mutex_unlock(&mtxfree) != 0) {
				fprintf(stderr,
					"pthread_mutex_unlock(pollsend)");
				fatal = 1;
				(void) pthread_kill(master, SIGTERM);
				return;
			}
			continue;
		}
		xscount++;
		if (pthread_mutex_lock(&mtxsent) != 0) {
			fprintf(stderr, "pthread_mutex_lock(pollsend)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return;
		}
		x->state = X_SENT;
		ISC_INSERT(xsent, xsentl, x);
		if (pthread_mutex_unlock(&mtxsent) != 0) {
			fprintf(stderr, "pthread_mutex_unlock(pollsend)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return;
		}
		if (epoll_ctl(epoll_ifd, EPOLL_CTL_ADD, x->sock, &ev) < 0) {
			perror("epoll_ctl(add input)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return;
		}
	}
}

/*
 * receive a TCP DNS RESPONSE
 */

void
receiveresp(struct exchange *x)
{
	struct timespec now;
	ssize_t cc;
	size_t off;
	uint16_t v;
	double delta;

	cc = recv(x->sock, ibuf, sizeof(ibuf), 0);
	if (cc < 0) {
		if ((errno == EAGAIN) ||
		    (errno == EWOULDBLOCK) ||
		    (errno == EINTR) ||
		    (errno == ECONNRESET)) {
			recverr++;
			return;
		}
		perror("recv");
		fatal = 1;
		(void) pthread_kill(master, SIGTERM);
		return;
	}
	if (udp)
		off = 0;
	else
		off = 2;
	/* enforce a reasonable length */
	if ((size_t) cc < length_query + off) {
		tooshort++;
		return;
	}
	/* must match the ID */
	if (memcmp(ibuf + off + NS_OFF_ID, &x->id, 2) != 0) {
		badid++;
		return;
	}
	/* must be a response */
	memcpy(&v, ibuf + off + NS_OFF_FLAGS, 2);
	v = ntohs(v);
	if ((v & NS_FLAG_QR) == 0) {
		notresp++;
		return;
	}
	if (clock_gettime(CLOCK_REALTIME, &now) < 0) {
		perror("clock_gettime(receive)");
		fatal = 1;
		(void) pthread_kill(master, SIGTERM);
		return;
	}
	/* got it: update stats */
	xrcount++;
	x->ts3 = now;
	delta = x->ts3.tv_sec - x->ts2.tv_sec;
	delta += (x->ts3.tv_nsec - x->ts2.tv_nsec) / 1e9;
	if (delta < dmin)
		dmin = delta;
	if (delta > dmax)
		dmax = delta;
	dsum += delta;
	dsumsq += delta * delta;
	v &= NS_RCODE_MASK;
	if (v >= NS_RCODE_LAST)
		v = NS_RCODE_LAST;
	rcodes[v] += 1;
}

/*
 * flush/timeout receive
 */

void
flushrecv(void)
{
	struct exchange *x;
	struct timespec now;
	int idx = xsent;
	int cnt = 5;
	double waited;

	if (clock_gettime(CLOCK_REALTIME, &now) < 0) {
		perror("clock_gettime(receive)");
		fatal = 1;
		(void) pthread_kill(master, SIGTERM);
		return;
	}

	while (--cnt >= 0) {
		if (idx < 0)
			return;
		x = xlist + idx;
		idx = x->next;
		if (x->state != X_SENT)
			abort();
		/* check for a timed-out exchange */
		waited = now.tv_sec - x->ts2.tv_sec;
		waited += (now.tv_nsec - x->ts2.tv_nsec) / 1e9;
		if (waited < losttime[1])
			return;
		/* garbage collect timed-out exchange */
		if (pthread_mutex_lock(&mtxsent) != 0) {
			fprintf(stderr, "pthread_mutex_lock(flushrecv)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return;
		}
		ISC_REMOVE(xsentl, x);
		if (pthread_mutex_unlock(&mtxsent) != 0) {
			fprintf(stderr, "pthread_mutex_unlock(flushrecv)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return;
		}
		(void) close(x->sock);
		x->sock = -1;
		collsent++;
		if (pthread_mutex_lock(&mtxfree) != 0) {
			fprintf(stderr, "pthread_mutex_lock(flushrecv)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return;
		}
		x->state = X_FREE;
		ISC_INSERT(xfree, xfreel, x);
		if (pthread_mutex_unlock(&mtxfree) != 0) {
			fprintf(stderr, "pthread_mutex_unlock(flushrecv)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return;
		}
	}
}

/*
 * poll receive
 */

void
pollrecv(int topoll)
{
	struct exchange *x;
	int evn, idx;

	for (evn = 0; evn < topoll; evn++) {
		idx = ievents[evn].data.fd;
		x = xlist + idx;
		if (x->state != X_SENT)
			continue;
		if (ievents[evn].events == 0)
			continue;
		if (pthread_mutex_lock(&mtxsent) != 0) {
			fprintf(stderr, "pthread_mutex_lock(pollrecv)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return;
		}
		ISC_REMOVE(xsentl, x);
		if (pthread_mutex_unlock(&mtxsent) != 0) {
			fprintf(stderr, "pthread_mutex_unlock(pollrecv)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return;
		}
		receiveresp(x);
		ievents[evn].events = 0;
		(void) close(x->sock);
		x->sock = -1;
		if (pthread_mutex_lock(&mtxfree) != 0) {
			fprintf(stderr, "pthread_mutex_lock(pollrecv)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return;
		}
		x->state = X_FREE;
		ISC_INSERT(xfree, xfreel, x);
		if (pthread_mutex_unlock(&mtxfree) != 0) {
			fprintf(stderr, "pthread_mutex_unlock(pollrecv)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return;
		}
	}
}

/*
 * get the TCP DNS socket descriptor (IPv4)
 */

int
getsock4(void)
{
	int sock;
	int flags;

	errno = 0;
	if (udp)
		sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
	else
		sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (sock < 0)
		return -errno;

	/* make the socket descriptor not blocking */
	flags = fcntl(sock, F_GETFL, 0);
	if (flags == -1) {
		(void) close(sock);
		return -errno;
	}
	if (fcntl(sock, F_SETFL, flags | O_NONBLOCK) == -1) {
		(void) close(sock);
		return -errno;
	}

	/* bind if wanted */
	if (localname != NULL) {
		if (curport) {
			struct sockaddr_in *l4;

			l4 = (struct sockaddr_in *) &localaddr;
			l4->sin_port = htons((uint16_t) curport);
			curport++;
			if (curport > maxport)
				curport = minport;
		}
		if (bind(sock,
			 (struct sockaddr *) &localaddr,
			 sizeof(struct sockaddr_in)) < 0) {
			(void) close(sock);
			return -errno;
		}
	}

	/* connect */
	if (connect(sock,
		    (struct sockaddr *) &serveraddr,
		    sizeof(struct sockaddr_in)) < 0) {
		if (errno != EINPROGRESS) {
			(void) close(sock);
			return -errno;
		}
	}
	return sock;
}

/*
 * connect the TCP DNS QUERY (IPv4)
 */

int
connect4(void)
{
	struct exchange *x;
	int ret;
	int idx;
	struct epoll_event ev;

	ret = clock_gettime(CLOCK_REALTIME, &last);
	if (ret < 0) {
		perror("clock_gettime(connect)");
		fatal = 1;
		(void) pthread_kill(master, SIGTERM);
		return -errno;
	}

	if (xfree >= 0) {
		idx = xfree;
		x = xlist + idx;
		ret = pthread_mutex_lock(&mtxfree);
		if (ret != 0) {
			fprintf(stderr, "pthread_mutex_lock(connect4)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return -ret;
		}
		ISC_REMOVE(xfreel, x);
		ret = pthread_mutex_unlock(&mtxfree);
		if (ret != 0) {
			fprintf(stderr, "pthread_mutex_unlock(connect4)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return -ret;
		}
	} else if (xused < xlast) {
		idx = xused;
		x = xlist + idx;
		xused++;
	} else
		return -ENOMEM;

	if ((x->state != X_FREE) || (x->sock != -1))
		abort();

	memset(x, 0, sizeof(*x));
	memset(&ev, 0, sizeof(ev));
	x->next = -1;
	x->prev = NULL;
	x->ts0 = last;
	x->sock = getsock4();
	if (x->sock < 0) {
		int result = x->sock;

		x->sock = -1;
		ret = pthread_mutex_lock(&mtxfree);
		if (ret != 0) {
			fprintf(stderr, "pthread_mutex_lock(connect4)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return -ret;
		}
		ISC_INSERT(xfree, xfreel, x);
		ret = pthread_mutex_unlock(&mtxfree);
		if (ret != 0) {
			fprintf(stderr, "pthread_mutex_unlock(connect4)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return -ret;
		}
		return result;
	}
	ret = pthread_mutex_lock(&mtxconn);
	if (ret != 0) {
		fprintf(stderr, "pthread_mutex_lock(connect4)");
		fatal = 1;
		(void) pthread_kill(master, SIGTERM);
		return -ret;
	}
	x->state = X_CONN;
	ISC_INSERT(xconn, xconnl, x);
	ret = pthread_mutex_unlock(&mtxconn);
	if (ret != 0) {
		fprintf(stderr, "pthread_mutex_unlock(connect4)");
		fatal = 1;
		(void) pthread_kill(master, SIGTERM);
		return -ret;
	}
	ev.events = EPOLLOUT | EPOLLET | EPOLLONESHOT;
	ev.data.fd = idx;
	if (epoll_ctl(epoll_ofd, EPOLL_CTL_ADD, x->sock, &ev) < 0) {
		perror("epoll_ctl(add output)");
		fatal = 1;
		(void) pthread_kill(master, SIGTERM);
		return -errno;
	}
	x->order = xccount++;
	x->id = (uint16_t) random();
#if 0
	if (random_query > 0)
		x->rnd = (uint32_t) random();
#endif
	return idx;
}

/*
 * get the TCP DNS socket descriptor (IPv6)
 */

int
getsock6(void)
{
	int sock;
	int flags;

	errno = 0;
	if (udp)
		sock = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP);
	else
		sock = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP);
	if (sock < 0)
		return -errno;

	/* make the socket descriptor not blocking */
	flags = fcntl(sock, F_GETFL, 0);
	if (flags == -1) {
		(void) close(sock);
		return -errno;
	}
	if (fcntl(sock, F_SETFL, flags | O_NONBLOCK) == -1) {
		(void) close(sock);
		return -errno;
	}

	/* bind if wanted */
	if (localname != NULL) {
		if (curport) {
			struct sockaddr_in6 *l6;

			l6 = (struct sockaddr_in6 *) &localaddr;
			l6->sin6_port = htons((uint16_t) curport);
			curport++;
			if (curport > maxport)
				curport = minport;
		}
		if (bind(sock,
			 (struct sockaddr *) &localaddr,
			 sizeof(struct sockaddr_in6)) < 0) {
			(void) close(sock);
			return -errno;
		}
	}

	/* connect */
	if (connect(sock,
		    (struct sockaddr *) &serveraddr,
		    sizeof(struct sockaddr_in6)) < 0) {
		if (errno != EINPROGRESS) {
			(void) close(sock);
			return -errno;
		}
	}
	return sock;
}

/*
 * connect the TCP DNS QUERY (IPv6)
 */

int
connect6(void)
{
	struct exchange *x;
	int ret;
	int idx;
	struct epoll_event ev;

	ret = clock_gettime(CLOCK_REALTIME, &last);
	if (ret < 0) {
		perror("clock_gettime(connect)");
		fatal = 1;
		(void) pthread_kill(master, SIGTERM);
		return -errno;
	}

	if (xfree >= 0) {
		idx = xfree;
		x = xlist + idx;
		ret = pthread_mutex_lock(&mtxfree);
		if (ret != 0) {
			fprintf(stderr, "pthread_mutex_lock(connect6)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return -ret;
		}
		ISC_REMOVE(xfreel, x);
		ret = pthread_mutex_unlock(&mtxfree);
		if (ret != 0) {
			fprintf(stderr, "pthread_mutex_unlock(connect6)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return -ret;
		}
	} else if (xused < xlast) {
		idx = xused;
		x = xlist + idx;
		xused++;
	} else
		return -ENOMEM;

	memset(x, 0, sizeof(*x));
	memset(&ev, 0, sizeof(ev));
	x->next = -1;
	x->prev = NULL;
	x->ts0 = last;
	x->sock = getsock6();
	if (x->sock < 0) {
		int result = x->sock;

		x->sock = -1;
		ret = pthread_mutex_lock(&mtxfree);
		if (ret != 0) {
			fprintf(stderr, "pthread_mutex_lock(connect6)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return -ret;
		}
		ISC_INSERT(xfree, xfreel, x);
		ret = pthread_mutex_unlock(&mtxfree);
		if (ret != 0) {
			fprintf(stderr, "pthread_mutex_unlock(connect6)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			return -ret;
		}
		return result;
	}
	ret = pthread_mutex_lock(&mtxconn);
	if (ret != 0) {
		fprintf(stderr, "pthread_mutex_lock(connect6)");
		fatal = 1;
		(void) pthread_kill(master, SIGTERM);
		return -ret;
	}
	x->state = X_CONN;
	ISC_INSERT(xconn, xconnl, x);
	ret = pthread_mutex_unlock(&mtxconn);
	if (ret != 0) {
		fprintf(stderr, "pthread_mutex_unlock(connect6)");
		fatal = 1;
		(void) pthread_kill(master, SIGTERM);
		return -ret;
	}
	ev.events = EPOLLOUT | EPOLLET | EPOLLONESHOT;
	ev.data.fd = idx;
	if (epoll_ctl(epoll_ofd, EPOLL_CTL_ADD, x->sock, &ev) < 0) {
		perror("epoll_ctl(add output)");
		fatal = 1;
		(void) pthread_kill(master, SIGTERM);
		return -errno;
	}
	x->order = xccount++;
	x->id = (uint16_t) random();
#if 0
	if (random_query > 0)
		x->rnd = (uint32_t) random();
#endif
	return idx;
}

/*
 * connector working routine
 */

void *
connecting(void *dummy)
{
	struct timespec now, ts;
	int ret;
	int i;
	char name[16];

	dummy = dummy;

	/* set conn-name */
	memset(name, 0, sizeof(name));
	ret = prctl(PR_GET_NAME, name, 0, 0, 0);
	if (ret < 0)
		perror("prctl(PR_GET_NAME)");
	else {
		memmove(name + 5, name, 11);
		memcpy(name, "conn-", 5);
		ret = prctl(PR_SET_NAME, name, 0, 0, 0);
		if (ret < 0)
			perror("prctl(PR_SET_NAME");
	}

	for (;;) {
		if (fatal)
			break;

		loops[1]++;

		/* compute the delay for the next connection */
		if (clock_gettime(CLOCK_REALTIME, &now) < 0) {
			perror("clock_gettime(connecting)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			break;
		}

		due = last;
		if (rate == 1)
			due.tv_sec += 1;
		else
			due.tv_nsec += 1010000000 / rate;
		while (due.tv_nsec >= 1000000000) {
			due.tv_sec += 1;
			due.tv_nsec -= 1000000000;
		}
		ts = due;
		ts.tv_sec -= now.tv_sec;
		ts.tv_nsec -= now.tv_nsec;
		while (ts.tv_nsec < 0) {
			ts.tv_sec -= 1;
			ts.tv_nsec += 1000000000;
		}
		/* the connection was already due? */
		if (ts.tv_sec < 0) {
			ts.tv_sec = ts.tv_nsec = 0;
			lateconn++;
		} else {
			/* wait until */
			ret = clock_nanosleep(CLOCK_REALTIME, 0, &ts, NULL);
			if (ret < 0) {
				if (errno == EINTR)
					continue;
				perror("clock_nanosleep");
				fatal = 1;
				(void) pthread_kill(master, SIGTERM);
				break;
			}
		}

		/* compute how many connections to open */
		if (clock_gettime(CLOCK_REALTIME, &now) < 0) {
			perror("clock_gettime(connecting)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			break;
		}

		if ((now.tv_sec > due.tv_sec) ||
		    ((now.tv_sec == due.tv_sec) &&
		     (now.tv_nsec >= due.tv_nsec))) {
			double toconnect;

			toconnect = (now.tv_nsec - due.tv_nsec) / 1e9;
			toconnect += now.tv_sec - due.tv_sec;
			toconnect *= rate;
			toconnect++;
			if (toconnect > (double) aggressiveness)
				i = aggressiveness;
			else
				i = (int) toconnect;
			compconn += i;
			/* open connections */
			while (i-- > 0) {
				if (ipversion == 4)
					ret = connect4();
				else
					ret = connect6();
				if (ret < 0) {
					if ((ret == -EAGAIN) ||
					    (ret == -EWOULDBLOCK) ||
					    (ret == -ENOBUFS) ||
					    (ret == -ENFILE) ||
					    (ret == -EMFILE) ||
					    (ret == -EADDRNOTAVAIL) ||
					    (ret == -ENOMEM))
						locallimit++;
					fprintf(stderr,
						"connect: %s\n",
						strerror(-ret));
					break;
				}
			}
		} else
			/* there was no connection to open */
			shortwait[0]++;
	}

	return NULL;
}

/*
 * sender working routine
 */

void *
sending(void *dummy)
{
	int ret;
	int nfds;
	char name[16];

	dummy = dummy;

	/* set send-name */
	memset(name, 0, sizeof(name));
	ret = prctl(PR_GET_NAME, name, 0, 0, 0);
	if (ret < 0)
		perror("prctl(PR_GET_NAME)");
	else {
		memmove(name + 5, name, 11);
		memcpy(name, "send-", 5);
		ret = prctl(PR_SET_NAME, name, 0, 0, 0);
		if (ret < 0)
			perror("prctl(PR_SET_NAME");
	}

	for (;;) {
		if (fatal)
			break;

		loops[2]++;

		/* epoll_wait() */
		memset(oevents, 0, sizeof(oevents));
		nfds = epoll_wait(epoll_ofd, oevents, EVENTS_CNT, 1);
		if (nfds < 0) {
			if (errno == EINTR)
				continue;
			perror("epoll_wait(output)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			break;
		}

		/* connection(s) to finish */
		if (nfds == 0)
			shortwait[1]++;
		else
			pollconnect(nfds);
		if (fatal)
			break;
		flushconnect();
		if (fatal)
			break;

		/* packet(s) to send */
		pollsend();
		if (fatal)
			break;
	}

	return NULL;
}

/*
 * receiver working routine
 */

void *
receiving(void *dummy)
{
	int ret;
	int nfds;
	char name[16];

	dummy = dummy;

	/* set recv-name */
	memset(name, 0, sizeof(name));
	ret = prctl(PR_GET_NAME, name, 0, 0, 0);
	if (ret < 0)
		perror("prctl(PR_GET_NAME)");
	else {
		memmove(name + 5, name, 11);
		memcpy(name, "recv-", 5);
		ret = prctl(PR_SET_NAME, name, 0, 0, 0);
		if (ret < 0)
			perror("prctl(PR_SET_NAME");
	}

	for (;;) {
		if (fatal)
			break;

		loops[3]++;

		/* epoll_wait() */
		memset(ievents, 0, sizeof(ievents));
		nfds = epoll_wait(epoll_ifd, ievents, EVENTS_CNT, 1);
		if (nfds < 0) {
			if (errno == EINTR)
				continue;
			perror("epoll_wait(input)");
			fatal = 1;
			(void) pthread_kill(master, SIGTERM);
			break;
		}

		/* packet(s) to receive */
		if (nfds == 0)
			shortwait[2]++;
		else
			pollrecv(nfds);
		if (fatal)
			break;
		flushrecv();
		if (fatal)
			break;
	}

	return NULL;
}

/*
 * get the server socket address from the command line:
 *  - flags: inherited from main, 0 or AI_NUMERICHOST (for literals)
 */

void
getserveraddr(const int flags)
{
	struct addrinfo hints, *res;
	int ret;

	memset(&hints, 0, sizeof(hints));
	if (ipversion == 4)
		hints.ai_family = AF_INET;
	else
		hints.ai_family = AF_INET6;
	if (udp) {
		hints.ai_socktype = SOCK_DGRAM;
		hints.ai_protocol = IPPROTO_UDP;
	} else {
		hints.ai_socktype = SOCK_STREAM;
		hints.ai_protocol = IPPROTO_TCP;
	}
	hints.ai_flags = AI_ADDRCONFIG | flags;

	ret = getaddrinfo(servername, NULL, &hints, &res);
	if (ret != 0) {
		fprintf(stderr, "bad server=%s: %s\n",
			servername, gai_strerror(ret));
		exit(2);
	}
	if (res->ai_next != NULL) {
		fprintf(stderr, "ambiguous server=%s\n", servername);
		exit(2);
	}
	memcpy(&serveraddr, res->ai_addr, res->ai_addrlen);
	freeaddrinfo(res);
	if (ipversion == 4)
		((struct sockaddr_in *)&serveraddr)->sin_port = htons(port);
	else
		((struct sockaddr_in6 *)&serveraddr)->sin6_port = htons(port);
}

/*
 * get the local socket address from the command line
 */

void
getlocaladdr(void)
{
	struct addrinfo hints, *res;
	int ret;

	memset(&hints, 0, sizeof(hints));
	if (ipversion == 4)
		hints.ai_family = AF_INET;
	else
		hints.ai_family = AF_INET6;
	if (udp) {
		hints.ai_socktype = SOCK_DGRAM;
		hints.ai_protocol = IPPROTO_UDP;
	} else {
		hints.ai_socktype = SOCK_STREAM;
		hints.ai_protocol = IPPROTO_TCP;
	}
	hints.ai_flags = AI_ADDRCONFIG;

	ret = getaddrinfo(localname, NULL, &hints, &res);
	if (ret != 0) {
		fprintf(stderr,
			"bad -l<local-addr=%s>: %s\n",
			localname,
			gai_strerror(ret));
		exit(2);
	}
	/* refuse multiple addresses */
	if (res->ai_next != NULL) {
		fprintf(stderr,
			"ambiguous -l<local-addr=%s>\n",
			localname);
		exit(2);
	}
	memcpy(&localaddr, res->ai_addr, res->ai_addrlen);
	freeaddrinfo(res);
}

/*
 * intermediate reporting
 * (note: an in-transit packet can be reported as lost)
 */

void
reporting(void)
{
	dreport.tv_sec += report;

	if (xccount != 0) {
		printf("connect: %llu, sent: %llu, received: %llu "
		       "(embryonics: %lld, drops: %lld)",
		       (unsigned long long) xccount,
		       (unsigned long long) xscount,
		       (unsigned long long) xrcount,
		       (long long) (xccount - xscount),
		       (long long) (xscount - xrcount));
		if (xrcount != 0) {
			double avg;

			avg = dsum / xrcount;
			printf(" average: %.3f ms", avg * 1e3);
		}
	}
	printf("\n");
}

/*
 * SIGCHLD handler
 */

void
reapchild(int sig)
{
	int status;

	sig = sig;
	while (wait3(&status, WNOHANG, NULL) > 0)
		/* continue */;
}

/*
 * SIGINT handler
 */

void
interrupt(int sig)
{
	sig = sig;
	interrupted = 1;
}

/*
 * SIGTERM handler
 */

void
terminate(int sig)
{
	sig = sig;
	fatal = 1;
}

/*
 * '-v' handler
 */

void
version(void)
{
	fprintf(stderr, "version 0.01\n");
}

/*
 * usage (from the wiki)
 */

void
usage(void)
{
	fprintf(stderr, "%s",
"perftcpdns [-huvX0] [-4|-6] [-r<rate>] [-t<report>] [-p<test-period>]\n"
"    [-n<num-request>]* [-d<lost-time>]* [-D<max-loss>]* [-T<template-file>]\n"
"    [-l<local-addr>] [-L<local-port>]* [-a<aggressiveness>] [-s<seed>]\n"
"    [-M<memory>] [-x<diagnostic-selector>] [-P<port>] server\n"
"\f\n"
"The server argument is the name/address of the DNS server to contact.\n"
"\n"
"Options:\n"
"-0: Add EDNS0 option with DO flag.\n"
"-4: TCP/IPv4 operation (default). This is incompatible with the -6 option.\n"
"-6: TCP/IPv6 operation. This is incompatible with the -4 option.\n"
"-a<aggressiveness>: When the target sending rate is not yet reached,\n"
"    control how many connections are initiated before the next pause.\n"
"-d<lost-time>: Specify the time after which a connection or a query is\n"
"    treated as having been lost. The value is given in seconds and\n"
"    may contain a fractional component. The default is 1 second.\n"
"-h: Print this help.\n"
"-l<local-addr>: Specify the local hostname/address to use when\n"
"    communicating with the server.\n"
"-L<local-port>: Specify the (minimal and maximal) local port number\n"
"-M<memory>: Size of the tables (default 60000)\n"
"-P<port>: Specify an alternate (i.e., not 53) port\n"
"-r<rate>: Initiate <rate> TCP DNS connections per second.  A periodic\n"
"    report is generated showing the number of exchanges which were not\n"
"    completed, as well as the average response latency.  The program\n"
"    continues until interrupted, at which point a final report is\n"
"    generated.\n"
"-s<seed>: Specify the seed for randomization, making it repeatable.\n"
"-t<report>: Delay in seconds between two periodic reports.\n"
"-T<template-file>: The name of a file containing the template to use\n"
"    as a stream of hexadecimal digits.\n"
"-u: Use UDP in place of TCP.\n"
"-v: Report the version number of this program.\n"
"-X: change default template to get NXDOMAIN responses.\n"
"-x<diagnostic-selector>: Include extended diagnostics in the output.\n"
"    <diagnostic-selector> is a string of single-keywords specifying\n"
"    the operations for which verbose output is desired.  The selector\n"
"    keyletters are:\n"
"   * 'a': print the decoded command line arguments\n"
"   * 'e': print the exit reason\n"
"   * 'i': print rate processing details\n"
"   * 'T': when finished, print templates\n"
"\n"
"Stopping conditions:\n"
"-D<max-loss>: Abort the test if more than <max-loss> connections or\n"
"   queries have been lost.  If <max-loss> includes the suffix '%', it\n"
"   specifies a maximum percentage of losses before stopping.\n"
"   In this case, testing of the threshold begins after 10\n"
"   connections/responses have been expected to be accepted/received.\n"
"-n<num-request>: Initiate <num-request> transactions.  No report is\n"
"    generated until all transactions have been initiated/waited-for,\n"
"    after which a report is generated and the program terminates.\n"
"-p<test-period>: Send requests for the given test period, which is\n"
"    specified in the same manner as -d.  This can be used as an\n"
"    alternative to -n, or both options can be given, in which case the\n"
"    testing is completed when either limit is reached.\n"
"\n"
"Errors:\n"
"- locallimit: reached to local system limits when sending a message.\n"
"- badconn: connection failed (from getsockopt(SO_ERROR))\n"
"- collconn: connect() timed out\n"
"- badsent: send() failed\n"
"- callsent: timed out waiting from a response\n"
"- recverr: recv() system call failed\n"
"- tooshort: received a too short message\n"
"- badid: the id mismatches between the query and the response\n"
"- notresp: doesn't receive a response\n"
"Rate stats:\n"
"- loops: number of thread loop iterations\n"
"- shortwait: no direct activity in a thread iteration\n"
"- compconn: computed number of connect() calls\n"
"- lateconn: connect() already dued when computing delay to the next one\n"
"\n"
"Exit status:\n"
"The exit status is:\n"
"0 on complete success.\n"
"1 for a general error.\n"
"2 if an error is found in the command line arguments.\n"
"3 if there are no general failures in operation, but one or more\n"
"  exchanges are not successfully completed.\n");
}

/*
 * main function / entry point
 */

int
main(const int argc, char * const argv[])
{
	int opt, flags = 0, ret, i;
	long long r;
	char *pc;
	double d;
	extern char *optarg;
	extern int optind;

#define OPTIONS	"hv46u0XM:r:t:R:b:n:p:d:D:l:L:a:s:T:O:x:P:"

	/* decode options */
	while ((opt = getopt(argc, argv, OPTIONS)) != -1)
	switch (opt) {
	case 'h':
		usage();
		exit(0);

	case 'u':
		udp = 1;
		break;

	case 'v':
		version();
		exit(0);

	case '0':
		edns0 = 1;
		break;

	case '4':
		if (ipversion == 6) {
			fprintf(stderr, "IP version already set to 6\n");
			usage();
			exit(2);
		}
		ipversion = 4;
		break;

	case '6':
		if (ipversion == 4) {
			fprintf(stderr, "IP version already set to 4\n");
			usage();
			exit(2);
		}
		ipversion = 6;
		break;

	case 'X':
		ixann = 1;
		break;

	case 'M':
		xlast = atoi(optarg);
		if (xlast <= 1000) {
			fprintf(stderr, "memory must be greater than 1000\n");
			usage();
			exit(2);
		}
		break;

	case 'r':
		rate = atoi(optarg);
		if (rate <= 0) {
			fprintf(stderr, "rate must be a positive integer\n");
			usage();
			exit(2);
		}
		break;

	case 't':
		report = atoi(optarg);
		if (report <= 0) {
			fprintf(stderr, "report must be a positive integer\n");
			usage();
			exit(2);
		}
		break;

	case 'R':
		r = atoll(optarg);
		if (r < 0) {
			fprintf(stderr,
				"range must not be a negative integer\n");
			usage();
			exit(2);
		}
		range = (uint32_t) r;
		if ((range != 0) && (range != UINT32_MAX)) {
			uint32_t s = range + 1;
			uint64_t b = UINT32_MAX + 1, m;

			m = (b / s) * s;
			if (m == b)
				maxrandom = 0;
			else
				maxrandom = (uint32_t) m;
		}
		break;

	case 'b':
		if (basecnt > 1) {
			fprintf(stderr, "too many bases\n");
			usage();
			exit(2);
		}
		base[basecnt] = optarg;
		/* decodebase(); */
		basecnt++;
		break;

	case 'n':
		noreport = 1;
		gotnumreq++;
		if (gotnumreq > 1) {
			fprintf(stderr, "too many num-request's\n");
			usage();
			exit(2);
		}
		numreq[gotnumreq] = atoi(optarg);
		if ((numreq[gotnumreq] < 0) ||
		    ((numreq[gotnumreq] == 0) && (gotnumreq == 1))) {
			fprintf(stderr,
				"num-request must be a positive integer\n");
			usage();
			exit(2);
		}
		break;

	case 'p':
		noreport = 1;
		period = atoi(optarg);
		if (period <= 0) {
			fprintf(stderr,
				"test-period must be a positive integer\n");
			usage();
			exit(2);
		}
		break;

	case 'd':
		gotlosttime++;
		if (gotlosttime > 1) {
			fprintf(stderr, "too many lost-time's\n");
			usage();
			exit(2);
		}
		d = atof(optarg);
		if ((d < 0.) || ((d == 0.) && (gotlosttime == 1))) {
			fprintf(stderr,
				"lost-time must be a positive number\n");
			usage();
			exit(2);
		}
		if (d > 0.)
			losttime[gotlosttime] = d;
		break;

	case 'D':
		noreport = 1;
		gotmaxloss++;
		if (gotmaxloss > 1) {
			fprintf(stderr, "too many max-loss's\n");
			usage();
			exit(2);
		}
		pc = strchr(optarg, '%');
		if (pc != NULL) {
			*pc = '\0';
			maxploss[gotmaxloss] = atof(optarg);
			if ((maxploss[gotmaxloss] < 0) ||
			    (maxploss[gotmaxloss] >= 100)) {
				fprintf(stderr,
					"invalid max-loss percentage\n");
				usage();
				exit(2);
			}
		} else {
			maxloss[gotmaxloss] = atoi(optarg);
			if ((maxloss[gotmaxloss] < 0) ||
			    ((maxloss[gotmaxloss] == 0) &&
			     (gotmaxloss == 1))) {
				fprintf(stderr,
					"max-loss must be a "
					"positive integer\n");
				usage();
				exit(2);
			}
		}
		break;

	case 'l':
		localname = optarg;
		break;

	case 'L':
		i = atoi(optarg);
		if ((i <= 0) || (i >65535)) {
			fprintf(stderr,
				"local-port must be a small positive integer\n");
			usage();
			exit(2);
		}
		if (maxport != 0) {
			fprintf(stderr, "too many local-port's\n");
			usage();
			exit(2);
		}
		if (curport == 0)
			minport = curport = i;
		else
			maxport = i;
		break;

	case 'a':
		aggressiveness = atoi(optarg);
		if (aggressiveness <= 0) {
			fprintf(stderr,
				"aggressiveness must be a positive integer\n");
			usage();
			exit(2);
		}
		break;

	case 's':
		seeded = 1;
		seed = (unsigned int) atol(optarg);
		break;

	case 'T':
		if (templatefile != NULL) {
			fprintf(stderr, "template-file is already set\n");
			usage();
			exit(2);
		}
		templatefile = optarg;
		break;

	case 'O':
		rndoffset = atoi(optarg);
		if (rndoffset < 14) {
			fprintf(stderr,
				"random-offset must be greater than 14\n");
			usage();
			exit(2);
		}
		break;

	case 'x':
		diags = optarg;
		break;

	case 'P':
		i = atoi(optarg);
		if ((i <= 0) || (i > 65535)) {
			fprintf(stderr,
				"port must be a positive short integer\n");
			usage();
			exit(2);
		}
		port = (in_port_t) i;
		break;

	default:
		usage();
		exit(2);
	}

	/* adjust some global variables */
	if (ipversion == 0)
		ipversion = 4;
	if (rate == 0)
		rate = 100;
	if (xlast == 0)
		xlast = 60000;
	if (noreport == 0)
		report = 1;
	if ((curport != 0) && (maxport == 0))
		maxport = 65535;

	/* when required, print the internal view of the command line */
	if ((diags != NULL) && (strchr(diags, 'a') != NULL)) {
		if (udp)
			printf("UDP ");
		printf("IPv%d", ipversion);
		printf(" rate=%d", rate);
		if (edns0 != 0)
			printf(" EDNS0");
		if (report != 0)
			printf(" report=%d", report);
		if (range != 0) {
			if (strchr(diags, 'r') != NULL)
				printf(" range=0..%d [0x%x]",
				       range,
				       (unsigned int) maxrandom);
			else
				printf(" range=0..%d", range);
		}
		if (basecnt != 0)
			for (i = 0; i < basecnt; i++)
				printf(" base[%d]='%s'", i, base[i]);
		if (gotnumreq >= 0) {
			if ((numreq[0] == 0) && (numreq[1] != 0))
				printf(" num-request=*,%d", numreq[1]);
			if ((numreq[0] != 0) && (numreq[1] == 0))
				printf(" num-request=%d,*", numreq[0]);
			if ((numreq[0] != 0) && (numreq[1] != 0))
				printf(" num-request=%d,%d",
				       numreq[0], numreq[1]);
		}
		if (period != 0)
			printf(" test-period=%d", period);
		printf(" lost-time=%g,%g", losttime[0], losttime[1]);
		if (gotmaxloss == 0) {
			if (maxloss[0] != 0)
				printf(" max-loss=%d,*", maxloss[0]);
			if (maxploss[0] != 0.)
				printf(" max-loss=%2.2f%%,*", maxploss[0]);
		} else if (gotmaxloss == 1) {
			if (maxloss[0] != 0)
				printf(" max-loss=%d,", maxloss[0]);
			else if (maxploss[0] != 0.)
				printf(" max-loss=%2.2f%%,", maxploss[0]);
			else
				printf(" max-loss=*,");
			if (maxloss[1] != 0)
				printf("%d", maxloss[1]);
			else if (maxploss[1] != 0.)
				printf("%2.2f%%", maxploss[1]);
			else
				printf("*");
		}
		printf(" aggressiveness=%d", aggressiveness);
		if (seeded)
			printf(" seed=%u", seed);
		if (templatefile != NULL)
			printf(" template-file='%s'", templatefile);
		else if (ixann != 0)
			printf(" Xflag");
		if (rndoffset >= 0)
			printf(" rnd-offset=%d", rndoffset);
		printf(" diagnotic-selectors='%s'", diags);
		printf("\n");
	}

	/* check local address options */
	if ((localname == NULL) && (curport != 0)) {
		fprintf(stderr,
			"-l<local-addr> must be set to use -L<local-port>\n");
		usage();
		exit(2);
	}

	/* check template file options */
	if ((templatefile == NULL) && (rndoffset >= 0)) {
		fprintf(stderr,
			"-T<template-file> must be set to "
			"use -O<random-offset>\n");
		usage();
		exit(2);
	}

	/* check various template file(s) and other condition(s) options */
	if ((templatefile != NULL) && (range > 0) && (rndoffset < 0)) {
		fprintf(stderr,
			"-O<random-offset> must be set when "
			"-T<template-file> and -R<range> are used\n");
		usage();
		exit(2);
	}

	/* get the server argument */
	if (optind < argc - 1) {
		fprintf(stderr, "extra arguments?\n");
		usage();
		exit(2);
	}
	if (optind == argc - 1)
		servername = argv[optind];

	/* handle the local '-l' address/interface */
	if (localname != NULL) {
		/* given */
		getlocaladdr();
		if ((diags != NULL) && (strchr(diags, 'a') != NULL)) {
			printf("local-addr='%s'", localname);
			if (curport != 0)
				printf(" local-port='%d..%d'",
				       minport, maxport);
			printf("\n");
		}
	}

	/* get the server socket address */
	if (servername == NULL) {
		fprintf(stderr, "server is required\n");
		usage();
		exit(2);
	}
	getserveraddr(flags);

	/* finish local/server socket address stuff and print it */
	if ((diags != NULL) && (strchr(diags, 'a') != NULL))
		printf("server='%s'\n", servername);
	if ((localname != NULL) &&
	    (diags != NULL) && (strchr(diags, 'a') != NULL)) {
		char addr[NI_MAXHOST];

		ret = getnameinfo((struct sockaddr *) &localaddr,
				  sizeof(localaddr),
				  addr,
				  NI_MAXHOST,
				  NULL,
				  0,
				  NI_NUMERICHOST);
		if (ret != 0) {
			fprintf(stderr,
				"can't get the local address: %s\n",
				gai_strerror(ret));
			exit(1);
		}
		printf("local address='%s'\n", addr);
	}

	/* initialize exchange structures */
	inits();

	/* get the socket descriptor and template(s) */
	if (templatefile == NULL)
		build_template_query();
	else
		get_template_query();

	/* boot is done! */
	if (clock_gettime(CLOCK_REALTIME, &boot) < 0) {
		perror("clock_gettime(boot)");
		exit(1);
	}

	/* compute the next intermediate reporting date */
	if (report != 0) {
		dreport.tv_sec = boot.tv_sec + report;
		dreport.tv_nsec = boot.tv_nsec;
	}

	/* seed the random generator */
	if (seeded == 0)
		seed = (unsigned int) (boot.tv_sec + boot.tv_nsec);
	srandom(seed);

	/* required only before the interrupted flag check */
	(void) signal(SIGINT, interrupt);
	(void) signal(SIGTERM, terminate);

	/* threads */
	master = pthread_self();
	ret = pthread_create(&connector, NULL, connecting, NULL);
	if (ret != 0) {
		fprintf(stderr, "pthread_create: %s\n", strerror(ret));
		exit(1);
	}
	ret = pthread_create(&sender, NULL, sending, NULL);
	if (ret != 0) {
		fprintf(stderr, "pthread_create: %s\n", strerror(ret));
		exit(1);
	}
	ret = pthread_create(&receiver, NULL, receiving, NULL);
	if (ret != 0) {
		fprintf(stderr, "pthread_create: %s\n", strerror(ret));
		exit(1);
	}

	/* main loop */
	for (;;) {
		struct timespec now, ts;

		/* immediate loop exit conditions */
		if (interrupted) {
			if ((diags != NULL) && (strchr(diags, 'e') != NULL))
				printf("interrupted\n");
			break;
		}
		if (fatal) {
			if ((diags != NULL) && (strchr(diags, 'e') != NULL))
				printf("got a fatal error\n");
			break;
		}

		loops[0]++;

		/* get the date and use it */
		if (clock_gettime(CLOCK_REALTIME, &now) < 0) {
			perror("clock_gettime(now)");
			fatal = 1;
			continue;
		}
		if ((period != 0) &&
		    ((boot.tv_sec + period < now.tv_sec) ||
		     ((boot.tv_sec + period == now.tv_sec) &&
		      (boot.tv_nsec < now.tv_nsec)))) {
			if ((diags != NULL) && (strchr(diags, 'e') != NULL))
				printf("reached test-period\n");
			break;
		}
		if ((report != 0) &&
		    ((dreport.tv_sec < now.tv_sec) ||
		     ((dreport.tv_sec == now.tv_sec) &&
		      (dreport.tv_nsec < now.tv_nsec))))
			reporting();

		/* check receive loop exit conditions */
		if ((numreq[0] != 0) && ((int) xccount >= numreq[0])) {
			if ((diags != NULL) && (strchr(diags, 'e') != NULL))
				printf("reached num-connection\n");
			break;
		}
		if ((numreq[1] != 0) && ((int) xscount >= numreq[1])) {
			if ((diags != NULL) && (strchr(diags, 'e') != NULL))
				printf("reached num-query\n");
			break;
		}
		if ((maxloss[0] != 0) &&
		    ((int) (xccount - xscount) > maxloss[0])) {
			if ((diags != NULL) && (strchr(diags, 'e') != NULL))
				printf("reached max-loss "
				       "(connection/absolute)\n");
			break;
		}
		if ((maxloss[1] != 0) &&
		    ((int) (xscount - xrcount) > maxloss[1])) {
			if ((diags != NULL) && (strchr(diags, 'e') != NULL))
				printf("reached max-loss "
				       "(query/absolute)\n");
			break;
		}
		if ((maxploss[0] != 0.) &&
		    (xccount > 10) &&
		    (((100. * (xccount - xscount)) / xccount) > maxploss[1])) {
			if ((diags != NULL) && (strchr(diags, 'e') != NULL))
				printf("reached max-loss "
				       "(connection/percent)\n");
			break;
		}
		if ((maxploss[1] != 0.) &&
		    (xscount > 10) &&
		    (((100. * (xscount - xrcount)) / xscount) > maxploss[1])) {
			if ((diags != NULL) && (strchr(diags, 'e') != NULL))
				printf("reached max-loss "
				       "(query/percent)\n");
			break;
		}

		/* waiting 1ms */
		memset(&ts, 0, sizeof(ts));
		ts.tv_nsec = 1000000;
		(void) clock_nanosleep(CLOCK_REALTIME, 0, &ts, NULL);
	}

	/* after main loop: finished */
	if (clock_gettime(CLOCK_REALTIME, &finished) < 0)
		perror("clock_gettime(finished)");

	/* threads */
	(void) pthread_cancel(connector);
	(void) pthread_cancel(sender);
	(void) pthread_cancel(receiver);

	/* main statictics */
	printf("connect: %llu, sent: %llu, received: %llu\n",
	       (unsigned long long) xccount,
	       (unsigned long long) xscount,
	       (unsigned long long) xrcount);
	printf("embryonics: %lld (%.1f%%)\n",
	       (long long) (xccount - xscount),
	       (100. * (xccount - xscount)) / xccount);
	printf("drops: %lld (%.1f%%)\n",
	       (long long) (xscount - xrcount),
	       (100. * (xscount - xrcount)) / xscount);
	printf("total losses: %lld (%.1f%%)\n",
	       (long long) (xccount - xrcount),
	       (100. * (xccount - xrcount)) / xccount);
	printf("local limits: %llu, bad connects: %llu, "
	       "connect timeouts: %llu\n",
	       (unsigned long long) locallimit,
	       (unsigned long long) badconn,
	       (unsigned long long) collconn);
	printf("bad sends: %llu, bad recvs: %llu, recv timeouts: %llu\n",
	       (unsigned long long) badsent,
	       (unsigned long long) recverr,
	       (unsigned long long) collsent);
	printf("too shorts: %llu, bad IDs: %llu, not responses: %llu\n",
	       (unsigned long long) tooshort,
	       (unsigned long long) badid,
	       (unsigned long long) notresp);
	printf("rcode counters:\n noerror: %llu, formerr: %llu, "
	       "servfail: %llu\n "
	       "nxdomain: %llu, noimp: %llu, refused: %llu, others: %llu\n",
	       (unsigned long long) rcodes[NS_RCODE_NOERROR],
	       (unsigned long long) rcodes[NS_RCODE_FORMERR],
	       (unsigned long long) rcodes[NS_RCODE_SERVFAIL],
	       (unsigned long long) rcodes[NS_RCODE_NXDOMAIN],
	       (unsigned long long) rcodes[NS_RCODE_NOIMP],
	       (unsigned long long) rcodes[NS_RCODE_REFUSED],
	       (unsigned long long) rcodes[NS_RCODE_LAST]);

	/* print the rates */
	if (finished.tv_sec != 0) {
		double dall, erate[3];

		dall = (finished.tv_nsec - boot.tv_nsec) / 1e9;
		dall += finished.tv_sec - boot.tv_sec;
		erate[0] = xccount / dall;
		erate[1] = xscount / dall;
		erate[2] = xrcount / dall;
		printf("rates: %.0f,%.0f,%.0f (target %d)\n",
		       erate[0], erate[1], erate[2], rate);
	}

	/* rate processing instrumentation */
	if ((diags != NULL) && (strchr(diags, 'i') != NULL)) {
		printf("loops: %llu,%llu,%llu,%llu\n",
		       (unsigned long long) loops[0],
		       (unsigned long long) loops[1],
		       (unsigned long long) loops[2],
		       (unsigned long long) loops[3]);
		printf("shortwait: %llu,%llu,%llu\n",
		       (unsigned long long) shortwait[0],
		       (unsigned long long) shortwait[1],
		       (unsigned long long) shortwait[2]);
		printf("compconn: %llu, lateconn: %llu\n",
		       (unsigned long long) compconn,
		       (unsigned long long) lateconn);
		printf("badconn: %llu, collconn: %llu, "
		       "recverr: %llu, collsent: %llu\n",
		       (unsigned long long) badconn,
		       (unsigned long long) collconn,
		       (unsigned long long) recverr,
		       (unsigned long long) collsent);
		printf("memory: used(%d) / allocated(%d)\n",
		       xused, xlast);
	}

	/* round-time trip statistics */
	if (xrcount != 0) {
		double avg, stddev;

		avg = dsum / xrcount;
		stddev = sqrt(dsumsq / xrcount - avg * avg);
		printf("RTT: min/avg/max/stddev:  %.3f/%.3f/%.3f/%.3f ms\n",
		       dmin * 1e3, avg * 1e3, dmax * 1e3, stddev * 1e3);
	}
	printf("\n");

	/* template(s) */
	if ((diags != NULL) && (strchr(diags, 'T') != NULL)) {
		size_t n;

		printf("length = 0x%zx\n", length_query);
		if (random_query > 0)
			printf("random offset = %zu\n", random_query);
		printf("content:\n");
		for (n = 0; n < length_query; n++) {
			printf("%s%02hhx",
			       (n & 15) == 0 ? "" : " ",
			       template_query[n]);
			if ((n & 15) == 15)
				printf("\n");
		}
		if ((n & 15) != 15)
			printf("\n");
		printf("\n");
	}

	/* compute the exit code (and exit) */
	if (fatal)
		exit(1);
	else if ((xccount == xscount) && (xscount == xrcount))
		exit(0);
	else
		exit(3);
}