Sophie

Sophie

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

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: Generic Netlink</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.3 -->
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">libnl&#160;<span id="projectnumber">1.1</span></div>
  </td>
 </tr>
 </tbody>
</table>
</div>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="summary">
<a href="#groups">Modules</a>  </div>
  <div class="headertitle">
<h1>Generic Netlink</h1>  </div>
<div class="ingroups"><a class="el" href="group__nlfam.html">Netlink Families</a></div></div>
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="groups"></a>
Modules</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__genl__family.html">Generic Netlink Family</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__genl__mngt.html">Management</a></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Socket Creating</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3e8ae476efb5dc964c7c0fa43f1a9f9f"></a><!-- doxytag: member="genl::genl_connect" ref="ga3e8ae476efb5dc964c7c0fa43f1a9f9f" args="(struct nl_handle *handle)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>genl_connect</b> (struct nl_handle *handle)</td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Sending</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__genl.html#ga3454e19240e23a023ea469f780d9899d">genl_send_simple</a> (struct nl_handle *handle, int family, int cmd, int version, int flags)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Send trivial generic netlink message.  <a href="#ga3454e19240e23a023ea469f780d9899d"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Message Parsing</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae330b8a624af9b5dcafc5556ff88a63c"></a><!-- doxytag: member="genl::genlmsg_valid_hdr" ref="gae330b8a624af9b5dcafc5556ff88a63c" args="(struct nlmsghdr *nlh, int hdrlen)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>genlmsg_valid_hdr</b> (struct <a class="el" href="structnlmsghdr.html">nlmsghdr</a> *nlh, int hdrlen)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4ea6fec9864049f435025842eb9f0ec5"></a><!-- doxytag: member="genl::genlmsg_validate" ref="ga4ea6fec9864049f435025842eb9f0ec5" args="(struct nlmsghdr *nlh, int hdrlen, int maxtype, struct nla_policy *policy)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>genlmsg_validate</b> (struct <a class="el" href="structnlmsghdr.html">nlmsghdr</a> *nlh, int hdrlen, int maxtype, struct <a class="el" href="structnla__policy.html">nla_policy</a> *policy)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8f9f8bdb0f94c14fd1490364ba7b6b56"></a><!-- doxytag: member="genl::genlmsg_parse" ref="ga8f9f8bdb0f94c14fd1490364ba7b6b56" args="(struct nlmsghdr *nlh, int hdrlen, struct nlattr *tb[], int maxtype, struct nla_policy *policy)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>genlmsg_parse</b> (struct <a class="el" href="structnlmsghdr.html">nlmsghdr</a> *nlh, int hdrlen, struct nlattr *tb[], int maxtype, struct <a class="el" href="structnla__policy.html">nla_policy</a> *policy)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__genl.html#ga8924deee081eaae1011d5b5ecc497478">genlmsg_data</a> (const struct genlmsghdr *gnlh)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get head of message payload.  <a href="#ga8924deee081eaae1011d5b5ecc497478"></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__genl.html#ga33ac98a8facab52d3cfd3382ef5b1289">genlmsg_len</a> (const struct genlmsghdr *gnlh)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get lenght of message payload.  <a href="#ga33ac98a8facab52d3cfd3382ef5b1289"></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__genl.html#ga800671a530b4c7a6fca7b5b43c8ca5aa">genlmsg_attrdata</a> (const struct genlmsghdr *gnlh, int hdrlen)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get head of attribute data.  <a href="#ga800671a530b4c7a6fca7b5b43c8ca5aa"></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__genl.html#gabdae2ebb53a8c98adb2446d33c74e1e5">genlmsg_attrlen</a> (const struct genlmsghdr *gnlh, int hdrlen)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get length of attribute data.  <a href="#gabdae2ebb53a8c98adb2446d33c74e1e5"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Message Building</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__genl.html#ga59cab79b0fb5c86a041b0220461d78dd">genlmsg_put</a> (struct nl_msg *msg, uint32_t pid, uint32_t seq, int family, int hdrlen, int flags, uint8_t cmd, uint8_t version)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add generic netlink header to netlink message.  <a href="#ga59cab79b0fb5c86a041b0220461d78dd"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<dl class="user"><dt><b>Message Format</b></dt><dd><div class="fragment"><pre class="fragment">  &lt;------- NLMSG_ALIGN(hlen) ------&gt; &lt;---- NLMSG_ALIGN(len) ---&gt;
 +----------------------------+- - -+- - - - - - - - - - -+- - -+
 |           Header           | Pad |       Payload       | Pad |
 |      <span class="keyword">struct </span><a class="code" href="structnlmsghdr.html" title="Netlink message header.">nlmsghdr</a>       |     |                     |     |
 +----------------------------+- - -+- - - - - - - - - - -+- - -+
</pre></div> <div class="fragment"><pre class="fragment">  &lt;-------- GENL_HDRLEN -------&gt; &lt;--- hdrlen --&gt;
                                 &lt;------- <a class="code" href="group__genl.html#ga33ac98a8facab52d3cfd3382ef5b1289" title="Get lenght of message payload.">genlmsg_len</a>(ghdr) ------&gt;
 +------------------------+- - -+---------------+- - -+------------+
 | Generic Netlink Header | Pad | Family Header | Pad | Attributes |
 |    <span class="keyword">struct </span>genlmsghdr   |     |               |     |            |
 +------------------------+- - -+---------------+- - -+------------+
 <a class="code" href="group__genl.html#ga8924deee081eaae1011d5b5ecc497478" title="Get head of message payload.">genlmsg_data</a>(ghdr)--------------^                     ^
 <a class="code" href="group__genl.html#ga800671a530b4c7a6fca7b5b43c8ca5aa" title="Get head of attribute data.">genlmsg_attrdata</a>(ghdr, hdrlen)-------------------------
</pre></div></dd></dl>
<dl class="user"><dt><b>Example</b></dt><dd><div class="fragment"><pre class="fragment"><span class="preprocessor"> #include &lt;netlink/netlink.h&gt;</span>
<span class="preprocessor"> #include &lt;netlink/genl/genl.h&gt;</span>
<span class="preprocessor"> #include &lt;netlink/genl/ctrl.h&gt;</span>

 <span class="keyword">struct </span>nl_handle *sock;
 <span class="keyword">struct </span>nl_msg *msg;
 <span class="keywordtype">int</span> family;

 <span class="comment">// Allocate a new netlink socket</span>
 sock = <a class="code" href="group__socket.html#gaf903c9ea089735b1ba8e40dae801c47d" title="Allocate new netlink socket handle.">nl_handle_alloc</a>();

 <span class="comment">// Connect to generic netlink socket on kernel side</span>
 genl_connect(sock);

 <span class="comment">// Ask kernel to resolve family name to family id</span>
 family = <a class="code" href="group__ctrl.html#ga765fbbec4a11e318a286f743da89ff47" title="Resolve generic netlink family name to its identifier.">genl_ctrl_resolve</a>(sock, <span class="stringliteral">&quot;generic_netlink_family_name&quot;</span>);

 <span class="comment">// Construct a generic netlink by allocating a new message, fill in</span>
 <span class="comment">// the header and append a simple integer attribute.</span>
 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__genl.html#ga59cab79b0fb5c86a041b0220461d78dd" title="Add generic netlink header to netlink message.">genlmsg_put</a>(msg, <a class="code" href="group__msg.html#gaf1a05ed4b58b0d3a0409f2a749e0c91c" title="Will cause the netlink pid to be set to the pid assigned to the netlink handle (socket) just before s...">NL_AUTO_PID</a>, <a class="code" href="group__msg.html#gaca80a9f4084020b28afdb663b670dc4b" title="May be used to refer to a sequence number which should be automatically set just before sending the m...">NL_AUTO_SEQ</a>, family, 0, <a class="code" href="group__msg.html#gac39e15f4f5ba3d381bceae0f0476d001" title="Echo this request.">NLM_F_ECHO</a>,
             CMD_FOO_GET, FOO_VERSION);
 <a class="code" href="group__attr.html#ga9891f766dcebe6bdb2ce86f021c6f6e6" title="Add a u32 netlink attribute to a netlink message.">nla_put_u32</a>(msg, ATTR_FOO, 123);

 <span class="comment">// Send message over netlink socket</span>
 <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>(sock, msg);

 <span class="comment">// Free message</span>
 <a class="code" href="group__msg.html#ga138ba9bee70553f9fbe7143deacad48c" title="Free a netlink message.">nlmsg_free</a>(msg);

 <span class="comment">// Prepare socket to receive the answer by specifying the callback</span>
 <span class="comment">// function to be called for valid messages.</span>
 <a class="code" href="group__socket.html#ga6ae4e46ad6ea991e92dd0cc2653ff371" title="Modify the callback handler associated to the socket.">nl_socket_modify_cb</a>(sock, <a class="code" href="group__cb.html#gga3f60f4515ada826d2bf16395ee722363a6e1f371d16186a460f25ea9bb1306c47" title="Message is valid.">NL_CB_VALID</a>, <a class="code" href="group__cb.html#ggaba3fabad0c62db483941101e1a18d14da22448271a402b4c4a55733ef4884c038" title="Customized handler specified by the user.">NL_CB_CUSTOM</a>, parse_cb, NULL);

 <span class="comment">// Wait for the answer and receive it</span>
 <a class="code" href="group__nl.html#gab287fc77c46d80c4e22bc87494cbf853" title="Receive a set of message from a netlink socket using handlers in nl_handle.">nl_recvmsgs_default</a>(sock);

 <span class="keyword">static</span> <span class="keywordtype">int</span> parse_cb(<span class="keyword">struct</span> nl_msg *msg, <span class="keywordtype">void</span> *arg)
 {
     <span class="keyword">struct </span><a class="code" href="structnlmsghdr.html" title="Netlink message header.">nlmsghdr</a> *nlh = <a class="code" href="group__msg.html#gaa5f29579d86d2bdab26c312b44b56de7" title="Return actual netlink message.">nlmsg_hdr</a>(msg);
     <span class="keyword">struct </span>nlattr *attrs[ATTR_MAX+1];

     <span class="comment">// Validate message and parse attributes</span>
     genlmsg_parse(nlh, 0, attrs, ATTR_MAX, policy);

     <span class="keywordflow">if</span> (attrs[ATTR_FOO]) {
         uint32_t value = <a class="code" href="group__attr.html#gabda0290a8b26cc577c2c5cefa814aeac" title="Return payload of u32 attribute.">nla_get_u32</a>(attrs[ATTR_FOO]);
         ...
     }

     <span class="keywordflow">return</span> 0;
 }
</pre></div> </dd></dl>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="ga3454e19240e23a023ea469f780d9899d"></a><!-- doxytag: member="genl.c::genl_send_simple" ref="ga3454e19240e23a023ea469f780d9899d" args="(struct nl_handle *handle, int family, int cmd, int version, int flags)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int genl_send_simple </td>
          <td>(</td>
          <td class="paramtype">struct nl_handle *&#160;</td>
          <td class="paramname"><em>handle</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>family</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>cmd</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>version</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>flags</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">handle</td><td>Netlink handle. </td></tr>
    <tr><td class="paramname">family</td><td>Generic netlink family </td></tr>
    <tr><td class="paramname">cmd</td><td>Command </td></tr>
    <tr><td class="paramname">version</td><td>Version </td></tr>
    <tr><td class="paramname">flags</td><td>Additional netlink message flags.</td></tr>
  </table>
  </dd>
</dl>
<p>Fills out a routing netlink request message and sends it out using <a class="el" href="group__nl.html#ga73ed88a505f2d67bcf328183fe1e692a" title="Send simple netlink message using nl_send_auto_complete()">nl_send_simple()</a>.</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="genl_8c_source.html#l00128">128</a> of file <a class="el" href="genl_8c_source.html">genl.c</a>.</p>

<p>References <a class="el" href="nl_8c_source.html#l00410">nl_send_simple()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>genlmsghdr hdr = {
                .cmd = cmd,
                .version = version,
        };

        <span class="keywordflow">return</span> <a class="code" href="group__nl.html#ga73ed88a505f2d67bcf328183fe1e692a" title="Send simple netlink message using nl_send_auto_complete()">nl_send_simple</a>(handle, family, flags, &amp;hdr, <span class="keyword">sizeof</span>(hdr));
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga8924deee081eaae1011d5b5ecc497478"></a><!-- doxytag: member="genl.c::genlmsg_data" ref="ga8924deee081eaae1011d5b5ecc497478" args="(const struct genlmsghdr *gnlh)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void* genlmsg_data </td>
          <td>(</td>
          <td class="paramtype">const struct genlmsghdr *&#160;</td>
          <td class="paramname"><em>gnlh</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">gnlh</td><td>genetlink messsage header </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="genl_8c_source.html#l00191">191</a> of file <a class="el" href="genl_8c_source.html">genl.c</a>.</p>

<p>Referenced by <a class="el" href="genl_8c_source.html#l00212">genlmsg_attrdata()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> ((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) gnlh + GENL_HDRLEN);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga33ac98a8facab52d3cfd3382ef5b1289"></a><!-- doxytag: member="genl.c::genlmsg_len" ref="ga33ac98a8facab52d3cfd3382ef5b1289" args="(const struct genlmsghdr *gnlh)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int genlmsg_len </td>
          <td>(</td>
          <td class="paramtype">const struct genlmsghdr *&#160;</td>
          <td class="paramname"><em>gnlh</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">gnlh</td><td>genetlink message header </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="genl_8c_source.html#l00200">200</a> of file <a class="el" href="genl_8c_source.html">genl.c</a>.</p>

<p>References <a class="el" href="netlink-kernel_8h_source.html#l00032">nlmsghdr::nlmsg_len</a>.</p>

<p>Referenced by <a class="el" href="genl_8c_source.html#l00222">genlmsg_attrlen()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span><a class="code" href="structnlmsghdr.html" title="Netlink message header.">nlmsghdr</a> *nlh = (<span class="keyword">struct </span><a class="code" href="structnlmsghdr.html" title="Netlink message header.">nlmsghdr</a> *)((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)gnlh -
                                                        NLMSG_HDRLEN);
        <span class="keywordflow">return</span> (nlh-&gt;<a class="code" href="structnlmsghdr.html#a5a3fdb3436743ec73e75471c899fd4bc" title="Length of message including header.">nlmsg_len</a> - GENL_HDRLEN - NLMSG_HDRLEN);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga800671a530b4c7a6fca7b5b43c8ca5aa"></a><!-- doxytag: member="genl.c::genlmsg_attrdata" ref="ga800671a530b4c7a6fca7b5b43c8ca5aa" args="(const struct genlmsghdr *gnlh, int hdrlen)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nlattr* genlmsg_attrdata </td>
          <td>(</td>
          <td class="paramtype">const struct genlmsghdr *&#160;</td>
          <td class="paramname"><em>gnlh</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>hdrlen</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">gnlh</td><td>generic netlink message header </td></tr>
    <tr><td class="paramname">hdrlen</td><td>length of family specific header </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="genl_8c_source.html#l00212">212</a> of file <a class="el" href="genl_8c_source.html">genl.c</a>.</p>

<p>References <a class="el" href="genl_8c_source.html#l00191">genlmsg_data()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__genl.html#ga8924deee081eaae1011d5b5ecc497478" title="Get head of message payload.">genlmsg_data</a>(gnlh) + NLMSG_ALIGN(hdrlen);
}
</pre></div>
</div>
</div>
<a class="anchor" id="gabdae2ebb53a8c98adb2446d33c74e1e5"></a><!-- doxytag: member="genl.c::genlmsg_attrlen" ref="gabdae2ebb53a8c98adb2446d33c74e1e5" args="(const struct genlmsghdr *gnlh, int hdrlen)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int genlmsg_attrlen </td>
          <td>(</td>
          <td class="paramtype">const struct genlmsghdr *&#160;</td>
          <td class="paramname"><em>gnlh</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>hdrlen</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">gnlh</td><td>generic netlink message header </td></tr>
    <tr><td class="paramname">hdrlen</td><td>length of family specific header </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="genl_8c_source.html#l00222">222</a> of file <a class="el" href="genl_8c_source.html">genl.c</a>.</p>

<p>References <a class="el" href="genl_8c_source.html#l00200">genlmsg_len()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__genl.html#ga33ac98a8facab52d3cfd3382ef5b1289" title="Get lenght of message payload.">genlmsg_len</a>(gnlh) - NLMSG_ALIGN(hdrlen);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga59cab79b0fb5c86a041b0220461d78dd"></a><!-- doxytag: member="genl.c::genlmsg_put" ref="ga59cab79b0fb5c86a041b0220461d78dd" args="(struct nl_msg *msg, uint32_t pid, uint32_t seq, int family, int hdrlen, int flags, uint8_t cmd, uint8_t version)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void* genlmsg_put </td>
          <td>(</td>
          <td class="paramtype">struct nl_msg *&#160;</td>
          <td class="paramname"><em>msg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&#160;</td>
          <td class="paramname"><em>pid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&#160;</td>
          <td class="paramname"><em>seq</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>family</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>hdrlen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>flags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t&#160;</td>
          <td class="paramname"><em>cmd</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t&#160;</td>
          <td class="paramname"><em>version</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">msg</td><td>netlink message </td></tr>
    <tr><td class="paramname">pid</td><td>netlink process id or NL_AUTO_PID </td></tr>
    <tr><td class="paramname">seq</td><td>sequence number of message or NL_AUTO_SEQ </td></tr>
    <tr><td class="paramname">family</td><td>generic netlink family </td></tr>
    <tr><td class="paramname">hdrlen</td><td>length of user specific header </td></tr>
    <tr><td class="paramname">flags</td><td>message flags </td></tr>
    <tr><td class="paramname">cmd</td><td>generic netlink command </td></tr>
    <tr><td class="paramname">version</td><td>protocol version</td></tr>
  </table>
  </dd>
</dl>
<p>Returns pointer to user specific header. </p>

<p>Definition at line <a class="el" href="genl_8c_source.html#l00247">247</a> of file <a class="el" href="genl_8c_source.html">genl.c</a>.</p>

<p>References <a class="el" href="msg_8c_source.html#l00218">nlmsg_data()</a>, and <a class="el" href="msg_8c_source.html#l00610">nlmsg_put()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span><a class="code" href="structnlmsghdr.html" title="Netlink message header.">nlmsghdr</a> *nlh;
        <span class="keyword">struct </span>genlmsghdr hdr = {
                .cmd = cmd,
                .version = version,
        };

        nlh = <a class="code" href="group__msg.html#ga16919a9a8579f8b538b0376781c1839d" title="Add a netlink message header to a netlink message.">nlmsg_put</a>(msg, pid, seq, family, GENL_HDRLEN + hdrlen, flags);
        <span class="keywordflow">if</span> (nlh == NULL)
                <span class="keywordflow">return</span> NULL;

        memcpy(<a class="code" href="group__msg.html#gae44a904bb40c8b5f5ff31539c21cfa5a" title="head of message payload">nlmsg_data</a>(nlh), &amp;hdr, <span class="keyword">sizeof</span>(hdr));
        NL_DBG(2, <span class="stringliteral">&quot;msg %p: Added generic netlink header cmd=%d version=%d\n&quot;</span>,
               msg, cmd, version);

        <span class="keywordflow">return</span> <a class="code" href="group__msg.html#gae44a904bb40c8b5f5ff31539c21cfa5a" title="head of message payload">nlmsg_data</a>(nlh) + GENL_HDRLEN;
}
</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>