1/*
2 * Copyright (C) 2004, 2005, 2007, 2010, 2011, 2013  Internet Systems Consortium, Inc. ("ISC")
3 * Copyright (C) 1999-2002  Internet Software Consortium.
4 *
5 * Permission to use, copy, modify, and/or distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
10 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11 * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
12 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
14 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15 * PERFORMANCE OF THIS SOFTWARE.
16 */
17
18/* $Id: query.h,v 1.45 2011/01/13 04:59:24 tbox Exp $ */
19
20#ifndef NAMED_QUERY_H
21#define NAMED_QUERY_H 1
22
23/*! \file */
24
25#include <isc/types.h>
26#include <isc/buffer.h>
27#include <isc/netaddr.h>
28
29#include <dns/rdataset.h>
30#include <dns/rpz.h>
31#include <dns/types.h>
32
33#include <named/types.h>
34
35/*% nameserver database version structure */
36typedef struct ns_dbversion {
37	dns_db_t			*db;
38	dns_dbversion_t			*version;
39	isc_boolean_t			acl_checked;
40	isc_boolean_t			queryok;
41	ISC_LINK(struct ns_dbversion)	link;
42} ns_dbversion_t;
43
44/*% nameserver query structure */
45struct ns_query {
46	unsigned int			attributes;
47	unsigned int			restarts;
48	isc_boolean_t			timerset;
49	dns_name_t *			qname;
50	dns_name_t *			origqname;
51	unsigned int			dboptions;
52	unsigned int			fetchoptions;
53	dns_db_t *			gluedb;
54	dns_db_t *			authdb;
55	dns_zone_t *			authzone;
56	isc_boolean_t			authdbset;
57	isc_boolean_t			isreferral;
58	isc_mutex_t			fetchlock;
59	dns_fetch_t *			fetch;
60	dns_rpz_st_t *			rpz_st;
61	isc_bufferlist_t		namebufs;
62	ISC_LIST(ns_dbversion_t)	activeversions;
63	ISC_LIST(ns_dbversion_t)	freeversions;
64	dns_rdataset_t *		dns64_aaaa;
65	dns_rdataset_t *		dns64_sigaaaa;
66	isc_boolean_t *			dns64_aaaaok;
67	unsigned int			dns64_aaaaoklen;
68	unsigned int			dns64_options;
69	unsigned int			dns64_ttl;
70};
71
72#define NS_QUERYATTR_RECURSIONOK	0x0001
73#define NS_QUERYATTR_CACHEOK		0x0002
74#define NS_QUERYATTR_PARTIALANSWER	0x0004
75#define NS_QUERYATTR_NAMEBUFUSED	0x0008
76#define NS_QUERYATTR_RECURSING		0x0010
77#define NS_QUERYATTR_CACHEGLUEOK	0x0020
78#define NS_QUERYATTR_QUERYOKVALID	0x0040
79#define NS_QUERYATTR_QUERYOK		0x0080
80#define NS_QUERYATTR_WANTRECURSION	0x0100
81#define NS_QUERYATTR_SECURE		0x0200
82#define NS_QUERYATTR_NOAUTHORITY	0x0400
83#define NS_QUERYATTR_NOADDITIONAL	0x0800
84#define NS_QUERYATTR_CACHEACLOKVALID	0x1000
85#define NS_QUERYATTR_CACHEACLOK		0x2000
86#define NS_QUERYATTR_DNS64		0x4000
87#define NS_QUERYATTR_DNS64EXCLUDE	0x8000
88
89#ifdef USE_RRL
90#define NS_QUERYATTR_RRL_CHECKED	0x10000
91#endif /* USE_RRL */
92
93
94isc_result_t
95ns_query_init(ns_client_t *client);
96
97void
98ns_query_free(ns_client_t *client);
99
100void
101ns_query_start(ns_client_t *client);
102
103void
104ns_query_cancel(ns_client_t *client);
105
106#endif /* NAMED_QUERY_H */
107