|
unbound
0.1
|
This file contains the worker process or thread that performs the DNS resolving and validation. More...
#include "util/data/packed_rrset.h"Data Structures | |
| struct | libworker |
| The library-worker status structure Internal to the worker. More... | |
Functions | |
| int | libworker_bg (struct ub_ctx *ctx) |
| Create a background worker. | |
| int | libworker_fg (struct ub_ctx *ctx, struct ctx_query *q) |
| Create a foreground worker. | |
| void | libworker_alloc_cleanup (void *arg) |
| cleanup the cache to remove all rrset IDs from it, arg is libworker | |
| struct outbound_entry * | libworker_send_query (uint8_t *qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec, int want_dnssec, struct sockaddr_storage *addr, socklen_t addrlen, uint8_t *zone, size_t zonelen, struct module_qstate *q) |
| Worker service routine to send serviced queries to authoritative servers. | |
| int | libworker_handle_reply (struct comm_point *c, void *arg, int error, struct comm_reply *reply_info) |
| process incoming replies from the network | |
| int | libworker_handle_service_reply (struct comm_point *c, void *arg, int error, struct comm_reply *reply_info) |
| process incoming serviced query replies from the network | |
| void | libworker_handle_control_cmd (struct tube *tube, uint8_t *msg, size_t len, int err, void *arg) |
| handle control command coming into server | |
| void | libworker_handle_result_write (struct tube *tube, uint8_t *msg, size_t len, int err, void *arg) |
| handle opportunity to write result back | |
| void | libworker_fg_done_cb (void *arg, int rcode, ldns_buffer *buf, enum sec_status s, char *why_bogus) |
| mesh callback with fg results | |
| void | libworker_bg_done_cb (void *arg, int rcode, ldns_buffer *buf, enum sec_status s, char *why_bogus) |
| mesh callback with bg results | |
| void | libworker_enter_result (struct ub_result *res, ldns_buffer *buf, struct regional *temp, enum sec_status msg_security) |
| fill result from parsed message, on error fills servfail | |
This file contains the worker process or thread that performs the DNS resolving and validation.
The worker is called by a procedure and if in the background continues until exit, if in the foreground returns from the procedure when done.
| int libworker_bg | ( | struct ub_ctx * | ctx | ) |
Create a background worker.
| ctx,: | is updated with pid/tid of the background worker. a new allocation cache is obtained from ctx. It contains the threadnumber and unique id for further (shared) cache insertions. |
References ub_ctx::bg_pid, ub_ctx::bg_tid, ub_ctx::cfglock, ub_ctx::dothread, fatal_exit(), libworker::is_bg_thread, libworker_dobg(), libworker_setup(), ub_ctx::qq_pipe, ub_ctx::rr_pipe, libworker::thread_num, tube_close_read(), tube_close_write(), UB_FORKFAIL, UB_NOERROR, and UB_NOMEM.
Referenced by ub_resolve_async().
| int libworker_fg | ( | struct ub_ctx * | ctx, |
| struct ctx_query * | q | ||
| ) |
Create a foreground worker.
This worker will join the threadpool of resolver threads. It exits when the query answer has been obtained (or error). This routine blocks until the worker is finished.
| ctx,: | new allocation cache obtained and returned to it. |
| q,: | query (result is stored in here). |
References libworker::back, libworker::base, BIT_RD, comm_base_dispatch(), libworker::env, libworker_delete(), libworker_fillup_fg(), libworker_setup(), ub_ctx::local_zones, local_zones_answer(), module_env::mesh, mesh_new_callback(), query_info::qname, regional_free_all(), module_env::scratch, sec_status_insecure, setup_qinfo_edns(), UB_INITFAIL, UB_NOERROR, UB_NOMEM, UB_SYNTAX, outside_network::udp_buff, and ctx_query::w.
Referenced by ub_resolve().
| struct outbound_entry* libworker_send_query | ( | uint8_t * | qname, |
| size_t | qnamelen, | ||
| uint16_t | qtype, | ||
| uint16_t | qclass, | ||
| uint16_t | flags, | ||
| int | dnssec, | ||
| int | want_dnssec, | ||
| struct sockaddr_storage * | addr, | ||
| socklen_t | addrlen, | ||
| uint8_t * | zone, | ||
| size_t | zonelen, | ||
| struct module_qstate * | q | ||
| ) | [read] |
Worker service routine to send serviced queries to authoritative servers.
| qname,: | query name. (host order) |
| qnamelen,: | length in bytes of qname, including trailing 0. |
| qtype,: | query type. (host order) |
| qclass,: | query class. (host order) |
| flags,: | host order flags word, with opcode and CD bit. |
| dnssec,: | if set, EDNS record will have DO bit set. |
| want_dnssec,: | signatures needed. |
| addr,: | where to. |
| addrlen,: | length of addr. |
| zone,: | delegation point name. |
| zonelen,: | length of zone name wireformat dname. |
| q,: | wich query state to reactivate upon return. |
References libworker::back, module_env::cfg, module_qstate::env, outbound_entry_compare(), outnet_serviced_query(), module_qstate::region, regional_alloc(), config_file::ssl_upstream, config_file::tcp_upstream, outside_network::udp_buff, and module_env::worker.
| void libworker_enter_result | ( | struct ub_result * | res, |
| ldns_buffer * | buf, | ||
| struct regional * | temp, | ||
| enum sec_status | msg_security | ||
| ) |
fill result from parsed message, on error fills servfail
| res,: | is clear at start, filled in at end. |
| buf,: | contains DNS message. |
| temp,: | temporary buffer for parse. |
| msg_security,: | security status of the DNS message. On error, the res may contain a different status (out of memory is not secure, not bogus). |
References ub_result::bogus, ub_result::data, fill_res(), reply_info::flags, FLAGS_GET_RCODE, ub_result::havedata, log_err(), ub_result::nxdomain, parse_reply(), ub_result::rcode, reply_find_answer_rrset(), reply_find_final_cname_target(), sec_status_bogus, sec_status_secure, and ub_result::secure.
Referenced by libworker_fillup_fg(), and process_answer_detail().
1.7.6.1