1/*
2 * drill.h
3 * the main header file of drill
4 * (c) 2005, 2006 NLnet Labs
5 *
6 * See the file LICENSE for the license
7 *
8 */
9#ifndef _DRILL_H_
10#define _DRILL_H_
11#include "config.h"
12
13#include "drill_util.h"
14
15#define DRILL_VERSION PACKAGE_VERSION
16
17/* what kind of stuff do we allow */
18#define DRILL_QUERY	0
19#define DRILL_TRACE	1
20#define DRILL_CHASE	2
21#define DRILL_AFROMFILE 3
22#define DRILL_QTOFILE 	4
23#define DRILL_NSEC	5
24#define DRILL_REVERSE	6
25#define DRILL_SECTRACE 	7
26
27#define DRILL_ON(VAR, BIT) \
28(VAR) = (VAR) | (BIT)
29#define DRILL_OFF(VAR, BIT) \
30(VAR) = (VAR) & ~(BIT)
31
32extern ldns_rr_list *global_dns_root;
33extern int verbosity;
34
35void do_trace(ldns_resolver *res,
36			    ldns_rdf *name,
37			    ldns_rr_type type,
38			    ldns_rr_class c);
39ldns_status do_chase(ldns_resolver *res,
40				 ldns_rdf *name,
41				 ldns_rr_type type,
42				 ldns_rr_class c,
43				 ldns_rr_list *trusted_keys,
44				 ldns_pkt *pkt_o,
45				 uint16_t qflags,
46				 ldns_rr_list *prev_key_list);
47int do_secure_trace(ldns_resolver *res,
48				ldns_rdf *name,
49				ldns_rr_type type,
50				ldns_rr_class c,
51				ldns_rr_list *trusted_keys,
52				ldns_rdf *start_name);
53
54ldns_rr_list *	get_rr(ldns_resolver *res,
55				  ldns_rdf *zname,
56				  ldns_rr_type t,
57				  ldns_rr_class c);
58
59void drill_pkt_print(FILE *fd, ldns_resolver *r, ldns_pkt *p);
60void drill_pkt_print_footer(FILE *fd, ldns_resolver *r, ldns_pkt *p);
61
62ldns_pkt_type get_dnssec_rr(ldns_pkt *p,
63					   ldns_rdf *name,
64					   ldns_rr_type t,
65					   ldns_rr_list **rrlist,
66					   ldns_rr_list **sig);
67
68ldns_rr *ldns_nsec3_exact_match(ldns_rdf *qname,
69						  ldns_rr_type qtype,
70						  ldns_rr_list *nsec3s);
71
72ldns_rdf *ldns_nsec3_closest_encloser(ldns_rdf *qname,
73							   ldns_rr_type qtype,
74							   ldns_rr_list *nsec3s);
75
76/* verifies denial of existence of *name in *pkt (must contain NSEC or NSEC3 records
77 * if *nsec_rrs and *nsec_rr_sigs are given, pointers to the relevant nsecs and their signatures are
78 * placed there
79 */
80ldns_status ldns_verify_denial(ldns_pkt *pkt,
81						 ldns_rdf *name,
82						 ldns_rr_type type,
83						 ldns_rr_list **nsec_rrs,
84						 ldns_rr_list **nsec_rr_sigs);
85
86ldns_pkt *read_hex_pkt(char *filename);
87ldns_buffer *read_hex_buffer(char *filename);
88void	init_root(void);
89ldns_rr_list *read_root_hints(const char *filename);
90void clear_root(void);
91void	dump_hex(const ldns_pkt *pkt, const char *file);
92void warning(const char *fmt, ...);
93void	error(const char *fmt, ...);
94void	mesg(const char *fmt, ...);
95
96/* screen.c */
97void resolver_print_nameservers(ldns_resolver *r);
98void print_dnskey(ldns_rr_list *key_list);
99void print_ds(ldns_rr_list *ds_list);
100
101#endif /* _DRILL_H_ */
102