1/* 2 * Copyright (C) 2004-2007, 2009 Internet Systems Consortium, Inc. ("ISC") 3 * Copyright (C) 2000, 2001 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: forward.h,v 1.13 2009/09/02 23:48:02 tbox Exp $ */ 19 20#ifndef DNS_FORWARD_H 21#define DNS_FORWARD_H 1 22 23/*! \file dns/forward.h */ 24 25#include <isc/lang.h> 26#include <isc/result.h> 27 28#include <dns/types.h> 29 30ISC_LANG_BEGINDECLS 31 32struct dns_forwarders { 33 isc_sockaddrlist_t addrs; 34 dns_fwdpolicy_t fwdpolicy; 35}; 36 37isc_result_t 38dns_fwdtable_create(isc_mem_t *mctx, dns_fwdtable_t **fwdtablep); 39/*%< 40 * Creates a new forwarding table. 41 * 42 * Requires: 43 * \li mctx is a valid memory context. 44 * \li fwdtablep != NULL && *fwdtablep == NULL 45 * 46 * Returns: 47 * \li #ISC_R_SUCCESS 48 * \li #ISC_R_NOMEMORY 49 */ 50 51isc_result_t 52dns_fwdtable_add(dns_fwdtable_t *fwdtable, dns_name_t *name, 53 isc_sockaddrlist_t *addrs, dns_fwdpolicy_t policy); 54/*%< 55 * Adds an entry to the forwarding table. The entry associates 56 * a domain with a list of forwarders and a forwarding policy. The 57 * addrs list is copied if not empty, so the caller should free its copy. 58 * 59 * Requires: 60 * \li fwdtable is a valid forwarding table. 61 * \li name is a valid name 62 * \li addrs is a valid list of sockaddrs, which may be empty. 63 * 64 * Returns: 65 * \li #ISC_R_SUCCESS 66 * \li #ISC_R_NOMEMORY 67 */ 68 69isc_result_t 70dns_fwdtable_delete(dns_fwdtable_t *fwdtable, dns_name_t *name); 71/*%< 72 * Removes an entry for 'name' from the forwarding table. If an entry 73 * that exactly matches 'name' does not exist, ISC_R_NOTFOUND will be returned. 74 * 75 * Requires: 76 * \li fwdtable is a valid forwarding table. 77 * \li name is a valid name 78 * 79 * Returns: 80 * \li #ISC_R_SUCCESS 81 * \li #ISC_R_NOTFOUND 82 */ 83 84isc_result_t 85dns_fwdtable_find(dns_fwdtable_t *fwdtable, dns_name_t *name, 86 dns_forwarders_t **forwardersp); 87/*%< 88 * Finds a domain in the forwarding table. The closest matching parent 89 * domain is returned. 90 * 91 * Requires: 92 * \li fwdtable is a valid forwarding table. 93 * \li name is a valid name 94 * \li forwardersp != NULL && *forwardersp == NULL 95 * 96 * Returns: 97 * \li #ISC_R_SUCCESS 98 * \li #ISC_R_NOTFOUND 99 */ 100 101isc_result_t 102dns_fwdtable_find2(dns_fwdtable_t *fwdtable, dns_name_t *name, 103 dns_name_t *foundname, dns_forwarders_t **forwardersp); 104/*%< 105 * Finds a domain in the forwarding table. The closest matching parent 106 * domain is returned. 107 * 108 * Requires: 109 * \li fwdtable is a valid forwarding table. 110 * \li name is a valid name 111 * \li forwardersp != NULL && *forwardersp == NULL 112 * \li foundname to be NULL or a valid name with buffer. 113 * 114 * Returns: 115 * \li #ISC_R_SUCCESS 116 * \li #ISC_R_NOTFOUND 117 */ 118 119void 120dns_fwdtable_destroy(dns_fwdtable_t **fwdtablep); 121/*%< 122 * Destroys a forwarding table. 123 * 124 * Requires: 125 * \li fwtablep != NULL && *fwtablep != NULL 126 * 127 * Ensures: 128 * \li all memory associated with the forwarding table is freed. 129 */ 130 131ISC_LANG_ENDDECLS 132 133#endif /* DNS_FORWARD_H */ 134