2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-02 07:35:26 +00:00

Clean up the dns_dispatch_getudp API

Cleanup unused parts of dns_dispatch_getudp API, remove
dns_dispatch_getudp_dup() function and related code.
This commit is contained in:
Ondřej Surý
2021-05-12 23:27:15 +02:00
parent f487c6948b
commit 7cbfbc8faa
13 changed files with 34 additions and 228 deletions

View File

@@ -1260,7 +1260,7 @@ get_view_querysource_dispatch(const cfg_obj_t **maps, int af,
isc_result_t result = ISC_R_FAILURE; isc_result_t result = ISC_R_FAILURE;
dns_dispatch_t *disp; dns_dispatch_t *disp;
isc_sockaddr_t sa; isc_sockaddr_t sa;
unsigned int attrs, attrmask; unsigned int attrs;
const cfg_obj_t *obj = NULL; const cfg_obj_t *obj = NULL;
unsigned int maxdispatchbuffers = UDPBUFFERS; unsigned int maxdispatchbuffers = UDPBUFFERS;
isc_dscp_t dscp = -1; isc_dscp_t dscp = -1;
@@ -1331,17 +1331,10 @@ get_view_querysource_dispatch(const cfg_obj_t **maps, int af,
} }
} }
attrmask = 0;
attrmask |= DNS_DISPATCHATTR_UDP;
attrmask |= DNS_DISPATCHATTR_TCP;
attrmask |= DNS_DISPATCHATTR_IPV4;
attrmask |= DNS_DISPATCHATTR_IPV6;
disp = NULL; disp = NULL;
result = dns_dispatch_getudp(named_g_dispatchmgr, named_g_socketmgr, result = dns_dispatch_getudp(
named_g_taskmgr, &sa, 4096, named_g_dispatchmgr, named_g_socketmgr, named_g_taskmgr, &sa,
maxdispatchbuffers, 32768, 16411, 16433, 4096, maxdispatchbuffers, 32768, 16411, 16433, attrs, &disp);
attrs, attrmask, &disp);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
isc_sockaddr_t any; isc_sockaddr_t any;
char buf[ISC_SOCKADDR_FORMATSIZE]; char buf[ISC_SOCKADDR_FORMATSIZE];
@@ -10514,7 +10507,7 @@ named_add_reserved_dispatch(named_server_t *server,
in_port_t port; in_port_t port;
char addrbuf[ISC_SOCKADDR_FORMATSIZE]; char addrbuf[ISC_SOCKADDR_FORMATSIZE];
isc_result_t result; isc_result_t result;
unsigned int attrs, attrmask; unsigned int attrs;
REQUIRE(NAMED_SERVER_VALID(server)); REQUIRE(NAMED_SERVER_VALID(server));
@@ -10554,16 +10547,11 @@ named_add_reserved_dispatch(named_server_t *server,
result = ISC_R_NOTIMPLEMENTED; result = ISC_R_NOTIMPLEMENTED;
goto cleanup; goto cleanup;
} }
attrmask = 0;
attrmask |= DNS_DISPATCHATTR_UDP;
attrmask |= DNS_DISPATCHATTR_TCP;
attrmask |= DNS_DISPATCHATTR_IPV4;
attrmask |= DNS_DISPATCHATTR_IPV6;
result = dns_dispatch_getudp(named_g_dispatchmgr, named_g_socketmgr, result = dns_dispatch_getudp(named_g_dispatchmgr, named_g_socketmgr,
named_g_taskmgr, &dispatch->addr, 4096, named_g_taskmgr, &dispatch->addr, 4096,
UDPBUFFERS, 32768, 16411, 16433, attrs, UDPBUFFERS, 32768, 16411, 16433, attrs,
attrmask, &dispatch->dispatch); &dispatch->dispatch);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
goto cleanup; goto cleanup;
} }

View File

@@ -804,7 +804,7 @@ static void
setup_system(void) { setup_system(void) {
isc_result_t result; isc_result_t result;
isc_sockaddr_t bind_any, bind_any6; isc_sockaddr_t bind_any, bind_any6;
unsigned int attrs, attrmask; unsigned int attrs;
isc_sockaddrlist_t *nslist; isc_sockaddrlist_t *nslist;
isc_logconfig_t *logconfig = NULL; isc_logconfig_t *logconfig = NULL;
irs_resconf_t *resconf = NULL; irs_resconf_t *resconf = NULL;
@@ -939,9 +939,6 @@ setup_system(void) {
set_source_ports(dispatchmgr); set_source_ports(dispatchmgr);
attrmask = DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_TCP;
attrmask |= DNS_DISPATCHATTR_IPV4 | DNS_DISPATCHATTR_IPV6;
if (have_ipv6) { if (have_ipv6) {
attrs = DNS_DISPATCHATTR_UDP; attrs = DNS_DISPATCHATTR_UDP;
attrs |= DNS_DISPATCHATTR_MAKEQUERY; attrs |= DNS_DISPATCHATTR_MAKEQUERY;
@@ -949,7 +946,7 @@ setup_system(void) {
isc_sockaddr_any6(&bind_any6); isc_sockaddr_any6(&bind_any6);
result = dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, result = dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr,
&bind_any6, PACKETSIZE, 4, 2, 3, 5, &bind_any6, PACKETSIZE, 4, 2, 3, 5,
attrs, attrmask, &dispatchv6); attrs, &dispatchv6);
check_result(result, "dns_dispatch_getudp (v6)"); check_result(result, "dns_dispatch_getudp (v6)");
} }
@@ -960,7 +957,7 @@ setup_system(void) {
isc_sockaddr_any(&bind_any); isc_sockaddr_any(&bind_any);
result = dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, result = dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr,
&bind_any, PACKETSIZE, 4, 2, 3, 5, &bind_any, PACKETSIZE, 4, 2, 3, 5,
attrs, attrmask, &dispatchv4); attrs, &dispatchv4);
check_result(result, "dns_dispatch_getudp (v4)"); check_result(result, "dns_dispatch_getudp (v4)");
} }

View File

@@ -211,7 +211,7 @@ main(int argc, char *argv[]) {
isc_timermgr_t *timermgr = NULL; isc_timermgr_t *timermgr = NULL;
isc_socketmgr_t *socketmgr = NULL; isc_socketmgr_t *socketmgr = NULL;
dns_dispatchmgr_t *dispatchmgr = NULL; dns_dispatchmgr_t *dispatchmgr = NULL;
unsigned int attrs, attrmask; unsigned int attrs;
dns_dispatch_t *dispatchv4; dns_dispatch_t *dispatchv4;
dns_view_t *view; dns_view_t *view;
uint16_t port = PORT; uint16_t port = PORT;
@@ -284,12 +284,10 @@ main(int argc, char *argv[]) {
attrs = DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_MAKEQUERY | attrs = DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_MAKEQUERY |
DNS_DISPATCHATTR_IPV4; DNS_DISPATCHATTR_IPV4;
attrmask = DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_TCP |
DNS_DISPATCHATTR_IPV4 | DNS_DISPATCHATTR_IPV6;
dispatchv4 = NULL; dispatchv4 = NULL;
RUNCHECK(dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, RUNCHECK(dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr,
have_src ? &srcaddr : &bind_any, 4096, 4, have_src ? &srcaddr : &bind_any, 4096, 4,
2, 3, 5, attrs, attrmask, &dispatchv4)); 2, 3, 5, attrs, &dispatchv4));
requestmgr = NULL; requestmgr = NULL;
RUNCHECK(dns_requestmgr_create(mctx, timermgr, socketmgr, taskmgr, RUNCHECK(dns_requestmgr_create(mctx, timermgr, socketmgr, taskmgr,
dispatchmgr, dispatchv4, NULL, dispatchmgr, dispatchv4, NULL,

View File

@@ -198,7 +198,7 @@ main(int argc, char *argv[]) {
isc_timermgr_t *timermgr = NULL; isc_timermgr_t *timermgr = NULL;
isc_socketmgr_t *socketmgr = NULL; isc_socketmgr_t *socketmgr = NULL;
isc_socket_t *sock = NULL; isc_socket_t *sock = NULL;
unsigned int attrs, attrmask; unsigned int attrs;
isc_sockaddr_t bind_any; isc_sockaddr_t bind_any;
dns_dispatchmgr_t *dispatchmgr = NULL; dns_dispatchmgr_t *dispatchmgr = NULL;
dns_dispatch_t *dispatchv4 = NULL; dns_dispatch_t *dispatchv4 = NULL;
@@ -245,12 +245,9 @@ main(int argc, char *argv[]) {
isc_sockaddr_any(&bind_any); isc_sockaddr_any(&bind_any);
attrs = DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_MAKEQUERY | attrs = DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_MAKEQUERY |
DNS_DISPATCHATTR_IPV4; DNS_DISPATCHATTR_IPV4;
attrmask = DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_TCP |
DNS_DISPATCHATTR_IPV4 | DNS_DISPATCHATTR_IPV6;
dispatchv4 = NULL; dispatchv4 = NULL;
RUNCHECK(dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, &bind_any, RUNCHECK(dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, &bind_any,
4096, 4, 2, 3, 5, attrs, attrmask, 4096, 4, 2, 3, 5, attrs, &dispatchv4));
&dispatchv4));
requestmgr = NULL; requestmgr = NULL;
RUNCHECK(dns_requestmgr_create(mctx, timermgr, socketmgr, taskmgr, RUNCHECK(dns_requestmgr_create(mctx, timermgr, socketmgr, taskmgr,
dispatchmgr, dispatchv4, NULL, dispatchmgr, dispatchv4, NULL,

View File

@@ -142,7 +142,7 @@ main(int argc, char **argv) {
isc_timermgr_t *timermgr = NULL; isc_timermgr_t *timermgr = NULL;
isc_socketmgr_t *socketmgr = NULL; isc_socketmgr_t *socketmgr = NULL;
isc_socket_t *sock = NULL; isc_socket_t *sock = NULL;
unsigned int attrs, attrmask; unsigned int attrs;
isc_sockaddr_t bind_any; isc_sockaddr_t bind_any;
dns_dispatchmgr_t *dispatchmgr = NULL; dns_dispatchmgr_t *dispatchmgr = NULL;
dns_dispatch_t *dispatchv4 = NULL; dns_dispatch_t *dispatchv4 = NULL;
@@ -188,12 +188,9 @@ main(int argc, char **argv) {
isc_sockaddr_any(&bind_any); isc_sockaddr_any(&bind_any);
attrs = DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_MAKEQUERY | attrs = DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_MAKEQUERY |
DNS_DISPATCHATTR_IPV4; DNS_DISPATCHATTR_IPV4;
attrmask = DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_TCP |
DNS_DISPATCHATTR_IPV4 | DNS_DISPATCHATTR_IPV6;
dispatchv4 = NULL; dispatchv4 = NULL;
RUNCHECK(dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, &bind_any, RUNCHECK(dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, &bind_any,
4096, 4, 2, 3, 5, attrs, attrmask, 4096, 4, 2, 3, 5, attrs, &dispatchv4));
&dispatchv4));
requestmgr = NULL; requestmgr = NULL;
RUNCHECK(dns_requestmgr_create(mctx, timermgr, socketmgr, taskmgr, RUNCHECK(dns_requestmgr_create(mctx, timermgr, socketmgr, taskmgr,
dispatchmgr, dispatchv4, NULL, dispatchmgr, dispatchv4, NULL,

View File

@@ -2071,7 +2071,7 @@ main(int argc, char *argv[]) {
isc_timermgr_t *timermgr = NULL; isc_timermgr_t *timermgr = NULL;
isc_socketmgr_t *socketmgr = NULL; isc_socketmgr_t *socketmgr = NULL;
dns_dispatchmgr_t *dispatchmgr = NULL; dns_dispatchmgr_t *dispatchmgr = NULL;
unsigned int attrs, attrmask; unsigned int attrs;
dns_dispatch_t *dispatchvx = NULL; dns_dispatch_t *dispatchvx = NULL;
dns_view_t *view = NULL; dns_view_t *view = NULL;
int ns; int ns;
@@ -2139,14 +2139,10 @@ main(int argc, char *argv[]) {
isc_sockaddr_any6(&bind_any); isc_sockaddr_any6(&bind_any);
attrs |= DNS_DISPATCHATTR_IPV6; attrs |= DNS_DISPATCHATTR_IPV6;
} }
attrmask = DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_TCP |
DNS_DISPATCHATTR_IPV4 | DNS_DISPATCHATTR_IPV6;
dispatchvx = NULL; dispatchvx = NULL;
RUNCHECK(dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, RUNCHECK(dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr,
have_src ? &srcaddr : &bind_any, 4096, 100, have_src ? &srcaddr : &bind_any, 4096, 100,
100, 17, 19, attrs, attrmask, 100, 17, 19, attrs, &dispatchvx));
&dispatchvx));
RUNCHECK(dns_requestmgr_create( RUNCHECK(dns_requestmgr_create(
mctx, timermgr, socketmgr, taskmgr, dispatchmgr, mctx, timermgr, socketmgr, taskmgr, dispatchmgr,
have_ipv4 ? dispatchvx : NULL, have_ipv6 ? dispatchvx : NULL, have_ipv4 ? dispatchvx : NULL, have_ipv6 ? dispatchvx : NULL,

View File

@@ -201,7 +201,7 @@ getudpdispatch(int family, dns_dispatchmgr_t *dispatchmgr,
isc_socketmgr_t *socketmgr, isc_taskmgr_t *taskmgr, isc_socketmgr_t *socketmgr, isc_taskmgr_t *taskmgr,
bool is_shared, dns_dispatch_t **dispp, bool is_shared, dns_dispatch_t **dispp,
const isc_sockaddr_t *localaddr) { const isc_sockaddr_t *localaddr) {
unsigned int attrs, attrmask; unsigned int attrs;
dns_dispatch_t *disp; dns_dispatch_t *disp;
unsigned buffersize, maxbuffers, maxrequests, buckets, increment; unsigned buffersize, maxbuffers, maxrequests, buckets, increment;
isc_result_t result; isc_result_t result;
@@ -220,11 +220,6 @@ getudpdispatch(int family, dns_dispatchmgr_t *dispatchmgr,
INSIST(0); INSIST(0);
ISC_UNREACHABLE(); ISC_UNREACHABLE();
} }
attrmask = 0;
attrmask |= DNS_DISPATCHATTR_UDP;
attrmask |= DNS_DISPATCHATTR_TCP;
attrmask |= DNS_DISPATCHATTR_IPV4;
attrmask |= DNS_DISPATCHATTR_IPV6;
if (localaddr == NULL) { if (localaddr == NULL) {
isc_sockaddr_anyofpf(&anyaddr, family); isc_sockaddr_anyofpf(&anyaddr, family);
@@ -240,8 +235,7 @@ getudpdispatch(int family, dns_dispatchmgr_t *dispatchmgr,
disp = NULL; disp = NULL;
result = dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, localaddr, result = dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, localaddr,
buffersize, maxbuffers, maxrequests, buffersize, maxbuffers, maxrequests,
buckets, increment, attrs, attrmask, buckets, increment, attrs, &disp);
&disp);
if (result == ISC_R_SUCCESS) { if (result == ISC_R_SUCCESS) {
*dispp = disp; *dispp = disp;
} }

View File

@@ -1991,101 +1991,6 @@ unlock:
#define ATTRMATCH(_a1, _a2, _mask) (((_a1) & (_mask)) == ((_a2) & (_mask))) #define ATTRMATCH(_a1, _a2, _mask) (((_a1) & (_mask)) == ((_a2) & (_mask)))
static bool
local_addr_match(dns_dispatch_t *disp, const isc_sockaddr_t *addr) {
isc_sockaddr_t sockaddr;
isc_result_t result;
REQUIRE(disp->socket != NULL);
if (addr == NULL) {
return (true);
}
/*
* Don't match wildcard ports unless the port is available in the
* current configuration.
*/
if (isc_sockaddr_getport(addr) == 0 &&
isc_sockaddr_getport(&disp->local) == 0 &&
!portavailable(disp->mgr, disp->socket, NULL))
{
return (false);
}
/*
* Check if we match the binding <address,port>.
* Wildcard ports match/fail here.
*/
if (isc_sockaddr_equal(&disp->local, addr)) {
return (true);
}
if (isc_sockaddr_getport(addr) == 0) {
return (false);
}
/*
* Check if we match a bound wildcard port <address,port>.
*/
if (!isc_sockaddr_eqaddr(&disp->local, addr)) {
return (false);
}
result = isc_socket_getsockname(disp->socket, &sockaddr);
if (result != ISC_R_SUCCESS) {
return (false);
}
return (isc_sockaddr_equal(&sockaddr, addr));
}
/*
* Requires mgr be locked.
*
* No dispatcher can be locked by this thread when calling this function.
*
*
* NOTE:
* If a matching dispatcher is found, it is locked after this function
* returns, and must be unlocked by the caller.
*/
static isc_result_t
dispatch_find(dns_dispatchmgr_t *mgr, const isc_sockaddr_t *local,
unsigned int attributes, unsigned int mask,
dns_dispatch_t **dispp) {
dns_dispatch_t *disp;
isc_result_t result;
/*
* Make certain that we will not match a private or exclusive dispatch.
*/
attributes &= ~(DNS_DISPATCHATTR_PRIVATE | DNS_DISPATCHATTR_EXCLUSIVE);
mask |= (DNS_DISPATCHATTR_PRIVATE | DNS_DISPATCHATTR_EXCLUSIVE);
disp = ISC_LIST_HEAD(mgr->list);
while (disp != NULL) {
LOCK(&disp->lock);
if ((disp->shutting_down == 0) &&
ATTRMATCH(disp->attributes, attributes, mask) &&
local_addr_match(disp, local))
{
break;
}
UNLOCK(&disp->lock);
disp = ISC_LIST_NEXT(disp, link);
}
if (disp == NULL) {
result = ISC_R_NOTFOUND;
goto out;
}
*dispp = disp;
result = ISC_R_SUCCESS;
out:
return (result);
}
static isc_result_t static isc_result_t
qid_allocate(dns_dispatchmgr_t *mgr, unsigned int buckets, qid_allocate(dns_dispatchmgr_t *mgr, unsigned int buckets,
unsigned int increment, dns_qid_t **qidp, bool needsocktable) { unsigned int increment, dns_qid_t **qidp, bool needsocktable) {
@@ -2450,13 +2355,12 @@ dns_dispatch_gettcp(dns_dispatchmgr_t *mgr, const isc_sockaddr_t *destaddr,
} }
isc_result_t isc_result_t
dns_dispatch_getudp_dup(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr, dns_dispatch_getudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
isc_taskmgr_t *taskmgr, const isc_sockaddr_t *localaddr, isc_taskmgr_t *taskmgr, const isc_sockaddr_t *localaddr,
unsigned int buffersize, unsigned int maxbuffers, unsigned int buffersize, unsigned int maxbuffers,
unsigned int maxrequests, unsigned int buckets, unsigned int maxrequests, unsigned int buckets,
unsigned int increment, unsigned int attributes, unsigned int increment, unsigned int attributes,
unsigned int mask, dns_dispatch_t **dispp, dns_dispatch_t **dispp) {
dns_dispatch_t *dup_dispatch) {
isc_result_t result; isc_result_t result;
dns_dispatch_t *disp = NULL; dns_dispatch_t *disp = NULL;
@@ -2484,46 +2388,12 @@ dns_dispatch_getudp_dup(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
goto createudp; goto createudp;
} }
/*
* See if we have a dispatcher that matches.
*/
if (dup_dispatch == NULL) {
result = dispatch_find(mgr, localaddr, attributes, mask, &disp);
if (result == ISC_R_SUCCESS) {
disp->refcount++;
if (disp->maxrequests < maxrequests) {
disp->maxrequests = maxrequests;
}
if ((disp->attributes & DNS_DISPATCHATTR_NOLISTEN) ==
0 &&
(attributes & DNS_DISPATCHATTR_NOLISTEN) != 0)
{
disp->attributes |= DNS_DISPATCHATTR_NOLISTEN;
if (disp->recv_pending != 0) {
isc_socket_cancel(disp->socket,
disp->task[0],
ISC_SOCKCANCEL_RECV);
}
}
UNLOCK(&disp->lock);
UNLOCK(&mgr->lock);
*dispp = disp;
return (ISC_R_SUCCESS);
}
}
createudp: createudp:
/* /*
* Nope, create one. * Nope, create one.
*/ */
result = dispatch_createudp( result = dispatch_createudp(mgr, sockmgr, taskmgr, localaddr,
mgr, sockmgr, taskmgr, localaddr, maxrequests, attributes, maxrequests, attributes, &disp, NULL);
&disp, dup_dispatch == NULL ? NULL : dup_dispatch->socket);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
UNLOCK(&mgr->lock); UNLOCK(&mgr->lock);
@@ -2536,19 +2406,6 @@ createudp:
return (ISC_R_SUCCESS); return (ISC_R_SUCCESS);
} }
isc_result_t
dns_dispatch_getudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
isc_taskmgr_t *taskmgr, const isc_sockaddr_t *localaddr,
unsigned int buffersize, unsigned int maxbuffers,
unsigned int maxrequests, unsigned int buckets,
unsigned int increment, unsigned int attributes,
unsigned int mask, dns_dispatch_t **dispp) {
return (dns_dispatch_getudp_dup(mgr, sockmgr, taskmgr, localaddr,
buffersize, maxbuffers, maxrequests,
buckets, increment, attributes, mask,
dispp, NULL));
}
/* /*
* mgr should be locked. * mgr should be locked.
*/ */

View File

@@ -229,16 +229,7 @@ dns_dispatch_getudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
unsigned int buffersize, unsigned int maxbuffers, unsigned int buffersize, unsigned int maxbuffers,
unsigned int maxrequests, unsigned int buckets, unsigned int maxrequests, unsigned int buckets,
unsigned int increment, unsigned int attributes, unsigned int increment, unsigned int attributes,
unsigned int mask, dns_dispatch_t **dispp); dns_dispatch_t **dispp);
isc_result_t
dns_dispatch_getudp_dup(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
isc_taskmgr_t *taskmgr, const isc_sockaddr_t *localaddr,
unsigned int buffersize, unsigned int maxbuffers,
unsigned int maxrequests, unsigned int buckets,
unsigned int increment, unsigned int attributes,
unsigned int mask, dns_dispatch_t **dispp,
dns_dispatch_t *dup);
/*%< /*%<
* Attach to existing dns_dispatch_t if one is found with dns_dispatchmgr_find, * Attach to existing dns_dispatch_t if one is found with dns_dispatchmgr_find,
* otherwise create a new UDP dispatch. * otherwise create a new UDP dispatch.

View File

@@ -593,7 +593,7 @@ static isc_result_t
find_udp_dispatch(dns_requestmgr_t *requestmgr, const isc_sockaddr_t *srcaddr, find_udp_dispatch(dns_requestmgr_t *requestmgr, const isc_sockaddr_t *srcaddr,
const isc_sockaddr_t *destaddr, dns_dispatch_t **dispatchp) { const isc_sockaddr_t *destaddr, dns_dispatch_t **dispatchp) {
dns_dispatch_t *disp = NULL; dns_dispatch_t *disp = NULL;
unsigned int attrs, attrmask; unsigned int attrs;
if (srcaddr == NULL) { if (srcaddr == NULL) {
switch (isc_sockaddr_pf(destaddr)) { switch (isc_sockaddr_pf(destaddr)) {
@@ -628,15 +628,10 @@ find_udp_dispatch(dns_requestmgr_t *requestmgr, const isc_sockaddr_t *srcaddr,
default: default:
return (ISC_R_NOTIMPLEMENTED); return (ISC_R_NOTIMPLEMENTED);
} }
attrmask = 0;
attrmask |= DNS_DISPATCHATTR_UDP;
attrmask |= DNS_DISPATCHATTR_TCP;
attrmask |= DNS_DISPATCHATTR_IPV4;
attrmask |= DNS_DISPATCHATTR_IPV6;
return (dns_dispatch_getudp(requestmgr->dispatchmgr, return (dns_dispatch_getudp(requestmgr->dispatchmgr,
requestmgr->socketmgr, requestmgr->taskmgr, requestmgr->socketmgr, requestmgr->taskmgr,
srcaddr, 4096, 32768, 32768, 16411, 16433, srcaddr, 4096, 32768, 32768, 16411, 16433,
attrs, attrmask, dispatchp)); attrs, dispatchp));
} }
static isc_result_t static isc_result_t

View File

@@ -2158,7 +2158,7 @@ fctx_query(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo,
*/ */
} else { } else {
if (have_addr) { if (have_addr) {
unsigned int attrs, attrmask; unsigned int attrs;
attrs = DNS_DISPATCHATTR_UDP; attrs = DNS_DISPATCHATTR_UDP;
switch (isc_sockaddr_pf(&addr)) { switch (isc_sockaddr_pf(&addr)) {
case AF_INET: case AF_INET:
@@ -2173,14 +2173,10 @@ fctx_query(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo,
result = ISC_R_NOTIMPLEMENTED; result = ISC_R_NOTIMPLEMENTED;
goto cleanup_query; goto cleanup_query;
} }
attrmask = DNS_DISPATCHATTR_UDP;
attrmask |= DNS_DISPATCHATTR_TCP;
attrmask |= DNS_DISPATCHATTR_IPV4;
attrmask |= DNS_DISPATCHATTR_IPV6;
result = dns_dispatch_getudp( result = dns_dispatch_getudp(
res->dispatchmgr, res->socketmgr, res->taskmgr, res->dispatchmgr, res->socketmgr, res->taskmgr,
&addr, 4096, 20000, 32768, 16411, 16433, attrs, &addr, 4096, 20000, 32768, 16411, 16433, attrs,
attrmask, &query->dispatch); &query->dispatch);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
goto cleanup_query; goto cleanup_query;
} }

View File

@@ -77,7 +77,7 @@ make_dispatchset(unsigned int ndisps) {
isc_sockaddr_any(&any); isc_sockaddr_any(&any);
attrs = DNS_DISPATCHATTR_IPV4 | DNS_DISPATCHATTR_UDP; attrs = DNS_DISPATCHATTR_IPV4 | DNS_DISPATCHATTR_UDP;
result = dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, &any, 512, result = dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, &any, 512,
6, 1024, 17, 19, attrs, attrs, &disp); 6, 1024, 17, 19, attrs, &disp);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
return (result); return (result);
} }

View File

@@ -58,7 +58,7 @@ _setup(void **state) {
isc_sockaddr_any(&local); isc_sockaddr_any(&local);
result = dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, &local, result = dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, &local,
4096, 100, 100, 100, 500, 0, 0, &dispatch); 4096, 100, 100, 100, 500, 0, &dispatch);
assert_int_equal(result, ISC_R_SUCCESS); assert_int_equal(result, ISC_R_SUCCESS);
return (0); return (0);