xref: /freebsd/contrib/unbound/libunbound/worker.h (revision 9cf5bc93f6ba1711ae7bf96a982a2b3c8b073a18)
104b59eacSDag-Erling Smørgrav /*
204b59eacSDag-Erling Smørgrav  * libunbound/worker.h - prototypes for worker methods.
304b59eacSDag-Erling Smørgrav  *
404b59eacSDag-Erling Smørgrav  * Copyright (c) 2007, NLnet Labs. All rights reserved.
504b59eacSDag-Erling Smørgrav  *
604b59eacSDag-Erling Smørgrav  * This software is open source.
704b59eacSDag-Erling Smørgrav  *
804b59eacSDag-Erling Smørgrav  * Redistribution and use in source and binary forms, with or without
904b59eacSDag-Erling Smørgrav  * modification, are permitted provided that the following conditions
1004b59eacSDag-Erling Smørgrav  * are met:
1104b59eacSDag-Erling Smørgrav  *
1204b59eacSDag-Erling Smørgrav  * Redistributions of source code must retain the above copyright notice,
1304b59eacSDag-Erling Smørgrav  * this list of conditions and the following disclaimer.
1404b59eacSDag-Erling Smørgrav  *
1504b59eacSDag-Erling Smørgrav  * Redistributions in binary form must reproduce the above copyright notice,
1604b59eacSDag-Erling Smørgrav  * this list of conditions and the following disclaimer in the documentation
1704b59eacSDag-Erling Smørgrav  * and/or other materials provided with the distribution.
1804b59eacSDag-Erling Smørgrav  *
1904b59eacSDag-Erling Smørgrav  * Neither the name of the NLNET LABS nor the names of its contributors may
2004b59eacSDag-Erling Smørgrav  * be used to endorse or promote products derived from this software without
2104b59eacSDag-Erling Smørgrav  * specific prior written permission.
2204b59eacSDag-Erling Smørgrav  *
2304b59eacSDag-Erling Smørgrav  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2404b59eacSDag-Erling Smørgrav  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
2504b59eacSDag-Erling Smørgrav  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
2604b59eacSDag-Erling Smørgrav  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
2704b59eacSDag-Erling Smørgrav  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2804b59eacSDag-Erling Smørgrav  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2904b59eacSDag-Erling Smørgrav  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
3004b59eacSDag-Erling Smørgrav  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3104b59eacSDag-Erling Smørgrav  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
3204b59eacSDag-Erling Smørgrav  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3304b59eacSDag-Erling Smørgrav  * POSSIBILITY OF SUCH DAMAGE.
3404b59eacSDag-Erling Smørgrav  */
3504b59eacSDag-Erling Smørgrav 
3604b59eacSDag-Erling Smørgrav /**
3704b59eacSDag-Erling Smørgrav  * \file
3804b59eacSDag-Erling Smørgrav  *
3904b59eacSDag-Erling Smørgrav  * This file declares the methods any worker has to implement.
4004b59eacSDag-Erling Smørgrav  */
4104b59eacSDag-Erling Smørgrav 
4204b59eacSDag-Erling Smørgrav #ifndef LIBUNBOUND_WORKER_H
4304b59eacSDag-Erling Smørgrav #define LIBUNBOUND_WORKER_H
4404b59eacSDag-Erling Smørgrav 
4509a3aaf3SDag-Erling Smørgrav #include "sldns/sbuffer.h"
468860c90cSDag-Erling Smørgrav #include "util/data/packed_rrset.h" /* for enum sec_status */
478a9587d7SDag-Erling Smørgrav struct comm_reply;
488a9587d7SDag-Erling Smørgrav struct comm_point;
498a9587d7SDag-Erling Smørgrav struct module_qstate;
508a9587d7SDag-Erling Smørgrav struct tube;
51e2d15004SDag-Erling Smørgrav struct edns_option;
52bc892140SDag-Erling Smørgrav struct query_info;
538a9587d7SDag-Erling Smørgrav 
548a9587d7SDag-Erling Smørgrav /**
558a9587d7SDag-Erling Smørgrav  * Worker service routine to send serviced queries to authoritative servers.
56bc892140SDag-Erling Smørgrav  * @param qinfo: query info.
578a9587d7SDag-Erling Smørgrav  * @param flags: host order flags word, with opcode and CD bit.
588a9587d7SDag-Erling Smørgrav  * @param dnssec: if set, EDNS record will have DO bit set.
598a9587d7SDag-Erling Smørgrav  * @param want_dnssec: signatures needed.
60ff825849SDag-Erling Smørgrav  * @param nocaps: ignore capsforid(if in config), do not perturb qname.
61*9cf5bc93SCy Schubert  * @param check_ratelimit: if set, will check ratelimit before sending out.
628a9587d7SDag-Erling Smørgrav  * @param addr: where to.
638a9587d7SDag-Erling Smørgrav  * @param addrlen: length of addr.
648a9587d7SDag-Erling Smørgrav  * @param zone: delegation point name.
658a9587d7SDag-Erling Smørgrav  * @param zonelen: length of zone name wireformat dname.
6624e36522SCy Schubert  * @param tcp_upstream: use TCP for upstream queries.
67bc892140SDag-Erling Smørgrav  * @param ssl_upstream: use SSL for upstream queries.
680fb34990SDag-Erling Smørgrav  * @param tls_auth_name: if ssl_upstream, use this name with TLS
690fb34990SDag-Erling Smørgrav  * 	authentication.
7024e36522SCy Schubert  * @param q: which query state to reactivate upon return.
71*9cf5bc93SCy Schubert  * @param was_ratelimited: it will signal back if the query failed to pass the
72*9cf5bc93SCy Schubert  *	ratelimit check.
738a9587d7SDag-Erling Smørgrav  * @return: false on failure (memory or socket related). no query was
748a9587d7SDag-Erling Smørgrav  *      sent.
758a9587d7SDag-Erling Smørgrav  */
76bc892140SDag-Erling Smørgrav struct outbound_entry* libworker_send_query(struct query_info* qinfo,
77bc892140SDag-Erling Smørgrav 	uint16_t flags, int dnssec, int want_dnssec, int nocaps,
78*9cf5bc93SCy Schubert 	int check_ratelimit,
79e2d15004SDag-Erling Smørgrav 	struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
8024e36522SCy Schubert 	size_t zonelen, int tcp_upstream, int ssl_upstream, char* tls_auth_name,
81*9cf5bc93SCy Schubert 	struct module_qstate* q, int* was_ratelimited);
828a9587d7SDag-Erling Smørgrav 
838a9587d7SDag-Erling Smørgrav /** process incoming serviced query replies from the network */
848a9587d7SDag-Erling Smørgrav int libworker_handle_service_reply(struct comm_point* c, void* arg, int error,
858a9587d7SDag-Erling Smørgrav         struct comm_reply* reply_info);
868a9587d7SDag-Erling Smørgrav 
878a9587d7SDag-Erling Smørgrav /** handle control command coming into server */
888a9587d7SDag-Erling Smørgrav void libworker_handle_control_cmd(struct tube* tube, uint8_t* msg, size_t len,
898a9587d7SDag-Erling Smørgrav 	int err, void* arg);
908a9587d7SDag-Erling Smørgrav 
918a9587d7SDag-Erling Smørgrav /** mesh callback with fg results */
9217d15b25SDag-Erling Smørgrav void libworker_fg_done_cb(void* arg, int rcode, sldns_buffer* buf,
934c75e3aaSDag-Erling Smørgrav 	enum sec_status s, char* why_bogus, int was_ratelimited);
948a9587d7SDag-Erling Smørgrav 
958a9587d7SDag-Erling Smørgrav /** mesh callback with bg results */
9617d15b25SDag-Erling Smørgrav void libworker_bg_done_cb(void* arg, int rcode, sldns_buffer* buf,
974c75e3aaSDag-Erling Smørgrav 	enum sec_status s, char* why_bogus, int was_ratelimited);
988a9587d7SDag-Erling Smørgrav 
99d8229aafSDag-Erling Smørgrav /** mesh callback with event results */
100d8229aafSDag-Erling Smørgrav void libworker_event_done_cb(void* arg, int rcode, struct sldns_buffer* buf,
1014c75e3aaSDag-Erling Smørgrav 	enum sec_status s, char* why_bogus, int was_ratelimited);
102d8229aafSDag-Erling Smørgrav 
10304b59eacSDag-Erling Smørgrav /**
10404b59eacSDag-Erling Smørgrav  * Worker signal handler function. User argument is the worker itself.
10504b59eacSDag-Erling Smørgrav  * @param sig: signal number.
10604b59eacSDag-Erling Smørgrav  * @param arg: the worker (main worker) that handles signals.
10704b59eacSDag-Erling Smørgrav  */
10804b59eacSDag-Erling Smørgrav void worker_sighandler(int sig, void* arg);
10904b59eacSDag-Erling Smørgrav 
11004b59eacSDag-Erling Smørgrav /**
11104b59eacSDag-Erling Smørgrav  * Worker service routine to send serviced queries to authoritative servers.
112bc892140SDag-Erling Smørgrav  * @param qinfo: query info.
11304b59eacSDag-Erling Smørgrav  * @param flags: host order flags word, with opcode and CD bit.
11404b59eacSDag-Erling Smørgrav  * @param dnssec: if set, EDNS record will have DO bit set.
11504b59eacSDag-Erling Smørgrav  * @param want_dnssec: signatures needed.
116ff825849SDag-Erling Smørgrav  * @param nocaps: ignore capsforid(if in config), do not perturb qname.
117*9cf5bc93SCy Schubert  * @param check_ratelimit: if set, will check ratelimit before sending out.
11804b59eacSDag-Erling Smørgrav  * @param addr: where to.
11904b59eacSDag-Erling Smørgrav  * @param addrlen: length of addr.
12004b59eacSDag-Erling Smørgrav  * @param zone: wireformat dname of the zone.
12104b59eacSDag-Erling Smørgrav  * @param zonelen: length of zone name.
12224e36522SCy Schubert  * @param tcp_upstream: use TCP for upstream queries.
123bc892140SDag-Erling Smørgrav  * @param ssl_upstream: use SSL for upstream queries.
1240fb34990SDag-Erling Smørgrav  * @param tls_auth_name: if ssl_upstream, use this name with TLS
1250fb34990SDag-Erling Smørgrav  * 	authentication.
12624e36522SCy Schubert  * @param q: which query state to reactivate upon return.
127*9cf5bc93SCy Schubert  * @param was_ratelimited: it will signal back if the query failed to pass the
128*9cf5bc93SCy Schubert  *	ratelimit check.
12904b59eacSDag-Erling Smørgrav  * @return: false on failure (memory or socket related). no query was
13004b59eacSDag-Erling Smørgrav  *      sent.
13104b59eacSDag-Erling Smørgrav  */
132bc892140SDag-Erling Smørgrav struct outbound_entry* worker_send_query(struct query_info* qinfo,
133bc892140SDag-Erling Smørgrav 	uint16_t flags, int dnssec, int want_dnssec, int nocaps,
134*9cf5bc93SCy Schubert 	int check_ratelimit,
135e2d15004SDag-Erling Smørgrav 	struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
13624e36522SCy Schubert 	size_t zonelen, int tcp_upstream, int ssl_upstream, char* tls_auth_name,
137*9cf5bc93SCy Schubert 	struct module_qstate* q, int* was_ratelimited);
13804b59eacSDag-Erling Smørgrav 
13904b59eacSDag-Erling Smørgrav /**
14004b59eacSDag-Erling Smørgrav  * process control messages from the main thread. Frees the control
14104b59eacSDag-Erling Smørgrav  * command message.
14204b59eacSDag-Erling Smørgrav  * @param tube: tube control message came on.
14304b59eacSDag-Erling Smørgrav  * @param msg: message contents.  Is freed.
14404b59eacSDag-Erling Smørgrav  * @param len: length of message.
14504b59eacSDag-Erling Smørgrav  * @param error: if error (NETEVENT_*) happened.
14604b59eacSDag-Erling Smørgrav  * @param arg: user argument
14704b59eacSDag-Erling Smørgrav  */
14804b59eacSDag-Erling Smørgrav void worker_handle_control_cmd(struct tube* tube, uint8_t* msg, size_t len,
14904b59eacSDag-Erling Smørgrav 	int error, void* arg);
15004b59eacSDag-Erling Smørgrav 
15104b59eacSDag-Erling Smørgrav /** handles callbacks from listening event interface */
15204b59eacSDag-Erling Smørgrav int worker_handle_request(struct comm_point* c, void* arg, int error,
15304b59eacSDag-Erling Smørgrav 	struct comm_reply* repinfo);
15404b59eacSDag-Erling Smørgrav 
15504b59eacSDag-Erling Smørgrav /** process incoming serviced query replies from the network */
15604b59eacSDag-Erling Smørgrav int worker_handle_service_reply(struct comm_point* c, void* arg, int error,
15704b59eacSDag-Erling Smørgrav 	struct comm_reply* reply_info);
15804b59eacSDag-Erling Smørgrav 
15904b59eacSDag-Erling Smørgrav /** cleanup the cache to remove all rrset IDs from it, arg is worker */
16004b59eacSDag-Erling Smørgrav void worker_alloc_cleanup(void* arg);
16104b59eacSDag-Erling Smørgrav 
16204b59eacSDag-Erling Smørgrav /** statistics timer callback handler */
16304b59eacSDag-Erling Smørgrav void worker_stat_timer_cb(void* arg);
16404b59eacSDag-Erling Smørgrav 
16504b59eacSDag-Erling Smørgrav /** probe timer callback handler */
16604b59eacSDag-Erling Smørgrav void worker_probe_timer_cb(void* arg);
16704b59eacSDag-Erling Smørgrav 
16804b59eacSDag-Erling Smørgrav /** start accept callback handler */
16904b59eacSDag-Erling Smørgrav void worker_start_accept(void* arg);
17004b59eacSDag-Erling Smørgrav 
17104b59eacSDag-Erling Smørgrav /** stop accept callback handler */
17204b59eacSDag-Erling Smørgrav void worker_stop_accept(void* arg);
17304b59eacSDag-Erling Smørgrav 
17404b59eacSDag-Erling Smørgrav /** handle remote control accept callbacks */
17504b59eacSDag-Erling Smørgrav int remote_accept_callback(struct comm_point*, void*, int, struct comm_reply*);
17604b59eacSDag-Erling Smørgrav 
17704b59eacSDag-Erling Smørgrav /** handle remote control data callbacks */
17804b59eacSDag-Erling Smørgrav int remote_control_callback(struct comm_point*, void*, int, struct comm_reply*);
17904b59eacSDag-Erling Smørgrav 
18004b59eacSDag-Erling Smørgrav /** routine to printout option values over SSL */
18104b59eacSDag-Erling Smørgrav void  remote_get_opt_ssl(char* line, void* arg);
18204b59eacSDag-Erling Smørgrav 
18304b59eacSDag-Erling Smørgrav #endif /* LIBUNBOUND_WORKER_H */
184