mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
Merge branch 'ondrej/use-cds_lfht-for-dns_dispatch' into 'main'
Rewrite the QID lookup table to cds_lfht See merge request isc-projects/bind9!8304
This commit is contained in:
commit
b0b0aac505
24 changed files with 452 additions and 561 deletions
7
CHANGES
7
CHANGES
|
|
@ -1,3 +1,10 @@
|
|||
6249. [cleanup] Reduce the number of reserved UDP dispatches
|
||||
to the number of loops, replace the round-robin
|
||||
mechanism in dns_dispatchset_t with dispatches
|
||||
pinned to loops, and use lock-free hash tables
|
||||
for looking up query IDs and active TCP
|
||||
connections. [GL !8304]
|
||||
|
||||
6248. [func] Add an option "resolver-use-dns64", which enables
|
||||
application of DNS64 rules to server addresses
|
||||
when sending recursive queries. This allows
|
||||
|
|
|
|||
|
|
@ -2142,7 +2142,7 @@ run_server(void *arg) {
|
|||
|
||||
ns_server_create(mctx, matchview, &sctx);
|
||||
|
||||
CHECK(dns_dispatchmgr_create(mctx, netmgr, &dispatchmgr));
|
||||
CHECK(dns_dispatchmgr_create(mctx, loopmgr, netmgr, &dispatchmgr));
|
||||
isc_sockaddr_any(&any);
|
||||
CHECK(dns_dispatch_createudp(dispatchmgr, &any, &dispatch));
|
||||
CHECK(ns_interfacemgr_create(mctx, sctx, loopmgr, netmgr, dispatchmgr,
|
||||
|
|
@ -2165,7 +2165,7 @@ run_server(void *arg) {
|
|||
dns_view_initsecroots(view);
|
||||
CHECK(setup_dnsseckeys(NULL, view));
|
||||
|
||||
CHECK(dns_view_createresolver(view, loopmgr, 1, netmgr, 0,
|
||||
CHECK(dns_view_createresolver(view, loopmgr, netmgr, 0,
|
||||
tlsctx_client_cache, dispatch, NULL));
|
||||
|
||||
isc_stats_create(mctx, &resstats, dns_resstatscounter_max);
|
||||
|
|
|
|||
|
|
@ -50,7 +50,6 @@
|
|||
|
||||
EXTERN isc_mem_t *named_g_mctx INIT(NULL);
|
||||
EXTERN unsigned int named_g_cpus INIT(0);
|
||||
EXTERN unsigned int named_g_udpdisp INIT(0);
|
||||
EXTERN isc_loop_t *named_g_mainloop INIT(NULL);
|
||||
EXTERN isc_loopmgr_t *named_g_loopmgr INIT(NULL);
|
||||
EXTERN bool named_g_loopmgr_running INIT(false);
|
||||
|
|
|
|||
|
|
@ -949,9 +949,7 @@ parse_command_line(int argc, char *argv[]) {
|
|||
parse_T_opt(isc_commandline_argument);
|
||||
break;
|
||||
case 'U':
|
||||
named_g_udpdisp = parse_int(isc_commandline_argument,
|
||||
"number of UDP listeners "
|
||||
"per interface");
|
||||
/* Obsolete. No longer in use. Ignore. */
|
||||
break;
|
||||
case 'u':
|
||||
named_g_username = isc_commandline_argument;
|
||||
|
|
@ -1044,16 +1042,6 @@ create_managers(void) {
|
|||
ISC_LOG_INFO, "found %u CPU%s, using %u worker thread%s",
|
||||
named_g_cpus_detected, named_g_cpus_detected == 1 ? "" : "s",
|
||||
named_g_cpus, named_g_cpus == 1 ? "" : "s");
|
||||
if (named_g_udpdisp == 0) {
|
||||
named_g_udpdisp = named_g_cpus_detected;
|
||||
}
|
||||
if (named_g_udpdisp > named_g_cpus) {
|
||||
named_g_udpdisp = named_g_cpus;
|
||||
}
|
||||
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
|
||||
NAMED_LOGMODULE_SERVER, ISC_LOG_INFO,
|
||||
"using %u UDP listener%s per interface", named_g_udpdisp,
|
||||
named_g_udpdisp == 1 ? "" : "s");
|
||||
|
||||
isc_managers_create(&named_g_mctx, named_g_cpus, &named_g_loopmgr,
|
||||
&named_g_netmgr);
|
||||
|
|
|
|||
|
|
@ -1312,8 +1312,8 @@ get_view_querysource_dispatch(const cfg_obj_t **maps, int af,
|
|||
isc_sockaddr_format(&sa, buf, sizeof(buf));
|
||||
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
|
||||
NAMED_LOGMODULE_SERVER, ISC_LOG_ERROR,
|
||||
"could not get query source dispatcher (%s)",
|
||||
buf);
|
||||
"could not get query source dispatcher (%s): %s",
|
||||
buf, isc_result_totext(result));
|
||||
return (result);
|
||||
}
|
||||
|
||||
|
|
@ -4033,7 +4033,7 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, cfg_obj_t *config,
|
|||
named_cache_t *nsc;
|
||||
bool zero_no_soattl;
|
||||
dns_acl_t *clients = NULL, *mapped = NULL, *excluded = NULL;
|
||||
unsigned int query_timeout, ndisp;
|
||||
unsigned int query_timeout;
|
||||
bool old_rpz_ok = false;
|
||||
dns_dyndbctx_t *dctx = NULL;
|
||||
unsigned int resolver_param;
|
||||
|
|
@ -4685,9 +4685,8 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, cfg_obj_t *config,
|
|||
goto cleanup;
|
||||
}
|
||||
|
||||
ndisp = 4 * ISC_MIN(named_g_udpdisp, MAX_UDP_DISPATCH);
|
||||
CHECK(dns_view_createresolver(
|
||||
view, named_g_loopmgr, ndisp, named_g_netmgr, resopts,
|
||||
view, named_g_loopmgr, named_g_netmgr, resopts,
|
||||
named_g_server->tlsctx_client_cache, dispatch4, dispatch6));
|
||||
|
||||
if (resstats == NULL) {
|
||||
|
|
@ -9898,8 +9897,8 @@ run_server(void *arg) {
|
|||
dns_zonemgr_create(named_g_mctx, named_g_loopmgr, named_g_netmgr,
|
||||
&server->zonemgr);
|
||||
|
||||
CHECKFATAL(dns_dispatchmgr_create(named_g_mctx, named_g_netmgr,
|
||||
&named_g_dispatchmgr),
|
||||
CHECKFATAL(dns_dispatchmgr_create(named_g_mctx, named_g_loopmgr,
|
||||
named_g_netmgr, &named_g_dispatchmgr),
|
||||
"creating dispatch manager");
|
||||
|
||||
dns_dispatchmgr_setstats(named_g_dispatchmgr, server->resolverstats);
|
||||
|
|
@ -12148,10 +12147,6 @@ named_server_status(named_server_t *server, isc_buffer_t **text) {
|
|||
snprintf(line, sizeof(line), "worker threads: %u\n", named_g_cpus);
|
||||
CHECK(putstr(text, line));
|
||||
|
||||
snprintf(line, sizeof(line), "UDP listeners per interface: %u\n",
|
||||
named_g_udpdisp);
|
||||
CHECK(putstr(text, line));
|
||||
|
||||
snprintf(line, sizeof(line), "number of zones: %u (%u automatic)\n",
|
||||
zonecount, automatic);
|
||||
CHECK(putstr(text, line));
|
||||
|
|
|
|||
|
|
@ -798,7 +798,7 @@ create_name(const char *str, char *namedata, size_t len, dns_name_t *name) {
|
|||
}
|
||||
|
||||
static void
|
||||
setup_system(void) {
|
||||
setup_system(void *arg ISC_ATTR_UNUSED) {
|
||||
isc_result_t result;
|
||||
isc_sockaddr_t bind_any, bind_any6;
|
||||
isc_sockaddrlist_t *nslist;
|
||||
|
|
@ -919,7 +919,7 @@ setup_system(void) {
|
|||
|
||||
irs_resconf_destroy(&resconf);
|
||||
|
||||
result = dns_dispatchmgr_create(gmctx, netmgr, &dispatchmgr);
|
||||
result = dns_dispatchmgr_create(gmctx, loopmgr, netmgr, &dispatchmgr);
|
||||
check_result(result, "dns_dispatchmgr_create");
|
||||
|
||||
result = dst_lib_init(gmctx, NULL);
|
||||
|
|
@ -3475,8 +3475,7 @@ main(int argc, char **argv) {
|
|||
timeoutms = timeout * 1000;
|
||||
isc_nm_settimeouts(netmgr, timeoutms, timeoutms, timeoutms, timeoutms);
|
||||
|
||||
setup_system();
|
||||
|
||||
isc_loopmgr_setup(loopmgr, setup_system, NULL);
|
||||
isc_loopmgr_setup(loopmgr, getinput, NULL);
|
||||
isc_loopmgr_teardown(loopmgr, shutdown_program, NULL);
|
||||
isc_loopmgr_run(loopmgr);
|
||||
|
|
|
|||
|
|
@ -275,7 +275,7 @@ main(int argc, char *argv[]) {
|
|||
|
||||
RUNCHECK(dst_lib_init(mctx, NULL));
|
||||
|
||||
RUNCHECK(dns_dispatchmgr_create(mctx, netmgr, &dispatchmgr));
|
||||
RUNCHECK(dns_dispatchmgr_create(mctx, loopmgr, netmgr, &dispatchmgr));
|
||||
|
||||
RUNCHECK(dns_dispatch_createudp(
|
||||
dispatchmgr, have_src ? &srcaddr : &bind_any, &dispatchv4));
|
||||
|
|
|
|||
|
|
@ -116,6 +116,12 @@ static unsigned char cookie_secret[33];
|
|||
static int onfly = 0;
|
||||
static char hexcookie[81];
|
||||
|
||||
static isc_sockaddr_t bind_any;
|
||||
static isc_nm_t *netmgr = NULL;
|
||||
static dns_dispatchmgr_t *dispatchmgr = NULL;
|
||||
static dns_dispatch_t *dispatchvx = NULL;
|
||||
static dns_view_t *view = NULL;
|
||||
|
||||
struct query {
|
||||
char textname[MXNAME]; /*% Name we're going to be
|
||||
* looking up */
|
||||
|
|
@ -2069,43 +2075,42 @@ set_source_ports(dns_dispatchmgr_t *manager) {
|
|||
}
|
||||
|
||||
static void
|
||||
teardown_view(void *arg) {
|
||||
dns_view_t *view = arg;
|
||||
teardown(void *arg ISC_ATTR_UNUSED) {
|
||||
dns_view_detach(&view);
|
||||
}
|
||||
|
||||
static void
|
||||
teardown_requestmgr(void *arg) {
|
||||
dns_requestmgr_t *mgr = arg;
|
||||
|
||||
dns_requestmgr_shutdown(mgr);
|
||||
dns_requestmgr_detach(&mgr);
|
||||
}
|
||||
|
||||
static void
|
||||
teardown_dispatch(void *arg) {
|
||||
dns_dispatch_t *dispatchv4 = arg;
|
||||
dns_dispatch_detach(&dispatchv4);
|
||||
}
|
||||
|
||||
static void
|
||||
teardown_dispatchmgr(void *arg) {
|
||||
dns_dispatchmgr_t *dispatchmgr = arg;
|
||||
dns_requestmgr_shutdown(requestmgr);
|
||||
dns_requestmgr_detach(&requestmgr);
|
||||
dns_dispatch_detach(&dispatchvx);
|
||||
dns_dispatchmgr_detach(&dispatchmgr);
|
||||
}
|
||||
|
||||
static void
|
||||
setup(void *arg ISC_ATTR_UNUSED) {
|
||||
RUNCHECK(dns_dispatchmgr_create(mctx, loopmgr, netmgr, &dispatchmgr));
|
||||
|
||||
set_source_ports(dispatchmgr);
|
||||
|
||||
if (have_ipv4) {
|
||||
isc_sockaddr_any(&bind_any);
|
||||
} else {
|
||||
isc_sockaddr_any6(&bind_any);
|
||||
}
|
||||
RUNCHECK(dns_dispatch_createudp(
|
||||
dispatchmgr, have_src ? &srcaddr : &bind_any, &dispatchvx));
|
||||
|
||||
RUNCHECK(dns_requestmgr_create(
|
||||
mctx, loopmgr, dispatchmgr, have_ipv4 ? dispatchvx : NULL,
|
||||
have_ipv6 ? dispatchvx : NULL, &requestmgr));
|
||||
|
||||
RUNCHECK(dns_view_create(mctx, NULL, 0, "_mdig", &view));
|
||||
}
|
||||
|
||||
/*% Main processing routine for mdig */
|
||||
int
|
||||
main(int argc, char *argv[]) {
|
||||
struct query *query = NULL;
|
||||
isc_result_t result;
|
||||
isc_sockaddr_t bind_any;
|
||||
isc_log_t *lctx = NULL;
|
||||
isc_logconfig_t *lcfg = NULL;
|
||||
isc_nm_t *netmgr = NULL;
|
||||
dns_dispatchmgr_t *dispatchmgr = NULL;
|
||||
dns_dispatch_t *dispatchvx = NULL;
|
||||
dns_view_t *view = NULL;
|
||||
unsigned int i;
|
||||
int ns;
|
||||
|
||||
|
|
@ -2151,30 +2156,10 @@ main(int argc, char *argv[]) {
|
|||
fatal("can't choose between IPv4 and IPv6");
|
||||
}
|
||||
|
||||
RUNCHECK(dns_dispatchmgr_create(mctx, netmgr, &dispatchmgr));
|
||||
|
||||
set_source_ports(dispatchmgr);
|
||||
|
||||
if (have_ipv4) {
|
||||
isc_sockaddr_any(&bind_any);
|
||||
} else {
|
||||
isc_sockaddr_any6(&bind_any);
|
||||
}
|
||||
RUNCHECK(dns_dispatch_createudp(
|
||||
dispatchmgr, have_src ? &srcaddr : &bind_any, &dispatchvx));
|
||||
|
||||
RUNCHECK(dns_requestmgr_create(
|
||||
mctx, loopmgr, dispatchmgr, have_ipv4 ? dispatchvx : NULL,
|
||||
have_ipv6 ? dispatchvx : NULL, &requestmgr));
|
||||
|
||||
RUNCHECK(dns_view_create(mctx, NULL, 0, "_mdig", &view));
|
||||
|
||||
query = ISC_LIST_HEAD(queries);
|
||||
isc_loopmgr_setup(loopmgr, setup, NULL);
|
||||
isc_loopmgr_setup(loopmgr, sendqueries, query);
|
||||
isc_loopmgr_teardown(loopmgr, teardown_view, view);
|
||||
isc_loopmgr_teardown(loopmgr, teardown_requestmgr, requestmgr);
|
||||
isc_loopmgr_teardown(loopmgr, teardown_dispatch, dispatchvx);
|
||||
isc_loopmgr_teardown(loopmgr, teardown_dispatchmgr, dispatchmgr);
|
||||
isc_loopmgr_teardown(loopmgr, teardown, NULL);
|
||||
|
||||
/*
|
||||
* Stall to the start of a new second.
|
||||
|
|
|
|||
|
|
@ -215,9 +215,8 @@ createview(isc_mem_t *mctx, dns_rdataclass_t rdclass, isc_loopmgr_t *loopmgr,
|
|||
/* Initialize view security roots */
|
||||
dns_view_initsecroots(view);
|
||||
|
||||
CHECK(dns_view_createresolver(view, loopmgr, 1, nm, 0,
|
||||
tlsctx_client_cache, dispatchv4,
|
||||
dispatchv6));
|
||||
CHECK(dns_view_createresolver(view, loopmgr, nm, 0, tlsctx_client_cache,
|
||||
dispatchv4, dispatchv6));
|
||||
CHECK(dns_db_create(mctx, "rbt", dns_rootname, dns_dbtype_cache,
|
||||
rdclass, 0, NULL, &view->cachedb));
|
||||
|
||||
|
|
@ -253,7 +252,8 @@ dns_client_create(isc_mem_t *mctx, isc_loopmgr_t *loopmgr, isc_nm_t *nm,
|
|||
.nm = nm,
|
||||
};
|
||||
|
||||
result = dns_dispatchmgr_create(mctx, nm, &client->dispatchmgr);
|
||||
result = dns_dispatchmgr_create(mctx, loopmgr, nm,
|
||||
&client->dispatchmgr);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
goto cleanup_client;
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -69,9 +69,7 @@ ISC_LANG_BEGINDECLS
|
|||
struct dns_dispatchset {
|
||||
isc_mem_t *mctx;
|
||||
dns_dispatch_t **dispatches;
|
||||
int ndisp;
|
||||
int cur;
|
||||
isc_mutex_t lock;
|
||||
uint32_t ndisp;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -79,7 +77,8 @@ struct dns_dispatchset {
|
|||
#define DNS_DISPATCHOPT_FIXEDID 0x00000001U
|
||||
|
||||
isc_result_t
|
||||
dns_dispatchmgr_create(isc_mem_t *mctx, isc_nm_t *nm, dns_dispatchmgr_t **mgrp);
|
||||
dns_dispatchmgr_create(isc_mem_t *mctx, isc_loopmgr_t *loopmgr, isc_nm_t *nm,
|
||||
dns_dispatchmgr_t **mgrp);
|
||||
/*%<
|
||||
* Creates a new dispatchmgr object, and sets the available ports
|
||||
* to the default range (1024-65535).
|
||||
|
|
@ -358,7 +357,7 @@ dns_dispatchset_get(dns_dispatchset_t *dset);
|
|||
|
||||
isc_result_t
|
||||
dns_dispatchset_create(isc_mem_t *mctx, dns_dispatch_t *source,
|
||||
dns_dispatchset_t **dsetp, int n);
|
||||
dns_dispatchset_t **dsetp, uint32_t n);
|
||||
/*%<
|
||||
* Given a valid dispatch 'source', create a dispatch set containing
|
||||
* 'n' UDP dispatches, with the remainder filled out by clones of the
|
||||
|
|
|
|||
|
|
@ -165,9 +165,8 @@ enum {
|
|||
#define DNS_QMIN_MAX_NO_DELEGATION 3
|
||||
|
||||
isc_result_t
|
||||
dns_resolver_create(dns_view_t *view, isc_loopmgr_t *loopmgr,
|
||||
unsigned int ndisp, isc_nm_t *nm, unsigned int options,
|
||||
isc_tlsctx_cache_t *tlsctx_cache,
|
||||
dns_resolver_create(dns_view_t *view, isc_loopmgr_t *loopmgr, isc_nm_t *nm,
|
||||
unsigned int options, isc_tlsctx_cache_t *tlsctx_cache,
|
||||
dns_dispatch_t *dispatchv4, dns_dispatch_t *dispatchv6,
|
||||
dns_resolver_t **resp);
|
||||
|
||||
|
|
@ -183,17 +182,15 @@ dns_resolver_create(dns_view_t *view, isc_loopmgr_t *loopmgr,
|
|||
*
|
||||
*\li 'view' is a valid view.
|
||||
*
|
||||
*\li 'ndisp' > 0.
|
||||
*
|
||||
*\li 'nm' is a valid network manager.
|
||||
*
|
||||
*\li 'tlsctx_cache' != NULL.
|
||||
*
|
||||
*\li 'dispatchv4' is a dispatch with an IPv4 UDP socket, or is NULL.
|
||||
* If not NULL, 'ndisp' clones of it will be created by the resolver.
|
||||
* If not NULL, clones per loop of it will be created by the resolver.
|
||||
*
|
||||
*\li 'dispatchv6' is a dispatch with an IPv6 UDP socket, or is NULL.
|
||||
* If not NULL, 'ndisp' clones of it will be created by the resolver.
|
||||
* If not NULL, clones per loop of it will be created by the resolver.
|
||||
*
|
||||
*\li resp != NULL && *resp == NULL.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -365,8 +365,8 @@ dns_view_weakdetach(dns_view_t **targetp);
|
|||
|
||||
isc_result_t
|
||||
dns_view_createresolver(dns_view_t *view, isc_loopmgr_t *loopmgr,
|
||||
unsigned int ndisp, isc_nm_t *netmgr,
|
||||
unsigned int options, isc_tlsctx_cache_t *tlsctx_cache,
|
||||
isc_nm_t *netmgr, unsigned int options,
|
||||
isc_tlsctx_cache_t *tlsctx_cache,
|
||||
dns_dispatch_t *dispatchv4, dns_dispatch_t *dispatchv6);
|
||||
/*%<
|
||||
* Create a resolver and address database for the view.
|
||||
|
|
|
|||
|
|
@ -54,8 +54,8 @@ struct dns_requestmgr {
|
|||
atomic_bool shuttingdown;
|
||||
|
||||
dns_dispatchmgr_t *dispatchmgr;
|
||||
dns_dispatch_t *dispatchv4;
|
||||
dns_dispatch_t *dispatchv6;
|
||||
dns_dispatchset_t *dispatches4;
|
||||
dns_dispatchset_t *dispatches6;
|
||||
dns_requestlist_t *requests;
|
||||
};
|
||||
|
||||
|
|
@ -150,10 +150,14 @@ dns_requestmgr_create(isc_mem_t *mctx, isc_loopmgr_t *loopmgr,
|
|||
dns_dispatchmgr_attach(dispatchmgr, &requestmgr->dispatchmgr);
|
||||
|
||||
if (dispatchv4 != NULL) {
|
||||
dns_dispatch_attach(dispatchv4, &requestmgr->dispatchv4);
|
||||
dns_dispatchset_create(requestmgr->mctx, dispatchv4,
|
||||
&requestmgr->dispatches4,
|
||||
isc_loopmgr_nloops(requestmgr->loopmgr));
|
||||
}
|
||||
if (dispatchv6 != NULL) {
|
||||
dns_dispatch_attach(dispatchv6, &requestmgr->dispatchv6);
|
||||
dns_dispatchset_create(requestmgr->mctx, dispatchv6,
|
||||
&requestmgr->dispatches6,
|
||||
isc_loopmgr_nloops(requestmgr->loopmgr));
|
||||
}
|
||||
|
||||
isc_refcount_init(&requestmgr->references, 1);
|
||||
|
|
@ -232,11 +236,11 @@ requestmgr_destroy(dns_requestmgr_t *requestmgr) {
|
|||
isc_mem_cput(requestmgr->mctx, requestmgr->requests, nloops,
|
||||
sizeof(requestmgr->requests[0]));
|
||||
|
||||
if (requestmgr->dispatchv4 != NULL) {
|
||||
dns_dispatch_detach(&requestmgr->dispatchv4);
|
||||
if (requestmgr->dispatches4 != NULL) {
|
||||
dns_dispatchset_destroy(&requestmgr->dispatches4);
|
||||
}
|
||||
if (requestmgr->dispatchv6 != NULL) {
|
||||
dns_dispatch_detach(&requestmgr->dispatchv6);
|
||||
if (requestmgr->dispatches6 != NULL) {
|
||||
dns_dispatchset_destroy(&requestmgr->dispatches6);
|
||||
}
|
||||
if (requestmgr->dispatchmgr != NULL) {
|
||||
dns_dispatchmgr_detach(&requestmgr->dispatchmgr);
|
||||
|
|
@ -360,11 +364,11 @@ udp_dispatch(dns_requestmgr_t *requestmgr, const isc_sockaddr_t *srcaddr,
|
|||
if (srcaddr == NULL) {
|
||||
switch (isc_sockaddr_pf(destaddr)) {
|
||||
case PF_INET:
|
||||
disp = requestmgr->dispatchv4;
|
||||
disp = dns_dispatchset_get(requestmgr->dispatches4);
|
||||
break;
|
||||
|
||||
case PF_INET6:
|
||||
disp = requestmgr->dispatchv6;
|
||||
disp = dns_dispatchset_get(requestmgr->dispatches6);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -9930,9 +9930,8 @@ spillattimer_countdown(void *arg) {
|
|||
}
|
||||
|
||||
isc_result_t
|
||||
dns_resolver_create(dns_view_t *view, isc_loopmgr_t *loopmgr,
|
||||
unsigned int ndisp, isc_nm_t *nm, unsigned int options,
|
||||
isc_tlsctx_cache_t *tlsctx_cache,
|
||||
dns_resolver_create(dns_view_t *view, isc_loopmgr_t *loopmgr, isc_nm_t *nm,
|
||||
unsigned int options, isc_tlsctx_cache_t *tlsctx_cache,
|
||||
dns_dispatch_t *dispatchv4, dns_dispatch_t *dispatchv6,
|
||||
dns_resolver_t **resp) {
|
||||
dns_resolver_t *res = NULL;
|
||||
|
|
@ -9942,7 +9941,6 @@ dns_resolver_create(dns_view_t *view, isc_loopmgr_t *loopmgr,
|
|||
*/
|
||||
|
||||
REQUIRE(DNS_VIEW_VALID(view));
|
||||
REQUIRE(ndisp > 0);
|
||||
REQUIRE(resp != NULL && *resp == NULL);
|
||||
REQUIRE(tlsctx_cache != NULL);
|
||||
REQUIRE(dispatchv4 != NULL || dispatchv6 != NULL);
|
||||
|
|
@ -9989,12 +9987,12 @@ dns_resolver_create(dns_view_t *view, isc_loopmgr_t *loopmgr,
|
|||
|
||||
if (dispatchv4 != NULL) {
|
||||
dns_dispatchset_create(res->mctx, dispatchv4, &res->dispatches4,
|
||||
ndisp);
|
||||
isc_loopmgr_nloops(res->loopmgr));
|
||||
}
|
||||
|
||||
if (dispatchv6 != NULL) {
|
||||
dns_dispatchset_create(res->mctx, dispatchv6, &res->dispatches6,
|
||||
ndisp);
|
||||
isc_loopmgr_nloops(res->loopmgr));
|
||||
}
|
||||
|
||||
isc_mutex_init(&res->lock);
|
||||
|
|
|
|||
|
|
@ -589,8 +589,8 @@ dns_view_weakdetach(dns_view_t **viewp) {
|
|||
|
||||
isc_result_t
|
||||
dns_view_createresolver(dns_view_t *view, isc_loopmgr_t *loopmgr,
|
||||
unsigned int ndisp, isc_nm_t *netmgr,
|
||||
unsigned int options, isc_tlsctx_cache_t *tlsctx_cache,
|
||||
isc_nm_t *netmgr, unsigned int options,
|
||||
isc_tlsctx_cache_t *tlsctx_cache,
|
||||
dns_dispatch_t *dispatchv4,
|
||||
dns_dispatch_t *dispatchv6) {
|
||||
isc_result_t result;
|
||||
|
|
@ -601,7 +601,7 @@ dns_view_createresolver(dns_view_t *view, isc_loopmgr_t *loopmgr,
|
|||
REQUIRE(view->resolver == NULL);
|
||||
REQUIRE(view->dispatchmgr != NULL);
|
||||
|
||||
result = dns_resolver_create(view, loopmgr, ndisp, netmgr, options,
|
||||
result = dns_resolver_create(view, loopmgr, netmgr, options,
|
||||
tlsctx_cache, dispatchv4, dispatchv6,
|
||||
&view->resolver);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
#include <stdbool.h>
|
||||
#include <sys/un.h>
|
||||
|
||||
#include <isc/hash.h>
|
||||
#include <isc/lang.h>
|
||||
#include <isc/net.h>
|
||||
#include <isc/types.h>
|
||||
|
|
|
|||
|
|
@ -28,11 +28,11 @@ isc_tid_count(void);
|
|||
* Returns the number of threads.
|
||||
*/
|
||||
|
||||
extern thread_local uint32_t tid_local;
|
||||
extern thread_local uint32_t isc__tid_local;
|
||||
|
||||
static inline uint32_t
|
||||
isc_tid(void) {
|
||||
return (tid_local);
|
||||
return (isc__tid_local);
|
||||
}
|
||||
/*%<
|
||||
* Returns the thread ID of the currently-running loop.
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
/**
|
||||
* Private
|
||||
*/
|
||||
thread_local uint32_t tid_local = ISC_TID_UNKNOWN;
|
||||
thread_local uint32_t isc__tid_local = ISC_TID_UNKNOWN;
|
||||
|
||||
/*
|
||||
* Zero is a better nonsense value in this case than ISC_TID_UNKNOWN;
|
||||
|
|
@ -37,8 +37,8 @@ static uint32_t tid_count = 0;
|
|||
|
||||
void
|
||||
isc__tid_init(uint32_t tid) {
|
||||
REQUIRE(tid_local == ISC_TID_UNKNOWN || tid_local == tid);
|
||||
tid_local = tid;
|
||||
REQUIRE(isc__tid_local == ISC_TID_UNKNOWN || isc__tid_local == tid);
|
||||
isc__tid_local = tid;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -65,9 +65,6 @@
|
|||
|
||||
#define NS_INTERFACEFLAG_ANYADDR 0x01U /*%< bound to "any" address */
|
||||
#define NS_INTERFACEFLAG_LISTENING 0x02U /*%< listening */
|
||||
#define MAX_UDP_DISPATCH \
|
||||
128 /*%< Maximum number of UDP dispatchers \
|
||||
* to start per interface */
|
||||
/*% The nameserver interface structure */
|
||||
struct ns_interface {
|
||||
unsigned int magic; /*%< Magic number. */
|
||||
|
|
|
|||
|
|
@ -245,7 +245,8 @@ ISC_LOOP_TEST_IMPL(dispatchset_create) {
|
|||
|
||||
UNUSED(arg);
|
||||
|
||||
result = dns_dispatchmgr_create(mctx, connect_nm, &dispatchmgr);
|
||||
result = dns_dispatchmgr_create(mctx, loopmgr, connect_nm,
|
||||
&dispatchmgr);
|
||||
assert_int_equal(result, ISC_R_SUCCESS);
|
||||
|
||||
result = make_dispatchset(1, &dset);
|
||||
|
|
@ -261,15 +262,17 @@ ISC_LOOP_TEST_IMPL(dispatchset_create) {
|
|||
isc_loopmgr_shutdown(loopmgr);
|
||||
}
|
||||
|
||||
/* test dispatch set round-robin */
|
||||
/* test dispatch set per-loop dispatch */
|
||||
ISC_LOOP_TEST_IMPL(dispatchset_get) {
|
||||
isc_result_t result;
|
||||
dns_dispatchset_t *dset = NULL;
|
||||
dns_dispatch_t *d1, *d2, *d3, *d4, *d5;
|
||||
uint32_t tid_saved;
|
||||
|
||||
UNUSED(arg);
|
||||
|
||||
result = dns_dispatchmgr_create(mctx, connect_nm, &dispatchmgr);
|
||||
result = dns_dispatchmgr_create(mctx, loopmgr, connect_nm,
|
||||
&dispatchmgr);
|
||||
assert_int_equal(result, ISC_R_SUCCESS);
|
||||
|
||||
result = make_dispatchset(1, &dset);
|
||||
|
|
@ -291,10 +294,21 @@ ISC_LOOP_TEST_IMPL(dispatchset_get) {
|
|||
result = make_dispatchset(4, &dset);
|
||||
assert_int_equal(result, ISC_R_SUCCESS);
|
||||
|
||||
/*
|
||||
* Temporarily modify and then restore the current thread's
|
||||
* ID value, in order to confirm that different threads get
|
||||
* different dispatch sets but the same thread gets the same
|
||||
* one.
|
||||
*/
|
||||
tid_saved = isc__tid_local;
|
||||
d1 = dns_dispatchset_get(dset);
|
||||
isc__tid_local++;
|
||||
d2 = dns_dispatchset_get(dset);
|
||||
isc__tid_local++;
|
||||
d3 = dns_dispatchset_get(dset);
|
||||
isc__tid_local++;
|
||||
d4 = dns_dispatchset_get(dset);
|
||||
isc__tid_local = tid_saved;
|
||||
d5 = dns_dispatchset_get(dset);
|
||||
|
||||
assert_ptr_equal(d1, d5);
|
||||
|
|
@ -451,7 +465,8 @@ ISC_LOOP_TEST_IMPL(dispatch_timeout_tcp_connect) {
|
|||
testdata.region.base = testdata.message;
|
||||
testdata.region.length = sizeof(testdata.message);
|
||||
|
||||
result = dns_dispatchmgr_create(mctx, connect_nm, &dispatchmgr);
|
||||
result = dns_dispatchmgr_create(mctx, loopmgr, connect_nm,
|
||||
&dispatchmgr);
|
||||
assert_int_equal(result, ISC_R_SUCCESS);
|
||||
|
||||
result = dns_dispatch_createtcp(dispatchmgr, &tcp_connect_addr,
|
||||
|
|
@ -496,7 +511,8 @@ ISC_LOOP_TEST_IMPL(dispatch_timeout_tcp_response) {
|
|||
isc_loop_teardown(isc_loop_main(loopmgr), stop_listening, sock);
|
||||
|
||||
/* Client */
|
||||
result = dns_dispatchmgr_create(mctx, connect_nm, &dispatchmgr);
|
||||
result = dns_dispatchmgr_create(mctx, loopmgr, connect_nm,
|
||||
&dispatchmgr);
|
||||
assert_int_equal(result, ISC_R_SUCCESS);
|
||||
|
||||
result = dns_dispatch_createtcp(dispatchmgr, &tcp_connect_addr,
|
||||
|
|
@ -530,7 +546,8 @@ ISC_LOOP_TEST_IMPL(dispatch_tcp_response) {
|
|||
testdata.region.base = testdata.message;
|
||||
testdata.region.length = sizeof(testdata.message);
|
||||
|
||||
result = dns_dispatchmgr_create(mctx, connect_nm, &dispatchmgr);
|
||||
result = dns_dispatchmgr_create(mctx, loopmgr, connect_nm,
|
||||
&dispatchmgr);
|
||||
assert_int_equal(result, ISC_R_SUCCESS);
|
||||
|
||||
result = dns_dispatch_createtcp(dispatchmgr, &tcp_connect_addr,
|
||||
|
|
@ -567,7 +584,8 @@ ISC_LOOP_TEST_IMPL(dispatch_tls_response) {
|
|||
testdata.region.base = testdata.message;
|
||||
testdata.region.length = sizeof(testdata.message);
|
||||
|
||||
result = dns_dispatchmgr_create(mctx, connect_nm, &dispatchmgr);
|
||||
result = dns_dispatchmgr_create(mctx, loopmgr, connect_nm,
|
||||
&dispatchmgr);
|
||||
assert_int_equal(result, ISC_R_SUCCESS);
|
||||
|
||||
result = dns_dispatch_createtcp(dispatchmgr, &tls_connect_addr,
|
||||
|
|
@ -594,7 +612,8 @@ ISC_LOOP_TEST_IMPL(dispatch_timeout_udp_response) {
|
|||
uint16_t id;
|
||||
|
||||
/* Server */
|
||||
result = dns_dispatchmgr_create(mctx, connect_nm, &dispatchmgr);
|
||||
result = dns_dispatchmgr_create(mctx, loopmgr, connect_nm,
|
||||
&dispatchmgr);
|
||||
assert_int_equal(result, ISC_R_SUCCESS);
|
||||
|
||||
result = isc_nm_listenudp(netmgr, ISC_NM_LISTEN_ONE, &udp_server_addr,
|
||||
|
|
@ -636,7 +655,8 @@ ISC_LOOP_TEST_IMPL(dispatch_getnext) {
|
|||
testdata.region.base = testdata.message;
|
||||
testdata.region.length = sizeof(testdata.message);
|
||||
|
||||
result = dns_dispatchmgr_create(mctx, connect_nm, &dispatchmgr);
|
||||
result = dns_dispatchmgr_create(mctx, loopmgr, connect_nm,
|
||||
&dispatchmgr);
|
||||
assert_int_equal(result, ISC_R_SUCCESS);
|
||||
|
||||
result = dns_dispatch_createudp(dispatchmgr, &udp_connect_addr,
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ mkres(dns_resolver_t **resolverp) {
|
|||
isc_result_t result;
|
||||
|
||||
isc_tlsctx_cache_create(mctx, &tlsctx_cache);
|
||||
result = dns_resolver_create(view, loopmgr, 1, netmgr, 0, tlsctx_cache,
|
||||
result = dns_resolver_create(view, loopmgr, netmgr, 0, tlsctx_cache,
|
||||
dispatch, NULL, resolverp);
|
||||
assert_int_equal(result, ISC_R_SUCCESS);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -68,7 +68,8 @@ dns_test_makeview(const char *name, bool with_dispatchmgr, bool with_cache,
|
|||
dns_dispatchmgr_t *dispatchmgr = NULL;
|
||||
|
||||
if (with_dispatchmgr) {
|
||||
result = dns_dispatchmgr_create(mctx, netmgr, &dispatchmgr);
|
||||
result = dns_dispatchmgr_create(mctx, loopmgr, netmgr,
|
||||
&dispatchmgr);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
return (result);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ setup_server(void **state) {
|
|||
|
||||
ns_server_create(mctx, matchview, &sctx);
|
||||
|
||||
result = dns_dispatchmgr_create(mctx, netmgr, &dispatchmgr);
|
||||
result = dns_dispatchmgr_create(mctx, loopmgr, netmgr, &dispatchmgr);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue