2018-08-07 10:46:53 -04:00
|
|
|
include $(top_srcdir)/Makefile.top
|
|
|
|
|
|
|
|
|
|
lib_LTLIBRARIES = libdns.la
|
|
|
|
|
|
|
|
|
|
nodist_libdns_ladir = $(includedir)/dns
|
|
|
|
|
nodist_libdns_la_HEADERS = \
|
|
|
|
|
include/dns/enumclass.h \
|
|
|
|
|
include/dns/enumtype.h \
|
|
|
|
|
include/dns/rdatastruct.h
|
|
|
|
|
|
|
|
|
|
nodist_libdns_la_SOURCES = \
|
|
|
|
|
$(nodist_libdns_la_HEADERS) \
|
|
|
|
|
code.h
|
|
|
|
|
|
2023-01-30 09:36:49 -05:00
|
|
|
BUILT_SOURCES += \
|
2018-08-07 10:46:53 -04:00
|
|
|
$(nodist_libdns_la_SOURCES)
|
|
|
|
|
|
2023-01-30 09:36:49 -05:00
|
|
|
CLEANFILES += \
|
2021-04-06 18:06:49 -04:00
|
|
|
$(nodist_libdns_la_SOURCES) \
|
|
|
|
|
gen$(BUILD_EXEEXT)
|
2018-08-07 10:46:53 -04:00
|
|
|
|
2022-01-25 04:43:41 -05:00
|
|
|
gen$(BUILD_EXEEXT): gen.c
|
|
|
|
|
$(CC_FOR_BUILD) -g -I. $(srcdir)/gen.c -o $@
|
2018-08-07 10:46:53 -04:00
|
|
|
|
2020-10-20 17:51:08 -04:00
|
|
|
EXTRA_DIST = \
|
2020-06-04 13:02:27 -04:00
|
|
|
dnstap.proto \
|
2021-01-07 07:23:52 -05:00
|
|
|
gen.c \
|
2020-06-04 13:02:27 -04:00
|
|
|
rdata/*
|
2018-08-07 10:46:53 -04:00
|
|
|
|
|
|
|
|
include/dns/enumtype.h: gen Makefile
|
|
|
|
|
mkdir -p include/dns
|
|
|
|
|
$(builddir)/gen -s $(srcdir) -t > $@
|
|
|
|
|
|
|
|
|
|
include/dns/enumclass.h: gen Makefile
|
|
|
|
|
mkdir -p include/dns
|
|
|
|
|
$(builddir)/gen -s $(srcdir) -c > $@
|
|
|
|
|
|
|
|
|
|
include/dns/rdatastruct.h: gen rdata/rdatastructpre.h rdata/rdatastructsuf.h Makefile
|
|
|
|
|
mkdir -p include/dns
|
|
|
|
|
$(builddir)/gen -s $(srcdir) -i \
|
|
|
|
|
-P $(srcdir)/rdata/rdatastructpre.h \
|
|
|
|
|
-S $(srcdir)/rdata/rdatastructsuf.h > $@
|
|
|
|
|
|
|
|
|
|
code.h: gen Makefile
|
|
|
|
|
$(builddir)/gen -s $(srcdir) > $@
|
|
|
|
|
|
|
|
|
|
libdns_ladir = $(includedir)/dns
|
|
|
|
|
libdns_la_HEADERS = \
|
|
|
|
|
include/dns/acl.h \
|
|
|
|
|
include/dns/adb.h \
|
|
|
|
|
include/dns/badcache.h \
|
|
|
|
|
include/dns/bit.h \
|
|
|
|
|
include/dns/byaddr.h \
|
|
|
|
|
include/dns/cache.h \
|
|
|
|
|
include/dns/callbacks.h \
|
|
|
|
|
include/dns/catz.h \
|
|
|
|
|
include/dns/cert.h \
|
|
|
|
|
include/dns/client.h \
|
|
|
|
|
include/dns/clientinfo.h \
|
|
|
|
|
include/dns/compress.h \
|
|
|
|
|
include/dns/db.h \
|
|
|
|
|
include/dns/dbiterator.h \
|
|
|
|
|
include/dns/diff.h \
|
|
|
|
|
include/dns/dispatch.h \
|
|
|
|
|
include/dns/dlz.h \
|
|
|
|
|
include/dns/dlz_dlopen.h \
|
|
|
|
|
include/dns/dns64.h \
|
|
|
|
|
include/dns/dnsrps.h \
|
|
|
|
|
include/dns/dnssec.h \
|
2025-07-26 00:17:20 -04:00
|
|
|
include/dns/dnstap.h \
|
2018-08-07 10:46:53 -04:00
|
|
|
include/dns/ds.h \
|
|
|
|
|
include/dns/dsdigest.h \
|
2025-07-26 00:17:20 -04:00
|
|
|
include/dns/dsync.h \
|
2018-08-07 10:46:53 -04:00
|
|
|
include/dns/dyndb.h \
|
|
|
|
|
include/dns/ecs.h \
|
2025-01-29 05:11:32 -05:00
|
|
|
include/dns/ede.h \
|
2018-08-07 10:46:53 -04:00
|
|
|
include/dns/edns.h \
|
|
|
|
|
include/dns/fixedname.h \
|
|
|
|
|
include/dns/forward.h \
|
|
|
|
|
include/dns/geoip.h \
|
|
|
|
|
include/dns/ipkeylist.h \
|
|
|
|
|
include/dns/iptable.h \
|
|
|
|
|
include/dns/journal.h \
|
|
|
|
|
include/dns/kasp.h \
|
|
|
|
|
include/dns/keydata.h \
|
|
|
|
|
include/dns/keyflags.h \
|
|
|
|
|
include/dns/keymgr.h \
|
2022-01-25 03:25:03 -05:00
|
|
|
include/dns/keystore.h \
|
2018-08-07 10:46:53 -04:00
|
|
|
include/dns/keytable.h \
|
|
|
|
|
include/dns/keyvalues.h \
|
|
|
|
|
include/dns/librpz.h \
|
|
|
|
|
include/dns/log.h \
|
|
|
|
|
include/dns/master.h \
|
|
|
|
|
include/dns/masterdump.h \
|
|
|
|
|
include/dns/message.h \
|
|
|
|
|
include/dns/name.h \
|
2023-08-16 15:08:53 -04:00
|
|
|
include/dns/nametree.h \
|
2018-08-07 10:46:53 -04:00
|
|
|
include/dns/ncache.h \
|
|
|
|
|
include/dns/nsec.h \
|
|
|
|
|
include/dns/nsec3.h \
|
|
|
|
|
include/dns/nta.h \
|
|
|
|
|
include/dns/opcode.h \
|
|
|
|
|
include/dns/order.h \
|
|
|
|
|
include/dns/peer.h \
|
|
|
|
|
include/dns/private.h \
|
Add a qp-trie data structure
A qp-trie is a kind of radix tree that is particularly well-suited to
DNS servers. I invented the qp-trie in 2015, based on Dan Bernstein's
crit-bit trees and Phil Bagwell's HAMT. https://dotat.at/prog/qp/
This code incorporates some new ideas that I prototyped using
NLnet Labs NSD in 2020 (optimizations for DNS names as keys)
and 2021 (custom allocator and garbage collector).
https://dotat.at/cgi/git/nsd.git
The BIND version of my qp-trie code has a number of improvements
compared to the prototype developed for NSD.
* The main omission in the prototype was the very sketchy outline of
how locking might work. Now the locking has been implemented,
using a reader/writer lock and a mutex. However, it is designed to
benefit from liburcu if that is available.
* The prototype was designed for two-version concurrency, one
version for readers and one for the writer. The new code supports
multiversion concurrency, to provide a basis for BIND's dbversion
machinery, so that updates are not blocked by long-running zone
transfers.
* There are now two kinds of transaction that modify the trie: an
`update` aims to support many very small zones without wasting
memory; a `write` avoids unnecessary allocation to help the
performance of many small changes to the cache.
* There is also a single-threaded interface for situations where
concurrent access is not necessary.
* The API makes better use of types to make it more clear which
operations are permitted when.
* The lookup table used to convert a DNS name to a qp-trie key is
now initialized by a run-time constructor instead of a programmer
using copy-and-paste. Key conversion is more flexible, so the
qp-trie can be used with keys other than DNS names.
* There has been much refactoring and re-arranging things to improve
the terminology and order of presentation in the code, and the
internal documentation has been moved from a comment into a file
of its own.
Some of the required functionality has been stripped out, to be
brought back later after the basics are known to work.
* Garbage collector performance statistics are missing.
* Fancy searches are missing, such as longest match and
nearest match.
* Iteration is missing.
* Search for update is missing, for cases where the caller needs to
know if the value object is mutable or not.
2022-05-09 09:31:35 -04:00
|
|
|
include/dns/qp.h \
|
2018-08-07 10:46:53 -04:00
|
|
|
include/dns/rbt.h \
|
|
|
|
|
include/dns/rcode.h \
|
|
|
|
|
include/dns/rdata.h \
|
|
|
|
|
include/dns/rdataclass.h \
|
|
|
|
|
include/dns/rdatalist.h \
|
|
|
|
|
include/dns/rdataset.h \
|
|
|
|
|
include/dns/rdatasetiter.h \
|
|
|
|
|
include/dns/rdataslab.h \
|
|
|
|
|
include/dns/rdatatype.h \
|
2022-10-26 08:38:19 -04:00
|
|
|
include/dns/remote.h \
|
2018-08-07 10:46:53 -04:00
|
|
|
include/dns/request.h \
|
|
|
|
|
include/dns/resolver.h \
|
|
|
|
|
include/dns/result.h \
|
|
|
|
|
include/dns/rootns.h \
|
|
|
|
|
include/dns/rpz.h \
|
|
|
|
|
include/dns/rriterator.h \
|
|
|
|
|
include/dns/rrl.h \
|
|
|
|
|
include/dns/sdlz.h \
|
|
|
|
|
include/dns/secalg.h \
|
|
|
|
|
include/dns/secproto.h \
|
2024-06-19 05:09:29 -04:00
|
|
|
include/dns/skr.h \
|
2018-08-07 10:46:53 -04:00
|
|
|
include/dns/soa.h \
|
|
|
|
|
include/dns/ssu.h \
|
|
|
|
|
include/dns/stats.h \
|
|
|
|
|
include/dns/time.h \
|
|
|
|
|
include/dns/tkey.h \
|
2023-01-05 03:12:35 -05:00
|
|
|
include/dns/trace.h \
|
2023-10-10 08:18:07 -04:00
|
|
|
include/dns/transport.h \
|
2018-08-07 10:46:53 -04:00
|
|
|
include/dns/tsig.h \
|
|
|
|
|
include/dns/ttl.h \
|
|
|
|
|
include/dns/types.h \
|
|
|
|
|
include/dns/update.h \
|
|
|
|
|
include/dns/validator.h \
|
|
|
|
|
include/dns/view.h \
|
|
|
|
|
include/dns/xfrin.h \
|
|
|
|
|
include/dns/zone.h \
|
|
|
|
|
include/dns/zonekey.h \
|
|
|
|
|
include/dns/zoneverify.h \
|
|
|
|
|
include/dns/zt.h
|
|
|
|
|
|
|
|
|
|
dstdir = $(includedir)/dst
|
|
|
|
|
dst_HEADERS = \
|
|
|
|
|
include/dst/dst.h \
|
2021-10-04 11:14:53 -04:00
|
|
|
include/dst/gssapi.h
|
2018-08-07 10:46:53 -04:00
|
|
|
|
2022-12-16 07:19:08 -05:00
|
|
|
irsdir = $(includedir)/irs
|
|
|
|
|
irs_HEADERS = \
|
|
|
|
|
include/irs/resconf.h
|
|
|
|
|
|
2018-08-07 10:46:53 -04:00
|
|
|
libdns_la_SOURCES = \
|
|
|
|
|
$(libdns_la_HEADERS) \
|
|
|
|
|
$(dst_HEADERS) \
|
2022-12-16 07:19:08 -05:00
|
|
|
$(irs_HEADERS) \
|
2018-08-07 10:46:53 -04:00
|
|
|
acl.c \
|
|
|
|
|
adb.c \
|
|
|
|
|
badcache.c \
|
|
|
|
|
byaddr.c \
|
|
|
|
|
cache.c \
|
|
|
|
|
callbacks.c \
|
|
|
|
|
catz.c \
|
Add a qp-trie data structure
A qp-trie is a kind of radix tree that is particularly well-suited to
DNS servers. I invented the qp-trie in 2015, based on Dan Bernstein's
crit-bit trees and Phil Bagwell's HAMT. https://dotat.at/prog/qp/
This code incorporates some new ideas that I prototyped using
NLnet Labs NSD in 2020 (optimizations for DNS names as keys)
and 2021 (custom allocator and garbage collector).
https://dotat.at/cgi/git/nsd.git
The BIND version of my qp-trie code has a number of improvements
compared to the prototype developed for NSD.
* The main omission in the prototype was the very sketchy outline of
how locking might work. Now the locking has been implemented,
using a reader/writer lock and a mutex. However, it is designed to
benefit from liburcu if that is available.
* The prototype was designed for two-version concurrency, one
version for readers and one for the writer. The new code supports
multiversion concurrency, to provide a basis for BIND's dbversion
machinery, so that updates are not blocked by long-running zone
transfers.
* There are now two kinds of transaction that modify the trie: an
`update` aims to support many very small zones without wasting
memory; a `write` avoids unnecessary allocation to help the
performance of many small changes to the cache.
* There is also a single-threaded interface for situations where
concurrent access is not necessary.
* The API makes better use of types to make it more clear which
operations are permitted when.
* The lookup table used to convert a DNS name to a qp-trie key is
now initialized by a run-time constructor instead of a programmer
using copy-and-paste. Key conversion is more flexible, so the
qp-trie can be used with keys other than DNS names.
* There has been much refactoring and re-arranging things to improve
the terminology and order of presentation in the code, and the
internal documentation has been moved from a comment into a file
of its own.
Some of the required functionality has been stripped out, to be
brought back later after the basics are known to work.
* Garbage collector performance statistics are missing.
* Fancy searches are missing, such as longest match and
nearest match.
* Iteration is missing.
* Search for update is missing, for cases where the caller needs to
know if the value object is mutable or not.
2022-05-09 09:31:35 -04:00
|
|
|
client.c \
|
2018-08-07 10:46:53 -04:00
|
|
|
clientinfo.c \
|
|
|
|
|
compress.c \
|
|
|
|
|
db.c \
|
2023-10-01 04:06:49 -04:00
|
|
|
db_p.h \
|
2018-08-07 10:46:53 -04:00
|
|
|
dbiterator.c \
|
|
|
|
|
diff.c \
|
|
|
|
|
dispatch.c \
|
|
|
|
|
dlz.c \
|
|
|
|
|
dns64.c \
|
|
|
|
|
dnsrps.c \
|
|
|
|
|
dnssec.c \
|
|
|
|
|
ds.c \
|
|
|
|
|
dst_api.c \
|
|
|
|
|
dst_internal.h \
|
|
|
|
|
dst_openssl.h \
|
|
|
|
|
dst_parse.c \
|
|
|
|
|
dst_parse.h \
|
|
|
|
|
dyndb.c \
|
|
|
|
|
ecs.c \
|
2025-01-29 05:11:32 -05:00
|
|
|
ede.c \
|
2018-08-07 10:46:53 -04:00
|
|
|
fixedname.c \
|
|
|
|
|
forward.c \
|
2020-05-20 10:06:18 -04:00
|
|
|
gssapictx.c \
|
2018-08-07 10:46:53 -04:00
|
|
|
hmac_link.c \
|
|
|
|
|
ipkeylist.c \
|
|
|
|
|
iptable.c \
|
|
|
|
|
journal.c \
|
|
|
|
|
kasp.c \
|
|
|
|
|
key.c \
|
|
|
|
|
keydata.c \
|
|
|
|
|
keymgr.c \
|
2022-01-25 03:25:03 -05:00
|
|
|
keystore.c \
|
2018-08-07 10:46:53 -04:00
|
|
|
keytable.c \
|
|
|
|
|
log.c \
|
|
|
|
|
master.c \
|
|
|
|
|
masterdump.c \
|
|
|
|
|
message.c \
|
|
|
|
|
name.c \
|
2023-08-16 15:08:53 -04:00
|
|
|
nametree.c \
|
2018-08-07 10:46:53 -04:00
|
|
|
ncache.c \
|
|
|
|
|
nsec.c \
|
|
|
|
|
nsec3.c \
|
|
|
|
|
nta.c \
|
|
|
|
|
openssl_link.c \
|
2021-09-05 05:41:00 -04:00
|
|
|
openssl_shim.c \
|
|
|
|
|
openssl_shim.h \
|
2021-05-20 10:26:53 -04:00
|
|
|
opensslecdsa_link.c \
|
|
|
|
|
openssleddsa_link.c \
|
|
|
|
|
opensslrsa_link.c \
|
2018-08-07 10:46:53 -04:00
|
|
|
order.c \
|
|
|
|
|
peer.c \
|
|
|
|
|
private.c \
|
2023-01-30 09:36:49 -05:00
|
|
|
probes.d \
|
Add a qp-trie data structure
A qp-trie is a kind of radix tree that is particularly well-suited to
DNS servers. I invented the qp-trie in 2015, based on Dan Bernstein's
crit-bit trees and Phil Bagwell's HAMT. https://dotat.at/prog/qp/
This code incorporates some new ideas that I prototyped using
NLnet Labs NSD in 2020 (optimizations for DNS names as keys)
and 2021 (custom allocator and garbage collector).
https://dotat.at/cgi/git/nsd.git
The BIND version of my qp-trie code has a number of improvements
compared to the prototype developed for NSD.
* The main omission in the prototype was the very sketchy outline of
how locking might work. Now the locking has been implemented,
using a reader/writer lock and a mutex. However, it is designed to
benefit from liburcu if that is available.
* The prototype was designed for two-version concurrency, one
version for readers and one for the writer. The new code supports
multiversion concurrency, to provide a basis for BIND's dbversion
machinery, so that updates are not blocked by long-running zone
transfers.
* There are now two kinds of transaction that modify the trie: an
`update` aims to support many very small zones without wasting
memory; a `write` avoids unnecessary allocation to help the
performance of many small changes to the cache.
* There is also a single-threaded interface for situations where
concurrent access is not necessary.
* The API makes better use of types to make it more clear which
operations are permitted when.
* The lookup table used to convert a DNS name to a qp-trie key is
now initialized by a run-time constructor instead of a programmer
using copy-and-paste. Key conversion is more flexible, so the
qp-trie can be used with keys other than DNS names.
* There has been much refactoring and re-arranging things to improve
the terminology and order of presentation in the code, and the
internal documentation has been moved from a comment into a file
of its own.
Some of the required functionality has been stripped out, to be
brought back later after the basics are known to work.
* Garbage collector performance statistics are missing.
* Fancy searches are missing, such as longest match and
nearest match.
* Iteration is missing.
* Search for update is missing, for cases where the caller needs to
know if the value object is mutable or not.
2022-05-09 09:31:35 -04:00
|
|
|
qp.c \
|
|
|
|
|
qp_p.h \
|
2023-10-03 21:55:24 -04:00
|
|
|
qpzone_p.h \
|
|
|
|
|
qpzone.c \
|
2018-08-07 10:46:53 -04:00
|
|
|
rbt.c \
|
2023-05-13 02:01:01 -04:00
|
|
|
rbt-cachedb.c \
|
2023-05-10 02:07:50 -04:00
|
|
|
rbt-zonedb.c \
|
2018-08-07 10:46:53 -04:00
|
|
|
rbtdb.c \
|
2024-01-09 10:18:57 -05:00
|
|
|
rbtdb_p.h \
|
2024-03-06 20:54:37 -05:00
|
|
|
qpcache.c \
|
|
|
|
|
qpcache_p.h \
|
2018-08-07 10:46:53 -04:00
|
|
|
rcode.c \
|
|
|
|
|
rdata.c \
|
|
|
|
|
rdatalist.c \
|
|
|
|
|
rdataset.c \
|
|
|
|
|
rdatasetiter.c \
|
|
|
|
|
rdataslab.c \
|
2022-10-26 08:38:19 -04:00
|
|
|
remote.c \
|
2018-08-07 10:46:53 -04:00
|
|
|
request.c \
|
2022-12-16 07:19:08 -05:00
|
|
|
resconf.c \
|
2018-08-07 10:46:53 -04:00
|
|
|
resolver.c \
|
|
|
|
|
result.c \
|
|
|
|
|
rootns.c \
|
|
|
|
|
rpz.c \
|
|
|
|
|
rrl.c \
|
|
|
|
|
rriterator.c \
|
|
|
|
|
sdlz.c \
|
2024-06-19 05:09:29 -04:00
|
|
|
skr.c \
|
2018-08-07 10:46:53 -04:00
|
|
|
soa.c \
|
|
|
|
|
ssu.c \
|
|
|
|
|
ssu_external.c \
|
|
|
|
|
stats.c \
|
|
|
|
|
time.c \
|
2021-01-14 06:51:25 -05:00
|
|
|
transport.c \
|
2018-08-07 10:46:53 -04:00
|
|
|
tkey.c \
|
|
|
|
|
tsig.c \
|
Add a qp-trie data structure
A qp-trie is a kind of radix tree that is particularly well-suited to
DNS servers. I invented the qp-trie in 2015, based on Dan Bernstein's
crit-bit trees and Phil Bagwell's HAMT. https://dotat.at/prog/qp/
This code incorporates some new ideas that I prototyped using
NLnet Labs NSD in 2020 (optimizations for DNS names as keys)
and 2021 (custom allocator and garbage collector).
https://dotat.at/cgi/git/nsd.git
The BIND version of my qp-trie code has a number of improvements
compared to the prototype developed for NSD.
* The main omission in the prototype was the very sketchy outline of
how locking might work. Now the locking has been implemented,
using a reader/writer lock and a mutex. However, it is designed to
benefit from liburcu if that is available.
* The prototype was designed for two-version concurrency, one
version for readers and one for the writer. The new code supports
multiversion concurrency, to provide a basis for BIND's dbversion
machinery, so that updates are not blocked by long-running zone
transfers.
* There are now two kinds of transaction that modify the trie: an
`update` aims to support many very small zones without wasting
memory; a `write` avoids unnecessary allocation to help the
performance of many small changes to the cache.
* There is also a single-threaded interface for situations where
concurrent access is not necessary.
* The API makes better use of types to make it more clear which
operations are permitted when.
* The lookup table used to convert a DNS name to a qp-trie key is
now initialized by a run-time constructor instead of a programmer
using copy-and-paste. Key conversion is more flexible, so the
qp-trie can be used with keys other than DNS names.
* There has been much refactoring and re-arranging things to improve
the terminology and order of presentation in the code, and the
internal documentation has been moved from a comment into a file
of its own.
Some of the required functionality has been stripped out, to be
brought back later after the basics are known to work.
* Garbage collector performance statistics are missing.
* Fancy searches are missing, such as longest match and
nearest match.
* Iteration is missing.
* Search for update is missing, for cases where the caller needs to
know if the value object is mutable or not.
2022-05-09 09:31:35 -04:00
|
|
|
tsig_p.h \
|
2018-08-07 10:46:53 -04:00
|
|
|
ttl.c \
|
|
|
|
|
update.c \
|
|
|
|
|
validator.c \
|
|
|
|
|
view.c \
|
|
|
|
|
xfrin.c \
|
|
|
|
|
zone.c \
|
Add a qp-trie data structure
A qp-trie is a kind of radix tree that is particularly well-suited to
DNS servers. I invented the qp-trie in 2015, based on Dan Bernstein's
crit-bit trees and Phil Bagwell's HAMT. https://dotat.at/prog/qp/
This code incorporates some new ideas that I prototyped using
NLnet Labs NSD in 2020 (optimizations for DNS names as keys)
and 2021 (custom allocator and garbage collector).
https://dotat.at/cgi/git/nsd.git
The BIND version of my qp-trie code has a number of improvements
compared to the prototype developed for NSD.
* The main omission in the prototype was the very sketchy outline of
how locking might work. Now the locking has been implemented,
using a reader/writer lock and a mutex. However, it is designed to
benefit from liburcu if that is available.
* The prototype was designed for two-version concurrency, one
version for readers and one for the writer. The new code supports
multiversion concurrency, to provide a basis for BIND's dbversion
machinery, so that updates are not blocked by long-running zone
transfers.
* There are now two kinds of transaction that modify the trie: an
`update` aims to support many very small zones without wasting
memory; a `write` avoids unnecessary allocation to help the
performance of many small changes to the cache.
* There is also a single-threaded interface for situations where
concurrent access is not necessary.
* The API makes better use of types to make it more clear which
operations are permitted when.
* The lookup table used to convert a DNS name to a qp-trie key is
now initialized by a run-time constructor instead of a programmer
using copy-and-paste. Key conversion is more flexible, so the
qp-trie can be used with keys other than DNS names.
* There has been much refactoring and re-arranging things to improve
the terminology and order of presentation in the code, and the
internal documentation has been moved from a comment into a file
of its own.
Some of the required functionality has been stripped out, to be
brought back later after the basics are known to work.
* Garbage collector performance statistics are missing.
* Fancy searches are missing, such as longest match and
nearest match.
* Iteration is missing.
* Search for update is missing, for cases where the caller needs to
know if the value object is mutable or not.
2022-05-09 09:31:35 -04:00
|
|
|
zone_p.h \
|
2018-08-07 10:46:53 -04:00
|
|
|
zoneverify.c \
|
|
|
|
|
zonekey.c \
|
Add a qp-trie data structure
A qp-trie is a kind of radix tree that is particularly well-suited to
DNS servers. I invented the qp-trie in 2015, based on Dan Bernstein's
crit-bit trees and Phil Bagwell's HAMT. https://dotat.at/prog/qp/
This code incorporates some new ideas that I prototyped using
NLnet Labs NSD in 2020 (optimizations for DNS names as keys)
and 2021 (custom allocator and garbage collector).
https://dotat.at/cgi/git/nsd.git
The BIND version of my qp-trie code has a number of improvements
compared to the prototype developed for NSD.
* The main omission in the prototype was the very sketchy outline of
how locking might work. Now the locking has been implemented,
using a reader/writer lock and a mutex. However, it is designed to
benefit from liburcu if that is available.
* The prototype was designed for two-version concurrency, one
version for readers and one for the writer. The new code supports
multiversion concurrency, to provide a basis for BIND's dbversion
machinery, so that updates are not blocked by long-running zone
transfers.
* There are now two kinds of transaction that modify the trie: an
`update` aims to support many very small zones without wasting
memory; a `write` avoids unnecessary allocation to help the
performance of many small changes to the cache.
* There is also a single-threaded interface for situations where
concurrent access is not necessary.
* The API makes better use of types to make it more clear which
operations are permitted when.
* The lookup table used to convert a DNS name to a qp-trie key is
now initialized by a run-time constructor instead of a programmer
using copy-and-paste. Key conversion is more flexible, so the
qp-trie can be used with keys other than DNS names.
* There has been much refactoring and re-arranging things to improve
the terminology and order of presentation in the code, and the
internal documentation has been moved from a comment into a file
of its own.
Some of the required functionality has been stripped out, to be
brought back later after the basics are known to work.
* Garbage collector performance statistics are missing.
* Fancy searches are missing, such as longest match and
nearest match.
* Iteration is missing.
* Search for update is missing, for cases where the caller needs to
know if the value object is mutable or not.
2022-05-09 09:31:35 -04:00
|
|
|
zt.c
|
2018-08-07 10:46:53 -04:00
|
|
|
|
|
|
|
|
if HAVE_GSSAPI
|
|
|
|
|
libdns_la_SOURCES += \
|
2020-05-20 10:06:18 -04:00
|
|
|
gssapi_link.c
|
2018-08-07 10:46:53 -04:00
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if HAVE_GEOIP2
|
|
|
|
|
libdns_la_SOURCES += \
|
|
|
|
|
geoip2.c
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
libdns_la_CPPFLAGS = \
|
|
|
|
|
$(AM_CPPFLAGS) \
|
|
|
|
|
$(LIBDNS_CFLAGS) \
|
2020-10-20 17:51:08 -04:00
|
|
|
$(LIBISC_CFLAGS) \
|
2023-03-08 09:28:06 -05:00
|
|
|
$(LIBURCU_CFLAGS) \
|
2020-10-20 17:51:08 -04:00
|
|
|
$(LIBUV_CFLAGS) \
|
|
|
|
|
$(OPENSSL_CFLAGS)
|
2018-08-07 10:46:53 -04:00
|
|
|
|
|
|
|
|
libdns_la_LDFLAGS = \
|
2020-09-28 03:09:21 -04:00
|
|
|
$(AM_LDFLAGS) \
|
2021-01-12 07:38:44 -05:00
|
|
|
-release "$(PACKAGE_VERSION)"
|
2018-08-07 10:46:53 -04:00
|
|
|
|
|
|
|
|
libdns_la_LIBADD = \
|
|
|
|
|
$(LIBISC_LIBS) \
|
2023-03-08 09:28:06 -05:00
|
|
|
$(LIBURCU_LIBS) \
|
2020-10-20 17:51:08 -04:00
|
|
|
$(LIBUV_LIBS) \
|
2020-04-30 09:33:44 -04:00
|
|
|
$(OPENSSL_LIBS)
|
2018-08-07 10:46:53 -04:00
|
|
|
|
|
|
|
|
if HAVE_JSON_C
|
|
|
|
|
libdns_la_CPPFLAGS += \
|
|
|
|
|
$(JSON_C_CFLAGS)
|
|
|
|
|
|
|
|
|
|
libdns_la_LIBADD += \
|
|
|
|
|
$(JSON_C_LIBS)
|
|
|
|
|
endif HAVE_JSON_C
|
|
|
|
|
|
|
|
|
|
if HAVE_LIBXML2
|
|
|
|
|
libdns_la_CPPFLAGS += \
|
|
|
|
|
$(LIBXML2_CFLAGS)
|
|
|
|
|
|
|
|
|
|
libdns_la_LIBADD += \
|
|
|
|
|
$(LIBXML2_LIBS)
|
|
|
|
|
endif HAVE_LIBXML2
|
|
|
|
|
|
|
|
|
|
if HAVE_GSSAPI
|
|
|
|
|
libdns_la_CPPFLAGS += \
|
|
|
|
|
$(GSSAPI_CFLAGS) \
|
|
|
|
|
$(KRB5_CFLAGS)
|
|
|
|
|
libdns_la_LIBADD += \
|
|
|
|
|
$(GSSAPI_LIBS) \
|
|
|
|
|
$(KRB5_LIBS)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if HAVE_GEOIP2
|
|
|
|
|
libdns_la_CPPFLAGS += \
|
|
|
|
|
$(MAXMINDDB_CFLAGS)
|
2021-12-20 04:23:17 -05:00
|
|
|
libdns_la_LIBADD += \
|
2018-08-07 10:46:53 -04:00
|
|
|
$(MAXMINDDB_LIBS)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if HAVE_DNSTAP
|
|
|
|
|
nodist_libdns_la_SOURCES += \
|
|
|
|
|
dnstap.pb-c.h \
|
|
|
|
|
dnstap.pb-c.c
|
|
|
|
|
|
|
|
|
|
libdns_la_SOURCES += \
|
|
|
|
|
dnstap.c
|
|
|
|
|
|
|
|
|
|
dnstap.pb-c.h dnstap.pb-c.c: dnstap.proto
|
|
|
|
|
$(PROTOC_C) --proto_path=$(srcdir) --c_out=. dnstap.proto
|
|
|
|
|
|
|
|
|
|
libdns_la_CPPFLAGS += $(DNSTAP_CFLAGS)
|
|
|
|
|
libdns_la_LIBADD += $(DNSTAP_LIBS)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if HAVE_LMDB
|
|
|
|
|
libdns_la_CPPFLAGS += $(LMDB_CFLAGS)
|
|
|
|
|
libdns_la_LIBADD += $(LMDB_LIBS)
|
|
|
|
|
endif
|
2023-01-30 09:36:49 -05:00
|
|
|
|
|
|
|
|
if !HAVE_SYSTEMTAP
|
|
|
|
|
DTRACE_DEPS = libdns_la-xfrin.lo
|
|
|
|
|
DTRACE_OBJS = .libs/libdns_la-xfrin.$(OBJEXT)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
include $(top_srcdir)/Makefile.dtrace
|
|
|
|
|
|
|
|
|
|
libdns_la_LIBADD += $(DTRACE_LIBADD)
|