]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
daemon/worker: allow dropping even on non-XDP
authorVladimír Čunát <vladimir.cunat@nic.cz>
Tue, 3 Nov 2020 11:34:04 +0000 (12:34 +0100)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Tue, 10 Nov 2020 16:16:47 +0000 (17:16 +0100)
During testing it was sending me SERVFAIL, which was weird.
There's no use case so far, but if it was decided to drop the answer,
it should really happen regardless of the transport.

daemon/worker.c

index 2b13ef24f2f680c5e5efd90e74a2af652e4b36bc..17292a93af1461dac347cf63290fc9c9072e02b8 100644 (file)
@@ -1265,8 +1265,6 @@ static int xdp_push(struct qr_task *task, const uv_handle_t *src_handle)
 {
 #if ENABLE_XDP
        struct request_ctx *ctx = task->ctx;
-       if (unlikely(ctx->req.answer == NULL)) /* meant to be dropped */
-               return kr_ok();
        knot_xdp_msg_t msg;
        const struct sockaddr *ip_from = &ctx->source.dst_addr.ip;
        const struct sockaddr *ip_to   = &ctx->source.addr.ip;
@@ -1307,6 +1305,11 @@ static int qr_task_finalize(struct qr_task *task, int state)
                return state == KR_STATE_DONE ? kr_ok() : kr_error(EIO);
        }
 
+       if (unlikely(ctx->req.answer == NULL)) { /* meant to be dropped */
+               (void) qr_task_on_send(task, NULL, kr_ok());
+               return kr_ok();
+       }
+
        if (session_flags(source_session)->closing ||
            ctx->source.addr.ip.sa_family == AF_UNSPEC)
                return kr_error(EINVAL);