Sophie

Sophie

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

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: Netfilter 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>Netfilter 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__ct.html">Conntrack</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__log.html">Log</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">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfnl.html#gaec500dac0b101190326f90e2abd3f7f8">nfnl_connect</a> (struct nl_handle *handle)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Create and connect netfilter netlink socket.  <a href="#gaec500dac0b101190326f90e2abd3f7f8"></a><br/></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__nfnl.html#ga0c1b3dd550e49dfc74f4ba18cc6cfebf">nfnl_send_simple</a> (struct nl_handle *handle, uint8_t subsys_id, uint8_t type, int flags, uint8_t family, uint16_t res_id)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Send trivial netfilter netlink message.  <a href="#ga0c1b3dd550e49dfc74f4ba18cc6cfebf"></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">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfnl.html#ga8bf67cd1369d4b882a38bdfa27ffb02a">nfnlmsg_subsys</a> (struct <a class="el" href="structnlmsghdr.html">nlmsghdr</a> *nlh)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get netfilter subsystem id from message.  <a href="#ga8bf67cd1369d4b882a38bdfa27ffb02a"></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__nfnl.html#gaf1bb10eb2462b46f2a4bf48d1a0e0c33">nfnlmsg_subtype</a> (struct <a class="el" href="structnlmsghdr.html">nlmsghdr</a> *nlh)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get netfilter message type from message.  <a href="#gaf1bb10eb2462b46f2a4bf48d1a0e0c33"></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__nfnl.html#ga91b2b1c9b8e243fe070229ef3fff3d6c">nfnlmsg_family</a> (struct <a class="el" href="structnlmsghdr.html">nlmsghdr</a> *nlh)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get netfilter family from message.  <a href="#ga91b2b1c9b8e243fe070229ef3fff3d6c"></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__nfnl.html#ga81d2b6a0cdc1ad5a48a15d536c0a8a6d">nfnlmsg_res_id</a> (struct <a class="el" href="structnlmsghdr.html">nlmsghdr</a> *nlh)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get netfilter resource id from message.  <a href="#ga81d2b6a0cdc1ad5a48a15d536c0a8a6d"></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">struct nl_msg *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfnl.html#gaf2c5b1fb596e8fdb62eb782496ac88c3">nfnlmsg_alloc_simple</a> (uint8_t subsys_id, uint8_t type, int flags, uint8_t family, uint16_t res_id)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocate a new netfilter netlink message.  <a href="#gaf2c5b1fb596e8fdb62eb782496ac88c3"></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__nfnl.html#ga94e6a82031c8e4cecca7140e2d0a62f4">nfnlmsg_put</a> (struct nl_msg *msg, uint32_t pid, uint32_t seq, uint8_t subsys_id, uint8_t type, int flags, uint8_t family, uint16_t res_id)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add netlink and netfilter netlink headers to netlink message.  <a href="#ga94e6a82031c8e4cecca7140e2d0a62f4"></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;-------- NFNL_HDRLEN ---------&gt;
 +--------------------------+- - -+------------+
 | Netfilter Netlink Header | Pad | Attributes |
 |    <span class="keyword">struct </span>nfgenmsg       |     |            |
 +--------------------------+- - -+------------+
 nfnlmsg_attrdata(nfg, hdrlen)-----^
</pre></div></dd></dl>
<dl class="user"><dt><b>1) Creating a new netfilter netlink message</b></dt><dd><div class="fragment"><pre class="fragment"> <span class="keyword">struct </span>nl_msg *msg;

 <span class="comment">// Create a new empty netlink message</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>();

 <span class="comment">// Append the netlink and netfilter netlink message header</span>
 hdr = <a class="code" href="group__nfnl.html#ga94e6a82031c8e4cecca7140e2d0a62f4" title="Add netlink and netfilter netlink headers to netlink message.">nfnlmsg_put</a>(msg, PID, SEQ, SUBSYS, TYPE, <a class="code" href="group__msg.html#gac39e15f4f5ba3d381bceae0f0476d001" title="Echo this request.">NLM_F_ECHO</a>,
                   FAMILY, RES_ID);

 <span class="comment">// Append the attributes.</span>
 <a class="code" href="group__attr.html#ga9891f766dcebe6bdb2ce86f021c6f6e6" title="Add a u32 netlink attribute to a netlink message.">nla_put_u32</a>(msg, 1, 0x10);

 <span class="comment">// Message is ready to be sent.</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>(nl_handle, msg);

 <span class="comment">// All done? Free the message.</span>
 <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) Sending of trivial messages</b></dt><dd><div class="fragment"><pre class="fragment"> <span class="comment">// For trivial messages not requiring any subsys specific header or</span>
 <span class="comment">// attributes, nfnl_send_simple() may be used to send messages directly.</span>
 <a class="code" href="group__nfnl.html#ga0c1b3dd550e49dfc74f4ba18cc6cfebf" title="Send trivial netfilter netlink message.">nfnl_send_simple</a>(nl_handle, SUBSYS, TYPE, 0, FAMILY, RES_ID);
</pre></div> </dd></dl>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="gaec500dac0b101190326f90e2abd3f7f8"></a><!-- doxytag: member="nfnl.c::nfnl_connect" ref="gaec500dac0b101190326f90e2abd3f7f8" args="(struct nl_handle *handle)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nfnl_connect </td>
          <td>(</td>
          <td class="paramtype">struct nl_handle *&#160;</td>
          <td class="paramname"><em>handle</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">handle</td><td>Netlink handle.</td></tr>
  </table>
  </dd>
</dl>
<p>Creates a NETLINK_NETFILTER netlink socket, binds the socket and issues a connection attempt.</p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__nl.html#ga68655d7fa8bd1944bec4761c95e576e9" title="Create and connect netlink socket.">nl_connect()</a></dd></dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on success or a negative error code. </dd></dl>

<p>Definition at line <a class="el" href="nfnl_8c_source.html#l00085">85</a> of file <a class="el" href="nfnl_8c_source.html">nfnl.c</a>.</p>

<p>References <a class="el" href="nl_8c_source.html#l00191">nl_connect()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__nl.html#ga68655d7fa8bd1944bec4761c95e576e9" title="Create and connect netlink socket.">nl_connect</a>(handle, NETLINK_NETFILTER);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga0c1b3dd550e49dfc74f4ba18cc6cfebf"></a><!-- doxytag: member="nfnl.c::nfnl_send_simple" ref="ga0c1b3dd550e49dfc74f4ba18cc6cfebf" args="(struct nl_handle *handle, uint8_t subsys_id, uint8_t type, int flags, uint8_t family, uint16_t res_id)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nfnl_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">uint8_t&#160;</td>
          <td class="paramname"><em>subsys_id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t&#160;</td>
          <td class="paramname"><em>type</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>family</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&#160;</td>
          <td class="paramname"><em>res_id</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">subsys_id</td><td>nfnetlink subsystem </td></tr>
    <tr><td class="paramname">type</td><td>nfnetlink message type </td></tr>
    <tr><td class="paramname">flags</td><td>message flags </td></tr>
    <tr><td class="paramname">family</td><td>nfnetlink address family </td></tr>
    <tr><td class="paramname">res_id</td><td>nfnetlink resource id</td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Newly allocated netlink message or NULL. </dd></dl>

<p>Definition at line <a class="el" href="nfnl_8c_source.html#l00108">108</a> of file <a class="el" href="nfnl_8c_source.html">nfnl.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>nfgenmsg hdr = {
                .nfgen_family = family,
                .version = NFNETLINK_V0,
                .res_id = htons(res_id),
        };

        <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, NFNLMSG_TYPE(subsys_id, type), flags,
                              &amp;hdr, <span class="keyword">sizeof</span>(hdr));
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga8bf67cd1369d4b882a38bdfa27ffb02a"></a><!-- doxytag: member="nfnl.c::nfnlmsg_subsys" ref="ga8bf67cd1369d4b882a38bdfa27ffb02a" args="(struct nlmsghdr *nlh)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">uint8_t nfnlmsg_subsys </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structnlmsghdr.html">nlmsghdr</a> *&#160;</td>
          <td class="paramname"><em>nlh</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">nlh</td><td>netlink messsage header </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="nfnl_8c_source.html#l00132">132</a> of file <a class="el" href="nfnl_8c_source.html">nfnl.c</a>.</p>

<p>References <a class="el" href="netlink-kernel_8h_source.html#l00037">nlmsghdr::nlmsg_type</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> NFNL_SUBSYS_ID(nlh-&gt;<a class="code" href="structnlmsghdr.html#a7232c4e6cb513010e64887b7eebf8823" title="Message type (content type)">nlmsg_type</a>);
}
</pre></div>
</div>
</div>
<a class="anchor" id="gaf1bb10eb2462b46f2a4bf48d1a0e0c33"></a><!-- doxytag: member="nfnl.c::nfnlmsg_subtype" ref="gaf1bb10eb2462b46f2a4bf48d1a0e0c33" args="(struct nlmsghdr *nlh)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">uint8_t nfnlmsg_subtype </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structnlmsghdr.html">nlmsghdr</a> *&#160;</td>
          <td class="paramname"><em>nlh</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">nlh</td><td>netlink messsage header </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="nfnl_8c_source.html#l00141">141</a> of file <a class="el" href="nfnl_8c_source.html">nfnl.c</a>.</p>

<p>References <a class="el" href="netlink-kernel_8h_source.html#l00037">nlmsghdr::nlmsg_type</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> NFNL_MSG_TYPE(nlh-&gt;<a class="code" href="structnlmsghdr.html#a7232c4e6cb513010e64887b7eebf8823" title="Message type (content type)">nlmsg_type</a>);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga91b2b1c9b8e243fe070229ef3fff3d6c"></a><!-- doxytag: member="nfnl.c::nfnlmsg_family" ref="ga91b2b1c9b8e243fe070229ef3fff3d6c" args="(struct nlmsghdr *nlh)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">uint8_t nfnlmsg_family </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structnlmsghdr.html">nlmsghdr</a> *&#160;</td>
          <td class="paramname"><em>nlh</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">nlh</td><td>netlink messsage header </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="nfnl_8c_source.html#l00150">150</a> of file <a class="el" href="nfnl_8c_source.html">nfnl.c</a>.</p>

<p>References <a class="el" href="msg_8c_source.html#l00218">nlmsg_data()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nfgenmsg *nfg = <a class="code" href="group__msg.html#gae44a904bb40c8b5f5ff31539c21cfa5a" title="head of message payload">nlmsg_data</a>(nlh);

        <span class="keywordflow">return</span> nfg-&gt;nfgen_family;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga81d2b6a0cdc1ad5a48a15d536c0a8a6d"></a><!-- doxytag: member="nfnl.c::nfnlmsg_res_id" ref="ga81d2b6a0cdc1ad5a48a15d536c0a8a6d" args="(struct nlmsghdr *nlh)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">uint16_t nfnlmsg_res_id </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structnlmsghdr.html">nlmsghdr</a> *&#160;</td>
          <td class="paramname"><em>nlh</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">nlh</td><td>netlink messsage header </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="nfnl_8c_source.html#l00161">161</a> of file <a class="el" href="nfnl_8c_source.html">nfnl.c</a>.</p>

<p>References <a class="el" href="msg_8c_source.html#l00218">nlmsg_data()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nfgenmsg *nfg = <a class="code" href="group__msg.html#gae44a904bb40c8b5f5ff31539c21cfa5a" title="head of message payload">nlmsg_data</a>(nlh);

        <span class="keywordflow">return</span> ntohs(nfg-&gt;res_id);
}
</pre></div>
</div>
</div>
<a class="anchor" id="gaf2c5b1fb596e8fdb62eb782496ac88c3"></a><!-- doxytag: member="nfnl.c::nfnlmsg_alloc_simple" ref="gaf2c5b1fb596e8fdb62eb782496ac88c3" args="(uint8_t subsys_id, uint8_t type, int flags, uint8_t family, uint16_t res_id)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nl_msg* nfnlmsg_alloc_simple </td>
          <td>(</td>
          <td class="paramtype">uint8_t&#160;</td>
          <td class="paramname"><em>subsys_id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t&#160;</td>
          <td class="paramname"><em>type</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>family</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&#160;</td>
          <td class="paramname"><em>res_id</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">subsys_id</td><td>nfnetlink subsystem </td></tr>
    <tr><td class="paramname">type</td><td>nfnetlink message type </td></tr>
    <tr><td class="paramname">flags</td><td>message flags </td></tr>
    <tr><td class="paramname">family</td><td>nfnetlink address family </td></tr>
    <tr><td class="paramname">res_id</td><td>nfnetlink resource id</td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Newly allocated netlink message or NULL. </dd></dl>

<p>Definition at line <a class="el" href="nfnl_8c_source.html#l00201">201</a> of file <a class="el" href="nfnl_8c_source.html">nfnl.c</a>.</p>

<p>References <a class="el" href="msg_8c_source.html#l00448">nlmsg_alloc_simple()</a>, and <a class="el" href="msg_8c_source.html#l00656">nlmsg_free()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nl_msg *msg;

        msg = <a class="code" href="group__msg.html#ga580d8697d19050c55060bc10ab4eae9f" title="Allocate a new netlink message.">nlmsg_alloc_simple</a>(NFNLMSG_TYPE(subsys_id, type), flags);
        <span class="keywordflow">if</span> (msg == NULL)
                <span class="keywordflow">return</span> NULL;

        <span class="keywordflow">if</span> (nfnlmsg_append(msg, family, res_id) &lt; 0)
                <span class="keywordflow">goto</span> nla_put_failure;

        <span class="keywordflow">return</span> msg;

nla_put_failure:
        <a class="code" href="group__msg.html#ga138ba9bee70553f9fbe7143deacad48c" title="Free a netlink message.">nlmsg_free</a>(msg);
        <span class="keywordflow">return</span> NULL;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga94e6a82031c8e4cecca7140e2d0a62f4"></a><!-- doxytag: member="nfnl.c::nfnlmsg_put" ref="ga94e6a82031c8e4cecca7140e2d0a62f4" args="(struct nl_msg *msg, uint32_t pid, uint32_t seq, uint8_t subsys_id, uint8_t type, int flags, uint8_t family, uint16_t res_id)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nfnlmsg_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">uint8_t&#160;</td>
          <td class="paramname"><em>subsys_id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t&#160;</td>
          <td class="paramname"><em>type</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>family</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&#160;</td>
          <td class="paramname"><em>res_id</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 </td></tr>
    <tr><td class="paramname">seq</td><td>sequence number of message </td></tr>
    <tr><td class="paramname">subsys_id</td><td>nfnetlink subsystem </td></tr>
    <tr><td class="paramname">type</td><td>nfnetlink message type </td></tr>
    <tr><td class="paramname">flags</td><td>message flags </td></tr>
    <tr><td class="paramname">family</td><td>nfnetlink address family </td></tr>
    <tr><td class="paramname">res_id</td><td>nfnetlink resource id </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="nfnl_8c_source.html#l00231">231</a> of file <a class="el" href="nfnl_8c_source.html">nfnl.c</a>.</p>

<p>References <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;

        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, NFNLMSG_TYPE(subsys_id, type), 0, flags);
        <span class="keywordflow">if</span> (nlh == NULL)
                <span class="keywordflow">return</span> nl_get_errno();

        <span class="keywordflow">return</span> nfnlmsg_append(msg, family, res_id);
}
</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>