<!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: Utilities</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="summary"> <a href="#nested-classes">Data Structures</a> | <a href="#groups">Modules</a> | <a href="#enum-members">Enumerations</a> | <a href="#var-members">Variables</a> </div> <div class="headertitle"> <h1>Utilities</h1> </div> </div> <div class="contents"> <table class="memberdecls"> <tr><td colspan="2"><h2><a name="nested-classes"></a> Data Structures</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnl__dump__params.html">nl_dump_params</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Dumping parameters. <a href="structnl__dump__params.html#_details">More...</a><br/></td></tr> <tr><td colspan="2"><h2><a name="groups"></a> Modules</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__addr.html">Abstract Address</a></td></tr> <tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__data.html">Abstract Data</a></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  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__utils.html#gacfb5566c73f0965c5241d7d49bc717e9">nl_dump_type</a> { <br/>   <a class="el" href="group__utils.html#ggacfb5566c73f0965c5241d7d49bc717e9a5597887c080d5ecae358b6065a4048fd">NL_DUMP_BRIEF</a>, <a class="el" href="group__utils.html#ggacfb5566c73f0965c5241d7d49bc717e9a1445106c7af529b2c99ee289fbcd3179">NL_DUMP_FULL</a>, <a class="el" href="group__utils.html#ggacfb5566c73f0965c5241d7d49bc717e9a8ebedc55094df6175b84fb1230047a65">NL_DUMP_STATS</a>, <a class="el" href="group__utils.html#ggacfb5566c73f0965c5241d7d49bc717e9aa5b83654e99e53423c39b0d6e835d768">NL_DUMP_XML</a>, <br/>   <a class="el" href="group__utils.html#ggacfb5566c73f0965c5241d7d49bc717e9a7178b29f7f68857970540f2d1dabbaf1">NL_DUMP_ENV</a>, <a class="el" href="group__utils.html#ggacfb5566c73f0965c5241d7d49bc717e9a0a6b9179a51fa838c1f662b6557e0dce">NL_DUMP_EVENTS</a>, <b>__NL_DUMP_MAX</b> <br/> }</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Dumping types (dp_type) </p> <a href="group__utils.html#gacfb5566c73f0965c5241d7d49bc717e9">More...</a><br/></td></tr> <tr><td colspan="2"><h2><a name="var-members"></a> Variables</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2e170840b2132881f543285ea6323f52"></a><!-- doxytag: member="utils::nl_debug" ref="ga2e170840b2132881f543285ea6323f52" args="" --> int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__utils.html#ga2e170840b2132881f543285ea6323f52">nl_debug</a> = 0</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Debug level. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structnl__dump__params.html">nl_dump_params</a> </td><td class="memItemRight" valign="bottom"><b>nl_debug_dp</b></td></tr> <tr><td colspan="2"><h2><a name="member-group"></a> Error Code Helpers</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabff59a9ff34c9b99f1427b4727b4137f"></a><!-- doxytag: member="utils::nl_get_errno" ref="gabff59a9ff34c9b99f1427b4727b4137f" args="(void)" --> int </td><td class="memItemRight" valign="bottom"><b>nl_get_errno</b> (void)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__utils.html#ga4586cbc3086399f08e42708098ea2045">nl_geterror</a> (void)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Return error message for an error code. <a href="#ga4586cbc3086399f08e42708098ea2045"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__utils.html#ga8c631e35dc822837a1e10354f96ea0b7">nl_perror</a> (const char *s)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Print a libnl error message. <a href="#ga8c631e35dc822837a1e10354f96ea0b7"></a><br/></td></tr> <tr><td colspan="2"><h2><a name="member-group"></a> Unit Pretty-Printing</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__utils.html#ga5a280448ae9e17ff5dc7e822b9f47b11">nl_cancel_down_bytes</a> (unsigned long long l, char **unit)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Cancel down a byte counter. <a href="#ga5a280448ae9e17ff5dc7e822b9f47b11"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__utils.html#ga195db70bc2c97b1eb6f40c2d60a6f823">nl_cancel_down_bits</a> (unsigned long long l, char **unit)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Cancel down a bit counter. <a href="#ga195db70bc2c97b1eb6f40c2d60a6f823"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__utils.html#ga190dcd7725dd4f6a7e635a99a0b8b0db">nl_cancel_down_us</a> (uint32_t l, char **unit)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Cancel down a micro second value. <a href="#ga190dcd7725dd4f6a7e635a99a0b8b0db"></a><br/></td></tr> <tr><td colspan="2"><h2><a name="member-group"></a> Generic Unit Translations</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">long </td><td class="memItemRight" valign="bottom"><a class="el" href="group__utils.html#ga1f10fc847364fc4f02624ba3b5b00954">nl_size2int</a> (const char *str)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Convert a character string to a size. <a href="#ga1f10fc847364fc4f02624ba3b5b00954"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">long </td><td class="memItemRight" valign="bottom"><a class="el" href="group__utils.html#ga60e3d95f99eba0e01e0d127653e1da6b">nl_prob2int</a> (const char *str)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Convert a character string to a probability. <a href="#ga60e3d95f99eba0e01e0d127653e1da6b"></a><br/></td></tr> <tr><td colspan="2"><h2><a name="member-group"></a> Time Translations</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9aa52772ddedc62e60f5ecfc9a66ea89"></a><!-- doxytag: member="utils::nl_get_hz" ref="ga9aa52772ddedc62e60f5ecfc9a66ea89" args="(void)" --> int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__utils.html#ga9aa52772ddedc62e60f5ecfc9a66ea89">nl_get_hz</a> (void)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Return the value of HZ. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">uint32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__utils.html#gaf630014f3b23909759921b8ef9f85d3e">nl_us2ticks</a> (uint32_t us)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Convert micro seconds to ticks. <a href="#gaf630014f3b23909759921b8ef9f85d3e"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">uint32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__utils.html#gade35baf670a48177d9469905159089e7">nl_ticks2us</a> (uint32_t ticks)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Convert ticks to micro seconds. <a href="#gade35baf670a48177d9469905159089e7"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4b115f802262eede3c5d30ef716638ed"></a><!-- doxytag: member="utils::nl_time2int" ref="ga4b115f802262eede3c5d30ef716638ed" args="(const char *str)" --> long </td><td class="memItemRight" valign="bottom"><b>nl_time2int</b> (const char *str)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__utils.html#gace816c5bf9a61cd74bbb0444ffa7029f">nl_msec2str</a> (uint64_t msec, char *buf, size_t len)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Convert milliseconds to a character string. <a href="#gace816c5bf9a61cd74bbb0444ffa7029f"></a><br/></td></tr> <tr><td colspan="2"><h2><a name="member-group"></a> Link Layer Protocol Translations</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae30f0457bae3bb7f6a8ca96b1077c938"></a><!-- doxytag: member="utils::nl_llproto2str" ref="gae30f0457bae3bb7f6a8ca96b1077c938" args="(int llproto, char *buf, size_t len)" --> char * </td><td class="memItemRight" valign="bottom"><b>nl_llproto2str</b> (int llproto, char *buf, size_t len)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga87ecd438587fefddda75f2de4f0fd73f"></a><!-- doxytag: member="utils::nl_str2llproto" ref="ga87ecd438587fefddda75f2de4f0fd73f" args="(const char *name)" --> int </td><td class="memItemRight" valign="bottom"><b>nl_str2llproto</b> (const char *name)</td></tr> <tr><td colspan="2"><h2><a name="member-group"></a> Ethernet Protocol Translations</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga04b596e2f079563c52b460fc0225e4aa"></a><!-- doxytag: member="utils::nl_ether_proto2str" ref="ga04b596e2f079563c52b460fc0225e4aa" args="(int eproto, char *buf, size_t len)" --> char * </td><td class="memItemRight" valign="bottom"><b>nl_ether_proto2str</b> (int eproto, char *buf, size_t len)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gadf04725625bf9a0954c3770c851a4781"></a><!-- doxytag: member="utils::nl_str2ether_proto" ref="gadf04725625bf9a0954c3770c851a4781" args="(const char *name)" --> int </td><td class="memItemRight" valign="bottom"><b>nl_str2ether_proto</b> (const char *name)</td></tr> <tr><td colspan="2"><h2><a name="member-group"></a> IP Protocol Translations</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2ab07cb7a0830ebd237d2dda1a35425f"></a><!-- doxytag: member="utils::nl_ip_proto2str" ref="ga2ab07cb7a0830ebd237d2dda1a35425f" args="(int proto, char *buf, size_t len)" --> char * </td><td class="memItemRight" valign="bottom"><b>nl_ip_proto2str</b> (int proto, char *buf, size_t len)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6a3ff310e77d66b05e75c660bea5e248"></a><!-- doxytag: member="utils::nl_str2ip_proto" ref="ga6a3ff310e77d66b05e75c660bea5e248" args="(const char *name)" --> int </td><td class="memItemRight" valign="bottom"><b>nl_str2ip_proto</b> (const char *name)</td></tr> <tr><td colspan="2"><h2><a name="member-group"></a> Dumping Helpers</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__utils.html#ga8d036ba05aa233203e8d7fb79f925c2c">nl_new_line</a> (struct <a class="el" href="structnl__dump__params.html">nl_dump_params</a> *params, int line)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Handle a new line while dumping. <a href="#ga8d036ba05aa233203e8d7fb79f925c2c"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__utils.html#ga527075856a5427170865a6f409298cdf">nl_dump</a> (struct <a class="el" href="structnl__dump__params.html">nl_dump_params</a> *params, const char *fmt,...)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Dump a formatted character string. <a href="#ga527075856a5427170865a6f409298cdf"></a><br/></td></tr> <tr><td colspan="2"><h2><a name="member-group"></a> Probability Constants</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaafb0b157f144782cae4a9a0665988e03"></a><!-- doxytag: member="utils::NL_PROB_MIN" ref="gaafb0b157f144782cae4a9a0665988e03" args="" --> #define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__utils.html#gaafb0b157f144782cae4a9a0665988e03">NL_PROB_MIN</a>   0x0</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Lower probability limit. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga031d6bce1af7c5547c814bd7b16bb605"></a><!-- doxytag: member="utils::NL_PROB_MAX" ref="ga031d6bce1af7c5547c814bd7b16bb605" args="" --> #define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__utils.html#ga031d6bce1af7c5547c814bd7b16bb605">NL_PROB_MAX</a>   0xffffffff</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Upper probability limit. <br/></td></tr> </table> <hr/><h2>Enumeration Type Documentation</h2> <a class="anchor" id="gacfb5566c73f0965c5241d7d49bc717e9"></a><!-- doxytag: member="types.h::nl_dump_type" ref="gacfb5566c73f0965c5241d7d49bc717e9" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">enum <a class="el" href="group__utils.html#gacfb5566c73f0965c5241d7d49bc717e9">nl_dump_type</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="ggacfb5566c73f0965c5241d7d49bc717e9a5597887c080d5ecae358b6065a4048fd"></a><!-- doxytag: member="NL_DUMP_BRIEF" ref="ggacfb5566c73f0965c5241d7d49bc717e9a5597887c080d5ecae358b6065a4048fd" args="" -->NL_DUMP_BRIEF</em> </td><td> <p>Dump object in a brief one-liner. </p> </td></tr> <tr><td valign="top"><em><a class="anchor" id="ggacfb5566c73f0965c5241d7d49bc717e9a1445106c7af529b2c99ee289fbcd3179"></a><!-- doxytag: member="NL_DUMP_FULL" ref="ggacfb5566c73f0965c5241d7d49bc717e9a1445106c7af529b2c99ee289fbcd3179" args="" -->NL_DUMP_FULL</em> </td><td> <p>Dump all attributes but no statistics. </p> </td></tr> <tr><td valign="top"><em><a class="anchor" id="ggacfb5566c73f0965c5241d7d49bc717e9a8ebedc55094df6175b84fb1230047a65"></a><!-- doxytag: member="NL_DUMP_STATS" ref="ggacfb5566c73f0965c5241d7d49bc717e9a8ebedc55094df6175b84fb1230047a65" args="" -->NL_DUMP_STATS</em> </td><td> <p>Dump all attributes including statistics. </p> </td></tr> <tr><td valign="top"><em><a class="anchor" id="ggacfb5566c73f0965c5241d7d49bc717e9aa5b83654e99e53423c39b0d6e835d768"></a><!-- doxytag: member="NL_DUMP_XML" ref="ggacfb5566c73f0965c5241d7d49bc717e9aa5b83654e99e53423c39b0d6e835d768" args="" -->NL_DUMP_XML</em> </td><td> <p>Dump all attribtes in XML format. </p> </td></tr> <tr><td valign="top"><em><a class="anchor" id="ggacfb5566c73f0965c5241d7d49bc717e9a7178b29f7f68857970540f2d1dabbaf1"></a><!-- doxytag: member="NL_DUMP_ENV" ref="ggacfb5566c73f0965c5241d7d49bc717e9a7178b29f7f68857970540f2d1dabbaf1" args="" -->NL_DUMP_ENV</em> </td><td> <p>Dump all attribtues as env variables. </p> </td></tr> <tr><td valign="top"><em><a class="anchor" id="ggacfb5566c73f0965c5241d7d49bc717e9a0a6b9179a51fa838c1f662b6557e0dce"></a><!-- doxytag: member="NL_DUMP_EVENTS" ref="ggacfb5566c73f0965c5241d7d49bc717e9a0a6b9179a51fa838c1f662b6557e0dce" args="" -->NL_DUMP_EVENTS</em> </td><td> <p>Dump event. </p> </td></tr> </table> </dd> </dl> <p>Definition at line <a class="el" href="types_8h_source.html#l00021">21</a> of file <a class="el" href="types_8h_source.html">types.h</a>.</p> <div class="fragment"><pre class="fragment"> { <a class="code" href="group__utils.html#ggacfb5566c73f0965c5241d7d49bc717e9a5597887c080d5ecae358b6065a4048fd" title="Dump object in a brief one-liner.">NL_DUMP_BRIEF</a>, <span class="comment">/**< Dump object in a brief one-liner */</span> <a class="code" href="group__utils.html#ggacfb5566c73f0965c5241d7d49bc717e9a1445106c7af529b2c99ee289fbcd3179" title="Dump all attributes but no statistics.">NL_DUMP_FULL</a>, <span class="comment">/**< Dump all attributes but no statistics */</span> <a class="code" href="group__utils.html#ggacfb5566c73f0965c5241d7d49bc717e9a8ebedc55094df6175b84fb1230047a65" title="Dump all attributes including statistics.">NL_DUMP_STATS</a>, <span class="comment">/**< Dump all attributes including statistics */</span> <a class="code" href="group__utils.html#ggacfb5566c73f0965c5241d7d49bc717e9aa5b83654e99e53423c39b0d6e835d768" title="Dump all attribtes in XML format.">NL_DUMP_XML</a>, <span class="comment">/**< Dump all attribtes in XML format */</span> <a class="code" href="group__utils.html#ggacfb5566c73f0965c5241d7d49bc717e9a7178b29f7f68857970540f2d1dabbaf1" title="Dump all attribtues as env variables.">NL_DUMP_ENV</a>, <span class="comment">/**< Dump all attribtues as env variables */</span> <a class="code" href="group__utils.html#ggacfb5566c73f0965c5241d7d49bc717e9a0a6b9179a51fa838c1f662b6557e0dce" title="Dump event.">NL_DUMP_EVENTS</a>, <span class="comment">/**< Dump event */</span> __NL_DUMP_MAX, }; </pre></div> </div> </div> <hr/><h2>Function Documentation</h2> <a class="anchor" id="ga4586cbc3086399f08e42708098ea2045"></a><!-- doxytag: member="utils.c::nl_geterror" ref="ga4586cbc3086399f08e42708098ea2045" args="(void)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">char* nl_geterror </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </div> <div class="memdoc"> <dl class="return"><dt><b>Returns:</b></dt><dd>error message </dd></dl> <p>Definition at line <a class="el" href="utils_8c_source.html#l00142">142</a> of file <a class="el" href="utils_8c_source.html">utils.c</a>.</p> <p>Referenced by <a class="el" href="utils_8c_source.html#l00163">nl_perror()</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keywordflow">if</span> (errbuf) <span class="keywordflow">return</span> errbuf; <span class="keywordflow">if</span> (nlerrno) <span class="keywordflow">return</span> strerror(nlerrno); <span class="keywordflow">return</span> <span class="stringliteral">"Sucess\n"</span>; } </pre></div> </div> </div> <a class="anchor" id="ga8c631e35dc822837a1e10354f96ea0b7"></a><!-- doxytag: member="utils.c::nl_perror" ref="ga8c631e35dc822837a1e10354f96ea0b7" args="(const char *s)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void nl_perror </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>s</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">s</td><td>error message prefix</td></tr> </table> </dd> </dl> <p>Prints the error message of the call that failed last.</p> <p>If s is not NULL and *s is not a null byte the argument string is printed, followed by a colon and a blank. Then the error message and a new-line. </p> <p>Definition at line <a class="el" href="utils_8c_source.html#l00163">163</a> of file <a class="el" href="utils_8c_source.html">utils.c</a>.</p> <p>References <a class="el" href="utils_8c_source.html#l00142">nl_geterror()</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keywordflow">if</span> (s && *s) fprintf(stderr, <span class="stringliteral">"%s: %s\n"</span>, s, <a class="code" href="group__utils.html#ga4586cbc3086399f08e42708098ea2045" title="Return error message for an error code.">nl_geterror</a>()); <span class="keywordflow">else</span> fprintf(stderr, <span class="stringliteral">"%s\n"</span>, <a class="code" href="group__utils.html#ga4586cbc3086399f08e42708098ea2045" title="Return error message for an error code.">nl_geterror</a>()); } </pre></div> </div> </div> <a class="anchor" id="ga5a280448ae9e17ff5dc7e822b9f47b11"></a><!-- doxytag: member="utils.c::nl_cancel_down_bytes" ref="ga5a280448ae9e17ff5dc7e822b9f47b11" args="(unsigned long long l, char **unit)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">double nl_cancel_down_bytes </td> <td>(</td> <td class="paramtype">unsigned long long </td> <td class="paramname"><em>l</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">char ** </td> <td class="paramname"><em>unit</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">l</td><td>byte counter </td></tr> <tr><td class="paramname">unit</td><td>destination unit pointer</td></tr> </table> </dd> </dl> <p>Cancels down a byte counter until it reaches a reasonable unit. The chosen unit is assigned to <em>unit</em>.</p> <dl class="return"><dt><b>Returns:</b></dt><dd>The cancelled down byte counter in the new unit. </dd></dl> <p>Definition at line <a class="el" href="utils_8c_source.html#l00188">188</a> of file <a class="el" href="utils_8c_source.html">utils.c</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keywordflow">if</span> (l >= 1099511627776LL) { *unit = <span class="stringliteral">"TiB"</span>; <span class="keywordflow">return</span> ((<span class="keywordtype">double</span>) l) / 1099511627776LL; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (l >= 1073741824) { *unit = <span class="stringliteral">"GiB"</span>; <span class="keywordflow">return</span> ((<span class="keywordtype">double</span>) l) / 1073741824; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (l >= 1048576) { *unit = <span class="stringliteral">"MiB"</span>; <span class="keywordflow">return</span> ((<span class="keywordtype">double</span>) l) / 1048576; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (l >= 1024) { *unit = <span class="stringliteral">"KiB"</span>; <span class="keywordflow">return</span> ((<span class="keywordtype">double</span>) l) / 1024; } <span class="keywordflow">else</span> { *unit = <span class="stringliteral">"B"</span>; <span class="keywordflow">return</span> (<span class="keywordtype">double</span>) l; } } </pre></div> </div> </div> <a class="anchor" id="ga195db70bc2c97b1eb6f40c2d60a6f823"></a><!-- doxytag: member="utils.c::nl_cancel_down_bits" ref="ga195db70bc2c97b1eb6f40c2d60a6f823" args="(unsigned long long l, char **unit)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">double nl_cancel_down_bits </td> <td>(</td> <td class="paramtype">unsigned long long </td> <td class="paramname"><em>l</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">char ** </td> <td class="paramname"><em>unit</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">l</td><td>bit counter </td></tr> <tr><td class="paramname">unit</td><td>destination unit pointer</td></tr> </table> </dd> </dl> <p>Cancels downa bit counter until it reaches a reasonable unit. The chosen unit is assigned to <em>unit</em>.</p> <dl class="return"><dt><b>Returns:</b></dt><dd>The cancelled down bit counter in the new unit. </dd></dl> <p>Definition at line <a class="el" href="utils_8c_source.html#l00218">218</a> of file <a class="el" href="utils_8c_source.html">utils.c</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keywordflow">if</span> (l >= 1099511627776ULL) { *unit = <span class="stringliteral">"Tbit"</span>; <span class="keywordflow">return</span> ((<span class="keywordtype">double</span>) l) / 1099511627776ULL; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (l >= 1073741824) { *unit = <span class="stringliteral">"Gbit"</span>; <span class="keywordflow">return</span> ((<span class="keywordtype">double</span>) l) / 1073741824; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (l >= 1048576) { *unit = <span class="stringliteral">"Mbit"</span>; <span class="keywordflow">return</span> ((<span class="keywordtype">double</span>) l) / 1048576; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (l >= 1024) { *unit = <span class="stringliteral">"Kbit"</span>; <span class="keywordflow">return</span> ((<span class="keywordtype">double</span>) l) / 1024; } <span class="keywordflow">else</span> { *unit = <span class="stringliteral">"bit"</span>; <span class="keywordflow">return</span> (<span class="keywordtype">double</span>) l; } } </pre></div> </div> </div> <a class="anchor" id="ga190dcd7725dd4f6a7e635a99a0b8b0db"></a><!-- doxytag: member="utils.c::nl_cancel_down_us" ref="ga190dcd7725dd4f6a7e635a99a0b8b0db" args="(uint32_t l, char **unit)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">double nl_cancel_down_us </td> <td>(</td> <td class="paramtype">uint32_t </td> <td class="paramname"><em>l</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">char ** </td> <td class="paramname"><em>unit</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">l</td><td>micro seconds </td></tr> <tr><td class="paramname">unit</td><td>destination unit pointer</td></tr> </table> </dd> </dl> <p>Cancels down a microsecond counter until it reaches a reasonable unit. The chosen unit is assigned to <em>unit</em>.</p> <dl class="return"><dt><b>Returns:</b></dt><dd>The cancelled down microsecond in the new unit </dd></dl> <p>Definition at line <a class="el" href="utils_8c_source.html#l00249">249</a> of file <a class="el" href="utils_8c_source.html">utils.c</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keywordflow">if</span> (l >= 1000000) { *unit = <span class="stringliteral">"s"</span>; <span class="keywordflow">return</span> ((<span class="keywordtype">double</span>) l) / 1000000; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (l >= 1000) { *unit = <span class="stringliteral">"ms"</span>; <span class="keywordflow">return</span> ((<span class="keywordtype">double</span>) l) / 1000; } <span class="keywordflow">else</span> { *unit = <span class="stringliteral">"us"</span>; <span class="keywordflow">return</span> (<span class="keywordtype">double</span>) l; } } </pre></div> </div> </div> <a class="anchor" id="ga1f10fc847364fc4f02624ba3b5b00954"></a><!-- doxytag: member="utils.c::nl_size2int" ref="ga1f10fc847364fc4f02624ba3b5b00954" args="(const char *str)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">long nl_size2int </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>str</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">str</td><td>size encoded as character string</td></tr> </table> </dd> </dl> <p>Converts the specified size as character to the corresponding number of bytes.</p> <p>Supported formats are:</p> <ul> <li>b,kb/k,m/mb,gb/g for bytes</li> <li>bit,kbit/mbit/gbit</li> </ul> <dl class="return"><dt><b>Returns:</b></dt><dd>The number of bytes or -1 if the string is unparseable </dd></dl> <p>Definition at line <a class="el" href="utils_8c_source.html#l00283">283</a> of file <a class="el" href="utils_8c_source.html">utils.c</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keywordtype">char</span> *p; <span class="keywordtype">long</span> l = strtol(str, &p, 0); <span class="keywordflow">if</span> (p == str) <span class="keywordflow">return</span> -1; <span class="keywordflow">if</span> (*p) { <span class="keywordflow">if</span> (!strcasecmp(p, <span class="stringliteral">"kb"</span>) || !strcasecmp(p, <span class="stringliteral">"k"</span>)) l *= 1024; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcasecmp(p, <span class="stringliteral">"gb"</span>) || !strcasecmp(p, <span class="stringliteral">"g"</span>)) l *= 1024*1024*1024; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcasecmp(p, <span class="stringliteral">"gbit"</span>)) l *= 1024*1024*1024/8; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcasecmp(p, <span class="stringliteral">"mb"</span>) || !strcasecmp(p, <span class="stringliteral">"m"</span>)) l *= 1024*1024; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcasecmp(p, <span class="stringliteral">"mbit"</span>)) l *= 1024*1024/8; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcasecmp(p, <span class="stringliteral">"kbit"</span>)) l *= 1024/8; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcasecmp(p, <span class="stringliteral">"bit"</span>)) l /= 8; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcasecmp(p, <span class="stringliteral">"b"</span>) != 0) <span class="keywordflow">return</span> -1; } <span class="keywordflow">return</span> l; } </pre></div> </div> </div> <a class="anchor" id="ga60e3d95f99eba0e01e0d127653e1da6b"></a><!-- doxytag: member="utils.c::nl_prob2int" ref="ga60e3d95f99eba0e01e0d127653e1da6b" args="(const char *str)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">long nl_prob2int </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>str</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">str</td><td>probability encoded as character string</td></tr> </table> </dd> </dl> <p>Converts the specified probability as character to the corresponding probability number.</p> <p>Supported formats are:</p> <ul> <li>0.0-1.0</li> <li>0-100%</li> </ul> <dl class="return"><dt><b>Returns:</b></dt><dd>The probability relative to NL_PROB_MIN and NL_PROB_MAX </dd></dl> <p>Definition at line <a class="el" href="utils_8c_source.html#l00325">325</a> of file <a class="el" href="utils_8c_source.html">utils.c</a>.</p> <p>References <a class="el" href="utils_8h_source.html#l00037">NL_PROB_MAX</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keywordtype">char</span> *p; <span class="keywordtype">double</span> d = strtod(str, &p); <span class="keywordflow">if</span> (p == str) <span class="keywordflow">return</span> -1; <span class="keywordflow">if</span> (d > 1.0) d /= 100.0f; <span class="keywordflow">if</span> (d > 1.0f || d < 0.0f) <span class="keywordflow">return</span> -1; <span class="keywordflow">if</span> (*p && strcmp(p, <span class="stringliteral">"%"</span>) != 0) <span class="keywordflow">return</span> -1; <span class="keywordflow">return</span> rint(d * <a class="code" href="group__utils.html#ga031d6bce1af7c5547c814bd7b16bb605" title="Upper probability limit.">NL_PROB_MAX</a>); } </pre></div> </div> </div> <a class="anchor" id="gaf630014f3b23909759921b8ef9f85d3e"></a><!-- doxytag: member="utils.c::nl_us2ticks" ref="gaf630014f3b23909759921b8ef9f85d3e" args="(uint32_t us)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">uint32_t nl_us2ticks </td> <td>(</td> <td class="paramtype">uint32_t </td> <td class="paramname"><em>us</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">us</td><td>micro seconds </td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>number of ticks </dd></dl> <p>Definition at line <a class="el" href="utils_8c_source.html#l00429">429</a> of file <a class="el" href="utils_8c_source.html">utils.c</a>.</p> <p>Referenced by <a class="el" href="netem_8c_source.html#l00481">rtnl_netem_set_delay()</a>, and <a class="el" href="netem_8c_source.html#l00517">rtnl_netem_set_jitter()</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keywordflow">return</span> us * ticks_per_usec; } </pre></div> </div> </div> <a class="anchor" id="gade35baf670a48177d9469905159089e7"></a><!-- doxytag: member="utils.c::nl_ticks2us" ref="gade35baf670a48177d9469905159089e7" args="(uint32_t ticks)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">uint32_t nl_ticks2us </td> <td>(</td> <td class="paramtype">uint32_t </td> <td class="paramname"><em>ticks</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">ticks</td><td>number of ticks </td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>microseconds </dd></dl> <p>Definition at line <a class="el" href="utils_8c_source.html#l00440">440</a> of file <a class="el" href="utils_8c_source.html">utils.c</a>.</p> <p>Referenced by <a class="el" href="netem_8c_source.html#l00500">rtnl_netem_get_delay()</a>, and <a class="el" href="netem_8c_source.html#l00536">rtnl_netem_get_jitter()</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keywordflow">return</span> ticks / ticks_per_usec; } </pre></div> </div> </div> <a class="anchor" id="gace816c5bf9a61cd74bbb0444ffa7029f"></a><!-- doxytag: member="utils.c::nl_msec2str" ref="gace816c5bf9a61cd74bbb0444ffa7029f" args="(uint64_t msec, char *buf, size_t len)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">char* nl_msec2str </td> <td>(</td> <td class="paramtype">uint64_t </td> <td class="paramname"><em>msec</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">char * </td> <td class="paramname"><em>buf</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>len</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">msec</td><td>number of milliseconds </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 milliseconds to a character string split up in days, hours, minutes, seconds, and milliseconds and stores it in the specified destination buffer.</p> <dl class="return"><dt><b>Returns:</b></dt><dd>The destination buffer. </dd></dl> <p>Definition at line <a class="el" href="utils_8c_source.html#l00478">478</a> of file <a class="el" href="utils_8c_source.html">utils.c</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keywordtype">int</span> i, split[5]; <span class="keywordtype">char</span> *units[] = {<span class="stringliteral">"d"</span>, <span class="stringliteral">"h"</span>, <span class="stringliteral">"m"</span>, <span class="stringliteral">"s"</span>, <span class="stringliteral">"msec"</span>}; <span class="preprocessor">#define _SPLIT(idx, unit) if ((split[idx] = msec / unit) > 0) msec %= unit</span> <span class="preprocessor"></span> _SPLIT(0, 86400000); <span class="comment">/* days */</span> _SPLIT(1, 3600000); <span class="comment">/* hours */</span> _SPLIT(2, 60000); <span class="comment">/* minutes */</span> _SPLIT(3, 1000); <span class="comment">/* seconds */</span> <span class="preprocessor">#undef _SPLIT</span> <span class="preprocessor"></span> split[4] = msec; memset(buf, 0, len); <span class="keywordflow">for</span> (i = 0; i < ARRAY_SIZE(split); i++) { <span class="keywordflow">if</span> (split[i] > 0) { <span class="keywordtype">char</span> t[64]; snprintf(t, <span class="keyword">sizeof</span>(t), <span class="stringliteral">"%s%d%s"</span>, strlen(buf) ? <span class="stringliteral">" "</span> : <span class="stringliteral">""</span>, split[i], units[i]); strncat(buf, t, len - strlen(buf) - 1); } } <span class="keywordflow">return</span> buf; } </pre></div> </div> </div> <a class="anchor" id="ga8d036ba05aa233203e8d7fb79f925c2c"></a><!-- doxytag: member="utils.c::nl_new_line" ref="ga8d036ba05aa233203e8d7fb79f925c2c" args="(struct nl_dump_params *params, int line)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void nl_new_line </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structnl__dump__params.html">nl_dump_params</a> * </td> <td class="paramname"><em>params</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>line</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">params</td><td>Dumping parameters </td></tr> <tr><td class="paramname">line</td><td>Number of lines dumped already.</td></tr> </table> </dd> </dl> <p>This function must be called before dumping any onto a new line. It will ensure proper prefixing as specified by the dumping parameters.</p> <dl class="note"><dt><b>Note:</b></dt><dd>This function will NOT dump any newlines itself </dd></dl> <p>Definition at line <a class="el" href="utils_8c_source.html#l00725">725</a> of file <a class="el" href="utils_8c_source.html">utils.c</a>.</p> <p>References <a class="el" href="types_8h_source.html#l00091">nl_dump_params::dp_buf</a>, <a class="el" href="types_8h_source.html#l00096">nl_dump_params::dp_buflen</a>, <a class="el" href="types_8h_source.html#l00086">nl_dump_params::dp_fd</a>, <a class="el" href="types_8h_source.html#l00076">nl_dump_params::dp_nl_cb</a>, and <a class="el" href="types_8h_source.html#l00047">nl_dump_params::dp_prefix</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keywordflow">if</span> (params-><a class="code" href="structnl__dump__params.html#a6fd1500e450689a268d89b1ee20311cc" title="Specifies the number of whitespaces to be put in front of every new line (indentation).">dp_prefix</a>) { <span class="keywordtype">int</span> i; <span class="keywordflow">for</span> (i = 0; i < params-><a class="code" href="structnl__dump__params.html#a6fd1500e450689a268d89b1ee20311cc" title="Specifies the number of whitespaces to be put in front of every new line (indentation).">dp_prefix</a>; i++) { <span class="keywordflow">if</span> (params-><a class="code" href="structnl__dump__params.html#afe6d9b7154f8f6a4fa9469e859f1f652" title="File descriptor the dumping output should go to.">dp_fd</a>) fprintf(params-><a class="code" href="structnl__dump__params.html#afe6d9b7154f8f6a4fa9469e859f1f652" title="File descriptor the dumping output should go to.">dp_fd</a>, <span class="stringliteral">" "</span>); <span class="keywordflow">else</span> <span class="keywordflow">if</span> (params-><a class="code" href="structnl__dump__params.html#ad069c751442fcf74c9f1bf25f0f5af92" title="Alternatively the output may be redirected into a buffer.">dp_buf</a>) strncat(params-><a class="code" href="structnl__dump__params.html#ad069c751442fcf74c9f1bf25f0f5af92" title="Alternatively the output may be redirected into a buffer.">dp_buf</a>, <span class="stringliteral">" "</span>, params-><a class="code" href="structnl__dump__params.html#a63a511bbc4d12484ada704dcfc0818c0" title="Length of the buffer dp_buf.">dp_buflen</a> - <span class="keyword">sizeof</span>(params-><a class="code" href="structnl__dump__params.html#ad069c751442fcf74c9f1bf25f0f5af92" title="Alternatively the output may be redirected into a buffer.">dp_buf</a>) - 1); } } <span class="keywordflow">if</span> (params-><a class="code" href="structnl__dump__params.html#abdd722478abe803079e06cfb2a62c6a8" title="A callback invoked for every new line, can be used to customize the indentation.">dp_nl_cb</a>) params-><a class="code" href="structnl__dump__params.html#abdd722478abe803079e06cfb2a62c6a8" title="A callback invoked for every new line, can be used to customize the indentation.">dp_nl_cb</a>(params, line); } </pre></div> </div> </div> <a class="anchor" id="ga527075856a5427170865a6f409298cdf"></a><!-- doxytag: member="utils.c::nl_dump" ref="ga527075856a5427170865a6f409298cdf" args="(struct nl_dump_params *params, const char *fmt,...)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void nl_dump </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structnl__dump__params.html">nl_dump_params</a> * </td> <td class="paramname"><em>params</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>fmt</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname"><em>...</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">params</td><td>Dumping parameters </td></tr> <tr><td class="paramname">fmt</td><td>printf style formatting string </td></tr> <tr><td class="paramname">...</td><td>Arguments to formatting string</td></tr> </table> </dd> </dl> <p>Dumps a printf style formatting string to the output device as specified by the dumping parameters. </p> <p>Definition at line <a class="el" href="utils_8c_source.html#l00752">752</a> of file <a class="el" href="utils_8c_source.html">utils.c</a>.</p> <div class="fragment"><pre class="fragment">{ va_list args; va_start(args, fmt); __dp_dump(params, fmt, args); va_end(args); } </pre></div> </div> </div> <hr/><h2>Variable Documentation</h2> <a class="anchor" id="ga1fcae8b3332ad15250a8843266ee847a"></a><!-- doxytag: member="utils.c::nl_debug_dp" ref="ga1fcae8b3332ad15250a8843266ee847a" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">struct <a class="el" href="structnl__dump__params.html">nl_dump_params</a> nl_debug_dp</td> </tr> </table> </div> <div class="memdoc"> <b>Initial value:</b><div class="fragment"><pre class="fragment"> { .dp_type = <a class="code" href="group__utils.html#ggacfb5566c73f0965c5241d7d49bc717e9a1445106c7af529b2c99ee289fbcd3179" title="Dump all attributes but no statistics.">NL_DUMP_FULL</a>, } </pre></div> <p>Definition at line <a class="el" href="utils_8c_source.html#l00027">27</a> of file <a class="el" href="utils_8c_source.html">utils.c</a>.</p> </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>