]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
lib/resolve: store auth addr/rtt in consume() layer
authorMarek Vavrusa <marek@vavrusa.com>
Wed, 8 Jun 2016 07:08:13 +0000 (00:08 -0700)
committerMarek Vavrusa <marek@vavrusa.com>
Wed, 6 Jul 2016 06:33:38 +0000 (23:33 -0700)
during the consume step, the information about
upstream authoritative (address and current rtt)
is exposed in the request structure, just like
information about current query

daemon/lua/kres.lua
lib/resolve.c
lib/resolve.h

index f633d9b87eb1108677ef9dc72694c6394f51d30b..e568172ff3d54269f2e604b2bd7d9f2ad42e5990 100644 (file)
@@ -213,6 +213,10 @@ struct kr_request {
                const knot_rrset_t *key;
                const struct sockaddr *addr;
        } qsource;
+       struct {
+           unsigned rtt;
+           const struct sockaddr *addr;
+       } upstream;
        uint32_t options;
        int state;
        rr_array_t authority;
index fd5229687b8d3d323c77e4dad87e23fbaf7aa8cb..bd9fce5f47203da24b55ad606fb887c0a84c9346 100644 (file)
@@ -445,7 +445,19 @@ int kr_resolve_consume(struct kr_request *request, const struct sockaddr *src, k
                        randomized_qname_case(qname_raw, qry->secret);
                }
                request->state = KNOT_STATE_CONSUME;
-               ITERATE_LAYERS(request, qry, consume, packet);
+               if (qry->flags & QUERY_CACHED) {
+                       ITERATE_LAYERS(request, qry, consume, packet);
+               } else {
+                       struct timeval now;
+                       gettimeofday(&now, NULL);
+                       /* Fill in source and latency information. */
+                       request->upstream.rtt = time_diff(&qry->timestamp, &now);
+                       request->upstream.addr = src;
+                       ITERATE_LAYERS(request, qry, consume, packet);
+                       /* Clear temporary information */
+                       request->upstream.addr = NULL;
+                       request->upstream.rtt = 0;
+               }
        }
 
        /* Track RTT for iterative answers */
index 3fb4aa622966a7324d12e2f89ca3cc5bbc849d4c..2896d54f277739a8d35ee16268d94462040c3495 100644 (file)
@@ -113,6 +113,10 @@ struct kr_request {
         const knot_rrset_t *key;
         const struct sockaddr *addr;
     } qsource;
+    struct {
+        unsigned rtt;                  /**< Current upstream RTT */
+        const struct sockaddr *addr;   /**< Current upstream address */
+    } upstream;                        /**< Upstream information, valid only in consume() phase */
     uint32_t options;
     int state;
     rr_array_t authority;