PageRenderTime 33ms CodeModel.GetById 13ms app.highlight 15ms RepoModel.GetById 1ms app.codeStats 0ms

/contrib/bind9/bin/named/include/named/server.h

https://bitbucket.org/freebsd/freebsd-head/
C++ Header | 337 lines | 162 code | 56 blank | 119 comment | 0 complexity | 28c8e22446169b2901d54341c3904595 MD5 | raw file
  1/*
  2 * Copyright (C) 2004-2010  Internet Systems Consortium, Inc. ("ISC")
  3 * Copyright (C) 1999-2003  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: server.h,v 1.110 2010/08/16 23:46:52 tbox Exp $ */
 19
 20#ifndef NAMED_SERVER_H
 21#define NAMED_SERVER_H 1
 22
 23/*! \file */
 24
 25#include <isc/log.h>
 26#include <isc/magic.h>
 27#include <isc/quota.h>
 28#include <isc/sockaddr.h>
 29#include <isc/types.h>
 30#include <isc/xml.h>
 31
 32#include <dns/acl.h>
 33#include <dns/types.h>
 34
 35#include <named/types.h>
 36
 37#define NS_EVENTCLASS		ISC_EVENTCLASS(0x4E43)
 38#define NS_EVENT_RELOAD		(NS_EVENTCLASS + 0)
 39#define NS_EVENT_CLIENTCONTROL	(NS_EVENTCLASS + 1)
 40
 41/*%
 42 * Name server state.  Better here than in lots of separate global variables.
 43 */
 44struct ns_server {
 45	unsigned int		magic;
 46	isc_mem_t *		mctx;
 47
 48	isc_task_t *		task;
 49
 50	/* Configurable data. */
 51	isc_quota_t		xfroutquota;
 52	isc_quota_t		tcpquota;
 53	isc_quota_t		recursionquota;
 54	dns_acl_t		*blackholeacl;
 55	char *			statsfile;	/*%< Statistics file name */
 56	char *			dumpfile;	/*%< Dump file name */
 57	char *			secrootsfile;	/*%< Secroots file name */
 58	char *			bindkeysfile;	/*%< bind.keys file name */
 59	char *			recfile;	/*%< Recursive file name */
 60	isc_boolean_t		version_set;	/*%< User has set version */
 61	char *			version;	/*%< User-specified version */
 62	isc_boolean_t		hostname_set;	/*%< User has set hostname */
 63	char *			hostname;	/*%< User-specified hostname */
 64	/*% Use hostname for server id */
 65	isc_boolean_t		server_usehostname;
 66	char *			server_id;	/*%< User-specified server id */
 67
 68	/*%
 69	 * Current ACL environment.  This defines the
 70	 * current values of the localhost and localnets
 71	 * ACLs.
 72	 */
 73	dns_aclenv_t		aclenv;
 74
 75	/* Server data structures. */
 76	dns_loadmgr_t *		loadmgr;
 77	dns_zonemgr_t *		zonemgr;
 78	dns_viewlist_t		viewlist;
 79	ns_interfacemgr_t *	interfacemgr;
 80	dns_db_t *		in_roothints;
 81	dns_tkeyctx_t *		tkeyctx;
 82
 83	isc_timer_t *		interface_timer;
 84	isc_timer_t *		heartbeat_timer;
 85	isc_timer_t *		pps_timer;
 86
 87	isc_uint32_t		interface_interval;
 88	isc_uint32_t		heartbeat_interval;
 89
 90	isc_mutex_t		reload_event_lock;
 91	isc_event_t *		reload_event;
 92
 93	isc_boolean_t		flushonshutdown;
 94	isc_boolean_t		log_queries;	/*%< For BIND 8 compatibility */
 95
 96	ns_cachelist_t		cachelist;	/*%< Possibly shared caches */
 97	isc_stats_t *		nsstats;	/*%< Server stats */
 98	dns_stats_t *		rcvquerystats;	/*% Incoming query stats */
 99	dns_stats_t *		opcodestats;	/*%< Incoming message stats */
100	isc_stats_t *		zonestats;	/*% Zone management stats */
101	isc_stats_t  *		resolverstats;	/*% Resolver stats */
102	isc_stats_t *		sockstats;	/*%< Socket stats */
103
104	ns_controls_t *		controls;	/*%< Control channels */
105	unsigned int		dispatchgen;
106	ns_dispatchlist_t	dispatches;
107
108	dns_acache_t		*acache;
109
110	ns_statschannellist_t	statschannels;
111
112	dns_tsigkey_t		*sessionkey;
113	char			*session_keyfile;
114	dns_name_t		*session_keyname;
115	unsigned int		session_keyalg;
116	isc_uint16_t		session_keybits;
117};
118
119#define NS_SERVER_MAGIC			ISC_MAGIC('S','V','E','R')
120#define NS_SERVER_VALID(s)		ISC_MAGIC_VALID(s, NS_SERVER_MAGIC)
121
122/*%
123 * Server statistics counters.  Used as isc_statscounter_t values.
124 */
125enum {
126	dns_nsstatscounter_requestv4 = 0,
127	dns_nsstatscounter_requestv6 = 1,
128	dns_nsstatscounter_edns0in = 2,
129	dns_nsstatscounter_badednsver = 3,
130	dns_nsstatscounter_tsigin = 4,
131	dns_nsstatscounter_sig0in = 5,
132	dns_nsstatscounter_invalidsig = 6,
133	dns_nsstatscounter_tcp = 7,
134
135	dns_nsstatscounter_authrej = 8,
136	dns_nsstatscounter_recurserej = 9,
137	dns_nsstatscounter_xfrrej = 10,
138	dns_nsstatscounter_updaterej = 11,
139
140	dns_nsstatscounter_response = 12,
141	dns_nsstatscounter_truncatedresp = 13,
142	dns_nsstatscounter_edns0out = 14,
143	dns_nsstatscounter_tsigout = 15,
144	dns_nsstatscounter_sig0out = 16,
145
146	dns_nsstatscounter_success = 17,
147	dns_nsstatscounter_authans = 18,
148	dns_nsstatscounter_nonauthans = 19,
149	dns_nsstatscounter_referral = 20,
150	dns_nsstatscounter_nxrrset = 21,
151	dns_nsstatscounter_servfail = 22,
152	dns_nsstatscounter_formerr = 23,
153	dns_nsstatscounter_nxdomain = 24,
154	dns_nsstatscounter_recursion = 25,
155	dns_nsstatscounter_duplicate = 26,
156	dns_nsstatscounter_dropped = 27,
157	dns_nsstatscounter_failure = 28,
158
159	dns_nsstatscounter_xfrdone = 29,
160
161	dns_nsstatscounter_updatereqfwd = 30,
162	dns_nsstatscounter_updaterespfwd = 31,
163	dns_nsstatscounter_updatefwdfail = 32,
164	dns_nsstatscounter_updatedone = 33,
165	dns_nsstatscounter_updatefail = 34,
166	dns_nsstatscounter_updatebadprereq = 35,
167
168	dns_nsstatscounter_max = 36
169};
170
171void
172ns_server_create(isc_mem_t *mctx, ns_server_t **serverp);
173/*%<
174 * Create a server object with default settings.
175 * This function either succeeds or causes the program to exit
176 * with a fatal error.
177 */
178
179void
180ns_server_destroy(ns_server_t **serverp);
181/*%<
182 * Destroy a server object, freeing its memory.
183 */
184
185void
186ns_server_reloadwanted(ns_server_t *server);
187/*%<
188 * Inform a server that a reload is wanted.  This function
189 * may be called asynchronously, from outside the server's task.
190 * If a reload is already scheduled or in progress, the call
191 * is ignored.
192 */
193
194void
195ns_server_flushonshutdown(ns_server_t *server, isc_boolean_t flush);
196/*%<
197 * Inform the server that the zones should be flushed to disk on shutdown.
198 */
199
200isc_result_t
201ns_server_reloadcommand(ns_server_t *server, char *args, isc_buffer_t *text);
202/*%<
203 * Act on a "reload" command from the command channel.
204 */
205
206isc_result_t
207ns_server_reconfigcommand(ns_server_t *server, char *args);
208/*%<
209 * Act on a "reconfig" command from the command channel.
210 */
211
212isc_result_t
213ns_server_notifycommand(ns_server_t *server, char *args, isc_buffer_t *text);
214/*%<
215 * Act on a "notify" command from the command channel.
216 */
217
218isc_result_t
219ns_server_refreshcommand(ns_server_t *server, char *args, isc_buffer_t *text);
220/*%<
221 * Act on a "refresh" command from the command channel.
222 */
223
224isc_result_t
225ns_server_retransfercommand(ns_server_t *server, char *args);
226/*%<
227 * Act on a "retransfer" command from the command channel.
228 */
229
230isc_result_t
231ns_server_togglequerylog(ns_server_t *server);
232/*%<
233 * Toggle logging of queries, as in BIND 8.
234 */
235
236/*%
237 * Dump the current statistics to the statistics file.
238 */
239isc_result_t
240ns_server_dumpstats(ns_server_t *server);
241
242/*%
243 * Dump the current cache to the dump file.
244 */
245isc_result_t
246ns_server_dumpdb(ns_server_t *server, char *args);
247
248/*%
249 * Dump the current security roots to the secroots file.
250 */
251isc_result_t
252ns_server_dumpsecroots(ns_server_t *server, char *args);
253
254/*%
255 * Change or increment the server debug level.
256 */
257isc_result_t
258ns_server_setdebuglevel(ns_server_t *server, char *args);
259
260/*%
261 * Flush the server's cache(s)
262 */
263isc_result_t
264ns_server_flushcache(ns_server_t *server, char *args);
265
266/*%
267 * Flush a particular name from the server's cache(s)
268 */
269isc_result_t
270ns_server_flushname(ns_server_t *server, char *args);
271
272/*%
273 * Report the server's status.
274 */
275isc_result_t
276ns_server_status(ns_server_t *server, isc_buffer_t *text);
277
278/*%
279 * Report a list of dynamic and static tsig keys, per view.
280 */
281isc_result_t
282ns_server_tsiglist(ns_server_t *server, isc_buffer_t *text);
283
284/*%
285 * Delete a specific key (with optional view).
286 */
287isc_result_t
288ns_server_tsigdelete(ns_server_t *server, char *command, isc_buffer_t *text);
289
290/*%
291 * Enable or disable updates for a zone.
292 */
293isc_result_t
294ns_server_freeze(ns_server_t *server, isc_boolean_t freeze, char *args,
295		 isc_buffer_t *text);
296
297/*%
298 * Update a zone's DNSKEY set from the key repository.  If
299 * the command that triggered the call to this function was "sign",
300 * then force a full signing of the zone.  If it was "loadkeys",
301 * then don't sign the zone; any needed changes to signatures can
302 * take place incrementally.
303 */
304isc_result_t
305ns_server_rekey(ns_server_t *server, char *args);
306
307/*%
308 * Dump the current recursive queries.
309 */
310isc_result_t
311ns_server_dumprecursing(ns_server_t *server);
312
313/*%
314 * Maintain a list of dispatches that require reserved ports.
315 */
316void
317ns_add_reserved_dispatch(ns_server_t *server, const isc_sockaddr_t *addr);
318
319/*%
320 * Enable or disable dnssec validation.
321 */
322isc_result_t
323ns_server_validation(ns_server_t *server, char *args);
324
325/*%
326 * Add a zone to a running process
327 */
328isc_result_t
329ns_server_add_zone(ns_server_t *server, char *args);
330
331/*%
332 * Deletes a zone from a running process
333 */
334isc_result_t
335ns_server_del_zone(ns_server_t *server, char *args);
336
337#endif /* NAMED_SERVER_H */