/contrib/bind9/bin/named/include/named/server.h
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 */