1999-09-23 17:43:51 +00:00
|
|
|
/*
|
2013-02-27 12:27:58 +11:00
|
|
|
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
1999-09-23 17:43:51 +00:00
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: MPL-2.0
|
2021-06-03 08:37:05 +02:00
|
|
|
*
|
1999-09-23 17:43:51 +00:00
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
|
2018-02-23 09:53:12 +01:00
|
|
|
*
|
1999-09-23 17:43:51 +00:00
|
|
|
* See the COPYRIGHT file distributed with this work for additional
|
|
|
|
* information regarding copyright ownership.
|
|
|
|
*/
|
|
|
|
|
2005-04-27 04:57:32 +00:00
|
|
|
/*! \file */
|
1999-09-23 17:43:51 +00:00
|
|
|
|
2000-04-28 01:12:23 +00:00
|
|
|
#include <isc/util.h>
|
1999-09-23 17:43:51 +00:00
|
|
|
|
|
|
|
#include <dns/log.h>
|
|
|
|
|
2005-04-27 04:57:32 +00:00
|
|
|
/*%
|
1999-09-23 17:43:51 +00:00
|
|
|
* When adding a new category, be sure to add the appropriate
|
2006-12-22 01:46:19 +00:00
|
|
|
* \#define to <dns/log.h>.
|
1999-09-23 17:43:51 +00:00
|
|
|
*/
|
2021-06-10 08:06:48 +02:00
|
|
|
isc_logcategory_t dns_categories[] = {
|
2023-03-22 16:57:54 -07:00
|
|
|
{ "notify", 0 }, { "database", 0 },
|
|
|
|
{ "security", 0 }, { "_placeholder", 0 },
|
|
|
|
{ "dnssec", 0 }, { "resolver", 0 },
|
|
|
|
{ "xfer-in", 0 }, { "xfer-out", 0 },
|
|
|
|
{ "dispatch", 0 }, { "lame-servers", 0 },
|
|
|
|
{ "edns-disabled", 0 }, { "rpz", 0 },
|
|
|
|
{ "rate-limit", 0 }, { "cname", 0 },
|
|
|
|
{ "spill", 0 }, { "dnstap", 0 },
|
|
|
|
{ "zoneload", 0 }, { "nsid", 0 },
|
|
|
|
{ "rpz-passthru", 0 }, { NULL, 0 }
|
1999-09-23 17:43:51 +00:00
|
|
|
};
|
|
|
|
|
2005-04-27 04:57:32 +00:00
|
|
|
/*%
|
1999-09-23 17:43:51 +00:00
|
|
|
* When adding a new module, be sure to add the appropriate
|
2006-12-22 01:46:19 +00:00
|
|
|
* \#define to <dns/log.h>.
|
1999-09-23 17:43:51 +00:00
|
|
|
*/
|
2021-06-10 08:06:48 +02:00
|
|
|
isc_logmodule_t dns_modules[] = {
|
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 14:31:35 +01:00
|
|
|
{ "dns/db", 0 }, { "dns/rbtdb", 0 }, { "dns/rbt", 0 },
|
|
|
|
{ "dns/rdata", 0 }, { "dns/master", 0 }, { "dns/message", 0 },
|
|
|
|
{ "dns/cache", 0 }, { "dns/config", 0 }, { "dns/resolver", 0 },
|
|
|
|
{ "dns/zone", 0 }, { "dns/journal", 0 }, { "dns/adb", 0 },
|
|
|
|
{ "dns/xfrin", 0 }, { "dns/xfrout", 0 }, { "dns/acl", 0 },
|
|
|
|
{ "dns/validator", 0 }, { "dns/dispatch", 0 }, { "dns/request", 0 },
|
|
|
|
{ "dns/masterdump", 0 }, { "dns/tsig", 0 }, { "dns/tkey", 0 },
|
|
|
|
{ "dns/sdb", 0 }, { "dns/diff", 0 }, { "dns/hints", 0 },
|
|
|
|
{ "dns/unused1", 0 }, { "dns/dlz", 0 }, { "dns/dnssec", 0 },
|
|
|
|
{ "dns/crypto", 0 }, { "dns/packets", 0 }, { "dns/nta", 0 },
|
|
|
|
{ "dns/dyndb", 0 }, { "dns/dnstap", 0 }, { "dns/ssu", 0 },
|
|
|
|
{ "dns/qp", 0 }, { NULL, 0 },
|
1999-09-23 17:43:51 +00:00
|
|
|
};
|
|
|
|
|
2021-06-10 08:06:48 +02:00
|
|
|
isc_log_t *dns_lctx = NULL;
|
1999-09-23 17:43:51 +00:00
|
|
|
|
2000-02-26 19:57:02 +00:00
|
|
|
void
|
2000-05-08 14:38:29 +00:00
|
|
|
dns_log_init(isc_log_t *lctx) {
|
2000-05-03 21:11:40 +00:00
|
|
|
REQUIRE(lctx != NULL);
|
1999-09-23 17:43:51 +00:00
|
|
|
|
2000-02-26 19:57:02 +00:00
|
|
|
isc_log_registercategories(lctx, dns_categories);
|
|
|
|
isc_log_registermodules(lctx, dns_modules);
|
2000-05-03 21:11:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2000-05-08 14:38:29 +00:00
|
|
|
dns_log_setcontext(isc_log_t *lctx) {
|
2000-02-26 19:57:02 +00:00
|
|
|
dns_lctx = lctx;
|
1999-09-23 17:43:51 +00:00
|
|
|
}
|