From: Evan Hunt Date: Wed, 22 Feb 2023 00:34:41 +0000 (-0800) Subject: move dispatchmgr from resolver to view X-Git-Tag: v9.19.11~30^2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ae5ba54fbea39df0afc4b0a9090821cc413027fa;p=thirdparty%2Fbind9.git 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. --- diff --git a/bin/named/server.c b/bin/named/server.c index 44d706bdc06..4330ce00e6f 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -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); diff --git a/bin/tests/system/pipelined/pipequeries.c b/bin/tests/system/pipelined/pipequeries.c index 8d8cb453725..805e3c53443 100644 --- a/bin/tests/system/pipelined/pipequeries.c +++ b/bin/tests/system/pipelined/pipequeries.c @@ -37,7 +37,6 @@ #include #include #include -#include #include #include #include diff --git a/bin/tools/mdig.c b/bin/tools/mdig.c index b8aa675c83f..21b71fcb588 100644 --- a/bin/tools/mdig.c +++ b/bin/tools/mdig.c @@ -48,7 +48,6 @@ #include #include #include -#include #include #include diff --git a/lib/dns/client.c b/lib/dns/client.c index c6f94acab54..a32f33645b0 100644 --- a/lib/dns/client.c +++ b/lib/dns/client.c @@ -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; } diff --git a/lib/dns/include/dns/resolver.h b/lib/dns/include/dns/resolver.h index 61429ddaf04..df74cd5e2ae 100644 --- a/lib/dns/include/dns/resolver.h +++ b/lib/dns/include/dns/resolver.h @@ -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); diff --git a/lib/dns/include/dns/view.h b/lib/dns/include/dns/view.h index e38a18dd72f..b787c01a965 100644 --- a/lib/dns/include/dns/view.h +++ b/lib/dns/include/dns/view.h @@ -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 diff --git a/lib/dns/include/dns/xfrin.h b/lib/dns/include/dns/xfrin.h index 70b601bb578..f37aa7f1c79 100644 --- a/lib/dns/include/dns/xfrin.h +++ b/lib/dns/include/dns/xfrin.h @@ -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). diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index e043b9a366f..b18563a92ab 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -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)); diff --git a/lib/dns/view.c b/lib/dns/view.c index 35ce0d824b3..ce86eaa320a 100644 --- a/lib/dns/view.c +++ b/lib/dns/view.c @@ -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); +} diff --git a/lib/dns/xfrin.c b/lib/dns/xfrin.c index 05e505b188f..b693919a2d6 100644 --- a/lib/dns/xfrin.c +++ b/lib/dns/xfrin.c @@ -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); diff --git a/tests/dns/resolver_test.c b/tests/dns/resolver_test.c index e5bdea7ce9c..6db03141fac 100644 --- a/tests/dns/resolver_test.c +++ b/tests/dns/resolver_test.c @@ -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); }