module_env Struct Reference

Module environment. More...

#include <module.h>


Data Fields

struct config_filecfg
 config file with config options
struct slabhashmsg_cache
 shared message cache
struct rrset_cacherrset_cache
 shared rrset cache
struct infra_cacheinfra_cache
 shared infrastructure cache (edns, lameness)
int(* send_packet )(ldns_buffer *pkt, struct sockaddr_storage *addr, socklen_t addrlen, int timeout, struct module_qstate *q, int use_tcp)
 Direct access to the network, this packet gets sent to destination.
struct outbound_entry *(* send_query )(uint8_t *qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec, struct sockaddr_storage *addr, socklen_t addrlen, struct module_qstate *q)
 Send serviced DNS query to server.
void(* detach_subs )(struct module_qstate *qstate)
 Detach-subqueries.
int(* attach_sub )(struct module_qstate *qstate, struct query_info *qinfo, uint16_t qflags, int prime, struct module_qstate **newq)
 Attach subquery.
void(* kill_sub )(struct module_qstate *newq)
 Kill newly attached sub.
int(* detect_cycle )(struct module_qstate *qstate, struct query_info *qinfo, uint16_t flags, int prime)
 Detect if adding a dependency for qstate on name,type,class will create a dependency cycle.
struct regionalscratch
 region for temporary usage.
ldns_buffer * scratch_buffer
 buffer for temporary usage.
struct workerworker
 internal data for daemon - worker thread.
struct mesh_areamesh
 mesh area with query state dependencies
struct alloc_cachealloc
 allocation service
struct ub_randstaternd
 random table to generate random numbers
uint32_t * now
 time in seconds, converted to integer
struct timeval * now_tv
 time in microseconds.
int need_to_validate
 is validation required for messages, controls client-facing validation status (AD bits) and servfails
struct val_anchorsanchors
 trusted key storage; these are the configured keys, if not NULL, otherwise configured by validator.
void * modinfo [MAX_MODULE]
 module specific data.


Detailed Description

Module environment.

Services and data provided to the module.


Field Documentation

int(* module_env::send_packet)(ldns_buffer *pkt, struct sockaddr_storage *addr, socklen_t addrlen, int timeout, struct module_qstate *q, int use_tcp)

Direct access to the network, this packet gets sent to destination.

Send DNS query to server. operate() should return with wait_reply. Later on a callback will cause operate() to be called with event timeout or reply. Replied packet is then in the query buffer.

Parameters:
pkt,: packet to send.
addr,: where to.
addrlen,: length of addr.
timeout,: seconds to wait until timeout.
q,: wich query state to reactivate upon return.
use_tcp,: set to true to send over TCP. 0 for UDP.
Returns:
: false on failure (memory or socket related). no query was sent.

Referenced by libworker_setup(), and worker_init().

struct outbound_entry*(* module_env::send_query)(uint8_t *qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec, struct sockaddr_storage *addr, socklen_t addrlen, struct module_qstate *q) [read]

Send serviced DNS query to server.

UDP/TCP and EDNS is handled. operate() should return with wait_reply. Later on a callback will cause operate() to be called with event timeout or reply. The time until a timeout is calculated from roundtrip timing, several UDP retries are attempted.

Parameters:
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 bits set. If EDNS_DO bit is set, DO bit is set in EDNS records. If BIT_CD is set, CD bit is set in queries with EDNS records.
addr,: where to.
addrlen,: length of addr.
q,: wich query state to reactivate upon return.
Returns:
: false on failure (memory or socket related). no query was sent. Or returns an outbound entry with qsent and qstate set. This outbound_entry will be used on later module invocations that involve this query (timeout, error or reply).

Referenced by libworker_setup(), processQueryTargets(), and worker_init().

void(* module_env::detach_subs)(struct module_qstate *qstate)

Detach-subqueries.

Remove all sub-query references from this query state. Keeps super-references of those sub-queries correct. Updates stat items in mesh_area structure.

Parameters:
qstate,: used to find mesh state.

Referenced by libworker_setup(), processQueryResponse(), and worker_init().

int(* module_env::attach_sub)(struct module_qstate *qstate, struct query_info *qinfo, uint16_t qflags, int prime, struct module_qstate **newq)

Attach subquery.

Creates it if it does not exist already. Keeps sub and super references correct. Updates stat items in mesh_area structure. Pass if it is priming query or not. return: o if error (malloc) happened. o need to initialise the new state (module init; it is a new state). so that the next run of the query with this module is successful. o no init needed, attachment successful.

Parameters:
qstate,: the state to find mesh state, and that wants to receive the results from the new subquery.
qinfo,: what to query for (copied).
qflags,: what flags to use (RD, CD flag or not).
prime,: if it is a (stub) priming query.
newq,: If the new subquery needs initialisation, it is returned, otherwise NULL is returned.
Returns:
: false on error, true if success (and init may be needed).

Referenced by generate_request(), generate_sub_request(), libworker_setup(), and worker_init().

void(* module_env::kill_sub)(struct module_qstate *newq)

Kill newly attached sub.

If attach_sub returns newq for initialisation, but that fails, then this routine will cleanup and delete the fresly created sub.

Parameters:
newq,: the new subquery that is no longer needed. It is removed.

Referenced by generate_sub_request(), libworker_setup(), prime_stub(), and worker_init().

int(* module_env::detect_cycle)(struct module_qstate *qstate, struct query_info *qinfo, uint16_t flags, int prime)

Detect if adding a dependency for qstate on name,type,class will create a dependency cycle.

Parameters:
qstate,: given mesh querystate.
qinfo,: query info for dependency.
flags,: query flags of dependency, RD/CD flags.
prime,: if dependency is a priming query or not.
Returns:
true if the name,type,class exists and the given qstate mesh exists as a dependency of that name. Thus if qstate becomes dependent on name,type,class then a cycle is created.

Referenced by causes_cycle(), libworker_setup(), and worker_init().

struct regional* module_env::scratch [read]

struct worker* module_env::worker [read]

struct timeval* module_env::now_tv [read]

time in microseconds.

Relatively recent.

Referenced by libworker_setup(), mesh_send_reply(), mesh_state_add_reply(), and worker_init().

trusted key storage; these are the configured keys, if not NULL, otherwise configured by validator.

These are the trust anchors, and are not primed and ready for validation, but on the bright side, they are read only memory, thus no locks and fast.

Referenced by iter_indicates_dnssec(), processInit(), val_apply_cfg(), val_deinit(), and val_get_mem().

void* module_env::modinfo[MAX_MODULE]


The documentation for this struct was generated from the following file:

Generated on Sun Sep 21 16:24:57 2008 for unbound by  doxygen 1.5.6