From: W.C.A. Wijngaards Date: Tue, 16 May 2023 06:50:38 +0000 (+0200) Subject: - Fix #888: [FR] Use kernel timestamps for dnstap. X-Git-Tag: release-1.18.0rc1~24^2~39 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2a2598dbf2b078329964ea52f815a959f10ebb4d;p=thirdparty%2Funbound.git - Fix #888: [FR] Use kernel timestamps for dnstap. --- diff --git a/daemon/worker.c b/daemon/worker.c index e73ae1d94..ef9624b8b 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1305,9 +1305,9 @@ worker_handle_request(struct comm_point* c, void* arg, int error, wait_queue_time = wait_time.tv_sec * 1000000 + wait_time.tv_usec; if (worker->stats.max_query_time_us < wait_queue_time) worker->stats.max_query_time_us = wait_queue_time; - c->recv_tv.tv_sec += worker->env.cfg->sock_queue_timeout; - if (timeval_smaller(&c->recv_tv, worker->env.now_tv)) { - /* count and drop queries that were sitting in the socket queue too long */ + if(wait_queue_time > + (long long)(worker->env.cfg->sock_queue_timeout * 1000000)) { + /* count and drop queries that were sitting in the socket queue too long */ worker->stats.num_queries_timed_out++; return 0; } @@ -1364,7 +1364,8 @@ worker_handle_request(struct comm_point* c, void* arg, int error, if(worker->dtenv.log_client_query_messages) { log_addr(VERB_ALGO, "request from client", &repinfo->client_addr, repinfo->client_addrlen); log_addr(VERB_ALGO, "to local addr", (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->socket->addr->ai_addrlen); - dt_msg_send_client_query(&worker->dtenv, &repinfo->client_addr, (void*)repinfo->c->socket->addr->ai_addr, c->type, c->buffer); + dt_msg_send_client_query(&worker->dtenv, &repinfo->client_addr, (void*)repinfo->c->socket->addr->ai_addr, c->type, c->buffer, + ((worker->env.cfg->sock_queue_timeout && timeval_isset(&c->recv_tv))?&c->recv_tv:NULL)); } #endif /* Check deny/refuse ACLs */ diff --git a/dnstap/dnstap.c b/dnstap/dnstap.c index 5c0cde1d5..d15eb9b00 100644 --- a/dnstap/dnstap.c +++ b/dnstap/dnstap.c @@ -388,12 +388,15 @@ dt_msg_send_client_query(struct dt_env *env, struct sockaddr_storage *qsock, struct sockaddr_storage *rsock, enum comm_point_type cptype, - sldns_buffer *qmsg) + sldns_buffer *qmsg, + struct timeval* tstamp) { struct dt_msg dm; struct timeval qtime; - gettimeofday(&qtime, NULL); + if(tstamp) + memcpy(&qtime, tstamp, sizeof(qtime)); + else gettimeofday(&qtime, NULL); /* type */ dt_msg_init(env, &dm, DNSTAP__MESSAGE__TYPE__CLIENT_QUERY); diff --git a/dnstap/dnstap.h b/dnstap/dnstap.h index 449fae727..169bdc2c6 100644 --- a/dnstap/dnstap.h +++ b/dnstap/dnstap.h @@ -126,13 +126,15 @@ dt_delete(struct dt_env *env); * @param rsock: local (service) address/port. * @param cptype: comm_udp or comm_tcp. * @param qmsg: query message. + * @param tstamp: timestamp or NULL if none provided. */ void dt_msg_send_client_query(struct dt_env *env, struct sockaddr_storage *qsock, struct sockaddr_storage *rsock, enum comm_point_type cptype, - struct sldns_buffer *qmsg); + struct sldns_buffer *qmsg, + struct timeval* tstamp); /** * Create and send a new dnstap "Message" event of type CLIENT_RESPONSE. diff --git a/doc/Changelog b/doc/Changelog index 9c5f7dea9..5d18fb7cc 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +16 May 2023: Wouter + - Fix #888: [FR] Use kernel timestamps for dnstap. + 11 May 2023: Wouter - Fix warning in windows compile, in set_recvtimestamp.