Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > 87b89b73c41f4440bb86afd421c7548f > files > 171

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: Universal 32-bit Classifier</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="headertitle">
<h1>Universal 32-bit Classifier</h1>  </div>
<div class="ingroups"><a class="el" href="group__cls__api.html">Classifier Modules</a></div></div>
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="member-group"></a>
Attribute Modifications</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8b6fc152bc2bb9e537762533f59394d8"></a><!-- doxytag: member="u32::rtnl_u32_set_handle" ref="ga8b6fc152bc2bb9e537762533f59394d8" args="(struct rtnl_cls *cls, int htid, int hash, int nodeid)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_u32_set_handle</b> (struct rtnl_cls *cls, int htid, int hash, int nodeid)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6beb6d39a330feb23de38dc768632f84"></a><!-- doxytag: member="u32::rtnl_u32_set_classid" ref="ga6beb6d39a330feb23de38dc768632f84" args="(struct rtnl_cls *cls, uint32_t classid)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_u32_set_classid</b> (struct rtnl_cls *cls, uint32_t classid)</td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Selector Modifications</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9917965962b9b5faf7c8995665a7eca9"></a><!-- doxytag: member="u32::rtnl_u32_set_flags" ref="ga9917965962b9b5faf7c8995665a7eca9" args="(struct rtnl_cls *cls, int flags)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_u32_set_flags</b> (struct rtnl_cls *cls, int flags)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__u32.html#gaace3c52edfb9859a6586541ece0b144e">rtnl_u32_add_key</a> (struct rtnl_cls *cls, uint32_t val, uint32_t mask, int off, int offmask)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Append new 32-bit key to the selector.  <a href="#gaace3c52edfb9859a6586541ece0b144e"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6f510257e3524e20b9abdf7a457d0af4"></a><!-- doxytag: member="u32::rtnl_u32_add_key_uint8" ref="ga6f510257e3524e20b9abdf7a457d0af4" args="(struct rtnl_cls *cls, uint8_t val, uint8_t mask, int off, int offmask)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_u32_add_key_uint8</b> (struct rtnl_cls *cls, uint8_t val, uint8_t mask, int off, int offmask)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__u32.html#gad152db883300427f20003f6ccfd2eb24">rtnl_u32_add_key_uint16</a> (struct rtnl_cls *cls, uint16_t val, uint16_t mask, int off, int offmask)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Append new selector key to match a 16-bit number.  <a href="#gad152db883300427f20003f6ccfd2eb24"></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__u32.html#gac6fb9c818db206d9252bc4c44986c68e">rtnl_u32_add_key_uint32</a> (struct rtnl_cls *cls, uint32_t val, uint32_t mask, int off, int offmask)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Append new selector key to match a 32-bit number.  <a href="#gac6fb9c818db206d9252bc4c44986c68e"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga26594d7b587e0cd50ede5958091dd944"></a><!-- doxytag: member="u32::rtnl_u32_add_key_in_addr" ref="ga26594d7b587e0cd50ede5958091dd944" args="(struct rtnl_cls *cls, struct in_addr *addr, uint8_t bitmask, int off, int offmask)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_u32_add_key_in_addr</b> (struct rtnl_cls *cls, struct in_addr *addr, uint8_t bitmask, int off, int offmask)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2389b719a64918f61fa872abe22cc8f0"></a><!-- doxytag: member="u32::rtnl_u32_add_key_in6_addr" ref="ga2389b719a64918f61fa872abe22cc8f0" args="(struct rtnl_cls *cls, struct in6_addr *addr, uint8_t bitmask, int off, int offmask)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_u32_add_key_in6_addr</b> (struct rtnl_cls *cls, struct in6_addr *addr, uint8_t bitmask, int off, int offmask)</td></tr>
</table>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="gaace3c52edfb9859a6586541ece0b144e"></a><!-- doxytag: member="u32.c::rtnl_u32_add_key" ref="gaace3c52edfb9859a6586541ece0b144e" args="(struct rtnl_cls *cls, uint32_t val, uint32_t mask, int off, int offmask)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_u32_add_key </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_cls *&#160;</td>
          <td class="paramname"><em>cls</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&#160;</td>
          <td class="paramname"><em>val</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&#160;</td>
          <td class="paramname"><em>mask</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>off</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>offmask</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">cls</td><td>classifier to be modifier </td></tr>
    <tr><td class="paramname">val</td><td>value to be matched (network byte-order) </td></tr>
    <tr><td class="paramname">mask</td><td>mask to be applied before matching (network byte-order) </td></tr>
    <tr><td class="paramname">off</td><td>offset, in bytes, to start matching </td></tr>
    <tr><td class="paramname">offmask</td><td>offset mask</td></tr>
  </table>
  </dd>
</dl>
<p>General selectors define the pattern, mask and offset the pattern will be matched to the packet contents. Using the general selectors you can match virtually any single bit in the IP (or upper layer) header. </p>

<p>Definition at line <a class="el" href="u32_8c_source.html#l00470">470</a> of file <a class="el" href="u32_8c_source.html">u32.c</a>.</p>

<p>References <a class="el" href="data_8c_source.html#l00085">nl_data_append()</a>.</p>

<p>Referenced by <a class="el" href="u32_8c_source.html#l00521">rtnl_u32_add_key_uint16()</a>, and <a class="el" href="u32_8c_source.html#l00542">rtnl_u32_add_key_uint32()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>tc_u32_sel *sel;
        <span class="keyword">struct </span>rtnl_u32 *u;
        <span class="keywordtype">int</span> err;

        u = u32_alloc(cls);
        <span class="keywordflow">if</span> (!u)
                <span class="keywordflow">return</span> nl_errno(ENOMEM);

        sel = u32_selector_alloc(u);
        <span class="keywordflow">if</span> (!sel)
                <span class="keywordflow">return</span> nl_errno(ENOMEM);

        err = <a class="code" href="group__data.html#ga81b8ad4a0fd04f8d80bafecc323f2a35" title="Append data to an abstract data object.">nl_data_append</a>(u-&gt;cu_selector, NULL, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> tc_u32_key));
        <span class="keywordflow">if</span> (err &lt; 0)
                <span class="keywordflow">return</span> err;

        <span class="comment">/* the selector might have been moved by realloc */</span>
        sel = u32_selector(u);

        sel-&gt;keys[sel-&gt;nkeys].mask = mask;
        sel-&gt;keys[sel-&gt;nkeys].val = val &amp; mask;
        sel-&gt;keys[sel-&gt;nkeys].off = off;
        sel-&gt;keys[sel-&gt;nkeys].offmask = offmask;
        sel-&gt;nkeys++;
        u-&gt;cu_mask |= U32_ATTR_SELECTOR;

        <span class="keywordflow">return</span> 0;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gad152db883300427f20003f6ccfd2eb24"></a><!-- doxytag: member="u32.c::rtnl_u32_add_key_uint16" ref="gad152db883300427f20003f6ccfd2eb24" args="(struct rtnl_cls *cls, uint16_t val, uint16_t mask, int off, int offmask)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_u32_add_key_uint16 </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_cls *&#160;</td>
          <td class="paramname"><em>cls</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&#160;</td>
          <td class="paramname"><em>val</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&#160;</td>
          <td class="paramname"><em>mask</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>off</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>offmask</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">cls</td><td>classifier to be modified </td></tr>
    <tr><td class="paramname">val</td><td>value to be matched (host byte-order) </td></tr>
    <tr><td class="paramname">mask</td><td>mask to be applied before matching (host byte-order) </td></tr>
    <tr><td class="paramname">off</td><td>offset, in bytes, to start matching </td></tr>
    <tr><td class="paramname">offmask</td><td>offset mask </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="u32_8c_source.html#l00521">521</a> of file <a class="el" href="u32_8c_source.html">u32.c</a>.</p>

<p>References <a class="el" href="u32_8c_source.html#l00470">rtnl_u32_add_key()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">int</span> shift = ((off &amp; 3) == 0 ? 16 : 0);
        <span class="keywordflow">if</span> (off % 2)
                <span class="keywordflow">return</span> nl_error(EINVAL, <span class="stringliteral">&quot;Invalid offset alignment&quot;</span>);

        <span class="keywordflow">return</span> <a class="code" href="group__u32.html#gaace3c52edfb9859a6586541ece0b144e" title="Append new 32-bit key to the selector.">rtnl_u32_add_key</a>(cls, htonl((uint32_t)val &lt;&lt; shift),
                                htonl((uint32_t)mask &lt;&lt; shift),
                                off &amp; ~3, offmask);
}
</pre></div>
</div>
</div>
<a class="anchor" id="gac6fb9c818db206d9252bc4c44986c68e"></a><!-- doxytag: member="u32.c::rtnl_u32_add_key_uint32" ref="gac6fb9c818db206d9252bc4c44986c68e" args="(struct rtnl_cls *cls, uint32_t val, uint32_t mask, int off, int offmask)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_u32_add_key_uint32 </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_cls *&#160;</td>
          <td class="paramname"><em>cls</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&#160;</td>
          <td class="paramname"><em>val</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&#160;</td>
          <td class="paramname"><em>mask</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>off</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>offmask</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">cls</td><td>classifier to be modified </td></tr>
    <tr><td class="paramname">val</td><td>value to be matched (host byte-order) </td></tr>
    <tr><td class="paramname">mask</td><td>mask to be applied before matching (host byte-order) </td></tr>
    <tr><td class="paramname">off</td><td>offset, in bytes, to start matching </td></tr>
    <tr><td class="paramname">offmask</td><td>offset mask </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="u32_8c_source.html#l00542">542</a> of file <a class="el" href="u32_8c_source.html">u32.c</a>.</p>

<p>References <a class="el" href="u32_8c_source.html#l00470">rtnl_u32_add_key()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__u32.html#gaace3c52edfb9859a6586541ece0b144e" title="Append new 32-bit key to the selector.">rtnl_u32_add_key</a>(cls, htonl(val), htonl(mask),
                                off &amp; ~3, offmask);
}
</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>