📄 view.h
字号:
/* * Copyright (C) 2004 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2003 Internet Software Consortium. * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. *//* $Id: view.h,v 1.73.2.4.2.12 2004/03/10 02:55:58 marka Exp $ */#ifndef DNS_VIEW_H#define DNS_VIEW_H 1/***** ***** Module Info *****//* * DNS View * * A "view" is a DNS namespace, together with an optional resolver and a * forwarding policy. A "DNS namespace" is a (possibly empty) set of * authoritative zones together with an optional cache and optional * "hints" information. * * Views start out "unfrozen". In this state, core attributes like * the cache, set of zones, and forwarding policy may be set. While * "unfrozen", the caller (e.g. nameserver configuration loading * code), must ensure exclusive access to the view. When the view is * "frozen", the core attributes become immutable, and the view module * will ensure synchronization. Freezing allows the view's core attributes * to be accessed without locking. * * MP: * Before the view is frozen, the caller must ensure synchronization. * * After the view is frozen, the module guarantees appropriate * synchronization of any data structures it creates and manipulates. * * Reliability: * No anticipated impact. * * Resources: * <TBS> * * Security: * No anticipated impact. * * Standards: * None. */#include <stdio.h>#include <isc/lang.h>#include <isc/magic.h>#include <isc/event.h>#include <isc/mutex.h>#include <isc/net.h>#include <isc/refcount.h>#include <isc/rwlock.h>#include <isc/stdtime.h>#include <dns/acl.h>#include <dns/fixedname.h>#include <dns/types.h>ISC_LANG_BEGINDECLSstruct dns_view { /* Unlocked. */ unsigned int magic; isc_mem_t * mctx; dns_rdataclass_t rdclass; char * name; dns_zt_t * zonetable; dns_resolver_t * resolver; dns_adb_t * adb; dns_requestmgr_t * requestmgr; dns_cache_t * cache; dns_db_t * cachedb; dns_db_t * hints; dns_keytable_t * secroots; dns_keytable_t * trustedkeys; isc_mutex_t lock; isc_boolean_t frozen; isc_task_t * task; isc_event_t resevent; isc_event_t adbevent; isc_event_t reqevent; /* Configurable data. */ dns_tsig_keyring_t * statickeys; dns_tsig_keyring_t * dynamickeys; dns_peerlist_t * peers; dns_order_t * order; dns_fwdtable_t * fwdtable; isc_boolean_t recursion; isc_boolean_t auth_nxdomain; isc_boolean_t additionalfromcache; isc_boolean_t additionalfromauth; isc_boolean_t minimalresponses; isc_boolean_t enablednssec; dns_transfer_format_t transfer_format; dns_acl_t * queryacl; dns_acl_t * recursionacl; dns_acl_t * sortlist; isc_boolean_t requestixfr; isc_boolean_t provideixfr; dns_ttl_t maxcachettl; dns_ttl_t maxncachettl; in_port_t dstport; dns_aclenv_t aclenv; dns_rdatatype_t preferred_glue; isc_boolean_t flush; dns_namelist_t * delonly; isc_boolean_t rootdelonly; dns_namelist_t * rootexclude; isc_boolean_t checknames; dns_name_t * dlv; dns_fixedname_t dlv_fixed; /* * Configurable data for server use only, * locked by server configuration lock. */ dns_acl_t * matchclients; dns_acl_t * matchdestinations; isc_boolean_t matchrecursiveonly; /* Locked by themselves. */ isc_refcount_t references; /* Locked by lock. */ unsigned int weakrefs; unsigned int attributes; /* Under owner's locking control. */ ISC_LINK(struct dns_view) link;};#define DNS_VIEW_MAGIC ISC_MAGIC('V','i','e','w')#define DNS_VIEW_VALID(view) ISC_MAGIC_VALID(view, DNS_VIEW_MAGIC)#define DNS_VIEWATTR_RESSHUTDOWN 0x01#define DNS_VIEWATTR_ADBSHUTDOWN 0x02#define DNS_VIEWATTR_REQSHUTDOWN 0x04isc_result_tdns_view_create(isc_mem_t *mctx, dns_rdataclass_t rdclass, const char *name, dns_view_t **viewp);/* * Create a view. * * Notes: * * The newly created view has no cache, no resolver, and an empty * zone table. The view is not frozen. * * Requires: * * 'mctx' is a valid memory context. * * 'rdclass' is a valid class. * * 'name' is a valid C string. * * viewp != NULL && *viewp == NULL * * Returns: * * ISC_R_SUCCESS * ISC_R_NOMEMORY * * Other errors are possible. */voiddns_view_attach(dns_view_t *source, dns_view_t **targetp);/* * Attach '*targetp' to 'source'. * * Requires: * * 'source' is a valid, frozen view. * * 'targetp' points to a NULL dns_view_t *. * * Ensures: * * *targetp is attached to source. * * While *targetp is attached, the view will not shut down. */voiddns_view_detach(dns_view_t **viewp);/* * Detach '*viewp' from its view. * * Requires: * * 'viewp' points to a valid dns_view_t * * * Ensures: * * *viewp is NULL. */voiddns_view_flushanddetach(dns_view_t **viewp);/* * Detach '*viewp' from its view. If this was the last reference * uncommited changed in zones will be flushed to disk. * * Requires: * * 'viewp' points to a valid dns_view_t * * * Ensures: * * *viewp is NULL. */voiddns_view_weakattach(dns_view_t *source, dns_view_t **targetp);/* * Weakly attach '*targetp' to 'source'. * * Requires: * * 'source' is a valid, frozen view. * * 'targetp' points to a NULL dns_view_t *. * * Ensures: * * *targetp is attached to source. * * While *targetp is attached, the view will not be freed. */voiddns_view_weakdetach(dns_view_t **targetp);/* * Detach '*viewp' from its view. * * Requires: * * 'viewp' points to a valid dns_view_t *. * * Ensures: * * *viewp is NULL. */isc_result_tdns_view_createresolver(dns_view_t *view, isc_taskmgr_t *taskmgr, unsigned int ntasks, isc_socketmgr_t *socketmgr, isc_timermgr_t *timermgr, unsigned int options, dns_dispatchmgr_t *dispatchmgr, dns_dispatch_t *dispatchv4, dns_dispatch_t *dispatchv6);/* * Create a resolver and address database for the view. * * Requires: * * 'view' is a valid, unfrozen view. * * 'view' does not have a resolver already. * * The requirements of dns_resolver_create() apply to 'taskmgr', * 'ntasks', 'socketmgr', 'timermgr', 'options', 'dispatchv4', and * 'dispatchv6'. * * Returns: * * ISC_R_SUCCESS * * Any error that dns_resolver_create() can return. */voiddns_view_setcache(dns_view_t *view, dns_cache_t *cache);/* * Set the view's cache database. * * Requires: * * 'view' is a valid, unfrozen view. * * 'cache' is a valid cache. * * Ensures: * * The cache of 'view' is 'cached. * * If this is not the first call to dns_view_setcache() for this * view, then previously set cache is detached. */voiddns_view_sethints(dns_view_t *view, dns_db_t *hints);/* * Set the view's hints database. * * Requires: * * 'view' is a valid, unfrozen view, whose hints database has not been * set. * * 'hints' is a valid zone database. * * Ensures: * * The hints database of 'view' is 'hints'. */voiddns_view_setkeyring(dns_view_t *view, dns_tsig_keyring_t *ring);/* * Set the view's static TSIG keys * * Requires: * * 'view' is a valid, unfrozen view, whose static TSIG keyring has not * been set. * * 'ring' is a valid TSIG keyring * * Ensures: * * The static TSIG keyring of 'view' is 'ring'. */voiddns_view_setdstport(dns_view_t *view, in_port_t dstport);/* * Set the view's destination port. This is the port to * which outgoing queries are sent. The default is 53, * the standard DNS port. * * Requires: * * 'view' is a valid view. * * 'dstport' is a valid TCP/UDP port number. * * Ensures: * External name servers will be assumed to be listning * on 'dstport'. For servers whose address has already * obtained obtained at the time of the call, the view may * continue to use the previously set port until the address * times out from the view's address database. */isc_result_tdns_view_addzone(dns_view_t *view, dns_zone_t *zone);/* * Add zone 'zone' to 'view'. * * Requires: * * 'view' is a valid, unfrozen view. * * 'zone' is a valid zone. */voiddns_view_freeze(dns_view_t *view);/* * Freeze view. * * Requires: * * 'view' is a valid, unfrozen view. * * Ensures: * * 'view' is frozen. */isc_result_tdns_view_find(dns_view_t *view, dns_name_t *name, dns_rdatatype_t type,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -