Sophie

Sophie

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

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: Attributes</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.3 -->
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">libnl&#160;<span id="projectnumber">1.1</span></div>
  </td>
 </tr>
 </tbody>
</table>
</div>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="summary">
<a href="#nested-classes">Data Structures</a>  </div>
  <div class="headertitle">
<h1>Attributes</h1>  </div>
<div class="ingroups"><a class="el" href="group__msg.html">Messages</a></div></div>
<div class="contents">

<p>Netlink Attributes Construction/Parsing Interface.  
<a href="#_details">More...</a></p>
<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 &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structnla__policy.html">nla_policy</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">attribute validation policy  <a href="structnla__policy.html#_details">More...</a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Size Calculations</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga894e1ded50d0d62748a2b9b5f7195938">nla_attr_size</a> (int payload)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">length of attribute not including padding  <a href="#ga894e1ded50d0d62748a2b9b5f7195938"></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__attr.html#gafc7e89c7d72952510eff46f96761e3ea">nla_total_size</a> (int payload)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">total length of attribute including padding  <a href="#gafc7e89c7d72952510eff46f96761e3ea"></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__attr.html#gae24ddf8c4bb186eaaed15ecb2d08b816">nla_padlen</a> (int payload)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">length of padding at the tail of the attribute  <a href="#gae24ddf8c4bb186eaaed15ecb2d08b816"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Payload 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__attr.html#ga4aa5611a0b84b217ee9a7dd2b0491128">nla_type</a> (const struct nlattr *nla)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">attribute type  <a href="#ga4aa5611a0b84b217ee9a7dd2b0491128"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#gaf39d6bbd2be1fc2de30b6b7d079a5fce">nla_data</a> (const struct nlattr *nla)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">head of payload  <a href="#gaf39d6bbd2be1fc2de30b6b7d079a5fce"></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__attr.html#gac5a7705797946fa9c0775997bb8d130b">nla_len</a> (const struct nlattr *nla)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">length of payload  <a href="#gac5a7705797946fa9c0775997bb8d130b"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Attribute Parsing</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga5e4378d7681e9477e8e364542187d07a">nla_ok</a> (const struct nlattr *nla, int remaining)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">check if the netlink attribute fits into the remaining bytes  <a href="#ga5e4378d7681e9477e8e364542187d07a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct nlattr *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga68b6fbaa58b11804df8af489b79fbab7">nla_next</a> (const struct nlattr *nla, int *remaining)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">next netlink attribte in attribute stream  <a href="#ga68b6fbaa58b11804df8af489b79fbab7"></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__attr.html#gaa7ad544b5a93034602a442eb26cda92c">nla_parse</a> (struct nlattr *tb[], int maxtype, struct nlattr *head, int len, struct <a class="el" href="structnla__policy.html">nla_policy</a> *policy)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Parse a stream of attributes into a tb buffer.  <a href="#gaa7ad544b5a93034602a442eb26cda92c"></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__attr.html#ga974ec0720b2d863a5c65da868bcb7a6e">nla_parse_nested</a> (struct nlattr *tb[], int maxtype, struct nlattr *nla, struct <a class="el" href="structnla__policy.html">nla_policy</a> *policy)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">parse nested attributes  <a href="#ga974ec0720b2d863a5c65da868bcb7a6e"></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__attr.html#ga5d8d5930b012e61c8d8e4ba6b3038c36">nla_validate</a> (struct nlattr *head, int len, int maxtype, struct <a class="el" href="structnla__policy.html">nla_policy</a> *policy)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Validate a stream of attributes.  <a href="#ga5d8d5930b012e61c8d8e4ba6b3038c36"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct nlattr *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga2e98df8c30030aebcfd1eebf11bbb22a">nla_find</a> (struct nlattr *head, int len, int attrtype)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Find a specific attribute in a stream of attributes.  <a href="#ga2e98df8c30030aebcfd1eebf11bbb22a"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Utilities</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#gaf2cdaf473a1054b9c3fc735ca7275403">nla_memcpy</a> (void *dest, struct nlattr *src, int count)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy a netlink attribute into another memory area.  <a href="#gaf2cdaf473a1054b9c3fc735ca7275403"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#gaabddc8018334423d84088d241b4b7830">nla_strlcpy</a> (char *dst, const struct nlattr *nla, size_t dstsize)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy string attribute payload into a sized buffer.  <a href="#gaabddc8018334423d84088d241b4b7830"></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__attr.html#ga737c469f4692bce4c3b18f364e4a1949">nla_memcmp</a> (const struct nlattr *nla, const void *data, size_t size)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Compare an attribute with sized memory area.  <a href="#ga737c469f4692bce4c3b18f364e4a1949"></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__attr.html#ga236748b15cfbc86dde1500ea2bc65072">nla_strcmp</a> (const struct nlattr *nla, const char *str)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Compare a string attribute against a string.  <a href="#ga236748b15cfbc86dde1500ea2bc65072"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Attribute Construction</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct nlattr *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#gab738cbc916a17baca88aeed2e67dddc2">nla_reserve</a> (struct nl_msg *n, int attrtype, int attrlen)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">reserve room for attribute on the skb  <a href="#gab738cbc916a17baca88aeed2e67dddc2"></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__attr.html#ga8b3964330f885da7f204d5e4609e4761">nla_put</a> (struct nl_msg *n, int attrtype, int attrlen, const void *data)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a netlink attribute to a netlink message.  <a href="#ga8b3964330f885da7f204d5e4609e4761"></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__attr.html#gafe7bad603c92ecee0dfc0cc112dd1182">nla_put_nested</a> (struct nl_msg *n, int attrtype, struct nl_msg *nested)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a nested netlink attribute to a netlink message.  <a href="#gafe7bad603c92ecee0dfc0cc112dd1182"></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__attr.html#ga14cf4e429de0cb05f37d4e1489914b28">nla_put_u8</a> (struct nl_msg *n, int attrtype, uint8_t value)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a u16 netlink attribute to a netlink message.  <a href="#ga14cf4e429de0cb05f37d4e1489914b28"></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__attr.html#gaf44eb15a7becdfb2833a4bf1b5cd8571">nla_put_u16</a> (struct nl_msg *n, int attrtype, uint16_t value)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a u16 netlink attribute to a netlink message.  <a href="#gaf44eb15a7becdfb2833a4bf1b5cd8571"></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__attr.html#ga9891f766dcebe6bdb2ce86f021c6f6e6">nla_put_u32</a> (struct nl_msg *n, int attrtype, uint32_t value)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a u32 netlink attribute to a netlink message.  <a href="#ga9891f766dcebe6bdb2ce86f021c6f6e6"></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__attr.html#gade5cf81c340ddb0656842bb554f3cbfe">nla_put_u64</a> (struct nl_msg *n, int attrtype, uint64_t value)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a u64 netlink attribute to a netlink message.  <a href="#gade5cf81c340ddb0656842bb554f3cbfe"></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__attr.html#gacf85c1c8becd42e29f03670553b6e2f3">nla_put_string</a> (struct nl_msg *n, int attrtype, const char *str)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a string netlink attribute to a netlink message.  <a href="#gacf85c1c8becd42e29f03670553b6e2f3"></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__attr.html#ga669fcc00e7114fb8f7d800a8b48ff0a9">nla_put_flag</a> (struct nl_msg *n, int attrtype)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a flag netlink attribute to a netlink message.  <a href="#ga669fcc00e7114fb8f7d800a8b48ff0a9"></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__attr.html#ga80f366ccf41b1820c7faf95c76b2d718">nla_put_msecs</a> (struct nl_msg *n, int attrtype, unsigned long msecs)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a msecs netlink attribute to a netlink message.  <a href="#ga80f366ccf41b1820c7faf95c76b2d718"></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__attr.html#gad07458aa26ae9a430fb9ff8d444b526d">nla_put_data</a> (struct nl_msg *n, int attrtype, struct nl_data *data)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add an abstract data netlink attribute to a netlink message.  <a href="#gad07458aa26ae9a430fb9ff8d444b526d"></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__attr.html#gafd639c95cec147ae3b7dd9717a66e339">nla_put_addr</a> (struct nl_msg *n, int attrtype, struct nl_addr *addr)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add an abstract address netlink attribute to a netlink message.  <a href="#gafd639c95cec147ae3b7dd9717a66e339"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Attribute Nesting</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct nlattr *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga18640b6320b8959bb586fa2ca456130c">nla_nest_start</a> (struct nl_msg *n, int attrtype)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Start a new level of nested attributes.  <a href="#ga18640b6320b8959bb586fa2ca456130c"></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__attr.html#ga067f9ada74902c02d97c725a47f590b7">nla_nest_end</a> (struct nl_msg *n, struct nlattr *start)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Finalize nesting of attributes.  <a href="#ga067f9ada74902c02d97c725a47f590b7"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Attribute Reading</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#gabda0290a8b26cc577c2c5cefa814aeac">nla_get_u32</a> (struct nlattr *nla)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Return payload of u32 attribute.  <a href="#gabda0290a8b26cc577c2c5cefa814aeac"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga60c1be303721d4a39ad810876a13d304">nla_get_u16</a> (struct nlattr *nla)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Return payload of u16 attribute.  <a href="#ga60c1be303721d4a39ad810876a13d304"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga9ca4618a38f1567b1e42b1f21be887c9">nla_get_u8</a> (struct nlattr *nla)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Return payload of u8 attribute.  <a href="#ga9ca4618a38f1567b1e42b1f21be887c9"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga517d3ae28480ef44fec7b1e3d2fb29e6">nla_get_u64</a> (struct nlattr *nla)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Return payload of u64 attribute.  <a href="#ga517d3ae28480ef44fec7b1e3d2fb29e6"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga99baaa7c85d04eaece8f5eea34d8e2e9">nla_get_string</a> (struct nlattr *nla)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">return payload of string attribute  <a href="#ga99baaa7c85d04eaece8f5eea34d8e2e9"></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__attr.html#ga7ca9e726c046a2953aecf22bc9cece0a">nla_get_flag</a> (struct nlattr *nla)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Return payload of flag attribute.  <a href="#ga7ca9e726c046a2953aecf22bc9cece0a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#gad785952a48597a2fafc6268ac999afe8">nla_get_msecs</a> (struct nlattr *nla)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Return payload of msecs attribute.  <a href="#gad785952a48597a2fafc6268ac999afe8"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct nl_addr *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga98a5ac1eefea9266cf46c91b9a9867f3">nla_get_addr</a> (struct nlattr *nla, int family)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Return payload of address attribute.  <a href="#ga98a5ac1eefea9266cf46c91b9a9867f3"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct nl_data *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga33a5aef23c5d26c8247632ed1f167068">nla_get_data</a> (struct nlattr *nla)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Return payload of abstract data attribute.  <a href="#ga33a5aef23c5d26c8247632ed1f167068"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Validation Policy Types</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom">{ <br/>
&#160;&#160;<a class="el" href="group__attr.html#gga06fc87d81c62e9abb8790b6e5713c55ba3050acbc4faecec82dff1038c7e65d21">NLA_UNSPEC</a>, 
<a class="el" href="group__attr.html#gga06fc87d81c62e9abb8790b6e5713c55ba5e9fb615f67cd1b0232f82f978d76b39">NLA_U8</a>, 
<a class="el" href="group__attr.html#gga06fc87d81c62e9abb8790b6e5713c55ba8ca718be156e8f388cbcbc4c3d1d874d">NLA_U16</a>, 
<a class="el" href="group__attr.html#gga06fc87d81c62e9abb8790b6e5713c55babddb836025b456b06b025c293bff6dc8">NLA_U32</a>, 
<br/>
&#160;&#160;<a class="el" href="group__attr.html#gga06fc87d81c62e9abb8790b6e5713c55ba210e5e3c0d9281fbe9481092ba2ef201">NLA_U64</a>, 
<a class="el" href="group__attr.html#gga06fc87d81c62e9abb8790b6e5713c55ba284d1eafd6d5d99cedaff3cd5f5a8378">NLA_STRING</a>, 
<a class="el" href="group__attr.html#gga06fc87d81c62e9abb8790b6e5713c55ba8ad0bfef5a11304edf6a95971647ae0e">NLA_FLAG</a>, 
<a class="el" href="group__attr.html#gga06fc87d81c62e9abb8790b6e5713c55ba47d87c1054ef3284540a5a85a3cd159e">NLA_MSECS</a>, 
<br/>
&#160;&#160;<a class="el" href="group__attr.html#gga06fc87d81c62e9abb8790b6e5713c55ba925c06a260a9ffaef80ee4aa13738e19">NLA_NESTED</a>, 
<b>__NLA_TYPE_MAX</b>
<br/>
 }</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight"><p>Standard attribute types to specify validation policy. </p>
 <a href="group__attr.html#ga06fc87d81c62e9abb8790b6e5713c55b">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5d5983c9eeaf9fb343fc1463bd7c5e4c"></a><!-- doxytag: member="attr::NLA_TYPE_MAX" ref="ga5d5983c9eeaf9fb343fc1463bd7c5e4c" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga5d5983c9eeaf9fb343fc1463bd7c5e4c">NLA_TYPE_MAX</a>&#160;&#160;&#160;(__NLA_TYPE_MAX - 1)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum netlink validation policy type. <br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Attribute Construction (Exception Based)</h2></td></tr>
<tr><td colspan="2"><a class="anchor" id="amgrpba7a32fb551f502e451a22e872969c5c"></a>All these functions jump to nla_put_failure in case of a failure instead of returning an error code. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#gab63953375be738011e7c9d2c6de74a45">NLA_PUT</a>(n, attrtype, attrlen, data)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a netlink attribute to a netlink message.  <a href="#gab63953375be738011e7c9d2c6de74a45"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga2598cc7bf21a46b13a16c237695d8c18">NLA_PUT_TYPE</a>(n, type, attrtype, value)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a basic netlink attribute to a netlink message.  <a href="#ga2598cc7bf21a46b13a16c237695d8c18"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga9df4c7be2d17ef301e5218b622bd984d">NLA_PUT_U8</a>(n, attrtype, value)&#160;&#160;&#160;NLA_PUT_TYPE(n, uint8_t, attrtype, value)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a u8 netlink attribute to a netlink message.  <a href="#ga9df4c7be2d17ef301e5218b622bd984d"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#gadb79e3aff32c89efb5564dd4d595f277">NLA_PUT_U16</a>(n, attrtype, value)&#160;&#160;&#160;NLA_PUT_TYPE(n, uint16_t, attrtype, value)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a u16 netlink attribute to a netlink message.  <a href="#gadb79e3aff32c89efb5564dd4d595f277"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga61c87db4b2aa6c7b31e733d1ec684efb">NLA_PUT_U32</a>(n, attrtype, value)&#160;&#160;&#160;NLA_PUT_TYPE(n, uint32_t, attrtype, value)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a u32 netlink attribute to a netlink message.  <a href="#ga61c87db4b2aa6c7b31e733d1ec684efb"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga5cf6fbd42288ae364ed25ce2655b8fd0">NLA_PUT_U64</a>(n, attrtype, value)&#160;&#160;&#160;NLA_PUT_TYPE(n, uint64_t, attrtype, value)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a u64 netlink attribute to a netlink message.  <a href="#ga5cf6fbd42288ae364ed25ce2655b8fd0"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga7f2397f226e4561d195611572021b714">NLA_PUT_STRING</a>(n, attrtype, value)&#160;&#160;&#160;NLA_PUT(n, attrtype, strlen(value) + 1, value)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a character string netlink attribute to a netlink message.  <a href="#ga7f2397f226e4561d195611572021b714"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga55c58e9fe7005b101965bb7c01de7a51">NLA_PUT_FLAG</a>(n, attrtype)&#160;&#160;&#160;NLA_PUT(n, attrtype, 0, NULL)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a flag netlink attribute to a netlink message.  <a href="#ga55c58e9fe7005b101965bb7c01de7a51"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#gac2886b9c176a183981cf45945b849948">NLA_PUT_MSECS</a>(n, attrtype, msecs)&#160;&#160;&#160;NLA_PUT_U64(n, attrtype, msecs)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a msecs netlink attribute to a netlink message.  <a href="#gac2886b9c176a183981cf45945b849948"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga34038d75b33942a151a0e91791629a76">NLA_PUT_ADDR</a>(n, attrtype, addr)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a address attribute to a netlink message.  <a href="#ga34038d75b33942a151a0e91791629a76"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Iterators</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#ga7a262955c3fb8eab3158bd07180fbc2c">nla_for_each_attr</a>(pos, head, len, rem)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">iterate over a stream of attributes  <a href="#ga7a262955c3fb8eab3158bd07180fbc2c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__attr.html#gac2634af90bda4393105b6323da2044fa">nla_for_each_nested</a>(pos, nla, rem)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">iterate over a stream of nested attributes  <a href="#gac2634af90bda4393105b6323da2044fa"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<dl class="user"><dt><b>0) Introduction</b></dt><dd>Netlink attributes are chained together following each other: <div class="fragment"><pre class="fragment">    &lt;------- <a class="code" href="group__attr.html#gafc7e89c7d72952510eff46f96761e3ea" title="total length of attribute including padding">nla_total_size</a>(payload) -------&gt;
    &lt;---- <a class="code" href="group__attr.html#ga894e1ded50d0d62748a2b9b5f7195938" title="length of attribute not including padding">nla_attr_size</a>(payload) -----&gt;
   +----------+- - -+- - - - - - - - - +- - -+-------- - -
   |  Header  | Pad |     Payload      | Pad |  Header
   +----------+- - -+- - - - - - - - - +- - -+-------- - -
                     &lt;- <a class="code" href="group__attr.html#gac5a7705797946fa9c0775997bb8d130b" title="length of payload">nla_len</a>(nla) -&gt;      ^
   <a class="code" href="group__attr.html#gaf39d6bbd2be1fc2de30b6b7d079a5fce" title="head of payload">nla_data</a>(nla)----^                        |
   <a class="code" href="group__attr.html#ga68b6fbaa58b11804df8af489b79fbab7" title="next netlink attribte in attribute stream">nla_next</a>(nla)-----------------------------<span class="stringliteral">&#39;</span>
</pre></div></dd></dl>
<dl class="user"><dt><b></b></dt><dd>The attribute header and payload must be aligned properly: <div class="fragment"><pre class="fragment">  &lt;------- NLA_HDRLEN ------&gt; &lt;-- NLA_ALIGN(payload)--&gt;
 +---------------------+- - -+- - - - - - - - - -+- - -+
 |        Header       | Pad |     Payload       | Pad |
 |   (<span class="keyword">struct </span>nlattr)   | ing |                   | ing |
 +---------------------+- - -+- - - - - - - - - -+- - -+
  &lt;-------------- nlattr-&gt;<a class="code" href="group__attr.html#gac5a7705797946fa9c0775997bb8d130b" title="length of payload">nla_len</a> --------------&gt;
</pre></div></dd></dl>
<dl class="user"><dt><b>Nested TLVs:</b></dt><dd>Nested TLVs are an array of TLVs nested into another TLV. This can be useful to allow subsystems to have their own formatting rules without the need to make the underlying layer be aware of it. It can also be useful to transfer arrays, lists and flattened trees. <div class="fragment"><pre class="fragment">  &lt;-------------------- NLA_ALIGN(...) -------------------&gt;
 +---------------+- - - - - - - - - - - - - - - - - -+- - -+
 |               |+---------+---------+- - -+-------+|     |
 |  TLV Header   ||  TLV 1  |  TLV 2  |     | TLV n || Pad |
 |               |+---------+---------+- - -+-------+|     |
 +---------------+- - - - - - - - - - - - - - - - - -+- - -+
                  &lt;--------- <a class="code" href="group__attr.html#gaf39d6bbd2be1fc2de30b6b7d079a5fce" title="head of payload">nla_data</a>(nla) ---------&gt;
</pre></div></dd></dl>
<dl class="user"><dt><b>1) Constructing a message with attributes</b></dt><dd><div class="fragment"><pre class="fragment"> <span class="keywordtype">int</span> param1 = 10;
 <span class="keywordtype">char</span> *param2 = <span class="stringliteral">&quot;parameter text&quot;</span>;

 <span class="keyword">struct </span>nl_msg *msg = <a class="code" href="group__msg.html#ga89c936bdf5e73455bb1640a0eb8a020d" title="Allocate a new netlink message with the default maximum payload size.">nlmsg_alloc</a>();
 <a class="code" href="group__attr.html#ga9891f766dcebe6bdb2ce86f021c6f6e6" title="Add a u32 netlink attribute to a netlink message.">nla_put_u32</a>(msg, 1, param1);
 <a class="code" href="group__attr.html#gacf85c1c8becd42e29f03670553b6e2f3" title="Add a string netlink attribute to a netlink message.">nla_put_string</a>(msg, 2, param2);
 
 <a class="code" href="group__nl.html#ga01a2aad82350f867e704d5c696438b60" title="Send netlink message and check &amp;amp; extend header values as needed.">nl_send_auto_complete</a>(handle, nl_msg_get(msg));
 <a class="code" href="group__msg.html#ga138ba9bee70553f9fbe7143deacad48c" title="Free a netlink message.">nlmsg_free</a>(msg);
</pre></div></dd></dl>
<dl class="user"><dt><b>2) Constructing nested attributes</b></dt><dd><div class="fragment"><pre class="fragment"> <span class="keyword">struct </span>nl_msg * nested_config(<span class="keywordtype">void</span>)
 {
        <span class="keywordtype">int</span> a = 5, <span class="keywordtype">int</span> b = 10;
        <span class="keyword">struct </span>nl_msg *n = <a class="code" href="group__msg.html#ga89c936bdf5e73455bb1640a0eb8a020d" title="Allocate a new netlink message with the default maximum payload size.">nlmsg_alloc</a>();
        <a class="code" href="group__attr.html#ga9891f766dcebe6bdb2ce86f021c6f6e6" title="Add a u32 netlink attribute to a netlink message.">nla_put_u32</a>(n, 10, a);
        <a class="code" href="group__attr.html#ga9891f766dcebe6bdb2ce86f021c6f6e6" title="Add a u32 netlink attribute to a netlink message.">nla_put_u32</a>(n, 20, b);
        <span class="keywordflow">return</span> n;
 }

 ...
 <span class="keyword">struct </span>nl_msg *m = <a class="code" href="group__msg.html#ga89c936bdf5e73455bb1640a0eb8a020d" title="Allocate a new netlink message with the default maximum payload size.">nlmsg_alloc</a>();
 <span class="keyword">struct </span>nl_msg *nest = nested_config();
 <a class="code" href="group__attr.html#gafe7bad603c92ecee0dfc0cc112dd1182" title="Add a nested netlink attribute to a netlink message.">nla_put_nested</a>(m, 1, nest);

 <a class="code" href="group__nl.html#ga01a2aad82350f867e704d5c696438b60" title="Send netlink message and check &amp;amp; extend header values as needed.">nl_send_auto_complete</a>(handle, nl_msg_get(m));
 <a class="code" href="group__msg.html#ga138ba9bee70553f9fbe7143deacad48c" title="Free a netlink message.">nlmsg_free</a>(nest);
 <a class="code" href="group__msg.html#ga138ba9bee70553f9fbe7143deacad48c" title="Free a netlink message.">nlmsg_free</a>(m);
</pre></div> </dd></dl>
<hr/><h2>Define Documentation</h2>
<a class="anchor" id="gab63953375be738011e7c9d2c6de74a45"></a><!-- doxytag: member="attr.h::NLA_PUT" ref="gab63953375be738011e7c9d2c6de74a45" args="(n, attrtype, attrlen, data)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define NLA_PUT</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">n, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">attrtype, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">attrlen, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">data&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \
                <span class="keywordflow">if</span> (<a class="code" href="group__attr.html#ga8b3964330f885da7f204d5e4609e4761" title="Add a netlink attribute to a netlink message.">nla_put</a>(n, attrtype, attrlen, data) &lt; 0) \
                        <span class="keywordflow">goto</span> nla_put_failure; \
        } <span class="keywordflow">while</span>(0)
</pre></div><dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">attrlen</td><td>length of attribute payload </td></tr>
    <tr><td class="paramname">data</td><td>head of attribute payload </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8h_source.html#l00157">157</a> of file <a class="el" href="attr_8h_source.html">attr.h</a>.</p>

</div>
</div>
<a class="anchor" id="ga2598cc7bf21a46b13a16c237695d8c18"></a><!-- doxytag: member="attr.h::NLA_PUT_TYPE" ref="ga2598cc7bf21a46b13a16c237695d8c18" args="(n, type, attrtype, value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define NLA_PUT_TYPE</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">n, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">type, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">attrtype, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">value&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \
                type __tmp = value; \
                <a class="code" href="group__attr.html#gab63953375be738011e7c9d2c6de74a45" title="Add a netlink attribute to a netlink message.">NLA_PUT</a>(n, attrtype, <span class="keyword">sizeof</span>(type), &amp;__tmp); \
        } <span class="keywordflow">while</span>(0)
</pre></div><dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">type</td><td>atomic type </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">value</td><td>head of attribute payload </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8h_source.html#l00171">171</a> of file <a class="el" href="attr_8h_source.html">attr.h</a>.</p>

</div>
</div>
<a class="anchor" id="ga7a262955c3fb8eab3158bd07180fbc2c"></a><!-- doxytag: member="attr.h::nla_for_each_attr" ref="ga7a262955c3fb8eab3158bd07180fbc2c" args="(pos, head, len, rem)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define nla_for_each_attr</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">pos, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">head, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">len, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">rem&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">for</span> (pos = head, rem = len; \
             <a class="code" href="group__attr.html#ga5e4378d7681e9477e8e364542187d07a" title="check if the netlink attribute fits into the remaining bytes">nla_ok</a>(pos, rem); \
             pos = <a class="code" href="group__attr.html#ga68b6fbaa58b11804df8af489b79fbab7" title="next netlink attribte in attribute stream">nla_next</a>(pos, &amp;(rem)))
</pre></div><dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">pos</td><td>loop counter, set to current attribute </td></tr>
    <tr><td class="paramname">head</td><td>head of attribute stream </td></tr>
    <tr><td class="paramname">len</td><td>length of attribute stream </td></tr>
    <tr><td class="paramname">rem</td><td>initialized to len, holds bytes currently remaining in stream </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8h_source.html#l00264">264</a> of file <a class="el" href="attr_8h_source.html">attr.h</a>.</p>

<p>Referenced by <a class="el" href="attr_8c_source.html#l00353">nla_find()</a>, <a class="el" href="attr_8c_source.html#l00262">nla_parse()</a>, and <a class="el" href="attr_8c_source.html#l00328">nla_validate()</a>.</p>

</div>
</div>
<a class="anchor" id="gac2634af90bda4393105b6323da2044fa"></a><!-- doxytag: member="attr.h::nla_for_each_nested" ref="gac2634af90bda4393105b6323da2044fa" args="(pos, nla, rem)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define nla_for_each_nested</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">pos, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">nla, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">rem&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">for</span> (pos = <a class="code" href="group__attr.html#gaf39d6bbd2be1fc2de30b6b7d079a5fce" title="head of payload">nla_data</a>(nla), rem = <a class="code" href="group__attr.html#gac5a7705797946fa9c0775997bb8d130b" title="length of payload">nla_len</a>(nla); \
             <a class="code" href="group__attr.html#ga5e4378d7681e9477e8e364542187d07a" title="check if the netlink attribute fits into the remaining bytes">nla_ok</a>(pos, rem); \
             pos = <a class="code" href="group__attr.html#ga68b6fbaa58b11804df8af489b79fbab7" title="next netlink attribte in attribute stream">nla_next</a>(pos, &amp;(rem)))
</pre></div><dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">pos</td><td>loop counter, set to current attribute </td></tr>
    <tr><td class="paramname">nla</td><td>attribute containing the nested attributes </td></tr>
    <tr><td class="paramname">rem</td><td>initialized to len, holds bytes currently remaining in stream </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8h_source.html#l00276">276</a> of file <a class="el" href="attr_8h_source.html">attr.h</a>.</p>

</div>
</div>
<a class="anchor" id="ga9df4c7be2d17ef301e5218b622bd984d"></a><!-- doxytag: member="attr.h::NLA_PUT_U8" ref="ga9df4c7be2d17ef301e5218b622bd984d" args="(n, attrtype, value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define NLA_PUT_U8</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">n, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">attrtype, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">value&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;NLA_PUT_TYPE(n, uint8_t, attrtype, value)</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">value</td><td>numeric value </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8h_source.html#l00183">183</a> of file <a class="el" href="attr_8h_source.html">attr.h</a>.</p>

<p>Referenced by <a class="el" href="link_8c_source.html#l00965">rtnl_link_build_change_request()</a>.</p>

</div>
</div>
<a class="anchor" id="gadb79e3aff32c89efb5564dd4d595f277"></a><!-- doxytag: member="attr.h::NLA_PUT_U16" ref="gadb79e3aff32c89efb5564dd4d595f277" args="(n, attrtype, value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define NLA_PUT_U16</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">n, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">attrtype, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">value&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;NLA_PUT_TYPE(n, uint16_t, attrtype, value)</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">value</td><td>numeric value </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8h_source.html#l00192">192</a> of file <a class="el" href="attr_8h_source.html">attr.h</a>.</p>

</div>
</div>
<a class="anchor" id="ga61c87db4b2aa6c7b31e733d1ec684efb"></a><!-- doxytag: member="attr.h::NLA_PUT_U32" ref="ga61c87db4b2aa6c7b31e733d1ec684efb" args="(n, attrtype, value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define NLA_PUT_U32</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">n, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">attrtype, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">value&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;NLA_PUT_TYPE(n, uint32_t, attrtype, value)</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">value</td><td>numeric value </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8h_source.html#l00201">201</a> of file <a class="el" href="attr_8h_source.html">attr.h</a>.</p>

<p>Referenced by <a class="el" href="link_8c_source.html#l00965">rtnl_link_build_change_request()</a>.</p>

</div>
</div>
<a class="anchor" id="ga5cf6fbd42288ae364ed25ce2655b8fd0"></a><!-- doxytag: member="attr.h::NLA_PUT_U64" ref="ga5cf6fbd42288ae364ed25ce2655b8fd0" args="(n, attrtype, value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define NLA_PUT_U64</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">n, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">attrtype, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">value&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;NLA_PUT_TYPE(n, uint64_t, attrtype, value)</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">value</td><td>numeric value </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8h_source.html#l00210">210</a> of file <a class="el" href="attr_8h_source.html">attr.h</a>.</p>

</div>
</div>
<a class="anchor" id="ga7f2397f226e4561d195611572021b714"></a><!-- doxytag: member="attr.h::NLA_PUT_STRING" ref="ga7f2397f226e4561d195611572021b714" args="(n, attrtype, value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define NLA_PUT_STRING</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">n, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">attrtype, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">value&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;NLA_PUT(n, attrtype, strlen(value) + 1, value)</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">value</td><td>character string </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8h_source.html#l00219">219</a> of file <a class="el" href="attr_8h_source.html">attr.h</a>.</p>

<p>Referenced by <a class="el" href="link_8c_source.html#l00965">rtnl_link_build_change_request()</a>.</p>

</div>
</div>
<a class="anchor" id="ga55c58e9fe7005b101965bb7c01de7a51"></a><!-- doxytag: member="attr.h::NLA_PUT_FLAG" ref="ga55c58e9fe7005b101965bb7c01de7a51" args="(n, attrtype)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define NLA_PUT_FLAG</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">n, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">attrtype&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;NLA_PUT(n, attrtype, 0, NULL)</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8h_source.html#l00227">227</a> of file <a class="el" href="attr_8h_source.html">attr.h</a>.</p>

</div>
</div>
<a class="anchor" id="gac2886b9c176a183981cf45945b849948"></a><!-- doxytag: member="attr.h::NLA_PUT_MSECS" ref="gac2886b9c176a183981cf45945b849948" args="(n, attrtype, msecs)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define NLA_PUT_MSECS</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">n, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">attrtype, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">msecs&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;NLA_PUT_U64(n, attrtype, msecs)</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">msecs</td><td>numeric value in micro seconds </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8h_source.html#l00236">236</a> of file <a class="el" href="attr_8h_source.html">attr.h</a>.</p>

</div>
</div>
<a class="anchor" id="ga34038d75b33942a151a0e91791629a76"></a><!-- doxytag: member="attr.h::NLA_PUT_ADDR" ref="ga34038d75b33942a151a0e91791629a76" args="(n, attrtype, addr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define NLA_PUT_ADDR</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">n, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">attrtype, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">addr&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="group__attr.html#gab63953375be738011e7c9d2c6de74a45" title="Add a netlink attribute to a netlink message.">NLA_PUT</a>(n, attrtype, <a class="code" href="group__addr.html#ga6c517a330f9fd12db0844f7ac0c72134" title="Get length of binary address of abstract address object.">nl_addr_get_len</a>(addr), \
                <a class="code" href="group__addr.html#ga7721da4e82e80e8b29960405539ca72d" title="Get binary address of abstract address object.">nl_addr_get_binary_addr</a>(addr))
</pre></div><dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">addr</td><td>abstract address object </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8h_source.html#l00245">245</a> of file <a class="el" href="attr_8h_source.html">attr.h</a>.</p>

<p>Referenced by <a class="el" href="link_8c_source.html#l00965">rtnl_link_build_change_request()</a>.</p>

</div>
</div>
<hr/><h2>Enumeration Type Documentation</h2>
<a class="anchor" id="ga06fc87d81c62e9abb8790b6e5713c55b"></a><!-- doxytag: member="attr.h::@0" ref="ga06fc87d81c62e9abb8790b6e5713c55b" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">anonymous enum</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="gga06fc87d81c62e9abb8790b6e5713c55ba3050acbc4faecec82dff1038c7e65d21"></a><!-- doxytag: member="NLA_UNSPEC" ref="gga06fc87d81c62e9abb8790b6e5713c55ba3050acbc4faecec82dff1038c7e65d21" args="" -->NLA_UNSPEC</em>&nbsp;</td><td>
<p>Unspecified type. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga06fc87d81c62e9abb8790b6e5713c55ba5e9fb615f67cd1b0232f82f978d76b39"></a><!-- doxytag: member="NLA_U8" ref="gga06fc87d81c62e9abb8790b6e5713c55ba5e9fb615f67cd1b0232f82f978d76b39" args="" -->NLA_U8</em>&nbsp;</td><td>
<p>8bit integer </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga06fc87d81c62e9abb8790b6e5713c55ba8ca718be156e8f388cbcbc4c3d1d874d"></a><!-- doxytag: member="NLA_U16" ref="gga06fc87d81c62e9abb8790b6e5713c55ba8ca718be156e8f388cbcbc4c3d1d874d" args="" -->NLA_U16</em>&nbsp;</td><td>
<p>16bit integer </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga06fc87d81c62e9abb8790b6e5713c55babddb836025b456b06b025c293bff6dc8"></a><!-- doxytag: member="NLA_U32" ref="gga06fc87d81c62e9abb8790b6e5713c55babddb836025b456b06b025c293bff6dc8" args="" -->NLA_U32</em>&nbsp;</td><td>
<p>32bit integer </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga06fc87d81c62e9abb8790b6e5713c55ba210e5e3c0d9281fbe9481092ba2ef201"></a><!-- doxytag: member="NLA_U64" ref="gga06fc87d81c62e9abb8790b6e5713c55ba210e5e3c0d9281fbe9481092ba2ef201" args="" -->NLA_U64</em>&nbsp;</td><td>
<p>64bit integer </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga06fc87d81c62e9abb8790b6e5713c55ba284d1eafd6d5d99cedaff3cd5f5a8378"></a><!-- doxytag: member="NLA_STRING" ref="gga06fc87d81c62e9abb8790b6e5713c55ba284d1eafd6d5d99cedaff3cd5f5a8378" args="" -->NLA_STRING</em>&nbsp;</td><td>
<p>character string </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga06fc87d81c62e9abb8790b6e5713c55ba8ad0bfef5a11304edf6a95971647ae0e"></a><!-- doxytag: member="NLA_FLAG" ref="gga06fc87d81c62e9abb8790b6e5713c55ba8ad0bfef5a11304edf6a95971647ae0e" args="" -->NLA_FLAG</em>&nbsp;</td><td>
<p>flag </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga06fc87d81c62e9abb8790b6e5713c55ba47d87c1054ef3284540a5a85a3cd159e"></a><!-- doxytag: member="NLA_MSECS" ref="gga06fc87d81c62e9abb8790b6e5713c55ba47d87c1054ef3284540a5a85a3cd159e" args="" -->NLA_MSECS</em>&nbsp;</td><td>
<p>micro seconds (64bit) </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga06fc87d81c62e9abb8790b6e5713c55ba925c06a260a9ffaef80ee4aa13738e19"></a><!-- doxytag: member="NLA_NESTED" ref="gga06fc87d81c62e9abb8790b6e5713c55ba925c06a260a9ffaef80ee4aa13738e19" args="" -->NLA_NESTED</em>&nbsp;</td><td>
<p>nested attributes </p>
</td></tr>
</table>
</dd>
</dl>

<p>Definition at line <a class="el" href="attr_8h_source.html#l00035">35</a> of file <a class="el" href="attr_8h_source.html">attr.h</a>.</p>
<div class="fragment"><pre class="fragment">     {
        <a class="code" href="group__attr.html#gga06fc87d81c62e9abb8790b6e5713c55ba3050acbc4faecec82dff1038c7e65d21" title="Unspecified type.">NLA_UNSPEC</a>,     <span class="comment">/**&lt; Unspecified type */</span>
        <a class="code" href="group__attr.html#gga06fc87d81c62e9abb8790b6e5713c55ba5e9fb615f67cd1b0232f82f978d76b39" title="8bit integer">NLA_U8</a>,         <span class="comment">/**&lt; 8bit integer */</span>
        <a class="code" href="group__attr.html#gga06fc87d81c62e9abb8790b6e5713c55ba8ca718be156e8f388cbcbc4c3d1d874d" title="16bit integer">NLA_U16</a>,        <span class="comment">/**&lt; 16bit integer */</span>
        <a class="code" href="group__attr.html#gga06fc87d81c62e9abb8790b6e5713c55babddb836025b456b06b025c293bff6dc8" title="32bit integer">NLA_U32</a>,        <span class="comment">/**&lt; 32bit integer */</span>
        <a class="code" href="group__attr.html#gga06fc87d81c62e9abb8790b6e5713c55ba210e5e3c0d9281fbe9481092ba2ef201" title="64bit integer">NLA_U64</a>,        <span class="comment">/**&lt; 64bit integer */</span>
        <a class="code" href="group__attr.html#gga06fc87d81c62e9abb8790b6e5713c55ba284d1eafd6d5d99cedaff3cd5f5a8378" title="character string">NLA_STRING</a>,     <span class="comment">/**&lt; character string */</span>
        <a class="code" href="group__attr.html#gga06fc87d81c62e9abb8790b6e5713c55ba8ad0bfef5a11304edf6a95971647ae0e" title="flag">NLA_FLAG</a>,       <span class="comment">/**&lt; flag */</span>
        <a class="code" href="group__attr.html#gga06fc87d81c62e9abb8790b6e5713c55ba47d87c1054ef3284540a5a85a3cd159e" title="micro seconds (64bit)">NLA_MSECS</a>,      <span class="comment">/**&lt; micro seconds (64bit) */</span>
        <a class="code" href="group__attr.html#gga06fc87d81c62e9abb8790b6e5713c55ba925c06a260a9ffaef80ee4aa13738e19" title="nested attributes">NLA_NESTED</a>,     <span class="comment">/**&lt; nested attributes */</span>
        __NLA_TYPE_MAX,
};
</pre></div>
</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="ga894e1ded50d0d62748a2b9b5f7195938"></a><!-- doxytag: member="attr.c::nla_attr_size" ref="ga894e1ded50d0d62748a2b9b5f7195938" args="(int payload)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_attr_size </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>payload</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">payload</td><td>length of payload </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00108">108</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>Referenced by <a class="el" href="attr_8c_source.html#l00126">nla_padlen()</a>, <a class="el" href="attr_8c_source.html#l00475">nla_reserve()</a>, and <a class="el" href="attr_8c_source.html#l00117">nla_total_size()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> NLA_HDRLEN + payload;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gafc7e89c7d72952510eff46f96761e3ea"></a><!-- doxytag: member="attr.c::nla_total_size" ref="gafc7e89c7d72952510eff46f96761e3ea" args="(int payload)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_total_size </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>payload</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">payload</td><td>length of payload </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00117">117</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00108">nla_attr_size()</a>.</p>

<p>Referenced by <a class="el" href="attr_8c_source.html#l00126">nla_padlen()</a>, and <a class="el" href="attr_8c_source.html#l00475">nla_reserve()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> NLA_ALIGN(<a class="code" href="group__attr.html#ga894e1ded50d0d62748a2b9b5f7195938" title="length of attribute not including padding">nla_attr_size</a>(payload));
}
</pre></div>
</div>
</div>
<a class="anchor" id="gae24ddf8c4bb186eaaed15ecb2d08b816"></a><!-- doxytag: member="attr.c::nla_padlen" ref="gae24ddf8c4bb186eaaed15ecb2d08b816" args="(int payload)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_padlen </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>payload</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">payload</td><td>length of payload </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00126">126</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00108">nla_attr_size()</a>, and <a class="el" href="attr_8c_source.html#l00117">nla_total_size()</a>.</p>

<p>Referenced by <a class="el" href="attr_8c_source.html#l00475">nla_reserve()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__attr.html#gafc7e89c7d72952510eff46f96761e3ea" title="total length of attribute including padding">nla_total_size</a>(payload) - <a class="code" href="group__attr.html#ga894e1ded50d0d62748a2b9b5f7195938" title="length of attribute not including padding">nla_attr_size</a>(payload);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga4aa5611a0b84b217ee9a7dd2b0491128"></a><!-- doxytag: member="attr.c::nla_type" ref="ga4aa5611a0b84b217ee9a7dd2b0491128" args="(const struct nlattr *nla)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_type </td>
          <td>(</td>
          <td class="paramtype">const struct nlattr *&#160;</td>
          <td class="paramname"><em>nla</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">nla</td><td>netlink attribute </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00142">142</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>Referenced by <a class="el" href="attr_8c_source.html#l00353">nla_find()</a>, and <a class="el" href="attr_8c_source.html#l00262">nla_parse()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> nla-&gt;nla_type &amp; NLA_TYPE_MASK;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gaf39d6bbd2be1fc2de30b6b7d079a5fce"></a><!-- doxytag: member="attr.c::nla_data" ref="gaf39d6bbd2be1fc2de30b6b7d079a5fce" args="(const struct nlattr *nla)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void* nla_data </td>
          <td>(</td>
          <td class="paramtype">const struct nlattr *&#160;</td>
          <td class="paramname"><em>nla</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">nla</td><td>netlink attribute </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00151">151</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>Referenced by <a class="el" href="attr_8c_source.html#l00766">nla_get_addr()</a>, <a class="el" href="attr_8c_source.html#l00777">nla_get_data()</a>, <a class="el" href="attr_8c_source.html#l00734">nla_get_string()</a>, <a class="el" href="attr_8c_source.html#l00703">nla_get_u16()</a>, <a class="el" href="attr_8c_source.html#l00694">nla_get_u32()</a>, <a class="el" href="attr_8c_source.html#l00712">nla_get_u8()</a>, <a class="el" href="attr_8c_source.html#l00432">nla_memcmp()</a>, <a class="el" href="attr_8c_source.html#l00383">nla_memcpy()</a>, <a class="el" href="attr_8c_source.html#l00308">nla_parse_nested()</a>, <a class="el" href="attr_8c_source.html#l00512">nla_put()</a>, <a class="el" href="attr_8c_source.html#l00448">nla_strcmp()</a>, and <a class="el" href="attr_8c_source.html#l00408">nla_strlcpy()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> (<span class="keywordtype">char</span> *) nla + NLA_HDRLEN;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gac5a7705797946fa9c0775997bb8d130b"></a><!-- doxytag: member="attr.c::nla_len" ref="gac5a7705797946fa9c0775997bb8d130b" args="(const struct nlattr *nla)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_len </td>
          <td>(</td>
          <td class="paramtype">const struct nlattr *&#160;</td>
          <td class="paramname"><em>nla</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">nla</td><td>netlink attribute </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00160">160</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>Referenced by <a class="el" href="attr_8c_source.html#l00766">nla_get_addr()</a>, <a class="el" href="attr_8c_source.html#l00777">nla_get_data()</a>, <a class="el" href="attr_8c_source.html#l00432">nla_memcmp()</a>, <a class="el" href="attr_8c_source.html#l00383">nla_memcpy()</a>, <a class="el" href="attr_8c_source.html#l00308">nla_parse_nested()</a>, <a class="el" href="attr_8c_source.html#l00448">nla_strcmp()</a>, and <a class="el" href="attr_8c_source.html#l00408">nla_strlcpy()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> nla-&gt;nla_len - NLA_HDRLEN;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga5e4378d7681e9477e8e364542187d07a"></a><!-- doxytag: member="attr.c::nla_ok" ref="ga5e4378d7681e9477e8e364542187d07a" args="(const struct nlattr *nla, int remaining)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_ok </td>
          <td>(</td>
          <td class="paramtype">const struct nlattr *&#160;</td>
          <td class="paramname"><em>nla</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>remaining</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">nla</td><td>netlink attribute </td></tr>
    <tr><td class="paramname">remaining</td><td>number of bytes remaining in attribute stream </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00177">177</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> remaining &gt;= <span class="keyword">sizeof</span>(*nla) &amp;&amp;
               nla-&gt;nla_len &gt;= <span class="keyword">sizeof</span>(*nla) &amp;&amp;
               nla-&gt;nla_len &lt;= remaining;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga68b6fbaa58b11804df8af489b79fbab7"></a><!-- doxytag: member="attr.c::nla_next" ref="ga68b6fbaa58b11804df8af489b79fbab7" args="(const struct nlattr *nla, int *remaining)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nlattr* nla_next </td>
          <td>(</td>
          <td class="paramtype">const struct nlattr *&#160;</td>
          <td class="paramname"><em>nla</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&#160;</td>
          <td class="paramname"><em>remaining</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">nla</td><td>netlink attribute </td></tr>
    <tr><td class="paramname">remaining</td><td>number of bytes remaining in attribute stream</td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>the next netlink attribute in the attribute stream and decrements remaining by the size of the current attribute. </dd></dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00192">192</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">int</span> totlen = NLA_ALIGN(nla-&gt;nla_len);

        *remaining -= totlen;
        <span class="keywordflow">return</span> (<span class="keyword">struct</span> nlattr *) ((<span class="keywordtype">char</span> *) nla + totlen);
}
</pre></div>
</div>
</div>
<a class="anchor" id="gaa7ad544b5a93034602a442eb26cda92c"></a><!-- doxytag: member="attr.c::nla_parse" ref="gaa7ad544b5a93034602a442eb26cda92c" args="(struct nlattr *tb[], int maxtype, struct nlattr *head, int len, struct nla_policy *policy)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_parse </td>
          <td>(</td>
          <td class="paramtype">struct nlattr *&#160;</td>
          <td class="paramname"><em>tb</em>[], </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>maxtype</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct nlattr *&#160;</td>
          <td class="paramname"><em>head</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>len</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structnla__policy.html">nla_policy</a> *&#160;</td>
          <td class="paramname"><em>policy</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">tb</td><td>destination array with maxtype+1 elements </td></tr>
    <tr><td class="paramname">maxtype</td><td>maximum attribute type to be expected </td></tr>
    <tr><td class="paramname">head</td><td>head of attribute stream </td></tr>
    <tr><td class="paramname">len</td><td>length of attribute stream </td></tr>
    <tr><td class="paramname">policy</td><td>validation policy</td></tr>
  </table>
  </dd>
</dl>
<p>Parses a stream of attributes and stores a pointer to each attribute in the tb array accessable via the attribute type. Attributes with a type exceeding maxtype will be silently ignored for backwards compatibility reasons. policy may be set to NULL if no validation is required.</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="attr_8c_source.html#l00262">262</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8h_source.html#l00264">nla_for_each_attr</a>, and <a class="el" href="attr_8c_source.html#l00142">nla_type()</a>.</p>

<p>Referenced by <a class="el" href="attr_8c_source.html#l00308">nla_parse_nested()</a>, and <a class="el" href="msg_8c_source.html#l00319">nlmsg_parse()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nlattr *nla;
        <span class="keywordtype">int</span> rem, err;

        memset(tb, 0, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> nlattr *) * (maxtype + 1));

        <a class="code" href="group__attr.html#ga7a262955c3fb8eab3158bd07180fbc2c" title="iterate over a stream of attributes">nla_for_each_attr</a>(nla, head, len, rem) {
                <span class="keywordtype">int</span> type = <a class="code" href="group__attr.html#ga4aa5611a0b84b217ee9a7dd2b0491128" title="attribute type">nla_type</a>(nla);

                <span class="keywordflow">if</span> (type == 0) {
                        fprintf(stderr, <span class="stringliteral">&quot;Illegal nla-&gt;nla_type == 0\n&quot;</span>);
                        <span class="keywordflow">continue</span>;
                }

                <span class="keywordflow">if</span> (type &lt;= maxtype) {
                        <span class="keywordflow">if</span> (policy) {
                                err = validate_nla(nla, maxtype, policy);
                                <span class="keywordflow">if</span> (err &lt; 0)
                                        <span class="keywordflow">goto</span> errout;
                        }

                        tb[type] = nla;
                }
        }

        <span class="keywordflow">if</span> (rem &gt; 0)
                fprintf(stderr, <span class="stringliteral">&quot;netlink: %d bytes leftover after parsing &quot;</span>
                       <span class="stringliteral">&quot;attributes.\n&quot;</span>, rem);

        err = 0;
errout:
        <span class="keywordflow">return</span> err;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga974ec0720b2d863a5c65da868bcb7a6e"></a><!-- doxytag: member="attr.c::nla_parse_nested" ref="ga974ec0720b2d863a5c65da868bcb7a6e" args="(struct nlattr *tb[], int maxtype, struct nlattr *nla, struct nla_policy *policy)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_parse_nested </td>
          <td>(</td>
          <td class="paramtype">struct nlattr *&#160;</td>
          <td class="paramname"><em>tb</em>[], </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>maxtype</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct nlattr *&#160;</td>
          <td class="paramname"><em>nla</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structnla__policy.html">nla_policy</a> *&#160;</td>
          <td class="paramname"><em>policy</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">tb</td><td>destination array with maxtype+1 elements </td></tr>
    <tr><td class="paramname">maxtype</td><td>maximum attribute type to be expected </td></tr>
    <tr><td class="paramname">nla</td><td>attribute containing the nested attributes </td></tr>
    <tr><td class="paramname">policy</td><td>validation policy</td></tr>
  </table>
  </dd>
</dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__attr.html#gaa7ad544b5a93034602a442eb26cda92c" title="Parse a stream of attributes into a tb buffer.">nla_parse()</a> </dd></dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00308">308</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00151">nla_data()</a>, <a class="el" href="attr_8c_source.html#l00160">nla_len()</a>, and <a class="el" href="attr_8c_source.html#l00262">nla_parse()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__attr.html#gaa7ad544b5a93034602a442eb26cda92c" title="Parse a stream of attributes into a tb buffer.">nla_parse</a>(tb, maxtype, <a class="code" href="group__attr.html#gaf39d6bbd2be1fc2de30b6b7d079a5fce" title="head of payload">nla_data</a>(nla), <a class="code" href="group__attr.html#gac5a7705797946fa9c0775997bb8d130b" title="length of payload">nla_len</a>(nla), policy);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga5d8d5930b012e61c8d8e4ba6b3038c36"></a><!-- doxytag: member="attr.c::nla_validate" ref="ga5d8d5930b012e61c8d8e4ba6b3038c36" args="(struct nlattr *head, int len, int maxtype, struct nla_policy *policy)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_validate </td>
          <td>(</td>
          <td class="paramtype">struct nlattr *&#160;</td>
          <td class="paramname"><em>head</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>len</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>maxtype</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structnla__policy.html">nla_policy</a> *&#160;</td>
          <td class="paramname"><em>policy</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">head</td><td>head of attribute stream </td></tr>
    <tr><td class="paramname">len</td><td>length of attribute stream </td></tr>
    <tr><td class="paramname">maxtype</td><td>maximum attribute type to be expected </td></tr>
    <tr><td class="paramname">policy</td><td>validation policy</td></tr>
  </table>
  </dd>
</dl>
<p>Validates all attributes in the specified attribute stream against the specified policy. Attributes with a type exceeding maxtype will be ignored. See documenation of struct <a class="el" href="structnla__policy.html" title="attribute validation policy">nla_policy</a> for more details.</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="attr_8c_source.html#l00328">328</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8h_source.html#l00264">nla_for_each_attr</a>.</p>

<p>Referenced by <a class="el" href="msg_8c_source.html#l00350">nlmsg_validate()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nlattr *nla;
        <span class="keywordtype">int</span> rem, err;

        <a class="code" href="group__attr.html#ga7a262955c3fb8eab3158bd07180fbc2c" title="iterate over a stream of attributes">nla_for_each_attr</a>(nla, head, len, rem) {
                err = validate_nla(nla, maxtype, policy);
                <span class="keywordflow">if</span> (err &lt; 0)
                        <span class="keywordflow">goto</span> errout;
        }

        err = 0;
errout:
        <span class="keywordflow">return</span> err;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga2e98df8c30030aebcfd1eebf11bbb22a"></a><!-- doxytag: member="attr.c::nla_find" ref="ga2e98df8c30030aebcfd1eebf11bbb22a" args="(struct nlattr *head, int len, int attrtype)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nlattr* nla_find </td>
          <td>(</td>
          <td class="paramtype">struct nlattr *&#160;</td>
          <td class="paramname"><em>head</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>len</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>attrtype</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">head</td><td>head of attribute stream </td></tr>
    <tr><td class="paramname">len</td><td>length of attribute stream </td></tr>
    <tr><td class="paramname">attrtype</td><td>type of attribute to look for</td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>the first attribute in the stream matching the specified type. </dd></dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00353">353</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8h_source.html#l00264">nla_for_each_attr</a>, and <a class="el" href="attr_8c_source.html#l00142">nla_type()</a>.</p>

<p>Referenced by <a class="el" href="msg_8c_source.html#l00337">nlmsg_find_attr()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nlattr *nla;
        <span class="keywordtype">int</span> rem;

        <a class="code" href="group__attr.html#ga7a262955c3fb8eab3158bd07180fbc2c" title="iterate over a stream of attributes">nla_for_each_attr</a>(nla, head, len, rem)
                if (<a class="code" href="group__attr.html#ga4aa5611a0b84b217ee9a7dd2b0491128" title="attribute type">nla_type</a>(nla) == attrtype)
                        return nla;

        return NULL;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gaf2cdaf473a1054b9c3fc735ca7275403"></a><!-- doxytag: member="attr.c::nla_memcpy" ref="gaf2cdaf473a1054b9c3fc735ca7275403" args="(void *dest, struct nlattr *src, int count)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_memcpy </td>
          <td>(</td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>dest</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct nlattr *&#160;</td>
          <td class="paramname"><em>src</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>count</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">dest</td><td>where to copy to memcpy </td></tr>
    <tr><td class="paramname">src</td><td>netlink attribute to copy from </td></tr>
    <tr><td class="paramname">count</td><td>size of the destination area</td></tr>
  </table>
  </dd>
</dl>
<p>Note: The number of bytes copied is limited by the length of attribute's payload. memcpy</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>the number of bytes copied. </dd></dl>

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

<p>References <a class="el" href="attr_8c_source.html#l00151">nla_data()</a>, and <a class="el" href="attr_8c_source.html#l00160">nla_len()</a>.</p>

<p>Referenced by <a class="el" href="attr_8c_source.html#l00721">nla_get_u64()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">int</span> minlen;

        <span class="keywordflow">if</span> (!src)
                <span class="keywordflow">return</span> 0;
        
        minlen = min_t(<span class="keywordtype">int</span>, count, <a class="code" href="group__attr.html#gac5a7705797946fa9c0775997bb8d130b" title="length of payload">nla_len</a>(src));
        memcpy(dest, <a class="code" href="group__attr.html#gaf39d6bbd2be1fc2de30b6b7d079a5fce" title="head of payload">nla_data</a>(src), minlen);

        <span class="keywordflow">return</span> minlen;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gaabddc8018334423d84088d241b4b7830"></a><!-- doxytag: member="attr.c::nla_strlcpy" ref="gaabddc8018334423d84088d241b4b7830" args="(char *dst, const struct nlattr *nla, size_t dstsize)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t nla_strlcpy </td>
          <td>(</td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>dst</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const struct nlattr *&#160;</td>
          <td class="paramname"><em>nla</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>dstsize</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">dst</td><td>where to copy the string to </td></tr>
    <tr><td class="paramname">nla</td><td>attribute to copy the string from </td></tr>
    <tr><td class="paramname">dstsize</td><td>size of destination buffer</td></tr>
  </table>
  </dd>
</dl>
<p>Copies at most dstsize - 1 bytes into the destination buffer. The result is always a valid NUL-terminated string. Unlike strlcpy the destination buffer is always padded out.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>the length of the source buffer. </dd></dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00408">408</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00151">nla_data()</a>, and <a class="el" href="attr_8c_source.html#l00160">nla_len()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">size_t</span> srclen = <a class="code" href="group__attr.html#gac5a7705797946fa9c0775997bb8d130b" title="length of payload">nla_len</a>(nla);
        <span class="keywordtype">char</span> *src = <a class="code" href="group__attr.html#gaf39d6bbd2be1fc2de30b6b7d079a5fce" title="head of payload">nla_data</a>(nla);

        <span class="keywordflow">if</span> (srclen &gt; 0 &amp;&amp; src[srclen - 1] == <span class="charliteral">&#39;\0&#39;</span>)
                srclen--;

        <span class="keywordflow">if</span> (dstsize &gt; 0) {
                <span class="keywordtype">size_t</span> len = (srclen &gt;= dstsize) ? dstsize - 1 : srclen;

                memset(dst, 0, dstsize);
                memcpy(dst, src, len);
        }

        <span class="keywordflow">return</span> srclen;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga737c469f4692bce4c3b18f364e4a1949"></a><!-- doxytag: member="attr.c::nla_memcmp" ref="ga737c469f4692bce4c3b18f364e4a1949" args="(const struct nlattr *nla, const void *data, size_t size)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_memcmp </td>
          <td>(</td>
          <td class="paramtype">const struct nlattr *&#160;</td>
          <td class="paramname"><em>nla</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const void *&#160;</td>
          <td class="paramname"><em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>size</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">nla</td><td>netlink attribute </td></tr>
    <tr><td class="paramname">data</td><td>memory area </td></tr>
    <tr><td class="paramname">size</td><td>size of memory area </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00432">432</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00151">nla_data()</a>, and <a class="el" href="attr_8c_source.html#l00160">nla_len()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">int</span> d = <a class="code" href="group__attr.html#gac5a7705797946fa9c0775997bb8d130b" title="length of payload">nla_len</a>(nla) - size;

        <span class="keywordflow">if</span> (d == 0)
                d = memcmp(<a class="code" href="group__attr.html#gaf39d6bbd2be1fc2de30b6b7d079a5fce" title="head of payload">nla_data</a>(nla), data, size);

        <span class="keywordflow">return</span> d;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga236748b15cfbc86dde1500ea2bc65072"></a><!-- doxytag: member="attr.c::nla_strcmp" ref="ga236748b15cfbc86dde1500ea2bc65072" args="(const struct nlattr *nla, const char *str)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_strcmp </td>
          <td>(</td>
          <td class="paramtype">const struct nlattr *&#160;</td>
          <td class="paramname"><em>nla</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>str</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">nla</td><td>netlink string attribute </td></tr>
    <tr><td class="paramname">str</td><td>another string </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00448">448</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00151">nla_data()</a>, and <a class="el" href="attr_8c_source.html#l00160">nla_len()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">int</span> len = strlen(str) + 1;
        <span class="keywordtype">int</span> d = <a class="code" href="group__attr.html#gac5a7705797946fa9c0775997bb8d130b" title="length of payload">nla_len</a>(nla) - len;

        <span class="keywordflow">if</span> (d == 0)
                d = memcmp(<a class="code" href="group__attr.html#gaf39d6bbd2be1fc2de30b6b7d079a5fce" title="head of payload">nla_data</a>(nla), str, len);

        <span class="keywordflow">return</span> d;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gab738cbc916a17baca88aeed2e67dddc2"></a><!-- doxytag: member="attr.c::nla_reserve" ref="gab738cbc916a17baca88aeed2e67dddc2" args="(struct nl_msg *n, int attrtype, int attrlen)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nlattr* nla_reserve </td>
          <td>(</td>
          <td class="paramtype">struct nl_msg *&#160;</td>
          <td class="paramname"><em>n</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>attrtype</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>attrlen</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">attrlen</td><td>length of attribute payload</td></tr>
  </table>
  </dd>
</dl>
<p>Adds a netlink attribute header to a netlink message and reserves room for the payload but does not copy it. </p>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00475">475</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00108">nla_attr_size()</a>, <a class="el" href="attr_8c_source.html#l00126">nla_padlen()</a>, <a class="el" href="attr_8c_source.html#l00117">nla_total_size()</a>, and <a class="el" href="msg_8c_source.html#l00218">nlmsg_data()</a>.</p>

<p>Referenced by <a class="el" href="attr_8c_source.html#l00512">nla_put()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nlattr *nla;
        <span class="keywordtype">int</span> tlen;
        
        tlen = NLMSG_ALIGN(n-&gt;nm_nlh-&gt;nlmsg_len) + <a class="code" href="group__attr.html#gafc7e89c7d72952510eff46f96761e3ea" title="total length of attribute including padding">nla_total_size</a>(attrlen);

        <span class="keywordflow">if</span> ((tlen + n-&gt;nm_nlh-&gt;nlmsg_len) &gt; n-&gt;nm_size) {
                nl_errno(ENOBUFS);
                <span class="keywordflow">return</span> NULL;
        }

        nla = (<span class="keyword">struct </span>nlattr *) nlmsg_tail(n-&gt;nm_nlh);
        nla-&gt;nla_type = attrtype;
        nla-&gt;nla_len = <a class="code" href="group__attr.html#ga894e1ded50d0d62748a2b9b5f7195938" title="length of attribute not including padding">nla_attr_size</a>(attrlen);

        memset((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) nla + nla-&gt;nla_len, 0, <a class="code" href="group__attr.html#gae24ddf8c4bb186eaaed15ecb2d08b816" title="length of padding at the tail of the attribute">nla_padlen</a>(attrlen));
        n-&gt;nm_nlh-&gt;nlmsg_len = tlen;

        NL_DBG(2, <span class="stringliteral">&quot;msg %p: Reserved %d bytes at offset +%td for attr %d &quot;</span>
                  <span class="stringliteral">&quot;nlmsg_len=%d\n&quot;</span>, n, attrlen,
                  (<span class="keywordtype">void</span> *) nla - <a class="code" href="group__msg.html#gae44a904bb40c8b5f5ff31539c21cfa5a" title="head of message payload">nlmsg_data</a>(n-&gt;nm_nlh),
                  attrtype, n-&gt;nm_nlh-&gt;nlmsg_len);

        <span class="keywordflow">return</span> nla;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga8b3964330f885da7f204d5e4609e4761"></a><!-- doxytag: member="attr.c::nla_put" ref="ga8b3964330f885da7f204d5e4609e4761" args="(struct nl_msg *n, int attrtype, int attrlen, const void *data)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_put </td>
          <td>(</td>
          <td class="paramtype">struct nl_msg *&#160;</td>
          <td class="paramname"><em>n</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>attrtype</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>attrlen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const void *&#160;</td>
          <td class="paramname"><em>data</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">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">attrlen</td><td>length of attribute payload </td></tr>
    <tr><td class="paramname">data</td><td>head of attribute payload</td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>-1 if the tailroom of the skb is insufficient to store the attribute header and payload. </dd></dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00512">512</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00151">nla_data()</a>, <a class="el" href="attr_8c_source.html#l00475">nla_reserve()</a>, and <a class="el" href="msg_8c_source.html#l00218">nlmsg_data()</a>.</p>

<p>Referenced by <a class="el" href="attr_8c_source.html#l00656">nla_nest_start()</a>, <a class="el" href="attr_8c_source.html#l00636">nla_put_addr()</a>, <a class="el" href="attr_8c_source.html#l00624">nla_put_data()</a>, <a class="el" href="attr_8c_source.html#l00602">nla_put_flag()</a>, <a class="el" href="attr_8c_source.html#l00536">nla_put_nested()</a>, <a class="el" href="attr_8c_source.html#l00592">nla_put_string()</a>, <a class="el" href="attr_8c_source.html#l00559">nla_put_u16()</a>, <a class="el" href="attr_8c_source.html#l00570">nla_put_u32()</a>, <a class="el" href="attr_8c_source.html#l00581">nla_put_u64()</a>, and <a class="el" href="attr_8c_source.html#l00548">nla_put_u8()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nlattr *nla;

        nla = <a class="code" href="group__attr.html#gab738cbc916a17baca88aeed2e67dddc2" title="reserve room for attribute on the skb">nla_reserve</a>(n, attrtype, attrlen);
        <span class="keywordflow">if</span> (!nla)
                <span class="keywordflow">return</span> nl_errno(ENOMEM);

        memcpy(<a class="code" href="group__attr.html#gaf39d6bbd2be1fc2de30b6b7d079a5fce" title="head of payload">nla_data</a>(nla), data, attrlen);
        NL_DBG(2, <span class="stringliteral">&quot;msg %p: Wrote %d bytes at offset +%td for attr %d\n&quot;</span>,
               n, attrlen, (<span class="keywordtype">void</span> *) nla - <a class="code" href="group__msg.html#gae44a904bb40c8b5f5ff31539c21cfa5a" title="head of message payload">nlmsg_data</a>(n-&gt;nm_nlh), attrtype);

        <span class="keywordflow">return</span> 0;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gafe7bad603c92ecee0dfc0cc112dd1182"></a><!-- doxytag: member="attr.c::nla_put_nested" ref="gafe7bad603c92ecee0dfc0cc112dd1182" args="(struct nl_msg *n, int attrtype, struct nl_msg *nested)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_put_nested </td>
          <td>(</td>
          <td class="paramtype">struct nl_msg *&#160;</td>
          <td class="paramname"><em>n</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>attrtype</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct nl_msg *&#160;</td>
          <td class="paramname"><em>nested</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">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">nested</td><td>netlink attribute to nest</td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>-1 if the tailroom of the skb is insufficient to store the attribute header and payload. </dd></dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00536">536</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00512">nla_put()</a>, <a class="el" href="msg_8c_source.html#l00218">nlmsg_data()</a>, and <a class="el" href="msg_8c_source.html#l00232">nlmsg_len()</a>.</p>

<p>Referenced by <a class="el" href="neightbl_8c_source.html#l00478">rtnl_neightbl_build_change_request()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__attr.html#ga8b3964330f885da7f204d5e4609e4761" title="Add a netlink attribute to a netlink message.">nla_put</a>(n, attrtype, <a class="code" href="group__msg.html#gafa0898e9ec7d59a8faa1e4f0ed3168bf" title="length of message payload">nlmsg_len</a>(nested-&gt;nm_nlh),
                       <a class="code" href="group__msg.html#gae44a904bb40c8b5f5ff31539c21cfa5a" title="head of message payload">nlmsg_data</a>(nested-&gt;nm_nlh));
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga14cf4e429de0cb05f37d4e1489914b28"></a><!-- doxytag: member="attr.c::nla_put_u8" ref="ga14cf4e429de0cb05f37d4e1489914b28" args="(struct nl_msg *n, int attrtype, uint8_t value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_put_u8 </td>
          <td>(</td>
          <td class="paramtype">struct nl_msg *&#160;</td>
          <td class="paramname"><em>n</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>attrtype</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t&#160;</td>
          <td class="paramname"><em>value</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">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">value</td><td>numeric value </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00548">548</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00512">nla_put()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__attr.html#ga8b3964330f885da7f204d5e4609e4761" title="Add a netlink attribute to a netlink message.">nla_put</a>(n, attrtype, <span class="keyword">sizeof</span>(uint8_t), &amp;value);
}
</pre></div>
</div>
</div>
<a class="anchor" id="gaf44eb15a7becdfb2833a4bf1b5cd8571"></a><!-- doxytag: member="attr.c::nla_put_u16" ref="gaf44eb15a7becdfb2833a4bf1b5cd8571" args="(struct nl_msg *n, int attrtype, uint16_t value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_put_u16 </td>
          <td>(</td>
          <td class="paramtype">struct nl_msg *&#160;</td>
          <td class="paramname"><em>n</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>attrtype</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&#160;</td>
          <td class="paramname"><em>value</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">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">value</td><td>numeric value </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00559">559</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00512">nla_put()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__attr.html#ga8b3964330f885da7f204d5e4609e4761" title="Add a netlink attribute to a netlink message.">nla_put</a>(n, attrtype, <span class="keyword">sizeof</span>(uint16_t), &amp;value);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga9891f766dcebe6bdb2ce86f021c6f6e6"></a><!-- doxytag: member="attr.c::nla_put_u32" ref="ga9891f766dcebe6bdb2ce86f021c6f6e6" args="(struct nl_msg *n, int attrtype, uint32_t value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_put_u32 </td>
          <td>(</td>
          <td class="paramtype">struct nl_msg *&#160;</td>
          <td class="paramname"><em>n</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>attrtype</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&#160;</td>
          <td class="paramname"><em>value</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">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">value</td><td>numeric value </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00570">570</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00512">nla_put()</a>.</p>

<p>Referenced by <a class="el" href="neightbl_8c_source.html#l00478">rtnl_neightbl_build_change_request()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__attr.html#ga8b3964330f885da7f204d5e4609e4761" title="Add a netlink attribute to a netlink message.">nla_put</a>(n, attrtype, <span class="keyword">sizeof</span>(uint32_t), &amp;value);
}
</pre></div>
</div>
</div>
<a class="anchor" id="gade5cf81c340ddb0656842bb554f3cbfe"></a><!-- doxytag: member="attr.c::nla_put_u64" ref="gade5cf81c340ddb0656842bb554f3cbfe" args="(struct nl_msg *n, int attrtype, uint64_t value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_put_u64 </td>
          <td>(</td>
          <td class="paramtype">struct nl_msg *&#160;</td>
          <td class="paramname"><em>n</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>attrtype</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint64_t&#160;</td>
          <td class="paramname"><em>value</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">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">value</td><td>numeric value </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00581">581</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00512">nla_put()</a>.</p>

<p>Referenced by <a class="el" href="attr_8c_source.html#l00613">nla_put_msecs()</a>, and <a class="el" href="neightbl_8c_source.html#l00478">rtnl_neightbl_build_change_request()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__attr.html#ga8b3964330f885da7f204d5e4609e4761" title="Add a netlink attribute to a netlink message.">nla_put</a>(n, attrtype, <span class="keyword">sizeof</span>(uint64_t), &amp;value);
}
</pre></div>
</div>
</div>
<a class="anchor" id="gacf85c1c8becd42e29f03670553b6e2f3"></a><!-- doxytag: member="attr.c::nla_put_string" ref="gacf85c1c8becd42e29f03670553b6e2f3" args="(struct nl_msg *n, int attrtype, const char *str)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_put_string </td>
          <td>(</td>
          <td class="paramtype">struct nl_msg *&#160;</td>
          <td class="paramname"><em>n</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>attrtype</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>str</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">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">str</td><td>NUL terminated string </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00592">592</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00512">nla_put()</a>.</p>

<p>Referenced by <a class="el" href="neightbl_8c_source.html#l00478">rtnl_neightbl_build_change_request()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__attr.html#ga8b3964330f885da7f204d5e4609e4761" title="Add a netlink attribute to a netlink message.">nla_put</a>(n, attrtype, strlen(str) + 1, str);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga669fcc00e7114fb8f7d800a8b48ff0a9"></a><!-- doxytag: member="attr.c::nla_put_flag" ref="ga669fcc00e7114fb8f7d800a8b48ff0a9" args="(struct nl_msg *n, int attrtype)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_put_flag </td>
          <td>(</td>
          <td class="paramtype">struct nl_msg *&#160;</td>
          <td class="paramname"><em>n</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>attrtype</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">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00602">602</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00512">nla_put()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__attr.html#ga8b3964330f885da7f204d5e4609e4761" title="Add a netlink attribute to a netlink message.">nla_put</a>(n, attrtype, 0, NULL);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga80f366ccf41b1820c7faf95c76b2d718"></a><!-- doxytag: member="attr.c::nla_put_msecs" ref="ga80f366ccf41b1820c7faf95c76b2d718" args="(struct nl_msg *n, int attrtype, unsigned long msecs)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_put_msecs </td>
          <td>(</td>
          <td class="paramtype">struct nl_msg *&#160;</td>
          <td class="paramname"><em>n</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>attrtype</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned long&#160;</td>
          <td class="paramname"><em>msecs</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">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">msecs</td><td>number of msecs </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00613">613</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00581">nla_put_u64()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__attr.html#gade5cf81c340ddb0656842bb554f3cbfe" title="Add a u64 netlink attribute to a netlink message.">nla_put_u64</a>(n, attrtype, msecs);
}
</pre></div>
</div>
</div>
<a class="anchor" id="gad07458aa26ae9a430fb9ff8d444b526d"></a><!-- doxytag: member="attr.c::nla_put_data" ref="gad07458aa26ae9a430fb9ff8d444b526d" args="(struct nl_msg *n, int attrtype, struct nl_data *data)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_put_data </td>
          <td>(</td>
          <td class="paramtype">struct nl_msg *&#160;</td>
          <td class="paramname"><em>n</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>attrtype</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct nl_data *&#160;</td>
          <td class="paramname"><em>data</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">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">data</td><td>abstract data </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00624">624</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="data_8c_source.html#l00130">nl_data_get()</a>, <a class="el" href="data_8c_source.html#l00140">nl_data_get_size()</a>, and <a class="el" href="attr_8c_source.html#l00512">nla_put()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__attr.html#ga8b3964330f885da7f204d5e4609e4761" title="Add a netlink attribute to a netlink message.">nla_put</a>(n, attrtype, <a class="code" href="group__data.html#ga6dbaf24a42f29514e30665c9e42a3d1c" title="Get size of data buffer of abstract data object.">nl_data_get_size</a>(data),
                       <a class="code" href="group__data.html#ga1ca4b5ea3a92643c2fe94dd4eeef072b" title="Get data buffer of abstract data object.">nl_data_get</a>(data));
}
</pre></div>
</div>
</div>
<a class="anchor" id="gafd639c95cec147ae3b7dd9717a66e339"></a><!-- doxytag: member="attr.c::nla_put_addr" ref="gafd639c95cec147ae3b7dd9717a66e339" args="(struct nl_msg *n, int attrtype, struct nl_addr *addr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_put_addr </td>
          <td>(</td>
          <td class="paramtype">struct nl_msg *&#160;</td>
          <td class="paramname"><em>n</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>attrtype</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct nl_addr *&#160;</td>
          <td class="paramname"><em>addr</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">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type </td></tr>
    <tr><td class="paramname">addr</td><td>abstract address </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00636">636</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="addr_8c_source.html#l00756">nl_addr_get_binary_addr()</a>, <a class="el" href="addr_8c_source.html#l00765">nl_addr_get_len()</a>, and <a class="el" href="attr_8c_source.html#l00512">nla_put()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__attr.html#ga8b3964330f885da7f204d5e4609e4761" title="Add a netlink attribute to a netlink message.">nla_put</a>(n, attrtype, <a class="code" href="group__addr.html#ga6c517a330f9fd12db0844f7ac0c72134" title="Get length of binary address of abstract address object.">nl_addr_get_len</a>(addr),
                       <a class="code" href="group__addr.html#ga7721da4e82e80e8b29960405539ca72d" title="Get binary address of abstract address object.">nl_addr_get_binary_addr</a>(addr));
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga18640b6320b8959bb586fa2ca456130c"></a><!-- doxytag: member="attr.c::nla_nest_start" ref="ga18640b6320b8959bb586fa2ca456130c" args="(struct nl_msg *n, int attrtype)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nlattr* nla_nest_start </td>
          <td>(</td>
          <td class="paramtype">struct nl_msg *&#160;</td>
          <td class="paramname"><em>n</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>attrtype</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">attrtype</td><td>attribute type of container</td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>the container attribute </dd></dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00656">656</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00512">nla_put()</a>.</p>

<p>Referenced by <a class="el" href="link_8c_source.html#l00965">rtnl_link_build_change_request()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nlattr *start = (<span class="keyword">struct </span>nlattr *) nlmsg_tail(n-&gt;nm_nlh);

        <span class="keywordflow">if</span> (<a class="code" href="group__attr.html#ga8b3964330f885da7f204d5e4609e4761" title="Add a netlink attribute to a netlink message.">nla_put</a>(n, attrtype, 0, NULL) &lt; 0)
                <span class="keywordflow">return</span> NULL;

        <span class="keywordflow">return</span> start;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga067f9ada74902c02d97c725a47f590b7"></a><!-- doxytag: member="attr.c::nla_nest_end" ref="ga067f9ada74902c02d97c725a47f590b7" args="(struct nl_msg *n, struct nlattr *start)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_nest_end </td>
          <td>(</td>
          <td class="paramtype">struct nl_msg *&#160;</td>
          <td class="paramname"><em>n</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct nlattr *&#160;</td>
          <td class="paramname"><em>start</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">n</td><td>netlink message </td></tr>
    <tr><td class="paramname">start</td><td>container attribute</td></tr>
  </table>
  </dd>
</dl>
<p>Corrects the container attribute header to include the all appeneded attributes.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>the total data length of the skb. </dd></dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00676">676</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>Referenced by <a class="el" href="link_8c_source.html#l00965">rtnl_link_build_change_request()</a>.</p>
<div class="fragment"><pre class="fragment">{
        start-&gt;nla_len = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) nlmsg_tail(n-&gt;nm_nlh) -
                                (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) start;
        <span class="keywordflow">return</span> 0;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gabda0290a8b26cc577c2c5cefa814aeac"></a><!-- doxytag: member="attr.c::nla_get_u32" ref="gabda0290a8b26cc577c2c5cefa814aeac" args="(struct nlattr *nla)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">uint32_t nla_get_u32 </td>
          <td>(</td>
          <td class="paramtype">struct nlattr *&#160;</td>
          <td class="paramname"><em>nla</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">nla</td><td>u32 netlink attribute </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00694">694</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00151">nla_data()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> *(uint32_t *) <a class="code" href="group__attr.html#gaf39d6bbd2be1fc2de30b6b7d079a5fce" title="head of payload">nla_data</a>(nla);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga60c1be303721d4a39ad810876a13d304"></a><!-- doxytag: member="attr.c::nla_get_u16" ref="ga60c1be303721d4a39ad810876a13d304" args="(struct nlattr *nla)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">uint16_t nla_get_u16 </td>
          <td>(</td>
          <td class="paramtype">struct nlattr *&#160;</td>
          <td class="paramname"><em>nla</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">nla</td><td>u16 netlink attribute </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00703">703</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00151">nla_data()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> *(uint16_t *) <a class="code" href="group__attr.html#gaf39d6bbd2be1fc2de30b6b7d079a5fce" title="head of payload">nla_data</a>(nla);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga9ca4618a38f1567b1e42b1f21be887c9"></a><!-- doxytag: member="attr.c::nla_get_u8" ref="ga9ca4618a38f1567b1e42b1f21be887c9" args="(struct nlattr *nla)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">uint8_t nla_get_u8 </td>
          <td>(</td>
          <td class="paramtype">struct nlattr *&#160;</td>
          <td class="paramname"><em>nla</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">nla</td><td>u8 netlink attribute </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00712">712</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00151">nla_data()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> *(uint8_t *) <a class="code" href="group__attr.html#gaf39d6bbd2be1fc2de30b6b7d079a5fce" title="head of payload">nla_data</a>(nla);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga517d3ae28480ef44fec7b1e3d2fb29e6"></a><!-- doxytag: member="attr.c::nla_get_u64" ref="ga517d3ae28480ef44fec7b1e3d2fb29e6" args="(struct nlattr *nla)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">uint64_t nla_get_u64 </td>
          <td>(</td>
          <td class="paramtype">struct nlattr *&#160;</td>
          <td class="paramname"><em>nla</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">nla</td><td>u64 netlink attribute </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00721">721</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00383">nla_memcpy()</a>.</p>

<p>Referenced by <a class="el" href="attr_8c_source.html#l00754">nla_get_msecs()</a>.</p>
<div class="fragment"><pre class="fragment">{
        uint64_t tmp;

        <a class="code" href="group__attr.html#gaf2cdaf473a1054b9c3fc735ca7275403" title="Copy a netlink attribute into another memory area.">nla_memcpy</a>(&amp;tmp, nla, <span class="keyword">sizeof</span>(tmp));

        <span class="keywordflow">return</span> tmp;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga99baaa7c85d04eaece8f5eea34d8e2e9"></a><!-- doxytag: member="attr.c::nla_get_string" ref="ga99baaa7c85d04eaece8f5eea34d8e2e9" args="(struct nlattr *nla)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">char* nla_get_string </td>
          <td>(</td>
          <td class="paramtype">struct nlattr *&#160;</td>
          <td class="paramname"><em>nla</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">nla</td><td>string netlink attribute </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00734">734</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00151">nla_data()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> (<span class="keywordtype">char</span> *) <a class="code" href="group__attr.html#gaf39d6bbd2be1fc2de30b6b7d079a5fce" title="head of payload">nla_data</a>(nla);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga7ca9e726c046a2953aecf22bc9cece0a"></a><!-- doxytag: member="attr.c::nla_get_flag" ref="ga7ca9e726c046a2953aecf22bc9cece0a" args="(struct nlattr *nla)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nla_get_flag </td>
          <td>(</td>
          <td class="paramtype">struct nlattr *&#160;</td>
          <td class="paramname"><em>nla</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">nla</td><td>flag netlink attribute </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00743">743</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> !!nla;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gad785952a48597a2fafc6268ac999afe8"></a><!-- doxytag: member="attr.c::nla_get_msecs" ref="gad785952a48597a2fafc6268ac999afe8" args="(struct nlattr *nla)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">unsigned long nla_get_msecs </td>
          <td>(</td>
          <td class="paramtype">struct nlattr *&#160;</td>
          <td class="paramname"><em>nla</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">nla</td><td>msecs netlink attribute</td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>the number of milliseconds. </dd></dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00754">754</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00721">nla_get_u64()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__attr.html#ga517d3ae28480ef44fec7b1e3d2fb29e6" title="Return payload of u64 attribute.">nla_get_u64</a>(nla);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga98a5ac1eefea9266cf46c91b9a9867f3"></a><!-- doxytag: member="attr.c::nla_get_addr" ref="ga98a5ac1eefea9266cf46c91b9a9867f3" args="(struct nlattr *nla, int family)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nl_addr* nla_get_addr </td>
          <td>(</td>
          <td class="paramtype">struct nlattr *&#160;</td>
          <td class="paramname"><em>nla</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>family</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">nla</td><td>address netlink attribute </td></tr>
    <tr><td class="paramname">family</td><td>address family</td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Newly allocated address handle or NULL </dd></dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00766">766</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="addr_8c_source.html#l00187">nl_addr_build()</a>, <a class="el" href="attr_8c_source.html#l00151">nla_data()</a>, and <a class="el" href="attr_8c_source.html#l00160">nla_len()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__addr.html#ga3ba58249a980740157be8a4fca3635fd" title="Allocate new abstract address object based on a binary address.">nl_addr_build</a>(family, <a class="code" href="group__attr.html#gaf39d6bbd2be1fc2de30b6b7d079a5fce" title="head of payload">nla_data</a>(nla), <a class="code" href="group__attr.html#gac5a7705797946fa9c0775997bb8d130b" title="length of payload">nla_len</a>(nla));
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga33a5aef23c5d26c8247632ed1f167068"></a><!-- doxytag: member="attr.c::nla_get_data" ref="ga33a5aef23c5d26c8247632ed1f167068" args="(struct nlattr *nla)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nl_data* nla_get_data </td>
          <td>(</td>
          <td class="paramtype">struct nlattr *&#160;</td>
          <td class="paramname"><em>nla</em></td><td>)</td>
          <td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">nla</td><td>abstract data netlink attribute</td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Newly allocated abstract data handle or NULL </dd></dl>

<p>Definition at line <a class="el" href="attr_8c_source.html#l00777">777</a> of file <a class="el" href="attr_8c_source.html">attr.c</a>.</p>

<p>References <a class="el" href="data_8c_source.html#l00038">nl_data_alloc()</a>, <a class="el" href="attr_8c_source.html#l00151">nla_data()</a>, and <a class="el" href="attr_8c_source.html#l00160">nla_len()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__data.html#gafd58c229c0e4dd4dcea07c8d8493c144" title="Allocate a new abstract data object.">nl_data_alloc</a>(<a class="code" href="group__attr.html#gaf39d6bbd2be1fc2de30b6b7d079a5fce" title="head of payload">nla_data</a>(nla), <a class="code" href="group__attr.html#gac5a7705797946fa9c0775997bb8d130b" title="length of payload">nla_len</a>(nla));
}
</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>