Edit File by line
/home/barbar84/www/wp-conte.../plugins/sujqvwi/ExeBy/exe_root.../usr/include/bind9/dns
File: acache.h
/*
[0] Fix | Delete
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
[1] Fix | Delete
*
[2] Fix | Delete
* This Source Code Form is subject to the terms of the Mozilla Public
[3] Fix | Delete
* License, v. 2.0. If a copy of the MPL was not distributed with this
[4] Fix | Delete
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
[5] Fix | Delete
*
[6] Fix | Delete
* See the COPYRIGHT file distributed with this work for additional
[7] Fix | Delete
* information regarding copyright ownership.
[8] Fix | Delete
*/
[9] Fix | Delete
[10] Fix | Delete
#ifndef DNS_ACACHE_H
[11] Fix | Delete
#define DNS_ACACHE_H 1
[12] Fix | Delete
[13] Fix | Delete
/*****
[14] Fix | Delete
***** Module Info
[15] Fix | Delete
*****/
[16] Fix | Delete
[17] Fix | Delete
/*
[18] Fix | Delete
* Acache
[19] Fix | Delete
*
[20] Fix | Delete
* The Additional Cache Object
[21] Fix | Delete
*
[22] Fix | Delete
* This module manages internal caching entries that correspond to
[23] Fix | Delete
* the additional section data of a DNS DB node (an RRset header, more
[24] Fix | Delete
* accurately). An additional cache entry is expected to be (somehow)
[25] Fix | Delete
* attached to a particular RR in a particular DB node, and contains a set
[26] Fix | Delete
* of information of an additional data for the DB node.
[27] Fix | Delete
*
[28] Fix | Delete
* An additional cache object is intended to be created as a per-view
[29] Fix | Delete
* object, and manages all cache entries within the view.
[30] Fix | Delete
*
[31] Fix | Delete
* The intended usage of the additional caching is to provide a short cut
[32] Fix | Delete
* to additional glue RRs of an NS RR. For each NS RR, it is often
[33] Fix | Delete
* necessary to look for glue RRs to make a proper response. Once the
[34] Fix | Delete
* glue RRs are known, the additional caching allows the client to
[35] Fix | Delete
* associate the information to the original NS RR so that further
[36] Fix | Delete
* expensive lookups can be avoided for the NS RR.
[37] Fix | Delete
*
[38] Fix | Delete
* Each additional cache entry contains information to identify a
[39] Fix | Delete
* particular DB node and (optionally) an associated RRset. The
[40] Fix | Delete
* information consists of its zone, database, the version of the
[41] Fix | Delete
* database, database node, and RRset.
[42] Fix | Delete
*
[43] Fix | Delete
* A "negative" information can also be cached. For example, if a glue
[44] Fix | Delete
* RR does not exist as an authoritative data in the same zone as that
[45] Fix | Delete
* of the NS RR, this fact can be cached by specifying a NULL pointer
[46] Fix | Delete
* for the database, version, and node. (See the description for
[47] Fix | Delete
* dns_acache_getentry() below for more details.)
[48] Fix | Delete
*
[49] Fix | Delete
* Since each member stored in an additional cache entry holds a reference
[50] Fix | Delete
* to a corresponding object, a stale cache entry may cause unnecessary
[51] Fix | Delete
* memory consumption. For instance, when a zone is reloaded, additional
[52] Fix | Delete
* cache entries that have a reference to the zone (and its DB and/or
[53] Fix | Delete
* DB nodes) can delay the cleanup of the referred objects. In order to
[54] Fix | Delete
* minimize such a bad effect, this module provides several cleanup
[55] Fix | Delete
* mechanisms.
[56] Fix | Delete
*
[57] Fix | Delete
* The first one is a shutdown procedure called when the associated view
[58] Fix | Delete
* is shut down. In this case, dns_acache_shutdown() will be called and
[59] Fix | Delete
* all cache entries will be purged. This mechanism will help the
[60] Fix | Delete
* situation when the configuration is reloaded or the main server is
[61] Fix | Delete
* stopped.
[62] Fix | Delete
*
[63] Fix | Delete
* Per-DB cleanup mechanism is also provided. Each additional cache entry
[64] Fix | Delete
* is associated with related DB, which is expected to have been
[65] Fix | Delete
* registered when the DB was created by dns_acache_setdb(). If a
[66] Fix | Delete
* particular DB is going to be destroyed, the primary holder of the DB,
[67] Fix | Delete
* a typical example of which is a zone, will call dns_acache_putdb().
[68] Fix | Delete
* Then this module will clean-up all cache entries associated with the
[69] Fix | Delete
* DB. This mechanism is effective when a secondary zone DB is going to
[70] Fix | Delete
* be stale after a zone transfer.
[71] Fix | Delete
*
[72] Fix | Delete
* Finally, this module supports for periodic clean-up of stale entries.
[73] Fix | Delete
* Each cache entry has a timestamp field, which is updated every time
[74] Fix | Delete
* the entry is referred. A periodically invoked cleaner checks the
[75] Fix | Delete
* timestamp of each entry, and purge entries that have not been referred
[76] Fix | Delete
* for a certain period. The cleaner interval can be specified by
[77] Fix | Delete
* dns_acache_setcleaninginterval(). If the periodic clean-up is not
[78] Fix | Delete
* enough, it is also possible to specify the upper limit of entries
[79] Fix | Delete
* in terms of the memory consumption. If the maximum value is
[80] Fix | Delete
* specified, the cleaner is invoked when the memory consumption reaches
[81] Fix | Delete
* the high watermark inferred from the maximum value. In this case,
[82] Fix | Delete
* the cleaner will use more aggressive algorithm to decide the "victim"
[83] Fix | Delete
* entries. The maximum value can be specified by
[84] Fix | Delete
* dns_acache_setcachesize().
[85] Fix | Delete
*
[86] Fix | Delete
* When a cache entry is going to be purged within this module, the
[87] Fix | Delete
* callback function specified at the creation time will be called.
[88] Fix | Delete
* The callback function is expected to release all internal resources
[89] Fix | Delete
* related to the entry, which will typically be specific to DB
[90] Fix | Delete
* implementation, and to call dns_acache_detachentry(). The callback
[91] Fix | Delete
* mechanism is very important, since the holder of an additional cache
[92] Fix | Delete
* entry may not be able to initiate the clean-up of the entry, due to
[93] Fix | Delete
* the reference ordering. For example, as long as an additional cache
[94] Fix | Delete
* entry has a reference to a DB object, the DB cannot be freed, in which
[95] Fix | Delete
* a DB node may have a reference to the cache entry.
[96] Fix | Delete
*
[97] Fix | Delete
* Credits:
[98] Fix | Delete
* The basic idea of this kind of short-cut for frequently used
[99] Fix | Delete
* information is similar to the "pre-compiled answer" approach adopted
[100] Fix | Delete
* in nsd by NLnet LABS with RIPE NCC. Our work here is an independent
[101] Fix | Delete
* effort, but the success of nsd encouraged us to pursue this path.
[102] Fix | Delete
*
[103] Fix | Delete
* The design and implementation of the periodic memory management and
[104] Fix | Delete
* the upper limitation of memory consumption was derived from the cache
[105] Fix | Delete
* DB implementation of BIND9.
[106] Fix | Delete
*
[107] Fix | Delete
* MP:
[108] Fix | Delete
* There are two main locks in this module. One is for each entry, and
[109] Fix | Delete
* the other is for the additional cache object.
[110] Fix | Delete
*
[111] Fix | Delete
* Reliability:
[112] Fix | Delete
* The callback function for a cache entry is called with holding the
[113] Fix | Delete
* entry lock. Thus, it implicitly assumes the callback function does not
[114] Fix | Delete
* call a function that can require the lock. Typically, the only
[115] Fix | Delete
* function that can be called from the callback function safely is
[116] Fix | Delete
* dns_acache_detachentry(). The breakage of this implicit assumption
[117] Fix | Delete
* may cause a deadlock.
[118] Fix | Delete
*
[119] Fix | Delete
* Resources:
[120] Fix | Delete
* In a 32-bit architecture (such as i386), the following additional
[121] Fix | Delete
* memory is required comparing to the case that disables this module.
[122] Fix | Delete
* - 76 bytes for each additional cache entry
[123] Fix | Delete
* - if the entry has a DNS name and associated RRset,
[124] Fix | Delete
* * 44 bytes + size of the name (1-255 bytes)
[125] Fix | Delete
* * 52 bytes x number_of_RRs
[126] Fix | Delete
* - 28 bytes for each DB related to this module
[127] Fix | Delete
*
[128] Fix | Delete
* Using the additional cache also requires extra memory consumption in
[129] Fix | Delete
* the DB implementation. In the current implementation for rbtdb, we
[130] Fix | Delete
* need:
[131] Fix | Delete
* - two additional pointers for each DB node (8 bytes for a 32-bit
[132] Fix | Delete
* architecture
[133] Fix | Delete
* - for each RR associated to an RR in a DB node, we also need
[134] Fix | Delete
* a pointer and management objects to support the additional cache
[135] Fix | Delete
* function. These are allocated on-demand. The total size is
[136] Fix | Delete
* 32 bytes for a 32-bit architecture.
[137] Fix | Delete
*
[138] Fix | Delete
* Security:
[139] Fix | Delete
* Since this module does not handle any low-level data directly,
[140] Fix | Delete
* no security issue specific to this module is anticipated.
[141] Fix | Delete
*
[142] Fix | Delete
* Standards:
[143] Fix | Delete
* None.
[144] Fix | Delete
*/
[145] Fix | Delete
[146] Fix | Delete
/***
[147] Fix | Delete
*** Imports
[148] Fix | Delete
***/
[149] Fix | Delete
[150] Fix | Delete
#include <isc/mutex.h>
[151] Fix | Delete
#include <isc/lang.h>
[152] Fix | Delete
#include <isc/stdtime.h>
[153] Fix | Delete
[154] Fix | Delete
#include <dns/types.h>
[155] Fix | Delete
[156] Fix | Delete
/***
[157] Fix | Delete
*** Functions
[158] Fix | Delete
***/
[159] Fix | Delete
ISC_LANG_BEGINDECLS
[160] Fix | Delete
[161] Fix | Delete
isc_result_t
[162] Fix | Delete
dns_acache_create(dns_acache_t **acachep, isc_mem_t *mctx,
[163] Fix | Delete
isc_taskmgr_t *taskmgr, isc_timermgr_t *timermgr);
[164] Fix | Delete
/*
[165] Fix | Delete
* Create a new DNS additional cache object.
[166] Fix | Delete
*
[167] Fix | Delete
* Requires:
[168] Fix | Delete
*
[169] Fix | Delete
* 'mctx' is a valid memory context
[170] Fix | Delete
*
[171] Fix | Delete
* 'taskmgr' is a valid task manager
[172] Fix | Delete
*
[173] Fix | Delete
* 'timermgr' is a valid timer or NULL. If NULL, no periodic cleaning of
[174] Fix | Delete
* the cache will take place.
[175] Fix | Delete
*
[176] Fix | Delete
* 'acachep' is a valid pointer, and *acachep == NULL
[177] Fix | Delete
*
[178] Fix | Delete
* Ensures:
[179] Fix | Delete
*
[180] Fix | Delete
* '*acachep' is attached to the newly created cache
[181] Fix | Delete
*
[182] Fix | Delete
* Returns:
[183] Fix | Delete
*
[184] Fix | Delete
* ISC_R_SUCCESS
[185] Fix | Delete
* ISC_R_NOMEMORY
[186] Fix | Delete
* ISC_R_UNEXPECTED
[187] Fix | Delete
*/
[188] Fix | Delete
[189] Fix | Delete
void
[190] Fix | Delete
dns_acache_attach(dns_acache_t *source, dns_acache_t **targetp);
[191] Fix | Delete
/*
[192] Fix | Delete
* Attach *targetp to cache.
[193] Fix | Delete
*
[194] Fix | Delete
* Requires:
[195] Fix | Delete
*
[196] Fix | Delete
* 'acache' is a valid additional cache.
[197] Fix | Delete
*
[198] Fix | Delete
* 'targetp' points to a NULL dns_acache_t *.
[199] Fix | Delete
*
[200] Fix | Delete
* Ensures:
[201] Fix | Delete
*
[202] Fix | Delete
* *targetp is attached to the 'source' additional cache.
[203] Fix | Delete
*/
[204] Fix | Delete
[205] Fix | Delete
void
[206] Fix | Delete
dns_acache_detach(dns_acache_t **acachep);
[207] Fix | Delete
/*
[208] Fix | Delete
* Detach *acachep from its cache.
[209] Fix | Delete
*
[210] Fix | Delete
* Requires:
[211] Fix | Delete
*
[212] Fix | Delete
* '*acachep' points to a valid additional cache.
[213] Fix | Delete
*
[214] Fix | Delete
* Ensures:
[215] Fix | Delete
*
[216] Fix | Delete
* *acachep is NULL.
[217] Fix | Delete
*
[218] Fix | Delete
* If '*acachep' is the last reference to the cache and the additional
[219] Fix | Delete
* cache does not have an outstanding task, all resources used by the
[220] Fix | Delete
* cache will be freed.
[221] Fix | Delete
*/
[222] Fix | Delete
[223] Fix | Delete
void
[224] Fix | Delete
dns_acache_setcleaninginterval(dns_acache_t *acache, unsigned int t);
[225] Fix | Delete
/*
[226] Fix | Delete
* Set the periodic cleaning interval of an additional cache to 'interval'
[227] Fix | Delete
* seconds.
[228] Fix | Delete
*/
[229] Fix | Delete
[230] Fix | Delete
void
[231] Fix | Delete
dns_acache_setcachesize(dns_acache_t *acache, size_t size);
[232] Fix | Delete
/*
[233] Fix | Delete
* Set the maximum additional cache size. 0 means unlimited.
[234] Fix | Delete
*/
[235] Fix | Delete
[236] Fix | Delete
isc_result_t
[237] Fix | Delete
dns_acache_setdb(dns_acache_t *acache, dns_db_t *db);
[238] Fix | Delete
/*
[239] Fix | Delete
* Set 'db' in 'acache' when the db can be referred from acache, in order
[240] Fix | Delete
* to provide a hint for resolving the back reference.
[241] Fix | Delete
*
[242] Fix | Delete
* Requires:
[243] Fix | Delete
* 'acache' is a valid acache pointer.
[244] Fix | Delete
* 'db' is a valid DNS DB pointer.
[245] Fix | Delete
*
[246] Fix | Delete
* Ensures:
[247] Fix | Delete
* 'acache' will have a reference to 'db'.
[248] Fix | Delete
*
[249] Fix | Delete
* Returns:
[250] Fix | Delete
* ISC_R_SUCCESS
[251] Fix | Delete
* ISC_R_EXISTS (which means the specified 'db' is already set)
[252] Fix | Delete
* ISC_R_NOMEMORY
[253] Fix | Delete
*/
[254] Fix | Delete
[255] Fix | Delete
isc_result_t
[256] Fix | Delete
dns_acache_putdb(dns_acache_t *acache, dns_db_t *db);
[257] Fix | Delete
/*
[258] Fix | Delete
* Release 'db' from 'acache' if it has been set by dns_acache_setdb().
[259] Fix | Delete
*
[260] Fix | Delete
* Requires:
[261] Fix | Delete
* 'acache' is a valid acache pointer.
[262] Fix | Delete
* 'db' is a valid DNS DB pointer.
[263] Fix | Delete
*
[264] Fix | Delete
* Ensures:
[265] Fix | Delete
* 'acache' will release the reference to 'db'. Additionally, the content
[266] Fix | Delete
* of each cache entry that is related to the 'db' will be released via
[267] Fix | Delete
* the callback function.
[268] Fix | Delete
*
[269] Fix | Delete
* Returns:
[270] Fix | Delete
* ISC_R_SUCCESS
[271] Fix | Delete
* ISC_R_NOTFOUND (which means the specified 'db' is not set in 'acache')
[272] Fix | Delete
* ISC_R_NOMEMORY
[273] Fix | Delete
*/
[274] Fix | Delete
[275] Fix | Delete
void
[276] Fix | Delete
dns_acache_shutdown(dns_acache_t *acache);
[277] Fix | Delete
/*
[278] Fix | Delete
* Shutdown 'acache'.
[279] Fix | Delete
*
[280] Fix | Delete
* Requires:
[281] Fix | Delete
*
[282] Fix | Delete
* '*acache' is a valid additional cache.
[283] Fix | Delete
*/
[284] Fix | Delete
[285] Fix | Delete
isc_result_t
[286] Fix | Delete
dns_acache_createentry(dns_acache_t *acache, dns_db_t *origdb,
[287] Fix | Delete
void (*callback)(dns_acacheentry_t *, void **),
[288] Fix | Delete
void *cbarg, dns_acacheentry_t **entryp);
[289] Fix | Delete
/*
[290] Fix | Delete
* Create an additional cache entry. A new entry is created and attached to
[291] Fix | Delete
* the given additional cache object. A callback function is also associated
[292] Fix | Delete
* with the created entry, which will be called when the cache entry is purged
[293] Fix | Delete
* for some reason.
[294] Fix | Delete
*
[295] Fix | Delete
* Requires:
[296] Fix | Delete
*
[297] Fix | Delete
* 'acache' is a valid additional cache.
[298] Fix | Delete
* 'entryp' is a valid pointer, and *entryp == NULL
[299] Fix | Delete
* 'origdb' is a valid DNS DB pointer.
[300] Fix | Delete
* 'callback' and 'cbarg' can be NULL. In this case, however, the entry
[301] Fix | Delete
* is meaningless (and will be cleaned-up in the next periodical
[302] Fix | Delete
* cleaning).
[303] Fix | Delete
*
[304] Fix | Delete
* Ensures:
[305] Fix | Delete
* '*entryp' will point to a new additional cache entry.
[306] Fix | Delete
*
[307] Fix | Delete
* Returns:
[308] Fix | Delete
* ISC_R_SUCCESS
[309] Fix | Delete
* ISC_R_NOMEMORY
[310] Fix | Delete
*/
[311] Fix | Delete
[312] Fix | Delete
isc_result_t
[313] Fix | Delete
dns_acache_getentry(dns_acacheentry_t *entry, dns_zone_t **zonep,
[314] Fix | Delete
dns_db_t **dbp, dns_dbversion_t **versionp,
[315] Fix | Delete
dns_dbnode_t **nodep, dns_name_t *fname,
[316] Fix | Delete
dns_message_t *msg, isc_stdtime_t now);
[317] Fix | Delete
/*
[318] Fix | Delete
* Get content from a particular additional cache entry.
[319] Fix | Delete
*
[320] Fix | Delete
* Requires:
[321] Fix | Delete
*
[322] Fix | Delete
* 'entry' is a valid additional cache entry.
[323] Fix | Delete
* 'zonep' is a NULL pointer or '*zonep' == NULL (this is the only
[324] Fix | Delete
* optional parameter.)
[325] Fix | Delete
* 'dbp' is a valid pointer, and '*dbp' == NULL
[326] Fix | Delete
* 'versionp' is a valid pointer, and '*versionp' == NULL
[327] Fix | Delete
* 'nodep' is a valid pointer, and '*nodep' == NULL
[328] Fix | Delete
* 'fname' is a valid DNS name.
[329] Fix | Delete
* 'msg' is a valid DNS message.
[330] Fix | Delete
*
[331] Fix | Delete
* Ensures:
[332] Fix | Delete
* Several possible cases can happen according to the content.
[333] Fix | Delete
* 1. For a positive cache entry,
[334] Fix | Delete
* '*zonep' will point to the corresponding zone (if zonep is a valid
[335] Fix | Delete
* pointer),
[336] Fix | Delete
* '*dbp' will point to a DB for the zone,
[337] Fix | Delete
* '*versionp' will point to its version, and
[338] Fix | Delete
* '*nodep' will point to the corresponding DB node.
[339] Fix | Delete
* 'fname' will have the DNS name of the DB node and contain a list of
[340] Fix | Delete
* rdataset for the node (which can be an empty list).
[341] Fix | Delete
*
[342] Fix | Delete
* 2. For a negative cache entry that means no corresponding zone exists,
[343] Fix | Delete
* '*zonep' == NULL (if zonep is a valid pointer)
[344] Fix | Delete
* '*dbp', '*versionp', and '*nodep' will be NULL.
[345] Fix | Delete
*
[346] Fix | Delete
* 3. For a negative cache entry that means no corresponding DB node
[347] Fix | Delete
* exists, '*zonep' will point to the corresponding zone (if zonep is a
[348] Fix | Delete
* valid pointer),
[349] Fix | Delete
* '*dbp' will point to a corresponding DB for zone,
[350] Fix | Delete
* '*versionp' will point to its version.
[351] Fix | Delete
* '*nodep' will be kept as NULL.
[352] Fix | Delete
* 'fname' will not change.
[353] Fix | Delete
*
[354] Fix | Delete
* On failure, no new references will be created.
[355] Fix | Delete
*
[356] Fix | Delete
* Returns:
[357] Fix | Delete
* ISC_R_SUCCESS
[358] Fix | Delete
* ISC_R_NOMEMORY
[359] Fix | Delete
*/
[360] Fix | Delete
[361] Fix | Delete
isc_result_t
[362] Fix | Delete
dns_acache_setentry(dns_acache_t *acache, dns_acacheentry_t *entry,
[363] Fix | Delete
dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *version,
[364] Fix | Delete
dns_dbnode_t *node, dns_name_t *fname);
[365] Fix | Delete
/*
[366] Fix | Delete
* Set content to a particular additional cache entry.
[367] Fix | Delete
*
[368] Fix | Delete
* Requires:
[369] Fix | Delete
* 'acache' is a valid additional cache.
[370] Fix | Delete
* 'entry' is a valid additional cache entry.
[371] Fix | Delete
* All the others pointers are NULL or a valid pointer of the
[372] Fix | Delete
* corresponding type.
[373] Fix | Delete
*
[374] Fix | Delete
* Returns:
[375] Fix | Delete
* ISC_R_SUCCESS
[376] Fix | Delete
* ISC_R_NOMEMORY
[377] Fix | Delete
* ISC_R_NOTFOUND
[378] Fix | Delete
*/
[379] Fix | Delete
[380] Fix | Delete
bool
[381] Fix | Delete
dns_acache_cancelentry(dns_acacheentry_t *entry);
[382] Fix | Delete
/*
[383] Fix | Delete
* Cancel the use of the cache entry 'entry'. This function is supposed to
[384] Fix | Delete
* be called when the node that holds the entry finds the content is not
[385] Fix | Delete
* correct any more. This function will try to release as much dependency as
[386] Fix | Delete
* possible, and will be ready to be cleaned-up. The registered callback
[387] Fix | Delete
* function will be canceled and will never called.
[388] Fix | Delete
*
[389] Fix | Delete
* Requires:
[390] Fix | Delete
* 'entry' is a valid additional cache entry.
[391] Fix | Delete
*
[392] Fix | Delete
* Returns:
[393] Fix | Delete
* true if the entry was active when canceled
[394] Fix | Delete
*/
[395] Fix | Delete
[396] Fix | Delete
void
[397] Fix | Delete
dns_acache_attachentry(dns_acacheentry_t *source, dns_acacheentry_t **targetp);
[398] Fix | Delete
/*
[399] Fix | Delete
* Attach *targetp to the cache entry 'source'.
[400] Fix | Delete
*
[401] Fix | Delete
* Requires:
[402] Fix | Delete
*
[403] Fix | Delete
* 'source' is a valid additional cache entry.
[404] Fix | Delete
*
[405] Fix | Delete
* 'targetp' points to a NULL dns_acacheentry_t *.
[406] Fix | Delete
*
[407] Fix | Delete
* Ensures:
[408] Fix | Delete
*
[409] Fix | Delete
* *targetp is attached to 'source'.
[410] Fix | Delete
*/
[411] Fix | Delete
[412] Fix | Delete
void
[413] Fix | Delete
dns_acache_detachentry(dns_acacheentry_t **entryp);
[414] Fix | Delete
/*
[415] Fix | Delete
* Detach *entryp from its cache.
[416] Fix | Delete
*
[417] Fix | Delete
* Requires:
[418] Fix | Delete
*
[419] Fix | Delete
* '*entryp' points to a valid additional cache entry.
[420] Fix | Delete
*
[421] Fix | Delete
* Ensures:
[422] Fix | Delete
*
[423] Fix | Delete
* *entryp is NULL.
[424] Fix | Delete
*
[425] Fix | Delete
* If '*entryp' is the last reference to the entry,
[426] Fix | Delete
* cache does not have an outstanding task, all resources used by the
[427] Fix | Delete
* entry (including the entry object itself) will be freed.
[428] Fix | Delete
*/
[429] Fix | Delete
[430] Fix | Delete
void
[431] Fix | Delete
dns_acache_countquerymiss(dns_acache_t *acache);
[432] Fix | Delete
/*
[433] Fix | Delete
* Count up a missed acache query. XXXMLG need more docs.
[434] Fix | Delete
*/
[435] Fix | Delete
[436] Fix | Delete
ISC_LANG_ENDDECLS
[437] Fix | Delete
[438] Fix | Delete
#endif /* DNS_ACACHE_H */
[439] Fix | Delete
[440] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function