⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 view.h

📁 package of develop dns
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * 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 + -