]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix #888: [FR] Use kernel timestamps for dnstap.
authorW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Tue, 16 May 2023 06:50:38 +0000 (08:50 +0200)
committerW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Tue, 16 May 2023 06:50:38 +0000 (08:50 +0200)
daemon/worker.c
dnstap/dnstap.c
dnstap/dnstap.h
doc/Changelog

index e73ae1d94e8df709b8b7b0d3cddbe9acb8807e3b..ef9624b8bc9d4fa598f89978185baeb9b5329615 100644 (file)
@@ -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 */
index 5c0cde1d5588246a5af40d49cffcac8cb6bdf1f0..d15eb9b004b20b11b8b021f71c38775d06a69d16 100644 (file)
@@ -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);
index 449fae727eac258c9ce7e2104b56cec866dd273d..169bdc2c6815fee36f5ad060ec86839fc4f3d693 100644 (file)
@@ -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.
index 9c5f7dea978807f97e87d89d37d89a63a8dbe406..5d18fb7cc5dc0022ef8779d8c612e1e771041f9f 100644 (file)
@@ -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.