Commit a5dc29f0 authored by Marek Vavruša's avatar Marek Vavruša

modules: started documentation

parent 6c9c2357
# Knot DNS Resolver extensions
The resolver library[^lib] leverages the [processing API][processing] from the libknot to separate packet processing code
into layers. In order to keep the core library sane and coverable, there are only two built-in layers:
the [iterator](lib/layer/iterate.c), and the [cache](lib/layer/itercache.c). The resolver context however can
load shared libraries on runtime, which allows us to build and register external modules as well.
## Supported languages
Currently modules written in C are supported.
There is also a rudimentary support for writing modules in Go — ⑴ the library has no native Go bindings, library is accessible using [CGO][cgo], ⑵ gc doesn't support building shared libraries, [GCCGO][gccgo] is required, ⑶ no coroutines and no garbage collecting thread, as the Go code is called from C threads.
There is a plan for Lua scriptables, but it's not implemented yet.
## Available services
## The anatomy of an extension
### Writing a module in C
### Writing a module in Go
[^lib]: See the Knot DNS Resolver library [documentation](lib/
\ No newline at end of file
......@@ -23,22 +23,18 @@ func Api() C.uint32_t {
func Init(module *C.struct_kr_module) {
fmt.Printf("go_init(%s)\n", C.GoString((*C.char)(
return 0
func Deinit(module *C.struct_kr_module) {
return 0
func Begin(ctx *C.knot_layer_t, param unsafe.Pointer) {
return 0
func Finish(ctx *C.knot_layer_t) {
return 0
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment