]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
move dispatchmgr from resolver to view
authorEvan Hunt <each@isc.org>
Wed, 22 Feb 2023 00:34:41 +0000 (16:34 -0800)
committerEvan Hunt <each@isc.org>
Fri, 24 Feb 2023 08:30:33 +0000 (08:30 +0000)
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.

bin/named/server.c
bin/tests/system/pipelined/pipequeries.c
bin/tools/mdig.c
lib/dns/client.c
lib/dns/include/dns/resolver.h
lib/dns/include/dns/view.h
lib/dns/include/dns/xfrin.h
lib/dns/resolver.c
lib/dns/view.c
lib/dns/xfrin.c
tests/dns/resolver_test.c

index 44d706bdc0624b3dc93cf1e1782b25b05e42e293..4330ce00e6f31d105c4c44ea3e20d7d84a8ac9fc 100644 (file)
@@ -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);
index 8d8cb453725822cb81f234c6d5ca393760f36d46..805e3c534438f55280f9665c69afeec925d7005a 100644 (file)
@@ -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>
index b8aa675c83ffc794bf87633c3c35da7915547ea9..21b71fcb5884d968988fd7f462de19f7e58c9ad9 100644 (file)
@@ -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>
 
index c6f94acab54d95e94dd5452ddf1aa94284575bc8..a32f33645b062dcfb7c54ede52effe7de32502c4 100644 (file)
@@ -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;
        }
index 61429ddaf0484f0b03f6c3b4d7ec6b0a0b7c4de2..df74cd5e2aecf936a5f3a45956d6abd32840934e 100644 (file)
@@ -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);
 
index e38a18dd72fa160c056344555336dab7ec552bd8..b787c01a965845fd8e6a7cdf8d9ab74a9215b695 100644 (file)
@@ -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
index 70b601bb57828f85554fe078e88794174d1ec731..f37aa7f1c798653db3c8eff80971c625f2d42d3d 100644 (file)
@@ -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).
index e043b9a366f7ea1a128b05e93a7dec5943c0d10e..b18563a92ab7c2c415c28d695c9aff1aabfcc181 100644 (file)
@@ -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));
index 35ce0d824b3bbe50cd66ceb89d04f8ae56084411..ce86eaa320acb4b61bbf65ef3489a739177c833c 100644 (file)
@@ -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);
+}
index 05e505b188f891056f387b6b6c18aa08307f830f..b693919a2d61889f1812f8dc7e75a5e914a5afb7 100644 (file)
@@ -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);
 
index e5bdea7ce9c328983a9bfc8c3786203046aaa551..6db03141fac7564a786491dbde5ce85825f17a40 100644 (file)
@@ -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);
 }