Sophie

Sophie

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

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/infra.h 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>infra.h File Reference</h1>This file contains the infrastructure cache.  
<a href="#_details">More...</a>
<p>
<code>#include &quot;<a class="el" href="lruhash_8h.html">util/storage/lruhash.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="rtt_8h.html">util/rtt.h</a>&quot;</code><br>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structinfra__host__key.html">infra_host_key</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Host information kept for every server.  <a href="structinfra__host__key.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structinfra__host__data.html">infra_host_data</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Host information encompasses host capabilities and retransmission timeouts.  <a href="structinfra__host__data.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structinfra__lame__key.html">infra_lame_key</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Lameness information, per host, per zone.  <a href="structinfra__lame__key.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structinfra__lame__data.html">infra_lame_data</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Lameness information.  <a href="structinfra__lame__data.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structinfra__cache.html">infra_cache</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Infra cache.  <a href="structinfra__cache.html#_details">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f58021b25dc2b07acad8f662e9db7b65"></a><!-- doxytag: member="infra.h::INFRA_HOST_STARTSIZE" ref="f58021b25dc2b07acad8f662e9db7b65" args="" -->
#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="infra_8h.html#f58021b25dc2b07acad8f662e9db7b65">INFRA_HOST_STARTSIZE</a>&nbsp;&nbsp;&nbsp;32</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">infra host cache default hash lookup size <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="facdb6783898c92c0dfcacff3584e8de"></a><!-- doxytag: member="infra.h::INFRA_LAME_STARTSIZE" ref="facdb6783898c92c0dfcacff3584e8de" args="" -->
#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="infra_8h.html#facdb6783898c92c0dfcacff3584e8de">INFRA_LAME_STARTSIZE</a>&nbsp;&nbsp;&nbsp;2</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">infra lame cache default hash lookup size <br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structinfra__cache.html">infra_cache</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="infra_8h.html#f4b667cf4df4c506c148cb124f418dea">infra_create</a> (struct <a class="el" href="structconfig__file.html">config_file</a> *cfg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create infra cache.  <a href="#f4b667cf4df4c506c148cb124f418dea"></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="infra_8h.html#1bae79f600555cc00d318419b2ff0074">infra_delete</a> (struct <a class="el" href="structinfra__cache.html">infra_cache</a> *infra)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Delete infra cache.  <a href="#1bae79f600555cc00d318419b2ff0074"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structinfra__cache.html">infra_cache</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="infra_8h.html#61b1a8619a7007beb2300491adb47e1c">infra_adjust</a> (struct <a class="el" href="structinfra__cache.html">infra_cache</a> *infra, struct <a class="el" href="structconfig__file.html">config_file</a> *cfg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Adjust infra cache to use updated configuration settings.  <a href="#61b1a8619a7007beb2300491adb47e1c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structinfra__host__data.html">infra_host_data</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="infra_8h.html#bcf3dc86897bf02351360aaed324bd36">infra_lookup_host</a> (struct <a class="el" href="structinfra__cache.html">infra_cache</a> *infra, struct sockaddr_storage *addr, socklen_t addrlen, int wr, uint32_t timenow, struct <a class="el" href="structinfra__host__key.html">infra_host_key</a> **key)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Lookup host data.  <a href="#bcf3dc86897bf02351360aaed324bd36"></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="infra_8h.html#8b4c152ea5be2b0b371970ac91c3f1c2">infra_host</a> (struct <a class="el" href="structinfra__cache.html">infra_cache</a> *infra, struct sockaddr_storage *addr, socklen_t addrlen, uint32_t timenow, int *edns_vs, uint8_t *edns_lame_known, int *to)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Find host information to send a packet.  <a href="#8b4c152ea5be2b0b371970ac91c3f1c2"></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="infra_8h.html#4375f0baccee56991122236f33d1d852">infra_lookup_lame</a> (struct <a class="el" href="structinfra__host__data.html">infra_host_data</a> *host, uint8_t *name, size_t namelen, uint32_t timenow, int *dlame, int *rlame, int *alame, int *olame)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check for lameness of this server for a particular zone.  <a href="#4375f0baccee56991122236f33d1d852"></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="infra_8h.html#40acaa4eef0cf2901553b296e4e2bb52">infra_set_lame</a> (struct <a class="el" href="structinfra__cache.html">infra_cache</a> *infra, struct sockaddr_storage *addr, socklen_t addrlen, uint8_t *name, size_t namelen, uint32_t timenow, int dnsseclame, int reclame, uint16_t qtype)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set a host to be lame for the given zone.  <a href="#40acaa4eef0cf2901553b296e4e2bb52"></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="infra_8h.html#da7114aef30883a20c18fd6a2a07f680">infra_rtt_update</a> (struct <a class="el" href="structinfra__cache.html">infra_cache</a> *infra, struct sockaddr_storage *addr, socklen_t addrlen, int roundtrip, int orig_rtt, uint32_t timenow)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Update rtt information for the host.  <a href="#da7114aef30883a20c18fd6a2a07f680"></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="infra_8h.html#4da2e55e8f7272d26bf127ad19a179bf">infra_update_tcp_works</a> (struct <a class="el" href="structinfra__cache.html">infra_cache</a> *infra, struct sockaddr_storage *addr, socklen_t addrlen)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Update information for the host, store that a TCP transaction works.  <a href="#4da2e55e8f7272d26bf127ad19a179bf"></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="infra_8h.html#3ac15a7802ec81dc0001ed8bca2a3594">infra_edns_update</a> (struct <a class="el" href="structinfra__cache.html">infra_cache</a> *infra, struct sockaddr_storage *addr, socklen_t addrlen, int edns_version, uint32_t timenow)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Update edns information for the host.  <a href="#3ac15a7802ec81dc0001ed8bca2a3594"></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="infra_8h.html#e7b5abddf3247103af1ab35a40cffca1">infra_get_lame_rtt</a> (struct <a class="el" href="structinfra__cache.html">infra_cache</a> *infra, struct sockaddr_storage *addr, socklen_t addrlen, uint8_t *name, size_t namelen, uint16_t qtype, int *lame, int *dnsseclame, int *reclame, int *rtt, uint32_t timenow)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get Lameness information and average RTT if host is in the cache.  <a href="#e7b5abddf3247103af1ab35a40cffca1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="infra_8h.html#171a2b45852e451cdafd89847441ee65">infra_get_mem</a> (struct <a class="el" href="structinfra__cache.html">infra_cache</a> *infra)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get memory used by the infra cache.  <a href="#171a2b45852e451cdafd89847441ee65"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b5a9d8da5c23b0a74720b4853859f596"></a><!-- doxytag: member="infra.h::infra_host_sizefunc" ref="b5a9d8da5c23b0a74720b4853859f596" args="(void *k, void *d)" -->
size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="infra_8h.html#b5a9d8da5c23b0a74720b4853859f596">infra_host_sizefunc</a> (void *k, void *d)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">calculate size for the hashtable, does not count size of lameness, so the hashtable is a fixed number of items <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f689b0827351d56833d24bd4f7418492"></a><!-- doxytag: member="infra.h::infra_host_compfunc" ref="f689b0827351d56833d24bd4f7418492" args="(void *key1, void *key2)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="infra_8h.html#f689b0827351d56833d24bd4f7418492">infra_host_compfunc</a> (void *key1, void *key2)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">compare two addresses, returns -1, 0, or +1 <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fa55408e28b993bc54c5a0af26035180"></a><!-- doxytag: member="infra.h::infra_host_delkeyfunc" ref="fa55408e28b993bc54c5a0af26035180" args="(void *k, void *arg)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="infra_8h.html#fa55408e28b993bc54c5a0af26035180">infra_host_delkeyfunc</a> (void *k, void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">delete key, and destroy the lock <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a69e5bb2e98cb65c45a69e3374c7eec0"></a><!-- doxytag: member="infra.h::infra_host_deldatafunc" ref="a69e5bb2e98cb65c45a69e3374c7eec0" args="(void *d, void *arg)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="infra_8h.html#a69e5bb2e98cb65c45a69e3374c7eec0">infra_host_deldatafunc</a> (void *d, void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">delete data and destroy the lameness hashtable <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c95df8988d9d24a7047f4f53a02f9ef0"></a><!-- doxytag: member="infra.h::infra_lame_sizefunc" ref="c95df8988d9d24a7047f4f53a02f9ef0" args="(void *k, void *d)" -->
size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="infra_8h.html#c95df8988d9d24a7047f4f53a02f9ef0">infra_lame_sizefunc</a> (void *k, void *d)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">calculate size, which is fixed, zonename does not count so that a fixed number of items is stored <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9543125a4aea906d3e95430473fabf1e"></a><!-- doxytag: member="infra.h::infra_lame_compfunc" ref="9543125a4aea906d3e95430473fabf1e" args="(void *key1, void *key2)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="infra_8h.html#9543125a4aea906d3e95430473fabf1e">infra_lame_compfunc</a> (void *key1, void *key2)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">compare zone names, returns -1, 0, +1 <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="70d1e28db2242bafac44a5f8739a6632"></a><!-- doxytag: member="infra.h::infra_lame_delkeyfunc" ref="70d1e28db2242bafac44a5f8739a6632" args="(void *k, void *arg)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="infra_8h.html#70d1e28db2242bafac44a5f8739a6632">infra_lame_delkeyfunc</a> (void *k, void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">free key, lock and zonename <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dcf276dca9ddc4f9bd17afe6c056a739"></a><!-- doxytag: member="infra.h::infra_lame_deldatafunc" ref="dcf276dca9ddc4f9bd17afe6c056a739" args="(void *d, void *arg)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="infra_8h.html#dcf276dca9ddc4f9bd17afe6c056a739">infra_lame_deldatafunc</a> (void *d, void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">free the lameness data <br></td></tr>
</table>
<hr><h2>Detailed Description</h2>
This file contains the infrastructure cache. 
<p>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="f4b667cf4df4c506c148cb124f418dea"></a><!-- doxytag: member="infra.h::infra_create" ref="f4b667cf4df4c506c148cb124f418dea" args="(struct config_file *cfg)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structinfra__cache.html">infra_cache</a>* infra_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>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Create infra 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 parameters or NULL for defaults. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: new infra cache, or NULL. </dd></dl>

<p>References <a class="el" href="config__file_8h_source.html#l00101">config_file::host_ttl</a>, <a class="el" href="infra_8h_source.html#l00116">infra_cache::host_ttl</a>, <a class="el" href="infra_8h_source.html#l00114">infra_cache::hosts</a>, <a class="el" href="config__file_8h_source.html#l00109">config_file::infra_cache_lame_size</a>, <a class="el" href="config__file_8h_source.html#l00107">config_file::infra_cache_numhosts</a>, <a class="el" href="config__file_8h_source.html#l00105">config_file::infra_cache_slabs</a>, <a class="el" href="infra_8c_source.html#l00059">infra_host_compfunc()</a>, <a class="el" href="infra_8c_source.html#l00077">infra_host_deldatafunc()</a>, <a class="el" href="infra_8c_source.html#l00067">infra_host_delkeyfunc()</a>, <a class="el" href="infra_8c_source.html#l00051">infra_host_sizefunc()</a>, <a class="el" href="infra_8h_source.html#l00124">INFRA_HOST_STARTSIZE</a>, <a class="el" href="config__file_8h_source.html#l00103">config_file::lame_ttl</a>, <a class="el" href="infra_8h_source.html#l00118">infra_cache::lame_ttl</a>, <a class="el" href="infra_8h_source.html#l00120">infra_cache::max_lame_size</a>, and <a class="el" href="slabhash_8c_source.html#l00048">slabhash_create()</a>.</p>

<p>Referenced by <a class="el" href="infra_8c_source.html#l00116">infra_adjust()</a>, and <a class="el" href="unitmain_8c_source.html#l00333">infra_test()</a>.</p>

</div>
</div><p>
<a class="anchor" name="1bae79f600555cc00d318419b2ff0074"></a><!-- doxytag: member="infra.h::infra_delete" ref="1bae79f600555cc00d318419b2ff0074" args="(struct infra_cache *infra)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void infra_delete           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structinfra__cache.html">infra_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>infra</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Delete infra 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>infra,:</em>&nbsp;</td><td>infrastructure cache to delete. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="infra_8h_source.html#l00114">infra_cache::hosts</a>, and <a class="el" href="slabhash_8c_source.html#l00087">slabhash_delete()</a>.</p>

<p>Referenced by <a class="el" href="daemon_8c_source.html#l00475">daemon_delete()</a>, <a class="el" href="infra_8c_source.html#l00116">infra_adjust()</a>, <a class="el" href="unitmain_8c_source.html#l00333">infra_test()</a>, and <a class="el" href="libunbound_8c_source.html#l00153">ub_ctx_delete()</a>.</p>

</div>
</div><p>
<a class="anchor" name="61b1a8619a7007beb2300491adb47e1c"></a><!-- doxytag: member="infra.h::infra_adjust" ref="61b1a8619a7007beb2300491adb47e1c" args="(struct infra_cache *infra, struct config_file *cfg)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structinfra__cache.html">infra_cache</a>* infra_adjust           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structinfra__cache.html">infra_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>infra</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><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 infra cache to use updated configuration settings. 
<p>
This may clean the cache. Operates a bit like realloc. 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>infra,:</em>&nbsp;</td><td>existing cache. If NULL a new infra cache is returned. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>cfg,:</em>&nbsp;</td><td>config options. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>the new infra cache pointer or NULL on error. </dd></dl>

<p>References <a class="el" href="config__file_8h_source.html#l00101">config_file::host_ttl</a>, <a class="el" href="infra_8h_source.html#l00116">infra_cache::host_ttl</a>, <a class="el" href="infra_8h_source.html#l00114">infra_cache::hosts</a>, <a class="el" href="config__file_8h_source.html#l00109">config_file::infra_cache_lame_size</a>, <a class="el" href="config__file_8h_source.html#l00107">config_file::infra_cache_numhosts</a>, <a class="el" href="config__file_8h_source.html#l00105">config_file::infra_cache_slabs</a>, <a class="el" href="infra_8c_source.html#l00085">infra_create()</a>, <a class="el" href="infra_8c_source.html#l00107">infra_delete()</a>, <a class="el" href="config__file_8h_source.html#l00103">config_file::lame_ttl</a>, <a class="el" href="infra_8h_source.html#l00118">infra_cache::lame_ttl</a>, <a class="el" href="infra_8h_source.html#l00120">infra_cache::max_lame_size</a>, <a class="el" href="slabhash_8h_source.html#l00059">slabhash::size</a>, and <a class="el" href="slabhash_8c_source.html#l00145">slabhash_get_size()</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="bcf3dc86897bf02351360aaed324bd36"></a><!-- doxytag: member="infra.h::infra_lookup_host" ref="bcf3dc86897bf02351360aaed324bd36" args="(struct infra_cache *infra, struct sockaddr_storage *addr, socklen_t addrlen, int wr, uint32_t timenow, struct infra_host_key **key)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structinfra__host__data.html">infra_host_data</a>* infra_lookup_host           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structinfra__cache.html">infra_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>infra</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct sockaddr_storage *&nbsp;</td>
          <td class="paramname"> <em>addr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">socklen_t&nbsp;</td>
          <td class="paramname"> <em>addrlen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>wr</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">struct <a class="el" href="structinfra__host__key.html">infra_host_key</a> **&nbsp;</td>
          <td class="paramname"> <em>key</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 host data. 
<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>infra,:</em>&nbsp;</td><td>infrastructure cache. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addr,:</em>&nbsp;</td><td>host address. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addrlen,:</em>&nbsp;</td><td>length of addr. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>wr,:</em>&nbsp;</td><td>set to true to get a writelock on the <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timenow,:</em>&nbsp;</td><td>what time it is now. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>key,:</em>&nbsp;</td><td>the key for the host, returned so caller can unlock when done. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: host data or NULL if not found or expired. </dd></dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00222">lruhash_entry::data</a>, <a class="el" href="infra_8c_source.html#l00156">infra_lookup_host_nottl()</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>, and <a class="el" href="infra_8h_source.html#l00066">infra_host_data::ttl</a>.</p>

<p>Referenced by <a class="el" href="unitmain_8c_source.html#l00333">infra_test()</a>.</p>

</div>
</div><p>
<a class="anchor" name="8b4c152ea5be2b0b371970ac91c3f1c2"></a><!-- doxytag: member="infra.h::infra_host" ref="8b4c152ea5be2b0b371970ac91c3f1c2" args="(struct infra_cache *infra, struct sockaddr_storage *addr, socklen_t addrlen, uint32_t timenow, int *edns_vs, uint8_t *edns_lame_known, int *to)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int infra_host           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structinfra__cache.html">infra_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>infra</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct sockaddr_storage *&nbsp;</td>
          <td class="paramname"> <em>addr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">socklen_t&nbsp;</td>
          <td class="paramname"> <em>addrlen</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>edns_vs</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>edns_lame_known</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>to</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Find host information to send a packet. 
<p>
Creates new <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> if not found. Lameness is empty. EDNS is 0 (try with first), and rtt is returned for the first message to it. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>infra,:</em>&nbsp;</td><td>infrastructure cache. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addr,:</em>&nbsp;</td><td>host address. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addrlen,:</em>&nbsp;</td><td>length of addr. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timenow,:</em>&nbsp;</td><td>what time it is now. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>edns_vs,:</em>&nbsp;</td><td>edns version it supports, is returned. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>edns_lame_known,:</em>&nbsp;</td><td>if EDNS lame (EDNS is dropped in transit) has already been probed, is returned. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>to,:</em>&nbsp;</td><td>timeout to use, is returned. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 on error. </dd></dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00222">lruhash_entry::data</a>, <a class="el" href="infra_8h_source.html#l00076">infra_host_data::edns_lame_known</a>, <a class="el" href="infra_8h_source.html#l00072">infra_host_data::edns_version</a>, <a class="el" href="lruhash_8h_source.html#l00218">lruhash_entry::hash</a>, <a class="el" href="infra_8h_source.html#l00116">infra_cache::host_ttl</a>, <a class="el" href="infra_8h_source.html#l00114">infra_cache::hosts</a>, <a class="el" href="infra_8c_source.html#l00156">infra_lookup_host_nottl()</a>, <a class="el" href="lruhash_8h_source.html#l00210">lruhash_entry::lock</a>, <a class="el" href="infra_8c_source.html#l00198">new_host_entry()</a>, <a class="el" href="infra_8h_source.html#l00068">infra_host_data::rtt</a>, <a class="el" href="rtt_8c_source.html#l00060">rtt_init()</a>, <a class="el" href="rtt_8c_source.html#l00070">rtt_timeout()</a>, <a class="el" href="slabhash_8c_source.html#l00116">slabhash_insert()</a>, and <a class="el" href="infra_8h_source.html#l00066">infra_host_data::ttl</a>.</p>

<p>Referenced by <a class="el" href="unitmain_8c_source.html#l00333">infra_test()</a>, and <a class="el" href="outside__network_8c_source.html#l01227">serviced_udp_send()</a>.</p>

</div>
</div><p>
<a class="anchor" name="4375f0baccee56991122236f33d1d852"></a><!-- doxytag: member="infra.h::infra_lookup_lame" ref="4375f0baccee56991122236f33d1d852" args="(struct infra_host_data *host, uint8_t *name, size_t namelen, uint32_t timenow, int *dlame, int *rlame, int *alame, int *olame)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int infra_lookup_lame           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structinfra__host__data.html">infra_host_data</a> *&nbsp;</td>
          <td class="paramname"> <em>host</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>namelen</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>dlame</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>rlame</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>alame</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>olame</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Check for lameness of this server for a particular zone. 
<p>
You must have a lock on the host structure. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>host,:</em>&nbsp;</td><td>infrastructure cache data for the host. Caller holds lock. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name,:</em>&nbsp;</td><td>domain name of zone apex. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>namelen,:</em>&nbsp;</td><td>length of domain name. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timenow,:</em>&nbsp;</td><td>what time it is now. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dlame,:</em>&nbsp;</td><td>if the function returns true, is set true if dnssec lame. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rlame,:</em>&nbsp;</td><td>if the function returns true, is set true if recursion lame. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>alame,:</em>&nbsp;</td><td>if the function returns true, is set true if qtype A lame. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>olame,:</em>&nbsp;</td><td>if the function returns true, is set true if qtype other lame. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 if not lame or unknown or timed out, 1 if lame </dd></dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00222">lruhash_entry::data</a>, <a class="el" href="infra_8h_source.html#l00088">infra_lame_key::entry</a>, <a class="el" href="lruhash_8h_source.html#l00218">lruhash_entry::hash</a>, <a class="el" href="infra_8c_source.html#l00271">hash_lameness()</a>, <a class="el" href="infra_8h_source.html#l00100">infra_lame_data::isdnsseclame</a>, <a class="el" href="lruhash_8h_source.html#l00220">lruhash_entry::key</a>, <a class="el" href="infra_8h_source.html#l00106">infra_lame_data::lame_other</a>, <a class="el" href="infra_8h_source.html#l00104">infra_lame_data::lame_type_A</a>, <a class="el" href="infra_8h_source.html#l00070">infra_host_data::lameness</a>, <a class="el" href="lruhash_8h_source.html#l00210">lruhash_entry::lock</a>, <a class="el" href="lruhash_8c_source.html#l00355">lruhash_lookup()</a>, <a class="el" href="infra_8h_source.html#l00086">infra_lame_key::namelen</a>, <a class="el" href="infra_8h_source.html#l00102">infra_lame_data::rec_lame</a>, <a class="el" href="infra_8h_source.html#l00097">infra_lame_data::ttl</a>, and <a class="el" href="infra_8h_source.html#l00084">infra_lame_key::zonename</a>.</p>

<p>Referenced by <a class="el" href="infra_8c_source.html#l00513">infra_get_lame_rtt()</a>, <a class="el" href="infra_8c_source.html#l00348">infra_set_lame()</a>, and <a class="el" href="unitmain_8c_source.html#l00333">infra_test()</a>.</p>

</div>
</div><p>
<a class="anchor" name="40acaa4eef0cf2901553b296e4e2bb52"></a><!-- doxytag: member="infra.h::infra_set_lame" ref="40acaa4eef0cf2901553b296e4e2bb52" args="(struct infra_cache *infra, struct sockaddr_storage *addr, socklen_t addrlen, uint8_t *name, size_t namelen, uint32_t timenow, int dnsseclame, int reclame, uint16_t qtype)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int infra_set_lame           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structinfra__cache.html">infra_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>infra</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct sockaddr_storage *&nbsp;</td>
          <td class="paramname"> <em>addr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">socklen_t&nbsp;</td>
          <td class="paramname"> <em>addrlen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>namelen</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>dnsseclame</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>reclame</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qtype</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Set a host to be lame for the given zone. 
<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>infra,:</em>&nbsp;</td><td>infrastructure cache. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addr,:</em>&nbsp;</td><td>host address. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addrlen,:</em>&nbsp;</td><td>length of addr. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name,:</em>&nbsp;</td><td>domain name of zone apex. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>namelen,:</em>&nbsp;</td><td>length of domain name. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timenow,:</em>&nbsp;</td><td>what time it is now. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dnsseclame,:</em>&nbsp;</td><td>if true the host is set dnssec lame. if false, the host is marked lame (not serving the zone). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>reclame,:</em>&nbsp;</td><td>if true host is a recursor not AA server. if false, dnsseclame or marked lame. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qtype,:</em>&nbsp;</td><td>the query type for which it is lame. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 on error. </dd></dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00222">lruhash_entry::data</a>, <a class="el" href="infra_8h_source.html#l00088">infra_lame_key::entry</a>, <a class="el" href="lruhash_8h_source.html#l00218">lruhash_entry::hash</a>, <a class="el" href="infra_8c_source.html#l00271">hash_lameness()</a>, <a class="el" href="infra_8h_source.html#l00114">infra_cache::hosts</a>, <a class="el" href="infra_8c_source.html#l00316">infra_lame_compfunc()</a>, <a class="el" href="infra_8c_source.html#l00340">infra_lame_deldatafunc()</a>, <a class="el" href="infra_8c_source.html#l00329">infra_lame_delkeyfunc()</a>, <a class="el" href="infra_8c_source.html#l00308">infra_lame_sizefunc()</a>, <a class="el" href="infra_8h_source.html#l00126">INFRA_LAME_STARTSIZE</a>, <a class="el" href="infra_8c_source.html#l00156">infra_lookup_host_nottl()</a>, <a class="el" href="infra_8c_source.html#l00277">infra_lookup_lame()</a>, <a class="el" href="infra_8h_source.html#l00100">infra_lame_data::isdnsseclame</a>, <a class="el" href="lruhash_8h_source.html#l00220">lruhash_entry::key</a>, <a class="el" href="infra_8h_source.html#l00106">infra_lame_data::lame_other</a>, <a class="el" href="infra_8h_source.html#l00118">infra_cache::lame_ttl</a>, <a class="el" href="infra_8h_source.html#l00104">infra_lame_data::lame_type_A</a>, <a class="el" href="infra_8h_source.html#l00070">infra_host_data::lameness</a>, <a class="el" href="lruhash_8h_source.html#l00210">lruhash_entry::lock</a>, <a class="el" href="log_8c_source.html#l00241">log_err()</a>, <a class="el" href="lruhash_8c_source.html#l00062">lruhash_create()</a>, <a class="el" href="lruhash_8c_source.html#l00299">lruhash_insert()</a>, <a class="el" href="infra_8h_source.html#l00120">infra_cache::max_lame_size</a>, <a class="el" href="net__help_8c_source.html#l00138">memdup()</a>, <a class="el" href="infra_8h_source.html#l00086">infra_lame_key::namelen</a>, <a class="el" href="infra_8c_source.html#l00198">new_host_entry()</a>, <a class="el" href="infra_8h_source.html#l00102">infra_lame_data::rec_lame</a>, <a class="el" href="slabhash_8c_source.html#l00116">slabhash_insert()</a>, <a class="el" href="infra_8h_source.html#l00097">infra_lame_data::ttl</a>, and <a class="el" href="infra_8h_source.html#l00084">infra_lame_key::zonename</a>.</p>

<p>Referenced by <a class="el" href="unitmain_8c_source.html#l00333">infra_test()</a>, and <a class="el" href="iterator_8c_source.html#l01454">processQueryResponse()</a>.</p>

</div>
</div><p>
<a class="anchor" name="da7114aef30883a20c18fd6a2a07f680"></a><!-- doxytag: member="infra.h::infra_rtt_update" ref="da7114aef30883a20c18fd6a2a07f680" args="(struct infra_cache *infra, struct sockaddr_storage *addr, socklen_t addrlen, int roundtrip, int orig_rtt, uint32_t timenow)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int infra_rtt_update           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structinfra__cache.html">infra_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>infra</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct sockaddr_storage *&nbsp;</td>
          <td class="paramname"> <em>addr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">socklen_t&nbsp;</td>
          <td class="paramname"> <em>addrlen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>roundtrip</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>orig_rtt</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 rtt information for the host. 
<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>infra,:</em>&nbsp;</td><td>infrastructure cache. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addr,:</em>&nbsp;</td><td>host address. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addrlen,:</em>&nbsp;</td><td>length of addr. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>roundtrip,:</em>&nbsp;</td><td>estimate of roundtrip time in milliseconds or -1 for timeout. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>orig_rtt,:</em>&nbsp;</td><td>original rtt for the query that timed out (roundtrip==-1). ignored if roundtrip != -1. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timenow,:</em>&nbsp;</td><td>what time it is now. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 on error. new rto otherwise. </dd></dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00222">lruhash_entry::data</a>, <a class="el" href="lruhash_8h_source.html#l00218">lruhash_entry::hash</a>, <a class="el" href="infra_8h_source.html#l00116">infra_cache::host_ttl</a>, <a class="el" href="infra_8h_source.html#l00114">infra_cache::hosts</a>, <a class="el" href="infra_8c_source.html#l00156">infra_lookup_host_nottl()</a>, <a class="el" href="lruhash_8h_source.html#l00210">lruhash_entry::lock</a>, <a class="el" href="infra_8c_source.html#l00198">new_host_entry()</a>, <a class="el" href="rtt_8h_source.html#l00055">rtt_info::rto</a>, <a class="el" href="infra_8h_source.html#l00068">infra_host_data::rtt</a>, <a class="el" href="rtt_8c_source.html#l00098">rtt_lost()</a>, <a class="el" href="rtt_8c_source.html#l00087">rtt_update()</a>, <a class="el" href="slabhash_8c_source.html#l00116">slabhash_insert()</a>, and <a class="el" href="infra_8h_source.html#l00066">infra_host_data::ttl</a>.</p>

<p>Referenced by <a class="el" href="unitmain_8c_source.html#l00333">infra_test()</a>, and <a class="el" href="outside__network_8c_source.html#l01441">serviced_udp_callback()</a>.</p>

</div>
</div><p>
<a class="anchor" name="4da2e55e8f7272d26bf127ad19a179bf"></a><!-- doxytag: member="infra.h::infra_update_tcp_works" ref="4da2e55e8f7272d26bf127ad19a179bf" args="(struct infra_cache *infra, struct sockaddr_storage *addr, socklen_t addrlen)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void infra_update_tcp_works           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structinfra__cache.html">infra_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>infra</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct sockaddr_storage *&nbsp;</td>
          <td class="paramname"> <em>addr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">socklen_t&nbsp;</td>
          <td class="paramname"> <em>addrlen</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 information for the host, store that a TCP transaction works. 
<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>infra,:</em>&nbsp;</td><td>infrastructure cache. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addr,:</em>&nbsp;</td><td>host address. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addrlen,:</em>&nbsp;</td><td>length of addr. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00222">lruhash_entry::data</a>, <a class="el" href="infra_8c_source.html#l00156">infra_lookup_host_nottl()</a>, <a class="el" href="lruhash_8h_source.html#l00210">lruhash_entry::lock</a>, <a class="el" href="rtt_8h_source.html#l00055">rtt_info::rto</a>, <a class="el" href="infra_8h_source.html#l00068">infra_host_data::rtt</a>, and <a class="el" href="rtt_8h_source.html#l00061">RTT_MAX_TIMEOUT</a>.</p>

<p>Referenced by <a class="el" href="outside__network_8c_source.html#l01389">serviced_tcp_callback()</a>.</p>

</div>
</div><p>
<a class="anchor" name="3ac15a7802ec81dc0001ed8bca2a3594"></a><!-- doxytag: member="infra.h::infra_edns_update" ref="3ac15a7802ec81dc0001ed8bca2a3594" args="(struct infra_cache *infra, struct sockaddr_storage *addr, socklen_t addrlen, int edns_version, uint32_t timenow)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int infra_edns_update           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structinfra__cache.html">infra_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>infra</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct sockaddr_storage *&nbsp;</td>
          <td class="paramname"> <em>addr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">socklen_t&nbsp;</td>
          <td class="paramname"> <em>addrlen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>edns_version</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 edns information for the host. 
<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>infra,:</em>&nbsp;</td><td>infrastructure cache. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addr,:</em>&nbsp;</td><td>host address. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addrlen,:</em>&nbsp;</td><td>length of addr. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>edns_version,:</em>&nbsp;</td><td>the version that it publishes. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timenow,:</em>&nbsp;</td><td>what time it is now. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 on error. </dd></dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00222">lruhash_entry::data</a>, <a class="el" href="infra_8h_source.html#l00076">infra_host_data::edns_lame_known</a>, <a class="el" href="infra_8h_source.html#l00072">infra_host_data::edns_version</a>, <a class="el" href="lruhash_8h_source.html#l00218">lruhash_entry::hash</a>, <a class="el" href="infra_8h_source.html#l00116">infra_cache::host_ttl</a>, <a class="el" href="infra_8h_source.html#l00114">infra_cache::hosts</a>, <a class="el" href="infra_8c_source.html#l00156">infra_lookup_host_nottl()</a>, <a class="el" href="lruhash_8h_source.html#l00210">lruhash_entry::lock</a>, <a class="el" href="infra_8c_source.html#l00198">new_host_entry()</a>, <a class="el" href="slabhash_8c_source.html#l00116">slabhash_insert()</a>, and <a class="el" href="infra_8h_source.html#l00066">infra_host_data::ttl</a>.</p>

<p>Referenced by <a class="el" href="unitmain_8c_source.html#l00333">infra_test()</a>, <a class="el" href="outside__network_8c_source.html#l01389">serviced_tcp_callback()</a>, and <a class="el" href="outside__network_8c_source.html#l01441">serviced_udp_callback()</a>.</p>

</div>
</div><p>
<a class="anchor" name="e7b5abddf3247103af1ab35a40cffca1"></a><!-- doxytag: member="infra.h::infra_get_lame_rtt" ref="e7b5abddf3247103af1ab35a40cffca1" args="(struct infra_cache *infra, struct sockaddr_storage *addr, socklen_t addrlen, uint8_t *name, size_t namelen, uint16_t qtype, int *lame, int *dnsseclame, int *reclame, int *rtt, uint32_t timenow)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int infra_get_lame_rtt           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structinfra__cache.html">infra_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>infra</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct sockaddr_storage *&nbsp;</td>
          <td class="paramname"> <em>addr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">socklen_t&nbsp;</td>
          <td class="paramname"> <em>addrlen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>namelen</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">int *&nbsp;</td>
          <td class="paramname"> <em>lame</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>dnsseclame</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>reclame</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>rtt</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>
Get Lameness information and average RTT if host is in the 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>infra,:</em>&nbsp;</td><td>infrastructure cache. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addr,:</em>&nbsp;</td><td>host address. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addrlen,:</em>&nbsp;</td><td>length of addr. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name,:</em>&nbsp;</td><td>zone name. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>namelen,:</em>&nbsp;</td><td>zone name length. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qtype,:</em>&nbsp;</td><td>the query to be made. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>lame,:</em>&nbsp;</td><td>if function returns true, this returns lameness of the zone. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dnsseclame,:</em>&nbsp;</td><td>if function returns true, this returns if the zone is dnssec-lame. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>reclame,:</em>&nbsp;</td><td>if function returns true, this is if it is recursion lame. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rtt,:</em>&nbsp;</td><td>if function returns true, this returns avg rtt of the server. The rtt value is unclamped and reflects recent timeouts. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timenow,:</em>&nbsp;</td><td>what time it is now. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>if found in cache, or false if not (or TTL bad). </dd></dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00222">lruhash_entry::data</a>, <a class="el" href="infra_8c_source.html#l00156">infra_lookup_host_nottl()</a>, <a class="el" href="infra_8c_source.html#l00277">infra_lookup_lame()</a>, <a class="el" href="lruhash_8h_source.html#l00210">lruhash_entry::lock</a>, <a class="el" href="infra_8h_source.html#l00068">infra_host_data::rtt</a>, <a class="el" href="rtt_8c_source.html#l00076">rtt_unclamped()</a>, and <a class="el" href="infra_8h_source.html#l00066">infra_host_data::ttl</a>.</p>

<p>Referenced by <a class="el" href="iter__utils_8c_source.html#l00169">iter_filter_unsuitable()</a>.</p>

</div>
</div><p>
<a class="anchor" name="171a2b45852e451cdafd89847441ee65"></a><!-- doxytag: member="infra.h::infra_get_mem" ref="171a2b45852e451cdafd89847441ee65" args="(struct infra_cache *infra)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t infra_get_mem           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structinfra__cache.html">infra_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>infra</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Get memory used by the infra 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>infra,:</em>&nbsp;</td><td>infrastructure cache. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>memory in use in bytes. </dd></dl>

<p>References <a class="el" href="lruhash_8h_source.html#l00168">lruhash::array</a>, <a class="el" href="slabhash_8h_source.html#l00065">slabhash::array</a>, <a class="el" href="infra_8c_source.html#l00569">count_host_lame()</a>, <a class="el" href="infra_8h_source.html#l00114">infra_cache::hosts</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_8h_source.html#l00212">lruhash_entry::overflow_next</a>, <a class="el" href="lruhash_8h_source.html#l00164">lruhash::size</a>, <a class="el" href="slabhash_8h_source.html#l00059">slabhash::size</a>, and <a class="el" href="slabhash_8c_source.html#l00156">slabhash_get_mem()</a>.</p>

<p>Referenced by <a class="el" href="worker_8c_source.html#l00131">worker_mem_report()</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>