2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-03 08:05:21 +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:
Evan Hunt
2020-12-11 15:20:33 -08:00
committed by Ondřej Surý
parent ca11f68d61
commit 5863acc907
4 changed files with 13 additions and 32 deletions

View File

@@ -173,10 +173,10 @@ sendquery(isc_task_t *task) {
dns_message_addname(message, qname, DNS_SECTION_QUESTION);
request = NULL;
result = dns_request_createvia(
requestmgr, message, have_src ? &srcaddr : NULL, &dstaddr, -1,
DNS_REQUESTOPT_TCP | DNS_REQUESTOPT_SHARE, NULL, TIMEOUT, 0, 0,
task, recvresponse, message, &request);
result = dns_request_createvia(requestmgr, message,
have_src ? &srcaddr : NULL, &dstaddr, -1,
DNS_REQUESTOPT_TCP, NULL, TIMEOUT, 0, 0,
task, recvresponse, message, &request);
CHECK("dns_request_create", result);
return (ISC_R_SUCCESS);

View File

@@ -752,7 +752,7 @@ sendquery(struct query *query, isc_task_t *task) {
options = 0;
if (tcp_mode) {
options |= DNS_REQUESTOPT_TCP | DNS_REQUESTOPT_SHARE;
options |= DNS_REQUESTOPT_TCP;
}
request = NULL;
result = dns_request_createvia(

View File

@@ -43,7 +43,6 @@
#define DNS_REQUESTOPT_TCP 0x00000001U
#define DNS_REQUESTOPT_CASE 0x00000002U
#define DNS_REQUESTOPT_FIXEDID 0x00000004U
#define DNS_REQUESTOPT_SHARE 0x00000008U
typedef struct dns_requestevent {
ISC_EVENT_COMMON(struct dns_requestevent);

View File

@@ -512,7 +512,7 @@ isblackholed(dns_dispatchmgr_t *dispatchmgr, const isc_sockaddr_t *destaddr) {
}
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 *destaddr, isc_dscp_t dscp,
bool *connected, dns_dispatch_t **dispatchp) {
@@ -522,7 +522,7 @@ create_tcp_dispatch(bool newtcp, bool share, dns_requestmgr_t *requestmgr,
unsigned int attrs;
isc_sockaddr_t bind_any;
if (!newtcp && share) {
if (!newtcp) {
result = dns_dispatch_gettcp(requestmgr->dispatchmgr, destaddr,
srcaddr, connected, dispatchp);
if (result == ISC_R_SUCCESS) {
@@ -535,20 +535,6 @@ create_tcp_dispatch(bool newtcp, bool share, dns_requestmgr_t *requestmgr,
*connected ? "existing" : "pending", peer);
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,
@@ -635,13 +621,13 @@ find_udp_dispatch(dns_requestmgr_t *requestmgr, const isc_sockaddr_t *srcaddr,
}
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,
isc_dscp_t dscp, bool *connected, dns_dispatch_t **dispatchp) {
isc_result_t result;
if (tcp) {
result = create_tcp_dispatch(newtcp, share, requestmgr, srcaddr,
result = create_tcp_dispatch(newtcp, requestmgr, srcaddr,
destaddr, dscp, connected,
dispatchp);
} else {
@@ -686,7 +672,6 @@ dns_request_createraw(dns_requestmgr_t *requestmgr, isc_buffer_t *msgbuf,
dns_messageid_t id;
bool tcp = false;
bool newtcp = false;
bool share = false;
isc_region_t r;
bool connected = false;
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) {
tcp = true;
}
share = (options & DNS_REQUESTOPT_SHARE);
again:
result = get_dispatch(tcp, newtcp, share, requestmgr, srcaddr, destaddr,
dscp, &connected, &request->dispatch);
result = get_dispatch(tcp, newtcp, requestmgr, srcaddr, destaddr, dscp,
&connected, &request->dispatch);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
@@ -876,7 +860,6 @@ dns_request_createvia(dns_requestmgr_t *requestmgr, dns_message_t *message,
isc_mem_t *mctx;
dns_messageid_t id;
bool tcp;
bool share;
bool settsigkey = true;
bool connected = false;
@@ -939,9 +922,8 @@ dns_request_createvia(dns_requestmgr_t *requestmgr, dns_message_t *message,
use_tcp:
tcp = ((options & DNS_REQUESTOPT_TCP) != 0);
share = ((options & DNS_REQUESTOPT_SHARE) != 0);
result = get_dispatch(tcp, false, share, requestmgr, srcaddr, destaddr,
dscp, &connected, &request->dispatch);
result = get_dispatch(tcp, false, requestmgr, srcaddr, destaddr, dscp,
&connected, &request->dispatch);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}