Sophie

Sophie

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

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: Token Bucket Filter (TBF)</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>Token Bucket Filter (TBF)</h1>  </div>
<div class="ingroups"><a class="el" href="group__qdisc__api.html">Queueing Discipline Modules</a></div></div>
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="member-group"></a>
Attribute Access</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tbf.html#ga243dc3934c3dc4a4c84b7f94fb693904">rtnl_qdisc_tbf_set_limit</a> (struct rtnl_qdisc *qdisc, int limit)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Set limit of TBF qdisc.  <a href="#ga243dc3934c3dc4a4c84b7f94fb693904"></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__tbf.html#ga2d6061d91f115af1795d1e2ed622b39e">rtnl_qdisc_tbf_set_limit_by_latency</a> (struct rtnl_qdisc *qdisc, int latency)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Set limit of TBF qdisc by latency.  <a href="#ga2d6061d91f115af1795d1e2ed622b39e"></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__tbf.html#ga7a02b4afdfa05738fbe7de7ff8dce7d8">rtnl_qdisc_tbf_get_limit</a> (struct rtnl_qdisc *qdisc)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get limit of TBF qdisc.  <a href="#ga7a02b4afdfa05738fbe7de7ff8dce7d8"></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__tbf.html#ga32e98feb7ac38ee4f6df817c48c6bd3a">rtnl_qdisc_tbf_set_mpu</a> (struct rtnl_qdisc *qdisc, int mpu)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Set MPU of TBF qdisc.  <a href="#ga32e98feb7ac38ee4f6df817c48c6bd3a"></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__tbf.html#ga88170007a17c9125931f9b754be4a420">rtnl_qdisc_tbf_get_mpu</a> (struct rtnl_qdisc *qdisc)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get MPU of TBF qdisc.  <a href="#ga88170007a17c9125931f9b754be4a420"></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__tbf.html#ga0429fd89cd8dd65d8b516cb57b33bc3d">rtnl_qdisc_tbf_set_rate</a> (struct rtnl_qdisc *qdisc, int rate, int bucket, int cell)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Set rate of TBF qdisc.  <a href="#ga0429fd89cd8dd65d8b516cb57b33bc3d"></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__tbf.html#ga33052452bb747b837eb04c8a9243354b">rtnl_qdisc_tbf_get_rate</a> (struct rtnl_qdisc *qdisc)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get rate of TBF qdisc.  <a href="#ga33052452bb747b837eb04c8a9243354b"></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__tbf.html#ga48af84163e6376406a11371323fbe4be">rtnl_qdisc_tbf_get_rate_bucket</a> (struct rtnl_qdisc *qdisc)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get rate bucket size of TBF qdisc.  <a href="#ga48af84163e6376406a11371323fbe4be"></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__tbf.html#ga3c2e09002bf4bac13fb3b31e3153195e">rtnl_qdisc_tbf_get_rate_cell</a> (struct rtnl_qdisc *qdisc)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get rate cell size of TBF qdisc.  <a href="#ga3c2e09002bf4bac13fb3b31e3153195e"></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__tbf.html#ga90dbd91cf2a3a7b0c41e245807bf81cb">rtnl_qdisc_tbf_set_peakrate</a> (struct rtnl_qdisc *qdisc, int rate, int bucket, int cell)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Set peak rate of TBF qdisc.  <a href="#ga90dbd91cf2a3a7b0c41e245807bf81cb"></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__tbf.html#gace885146d439a73f922c175d49bce526">rtnl_qdisc_tbf_get_peakrate</a> (struct rtnl_qdisc *qdisc)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get peak rate of TBF qdisc.  <a href="#gace885146d439a73f922c175d49bce526"></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__tbf.html#ga38960a00c8f30a1b3095207391c0879e">rtnl_qdisc_tbf_get_peakrate_bucket</a> (struct rtnl_qdisc *qdisc)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get peak rate bucket size of TBF qdisc.  <a href="#ga38960a00c8f30a1b3095207391c0879e"></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__tbf.html#gaa08bbd6446a6f46b8e792faa58ba743d">rtnl_qdisc_tbf_get_peakrate_cell</a> (struct rtnl_qdisc *qdisc)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get peak rate cell size of TBF qdisc.  <a href="#gaa08bbd6446a6f46b8e792faa58ba743d"></a><br/></td></tr>
</table>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="ga243dc3934c3dc4a4c84b7f94fb693904"></a><!-- doxytag: member="tbf.c::rtnl_qdisc_tbf_set_limit" ref="ga243dc3934c3dc4a4c84b7f94fb693904" args="(struct rtnl_qdisc *qdisc, int limit)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_qdisc_tbf_set_limit </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_qdisc *&#160;</td>
          <td class="paramname"><em>qdisc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>limit</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">qdisc</td><td>TBF qdisc to be modified. </td></tr>
    <tr><td class="paramname">limit</td><td>New limit in bytes. </td></tr>
  </table>
  </dd>
</dl>
<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="tbf_8c_source.html#l00223">223</a> of file <a class="el" href="tbf_8c_source.html">tbf.c</a>.</p>

<p>Referenced by <a class="el" href="tbf_8c_source.html#l00266">rtnl_qdisc_tbf_set_limit_by_latency()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>rtnl_tbf *tbf;
        
        tbf = tbf_alloc(qdisc);
        <span class="keywordflow">if</span> (!tbf)
                <span class="keywordflow">return</span> nl_errno(ENOMEM);

        tbf-&gt;qt_limit = limit;
        tbf-&gt;qt_mask |= TBF_ATTR_LIMIT;

        <span class="keywordflow">return</span> 0;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga2d6061d91f115af1795d1e2ed622b39e"></a><!-- doxytag: member="tbf.c::rtnl_qdisc_tbf_set_limit_by_latency" ref="ga2d6061d91f115af1795d1e2ed622b39e" args="(struct rtnl_qdisc *qdisc, int latency)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_qdisc_tbf_set_limit_by_latency </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_qdisc *&#160;</td>
          <td class="paramname"><em>qdisc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>latency</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">qdisc</td><td>TBF qdisc to be modified. </td></tr>
    <tr><td class="paramname">latency</td><td>Latency in micro seconds.</td></tr>
  </table>
  </dd>
</dl>
<p>Calculates and sets the limit based on the desired latency and the configured rate and peak rate. In order for this operation to succeed, the rate and if required the peak rate must have been set in advance.</p>
<p class="formulaDsp">
<img class="formulaDsp" alt="\[ limit_n = \frac{{rate_n} \times {latency}}{10^6}+{bucketsize}_n \]" src="form_0.png"/>
</p>
 <p class="formulaDsp">
<img class="formulaDsp" alt="\[ limit = min(limit_{rate},limit_{peak}) \]" src="form_1.png"/>
</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="tbf_8c_source.html#l00266">266</a> of file <a class="el" href="tbf_8c_source.html">tbf.c</a>.</p>

<p>References <a class="el" href="tbf_8c_source.html#l00223">rtnl_qdisc_tbf_set_limit()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>rtnl_tbf *tbf;
        <span class="keywordtype">double</span> limit, limit2;

        tbf = tbf_alloc(qdisc);
        <span class="keywordflow">if</span> (!tbf)
                <span class="keywordflow">return</span> nl_errno(ENOMEM);

        <span class="keywordflow">if</span> (!(tbf-&gt;qt_mask &amp; TBF_ATTR_RATE))
                <span class="keywordflow">return</span> nl_error(EINVAL, <span class="stringliteral">&quot;The rate must be specified before &quot;</span>
                                <span class="stringliteral">&quot;limit can be calculated based on latency.&quot;</span>);

        limit = calc_limit(&amp;tbf-&gt;qt_rate, latency, tbf-&gt;qt_rate_bucket);

        <span class="keywordflow">if</span> (tbf-&gt;qt_mask &amp; TBF_ATTR_PEAKRATE) {
                limit2 = calc_limit(&amp;tbf-&gt;qt_peakrate, latency,
                                    tbf-&gt;qt_peakrate_bucket);

                <span class="keywordflow">if</span> (limit2 &lt; limit)
                        limit = limit2;
        }

        <span class="keywordflow">return</span> <a class="code" href="group__tbf.html#ga243dc3934c3dc4a4c84b7f94fb693904" title="Set limit of TBF qdisc.">rtnl_qdisc_tbf_set_limit</a>(qdisc, (<span class="keywordtype">int</span>) limit);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga7a02b4afdfa05738fbe7de7ff8dce7d8"></a><!-- doxytag: member="tbf.c::rtnl_qdisc_tbf_get_limit" ref="ga7a02b4afdfa05738fbe7de7ff8dce7d8" args="(struct rtnl_qdisc *qdisc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_qdisc_tbf_get_limit </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_qdisc *&#160;</td>
          <td class="paramname"><em>qdisc</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">qdisc</td><td>TBF qdisc. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Limit in bytes or a negative error code. </dd></dl>

<p>Definition at line <a class="el" href="tbf_8c_source.html#l00297">297</a> of file <a class="el" href="tbf_8c_source.html">tbf.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>rtnl_tbf *tbf;
        
        tbf = tbf_qdisc(qdisc);
        <span class="keywordflow">if</span> (tbf &amp;&amp; (tbf-&gt;qt_mask &amp; TBF_ATTR_LIMIT))
                <span class="keywordflow">return</span> tbf-&gt;qt_limit;
        <span class="keywordflow">return</span>
                nl_errno(ENOENT);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga32e98feb7ac38ee4f6df817c48c6bd3a"></a><!-- doxytag: member="tbf.c::rtnl_qdisc_tbf_set_mpu" ref="ga32e98feb7ac38ee4f6df817c48c6bd3a" args="(struct rtnl_qdisc *qdisc, int mpu)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_qdisc_tbf_set_mpu </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_qdisc *&#160;</td>
          <td class="paramname"><em>qdisc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>mpu</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">qdisc</td><td>TBF qdisc to be modified. </td></tr>
    <tr><td class="paramname">mpu</td><td>New MPU in bytes. </td></tr>
  </table>
  </dd>
</dl>
<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="tbf_8c_source.html#l00314">314</a> of file <a class="el" href="tbf_8c_source.html">tbf.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>rtnl_tbf *tbf;
        
        tbf = tbf_alloc(qdisc);
        <span class="keywordflow">if</span> (!tbf)
                <span class="keywordflow">return</span> nl_errno(ENOMEM);

        tbf-&gt;qt_mpu = mpu;
        tbf-&gt;qt_mask |= TBF_ATTR_MPU;

        <span class="keywordflow">return</span> 0;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga88170007a17c9125931f9b754be4a420"></a><!-- doxytag: member="tbf.c::rtnl_qdisc_tbf_get_mpu" ref="ga88170007a17c9125931f9b754be4a420" args="(struct rtnl_qdisc *qdisc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_qdisc_tbf_get_mpu </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_qdisc *&#160;</td>
          <td class="paramname"><em>qdisc</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">qdisc</td><td>TBF qdisc. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>MPU in bytes or a negative error code. </dd></dl>

<p>Definition at line <a class="el" href="tbf_8c_source.html#l00333">333</a> of file <a class="el" href="tbf_8c_source.html">tbf.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>rtnl_tbf *tbf;
        
        tbf = tbf_qdisc(qdisc);
        <span class="keywordflow">if</span> (tbf &amp;&amp; (tbf-&gt;qt_mask &amp; TBF_ATTR_MPU))
                <span class="keywordflow">return</span> tbf-&gt;qt_mpu;
        <span class="keywordflow">return</span>
                nl_errno(ENOENT);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga0429fd89cd8dd65d8b516cb57b33bc3d"></a><!-- doxytag: member="tbf.c::rtnl_qdisc_tbf_set_rate" ref="ga0429fd89cd8dd65d8b516cb57b33bc3d" args="(struct rtnl_qdisc *qdisc, int rate, int bucket, int cell)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_qdisc_tbf_set_rate </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_qdisc *&#160;</td>
          <td class="paramname"><em>qdisc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>rate</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>bucket</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>cell</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">qdisc</td><td>TBF qdisc to be modified. </td></tr>
    <tr><td class="paramname">rate</td><td>New rate in bytes per second. </td></tr>
    <tr><td class="paramname">bucket</td><td>Size of bucket in bytes. </td></tr>
    <tr><td class="paramname">cell</td><td>Size of a rate cell or 0 to get default value. </td></tr>
  </table>
  </dd>
</dl>
<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="tbf_8c_source.html#l00369">369</a> of file <a class="el" href="tbf_8c_source.html">tbf.c</a>.</p>

<p>References <a class="el" href="tc_8c_source.html#l00383">rtnl_tc_calc_txtime()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>rtnl_tbf *tbf;
        <span class="keywordtype">int</span> cell_log;
        
        tbf = tbf_alloc(qdisc);
        <span class="keywordflow">if</span> (!tbf)
                <span class="keywordflow">return</span> nl_errno(ENOMEM);

        cell_log = calc_cell_log(cell, bucket);
        <span class="keywordflow">if</span> (cell_log &lt; 0)
                <span class="keywordflow">return</span> cell_log;

        tbf-&gt;qt_rate.rs_rate = rate;
        tbf-&gt;qt_rate_bucket = bucket;
        tbf-&gt;qt_rate.rs_cell_log = cell_log;
        tbf-&gt;qt_rate_txtime = <a class="code" href="group__tc.html#gaf3dc48257284437d340d8493b33b9b98" title="Calculate time required to transmit buffer at a specific rate.">rtnl_tc_calc_txtime</a>(bucket, rate);
        tbf-&gt;qt_mask |= TBF_ATTR_RATE;

        <span class="keywordflow">return</span> 0;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga33052452bb747b837eb04c8a9243354b"></a><!-- doxytag: member="tbf.c::rtnl_qdisc_tbf_get_rate" ref="ga33052452bb747b837eb04c8a9243354b" args="(struct rtnl_qdisc *qdisc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_qdisc_tbf_get_rate </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_qdisc *&#160;</td>
          <td class="paramname"><em>qdisc</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">qdisc</td><td>TBF qdisc. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Rate in bytes per seconds or a negative error code. </dd></dl>

<p>Definition at line <a class="el" href="tbf_8c_source.html#l00397">397</a> of file <a class="el" href="tbf_8c_source.html">tbf.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>rtnl_tbf *tbf;

        tbf = tbf_qdisc(qdisc);
        <span class="keywordflow">if</span> (tbf &amp;&amp; (tbf-&gt;qt_mask &amp; TBF_ATTR_RATE))
                <span class="keywordflow">return</span> tbf-&gt;qt_rate.rs_rate;
        <span class="keywordflow">else</span>
                <span class="keywordflow">return</span> -1;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga48af84163e6376406a11371323fbe4be"></a><!-- doxytag: member="tbf.c::rtnl_qdisc_tbf_get_rate_bucket" ref="ga48af84163e6376406a11371323fbe4be" args="(struct rtnl_qdisc *qdisc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_qdisc_tbf_get_rate_bucket </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_qdisc *&#160;</td>
          <td class="paramname"><em>qdisc</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">qdisc</td><td>TBF qdisc. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Size of rate bucket or a negative error code. </dd></dl>

<p>Definition at line <a class="el" href="tbf_8c_source.html#l00413">413</a> of file <a class="el" href="tbf_8c_source.html">tbf.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>rtnl_tbf *tbf;

        tbf = tbf_qdisc(qdisc);
        <span class="keywordflow">if</span> (tbf &amp;&amp; (tbf-&gt;qt_mask &amp; TBF_ATTR_RATE))
                <span class="keywordflow">return</span> tbf-&gt;qt_rate_bucket;
        <span class="keywordflow">else</span>
                <span class="keywordflow">return</span> -1;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga3c2e09002bf4bac13fb3b31e3153195e"></a><!-- doxytag: member="tbf.c::rtnl_qdisc_tbf_get_rate_cell" ref="ga3c2e09002bf4bac13fb3b31e3153195e" args="(struct rtnl_qdisc *qdisc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_qdisc_tbf_get_rate_cell </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_qdisc *&#160;</td>
          <td class="paramname"><em>qdisc</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">qdisc</td><td>TBF qdisc. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Size of rate cell in bytes or a negative error code. </dd></dl>

<p>Definition at line <a class="el" href="tbf_8c_source.html#l00429">429</a> of file <a class="el" href="tbf_8c_source.html">tbf.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>rtnl_tbf *tbf;

        tbf = tbf_qdisc(qdisc);
        <span class="keywordflow">if</span> (tbf &amp;&amp; (tbf-&gt;qt_mask &amp; TBF_ATTR_RATE))
                <span class="keywordflow">return</span> (1 &lt;&lt; tbf-&gt;qt_rate.rs_cell_log);
        <span class="keywordflow">else</span>
                <span class="keywordflow">return</span> -1;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga90dbd91cf2a3a7b0c41e245807bf81cb"></a><!-- doxytag: member="tbf.c::rtnl_qdisc_tbf_set_peakrate" ref="ga90dbd91cf2a3a7b0c41e245807bf81cb" args="(struct rtnl_qdisc *qdisc, int rate, int bucket, int cell)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_qdisc_tbf_set_peakrate </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_qdisc *&#160;</td>
          <td class="paramname"><em>qdisc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>rate</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>bucket</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>cell</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">qdisc</td><td>TBF qdisc to be modified. </td></tr>
    <tr><td class="paramname">rate</td><td>New peak rate in bytes per second. </td></tr>
    <tr><td class="paramname">bucket</td><td>Size of peakrate bucket. </td></tr>
    <tr><td class="paramname">cell</td><td>Size of a peakrate cell or 0 to get default value. </td></tr>
  </table>
  </dd>
</dl>
<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="tbf_8c_source.html#l00448">448</a> of file <a class="el" href="tbf_8c_source.html">tbf.c</a>.</p>

<p>References <a class="el" href="tc_8c_source.html#l00383">rtnl_tc_calc_txtime()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>rtnl_tbf *tbf;
        <span class="keywordtype">int</span> cell_log;
        
        tbf = tbf_alloc(qdisc);
        <span class="keywordflow">if</span> (!tbf)
                <span class="keywordflow">return</span> nl_errno(ENOMEM);

        cell_log = calc_cell_log(cell, bucket);
        <span class="keywordflow">if</span> (cell_log &lt; 0)
                <span class="keywordflow">return</span> cell_log;

        tbf-&gt;qt_peakrate.rs_rate = rate;
        tbf-&gt;qt_peakrate_bucket = bucket;
        tbf-&gt;qt_peakrate.rs_cell_log = cell_log;
        tbf-&gt;qt_peakrate_txtime = <a class="code" href="group__tc.html#gaf3dc48257284437d340d8493b33b9b98" title="Calculate time required to transmit buffer at a specific rate.">rtnl_tc_calc_txtime</a>(bucket, rate);
        
        tbf-&gt;qt_mask |= TBF_ATTR_PEAKRATE;

        <span class="keywordflow">return</span> 0;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gace885146d439a73f922c175d49bce526"></a><!-- doxytag: member="tbf.c::rtnl_qdisc_tbf_get_peakrate" ref="gace885146d439a73f922c175d49bce526" args="(struct rtnl_qdisc *qdisc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_qdisc_tbf_get_peakrate </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_qdisc *&#160;</td>
          <td class="paramname"><em>qdisc</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">qdisc</td><td>TBF qdisc. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Peak rate in bytes per seconds or a negative error code. </dd></dl>

<p>Definition at line <a class="el" href="tbf_8c_source.html#l00477">477</a> of file <a class="el" href="tbf_8c_source.html">tbf.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>rtnl_tbf *tbf;

        tbf = tbf_qdisc(qdisc);
        <span class="keywordflow">if</span> (tbf &amp;&amp; (tbf-&gt;qt_mask &amp; TBF_ATTR_PEAKRATE))
                <span class="keywordflow">return</span> tbf-&gt;qt_peakrate.rs_rate;
        <span class="keywordflow">else</span>
                <span class="keywordflow">return</span> -1;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga38960a00c8f30a1b3095207391c0879e"></a><!-- doxytag: member="tbf.c::rtnl_qdisc_tbf_get_peakrate_bucket" ref="ga38960a00c8f30a1b3095207391c0879e" args="(struct rtnl_qdisc *qdisc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_qdisc_tbf_get_peakrate_bucket </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_qdisc *&#160;</td>
          <td class="paramname"><em>qdisc</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">qdisc</td><td>TBF qdisc. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Size of peak rate bucket or a negative error code. </dd></dl>

<p>Definition at line <a class="el" href="tbf_8c_source.html#l00493">493</a> of file <a class="el" href="tbf_8c_source.html">tbf.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>rtnl_tbf *tbf;

        tbf = tbf_qdisc(qdisc);
        <span class="keywordflow">if</span> (tbf &amp;&amp; (tbf-&gt;qt_mask &amp; TBF_ATTR_PEAKRATE))
                <span class="keywordflow">return</span> tbf-&gt;qt_peakrate_bucket;
        <span class="keywordflow">else</span>
                <span class="keywordflow">return</span> -1;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gaa08bbd6446a6f46b8e792faa58ba743d"></a><!-- doxytag: member="tbf.c::rtnl_qdisc_tbf_get_peakrate_cell" ref="gaa08bbd6446a6f46b8e792faa58ba743d" args="(struct rtnl_qdisc *qdisc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_qdisc_tbf_get_peakrate_cell </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_qdisc *&#160;</td>
          <td class="paramname"><em>qdisc</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">qdisc</td><td>TBF qdisc. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Size of peak rate cell in bytes or a negative error code. </dd></dl>

<p>Definition at line <a class="el" href="tbf_8c_source.html#l00509">509</a> of file <a class="el" href="tbf_8c_source.html">tbf.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>rtnl_tbf *tbf;

        tbf = tbf_qdisc(qdisc);
        <span class="keywordflow">if</span> (tbf &amp;&amp; (tbf-&gt;qt_mask &amp; TBF_ATTR_PEAKRATE))
                <span class="keywordflow">return</span> (1 &lt;&lt; tbf-&gt;qt_peakrate.rs_cell_log);
        <span class="keywordflow">else</span>
                <span class="keywordflow">return</span> -1;
}
</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>