mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
move dispatchmgr from resolver to view
the 'dispatchmgr' member of the resolver object is used by both the dns_resolver and dns_request modules, and may in the future be used by others such as dns_xfrin. it doesn't make sense for it to live in the resolver object; this commit moves it into dns_view.
This commit is contained in:
parent
ec33efe351
commit
ae5ba54fbe
11 changed files with 73 additions and 52 deletions
|
|
@ -4746,8 +4746,7 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, cfg_obj_t *config,
|
|||
ndisp = 4 * ISC_MIN(named_g_udpdisp, MAX_UDP_DISPATCH);
|
||||
CHECK(dns_view_createresolver(
|
||||
view, named_g_loopmgr, ndisp, named_g_netmgr, resopts,
|
||||
named_g_server->tlsctx_client_cache, named_g_dispatchmgr,
|
||||
dispatch4, dispatch6));
|
||||
named_g_server->tlsctx_client_cache, dispatch4, dispatch6));
|
||||
|
||||
if (resstats == NULL) {
|
||||
CHECK(isc_stats_create(mctx, &resstats,
|
||||
|
|
@ -6467,6 +6466,8 @@ create_view(const cfg_obj_t *vconfig, dns_viewlist_t *viewlist,
|
|||
return (result);
|
||||
}
|
||||
|
||||
dns_view_setdispatchmgr(view, named_g_dispatchmgr);
|
||||
|
||||
isc_nonce_buf(view->secret, sizeof(view->secret));
|
||||
|
||||
ISC_LIST_APPEND(*viewlist, view, link);
|
||||
|
|
|
|||
|
|
@ -37,7 +37,6 @@
|
|||
#include <dns/name.h>
|
||||
#include <dns/rdataset.h>
|
||||
#include <dns/request.h>
|
||||
#include <dns/resolver.h>
|
||||
#include <dns/result.h>
|
||||
#include <dns/types.h>
|
||||
#include <dns/view.h>
|
||||
|
|
|
|||
|
|
@ -48,7 +48,6 @@
|
|||
#include <dns/rdataset.h>
|
||||
#include <dns/rdatatype.h>
|
||||
#include <dns/request.h>
|
||||
#include <dns/resolver.h>
|
||||
#include <dns/types.h>
|
||||
#include <dns/view.h>
|
||||
|
||||
|
|
|
|||
|
|
@ -211,6 +211,8 @@ createview(isc_mem_t *mctx, dns_rdataclass_t rdclass, isc_loopmgr_t *loopmgr,
|
|||
return (result);
|
||||
}
|
||||
|
||||
dns_view_setdispatchmgr(view, dispatchmgr);
|
||||
|
||||
/* Initialize view security roots */
|
||||
result = dns_view_initsecroots(view, mctx);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
|
|
@ -218,8 +220,8 @@ createview(isc_mem_t *mctx, dns_rdataclass_t rdclass, isc_loopmgr_t *loopmgr,
|
|||
}
|
||||
|
||||
result = dns_view_createresolver(view, loopmgr, 1, nm, 0,
|
||||
tlsctx_client_cache, dispatchmgr,
|
||||
dispatchv4, dispatchv6);
|
||||
tlsctx_client_cache, dispatchv4,
|
||||
dispatchv6);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
goto cleanup_view;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -183,8 +183,8 @@ 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_dispatchmgr_t *dispatchmgr, dns_dispatch_t *dispatchv4,
|
||||
dns_dispatch_t *dispatchv6, dns_resolver_t **resp);
|
||||
dns_dispatch_t *dispatchv4, dns_dispatch_t *dispatchv6,
|
||||
dns_resolver_t **resp);
|
||||
|
||||
/*%<
|
||||
* Create a resolver.
|
||||
|
|
@ -204,8 +204,6 @@ dns_resolver_create(dns_view_t *view, isc_loopmgr_t *loopmgr,
|
|||
*
|
||||
*\li 'tlsctx_cache' != NULL.
|
||||
*
|
||||
*\li 'dispatchmgr' != 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.
|
||||
*
|
||||
|
|
@ -404,9 +402,6 @@ dns_resolver_logfetch(dns_fetch_t *fetch, isc_log_t *lctx,
|
|||
*\li 'fetch' is a valid fetch, and has completed.
|
||||
*/
|
||||
|
||||
dns_dispatchmgr_t *
|
||||
dns_resolver_dispatchmgr(dns_resolver_t *resolver);
|
||||
|
||||
dns_dispatch_t *
|
||||
dns_resolver_dispatchv4(dns_resolver_t *resolver);
|
||||
|
||||
|
|
|
|||
|
|
@ -82,17 +82,18 @@ ISC_LANG_BEGINDECLS
|
|||
|
||||
struct dns_view {
|
||||
/* Unlocked. */
|
||||
unsigned int magic;
|
||||
isc_mem_t *mctx;
|
||||
dns_rdataclass_t rdclass;
|
||||
char *name;
|
||||
dns_zt_t *zonetable;
|
||||
dns_resolver_t *resolver;
|
||||
dns_adb_t *adb;
|
||||
dns_requestmgr_t *requestmgr;
|
||||
dns_cache_t *cache;
|
||||
dns_db_t *cachedb;
|
||||
dns_db_t *hints;
|
||||
unsigned int magic;
|
||||
isc_mem_t *mctx;
|
||||
dns_rdataclass_t rdclass;
|
||||
char *name;
|
||||
dns_zt_t *zonetable;
|
||||
dns_resolver_t *resolver;
|
||||
dns_adb_t *adb;
|
||||
dns_requestmgr_t *requestmgr;
|
||||
dns_dispatchmgr_t *dispatchmgr;
|
||||
dns_cache_t *cache;
|
||||
dns_db_t *cachedb;
|
||||
dns_db_t *hints;
|
||||
|
||||
/*
|
||||
* security roots and negative trust anchors.
|
||||
|
|
@ -389,7 +390,6 @@ 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,
|
||||
dns_dispatchmgr_t *dispatchmgr,
|
||||
dns_dispatch_t *dispatchv4, dns_dispatch_t *dispatchv6);
|
||||
/*%<
|
||||
* Create a resolver and address database for the view.
|
||||
|
|
@ -400,6 +400,9 @@ dns_view_createresolver(dns_view_t *view, isc_loopmgr_t *loopmgr,
|
|||
*
|
||||
*\li 'view' does not have a resolver already.
|
||||
*
|
||||
*\li A dispatch manager has been associated with the view by calling
|
||||
* dns_view_setdispatchmgr().
|
||||
*
|
||||
*\li The requirements of dns_resolver_create() apply to 'ndisp',
|
||||
* 'netmgr', 'options', 'tlsctx_cache', 'dispatchv4', and 'dispatchv6'.
|
||||
*
|
||||
|
|
@ -1316,4 +1319,13 @@ dns_view_getudpsize(dns_view_t *view);
|
|||
* Get the current EDNS UDP buffer size.
|
||||
*/
|
||||
|
||||
void
|
||||
dns_view_setdispatchmgr(dns_view_t *view, dns_dispatchmgr_t *dispatchmgr);
|
||||
dns_dispatchmgr_t *
|
||||
dns_view_getdispatchmgr(dns_view_t *view);
|
||||
/*%<
|
||||
* Set/get the dispatch manager for the view; this wil be used
|
||||
* by the resolver and request managers to send and receive DNS
|
||||
* messages.
|
||||
*/
|
||||
ISC_LANG_ENDDECLS
|
||||
|
|
|
|||
|
|
@ -63,6 +63,14 @@ dns_xfrin_create(dns_zone_t *zone, dns_rdatatype_t xfrtype,
|
|||
* 'zone' and a result code as arguments when the transfer finishes.
|
||||
*
|
||||
* Requires:
|
||||
*\li 'xfrp' != NULL and '*xfrp' == NULL.
|
||||
*
|
||||
*\li 'done' != NULL.
|
||||
*
|
||||
*\li 'primaryaddr' has a non-zero port number.
|
||||
*
|
||||
*\li 'zone' is a valid zone and is associated with a view.
|
||||
*
|
||||
*\li 'xfrtype' is dns_rdatatype_axfr, dns_rdatatype_ixfr
|
||||
* or dns_rdatatype_soa (soa query followed by axfr if
|
||||
* serial is greater than current serial).
|
||||
|
|
|
|||
|
|
@ -549,7 +549,6 @@ struct dns_resolver {
|
|||
bool frozen;
|
||||
unsigned int options;
|
||||
isc_tlsctx_cache_t *tlsctx_cache;
|
||||
dns_dispatchmgr_t *dispatchmgr;
|
||||
dns_dispatchset_t *dispatches4;
|
||||
dns_dispatchset_t *dispatches6;
|
||||
|
||||
|
|
@ -2191,7 +2190,7 @@ fctx_query(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo,
|
|||
query = isc_mem_get(fctx->mctx, sizeof(*query));
|
||||
*query = (resquery_t){ .options = options,
|
||||
.addrinfo = addrinfo,
|
||||
.dispatchmgr = res->dispatchmgr };
|
||||
.dispatchmgr = res->view->dispatchmgr };
|
||||
|
||||
#if DNS_RESOLVER_TRACE
|
||||
fprintf(stderr, "rctx_init:%s:%s:%d:%p->references = 1\n", __func__,
|
||||
|
|
@ -2256,7 +2255,7 @@ fctx_query(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo,
|
|||
}
|
||||
isc_sockaddr_setport(&addr, 0);
|
||||
|
||||
result = dns_dispatch_createtcp(res->dispatchmgr, &addr,
|
||||
result = dns_dispatch_createtcp(res->view->dispatchmgr, &addr,
|
||||
&addrinfo->sockaddr,
|
||||
&query->dispatch);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
|
|
@ -2266,7 +2265,8 @@ fctx_query(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo,
|
|||
FCTXTRACE("connecting via TCP");
|
||||
} else {
|
||||
if (have_addr) {
|
||||
result = dns_dispatch_createudp(res->dispatchmgr, &addr,
|
||||
result = dns_dispatch_createudp(res->view->dispatchmgr,
|
||||
&addr,
|
||||
&query->dispatch);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
goto cleanup_query;
|
||||
|
|
@ -3914,20 +3914,17 @@ out:
|
|||
static void
|
||||
possibly_mark(fetchctx_t *fctx, dns_adbaddrinfo_t *addr) {
|
||||
isc_netaddr_t na;
|
||||
isc_sockaddr_t *sa;
|
||||
isc_sockaddr_t *sa = &addr->sockaddr;
|
||||
bool aborted = false;
|
||||
bool bogus;
|
||||
dns_acl_t *blackhole;
|
||||
isc_netaddr_t ipaddr;
|
||||
dns_peer_t *peer = NULL;
|
||||
dns_resolver_t *res;
|
||||
dns_resolver_t *res = fctx->res;
|
||||
const char *msg = NULL;
|
||||
|
||||
sa = &addr->sockaddr;
|
||||
|
||||
res = fctx->res;
|
||||
isc_netaddr_fromsockaddr(&ipaddr, sa);
|
||||
blackhole = dns_dispatchmgr_getblackhole(res->dispatchmgr);
|
||||
blackhole = dns_dispatchmgr_getblackhole(res->view->dispatchmgr);
|
||||
(void)dns_peerlist_peerbyaddr(res->view->peers, &ipaddr, &peer);
|
||||
|
||||
if (blackhole != NULL) {
|
||||
|
|
@ -10116,8 +10113,8 @@ 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_dispatchmgr_t *dispatchmgr, dns_dispatch_t *dispatchv4,
|
||||
dns_dispatch_t *dispatchv6, dns_resolver_t **resp) {
|
||||
dns_dispatch_t *dispatchv4, dns_dispatch_t *dispatchv6,
|
||||
dns_resolver_t **resp) {
|
||||
isc_result_t result = ISC_R_SUCCESS;
|
||||
dns_resolver_t *res = NULL;
|
||||
|
||||
|
|
@ -10129,7 +10126,6 @@ dns_resolver_create(dns_view_t *view, isc_loopmgr_t *loopmgr,
|
|||
REQUIRE(ndisp > 0);
|
||||
REQUIRE(resp != NULL && *resp == NULL);
|
||||
REQUIRE(tlsctx_cache != NULL);
|
||||
REQUIRE(dispatchmgr != NULL);
|
||||
REQUIRE(dispatchv4 != NULL || dispatchv6 != NULL);
|
||||
|
||||
RTRACE("create");
|
||||
|
|
@ -10139,7 +10135,6 @@ dns_resolver_create(dns_view_t *view, isc_loopmgr_t *loopmgr,
|
|||
.loopmgr = loopmgr,
|
||||
.rdclass = view->rdclass,
|
||||
.nm = nm,
|
||||
.dispatchmgr = dispatchmgr,
|
||||
.options = options,
|
||||
.tlsctx_cache = tlsctx_cache,
|
||||
.spillatmin = 10,
|
||||
|
|
@ -10848,12 +10843,6 @@ dns_resolver_logfetch(dns_fetch_t *fetch, isc_log_t *lctx,
|
|||
UNLOCK(&fctx->lock);
|
||||
}
|
||||
|
||||
dns_dispatchmgr_t *
|
||||
dns_resolver_dispatchmgr(dns_resolver_t *resolver) {
|
||||
REQUIRE(VALID_RESOLVER(resolver));
|
||||
return (resolver->dispatchmgr);
|
||||
}
|
||||
|
||||
dns_dispatch_t *
|
||||
dns_resolver_dispatchv4(dns_resolver_t *resolver) {
|
||||
REQUIRE(VALID_RESOLVER(resolver));
|
||||
|
|
|
|||
|
|
@ -637,7 +637,6 @@ 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,
|
||||
dns_dispatchmgr_t *dispatchmgr,
|
||||
dns_dispatch_t *dispatchv4,
|
||||
dns_dispatch_t *dispatchv6) {
|
||||
isc_result_t result;
|
||||
|
|
@ -646,12 +645,13 @@ dns_view_createresolver(dns_view_t *view, isc_loopmgr_t *loopmgr,
|
|||
REQUIRE(DNS_VIEW_VALID(view));
|
||||
REQUIRE(!view->frozen);
|
||||
REQUIRE(view->resolver == NULL);
|
||||
REQUIRE(view->dispatchmgr != NULL);
|
||||
|
||||
view->loop = isc_loop_current(loopmgr);
|
||||
|
||||
result = dns_resolver_create(view, loopmgr, ndisp, netmgr, options,
|
||||
tlsctx_cache, dispatchmgr, dispatchv4,
|
||||
dispatchv6, &view->resolver);
|
||||
tlsctx_cache, dispatchv4, dispatchv6,
|
||||
&view->resolver);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
return (result);
|
||||
}
|
||||
|
|
@ -664,9 +664,9 @@ dns_view_createresolver(dns_view_t *view, isc_loopmgr_t *loopmgr,
|
|||
goto cleanup_resolver;
|
||||
}
|
||||
|
||||
result = dns_requestmgr_create(
|
||||
view->mctx, dns_resolver_dispatchmgr(view->resolver),
|
||||
dispatchv4, dispatchv6, &view->requestmgr);
|
||||
result = dns_requestmgr_create(view->mctx, view->dispatchmgr,
|
||||
dispatchv4, dispatchv6,
|
||||
&view->requestmgr);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
goto cleanup_adb;
|
||||
}
|
||||
|
|
@ -2445,3 +2445,15 @@ dns_view_getudpsize(dns_view_t *view) {
|
|||
REQUIRE(DNS_VIEW_VALID(view));
|
||||
return (view->udpsize);
|
||||
}
|
||||
|
||||
void
|
||||
dns_view_setdispatchmgr(dns_view_t *view, dns_dispatchmgr_t *dispatchmgr) {
|
||||
REQUIRE(DNS_VIEW_VALID(view));
|
||||
view->dispatchmgr = dispatchmgr;
|
||||
}
|
||||
|
||||
dns_dispatchmgr_t *
|
||||
dns_view_getdispatchmgr(dns_view_t *view) {
|
||||
REQUIRE(DNS_VIEW_VALID(view));
|
||||
return (view->dispatchmgr);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -704,6 +704,8 @@ dns_xfrin_create(dns_zone_t *zone, dns_rdatatype_t xfrtype,
|
|||
REQUIRE(xfrp != NULL && *xfrp == NULL);
|
||||
REQUIRE(done != NULL);
|
||||
REQUIRE(isc_sockaddr_getport(primaryaddr) != 0);
|
||||
REQUIRE(zone != NULL);
|
||||
REQUIRE(dns_zone_getview(zone) != NULL);
|
||||
|
||||
(void)dns_zone_getdb(zone, &db);
|
||||
|
||||
|
|
|
|||
|
|
@ -52,6 +52,8 @@ setup_test(void **state) {
|
|||
result = dns_test_makeview("view", false, &view);
|
||||
assert_int_equal(result, ISC_R_SUCCESS);
|
||||
|
||||
dns_view_setdispatchmgr(view, dispatchmgr);
|
||||
|
||||
isc_sockaddr_any(&local);
|
||||
result = dns_dispatch_createudp(dispatchmgr, &local, &dispatch);
|
||||
assert_int_equal(result, ISC_R_SUCCESS);
|
||||
|
|
@ -75,7 +77,7 @@ mkres(dns_resolver_t **resolverp) {
|
|||
|
||||
isc_tlsctx_cache_create(mctx, &tlsctx_cache);
|
||||
result = dns_resolver_create(view, loopmgr, 1, netmgr, 0, tlsctx_cache,
|
||||
dispatchmgr, dispatch, NULL, resolverp);
|
||||
dispatch, NULL, resolverp);
|
||||
assert_int_equal(result, ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue