Worker API reference¶
Functions
- int worker_init(struct engine *engine, int worker_count)¶
Create and initialize the worker.
- Returns:
error code (ENOMEM)
- void worker_deinit(void)¶
Destroy the worker (free memory).
- int worker_submit(struct session *session, struct io_comm_data *comm, const uint8_t *eth_from, const uint8_t *eth_to, knot_pkt_t *pkt)¶
Process an incoming packet (query from a client or answer from upstream).
- Parameters:
session – session the packet came from, or NULL (not from network)
comm – IO communication data (see
struct io_comm_data
docs)eth_* – MAC addresses or NULL (they’re useful for XDP)
pkt – the packet, or NULL (an error from the transport layer)
- Returns:
0 or an error code
- int worker_end_tcp(struct session *session)¶
End current DNS/TCP session, this disassociates pending tasks from this session which may be freely closed afterwards.
- knot_pkt_t *worker_resolve_mk_pkt_dname(knot_dname_t *qname, uint16_t qtype, uint16_t qclass, const struct kr_qflags *options)¶
- knot_pkt_t *worker_resolve_mk_pkt(const char *qname_str, uint16_t qtype, uint16_t qclass, const struct kr_qflags *options)¶
Create a packet suitable for worker_resolve_start().
All in malloc() memory.
- struct qr_task *worker_resolve_start(knot_pkt_t *query, struct kr_qflags options)¶
Start query resolution with given query.
- Returns:
task or NULL
- int worker_resolve_exec(struct qr_task *task, knot_pkt_t *query)¶
- struct kr_request *worker_task_request(struct qr_task *task)¶
- Returns:
struct kr_request associated with opaque task
- int worker_task_step(struct qr_task *task, const struct sockaddr *packet_source, knot_pkt_t *packet)¶
- int worker_task_numrefs(const struct qr_task *task)¶
- int worker_task_finalize(struct qr_task *task, int state)¶
Finalize given task.
- void worker_task_complete(struct qr_task *task)¶
- void worker_task_ref(struct qr_task *task)¶
- void worker_task_unref(struct qr_task *task)¶
- void worker_task_timeout_inc(struct qr_task *task)¶
- int worker_add_tcp_connected(struct worker_ctx *worker, const struct sockaddr *addr, struct session *session)¶
- int worker_del_tcp_connected(struct worker_ctx *worker, const struct sockaddr *addr)¶
- int worker_del_tcp_waiting(struct worker_ctx *worker, const struct sockaddr *addr)¶
- struct session *worker_find_tcp_waiting(struct worker_ctx *worker, const struct sockaddr *addr)¶
- struct session *worker_find_tcp_connected(struct worker_ctx *worker, const struct sockaddr *addr)¶
- knot_pkt_t *worker_task_get_pktbuf(const struct qr_task *task)¶
- struct request_ctx *worker_task_get_request(struct qr_task *task)¶
- struct kr_transport *worker_task_get_transport(struct qr_task *task)¶
- struct session *worker_request_get_source_session(const struct kr_request *req)¶
Note: source session is NULL in case the request hasn’t come over network.
- uint16_t worker_task_pkt_get_msgid(struct qr_task *task)¶
- void worker_task_pkt_set_msgid(struct qr_task *task, uint16_t msgid)¶
- uint64_t worker_task_creation_time(struct qr_task *task)¶
- void worker_task_subreq_finalize(struct qr_task *task)¶
- bool worker_task_finished(struct qr_task *task)¶
- int qr_task_on_send(struct qr_task *task, const uv_handle_t *handle, int status)¶
To be called after sending a DNS message.
It mainly deals with cleanups.
Variables
- struct worker_ctx *the_worker¶
Pointer to the singleton worker.
NULL if not initialized.
- struct worker_stats¶
- #include <worker.h>
Various worker statistics.
Sync with wrk_stats()
Public Members
- size_t queries¶
Total number of requests (from clients and internal ones).
- size_t concurrent¶
The number of requests currently in processing.
- size_t rconcurrent¶
- size_t dropped¶
The number of requests dropped due to being badly formed.
See #471.
- size_t timeout¶
Number of outbound queries that timed out.
- size_t udp¶
Number of outbound queries over UDP.
- size_t tcp¶
Number of outbound queries over TCP (excluding TLS).
- size_t tls¶
Number of outbound queries over TLS.
- size_t ipv4¶
Number of outbound queries over IPv4.
- size_t ipv6¶
Number of outbound queries over IPv6.
- size_t err_udp¶
Total number of write errors for UDP transport.
- size_t err_tcp¶
Total number of write errors for TCP transport.
- size_t err_tls¶
Total number of write errors for TLS transport.
- size_t err_http¶
Total number of write errors for HTTP(S) transport.
- size_t queries¶