Sophie

Sophie

distrib > Fedora > 14 > x86_64 > media > updates > by-pkgid > 87b89b73c41f4440bb86afd421c7548f > files > 135

libnl-devel-1.1-14.fc14.x86_64.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libnl: FIB Lookup</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.7.3 -->
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">libnl&#160;<span id="projectnumber">1.1</span></div>
  </td>
 </tr>
 </tbody>
</table>
</div>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="summary">
<a href="#groups">Modules</a>  </div>
  <div class="headertitle">
<h1>FIB Lookup</h1>  </div>
<div class="ingroups"><a class="el" href="group__nlfam.html">Netlink Families</a></div></div>
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="groups"></a>
Modules</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__flreq.html">Request</a></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Allocation/Freeing</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga84dc2337289669fdefde3994fbe113dd"></a><!-- doxytag: member="fib_lookup::flnl_result_alloc" ref="ga84dc2337289669fdefde3994fbe113dd" args="(void)" -->
struct flnl_result *&#160;</td><td class="memItemRight" valign="bottom"><b>flnl_result_alloc</b> (void)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga799fe8cddf4f63fb5b0dd3a0c78b22a7"></a><!-- doxytag: member="fib_lookup::flnl_result_put" ref="ga799fe8cddf4f63fb5b0dd3a0c78b22a7" args="(struct flnl_result *res)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>flnl_result_put</b> (struct flnl_result *res)</td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Cache Management</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct nl_cache *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fib__lookup.html#ga5ab311aae5e0e2497167f34d326bfc8b">flnl_result_alloc_cache</a> (void)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocate lookup result cache.  <a href="#ga5ab311aae5e0e2497167f34d326bfc8b"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Lookup</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct nl_msg *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fib__lookup.html#ga82fd5afaecd398c3a5245daa1423c46e">flnl_lookup_build_request</a> (struct flnl_request *req, int flags)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Builds a netlink request message to do a lookup.  <a href="#ga82fd5afaecd398c3a5245daa1423c46e"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fib__lookup.html#ga3d4a00b94f50e5d6d1cea6c756a43b5a">flnl_lookup</a> (struct nl_handle *handle, struct flnl_request *req, struct nl_cache *cache)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform FIB Lookup.  <a href="#ga3d4a00b94f50e5d6d1cea6c756a43b5a"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Attribute Access</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga30a94b6e9bd4ff5212da2888bcaf1492"></a><!-- doxytag: member="fib_lookup::flnl_result_get_table_id" ref="ga30a94b6e9bd4ff5212da2888bcaf1492" args="(struct flnl_result *res)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>flnl_result_get_table_id</b> (struct flnl_result *res)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga11ac8969736c3fb0aa4c5ee3fbe84f82"></a><!-- doxytag: member="fib_lookup::flnl_result_get_prefixlen" ref="ga11ac8969736c3fb0aa4c5ee3fbe84f82" args="(struct flnl_result *res)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>flnl_result_get_prefixlen</b> (struct flnl_result *res)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab3a8f473e51d19f5146de1343c780257"></a><!-- doxytag: member="fib_lookup::flnl_result_get_nexthop_sel" ref="gab3a8f473e51d19f5146de1343c780257" args="(struct flnl_result *res)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>flnl_result_get_nexthop_sel</b> (struct flnl_result *res)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga927d72015f74dbcd2a713845ca63e448"></a><!-- doxytag: member="fib_lookup::flnl_result_get_type" ref="ga927d72015f74dbcd2a713845ca63e448" args="(struct flnl_result *res)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>flnl_result_get_type</b> (struct flnl_result *res)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga73c6fedf89f721c638c4fd9f34ef2efd"></a><!-- doxytag: member="fib_lookup::flnl_result_get_scope" ref="ga73c6fedf89f721c638c4fd9f34ef2efd" args="(struct flnl_result *res)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>flnl_result_get_scope</b> (struct flnl_result *res)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7883928deb4f8f23b2d92dedd902628b"></a><!-- doxytag: member="fib_lookup::flnl_result_get_error" ref="ga7883928deb4f8f23b2d92dedd902628b" args="(struct flnl_result *res)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>flnl_result_get_error</b> (struct flnl_result *res)</td></tr>
</table>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="ga5ab311aae5e0e2497167f34d326bfc8b"></a><!-- doxytag: member="lookup.c::flnl_result_alloc_cache" ref="ga5ab311aae5e0e2497167f34d326bfc8b" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nl_cache* flnl_result_alloc_cache </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Allocates a new lookup result cache and initializes it properly.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>Free the memory after usage using nl_cache_destroy_and_free(). </dd></dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Newly allocated cache or NULL if an error occured. </dd></dl>

<p>Definition at line <a class="el" href="lookup_8c_source.html#l00183">183</a> of file <a class="el" href="lookup_8c_source.html">lookup.c</a>.</p>

<p>References <a class="el" href="cache_8c_source.html#l00173">nl_cache_alloc()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__cache.html#ga9520ae0f2158db3c081f34c851d92252" title="Allocate an empty cache.">nl_cache_alloc</a>(&amp;fib_lookup_ops);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga82fd5afaecd398c3a5245daa1423c46e"></a><!-- doxytag: member="lookup.c::flnl_lookup_build_request" ref="ga82fd5afaecd398c3a5245daa1423c46e" args="(struct flnl_request *req, int flags)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nl_msg* flnl_lookup_build_request </td>
          <td>(</td>
          <td class="paramtype">struct flnl_request *&#160;</td>
          <td class="paramname"><em>req</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>flags</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">req</td><td>Requested match. </td></tr>
    <tr><td class="paramname">flags</td><td>additional netlink message flags</td></tr>
  </table>
  </dd>
</dl>
<p>Builds a new netlink message requesting a change of link attributes. The netlink message header isn't fully equipped with all relevant fields and must be sent out via <a class="el" href="group__nl.html#ga01a2aad82350f867e704d5c696438b60" title="Send netlink message and check &amp; extend header values as needed.">nl_send_auto_complete()</a> or supplemented as needed. <em>old</em> must point to a link currently configured in the kernel and <em>tmpl</em> must contain the attributes to be changed set via <code>rtnl_link_set_*</code> functions.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>New netlink message </dd></dl>
<dl class="note"><dt><b>Note:</b></dt><dd>Not all attributes can be changed, see <a class="el" href="group__link.html#link_changeable">Changeable Attributes</a> for more details. </dd></dl>

<p>Definition at line <a class="el" href="lookup_8c_source.html#l00212">212</a> of file <a class="el" href="lookup_8c_source.html">lookup.c</a>.</p>

<p>References <a class="el" href="addr_8c_source.html#l00756">nl_addr_get_binary_addr()</a>, <a class="el" href="msg_8c_source.html#l00448">nlmsg_alloc_simple()</a>, <a class="el" href="msg_8c_source.html#l00549">nlmsg_append()</a>, and <a class="el" href="msg_8c_source.html#l00656">nlmsg_free()</a>.</p>

<p>Referenced by <a class="el" href="lookup_8c_source.html#l00263">flnl_lookup()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nl_msg *msg;
        <span class="keyword">struct </span>nl_addr *addr;
        uint64_t fwmark;
        <span class="keywordtype">int</span> tos, scope, table;
        <span class="keyword">struct </span>fib_result_nl fr = {0};

        fwmark = flnl_request_get_fwmark(req);
        tos = flnl_request_get_tos(req);
        scope = flnl_request_get_scope(req);
        table = flnl_request_get_table(req);

        fr.fl_fwmark = fwmark != UINT_LEAST64_MAX ? fwmark : 0;
        fr.fl_tos = tos &gt;= 0 ? tos : 0;
        fr.fl_scope = scope &gt;= 0 ? scope : RT_SCOPE_UNIVERSE;
        fr.tb_id_in = table &gt;= 0 ? table : RT_TABLE_UNSPEC;

        addr = flnl_request_get_addr(req);
        <span class="keywordflow">if</span> (!addr) {
                nl_error(EINVAL, <span class="stringliteral">&quot;Request must specify the address&quot;</span>);
                <span class="keywordflow">return</span> NULL;
        }

        fr.fl_addr = *(uint32_t *) <a class="code" href="group__addr.html#ga7721da4e82e80e8b29960405539ca72d" title="Get binary address of abstract address object.">nl_addr_get_binary_addr</a>(addr);

        msg = <a class="code" href="group__msg.html#ga580d8697d19050c55060bc10ab4eae9f" title="Allocate a new netlink message.">nlmsg_alloc_simple</a>(0, flags);
        <span class="keywordflow">if</span> (!msg)
                <span class="keywordflow">goto</span> errout;

        <span class="keywordflow">if</span> (<a class="code" href="group__msg.html#gacc5e5ade5675d041f86c7c8693f7088d" title="Append data to tail of a netlink message.">nlmsg_append</a>(msg, &amp;fr, <span class="keyword">sizeof</span>(fr), NLMSG_ALIGNTO) &lt; 0)
                <span class="keywordflow">goto</span> errout;

        <span class="keywordflow">return</span> msg;

errout:
        <a class="code" href="group__msg.html#ga138ba9bee70553f9fbe7143deacad48c" title="Free a netlink message.">nlmsg_free</a>(msg);
        <span class="keywordflow">return</span> NULL;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga3d4a00b94f50e5d6d1cea6c756a43b5a"></a><!-- doxytag: member="lookup.c::flnl_lookup" ref="ga3d4a00b94f50e5d6d1cea6c756a43b5a" args="(struct nl_handle *handle, struct flnl_request *req, struct nl_cache *cache)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int flnl_lookup </td>
          <td>(</td>
          <td class="paramtype">struct nl_handle *&#160;</td>
          <td class="paramname"><em>handle</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct flnl_request *&#160;</td>
          <td class="paramname"><em>req</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct nl_cache *&#160;</td>
          <td class="paramname"><em>cache</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">handle</td><td>Netlink handle. </td></tr>
    <tr><td class="paramname">req</td><td>Lookup request object. </td></tr>
    <tr><td class="paramname">cache</td><td>Cache for result.</td></tr>
  </table>
  </dd>
</dl>
<p>Builds a netlink message to request a FIB lookup, waits for the reply and adds the result to the specified cache.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on success or a negative error code. </dd></dl>

<p>Definition at line <a class="el" href="lookup_8c_source.html#l00263">263</a> of file <a class="el" href="lookup_8c_source.html">lookup.c</a>.</p>

<p>References <a class="el" href="lookup_8c_source.html#l00212">flnl_lookup_build_request()</a>, <a class="el" href="cache_8c_source.html#l00487">nl_cache_pickup()</a>, <a class="el" href="nl_8c_source.html#l00373">nl_send_auto_complete()</a>, and <a class="el" href="msg_8c_source.html#l00656">nlmsg_free()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nl_msg *msg;
        <span class="keywordtype">int</span> err;

        msg = <a class="code" href="group__fib__lookup.html#ga82fd5afaecd398c3a5245daa1423c46e" title="Builds a netlink request message to do a lookup.">flnl_lookup_build_request</a>(req, 0);
        <span class="keywordflow">if</span> (!msg)
                <span class="keywordflow">return</span> nl_errno(ENOMEM);

        err = <a class="code" href="group__nl.html#ga01a2aad82350f867e704d5c696438b60" title="Send netlink message and check &amp;amp; extend header values as needed.">nl_send_auto_complete</a>(handle, msg);
        <a class="code" href="group__msg.html#ga138ba9bee70553f9fbe7143deacad48c" title="Free a netlink message.">nlmsg_free</a>(msg);
        <span class="keywordflow">if</span> (err &lt; 0)
                <span class="keywordflow">return</span> err;

        <span class="keywordflow">return</span> <a class="code" href="group__cache.html#gae9ee72b56b5d3e215403105c858b9479" title="Pickup a netlink dump response and put it into a cache.">nl_cache_pickup</a>(handle, cache);
}
</pre></div>
</div>
</div>
</div>
<hr class="footer"/><address class="footer"><small>Generated on Mon Mar 21 2011 for libnl by&#160;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.3 </small></address>
</body>
</html>