diff --git a/lib/layer.h b/lib/layer.h index 3d1d536a3e602e7b9b626f64d0252edd3966d383..85f95100cc7345c17690dafaf9fcb992220fd65c 100644 --- a/lib/layer.h +++ b/lib/layer.h @@ -18,7 +18,6 @@ #include "lib/defines.h" #include "lib/utils.h" -#include "lib/resolve.h" #ifndef NDEBUG /** @internal Print a debug message related to resolution. */ @@ -31,6 +30,42 @@ #define QRDEBUG(query, cls, fmt, ...) #endif +/*! Layer processing states. + * Each state represents the state machine transition, + * and determines readiness for the next action. + */ +enum knot_layer_state { + KNOT_STATE_NOOP = 0, /*!< N/A */ + KNOT_STATE_CONSUME = 1 << 0, /*!< Consume data. */ + KNOT_STATE_PRODUCE = 1 << 1, /*!< Produce data. */ + KNOT_STATE_DONE = 1 << 2, /*!< Finished. */ + KNOT_STATE_FAIL = 1 << 3 /*!< Error. */ +}; + +/* Forward declarations. */ +struct knot_layer_api; + +/*! \brief Packet processing context. */ +typedef struct knot_layer { + knot_mm_t *mm; /* Processing memory context. */ + uint16_t state; /* Bitmap of enum knot_layer_state. */ + void *data; /* Module specific. */ + const struct knot_layer_api *api; +} knot_layer_t; + +/*! \brief Packet processing module API. */ +struct knot_layer_api { + int (*begin)(knot_layer_t *ctx, void *module_param); + int (*reset)(knot_layer_t *ctx); + int (*finish)(knot_layer_t *ctx); + int (*consume)(knot_layer_t *ctx, knot_pkt_t *pkt); + int (*produce)(knot_layer_t *ctx, knot_pkt_t *pkt); + int (*fail)(knot_layer_t *ctx, knot_pkt_t *pkt); + void *data; +}; + +typedef struct knot_layer_api knot_layer_api_t; + /** Pickled layer state (api, input, state). */ struct kr_layer_pickle { struct kr_layer_pickle *next; @@ -40,4 +75,4 @@ struct kr_layer_pickle { }; /* Repurpose layer states. */ -#define KNOT_STATE_YIELD KNOT_STATE_NOOP \ No newline at end of file +#define KNOT_STATE_YIELD KNOT_STATE_NOOP diff --git a/lib/layer/pktcache.c b/lib/layer/pktcache.c index 95fcff6c7735df93cf5e0923df646f0af7dc0804..2eb8e652fc25c352d5b1ac32e3b856e7c7c9a76b 100644 --- a/lib/layer/pktcache.c +++ b/lib/layer/pktcache.c @@ -22,6 +22,7 @@ #include "lib/layer/iterate.h" #include "lib/cache.h" #include "lib/module.h" +#include "lib/resolve.h" #define DEBUG_MSG(qry, fmt...) QRDEBUG((qry), " pc ", fmt) #define DEFAULT_MAXTTL (15 * 60) diff --git a/lib/layer/rrcache.c b/lib/layer/rrcache.c index 946e704686d2e3529d30bb63e5341fc3d726b11f..358adf380c472ea3bfada8b6527b0481000176ce 100644 --- a/lib/layer/rrcache.c +++ b/lib/layer/rrcache.c @@ -28,6 +28,7 @@ #include "lib/cache.h" #include "lib/module.h" #include "lib/utils.h" +#include "lib/resolve.h" #define DEBUG_MSG(qry, fmt...) QRDEBUG((qry), " rc ", fmt) #define DEFAULT_MINTTL (5) /* Short-time "no data" retention to avoid bursts */ diff --git a/lib/module.h b/lib/module.h index 027201849153a6c79c797d141b4d9bf5bafca2ed..0da311a9d10a1df14e0e507bc3d69e6d9c546ff8 100644 --- a/lib/module.h +++ b/lib/module.h @@ -16,7 +16,6 @@ #pragma once -#include <libknot/processing/layer.h> #include "lib/defines.h" #include "lib/utils.h" #include "lib/layer.h" diff --git a/lib/resolve.h b/lib/resolve.h index 563d85219dad8b4c6db1272ec3d43dc932a2365e..b1660a28c53b49a71bf48c7115c791c5a45c3300 100644 --- a/lib/resolve.h +++ b/lib/resolve.h @@ -17,9 +17,9 @@ #pragma once #include <netinet/in.h> -#include <libknot/processing/layer.h> #include <libknot/packet/pkt.h> +#include "lib/layer.h" #include "lib/generic/map.h" #include "lib/generic/array.h" #include "lib/nsrep.h" diff --git a/lib/rplan.c b/lib/rplan.c index 6eb52a0dca747debf0740200cf1dca6f3a0f9301..4c8ca86b887331c5384b37404c05251f4d660b6d 100644 --- a/lib/rplan.c +++ b/lib/rplan.c @@ -15,7 +15,6 @@ */ #include <libknot/descriptor.h> -#include <libknot/processing/layer.h> #include <libknot/errcode.h> #include "lib/rplan.h" diff --git a/lib/zonecut.c b/lib/zonecut.c index 2aec10366f48db8ef0b171e18e8ce9f67c82e007..ce11877a86ffb52d8931d7e328e0bf542d1db0a8 100644 --- a/lib/zonecut.c +++ b/lib/zonecut.c @@ -24,6 +24,7 @@ #include "lib/rplan.h" #include "lib/defines.h" #include "lib/layer.h" +#include "lib/resolve.h" #include "lib/generic/pack.h" /* Root hint descriptor. */ diff --git a/modules/stats/stats.c b/modules/stats/stats.c index 7cd8b84a5de7f7010b76e8cbe9a9169a4f3fc0d2..777633f78ba82cdea1980529f9d0a6e60476bdb0 100644 --- a/modules/stats/stats.c +++ b/modules/stats/stats.c @@ -32,6 +32,7 @@ #include "lib/rplan.h" #include "lib/module.h" #include "lib/layer.h" +#include "lib/resolve.h" /** @internal Compatibility wrapper for Lua < 5.2 */ #if LUA_VERSION_NUM < 502