Skip to content
Snippets Groups Projects
Commit fefcf851 authored by Marek Vavruša's avatar Marek Vavruša
Browse files

delegpt: slight api change, preparations

parent f910a5c6
Branches
Tags
No related merge requests found
......@@ -29,13 +29,11 @@ static int input_query(knot_layer_t *ctx, knot_pkt_t *pkt)
/* Check if at least header is parsed. */
if (pkt->parsed < pkt->size) {
knot_pkt_free(&pkt);
return NS_PROC_FAIL;
}
/* Accept only queries. */
if (knot_wire_get_qr(pkt->wire)) {
knot_pkt_free(&pkt);
return NS_PROC_NOOP; /* Ignore. */
}
......@@ -49,9 +47,6 @@ static int input_query(knot_layer_t *ctx, knot_pkt_t *pkt)
knot_pkt_t *answer = param->result->ans;
knot_wire_set_id(answer->wire, knot_wire_get_id(pkt->wire));
/* Free query and finish. */
knot_pkt_free(&pkt);
if (ret != 0) {
return NS_PROC_FAIL;
} else {
......
......@@ -47,18 +47,22 @@ static void worker_recv(uv_udp_t *handle, ssize_t nread, const uv_buf_t *buf,
knot_layer_t proc;
memset(&proc, 0, sizeof(knot_layer_t));
proc.mm = ctx->pool;
knot_process_begin(&proc, LAYER_QUERY, &param);
int state = knot_process_in(&proc, (uint8_t *)buf->base, nread);
knot_layer_begin(&proc, LAYER_QUERY, &param);
knot_pkt_t *query = knot_pkt_new((uint8_t *)buf->base, nread, ctx->pool);
knot_pkt_parse(query, 0);
int state = knot_layer_in(&proc, query);
if (state & (NS_PROC_DONE|NS_PROC_FAIL)) {
worker_send(handle, result.ans, addr);
}
/* Cleanup. */
knot_process_finish(&proc);
knot_layer_finish(&proc);
kr_result_deinit(&result);
kr_context_reset(&ctx->resolve);
buf_free((uv_handle_t *)handle, buf);
knot_pkt_free(&query);
}
void worker_init(struct worker_ctx *worker, mm_ctx_t *mm)
......
#include "lib/delegpt.h"
#include <common/mempool.h>
static void delegpt_free(struct kr_delegpt *dp, mm_ctx_t *mm)
static void delegpt_free(struct kr_ns *dp, mm_ctx_t *mm)
{
mm_free(mm, dp->name);
mm_free(mm, dp);
......@@ -70,22 +70,27 @@ list_t *kr_delegmap_find(struct kr_delegmap *map, const knot_dname_t *name)
return *val;
}
struct kr_delegpt *kr_delegpt_create(const knot_dname_t *name, mm_ctx_t *mm)
struct kr_ns *kr_ns_create(const knot_dname_t *name, mm_ctx_t *mm)
{
struct kr_delegpt *dp = mm_alloc(mm, sizeof(struct kr_delegpt));
memset(dp, 0, sizeof(struct kr_delegpt));
dp->name = knot_dname_copy(name, mm);
dp->flags = DP_LAME;
return dp;
struct kr_ns *ns = mm_alloc(mm, sizeof(struct kr_ns));
memset(ns, 0, sizeof(struct kr_ns));
ns->name = knot_dname_copy(name, mm);
ns->flags = DP_LAME;
return ns;
}
void kr_delegpt_add(list_t *list, struct kr_delegpt *dp)
void kr_ns_append(list_t *list, struct kr_ns *ns)
{
add_tail(list, (node_t *)dp);
add_tail(list, (node_t *)ns);
}
void kr_delegpt_remove(struct kr_delegpt *dp, mm_ctx_t *mm)
void kr_ns_remove(struct kr_ns *ns, mm_ctx_t *mm)
{
rem_node((node_t *)dp);
delegpt_free(dp, mm);
rem_node((node_t *)ns);
delegpt_free(ns, mm);
}
int kr_ns_resolve(struct kr_ns *ns)
{
return -1;
}
......@@ -22,16 +22,16 @@ limitations under the License.
#include <common/sockaddr.h>
#include <common/trie/hat-trie.h>
/*! \brief Delegation point flag. */
enum kr_deleg_flag {
/*! \brief Name server flag. */
enum kr_ns_flag {
DP_LAME = 0,
DP_RESOLVED
};
struct kr_context;
/*! \brief Delegation point. */
struct kr_delegpt {
/*! \brief Name server. */
struct kr_ns {
node_t node;
knot_dname_t *name;
struct sockaddr_storage addr;
......@@ -55,7 +55,7 @@ list_t *kr_delegmap_find(struct kr_delegmap *map, const knot_dname_t *name);
* choose next and move DPs from the other half for next sweep.
*/
struct kr_delegpt *kr_delegpt_create(const knot_dname_t *name, mm_ctx_t *mm);
void kr_delegpt_add(list_t *list, struct kr_delegpt *dp);
void kr_delegpt_remove(struct kr_delegpt *dp, mm_ctx_t *mm);
int kr_delegpt_resolve(struct kr_delegpt *dp);
struct kr_ns *kr_ns_create(const knot_dname_t *name, mm_ctx_t *mm);
void kr_ns_append(list_t *list, struct kr_ns *ns);
void kr_ns_remove(struct kr_ns *ns, mm_ctx_t *mm);
int kr_ns_resolve(struct kr_ns *ns);
......@@ -15,7 +15,7 @@ limitations under the License.
#pragma once
#include <libknot/processing/process.h>
#include <libknot/processing/layer.h>
#include "lib/context.h"
/*!
......
......@@ -67,7 +67,7 @@ static int evaluate_dp(const knot_rrset_t *dp, knot_pkt_t *pkt, struct kr_layer_
}
const knot_dname_t *dp_name = knot_ns_name(&dp->rrs, 0);
struct kr_delegpt *ns_new = kr_delegpt_create(dp_name, resolve->dp_map.pool);
struct kr_ns *ns_new = kr_ns_create(dp_name, resolve->dp_map.pool);
/* Check if there's a glue for the record. */
int ret = glue_record(pkt, dp_name, (struct sockaddr *)&ns_new->addr);
......@@ -75,13 +75,13 @@ static int evaluate_dp(const knot_rrset_t *dp, knot_pkt_t *pkt, struct kr_layer_
/* TODO: API for duplicates? */
ns_new->flags |= DP_LAME;
/* TODO: resolve. */
kr_delegpt_add(dplist, ns_new);
kr_ns_append(dplist, ns_new);
return -1;
}
/* Add name server. */
ns_new->flags |= DP_RESOLVED;
kr_delegpt_add(dplist, ns_new);
kr_ns_append(dplist, ns_new);
return 0;
}
......
......@@ -62,11 +62,11 @@ static int begin(knot_layer_t *ctx, void *param)
/* Initialize static root hints. */
for (unsigned i = 0; i < HINT_COUNT; ++i) {
struct kr_delegpt *ns = kr_delegpt_create(SBELT[i].name, resolve->dp_map.pool);
struct kr_ns *ns = kr_ns_create(SBELT[i].name, resolve->dp_map.pool);
if (ns != NULL) {
sockaddr_set(&ns->addr, AF_INET, SBELT[i].addr, 53);
ns->flags |= DP_RESOLVED;
kr_delegpt_add(dp, ns);
kr_ns_append(dp, ns);
}
}
......
......@@ -44,7 +44,7 @@ static void iterate(struct knot_requestor *requestor, struct kr_context* ctx)
return;
}
struct kr_delegpt *ns = NULL;
struct kr_ns *ns = NULL;
WALK_LIST(ns, *dp) {
if (ns->flags & DP_RESOLVED) {
break;
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment