Electroneum
Loading...
Searching...
No Matches
module.h
Go to the documentation of this file.
1/*
2 * util/module.h - DNS handling module interface
3 *
4 * Copyright (c) 2007, NLnet Labs. All rights reserved.
5 *
6 * This software is open source.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * Redistributions of source code must retain the above copyright notice,
13 * this list of conditions and the following disclaimer.
14 *
15 * Redistributions in binary form must reproduce the above copyright notice,
16 * this list of conditions and the following disclaimer in the documentation
17 * and/or other materials provided with the distribution.
18 *
19 * Neither the name of the NLNET LABS nor the names of its contributors may
20 * be used to endorse or promote products derived from this software without
21 * specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
29 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 */
35
153
154#ifndef UTIL_MODULE_H
155#define UTIL_MODULE_H
156#include "util/storage/lruhash.h"
157#include "util/data/msgreply.h"
158#include "util/data/msgparse.h"
159struct sldns_buffer;
160struct alloc_cache;
161struct rrset_cache;
162struct key_cache;
163struct config_file;
164struct slabhash;
165struct query_info;
166struct edns_data;
167struct regional;
168struct worker;
169struct comm_base;
170struct auth_zones;
171struct outside_network;
172struct module_qstate;
173struct ub_randstate;
174struct mesh_area;
175struct mesh_state;
176struct val_anchors;
177struct val_neg_cache;
178struct iter_forwards;
179struct iter_hints;
180struct respip_set;
181struct respip_client_info;
182struct respip_addr_info;
183
185#define MAX_MODULE 16
186
188#define MAX_KNOWN_EDNS_OPTS 256
189
191 /* Inplace callbacks for when a resolved reply is ready to be sent to the
192 * front.*/
194 /* Inplace callbacks for when a reply is given from the cache. */
196 /* Inplace callbacks for when a reply is given with local data
197 * (or Chaos reply). */
199 /* Inplace callbacks for when the reply is servfail. */
201 /* Inplace callbacks for when a query is ready to be sent to the back.*/
203 /* Inplace callback for when a reply is received from the back. */
205 /* Inplace callback for when EDNS is parsed on a reply received from the
206 * back. */
208 /* Total number of types. Used for array initialization.
209 * Should always be last. */
211};
212
213
223
231 void* cb;
232 void* cb_arg;
234 int id;
235};
236
253typedef int inplace_cb_reply_func_type(struct query_info* qinfo,
254 struct module_qstate* qstate, struct reply_info* rep, int rcode,
255 struct edns_data* edns, struct edns_option** opt_list_out,
256 struct regional* region, int id, void* callback);
257
275typedef int inplace_cb_query_func_type(struct query_info* qinfo, uint16_t flags,
276 struct module_qstate* qstate, struct sockaddr_storage* addr,
277 socklen_t addrlen, uint8_t* zone, size_t zonelen, struct regional* region,
278 int id, void* callback);
279
289 int id, void* cb_args);
290
301 struct dns_msg* response, int id, void* cb_args);
302
308 /* --- data --- */
319
320 /* --- services --- */
349 struct outbound_entry* (*send_query)(struct query_info* qinfo,
350 uint16_t flags, int dnssec, int want_dnssec, int nocaps,
351 struct sockaddr_storage* addr, socklen_t addrlen,
352 uint8_t* zone, size_t zonelen, int ssl_upstream,
353 char* tls_auth_name, struct module_qstate* q);
354
362 void (*detach_subs)(struct module_qstate* qstate);
363
386 int (*attach_sub)(struct module_qstate* qstate,
387 struct query_info* qinfo, uint16_t qflags, int prime,
388 int valrec, struct module_qstate** newq);
389
416 int (*add_sub)(struct module_qstate* qstate,
417 struct query_info* qinfo, uint16_t qflags, int prime,
418 int valrec, struct module_qstate** newq,
419 struct mesh_state** sub);
420
428 void (*kill_sub)(struct module_qstate* newq);
429
443 int (*detect_cycle)(struct module_qstate* qstate,
444 struct query_info* qinfo, uint16_t flags, int prime,
445 int valrec);
446
452 struct worker* worker;
462 struct ub_randstate* rnd;
464 time_t* now;
466 struct timeval* now_tv;
495
496 /* Shared linked list of inplace callback functions */
498
504 /* Number of known edns options */
506
507 /* Make every mesh state unique, do not aggregate mesh states. */
509};
510
532
552
557struct sock_list {
561 socklen_t len;
564};
565
566struct respip_action_info;
567
638
644 const char* name;
645
653 int (*init)(struct module_env* env, int id);
654
660 void (*deinit)(struct module_env* env, int id);
661
682 void (*operate)(struct module_qstate* qstate, enum module_ev event,
683 int id, struct outbound_entry* outbound);
684
695 void (*inform_super)(struct module_qstate* qstate, int id,
696 struct module_qstate* super);
697
701 void (*clear)(struct module_qstate* qstate, int id);
702
709 size_t (*get_mem)(struct module_env* env, int id);
710};
711
717const char* strextstate(enum module_ext_state s);
718
724const char* strmodulevent(enum module_ev e);
725
732
738
751int edns_register_option(uint16_t opt_code, int bypass_cache_stage,
752 int no_aggregation, struct module_env* env);
753
764int
765inplace_cb_register(void* cb, enum inplace_cb_list_type type, void* cbarg,
766 struct module_env* env, int id);
767
774void
776 int id);
777
783
792 struct module_env* env);
793
802 struct module_env* env);
803
812int unique_mesh_state(struct edns_option* list, struct module_env* env);
813
820 struct module_env* env);
821
822#endif /* UTIL_MODULE_H */
verbosity_value
Definition log.h:49
void inplace_cb_lists_delete(struct module_env *env)
int inplace_cb_edns_back_parsed_func_type(struct module_qstate *qstate, int id, void *cb_args)
Definition module.h:288
struct edns_known_option * edns_option_is_known(uint16_t opt_code, struct module_env *env)
int inplace_cb_query_func_type(struct query_info *qinfo, uint16_t flags, struct module_qstate *qstate, struct sockaddr_storage *addr, socklen_t addrlen, uint8_t *zone, size_t zonelen, struct regional *region, int id, void *callback)
Definition module.h:275
void edns_known_options_delete(struct module_env *env)
void inplace_cb_delete(struct module_env *env, enum inplace_cb_list_type type, int id)
void log_edns_known_options(enum verbosity_value level, struct module_env *env)
module_ev
Definition module.h:536
@ module_event_new
Definition module.h:538
@ module_event_noreply
Definition module.h:544
@ module_event_error
Definition module.h:550
@ module_event_reply
Definition module.h:542
@ module_event_pass
Definition module.h:540
@ module_event_moddone
Definition module.h:548
@ module_event_capsfail
Definition module.h:546
module_ext_state
Definition module.h:516
@ module_wait_reply
Definition module.h:520
@ module_state_initial
Definition module.h:518
@ module_wait_module
Definition module.h:522
@ module_wait_subquery
Definition module.h:526
@ module_finished
Definition module.h:530
@ module_error
Definition module.h:528
@ module_restart_next
Definition module.h:524
int edns_bypass_cache_stage(struct edns_option *list, struct module_env *env)
int inplace_cb_reply_func_type(struct query_info *qinfo, struct module_qstate *qstate, struct reply_info *rep, int rcode, struct edns_data *edns, struct edns_option **opt_list_out, struct regional *region, int id, void *callback)
Definition module.h:253
int unique_mesh_state(struct edns_option *list, struct module_env *env)
inplace_cb_list_type
Definition module.h:190
@ inplace_cb_reply_local
Definition module.h:198
@ inplace_cb_types_total
Definition module.h:210
@ inplace_cb_reply
Definition module.h:193
@ inplace_cb_query
Definition module.h:202
@ inplace_cb_edns_back_parsed
Definition module.h:207
@ inplace_cb_reply_cache
Definition module.h:195
@ inplace_cb_reply_servfail
Definition module.h:200
@ inplace_cb_query_response
Definition module.h:204
int edns_register_option(uint16_t opt_code, int bypass_cache_stage, int no_aggregation, struct module_env *env)
#define MAX_MODULE
Definition module.h:185
const char * strextstate(enum module_ext_state s)
int inplace_cb_register(void *cb, enum inplace_cb_list_type type, void *cbarg, struct module_env *env, int id)
int edns_known_options_init(struct module_env *env)
int inplace_cb_query_response_func_type(struct module_qstate *qstate, struct dns_msg *response, int id, void *cb_args)
Definition module.h:300
const char * strmodulevent(enum module_ev e)
unsigned short uint16_t
Definition stdint.h:125
unsigned char uint8_t
Definition stdint.h:124
Definition dns.h:61
int bypass_cache_stage
Definition module.h:219
uint16_t opt_code
Definition module.h:217
struct inplace_cb * next
Definition module.h:229
void * cb_arg
Definition module.h:232
void * cb
Definition module.h:231
struct val_neg_cache * neg_cache
Definition module.h:477
struct iter_hints * hints
Definition module.h:492
size_t edns_known_options_num
Definition module.h:505
int(* attach_sub)(struct module_qstate *qstate, struct query_info *qinfo, uint16_t qflags, int prime, int valrec, struct module_qstate **newq)
Definition module.h:386
struct config_file * cfg
Definition module.h:310
struct regional * scratch
Definition module.h:448
struct infra_cache * infra_cache
Definition module.h:316
struct val_anchors * anchors
Definition module.h:474
struct sldns_buffer * scratch_buffer
Definition module.h:450
struct inplace_cb * inplace_cb_lists[inplace_cb_types_total]
Definition module.h:497
void(* detach_subs)(struct module_qstate *qstate)
Definition module.h:362
void(* kill_sub)(struct module_qstate *newq)
Definition module.h:428
struct outside_network * outnet
Definition module.h:456
struct alloc_cache * alloc
Definition module.h:460
struct slabhash * msg_cache
Definition module.h:312
struct edns_known_option * edns_known_options
Definition module.h:503
int(* detect_cycle)(struct module_qstate *qstate, struct query_info *qinfo, uint16_t flags, int prime, int valrec)
Definition module.h:443
struct worker * worker
Definition module.h:452
struct key_cache * key_cache
Definition module.h:318
time_t * now
Definition module.h:464
struct iter_forwards * fwds
Definition module.h:484
struct comm_timer * probe_timer
Definition module.h:479
struct timeval * now_tv
Definition module.h:466
int need_to_validate
Definition module.h:469
int unique_mesh
Definition module.h:508
struct ub_randstate * rnd
Definition module.h:462
struct rrset_cache * rrset_cache
Definition module.h:314
int(* add_sub)(struct module_qstate *qstate, struct query_info *qinfo, uint16_t qflags, int prime, int valrec, struct module_qstate **newq, struct mesh_state **sub)
Definition module.h:416
struct auth_zones * auth_zones
Definition module.h:481
struct comm_base * worker_base
Definition module.h:454
struct mesh_area * mesh
Definition module.h:458
void * modinfo[MAX_MODULE]
Definition module.h:494
size_t(* get_mem)(struct module_env *env, int id)
Definition module.h:709
const char * name
Definition module.h:644
void(* deinit)(struct module_env *env, int id)
Definition module.h:660
void(* clear)(struct module_qstate *qstate, int id)
Definition module.h:701
int(* init)(struct module_env *env, int id)
Definition module.h:653
void(* operate)(struct module_qstate *qstate, enum module_ev event, int id, struct outbound_entry *outbound)
Definition module.h:682
void(* inform_super)(struct module_qstate *qstate, int id, struct module_qstate *super)
Definition module.h:695
struct sock_list * blacklist
Definition module.h:591
void * minfo[MAX_MODULE]
Definition module.h:602
int no_cache_store
Definition module.h:621
int is_priming
Definition module.h:577
struct respip_action_info * respip_action_info
Definition module.h:633
struct edns_option * edns_opts_back_in
Definition module.h:615
int no_cache_lookup
Definition module.h:619
struct config_strlist * errinf
Definition module.h:595
struct module_env * env
Definition module.h:604
struct regional * region
Definition module.h:593
struct mesh_state * mesh_info
Definition module.h:606
struct sock_list * reply_origin
Definition module.h:589
int need_refetch
Definition module.h:623
struct edns_option * edns_opts_back_out
Definition module.h:613
uint16_t query_flags
Definition module.h:575
enum module_ext_state ext_state[MAX_MODULE]
Definition module.h:600
int return_rcode
Definition module.h:587
struct respip_client_info * client_info
Definition module.h:629
struct comm_reply * reply
Definition module.h:583
struct edns_option * edns_opts_front_out
Definition module.h:617
struct query_info qinfo
Definition module.h:573
int is_valrec
Definition module.h:580
struct edns_option * edns_opts_front_in
Definition module.h:611
struct dns_msg * return_msg
Definition module.h:585
time_t prefetch_leeway
Definition module.h:608
socklen_t len
Definition module.h:561
struct sock_list * next
Definition module.h:559
struct sockaddr_storage addr
Definition module.h:563