isc_result_t result = ISC_R_FAILURE;
dns_dispatch_t *disp;
isc_sockaddr_t sa;
- unsigned int attrs, attrmask;
+ unsigned int attrs;
const cfg_obj_t *obj = NULL;
unsigned int maxdispatchbuffers = UDPBUFFERS;
isc_dscp_t dscp = -1;
}
}
- attrmask = 0;
- attrmask |= DNS_DISPATCHATTR_UDP;
- attrmask |= DNS_DISPATCHATTR_TCP;
- attrmask |= DNS_DISPATCHATTR_IPV4;
- attrmask |= DNS_DISPATCHATTR_IPV6;
-
disp = NULL;
- result = dns_dispatch_getudp(named_g_dispatchmgr, named_g_socketmgr,
- named_g_taskmgr, &sa, 4096,
- maxdispatchbuffers, 32768, 16411, 16433,
- attrs, attrmask, &disp);
+ result = dns_dispatch_getudp(
+ named_g_dispatchmgr, named_g_socketmgr, named_g_taskmgr, &sa,
+ 4096, maxdispatchbuffers, 32768, 16411, 16433, attrs, &disp);
if (result != ISC_R_SUCCESS) {
isc_sockaddr_t any;
char buf[ISC_SOCKADDR_FORMATSIZE];
in_port_t port;
char addrbuf[ISC_SOCKADDR_FORMATSIZE];
isc_result_t result;
- unsigned int attrs, attrmask;
+ unsigned int attrs;
REQUIRE(NAMED_SERVER_VALID(server));
result = ISC_R_NOTIMPLEMENTED;
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,
named_g_taskmgr, &dispatch->addr, 4096,
UDPBUFFERS, 32768, 16411, 16433, attrs,
- attrmask, &dispatch->dispatch);
+ &dispatch->dispatch);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
setup_system(void) {
isc_result_t result;
isc_sockaddr_t bind_any, bind_any6;
- unsigned int attrs, attrmask;
+ unsigned int attrs;
isc_sockaddrlist_t *nslist;
isc_logconfig_t *logconfig = NULL;
irs_resconf_t *resconf = NULL;
set_source_ports(dispatchmgr);
- attrmask = DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_TCP;
- attrmask |= DNS_DISPATCHATTR_IPV4 | DNS_DISPATCHATTR_IPV6;
-
if (have_ipv6) {
attrs = DNS_DISPATCHATTR_UDP;
attrs |= DNS_DISPATCHATTR_MAKEQUERY;
isc_sockaddr_any6(&bind_any6);
result = dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr,
&bind_any6, PACKETSIZE, 4, 2, 3, 5,
- attrs, attrmask, &dispatchv6);
+ attrs, &dispatchv6);
check_result(result, "dns_dispatch_getudp (v6)");
}
isc_sockaddr_any(&bind_any);
result = dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr,
&bind_any, PACKETSIZE, 4, 2, 3, 5,
- attrs, attrmask, &dispatchv4);
+ attrs, &dispatchv4);
check_result(result, "dns_dispatch_getudp (v4)");
}
isc_timermgr_t *timermgr = NULL;
isc_socketmgr_t *socketmgr = NULL;
dns_dispatchmgr_t *dispatchmgr = NULL;
- unsigned int attrs, attrmask;
+ unsigned int attrs;
dns_dispatch_t *dispatchv4;
dns_view_t *view;
uint16_t port = PORT;
attrs = DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_MAKEQUERY |
DNS_DISPATCHATTR_IPV4;
- attrmask = DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_TCP |
- DNS_DISPATCHATTR_IPV4 | DNS_DISPATCHATTR_IPV6;
dispatchv4 = NULL;
RUNCHECK(dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr,
have_src ? &srcaddr : &bind_any, 4096, 4,
- 2, 3, 5, attrs, attrmask, &dispatchv4));
+ 2, 3, 5, attrs, &dispatchv4));
requestmgr = NULL;
RUNCHECK(dns_requestmgr_create(mctx, timermgr, socketmgr, taskmgr,
dispatchmgr, dispatchv4, NULL,
isc_timermgr_t *timermgr = NULL;
isc_socketmgr_t *socketmgr = NULL;
isc_socket_t *sock = NULL;
- unsigned int attrs, attrmask;
+ unsigned int attrs;
isc_sockaddr_t bind_any;
dns_dispatchmgr_t *dispatchmgr = NULL;
dns_dispatch_t *dispatchv4 = NULL;
isc_sockaddr_any(&bind_any);
attrs = DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_MAKEQUERY |
DNS_DISPATCHATTR_IPV4;
- attrmask = DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_TCP |
- DNS_DISPATCHATTR_IPV4 | DNS_DISPATCHATTR_IPV6;
dispatchv4 = NULL;
RUNCHECK(dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, &bind_any,
- 4096, 4, 2, 3, 5, attrs, attrmask,
- &dispatchv4));
+ 4096, 4, 2, 3, 5, attrs, &dispatchv4));
requestmgr = NULL;
RUNCHECK(dns_requestmgr_create(mctx, timermgr, socketmgr, taskmgr,
dispatchmgr, dispatchv4, NULL,
isc_timermgr_t *timermgr = NULL;
isc_socketmgr_t *socketmgr = NULL;
isc_socket_t *sock = NULL;
- unsigned int attrs, attrmask;
+ unsigned int attrs;
isc_sockaddr_t bind_any;
dns_dispatchmgr_t *dispatchmgr = NULL;
dns_dispatch_t *dispatchv4 = NULL;
isc_sockaddr_any(&bind_any);
attrs = DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_MAKEQUERY |
DNS_DISPATCHATTR_IPV4;
- attrmask = DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_TCP |
- DNS_DISPATCHATTR_IPV4 | DNS_DISPATCHATTR_IPV6;
dispatchv4 = NULL;
RUNCHECK(dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, &bind_any,
- 4096, 4, 2, 3, 5, attrs, attrmask,
- &dispatchv4));
+ 4096, 4, 2, 3, 5, attrs, &dispatchv4));
requestmgr = NULL;
RUNCHECK(dns_requestmgr_create(mctx, timermgr, socketmgr, taskmgr,
dispatchmgr, dispatchv4, NULL,
isc_timermgr_t *timermgr = NULL;
isc_socketmgr_t *socketmgr = NULL;
dns_dispatchmgr_t *dispatchmgr = NULL;
- unsigned int attrs, attrmask;
+ unsigned int attrs;
dns_dispatch_t *dispatchvx = NULL;
dns_view_t *view = NULL;
int ns;
isc_sockaddr_any6(&bind_any);
attrs |= DNS_DISPATCHATTR_IPV6;
}
- attrmask = DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_TCP |
- DNS_DISPATCHATTR_IPV4 | DNS_DISPATCHATTR_IPV6;
dispatchvx = NULL;
RUNCHECK(dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr,
have_src ? &srcaddr : &bind_any, 4096, 100,
- 100, 17, 19, attrs, attrmask,
- &dispatchvx));
-
+ 100, 17, 19, attrs, &dispatchvx));
RUNCHECK(dns_requestmgr_create(
mctx, timermgr, socketmgr, taskmgr, dispatchmgr,
have_ipv4 ? dispatchvx : NULL, have_ipv6 ? dispatchvx : NULL,
isc_socketmgr_t *socketmgr, isc_taskmgr_t *taskmgr,
bool is_shared, dns_dispatch_t **dispp,
const isc_sockaddr_t *localaddr) {
- unsigned int attrs, attrmask;
+ unsigned int attrs;
dns_dispatch_t *disp;
unsigned buffersize, maxbuffers, maxrequests, buckets, increment;
isc_result_t result;
INSIST(0);
ISC_UNREACHABLE();
}
- attrmask = 0;
- attrmask |= DNS_DISPATCHATTR_UDP;
- attrmask |= DNS_DISPATCHATTR_TCP;
- attrmask |= DNS_DISPATCHATTR_IPV4;
- attrmask |= DNS_DISPATCHATTR_IPV6;
if (localaddr == NULL) {
isc_sockaddr_anyofpf(&anyaddr, family);
disp = NULL;
result = dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, localaddr,
buffersize, maxbuffers, maxrequests,
- buckets, increment, attrs, attrmask,
- &disp);
+ buckets, increment, attrs, &disp);
if (result == ISC_R_SUCCESS) {
*dispp = disp;
}
#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
qid_allocate(dns_dispatchmgr_t *mgr, unsigned int buckets,
unsigned int increment, dns_qid_t **qidp, bool needsocktable) {
}
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_dispatch) {
+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,
+ dns_dispatch_t **dispp) {
isc_result_t result;
dns_dispatch_t *disp = NULL;
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:
/*
* Nope, create one.
*/
- result = dispatch_createudp(
- mgr, sockmgr, taskmgr, localaddr, maxrequests, attributes,
- &disp, dup_dispatch == NULL ? NULL : dup_dispatch->socket);
+ result = dispatch_createudp(mgr, sockmgr, taskmgr, localaddr,
+ maxrequests, attributes, &disp, NULL);
if (result != ISC_R_SUCCESS) {
UNLOCK(&mgr->lock);
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.
*/
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);
-
-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);
+ dns_dispatch_t **dispp);
/*%<
* Attach to existing dns_dispatch_t if one is found with dns_dispatchmgr_find,
* otherwise create a new UDP dispatch.
find_udp_dispatch(dns_requestmgr_t *requestmgr, const isc_sockaddr_t *srcaddr,
const isc_sockaddr_t *destaddr, dns_dispatch_t **dispatchp) {
dns_dispatch_t *disp = NULL;
- unsigned int attrs, attrmask;
+ unsigned int attrs;
if (srcaddr == NULL) {
switch (isc_sockaddr_pf(destaddr)) {
default:
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,
requestmgr->socketmgr, requestmgr->taskmgr,
srcaddr, 4096, 32768, 32768, 16411, 16433,
- attrs, attrmask, dispatchp));
+ attrs, dispatchp));
}
static isc_result_t
*/
} else {
if (have_addr) {
- unsigned int attrs, attrmask;
+ unsigned int attrs;
attrs = DNS_DISPATCHATTR_UDP;
switch (isc_sockaddr_pf(&addr)) {
case AF_INET:
result = ISC_R_NOTIMPLEMENTED;
goto cleanup_query;
}
- attrmask = DNS_DISPATCHATTR_UDP;
- attrmask |= DNS_DISPATCHATTR_TCP;
- attrmask |= DNS_DISPATCHATTR_IPV4;
- attrmask |= DNS_DISPATCHATTR_IPV6;
result = dns_dispatch_getudp(
res->dispatchmgr, res->socketmgr, res->taskmgr,
&addr, 4096, 20000, 32768, 16411, 16433, attrs,
- attrmask, &query->dispatch);
+ &query->dispatch);
if (result != ISC_R_SUCCESS) {
goto cleanup_query;
}
isc_sockaddr_any(&any);
attrs = DNS_DISPATCHATTR_IPV4 | DNS_DISPATCHATTR_UDP;
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) {
return (result);
}
isc_sockaddr_any(&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);
return (0);