Sophie

Sophie

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

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: Traffic Control</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> &#124;
<a href="#define-members">Defines</a> &#124;
<a href="#enum-members">Enumerations</a>  </div>
  <div class="headertitle">
<h1>Traffic Control</h1>  </div>
<div class="ingroups"><a class="el" href="group__rtnl.html">Routing Netlink</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__class.html">Queueing Classes</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cls.html">Classifiers</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__qdisc.html">Queueing Disciplines</a></td></tr>
<tr><td colspan="2"><h2><a name="define-members"></a>
Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9a0796847debb07d96fe745d9088a6b5"></a><!-- doxytag: member="tc::RTNL_TC_RTABLE_SIZE" ref="ga9a0796847debb07d96fe745d9088a6b5" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tc.html#ga9a0796847debb07d96fe745d9088a6b5">RTNL_TC_RTABLE_SIZE</a>&#160;&#160;&#160;256</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of entries in a transmission time lookup table. <br/></td></tr>
<tr><td colspan="2"><h2><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tc.html#ga7f00b06ddcf7c64d3f159214d0d976c0">rtnl_tc_stats_id</a> { <br/>
&#160;&#160;<a class="el" href="group__tc.html#gga7f00b06ddcf7c64d3f159214d0d976c0a45892528a489491962b1115d2a797ea6">RTNL_TC_PACKETS</a>, 
<a class="el" href="group__tc.html#gga7f00b06ddcf7c64d3f159214d0d976c0a48a501c10b68cfcad6a1d5578050591b">RTNL_TC_BYTES</a>, 
<a class="el" href="group__tc.html#gga7f00b06ddcf7c64d3f159214d0d976c0af5161062248e8d8b713b920df98fc63f">RTNL_TC_RATE_BPS</a>, 
<a class="el" href="group__tc.html#gga7f00b06ddcf7c64d3f159214d0d976c0ad592a1229cd73ced877fc88715bc5ba9">RTNL_TC_RATE_PPS</a>, 
<br/>
&#160;&#160;<a class="el" href="group__tc.html#gga7f00b06ddcf7c64d3f159214d0d976c0aa22bbf425d78526690cb0b4aa824e9d5">RTNL_TC_QLEN</a>, 
<a class="el" href="group__tc.html#gga7f00b06ddcf7c64d3f159214d0d976c0ae44313687d6e8084549c9834a4a9e8a1">RTNL_TC_BACKLOG</a>, 
<a class="el" href="group__tc.html#gga7f00b06ddcf7c64d3f159214d0d976c0acc8892488b10b39081a3186ab8b01d99">RTNL_TC_DROPS</a>, 
<a class="el" href="group__tc.html#gga7f00b06ddcf7c64d3f159214d0d976c0adc557ea50891d76d451349421457f7ad">RTNL_TC_REQUEUES</a>, 
<br/>
&#160;&#160;<a class="el" href="group__tc.html#gga7f00b06ddcf7c64d3f159214d0d976c0ac3f814dae6f46241986f236ad867bb17">RTNL_TC_OVERLIMITS</a>, 
<b>__RTNL_TC_STATS_MAX</b>
<br/>
 }</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight"><p>TC statistics identifiers. </p>
 <a href="group__tc.html#ga7f00b06ddcf7c64d3f159214d0d976c0">More...</a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Utilities</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tc.html#gaf3dc48257284437d340d8493b33b9b98">rtnl_tc_calc_txtime</a> (int bufsize, int rate)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate time required to transmit buffer at a specific rate.  <a href="#gaf3dc48257284437d340d8493b33b9b98"></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__tc.html#ga460b3c9b69f0bffd46347b1e2d4497e5">rtnl_tc_calc_bufsize</a> (int txtime, int rate)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate buffer size able to transmit in a specific time and rate.  <a href="#ga460b3c9b69f0bffd46347b1e2d4497e5"></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__tc.html#ga149f2e05e2ab75842c99166cae7b3630">rtnl_tc_calc_cell_log</a> (int cell_size)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate the binary logarithm for a specific cell size.  <a href="#ga149f2e05e2ab75842c99166cae7b3630"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Rate Tables</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tc.html#gaf0985ec685f9def7fcaba8cb831c4f2c">rtnl_tc_build_rate_table</a> (uint32_t *dst, uint8_t mpu, uint8_t overhead, int cell, int rate)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute a transmission time lookup table.  <a href="#gaf0985ec685f9def7fcaba8cb831c4f2c"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Traffic Control Handle Translations</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tc.html#ga27fad2a239d4d8d932da0ce1bdbf1f9f">rtnl_tc_handle2str</a> (uint32_t handle, char *buf, size_t len)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert a traffic control handle to a character string (Reentrant).  <a href="#ga27fad2a239d4d8d932da0ce1bdbf1f9f"></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__tc.html#gab2197ef937705965b0c6f0c32e5409e6">rtnl_tc_str2handle</a> (const char *name, uint32_t *res)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert a charactering strint to a traffic control handle.  <a href="#gab2197ef937705965b0c6f0c32e5409e6"></a><br/></td></tr>
</table>
<hr/><h2>Enumeration Type Documentation</h2>
<a class="anchor" id="ga7f00b06ddcf7c64d3f159214d0d976c0"></a><!-- doxytag: member="tc.h::rtnl_tc_stats_id" ref="ga7f00b06ddcf7c64d3f159214d0d976c0" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__tc.html#ga7f00b06ddcf7c64d3f159214d0d976c0">rtnl_tc_stats_id</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="gga7f00b06ddcf7c64d3f159214d0d976c0a45892528a489491962b1115d2a797ea6"></a><!-- doxytag: member="RTNL_TC_PACKETS" ref="gga7f00b06ddcf7c64d3f159214d0d976c0a45892528a489491962b1115d2a797ea6" args="" -->RTNL_TC_PACKETS</em>&nbsp;</td><td>
<p>Packets seen. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga7f00b06ddcf7c64d3f159214d0d976c0a48a501c10b68cfcad6a1d5578050591b"></a><!-- doxytag: member="RTNL_TC_BYTES" ref="gga7f00b06ddcf7c64d3f159214d0d976c0a48a501c10b68cfcad6a1d5578050591b" args="" -->RTNL_TC_BYTES</em>&nbsp;</td><td>
<p>Bytes seen. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga7f00b06ddcf7c64d3f159214d0d976c0af5161062248e8d8b713b920df98fc63f"></a><!-- doxytag: member="RTNL_TC_RATE_BPS" ref="gga7f00b06ddcf7c64d3f159214d0d976c0af5161062248e8d8b713b920df98fc63f" args="" -->RTNL_TC_RATE_BPS</em>&nbsp;</td><td>
<p>Current bits/s (rate estimator) </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga7f00b06ddcf7c64d3f159214d0d976c0ad592a1229cd73ced877fc88715bc5ba9"></a><!-- doxytag: member="RTNL_TC_RATE_PPS" ref="gga7f00b06ddcf7c64d3f159214d0d976c0ad592a1229cd73ced877fc88715bc5ba9" args="" -->RTNL_TC_RATE_PPS</em>&nbsp;</td><td>
<p>Current packet/s (rate estimator) </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga7f00b06ddcf7c64d3f159214d0d976c0aa22bbf425d78526690cb0b4aa824e9d5"></a><!-- doxytag: member="RTNL_TC_QLEN" ref="gga7f00b06ddcf7c64d3f159214d0d976c0aa22bbf425d78526690cb0b4aa824e9d5" args="" -->RTNL_TC_QLEN</em>&nbsp;</td><td>
<p>Queue length. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga7f00b06ddcf7c64d3f159214d0d976c0ae44313687d6e8084549c9834a4a9e8a1"></a><!-- doxytag: member="RTNL_TC_BACKLOG" ref="gga7f00b06ddcf7c64d3f159214d0d976c0ae44313687d6e8084549c9834a4a9e8a1" args="" -->RTNL_TC_BACKLOG</em>&nbsp;</td><td>
<p>Backlog length. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga7f00b06ddcf7c64d3f159214d0d976c0acc8892488b10b39081a3186ab8b01d99"></a><!-- doxytag: member="RTNL_TC_DROPS" ref="gga7f00b06ddcf7c64d3f159214d0d976c0acc8892488b10b39081a3186ab8b01d99" args="" -->RTNL_TC_DROPS</em>&nbsp;</td><td>
<p>Packets dropped. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga7f00b06ddcf7c64d3f159214d0d976c0adc557ea50891d76d451349421457f7ad"></a><!-- doxytag: member="RTNL_TC_REQUEUES" ref="gga7f00b06ddcf7c64d3f159214d0d976c0adc557ea50891d76d451349421457f7ad" args="" -->RTNL_TC_REQUEUES</em>&nbsp;</td><td>
<p>Number of requeues. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga7f00b06ddcf7c64d3f159214d0d976c0ac3f814dae6f46241986f236ad867bb17"></a><!-- doxytag: member="RTNL_TC_OVERLIMITS" ref="gga7f00b06ddcf7c64d3f159214d0d976c0ac3f814dae6f46241986f236ad867bb17" args="" -->RTNL_TC_OVERLIMITS</em>&nbsp;</td><td>
<p>Number of overlimits. </p>
</td></tr>
</table>
</dd>
</dl>

<p>Definition at line <a class="el" href="tc_8h_source.html#l00027">27</a> of file <a class="el" href="tc_8h_source.html">tc.h</a>.</p>
<div class="fragment"><pre class="fragment">                      {
        <a class="code" href="group__tc.html#gga7f00b06ddcf7c64d3f159214d0d976c0a45892528a489491962b1115d2a797ea6" title="Packets seen.">RTNL_TC_PACKETS</a>,        <span class="comment">/**&lt; Packets seen */</span>
        <a class="code" href="group__tc.html#gga7f00b06ddcf7c64d3f159214d0d976c0a48a501c10b68cfcad6a1d5578050591b" title="Bytes seen.">RTNL_TC_BYTES</a>,          <span class="comment">/**&lt; Bytes seen */</span>
        <a class="code" href="group__tc.html#gga7f00b06ddcf7c64d3f159214d0d976c0af5161062248e8d8b713b920df98fc63f" title="Current bits/s (rate estimator)">RTNL_TC_RATE_BPS</a>,       <span class="comment">/**&lt; Current bits/s (rate estimator) */</span>
        <a class="code" href="group__tc.html#gga7f00b06ddcf7c64d3f159214d0d976c0ad592a1229cd73ced877fc88715bc5ba9" title="Current packet/s (rate estimator)">RTNL_TC_RATE_PPS</a>,       <span class="comment">/**&lt; Current packet/s (rate estimator) */</span>
        <a class="code" href="group__tc.html#gga7f00b06ddcf7c64d3f159214d0d976c0aa22bbf425d78526690cb0b4aa824e9d5" title="Queue length.">RTNL_TC_QLEN</a>,           <span class="comment">/**&lt; Queue length */</span>
        <a class="code" href="group__tc.html#gga7f00b06ddcf7c64d3f159214d0d976c0ae44313687d6e8084549c9834a4a9e8a1" title="Backlog length.">RTNL_TC_BACKLOG</a>,        <span class="comment">/**&lt; Backlog length */</span>
        <a class="code" href="group__tc.html#gga7f00b06ddcf7c64d3f159214d0d976c0acc8892488b10b39081a3186ab8b01d99" title="Packets dropped.">RTNL_TC_DROPS</a>,          <span class="comment">/**&lt; Packets dropped */</span>
        <a class="code" href="group__tc.html#gga7f00b06ddcf7c64d3f159214d0d976c0adc557ea50891d76d451349421457f7ad" title="Number of requeues.">RTNL_TC_REQUEUES</a>,       <span class="comment">/**&lt; Number of requeues */</span>
        <a class="code" href="group__tc.html#gga7f00b06ddcf7c64d3f159214d0d976c0ac3f814dae6f46241986f236ad867bb17" title="Number of overlimits.">RTNL_TC_OVERLIMITS</a>,     <span class="comment">/**&lt; Number of overlimits */</span>
        __RTNL_TC_STATS_MAX,
};
</pre></div>
</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="gaf3dc48257284437d340d8493b33b9b98"></a><!-- doxytag: member="tc.c::rtnl_tc_calc_txtime" ref="gaf3dc48257284437d340d8493b33b9b98" args="(int bufsize, int rate)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_tc_calc_txtime </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>bufsize</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>rate</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">bufsize</td><td>Size of buffer to be transmited in bytes. </td></tr>
    <tr><td class="paramname">rate</td><td>Transmit rate in bytes per second.</td></tr>
  </table>
  </dd>
</dl>
<p>Calculates the number of micro seconds required to transmit a specific buffer at a specific transmit rate.</p>
<p class="formulaDsp">
<img class="formulaDsp" alt="\[ txtime=\frac{bufsize}{rate}10^6 \]" src="form_2.png"/>
</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>Required transmit time in micro seconds. </dd></dl>

<p>Definition at line <a class="el" href="tc_8c_source.html#l00383">383</a> of file <a class="el" href="tc_8c_source.html">tc.c</a>.</p>

<p>Referenced by <a class="el" href="tbf_8c_source.html#l00448">rtnl_qdisc_tbf_set_peakrate()</a>, <a class="el" href="tbf_8c_source.html#l00369">rtnl_qdisc_tbf_set_rate()</a>, and <a class="el" href="tc_8c_source.html#l00454">rtnl_tc_build_rate_table()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">double</span> tx_time_secs;
        
        tx_time_secs = (double) bufsize / (<span class="keywordtype">double</span>) rate;

        <span class="keywordflow">return</span> tx_time_secs * 1000000.;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga460b3c9b69f0bffd46347b1e2d4497e5"></a><!-- doxytag: member="tc.c::rtnl_tc_calc_bufsize" ref="ga460b3c9b69f0bffd46347b1e2d4497e5" args="(int txtime, int rate)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_tc_calc_bufsize </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>txtime</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>rate</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">txtime</td><td>Available transmit time in micro seconds. </td></tr>
    <tr><td class="paramname">rate</td><td>Transmit rate in bytes per second.</td></tr>
  </table>
  </dd>
</dl>
<p>Calculates the size of the buffer that can be transmitted in a specific time period at a specific transmit rate.</p>
<p class="formulaDsp">
<img class="formulaDsp" alt="\[ bufsize=\frac{{txtime} \times {rate}}{10^6} \]" src="form_3.png"/>
</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>Size of buffer in bytes. </dd></dl>

<p>Definition at line <a class="el" href="tc_8c_source.html#l00406">406</a> of file <a class="el" href="tc_8c_source.html">tc.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">double</span> bufsize;

        bufsize = (double) txtime * (<span class="keywordtype">double</span>) rate;

        <span class="keywordflow">return</span> bufsize / 1000000.;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga149f2e05e2ab75842c99166cae7b3630"></a><!-- doxytag: member="tc.c::rtnl_tc_calc_cell_log" ref="ga149f2e05e2ab75842c99166cae7b3630" args="(int cell_size)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_tc_calc_cell_log </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>cell_size</em></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">cell_size</td><td>Size of cell, must be a power of two. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Binary logirhtm of cell size or a negative error code. </dd></dl>

<p>Definition at line <a class="el" href="tc_8c_source.html#l00420">420</a> of file <a class="el" href="tc_8c_source.html">tc.c</a>.</p>

<p>Referenced by <a class="el" href="tc_8c_source.html#l00454">rtnl_tc_build_rate_table()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">int</span> i;

        <span class="keywordflow">for</span> (i = 0; i &lt; 32; i++)
                <span class="keywordflow">if</span> ((1 &lt;&lt; i) == cell_size)
                        <span class="keywordflow">return</span> i;

        <span class="keywordflow">return</span> nl_errno(EINVAL);
}
</pre></div>
</div>
</div>
<a class="anchor" id="gaf0985ec685f9def7fcaba8cb831c4f2c"></a><!-- doxytag: member="tc.c::rtnl_tc_build_rate_table" ref="gaf0985ec685f9def7fcaba8cb831c4f2c" args="(uint32_t *dst, uint8_t mpu, uint8_t overhead, int cell, int rate)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_tc_build_rate_table </td>
          <td>(</td>
          <td class="paramtype">uint32_t *&#160;</td>
          <td class="paramname"><em>dst</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t&#160;</td>
          <td class="paramname"><em>mpu</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t&#160;</td>
          <td class="paramname"><em>overhead</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>cell</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>rate</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">dst</td><td>Destination buffer of RTNL_TC_RTABLE_SIZE uint32_t[]. </td></tr>
    <tr><td class="paramname">mpu</td><td>Minimal size of a packet at all times. </td></tr>
    <tr><td class="paramname">overhead</td><td>Overhead to be added to each packet. </td></tr>
    <tr><td class="paramname">cell</td><td>Size of cell, i.e. size of step between entries in bytes. </td></tr>
    <tr><td class="paramname">rate</td><td>Rate in bytes per second.</td></tr>
  </table>
  </dd>
</dl>
<p>Computes a table of RTNL_TC_RTABLE_SIZE entries specyfing the transmission times for various packet sizes, e.g. the transmission time for a packet of size <code>pktsize</code> could be looked up: </p>
<div class="fragment"><pre class="fragment"> txtime = table[pktsize &gt;&gt; log2(cell)];
</pre></div> 
<p>Definition at line <a class="el" href="tc_8c_source.html#l00454">454</a> of file <a class="el" href="tc_8c_source.html">tc.c</a>.</p>

<p>References <a class="el" href="tc_8c_source.html#l00420">rtnl_tc_calc_cell_log()</a>, <a class="el" href="tc_8c_source.html#l00383">rtnl_tc_calc_txtime()</a>, and <a class="el" href="tc_8h_source.html#l00050">RTNL_TC_RTABLE_SIZE</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">int</span> i, size, cell_log;

        cell_log = <a class="code" href="group__tc.html#ga149f2e05e2ab75842c99166cae7b3630" title="Calculate the binary logarithm for a specific cell size.">rtnl_tc_calc_cell_log</a>(cell);
        <span class="keywordflow">if</span> (cell_log &lt; 0)
                <span class="keywordflow">return</span> cell_log;

        <span class="keywordflow">for</span> (i = 0; i &lt; <a class="code" href="group__tc.html#ga9a0796847debb07d96fe745d9088a6b5" title="Number of entries in a transmission time lookup table.">RTNL_TC_RTABLE_SIZE</a>; i++) {
                size = (i &lt;&lt; cell_log) + overhead;
                <span class="keywordflow">if</span> (size &lt; mpu)
                        size = mpu;

                dst[i] = <a class="code" href="group__tc.html#gaf3dc48257284437d340d8493b33b9b98" title="Calculate time required to transmit buffer at a specific rate.">rtnl_tc_calc_txtime</a>(size, rate);
        }

        <span class="keywordflow">return</span> 0;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga27fad2a239d4d8d932da0ce1bdbf1f9f"></a><!-- doxytag: member="tc.c::rtnl_tc_handle2str" ref="ga27fad2a239d4d8d932da0ce1bdbf1f9f" args="(uint32_t handle, char *buf, size_t len)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">char* rtnl_tc_handle2str </td>
          <td>(</td>
          <td class="paramtype">uint32_t&#160;</td>
          <td class="paramname"><em>handle</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>len</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>traffic control handle </td></tr>
    <tr><td class="paramname">buf</td><td>destination buffer </td></tr>
    <tr><td class="paramname">len</td><td>buffer length</td></tr>
  </table>
  </dd>
</dl>
<p>Converts a tarffic control handle to a character string in the form of <code>MAJ:MIN</code> and stores it in the specified destination buffer.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>The destination buffer or the type encoded in hexidecimal form if no match was found. </dd></dl>

<p>Definition at line <a class="el" href="tc_8c_source.html#l00493">493</a> of file <a class="el" href="tc_8c_source.html">tc.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">if</span> (TC_H_ROOT == handle)
                snprintf(buf, len, <span class="stringliteral">&quot;root&quot;</span>);
        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (TC_H_UNSPEC == handle)
                snprintf(buf, len, <span class="stringliteral">&quot;none&quot;</span>);
        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (0 == TC_H_MAJ(handle))
                snprintf(buf, len, <span class="stringliteral">&quot;:%02x&quot;</span>, TC_H_MIN(handle));
        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (0 == TC_H_MIN(handle))
                snprintf(buf, len, <span class="stringliteral">&quot;%02x:&quot;</span>, TC_H_MAJ(handle) &gt;&gt; 16);
        <span class="keywordflow">else</span>
                snprintf(buf, len, <span class="stringliteral">&quot;%02x:%02x&quot;</span>,
                        TC_H_MAJ(handle) &gt;&gt; 16, TC_H_MIN(handle));

        <span class="keywordflow">return</span> buf;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gab2197ef937705965b0c6f0c32e5409e6"></a><!-- doxytag: member="tc.c::rtnl_tc_str2handle" ref="gab2197ef937705965b0c6f0c32e5409e6" args="(const char *name, uint32_t *res)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_tc_str2handle </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t *&#160;</td>
          <td class="paramname"><em>res</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">name</td><td>traffic control handle as character string </td></tr>
    <tr><td class="paramname">res</td><td>destination buffer</td></tr>
  </table>
  </dd>
</dl>
<p>Converts the provided character string specifying a traffic control handle to the corresponding numeric value.</p>
<p>The handle must be provided in one of the following formats:</p>
<ul>
<li>root</li>
<li>none</li>
<li>XXXX:</li>
<li>:YYYY</li>
<li>XXXX:YYYY</li>
<li>XXXXYYYY</li>
</ul>
<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="tc_8c_source.html#l00528">528</a> of file <a class="el" href="tc_8c_source.html">tc.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">char</span> *colon, *end;
        uint32_t h;

        <span class="keywordflow">if</span> (!strcasecmp(name, <span class="stringliteral">&quot;root&quot;</span>)) {
                *res = TC_H_ROOT;
                <span class="keywordflow">return</span> 0;
        }

        <span class="keywordflow">if</span> (!strcasecmp(name, <span class="stringliteral">&quot;none&quot;</span>)) {
                *res = TC_H_UNSPEC;
                <span class="keywordflow">return</span> 0;
        }

        h = strtoul(name, &amp;colon, 16);

        <span class="keywordflow">if</span> (colon == name) {
                <span class="comment">/* :YYYY */</span>
                h = 0;
                <span class="keywordflow">if</span> (<span class="charliteral">&#39;:&#39;</span> != *colon)
                        <span class="keywordflow">return</span> -EINVAL;
        }

        <span class="keywordflow">if</span> (<span class="charliteral">&#39;:&#39;</span> == *colon) {
                <span class="comment">/* check if we would lose bits */</span>
                <span class="keywordflow">if</span> (TC_H_MAJ(h))
                        <span class="keywordflow">return</span> -ERANGE;
                h &lt;&lt;= 16;

                <span class="keywordflow">if</span> (<span class="charliteral">&#39;\0&#39;</span> == colon[1]) {
                        <span class="comment">/* XXXX: */</span>
                        *res = h;
                } <span class="keywordflow">else</span> {
                        <span class="comment">/* XXXX:YYYY */</span>
                        uint32_t l = strtoul(colon+1, &amp;end, 16);

                        <span class="comment">/* check if we overlap with major part */</span>
                        <span class="keywordflow">if</span> (TC_H_MAJ(l))
                                <span class="keywordflow">return</span> -ERANGE;

                        <span class="keywordflow">if</span> (<span class="charliteral">&#39;\0&#39;</span> != *end)
                                <span class="keywordflow">return</span> -EINVAL;

                        *res = (h | l);
                }
        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="charliteral">&#39;\0&#39;</span> == *colon) {
                <span class="comment">/* XXXXYYYY */</span>
                *res = h;
        } <span class="keywordflow">else</span>
                <span class="keywordflow">return</span> -EINVAL;

        <span class="keywordflow">return</span> 0;
}
</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>