mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-04 08:35:31 +00:00
Make sharing of pending TCP dispatches nonoptional
The DNS_REQUESTOPT_SHARE flag was added when client-side pipelining of TCP queries was implemented. there was no need to make it optional; forcing it to be in effect for all requests simplfiies the code.
This commit is contained in:
@@ -173,10 +173,10 @@ sendquery(isc_task_t *task) {
|
|||||||
dns_message_addname(message, qname, DNS_SECTION_QUESTION);
|
dns_message_addname(message, qname, DNS_SECTION_QUESTION);
|
||||||
|
|
||||||
request = NULL;
|
request = NULL;
|
||||||
result = dns_request_createvia(
|
result = dns_request_createvia(requestmgr, message,
|
||||||
requestmgr, message, have_src ? &srcaddr : NULL, &dstaddr, -1,
|
have_src ? &srcaddr : NULL, &dstaddr, -1,
|
||||||
DNS_REQUESTOPT_TCP | DNS_REQUESTOPT_SHARE, NULL, TIMEOUT, 0, 0,
|
DNS_REQUESTOPT_TCP, NULL, TIMEOUT, 0, 0,
|
||||||
task, recvresponse, message, &request);
|
task, recvresponse, message, &request);
|
||||||
CHECK("dns_request_create", result);
|
CHECK("dns_request_create", result);
|
||||||
|
|
||||||
return (ISC_R_SUCCESS);
|
return (ISC_R_SUCCESS);
|
||||||
|
@@ -752,7 +752,7 @@ sendquery(struct query *query, isc_task_t *task) {
|
|||||||
|
|
||||||
options = 0;
|
options = 0;
|
||||||
if (tcp_mode) {
|
if (tcp_mode) {
|
||||||
options |= DNS_REQUESTOPT_TCP | DNS_REQUESTOPT_SHARE;
|
options |= DNS_REQUESTOPT_TCP;
|
||||||
}
|
}
|
||||||
request = NULL;
|
request = NULL;
|
||||||
result = dns_request_createvia(
|
result = dns_request_createvia(
|
||||||
|
@@ -43,7 +43,6 @@
|
|||||||
#define DNS_REQUESTOPT_TCP 0x00000001U
|
#define DNS_REQUESTOPT_TCP 0x00000001U
|
||||||
#define DNS_REQUESTOPT_CASE 0x00000002U
|
#define DNS_REQUESTOPT_CASE 0x00000002U
|
||||||
#define DNS_REQUESTOPT_FIXEDID 0x00000004U
|
#define DNS_REQUESTOPT_FIXEDID 0x00000004U
|
||||||
#define DNS_REQUESTOPT_SHARE 0x00000008U
|
|
||||||
|
|
||||||
typedef struct dns_requestevent {
|
typedef struct dns_requestevent {
|
||||||
ISC_EVENT_COMMON(struct dns_requestevent);
|
ISC_EVENT_COMMON(struct dns_requestevent);
|
||||||
|
@@ -512,7 +512,7 @@ isblackholed(dns_dispatchmgr_t *dispatchmgr, const isc_sockaddr_t *destaddr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static isc_result_t
|
static isc_result_t
|
||||||
create_tcp_dispatch(bool newtcp, bool share, dns_requestmgr_t *requestmgr,
|
create_tcp_dispatch(bool newtcp, dns_requestmgr_t *requestmgr,
|
||||||
const isc_sockaddr_t *srcaddr,
|
const isc_sockaddr_t *srcaddr,
|
||||||
const isc_sockaddr_t *destaddr, isc_dscp_t dscp,
|
const isc_sockaddr_t *destaddr, isc_dscp_t dscp,
|
||||||
bool *connected, dns_dispatch_t **dispatchp) {
|
bool *connected, dns_dispatch_t **dispatchp) {
|
||||||
@@ -522,7 +522,7 @@ create_tcp_dispatch(bool newtcp, bool share, dns_requestmgr_t *requestmgr,
|
|||||||
unsigned int attrs;
|
unsigned int attrs;
|
||||||
isc_sockaddr_t bind_any;
|
isc_sockaddr_t bind_any;
|
||||||
|
|
||||||
if (!newtcp && share) {
|
if (!newtcp) {
|
||||||
result = dns_dispatch_gettcp(requestmgr->dispatchmgr, destaddr,
|
result = dns_dispatch_gettcp(requestmgr->dispatchmgr, destaddr,
|
||||||
srcaddr, connected, dispatchp);
|
srcaddr, connected, dispatchp);
|
||||||
if (result == ISC_R_SUCCESS) {
|
if (result == ISC_R_SUCCESS) {
|
||||||
@@ -535,20 +535,6 @@ create_tcp_dispatch(bool newtcp, bool share, dns_requestmgr_t *requestmgr,
|
|||||||
*connected ? "existing" : "pending", peer);
|
*connected ? "existing" : "pending", peer);
|
||||||
return (result);
|
return (result);
|
||||||
}
|
}
|
||||||
} else if (!newtcp) {
|
|
||||||
result = dns_dispatch_gettcp(requestmgr->dispatchmgr, destaddr,
|
|
||||||
srcaddr, NULL, dispatchp);
|
|
||||||
if (result == ISC_R_SUCCESS) {
|
|
||||||
char peer[ISC_SOCKADDR_FORMATSIZE];
|
|
||||||
|
|
||||||
*connected = true;
|
|
||||||
isc_sockaddr_format(destaddr, peer, sizeof(peer));
|
|
||||||
req_log(ISC_LOG_DEBUG(1),
|
|
||||||
"attached to existing TCP "
|
|
||||||
"connection to %s",
|
|
||||||
peer);
|
|
||||||
return (result);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
result = isc_socket_create(requestmgr->socketmgr,
|
result = isc_socket_create(requestmgr->socketmgr,
|
||||||
@@ -635,13 +621,13 @@ find_udp_dispatch(dns_requestmgr_t *requestmgr, const isc_sockaddr_t *srcaddr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static isc_result_t
|
static isc_result_t
|
||||||
get_dispatch(bool tcp, bool newtcp, bool share, dns_requestmgr_t *requestmgr,
|
get_dispatch(bool tcp, bool newtcp, dns_requestmgr_t *requestmgr,
|
||||||
const isc_sockaddr_t *srcaddr, const isc_sockaddr_t *destaddr,
|
const isc_sockaddr_t *srcaddr, const isc_sockaddr_t *destaddr,
|
||||||
isc_dscp_t dscp, bool *connected, dns_dispatch_t **dispatchp) {
|
isc_dscp_t dscp, bool *connected, dns_dispatch_t **dispatchp) {
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
|
|
||||||
if (tcp) {
|
if (tcp) {
|
||||||
result = create_tcp_dispatch(newtcp, share, requestmgr, srcaddr,
|
result = create_tcp_dispatch(newtcp, requestmgr, srcaddr,
|
||||||
destaddr, dscp, connected,
|
destaddr, dscp, connected,
|
||||||
dispatchp);
|
dispatchp);
|
||||||
} else {
|
} else {
|
||||||
@@ -686,7 +672,6 @@ dns_request_createraw(dns_requestmgr_t *requestmgr, isc_buffer_t *msgbuf,
|
|||||||
dns_messageid_t id;
|
dns_messageid_t id;
|
||||||
bool tcp = false;
|
bool tcp = false;
|
||||||
bool newtcp = false;
|
bool newtcp = false;
|
||||||
bool share = false;
|
|
||||||
isc_region_t r;
|
isc_region_t r;
|
||||||
bool connected = false;
|
bool connected = false;
|
||||||
unsigned int dispopt = 0;
|
unsigned int dispopt = 0;
|
||||||
@@ -752,11 +737,10 @@ dns_request_createraw(dns_requestmgr_t *requestmgr, isc_buffer_t *msgbuf,
|
|||||||
if ((options & DNS_REQUESTOPT_TCP) != 0 || r.length > 512) {
|
if ((options & DNS_REQUESTOPT_TCP) != 0 || r.length > 512) {
|
||||||
tcp = true;
|
tcp = true;
|
||||||
}
|
}
|
||||||
share = (options & DNS_REQUESTOPT_SHARE);
|
|
||||||
|
|
||||||
again:
|
again:
|
||||||
result = get_dispatch(tcp, newtcp, share, requestmgr, srcaddr, destaddr,
|
result = get_dispatch(tcp, newtcp, requestmgr, srcaddr, destaddr, dscp,
|
||||||
dscp, &connected, &request->dispatch);
|
&connected, &request->dispatch);
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
@@ -876,7 +860,6 @@ dns_request_createvia(dns_requestmgr_t *requestmgr, dns_message_t *message,
|
|||||||
isc_mem_t *mctx;
|
isc_mem_t *mctx;
|
||||||
dns_messageid_t id;
|
dns_messageid_t id;
|
||||||
bool tcp;
|
bool tcp;
|
||||||
bool share;
|
|
||||||
bool settsigkey = true;
|
bool settsigkey = true;
|
||||||
bool connected = false;
|
bool connected = false;
|
||||||
|
|
||||||
@@ -939,9 +922,8 @@ dns_request_createvia(dns_requestmgr_t *requestmgr, dns_message_t *message,
|
|||||||
|
|
||||||
use_tcp:
|
use_tcp:
|
||||||
tcp = ((options & DNS_REQUESTOPT_TCP) != 0);
|
tcp = ((options & DNS_REQUESTOPT_TCP) != 0);
|
||||||
share = ((options & DNS_REQUESTOPT_SHARE) != 0);
|
result = get_dispatch(tcp, false, requestmgr, srcaddr, destaddr, dscp,
|
||||||
result = get_dispatch(tcp, false, share, requestmgr, srcaddr, destaddr,
|
&connected, &request->dispatch);
|
||||||
dscp, &connected, &request->dispatch);
|
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user