From: Marek VavruĊĦa Date: Tue, 6 Oct 2015 22:30:36 +0000 (+0200) Subject: daemon/worker: respect larger OPT payload when configured X-Git-Tag: v1.0.0-beta1~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3dc193c86e325cf93b700efdbbb3d75465c0b49d;p=thirdparty%2Fknot-resolver.git daemon/worker: respect larger OPT payload when configured --- diff --git a/daemon/worker.c b/daemon/worker.c index 2c89f26e2..059083ccf 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -94,8 +94,12 @@ static inline struct worker_ctx *get_worker(void) static struct qr_task *qr_task_create(struct worker_ctx *worker, uv_handle_t *handle, knot_pkt_t *query, const struct sockaddr *addr) { /* How much can client handle? */ + struct engine *engine = worker->engine; size_t answer_max = KNOT_WIRE_MIN_PKTSIZE; size_t pktbuf_max = KR_EDNS_PAYLOAD; + if (engine->resolver.opt_rr) { + pktbuf_max = MAX(knot_edns_get_payload(engine->resolver.opt_rr), pktbuf_max); + } if (!addr && handle) { /* TCP */ answer_max = KNOT_WIRE_MAX_PKTSIZE; pktbuf_max = KNOT_WIRE_MAX_PKTSIZE; @@ -116,7 +120,6 @@ static struct qr_task *qr_task_create(struct worker_ctx *worker, uv_handle_t *ha } /* Create resolution task */ - struct engine *engine = worker->engine; struct qr_task *task = mm_alloc(&pool, sizeof(*task)); if (!task) { mp_delete(pool.ctx);