Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 550bbe86d83a7870fdddc73c68e5d2b2 > files > 243

libunbound-devel-1.3.4-1mdv2010.0.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>unbound: services/cache/rrset.c File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css">
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.9 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li><a href="dirs.html"><span>Directories</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
  <div class="navpath"><a class="el" href="dir_d1ccb6fd7b4f0b6c4993c4e5b9d49242.html">services</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_b9bd6755c8df75071f1bf8c5239ee5c4.html">cache</a>
  </div>
</div>
<div class="contents">
<h1>rrset.c File Reference</h1>This file contains the rrset cache.  
<a href="#_details">More...</a>
<p>
<code>#include &quot;config.h&quot;</code><br>
<code>#include &quot;<a class="el" href="rrset_8h.html">services/cache/rrset.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="slabhash_8h.html">util/storage/slabhash.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="config__file_8h.html">util/config_file.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="packed__rrset_8h.html">util/data/packed_rrset.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="msgreply_8h.html">util/data/msgreply.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="regional_8h.html">util/regional.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="alloc_8h.html">util/alloc.h</a>&quot;</code><br>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="28696a81b7398a7437ee8cf6a1f1d579"></a><!-- doxytag: member="rrset.c::rrset_markdel" ref="28696a81b7398a7437ee8cf6a1f1d579" args="(void *key)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="rrset_8c.html#28696a81b7398a7437ee8cf6a1f1d579">rrset_markdel</a> (void *key)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">mark rrset to be deleted, set id=0 <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="rrset_8c.html#ada8b00ca485ca3b1fe2089b0113f3c0">rrset_cache_create</a> (struct <a class="el" href="structconfig__file.html">config_file</a> *cfg, struct <a class="el" href="structalloc__cache.html">alloc_cache</a> *alloc)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create rrset cache.  <a href="#ada8b00ca485ca3b1fe2089b0113f3c0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="rrset_8c.html#3f24b8e858524e5091ac39940bd2c852">rrset_cache_delete</a> (struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *r)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Delete rrset cache.  <a href="#3f24b8e858524e5091ac39940bd2c852"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="rrset_8c.html#d3cf891e09238edf89d0d37504041c14">rrset_cache_adjust</a> (struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *r, struct <a class="el" href="structconfig__file.html">config_file</a> *cfg, struct <a class="el" href="structalloc__cache.html">alloc_cache</a> *alloc)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Adjust settings of the cache to settings from the config file.  <a href="#d3cf891e09238edf89d0d37504041c14"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="rrset_8c.html#4918fd0e9d0ca7fb08716d0eafeea16c">rrset_cache_touch</a> (struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *r, struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *key, <a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a> hash, <a class="el" href="packed__rrset_8h.html#71887e7817081055b4413da4d0c95f6a">rrset_id_t</a> id)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Touch rrset, with given pointer and id.  <a href="#4918fd0e9d0ca7fb08716d0eafeea16c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8937f7c0413649997dea392e1a6d700e"></a><!-- doxytag: member="rrset.c::need_to_update_rrset" ref="8937f7c0413649997dea392e1a6d700e" args="(void *nd, void *cd, uint32_t timenow, int equal)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="rrset_8c.html#8937f7c0413649997dea392e1a6d700e">need_to_update_rrset</a> (void *nd, void *cd, uint32_t timenow, int equal)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">see if rrset needs to be updated in the cache <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c23f81cba9585c165905ac0980d16e14"></a><!-- doxytag: member="rrset.c::rrset_update_id" ref="c23f81cba9585c165905ac0980d16e14" args="(struct rrset_ref *ref, struct alloc_cache *alloc)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="rrset_8c.html#c23f81cba9585c165905ac0980d16e14">rrset_update_id</a> (struct <a class="el" href="structrrset__ref.html">rrset_ref</a> *ref, struct <a class="el" href="structalloc__cache.html">alloc_cache</a> *alloc)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Update RRSet special key ID. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="rrset_8c.html#d331a77967463f52cdd6aba52b44cf2b">rrset_cache_update</a> (struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *r, struct <a class="el" href="structrrset__ref.html">rrset_ref</a> *ref, struct <a class="el" href="structalloc__cache.html">alloc_cache</a> *alloc, uint32_t timenow)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Update an rrset in the rrset cache.  <a href="#d331a77967463f52cdd6aba52b44cf2b"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="rrset_8c.html#e71c034b2341d28089a41a4336ce90d3">rrset_cache_lookup</a> (struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *r, uint8_t *qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint32_t flags, uint32_t timenow, int wr)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Lookup rrset.  <a href="#e71c034b2341d28089a41a4336ce90d3"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="rrset_8c.html#ccc1e0e769e610f3b67548bc3b1d9f56">rrset_array_lock</a> (struct <a class="el" href="structrrset__ref.html">rrset_ref</a> *ref, size_t count, uint32_t timenow)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Obtain readlock on a (sorted) list of rrset references.  <a href="#ccc1e0e769e610f3b67548bc3b1d9f56"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="rrset_8c.html#00eed580b738abe68d59d7acd84102c3">rrset_array_unlock</a> (struct <a class="el" href="structrrset__ref.html">rrset_ref</a> *ref, size_t count)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Unlock array (sorted) of rrset references.  <a href="#00eed580b738abe68d59d7acd84102c3"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="rrset_8c.html#2b6d73754f5596a27ee4216fb58a3111">rrset_array_unlock_touch</a> (struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *r, struct <a class="el" href="structregional.html">regional</a> *scratch, struct <a class="el" href="structrrset__ref.html">rrset_ref</a> *ref, size_t count)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Unlock array (sorted) of rrset references and at the same time touch LRU on the rrsets.  <a href="#2b6d73754f5596a27ee4216fb58a3111"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="rrset_8c.html#f5b9eeede5ac39aa2e22c5aacba36154">rrset_update_sec_status</a> (struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *r, struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *rrset, uint32_t now)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Update security status of an rrset.  <a href="#f5b9eeede5ac39aa2e22c5aacba36154"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="rrset_8c.html#60c0660b73e6bcd70eacbfb9873166c9">rrset_check_sec_status</a> (struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *r, struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *rrset, uint32_t now)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Looks up security status of an rrset.  <a href="#60c0660b73e6bcd70eacbfb9873166c9"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="rrset_8c.html#729d7cb76fa4352d65d69d1edc4fad21">rrset_cache_remove</a> (struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *r, uint8_t *nm, size_t nmlen, uint16_t type, uint16_t dclass, uint32_t flags)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Remove an rrset from the cache, by name and type and flags.  <a href="#729d7cb76fa4352d65d69d1edc4fad21"></a><br></td></tr>
</table>
<hr><h2>Detailed Description</h2>
This file contains the rrset cache. 
<p>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="ada8b00ca485ca3b1fe2089b0113f3c0"></a><!-- doxytag: member="rrset.c::rrset_cache_create" ref="ada8b00ca485ca3b1fe2089b0113f3c0" args="(struct config_file *cfg, struct alloc_cache *alloc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structrrset__cache.html">rrset_cache</a>* rrset_cache_create           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structconfig__file.html">config_file</a> *&nbsp;</td>
          <td class="paramname"> <em>cfg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structalloc__cache.html">alloc_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>alloc</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Create rrset cache. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>cfg,:</em>&nbsp;</td><td>config settings or NULL for defaults. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>alloc,:</em>&nbsp;</td><td>initial default rrset key allocation. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: NULL on error. </dd></dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00116">HASH_DEFAULT_MAXMEM</a>, <a class="el" href="slabhash_8h_source.html#l00049">HASH_DEFAULT_SLABS</a>, <a class="el" href="lruhash_8h_source.html#l00114">HASH_DEFAULT_STARTARRAY</a>, <a class="el" href="config__file_8h_source.html#l00097">config_file::rrset_cache_size</a>, <a class="el" href="config__file_8h_source.html#l00099">config_file::rrset_cache_slabs</a>, <a class="el" href="packed__rrset_8c_source.html#l00136">rrset_data_delete()</a>, <a class="el" href="rrset_8c_source.html#l00051">rrset_markdel()</a>, <a class="el" href="slabhash_8c_source.html#l00048">slabhash_create()</a>, <a class="el" href="slabhash_8c_source.html#l00205">slabhash_setmarkdel()</a>, <a class="el" href="rrset_8h_source.html#l00058">rrset_cache::table</a>, <a class="el" href="packed__rrset_8c_source.html#l00092">ub_rrset_compare()</a>, <a class="el" href="packed__rrset_8c_source.html#l00125">ub_rrset_key_delete()</a>, and <a class="el" href="packed__rrset_8c_source.html#l00067">ub_rrset_sizefunc()</a>.</p>

<p>Referenced by <a class="el" href="rrset_8c_source.html#l00079">rrset_cache_adjust()</a>.</p>

</div>
</div><p>
<a class="anchor" name="3f24b8e858524e5091ac39940bd2c852"></a><!-- doxytag: member="rrset.c::rrset_cache_delete" ref="3f24b8e858524e5091ac39940bd2c852" args="(struct rrset_cache *r)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void rrset_cache_delete           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>r</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Delete rrset cache. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>r,:</em>&nbsp;</td><td>rrset cache to delete. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="slabhash_8c_source.html#l00087">slabhash_delete()</a>, and <a class="el" href="rrset_8h_source.html#l00058">rrset_cache::table</a>.</p>

<p>Referenced by <a class="el" href="daemon_8c_source.html#l00475">daemon_delete()</a>, <a class="el" href="rrset_8c_source.html#l00079">rrset_cache_adjust()</a>, and <a class="el" href="libunbound_8c_source.html#l00153">ub_ctx_delete()</a>.</p>

</div>
</div><p>
<a class="anchor" name="d3cf891e09238edf89d0d37504041c14"></a><!-- doxytag: member="rrset.c::rrset_cache_adjust" ref="d3cf891e09238edf89d0d37504041c14" args="(struct rrset_cache *r, struct config_file *cfg, struct alloc_cache *alloc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structrrset__cache.html">rrset_cache</a>* rrset_cache_adjust           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structconfig__file.html">config_file</a> *&nbsp;</td>
          <td class="paramname"> <em>cfg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structalloc__cache.html">alloc_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>alloc</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Adjust settings of the cache to settings from the config file. 
<p>
May purge the cache. May recreate the cache. There may be no threading or use by other threads. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>r,:</em>&nbsp;</td><td>rrset cache to adjust (like realloc). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>cfg,:</em>&nbsp;</td><td>config settings or NULL for defaults. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>alloc,:</em>&nbsp;</td><td>initial default rrset key allocation. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on error, or new rrset cache pointer on success. </dd></dl>

<p>References <a class="el" href="rrset_8c_source.html#l00057">rrset_cache_create()</a>, <a class="el" href="rrset_8c_source.html#l00071">rrset_cache_delete()</a>, <a class="el" href="config__file_8h_source.html#l00097">config_file::rrset_cache_size</a>, <a class="el" href="config__file_8h_source.html#l00099">config_file::rrset_cache_slabs</a>, <a class="el" href="slabhash_8h_source.html#l00059">slabhash::size</a>, <a class="el" href="slabhash_8c_source.html#l00145">slabhash_get_size()</a>, and <a class="el" href="rrset_8h_source.html#l00058">rrset_cache::table</a>.</p>

<p>Referenced by <a class="el" href="context_8c_source.html#l00054">context_finalize()</a>, and <a class="el" href="daemon_8c_source.html#l00512">daemon_apply_cfg()</a>.</p>

</div>
</div><p>
<a class="anchor" name="4918fd0e9d0ca7fb08716d0eafeea16c"></a><!-- doxytag: member="rrset.c::rrset_cache_touch" ref="4918fd0e9d0ca7fb08716d0eafeea16c" args="(struct rrset_cache *r, struct ub_packed_rrset_key *key, hashvalue_t hash, rrset_id_t id)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void rrset_cache_touch           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *&nbsp;</td>
          <td class="paramname"> <em>key</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a>&nbsp;</td>
          <td class="paramname"> <em>hash</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="packed__rrset_8h.html#71887e7817081055b4413da4d0c95f6a">rrset_id_t</a>&nbsp;</td>
          <td class="paramname"> <em>id</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Touch rrset, with given pointer and id. 
<p>
Caller may not hold a lock on ANY rrset, this could give deadlock.<p>
This routine is faster than a hashtable lookup: o no bin_lock is acquired. o no walk through the bin-overflow-list. o no comparison of the <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> key to find it.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>r,:</em>&nbsp;</td><td>rrset cache. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>key,:</em>&nbsp;</td><td>rrset key. Marked recently used (if it was not deleted before the lock is acquired, in that case nothing happens). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>hash,:</em>&nbsp;</td><td>hash value of the item. Please read it from the key when you have it locked. Used to find slab from <a class="el" href="structslabhash.html" title="Hash table formed from several smaller ones.">slabhash</a>. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>id,:</em>&nbsp;</td><td>used to check that the item is unchanged and not deleted. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="packed__rrset_8h_source.html#l00094">ub_packed_rrset_key::entry</a>, <a class="el" href="lruhash_8h_source.html#l00218">lruhash_entry::hash</a>, <a class="el" href="packed__rrset_8h_source.html#l00103">ub_packed_rrset_key::id</a>, <a class="el" href="lruhash_8h_source.html#l00210">lruhash_entry::lock</a>, <a class="el" href="lruhash_8h_source.html#l00149">lruhash::lock</a>, <a class="el" href="lruhash_8c_source.html#l00287">lru_touch()</a>, <a class="el" href="slabhash_8c_source.html#l00166">slabhash_gettable()</a>, and <a class="el" href="rrset_8h_source.html#l00058">rrset_cache::table</a>.</p>

<p>Referenced by <a class="el" href="rrset_8c_source.html#l00288">rrset_array_unlock_touch()</a>.</p>

</div>
</div><p>
<a class="anchor" name="d331a77967463f52cdd6aba52b44cf2b"></a><!-- doxytag: member="rrset.c::rrset_cache_update" ref="d331a77967463f52cdd6aba52b44cf2b" args="(struct rrset_cache *r, struct rrset_ref *ref, struct alloc_cache *alloc, uint32_t timenow)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rrset_cache_update           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structrrset__ref.html">rrset_ref</a> *&nbsp;</td>
          <td class="paramname"> <em>ref</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structalloc__cache.html">alloc_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>alloc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&nbsp;</td>
          <td class="paramname"> <em>timenow</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Update an rrset in the rrset cache. 
<p>
Stores the information for later use. Will lookup if the rrset is in the cache and perform an update if necessary. If the item was present, and superior, references are returned to that. The passed item is then deallocated with rrset_parsedelete.<p>
A superior rrset is: o rrset with better trust value. o same trust value, different rdata, newly passed rrset is inserted. If rdata is the same, TTL in the cache is updated.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>r,:</em>&nbsp;</td><td>the rrset cache. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ref,:</em>&nbsp;</td><td>reference (ptr and id) to the rrset. Pass reference setup for the new rrset. The reference may be changed if the cached rrset is superior. Before calling the rrset is presumed newly allocated and changeable. Afer calling you do not hold a lock, and the rrset is inserted in the hashtable so you need a lock to change it. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>alloc,:</em>&nbsp;</td><td>how to allocate (and deallocate) the special rrset key. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timenow,:</em>&nbsp;</td><td>current time (to see if ttl in cache is expired). </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: true if the passed reference is updated, false if it is unchanged. </dd></dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00222">lruhash_entry::data</a>, <a class="el" href="packed__rrset_8h_source.html#l00094">ub_packed_rrset_key::entry</a>, <a class="el" href="lruhash_8h_source.html#l00218">lruhash_entry::hash</a>, <a class="el" href="packed__rrset_8h_source.html#l00103">ub_packed_rrset_key::id</a>, <a class="el" href="msgreply_8h_source.html#l00080">rrset_ref::id</a>, <a class="el" href="lruhash_8h_source.html#l00220">lruhash_entry::key</a>, <a class="el" href="msgreply_8h_source.html#l00078">rrset_ref::key</a>, <a class="el" href="lruhash_8h_source.html#l00210">lruhash_entry::lock</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="rrset_8c_source.html#l00123">need_to_update_rrset()</a>, <a class="el" href="packed__rrset_8h_source.html#l00105">ub_packed_rrset_key::rk</a>, <a class="el" href="rrset_8c_source.html#l00156">rrset_update_id()</a>, <a class="el" href="packed__rrset_8c_source.html#l00143">rrsetdata_equal()</a>, <a class="el" href="slabhash_8c_source.html#l00116">slabhash_insert()</a>, <a class="el" href="slabhash_8c_source.html#l00122">slabhash_lookup()</a>, <a class="el" href="rrset_8h_source.html#l00058">rrset_cache::table</a>, <a class="el" href="packed__rrset_8h_source.html#l00075">packed_rrset_key::type</a>, and <a class="el" href="packed__rrset_8c_source.html#l00051">ub_packed_rrset_parsedelete()</a>.</p>

<p>Referenced by <a class="el" href="dns_8c_source.html#l00668">dns_cache_store()</a>, <a class="el" href="cachedump_8c_source.html#l00458">move_into_cache()</a>, <a class="el" href="iter__scrub_8c_source.html#l00496">store_rrset()</a>, and <a class="el" href="dns_8c_source.html#l00059">store_rrsets()</a>.</p>

</div>
</div><p>
<a class="anchor" name="e71c034b2341d28089a41a4336ce90d3"></a><!-- doxytag: member="rrset.c::rrset_cache_lookup" ref="e71c034b2341d28089a41a4336ce90d3" args="(struct rrset_cache *r, uint8_t *qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint32_t flags, uint32_t timenow, int wr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a>* rrset_cache_lookup           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>qname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>qnamelen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qtype</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qclass</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&nbsp;</td>
          <td class="paramname"> <em>flags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&nbsp;</td>
          <td class="paramname"> <em>timenow</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>wr</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Lookup rrset. 
<p>
You obtain read/write lock. You must unlock before lookup anything of else. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>r,:</em>&nbsp;</td><td>the rrset cache. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qname,:</em>&nbsp;</td><td>name of rrset to lookup. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qnamelen,:</em>&nbsp;</td><td>length of name of rrset to lookup. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qtype,:</em>&nbsp;</td><td>type of rrset to lookup (host order). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qclass,:</em>&nbsp;</td><td>class of rrset to lookup (host order). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>flags,:</em>&nbsp;</td><td>rrset flags, or 0. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timenow,:</em>&nbsp;</td><td>used to compare with TTL. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>wr,:</em>&nbsp;</td><td>set true to get writelock. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>packed rrset key pointer. Remember to unlock the key.entry.lock. or NULL if could not be found or it was timed out. </dd></dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00222">lruhash_entry::data</a>, <a class="el" href="packed__rrset_8h_source.html#l00064">packed_rrset_key::dname</a>, <a class="el" href="packed__rrset_8h_source.html#l00068">packed_rrset_key::dname_len</a>, <a class="el" href="packed__rrset_8h_source.html#l00094">ub_packed_rrset_key::entry</a>, <a class="el" href="packed__rrset_8h_source.html#l00073">packed_rrset_key::flags</a>, <a class="el" href="lruhash_8h_source.html#l00218">lruhash_entry::hash</a>, <a class="el" href="lruhash_8h_source.html#l00220">lruhash_entry::key</a>, <a class="el" href="lruhash_8h_source.html#l00210">lruhash_entry::lock</a>, <a class="el" href="packed__rrset_8h_source.html#l00105">ub_packed_rrset_key::rk</a>, <a class="el" href="packed__rrset_8h_source.html#l00077">packed_rrset_key::rrset_class</a>, <a class="el" href="packed__rrset_8c_source.html#l00160">rrset_key_hash()</a>, <a class="el" href="slabhash_8c_source.html#l00122">slabhash_lookup()</a>, <a class="el" href="rrset_8h_source.html#l00058">rrset_cache::table</a>, <a class="el" href="packed__rrset_8h_source.html#l00209">packed_rrset_data::ttl</a>, and <a class="el" href="packed__rrset_8h_source.html#l00075">packed_rrset_key::type</a>.</p>

<p>Referenced by <a class="el" href="dns_8c_source.html#l00222">cache_fill_missing()</a>, <a class="el" href="dns_8c_source.html#l00585">dns_cache_lookup()</a>, <a class="el" href="dns_8c_source.html#l00172">find_add_addrs()</a>, <a class="el" href="dns_8c_source.html#l00274">find_add_ds()</a>, <a class="el" href="dns_8c_source.html#l00107">find_closest_of_type()</a>, <a class="el" href="val__neg_8c_source.html#l01113">grab_nsec()</a>, <a class="el" href="cachedump_8c_source.html#l00656">load_ref()</a>, and <a class="el" href="val__neg_8c_source.html#l00913">val_neg_dlvlookup()</a>.</p>

</div>
</div><p>
<a class="anchor" name="ccc1e0e769e610f3b67548bc3b1d9f56"></a><!-- doxytag: member="rrset.c::rrset_array_lock" ref="ccc1e0e769e610f3b67548bc3b1d9f56" args="(struct rrset_ref *ref, size_t count, uint32_t timenow)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rrset_array_lock           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structrrset__ref.html">rrset_ref</a> *&nbsp;</td>
          <td class="paramname"> <em>ref</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>count</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&nbsp;</td>
          <td class="paramname"> <em>timenow</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Obtain readlock on a (sorted) list of rrset references. 
<p>
Checks TTLs and IDs of the rrsets and rollbacks locking if not Ok. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>ref,:</em>&nbsp;</td><td>array of rrset references (key pointer and ID value). duplicate references are allowed and handled. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>count,:</em>&nbsp;</td><td>size of array. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timenow,:</em>&nbsp;</td><td>used to compare with TTL. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>true on success, false on a failure, which can be that some RRsets have timed out, or that they do not exist any more, the RRsets have been purged from the cache. If true, you hold readlocks on all the ref items. </dd></dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00222">lruhash_entry::data</a>, <a class="el" href="packed__rrset_8h_source.html#l00094">ub_packed_rrset_key::entry</a>, <a class="el" href="msgreply_8h_source.html#l00080">rrset_ref::id</a>, <a class="el" href="msgreply_8h_source.html#l00078">rrset_ref::key</a>, and <a class="el" href="rrset_8c_source.html#l00277">rrset_array_unlock()</a>.</p>

<p>Referenced by <a class="el" href="worker_8c_source.html#l00501">answer_from_cache()</a>, <a class="el" href="cachedump_8c_source.html#l00222">dump_msg()</a>, <a class="el" href="pythonmod__utils_8c_source.html#l00071">invalidateQueryInCache()</a>, and <a class="el" href="dns_8c_source.html#l00422">tomsg()</a>.</p>

</div>
</div><p>
<a class="anchor" name="00eed580b738abe68d59d7acd84102c3"></a><!-- doxytag: member="rrset.c::rrset_array_unlock" ref="00eed580b738abe68d59d7acd84102c3" args="(struct rrset_ref *ref, size_t count)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void rrset_array_unlock           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structrrset__ref.html">rrset_ref</a> *&nbsp;</td>
          <td class="paramname"> <em>ref</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>count</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Unlock array (sorted) of rrset references. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>ref,:</em>&nbsp;</td><td>array of rrset references (key pointer and ID value). duplicate references are allowed and handled. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>count,:</em>&nbsp;</td><td>size of array. </td></tr>
  </table>
</dl>

<p>Referenced by <a class="el" href="cachedump_8c_source.html#l00222">dump_msg()</a>, <a class="el" href="pythonmod__utils_8c_source.html#l00071">invalidateQueryInCache()</a>, <a class="el" href="rrset_8c_source.html#l00258">rrset_array_lock()</a>, and <a class="el" href="dns_8c_source.html#l00422">tomsg()</a>.</p>

</div>
</div><p>
<a class="anchor" name="2b6d73754f5596a27ee4216fb58a3111"></a><!-- doxytag: member="rrset.c::rrset_array_unlock_touch" ref="2b6d73754f5596a27ee4216fb58a3111" args="(struct rrset_cache *r, struct regional *scratch, struct rrset_ref *ref, size_t count)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void rrset_array_unlock_touch           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structregional.html">regional</a> *&nbsp;</td>
          <td class="paramname"> <em>scratch</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structrrset__ref.html">rrset_ref</a> *&nbsp;</td>
          <td class="paramname"> <em>ref</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>count</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Unlock array (sorted) of rrset references and at the same time touch LRU on the rrsets. 
<p>
It needs the scratch region for temporary storage as it uses the initial locks to obtain hash values. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>r,:</em>&nbsp;</td><td>the rrset cache. In this cache LRU is updated. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>scratch,:</em>&nbsp;</td><td>region for temporary storage of hash values. if memory allocation fails, the lru touch fails silently, but locks are released. memory errors are logged. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ref,:</em>&nbsp;</td><td>array of rrset references (key pointer and ID value). duplicate references are allowed and handled. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>count,:</em>&nbsp;</td><td>size of array. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="log_8c_source.html#l00254">log_warn()</a>, <a class="el" href="regional_8c_source.html#l00116">regional_alloc()</a>, and <a class="el" href="rrset_8c_source.html#l00092">rrset_cache_touch()</a>.</p>

<p>Referenced by <a class="el" href="worker_8c_source.html#l00501">answer_from_cache()</a>, and <a class="el" href="dns_8c_source.html#l00422">tomsg()</a>.</p>

</div>
</div><p>
<a class="anchor" name="f5b9eeede5ac39aa2e22c5aacba36154"></a><!-- doxytag: member="rrset.c::rrset_update_sec_status" ref="f5b9eeede5ac39aa2e22c5aacba36154" args="(struct rrset_cache *r, struct ub_packed_rrset_key *rrset, uint32_t now)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void rrset_update_sec_status           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *&nbsp;</td>
          <td class="paramname"> <em>rrset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&nbsp;</td>
          <td class="paramname"> <em>now</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Update security status of an rrset. 
<p>
Looks up the rrset. If found, checks if rdata is equal. If so, it will update the security, trust and rrset-ttl values. The values are only updated if security is increased (towards secure). <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>r,:</em>&nbsp;</td><td>the rrset cache. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rrset,:</em>&nbsp;</td><td>which rrset to attempt to update. This rrset is left untouched. The rrset in the cache is updated in-place. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>now,:</em>&nbsp;</td><td>current time. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00222">lruhash_entry::data</a>, <a class="el" href="packed__rrset_8h_source.html#l00094">ub_packed_rrset_key::entry</a>, <a class="el" href="lruhash_8h_source.html#l00218">lruhash_entry::hash</a>, <a class="el" href="packed__rrset_8h_source.html#l00105">ub_packed_rrset_key::rk</a>, <a class="el" href="packed__rrset_8h_source.html#l00221">packed_rrset_data::rr_ttl</a>, <a class="el" href="packed__rrset_8c_source.html#l00160">rrset_key_hash()</a>, <a class="el" href="packed__rrset_8c_source.html#l00143">rrsetdata_equal()</a>, <a class="el" href="packed__rrset_8h_source.html#l00217">packed_rrset_data::security</a>, <a class="el" href="slabhash_8c_source.html#l00122">slabhash_lookup()</a>, <a class="el" href="rrset_8h_source.html#l00058">rrset_cache::table</a>, <a class="el" href="packed__rrset_8h_source.html#l00215">packed_rrset_data::trust</a>, and <a class="el" href="packed__rrset_8h_source.html#l00209">packed_rrset_data::ttl</a>.</p>

<p>Referenced by <a class="el" href="val__utils_8c_source.html#l00716">val_mark_indeterminate()</a>, <a class="el" href="val__utils_8c_source.html#l00736">val_mark_insecure()</a>, and <a class="el" href="val__utils_8c_source.html#l00305">val_verify_rrset()</a>.</p>

</div>
</div><p>
<a class="anchor" name="60c0660b73e6bcd70eacbfb9873166c9"></a><!-- doxytag: member="rrset.c::rrset_check_sec_status" ref="60c0660b73e6bcd70eacbfb9873166c9" args="(struct rrset_cache *r, struct ub_packed_rrset_key *rrset, uint32_t now)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void rrset_check_sec_status           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *&nbsp;</td>
          <td class="paramname"> <em>rrset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&nbsp;</td>
          <td class="paramname"> <em>now</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Looks up security status of an rrset. 
<p>
Looks up the rrset. If found, checks if rdata is equal, and <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> did not expire. If so, it will update the security, trust and rrset-ttl values. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>r,:</em>&nbsp;</td><td>the rrset cache. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rrset,:</em>&nbsp;</td><td>This rrset may change security status due to the cache. But its status will only improve, towards secure. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>now,:</em>&nbsp;</td><td>current time. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00222">lruhash_entry::data</a>, <a class="el" href="packed__rrset_8h_source.html#l00094">ub_packed_rrset_key::entry</a>, <a class="el" href="lruhash_8h_source.html#l00218">lruhash_entry::hash</a>, <a class="el" href="packed__rrset_8h_source.html#l00105">ub_packed_rrset_key::rk</a>, <a class="el" href="packed__rrset_8h_source.html#l00221">packed_rrset_data::rr_ttl</a>, <a class="el" href="packed__rrset_8c_source.html#l00160">rrset_key_hash()</a>, <a class="el" href="packed__rrset_8c_source.html#l00143">rrsetdata_equal()</a>, <a class="el" href="packed__rrset_8h_source.html#l00162">sec_status_bogus</a>, <a class="el" href="packed__rrset_8h_source.html#l00217">packed_rrset_data::security</a>, <a class="el" href="slabhash_8c_source.html#l00122">slabhash_lookup()</a>, <a class="el" href="rrset_8h_source.html#l00058">rrset_cache::table</a>, <a class="el" href="packed__rrset_8h_source.html#l00215">packed_rrset_data::trust</a>, and <a class="el" href="packed__rrset_8h_source.html#l00209">packed_rrset_data::ttl</a>.</p>

<p>Referenced by <a class="el" href="val__utils_8c_source.html#l00305">val_verify_rrset()</a>.</p>

</div>
</div><p>
<a class="anchor" name="729d7cb76fa4352d65d69d1edc4fad21"></a><!-- doxytag: member="rrset.c::rrset_cache_remove" ref="729d7cb76fa4352d65d69d1edc4fad21" args="(struct rrset_cache *r, uint8_t *nm, size_t nmlen, uint16_t type, uint16_t dclass, uint32_t flags)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void rrset_cache_remove           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structrrset__cache.html">rrset_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>nm</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>nmlen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>type</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>dclass</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&nbsp;</td>
          <td class="paramname"> <em>flags</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Remove an rrset from the cache, by name and type and flags. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>r,:</em>&nbsp;</td><td>rrset cache </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>nm,:</em>&nbsp;</td><td>name of rrset </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>nmlen,:</em>&nbsp;</td><td>length of name </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>type,:</em>&nbsp;</td><td>type of rrset </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dclass,:</em>&nbsp;</td><td>class of rrset, host order </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>flags,:</em>&nbsp;</td><td>flags of rrset, host order </td></tr>
  </table>
</dl>

<p>References <a class="el" href="packed__rrset_8h_source.html#l00064">packed_rrset_key::dname</a>, <a class="el" href="packed__rrset_8h_source.html#l00068">packed_rrset_key::dname_len</a>, <a class="el" href="packed__rrset_8h_source.html#l00094">ub_packed_rrset_key::entry</a>, <a class="el" href="packed__rrset_8h_source.html#l00073">packed_rrset_key::flags</a>, <a class="el" href="lruhash_8h_source.html#l00218">lruhash_entry::hash</a>, <a class="el" href="lruhash_8h_source.html#l00220">lruhash_entry::key</a>, <a class="el" href="packed__rrset_8h_source.html#l00105">ub_packed_rrset_key::rk</a>, <a class="el" href="packed__rrset_8h_source.html#l00077">packed_rrset_key::rrset_class</a>, <a class="el" href="packed__rrset_8c_source.html#l00160">rrset_key_hash()</a>, <a class="el" href="slabhash_8c_source.html#l00128">slabhash_remove()</a>, <a class="el" href="rrset_8h_source.html#l00058">rrset_cache::table</a>, and <a class="el" href="packed__rrset_8h_source.html#l00075">packed_rrset_key::type</a>.</p>

<p>Referenced by <a class="el" href="remote_8c_source.html#l01048">do_cache_remove()</a>.</p>

</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Tue Oct 13 06:46:31 2009 for unbound by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
</body>
</html>