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:
@@ -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);
|
||||
|
@@ -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(
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user