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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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.
|
||||||
*/
|
*/
|
||||||
|
@@ -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.
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user