<!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: Hierachical Token Bucket (HTB)</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 <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 Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li><a href="files.html"><span>Files</span></a></li> </ul> </div> </div> <div class="header"> <div class="headertitle"> <h1>Hierachical Token Bucket (HTB)</h1> </div> <div class="ingroups"><a class="el" href="group__qdisc__api.html">Queueing Discipline Modules</a> | <a class="el" href="group__class__api.html">Class 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="ga52fa44471d9c874073983874962602c2"></a><!-- doxytag: member="htb::rtnl_htb_set_rate2quantum" ref="ga52fa44471d9c874073983874962602c2" args="(struct rtnl_qdisc *qdisc, uint32_t rate2quantum)" --> void </td><td class="memItemRight" valign="bottom"><b>rtnl_htb_set_rate2quantum</b> (struct rtnl_qdisc *qdisc, uint32_t rate2quantum)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__htb.html#gaf0cdca21169f1991bad47c9769befe03">rtnl_htb_set_defcls</a> (struct rtnl_qdisc *qdisc, uint32_t defcls)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Set default class of the htb qdisc to the specified value. <a href="#gaf0cdca21169f1991bad47c9769befe03"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad98061fde49ff1bcb26a1a871006156c"></a><!-- doxytag: member="htb::rtnl_htb_set_prio" ref="gad98061fde49ff1bcb26a1a871006156c" args="(struct rtnl_class *class, uint32_t prio)" --> void </td><td class="memItemRight" valign="bottom"><b>rtnl_htb_set_prio</b> (struct rtnl_class *class, uint32_t prio)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__htb.html#ga7d14226b20de776d11f3dcce18baed9e">rtnl_htb_set_mtu</a> (struct rtnl_class *class, uint32_t mtu)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Set MTU of the data link. <a href="#ga7d14226b20de776d11f3dcce18baed9e"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__htb.html#ga1e874d42de668acd322b3f2f911b0e43">rtnl_htb_set_rate</a> (struct rtnl_class *class, uint32_t rate)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Set rate of HTB class. <a href="#ga1e874d42de668acd322b3f2f911b0e43"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__htb.html#gabdaa4646affdfa86f64f5367ebca65a6">rtnl_htb_set_ceil</a> (struct rtnl_class *class, uint32_t ceil)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Set ceil of HTB class. <a href="#gabdaa4646affdfa86f64f5367ebca65a6"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__htb.html#ga6b65939906ed029b8db53c11dd63d40c">rtnl_htb_set_rbuffer</a> (struct rtnl_class *class, uint32_t rbuffer)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Set size of the rate bucket of HTB class. <a href="#ga6b65939906ed029b8db53c11dd63d40c"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__htb.html#ga5d09a846dc0795860355d9e0c7ae41f7">rtnl_htb_set_cbuffer</a> (struct rtnl_class *class, uint32_t cbuffer)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Set size of the ceil bucket of HTB class. <a href="#ga5d09a846dc0795860355d9e0c7ae41f7"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__htb.html#ga12c4a8134893071e1a2dcfb895865d63">rtnl_htb_set_quantum</a> (struct rtnl_class *class, uint32_t quantum)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Set how much bytes to serve from leaf at once of HTB class {use r2q}. <a href="#ga12c4a8134893071e1a2dcfb895865d63"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__htb.html#ga5d60a7d65134e214a8ec7146073f2107">rtnl_htb_set_overhead</a> (struct rtnl_class *class, uint8_t overhead)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Set per-packet size overhead used in rate computations of HTB class. <a href="#ga5d60a7d65134e214a8ec7146073f2107"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__htb.html#ga211078d37498b663d99a463400fb3b88">rtnl_htb_set_mpu</a> (struct rtnl_class *class, uint8_t mpu)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Set the minimum packet size used in rate computations of HTB class. <a href="#ga211078d37498b663d99a463400fb3b88"></a><br/></td></tr> </table> <hr/><h2>Function Documentation</h2> <a class="anchor" id="gaf0cdca21169f1991bad47c9769befe03"></a><!-- doxytag: member="htb.c::rtnl_htb_set_defcls" ref="gaf0cdca21169f1991bad47c9769befe03" args="(struct rtnl_qdisc *qdisc, uint32_t defcls)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void rtnl_htb_set_defcls </td> <td>(</td> <td class="paramtype">struct rtnl_qdisc * </td> <td class="paramname"><em>qdisc</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint32_t </td> <td class="paramname"><em>defcls</em> </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>qdisc to change </td></tr> <tr><td class="paramname">defcls</td><td>new default class </td></tr> </table> </dd> </dl> <p>Definition at line <a class="el" href="htb_8c_source.html#l00377">377</a> of file <a class="el" href="htb_8c_source.html">htb.c</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keyword">struct </span>rtnl_htb_qdisc *d = htb_qdisc(qdisc); <span class="keywordflow">if</span> (d == NULL) <span class="keywordflow">return</span>; d->qh_defcls = defcls; d->qh_mask |= SCH_HTB_HAS_DEFCLS; } </pre></div> </div> </div> <a class="anchor" id="ga7d14226b20de776d11f3dcce18baed9e"></a><!-- doxytag: member="htb.c::rtnl_htb_set_mtu" ref="ga7d14226b20de776d11f3dcce18baed9e" args="(struct rtnl_class *class, uint32_t mtu)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void rtnl_htb_set_mtu </td> <td>(</td> <td class="paramtype">struct rtnl_class * </td> <td class="paramname"><em>class</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint32_t </td> <td class="paramname"><em>mtu</em> </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">class</td><td>HTB class to be modified. </td></tr> <tr><td class="paramname">mtu</td><td>New MTU in bytes.</td></tr> </table> </dd> </dl> <p>Sets MTU of the data link controlled by the HTB class. If not set, the Ethernet MTU (1600) is used. </p> <p>Definition at line <a class="el" href="htb_8c_source.html#l00405">405</a> of file <a class="el" href="htb_8c_source.html">htb.c</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keyword">struct </span>rtnl_htb_class *d = htb_class(<span class="keyword">class</span>); <span class="keywordflow">if</span> (d == NULL) <span class="keywordflow">return</span>; d->ch_mtu = mtu; d->ch_mask |= SCH_HTB_HAS_MTU; } </pre></div> </div> </div> <a class="anchor" id="ga1e874d42de668acd322b3f2f911b0e43"></a><!-- doxytag: member="htb.c::rtnl_htb_set_rate" ref="ga1e874d42de668acd322b3f2f911b0e43" args="(struct rtnl_class *class, uint32_t rate)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void rtnl_htb_set_rate </td> <td>(</td> <td class="paramtype">struct rtnl_class * </td> <td class="paramname"><em>class</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint32_t </td> <td class="paramname"><em>rate</em> </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">class</td><td>HTB class to be modified. </td></tr> <tr><td class="paramname">rate</td><td>New rate in bytes per second. </td></tr> </table> </dd> </dl> <p>Definition at line <a class="el" href="htb_8c_source.html#l00420">420</a> of file <a class="el" href="htb_8c_source.html">htb.c</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keyword">struct </span>rtnl_htb_class *d = htb_class(<span class="keyword">class</span>); <span class="keywordflow">if</span> (d == NULL) <span class="keywordflow">return</span>; d->ch_rate.rs_cell_log = UINT8_MAX; <span class="comment">/* use default value */</span> d->ch_rate.rs_rate = rate; d->ch_mask |= SCH_HTB_HAS_RATE; } </pre></div> </div> </div> <a class="anchor" id="gabdaa4646affdfa86f64f5367ebca65a6"></a><!-- doxytag: member="htb.c::rtnl_htb_set_ceil" ref="gabdaa4646affdfa86f64f5367ebca65a6" args="(struct rtnl_class *class, uint32_t ceil)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void rtnl_htb_set_ceil </td> <td>(</td> <td class="paramtype">struct rtnl_class * </td> <td class="paramname"><em>class</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint32_t </td> <td class="paramname"><em>ceil</em> </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">class</td><td>HTB class to be modified. </td></tr> <tr><td class="paramname">ceil</td><td>New ceil in bytes per second. </td></tr> </table> </dd> </dl> <p>Definition at line <a class="el" href="htb_8c_source.html#l00436">436</a> of file <a class="el" href="htb_8c_source.html">htb.c</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keyword">struct </span>rtnl_htb_class *d = htb_class(<span class="keyword">class</span>); <span class="keywordflow">if</span> (d == NULL) <span class="keywordflow">return</span>; d->ch_ceil.rs_cell_log = UINT8_MAX; <span class="comment">/* use default value */</span> d->ch_ceil.rs_rate = ceil; d->ch_mask |= SCH_HTB_HAS_CEIL; } </pre></div> </div> </div> <a class="anchor" id="ga6b65939906ed029b8db53c11dd63d40c"></a><!-- doxytag: member="htb.c::rtnl_htb_set_rbuffer" ref="ga6b65939906ed029b8db53c11dd63d40c" args="(struct rtnl_class *class, uint32_t rbuffer)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void rtnl_htb_set_rbuffer </td> <td>(</td> <td class="paramtype">struct rtnl_class * </td> <td class="paramname"><em>class</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint32_t </td> <td class="paramname"><em>rbuffer</em> </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">class</td><td>HTB class to be modified. </td></tr> <tr><td class="paramname">rbuffer</td><td>New size in bytes. </td></tr> </table> </dd> </dl> <p>Definition at line <a class="el" href="htb_8c_source.html#l00452">452</a> of file <a class="el" href="htb_8c_source.html">htb.c</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keyword">struct </span>rtnl_htb_class *d = htb_class(<span class="keyword">class</span>); <span class="keywordflow">if</span> (d == NULL) <span class="keywordflow">return</span>; d->ch_rbuffer = rbuffer; d->ch_mask |= SCH_HTB_HAS_RBUFFER; } </pre></div> </div> </div> <a class="anchor" id="ga5d09a846dc0795860355d9e0c7ae41f7"></a><!-- doxytag: member="htb.c::rtnl_htb_set_cbuffer" ref="ga5d09a846dc0795860355d9e0c7ae41f7" args="(struct rtnl_class *class, uint32_t cbuffer)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void rtnl_htb_set_cbuffer </td> <td>(</td> <td class="paramtype">struct rtnl_class * </td> <td class="paramname"><em>class</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint32_t </td> <td class="paramname"><em>cbuffer</em> </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">class</td><td>HTB class to be modified. </td></tr> <tr><td class="paramname">cbuffer</td><td>New size in bytes. </td></tr> </table> </dd> </dl> <p>Definition at line <a class="el" href="htb_8c_source.html#l00467">467</a> of file <a class="el" href="htb_8c_source.html">htb.c</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keyword">struct </span>rtnl_htb_class *d = htb_class(<span class="keyword">class</span>); <span class="keywordflow">if</span> (d == NULL) <span class="keywordflow">return</span>; d->ch_cbuffer = cbuffer; d->ch_mask |= SCH_HTB_HAS_CBUFFER; } </pre></div> </div> </div> <a class="anchor" id="ga12c4a8134893071e1a2dcfb895865d63"></a><!-- doxytag: member="htb.c::rtnl_htb_set_quantum" ref="ga12c4a8134893071e1a2dcfb895865d63" args="(struct rtnl_class *class, uint32_t quantum)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void rtnl_htb_set_quantum </td> <td>(</td> <td class="paramtype">struct rtnl_class * </td> <td class="paramname"><em>class</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint32_t </td> <td class="paramname"><em>quantum</em> </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">class</td><td>HTB class to be modified. </td></tr> <tr><td class="paramname">quantum</td><td>New size in bytes. </td></tr> </table> </dd> </dl> <p>Definition at line <a class="el" href="htb_8c_source.html#l00482">482</a> of file <a class="el" href="htb_8c_source.html">htb.c</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keyword">struct </span>rtnl_htb_class *d = htb_class(<span class="keyword">class</span>); <span class="keywordflow">if</span> (d == NULL) <span class="keywordflow">return</span>; d->ch_quantum = quantum; d->ch_mask |= SCH_HTB_HAS_QUANTUM; } </pre></div> </div> </div> <a class="anchor" id="ga5d60a7d65134e214a8ec7146073f2107"></a><!-- doxytag: member="htb.c::rtnl_htb_set_overhead" ref="ga5d60a7d65134e214a8ec7146073f2107" args="(struct rtnl_class *class, uint8_t overhead)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void rtnl_htb_set_overhead </td> <td>(</td> <td class="paramtype">struct rtnl_class * </td> <td class="paramname"><em>class</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint8_t </td> <td class="paramname"><em>overhead</em> </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">class</td><td>HTB class to be modified. </td></tr> <tr><td class="paramname">overhead</td><td>Size in bytes. </td></tr> </table> </dd> </dl> <p>Definition at line <a class="el" href="htb_8c_source.html#l00497">497</a> of file <a class="el" href="htb_8c_source.html">htb.c</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keyword">struct </span>rtnl_htb_class *d = htb_class(<span class="keyword">class</span>); <span class="keywordflow">if</span> (d == NULL) <span class="keywordflow">return</span>; d->ch_overhead = overhead; d->ch_mask |= SCH_HTB_HAS_OVERHEAD; } </pre></div> </div> </div> <a class="anchor" id="ga211078d37498b663d99a463400fb3b88"></a><!-- doxytag: member="htb.c::rtnl_htb_set_mpu" ref="ga211078d37498b663d99a463400fb3b88" args="(struct rtnl_class *class, uint8_t mpu)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void rtnl_htb_set_mpu </td> <td>(</td> <td class="paramtype">struct rtnl_class * </td> <td class="paramname"><em>class</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint8_t </td> <td class="paramname"><em>mpu</em> </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">class</td><td>HTB class to be modified. </td></tr> <tr><td class="paramname">mpu</td><td>Size in bytes. </td></tr> </table> </dd> </dl> <p>Definition at line <a class="el" href="htb_8c_source.html#l00512">512</a> of file <a class="el" href="htb_8c_source.html">htb.c</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keyword">struct </span>rtnl_htb_class *d = htb_class(<span class="keyword">class</span>); <span class="keywordflow">if</span> (d == NULL) <span class="keywordflow">return</span>; d->ch_mpu = mpu; d->ch_mask |= SCH_HTB_HAS_MPU; } </pre></div> </div> </div> </div> <hr class="footer"/><address class="footer"><small>Generated on Mon Mar 21 2011 for libnl by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.3 </small></address> </body> </html>