146283Sdfr/*
246283Sdfr * drill.h
398944Sobrien * the main header file of drill
498944Sobrien * (c) 2005, 2006 NLnet Labs
546283Sdfr *
698944Sobrien * See the file LICENSE for the license
746283Sdfr *
898944Sobrien */
998944Sobrien#ifndef _DRILL_H_
1098944Sobrien#define _DRILL_H_
1198944Sobrien#include "config.h"
1246283Sdfr
1398944Sobrien#include "drill_util.h"
1498944Sobrien
1598944Sobrien#define DRILL_VERSION PACKAGE_VERSION
1698944Sobrien
1746283Sdfr/* what kind of stuff do we allow */
1898944Sobrien#define DRILL_QUERY	0
1998944Sobrien#define DRILL_TRACE	1
2098944Sobrien#define DRILL_CHASE	2
2198944Sobrien#define DRILL_AFROMFILE 3
2246283Sdfr#define DRILL_QTOFILE 	4
2346283Sdfr#define DRILL_NSEC	5
2446283Sdfr#define DRILL_REVERSE	6
2546283Sdfr#define DRILL_SECTRACE 	7
2646283Sdfr
2746283Sdfr#define DRILL_ON(VAR, BIT) \
2846283Sdfr(VAR) = (VAR) | (BIT)
2946283Sdfr#define DRILL_OFF(VAR, BIT) \
3046283Sdfr(VAR) = (VAR) & ~(BIT)
3146283Sdfr
3246283Sdfrextern ldns_rr_list *global_dns_root;
3346283Sdfrextern bool qds;
3446283Sdfrextern int verbosity;
3546283Sdfr
3646283Sdfrldns_pkt *do_trace(ldns_resolver *res,
3746283Sdfr			    ldns_rdf *name,
3898944Sobrien			    ldns_rr_type type,
3998944Sobrien			    ldns_rr_class c);
4046283Sdfrldns_status do_chase(ldns_resolver *res,
4198944Sobrien				 ldns_rdf *name,
4246283Sdfr				 ldns_rr_type type,
4398944Sobrien				 ldns_rr_class c,
4498944Sobrien				 ldns_rr_list *trusted_keys,
4546283Sdfr				 ldns_pkt *pkt_o,
4698944Sobrien				 uint16_t qflags,
4746283Sdfr				 ldns_rr_list *prev_key_list,
4898944Sobrien				 int verbosity);
4946283Sdfrint do_secure_trace(ldns_resolver *res,
5046283Sdfr				ldns_rdf *name,
5146283Sdfr				ldns_rr_type type,
5298944Sobrien				ldns_rr_class c,
5346283Sdfr				ldns_rr_list *trusted_keys,
5446283Sdfr				ldns_rdf *start_name);
5546283Sdfr
5646283Sdfrldns_rr_list *	get_rr(ldns_resolver *res,
5746283Sdfr				  ldns_rdf *zname,
5846283Sdfr				  ldns_rr_type t,
5946283Sdfr				  ldns_rr_class c);
6046283Sdfr
6146283Sdfrvoid drill_pkt_print(FILE *fd, ldns_resolver *r, ldns_pkt *p);
6246283Sdfrvoid drill_pkt_print_footer(FILE *fd, ldns_resolver *r, ldns_pkt *p);
6346283Sdfr
6446283Sdfrldns_pkt_type get_dnssec_rr(ldns_pkt *p,
6546283Sdfr					   ldns_rdf *name,
6646283Sdfr					   ldns_rr_type t,
6746283Sdfr					   ldns_rr_list **rrlist,
6846283Sdfr					   ldns_rr_list **sig);
6946283Sdfr
7046283Sdfrldns_rr *ldns_nsec3_exact_match(ldns_rdf *qname,
7146283Sdfr						  ldns_rr_type qtype,
7298944Sobrien						  ldns_rr_list *nsec3s);
7346283Sdfr
7446283Sdfrldns_rdf *ldns_nsec3_closest_encloser(ldns_rdf *qname,
7598944Sobrien							   ldns_rr_type qtype,
7698944Sobrien							   ldns_rr_list *nsec3s);
7798944Sobrien
7846283Sdfr/* verifies denial of existence of *name in *pkt (must contain NSEC or NSEC3 records
7946283Sdfr * if *nsec_rrs and *nsec_rr_sigs are given, pointers to the relevant nsecs and their signatures are
8046283Sdfr * placed there
8146283Sdfr */
8298944Sobrienldns_status ldns_verify_denial(ldns_pkt *pkt,
8346283Sdfr						 ldns_rdf *name,
8446283Sdfr						 ldns_rr_type type,
8546283Sdfr						 ldns_rr_list **nsec_rrs,
8646283Sdfr						 ldns_rr_list **nsec_rr_sigs);
8746283Sdfr
8846283Sdfrldns_pkt *read_hex_pkt(char *filename);
8946283Sdfrldns_buffer *read_hex_buffer(char *filename);
9046283Sdfrvoid	init_root(void);
9146283Sdfrldns_rr_list *read_root_hints(const char *filename);
9246283Sdfrvoid clear_root(void);
9346283Sdfrvoid	dump_hex(const ldns_pkt *pkt, const char *file);
9446283Sdfrvoid warning(const char *fmt, ...);
9546283Sdfrvoid	error(const char *fmt, ...);
9646283Sdfrvoid	mesg(const char *fmt, ...);
9746283Sdfr
9846283Sdfr/* screen.c */
9946283Sdfrvoid resolver_print_nameservers(ldns_resolver *r);
10046283Sdfrvoid print_dnskey(ldns_rr_list *key_list);
10198944Sobrienvoid print_ds(ldns_rr_list *ds_list);
10298944Sobrien
10346283Sdfr#endif /* _DRILL_H_ */
10446283Sdfr