Electroneum
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 
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"
159 struct sldns_buffer;
160 struct alloc_cache;
161 struct rrset_cache;
162 struct key_cache;
163 struct config_file;
164 struct slabhash;
165 struct query_info;
166 struct edns_data;
167 struct regional;
168 struct worker;
169 struct comm_base;
170 struct auth_zones;
171 struct outside_network;
172 struct module_qstate;
173 struct ub_randstate;
174 struct mesh_area;
175 struct mesh_state;
176 struct val_anchors;
177 struct val_neg_cache;
178 struct iter_forwards;
179 struct iter_hints;
180 struct respip_set;
181 struct respip_client_info;
182 struct 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 
222 };
223 
227 struct inplace_cb {
229  struct inplace_cb* next;
231  void* cb;
232  void* cb_arg;
234  int id;
235 };
236 
253 typedef 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 
275 typedef 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 
307 struct module_env {
308  /* --- data --- */
310  struct config_file* cfg;
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 
448  struct regional* scratch;
452  struct worker* worker;
458  struct mesh_area* mesh;
462  struct ub_randstate* rnd;
464  time_t* now;
466  struct timeval* now_tv;
492  struct iter_hints* hints;
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 
531 };
532 
536 enum module_ev {
551 };
552 
557 struct sock_list {
559  struct sock_list* next;
561  socklen_t len;
564 };
565 
566 struct respip_action_info;
567 
581 
583  struct comm_reply* reply;
593  struct regional* region;
596 
598  int curmod;
604  struct module_env* env;
609 
624 
630 
634 
636  int is_drop;
637 };
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 
717 const char* strextstate(enum module_ext_state s);
718 
724 const char* strmodulevent(enum module_ev e);
725 
731 int edns_known_options_init(struct module_env* env);
732 
737 void edns_known_options_delete(struct module_env* env);
738 
751 int edns_register_option(uint16_t opt_code, int bypass_cache_stage,
752  int no_aggregation, struct module_env* env);
753 
764 int
765 inplace_cb_register(void* cb, enum inplace_cb_list_type type, void* cbarg,
766  struct module_env* env, int id);
767 
774 void
775 inplace_cb_delete(struct module_env* env, enum inplace_cb_list_type type,
776  int id);
777 
782 void inplace_cb_lists_delete(struct module_env* env);
783 
792  struct module_env* env);
793 
801 int edns_bypass_cache_stage(struct edns_option* list,
802  struct module_env* env);
803 
812 int unique_mesh_state(struct edns_option* list, struct module_env* env);
813 
820  struct module_env* env);
821 
822 #endif /* UTIL_MODULE_H */
struct edns_known_option * edns_known_options
Definition: module.h:503
struct sock_list * reply_origin
Definition: module.h:589
struct regional * region
Definition: module.h:593
struct slabhash * msg_cache
Definition: module.h:312
Definition: mesh.h:80
struct config_file * cfg
Definition: module.h:310
int edns_bypass_cache_stage(struct edns_option *list, struct module_env *env)
Definition: dns.h:61
#define MAX_MODULE
Definition: module.h:185
int edns_known_options_init(struct module_env *env)
struct edns_option * edns_opts_back_out
Definition: module.h:613
Definition: outbound_list.h:61
int no_aggregation
Definition: module.h:221
size_t edns_known_options_num
Definition: module.h:505
struct dns_msg * return_msg
Definition: module.h:585
struct query_info qinfo
Definition: module.h:573
struct regional * scratch
Definition: module.h:448
struct alloc_cache * alloc
Definition: module.h:460
struct edns_known_option * edns_option_is_known(uint16_t opt_code, struct module_env *env)
epee::misc_utils::struct_init< response_t > response
int is_priming
Definition: module.h:577
const char * strmodulevent(enum module_ev e)
const char * strextstate(enum module_ext_state s)
void inplace_cb_delete(struct module_env *env, enum inplace_cb_list_type type, int id)
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
enum module_ext_state ext_state[MAX_MODULE]
Definition: module.h:600
socklen_t len
Definition: module.h:561
struct inplace_cb * next
Definition: module.h:229
int need_refetch
Definition: module.h:623
unsigned short uint16_t
Definition: stdint.h:125
int no_cache_lookup
Definition: module.h:619
struct mesh_state * mesh_info
Definition: module.h:606
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
unsigned char uint8_t
Definition: stdint.h:124
struct rrset_cache * rrset_cache
Definition: module.h:314
int no_cache_store
Definition: module.h:621
struct respip_client_info * client_info
Definition: module.h:629
int return_rcode
Definition: module.h:587
uint16_t opt_code
Definition: module.h:217
int edns_register_option(uint16_t opt_code, int bypass_cache_stage, int no_aggregation, struct module_env *env)
struct infra_cache * infra_cache
Definition: module.h:316
void * cb_arg
Definition: module.h:232
struct timeval * now_tv
Definition: module.h:466
int(* detect_cycle)(struct module_qstate *qstate, struct query_info *qinfo, uint16_t flags, int prime, int valrec)
Definition: module.h:443
time_t prefetch_leeway
Definition: module.h:608
int inplace_cb_edns_back_parsed_func_type(struct module_qstate *qstate, int id, void *cb_args)
Definition: module.h:288
void log_edns_known_options(enum verbosity_value level, struct module_env *env)
void edns_known_options_delete(struct module_env *env)
struct module_env * env
Definition: module.h:604
void(* inform_super)(struct module_qstate *qstate, int id, struct module_qstate *super)
Definition: module.h:695
struct outside_network * outnet
Definition: module.h:456
struct iter_hints * hints
Definition: module.h:492
struct ub_randstate * rnd
Definition: module.h:462
void * minfo[MAX_MODULE]
Definition: module.h:602
struct auth_zones * auth_zones
Definition: module.h:481
time_t * now
Definition: module.h:464
int need_to_validate
Definition: module.h:469
struct sock_list * next
Definition: module.h:559
verbosity_value
Definition: log.h:49
inplace_cb_list_type
Definition: module.h:190
struct comm_base * worker_base
Definition: module.h:454
void inplace_cb_lists_delete(struct module_env *env)
int id
Definition: module.h:234
void * modinfo[MAX_MODULE]
Definition: module.h:494
module_ev
Definition: module.h:536
int unique_mesh
Definition: module.h:508
struct iter_forwards * fwds
Definition: module.h:484
struct sockaddr_storage addr
Definition: module.h:563
struct val_neg_cache * neg_cache
Definition: module.h:477
void(* detach_subs)(struct module_qstate *qstate)
Definition: module.h:362
struct sock_list * blacklist
Definition: module.h:591
size_t(* get_mem)(struct module_env *env, int id)
Definition: module.h:709
struct edns_option * edns_opts_front_out
Definition: module.h:617
struct edns_option * edns_opts_back_in
Definition: module.h:615
struct comm_timer * probe_timer
Definition: module.h:479
module_ext_state
Definition: module.h:516
void(* kill_sub)(struct module_qstate *newq)
Definition: module.h:428
struct respip_action_info * respip_action_info
Definition: module.h:633
int unique_mesh_state(struct edns_option *list, struct module_env *env)
void(* operate)(struct module_qstate *qstate, enum module_ev event, int id, struct outbound_entry *outbound)
Definition: module.h:682
struct mesh_area * mesh
Definition: module.h:458
int bypass_cache_stage
Definition: module.h:219
struct comm_reply * reply
Definition: module.h:583
int is_valrec
Definition: module.h:580
void * cb
Definition: module.h:231
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
int(* init)(struct module_env *env, int id)
Definition: module.h:653
uint16_t query_flags
Definition: module.h:575
struct sldns_buffer * scratch_buffer
Definition: module.h:450
int inplace_cb_register(void *cb, enum inplace_cb_list_type type, void *cbarg, struct module_env *env, int id)
struct config_strlist * errinf
Definition: module.h:595
const char * name
Definition: module.h:644
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
struct key_cache * key_cache
Definition: module.h:318
void(* clear)(struct module_qstate *qstate, int id)
Definition: module.h:701
Definition: worker.h:82
struct inplace_cb * inplace_cb_lists[inplace_cb_types_total]
Definition: module.h:497
struct worker * worker
Definition: module.h:452
int is_drop
Definition: module.h:636
int inplace_cb_query_response_func_type(struct module_qstate *qstate, struct dns_msg *response, int id, void *cb_args)
Definition: module.h:300
int curmod
Definition: module.h:598
struct edns_option * edns_opts_front_in
Definition: module.h:611
void(* deinit)(struct module_env *env, int id)
Definition: module.h:660
struct val_anchors * anchors
Definition: module.h:474