Sophie

Sophie

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

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: Addresses</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="headertitle">
<h1>Addresses</h1>  </div>
<div class="ingroups"><a class="el" href="group__rtnl.html">Routing Netlink</a></div></div>
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="member-group"></a>
Allocation/Freeing</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga234e9919665614ce3193847c8f43c2b0"></a><!-- doxytag: member="rtaddr::rtnl_addr_alloc" ref="ga234e9919665614ce3193847c8f43c2b0" args="(void)" -->
struct rtnl_addr *&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_alloc</b> (void)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga05b1f67ed4a145706c3acf178e498652"></a><!-- doxytag: member="rtaddr::rtnl_addr_put" ref="ga05b1f67ed4a145706c3acf178e498652" args="(struct rtnl_addr *addr)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_put</b> (struct rtnl_addr *addr)</td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Cache Management</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga49a90471fbc4d83f4127cbbd4f971c40"></a><!-- doxytag: member="rtaddr::rtnl_addr_alloc_cache" ref="ga49a90471fbc4d83f4127cbbd4f971c40" args="(struct nl_handle *handle)" -->
struct nl_cache *&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_alloc_cache</b> (struct nl_handle *handle)</td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Addition</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__rtaddr.html#ga85d2aead6c32082fb4e8e7680be968b9">rtnl_addr_build_add_request</a> (struct rtnl_addr *addr, int flags)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Build netlink request message to request addition of new address.  <a href="#ga85d2aead6c32082fb4e8e7680be968b9"></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__rtaddr.html#gaca17d1f36aba895483069b53c0a237b1">rtnl_addr_add</a> (struct nl_handle *handle, struct rtnl_addr *addr, int flags)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Request addition of new address.  <a href="#gaca17d1f36aba895483069b53c0a237b1"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Deletion</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__rtaddr.html#ga187197659007dbb5deb4282cf546d18a">rtnl_addr_build_delete_request</a> (struct rtnl_addr *addr, int flags)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Build a netlink request message to request deletion of an address.  <a href="#ga187197659007dbb5deb4282cf546d18a"></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__rtaddr.html#ga525b1c90bb5a26c0c945a93d37973c8a">rtnl_addr_delete</a> (struct nl_handle *handle, struct rtnl_addr *addr, int flags)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Request deletion of an address.  <a href="#ga525b1c90bb5a26c0c945a93d37973c8a"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Attributes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gadc7831a2bf0d291e7512f325127f8676"></a><!-- doxytag: member="rtaddr::rtnl_addr_set_label" ref="gadc7831a2bf0d291e7512f325127f8676" args="(struct rtnl_addr *addr, const char *label)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_set_label</b> (struct rtnl_addr *addr, const char *label)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga231d94f0a7b1cfb0968c45dadb6434e8"></a><!-- doxytag: member="rtaddr::rtnl_addr_get_label" ref="ga231d94f0a7b1cfb0968c45dadb6434e8" args="(struct rtnl_addr *addr)" -->
char *&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_get_label</b> (struct rtnl_addr *addr)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2a3d7dfa3a9ddfac3c20386f9dc73920"></a><!-- doxytag: member="rtaddr::rtnl_addr_set_ifindex" ref="ga2a3d7dfa3a9ddfac3c20386f9dc73920" args="(struct rtnl_addr *addr, int ifindex)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_set_ifindex</b> (struct rtnl_addr *addr, int ifindex)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae664128e6fcf99e40ff52accbffaa0c2"></a><!-- doxytag: member="rtaddr::rtnl_addr_get_ifindex" ref="gae664128e6fcf99e40ff52accbffaa0c2" args="(struct rtnl_addr *addr)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_get_ifindex</b> (struct rtnl_addr *addr)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaaab07f1a14ab7be5c54ce350f87d0727"></a><!-- doxytag: member="rtaddr::rtnl_addr_set_family" ref="gaaab07f1a14ab7be5c54ce350f87d0727" args="(struct rtnl_addr *addr, int family)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_set_family</b> (struct rtnl_addr *addr, int family)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac2faf870212741c1980f20a4cd6b8d78"></a><!-- doxytag: member="rtaddr::rtnl_addr_get_family" ref="gac2faf870212741c1980f20a4cd6b8d78" args="(struct rtnl_addr *addr)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_get_family</b> (struct rtnl_addr *addr)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gadf25e4b270e5cd4cd4293645adb83e5b"></a><!-- doxytag: member="rtaddr::rtnl_addr_set_prefixlen" ref="gadf25e4b270e5cd4cd4293645adb83e5b" args="(struct rtnl_addr *addr, int prefix)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_set_prefixlen</b> (struct rtnl_addr *addr, int prefix)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga855ea7ecbd5d0f7e7dadbb3f389d15e3"></a><!-- doxytag: member="rtaddr::rtnl_addr_get_prefixlen" ref="ga855ea7ecbd5d0f7e7dadbb3f389d15e3" args="(struct rtnl_addr *addr)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_get_prefixlen</b> (struct rtnl_addr *addr)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga50b8468584e9ce9091c14bd967ac5439"></a><!-- doxytag: member="rtaddr::rtnl_addr_set_scope" ref="ga50b8468584e9ce9091c14bd967ac5439" args="(struct rtnl_addr *addr, int scope)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_set_scope</b> (struct rtnl_addr *addr, int scope)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad165a49ebb2d18be22cce5d2639461c9"></a><!-- doxytag: member="rtaddr::rtnl_addr_get_scope" ref="gad165a49ebb2d18be22cce5d2639461c9" args="(struct rtnl_addr *addr)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_get_scope</b> (struct rtnl_addr *addr)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9ca84385567aabaaa46aa979a310d955"></a><!-- doxytag: member="rtaddr::rtnl_addr_set_flags" ref="ga9ca84385567aabaaa46aa979a310d955" args="(struct rtnl_addr *addr, unsigned int flags)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_set_flags</b> (struct rtnl_addr *addr, unsigned int flags)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga03f37130a7288d5f918f9ac60dd48fae"></a><!-- doxytag: member="rtaddr::rtnl_addr_unset_flags" ref="ga03f37130a7288d5f918f9ac60dd48fae" args="(struct rtnl_addr *addr, unsigned int flags)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_unset_flags</b> (struct rtnl_addr *addr, unsigned int flags)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4b63fb4fcaa0b6c3d7b2b0dc5e081382"></a><!-- doxytag: member="rtaddr::rtnl_addr_get_flags" ref="ga4b63fb4fcaa0b6c3d7b2b0dc5e081382" args="(struct rtnl_addr *addr)" -->
unsigned int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_get_flags</b> (struct rtnl_addr *addr)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga60ce2ba4259d84480eb81483850d70f7"></a><!-- doxytag: member="rtaddr::rtnl_addr_set_local" ref="ga60ce2ba4259d84480eb81483850d70f7" args="(struct rtnl_addr *addr, struct nl_addr *local)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_set_local</b> (struct rtnl_addr *addr, struct nl_addr *local)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga77d81f83af21d47f454aaa16bdb74cf5"></a><!-- doxytag: member="rtaddr::rtnl_addr_get_local" ref="ga77d81f83af21d47f454aaa16bdb74cf5" args="(struct rtnl_addr *addr)" -->
struct nl_addr *&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_get_local</b> (struct rtnl_addr *addr)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4e35b5d706a9d0df3cbb9c257ea26564"></a><!-- doxytag: member="rtaddr::rtnl_addr_set_peer" ref="ga4e35b5d706a9d0df3cbb9c257ea26564" args="(struct rtnl_addr *addr, struct nl_addr *peer)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_set_peer</b> (struct rtnl_addr *addr, struct nl_addr *peer)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab63af1dc2f67712534791c680b38a103"></a><!-- doxytag: member="rtaddr::rtnl_addr_get_peer" ref="gab63af1dc2f67712534791c680b38a103" args="(struct rtnl_addr *addr)" -->
struct nl_addr *&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_get_peer</b> (struct rtnl_addr *addr)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaec6cb9e29ba6deb696cef3892c070846"></a><!-- doxytag: member="rtaddr::rtnl_addr_set_broadcast" ref="gaec6cb9e29ba6deb696cef3892c070846" args="(struct rtnl_addr *addr, struct nl_addr *bcast)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_set_broadcast</b> (struct rtnl_addr *addr, struct nl_addr *bcast)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1f17f041e7632ccc98f17614943f8f3a"></a><!-- doxytag: member="rtaddr::rtnl_addr_get_broadcast" ref="ga1f17f041e7632ccc98f17614943f8f3a" args="(struct rtnl_addr *addr)" -->
struct nl_addr *&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_get_broadcast</b> (struct rtnl_addr *addr)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga08797df4c303a1e1412baaee01c2c38e"></a><!-- doxytag: member="rtaddr::rtnl_addr_set_anycast" ref="ga08797df4c303a1e1412baaee01c2c38e" args="(struct rtnl_addr *addr, struct nl_addr *anycast)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_set_anycast</b> (struct rtnl_addr *addr, struct nl_addr *anycast)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga74f4c2ed3a87f4b74def69a518014827"></a><!-- doxytag: member="rtaddr::rtnl_addr_get_anycast" ref="ga74f4c2ed3a87f4b74def69a518014827" args="(struct rtnl_addr *addr)" -->
struct nl_addr *&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_get_anycast</b> (struct rtnl_addr *addr)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabc3fefcf122f096ef54c2f8e2ffa8058"></a><!-- doxytag: member="rtaddr::rtnl_addr_set_multicast" ref="gabc3fefcf122f096ef54c2f8e2ffa8058" args="(struct rtnl_addr *addr, struct nl_addr *multicast)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_set_multicast</b> (struct rtnl_addr *addr, struct nl_addr *multicast)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0eb0ff51182467f7a6b8da7a78a758f1"></a><!-- doxytag: member="rtaddr::rtnl_addr_get_multicast" ref="ga0eb0ff51182467f7a6b8da7a78a758f1" args="(struct rtnl_addr *addr)" -->
struct nl_addr *&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_get_multicast</b> (struct rtnl_addr *addr)</td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Flags Translations</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab2759acd7f9e544e0a1added549582cd"></a><!-- doxytag: member="rtaddr::rtnl_addr_flags2str" ref="gab2759acd7f9e544e0a1added549582cd" args="(int flags, char *buf, size_t size)" -->
char *&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_flags2str</b> (int flags, char *buf, size_t size)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga422a2ef5611591fee6de337985390b96"></a><!-- doxytag: member="rtaddr::rtnl_addr_str2flags" ref="ga422a2ef5611591fee6de337985390b96" args="(const char *name)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_addr_str2flags</b> (const char *name)</td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<dl class="note"><dt><b>Note:</b></dt><dd>The maximum size of an address label is IFNAMSIZ.</dd>
<dd>
The address may not contain a prefix length if the peer address has been specified already.</dd></dl>
<dl class="user"><dt><b>1) Address Addition</b></dt><dd><div class="fragment"><pre class="fragment"> <span class="comment">// Allocate an empty address object to be filled out with the attributes</span>
 <span class="comment">// of the new address.</span>
 <span class="keyword">struct </span>rtnl_addr *addr = rtnl_addr_alloc();

 <span class="comment">// Fill out the mandatory attributes of the new address. Setting the</span>
 <span class="comment">// local address will automatically set the address family and the</span>
 <span class="comment">// prefix length to the correct values.</span>
 rtnl_addr_set_ifindex(addr, ifindex);
 rtnl_addr_set_local(addr, local_addr);

 <span class="comment">// The label of the address can be specified, currently only supported</span>
 <span class="comment">// by IPv4 and DECnet.</span>
 rtnl_addr_set_label(addr, <span class="stringliteral">&quot;mylabel&quot;</span>);

 <span class="comment">// The peer address can be specified if necessary, in either case a peer</span>
 <span class="comment">// address will be sent to the kernel in order to fullfil the interface</span>
 <span class="comment">// requirements. If none is set, it will equal the local address.</span>
 <span class="comment">// Note: Real peer addresses are only supported by IPv4 for now.</span>
 rtnl_addr_set_peer(addr, peer_addr);

 <span class="comment">// In case you want to have the address have a scope other than global</span>
 <span class="comment">// it may be overwritten using rtnl_addr_set_scope(). The scope currently</span>
 <span class="comment">// cannot be set for IPv6 addresses.</span>
 rtnl_addr_set_scope(addr, rtnl_str2scope(<span class="stringliteral">&quot;site&quot;</span>));

 <span class="comment">// Broadcast and anycast address may be specified using the relevant</span>
 <span class="comment">// functions, the address family will be verified if one of the other</span>
 <span class="comment">// addresses has been set already. Currently only works for IPv4.</span>
 rtnl_addr_set_broadcast(addr, broadcast_addr);
 rtnl_addr_set_anycast(addr, anycast_addr);

 <span class="comment">// Build the netlink message and send it to the kernel, the operation will</span>
 <span class="comment">// block until the operation has been completed. Alternatively the required</span>
 <span class="comment">// netlink message can be built using rtnl_addr_build_add_request() to be</span>
 <span class="comment">// sent out using nl_send_auto_complete().</span>
 <a class="code" href="group__rtaddr.html#gaca17d1f36aba895483069b53c0a237b1" title="Request addition of new address.">rtnl_addr_add</a>(handle, addr, 0);

 <span class="comment">// Free the memory</span>
 rtnl_addr_put(addr);
</pre></div></dd></dl>
<dl class="user"><dt><b>2) Address Deletion</b></dt><dd><div class="fragment"><pre class="fragment"> <span class="comment">// Allocate an empty address object to be filled out with the attributes</span>
 <span class="comment">// matching the address to be deleted. Alternatively a fully equipped</span>
 <span class="comment">// address object out of a cache can be used instead.</span>
 <span class="keyword">struct </span>rtnl_addr *addr = rtnl_addr_alloc();

 <span class="comment">// The only mandatory parameter besides the address family is the interface</span>
 <span class="comment">// index the address is on, i.e. leaving out all other parameters will</span>
 <span class="comment">// result in all addresses of the specified address family interface tuple</span>
 <span class="comment">// to be deleted.</span>
 rtnl_addr_set_ifindex(addr, ifindex);

 <span class="comment">// Specyfing the address family manually is only required if neither the</span>
 <span class="comment">// local nor peer address have been specified.</span>
 rtnl_addr_set_family(addr, AF_INET);

 <span class="comment">// Specyfing the local address is optional but the best choice to delete</span>
 <span class="comment">// specific addresses.</span>
 rtnl_addr_set_local(addr, local_addr);

 <span class="comment">// The label of the address can be specified, currently only supported</span>
 <span class="comment">// by IPv4 and DECnet.</span>
 rtnl_addr_set_label(addr, <span class="stringliteral">&quot;mylabel&quot;</span>);

 <span class="comment">// The peer address can be specified if necessary, in either case a peer</span>
 <span class="comment">// address will be sent to the kernel in order to fullfil the interface</span>
 <span class="comment">// requirements. If none is set, it will equal the local address.</span>
 <span class="comment">// Note: Real peer addresses are only supported by IPv4 for now.</span>
 rtnl_addr_set_peer(addr, peer_addr);

 <span class="comment">// Build the netlink message and send it to the kernel, the operation will</span>
 <span class="comment">// block until the operation has been completed. Alternatively the required</span>
 <span class="comment">// netlink message can be built using rtnl_addr_build_delete_request()</span>
 <span class="comment">// to be sent out using nl_send_auto_complete().</span>
 <a class="code" href="group__rtaddr.html#ga525b1c90bb5a26c0c945a93d37973c8a" title="Request deletion of an address.">rtnl_addr_delete</a>(handle, addr, 0);

 <span class="comment">// Free the memory</span>
 rtnl_addr_put(addr);
</pre></div> </dd></dl>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="ga85d2aead6c32082fb4e8e7680be968b9"></a><!-- doxytag: member="addr.c::rtnl_addr_build_add_request" ref="ga85d2aead6c32082fb4e8e7680be968b9" args="(struct rtnl_addr *addr, int flags)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nl_msg* rtnl_addr_build_add_request </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_addr *&#160;</td>
          <td class="paramname"><em>addr</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><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">addr</td><td>Address object representing the new address. </td></tr>
    <tr><td class="paramname">flags</td><td>Additional netlink message flags.</td></tr>
  </table>
  </dd>
</dl>
<p>Builds a new netlink message requesting the addition of a new address. The netlink message header isn't fully equipped with all relevant fields and must thus be sent out via <a class="el" href="group__nl.html#ga01a2aad82350f867e704d5c696438b60" title="Send netlink message and check &amp; extend header values as needed.">nl_send_auto_complete()</a> or supplemented as needed.</p>
<p>Minimal required attributes:</p>
<ul>
<li>interface index (rtnl_addr_set_ifindex())</li>
<li>local address (rtnl_addr_set_local())</li>
</ul>
<p>The scope will default to universe except for loopback addresses in which case a host scope is used if not specified otherwise.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>Free the memory after usage using <a class="el" href="group__msg.html#ga138ba9bee70553f9fbe7143deacad48c" title="Free a netlink message.">nlmsg_free()</a>. </dd></dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Newly allocated netlink message or NULL if an error occured. </dd></dl>

<p>Definition at line <a class="el" href="route_2addr_8c_source.html#l00737">737</a> of file <a class="el" href="route_2addr_8c_source.html">addr.c</a>.</p>

<p>References <a class="el" href="netlink-kernel_8h_source.html#l00134">NLM_F_CREATE</a>.</p>

<p>Referenced by <a class="el" href="route_2addr_8c_source.html#l00765">rtnl_addr_add()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">int</span> required = ADDR_ATTR_IFINDEX | ADDR_ATTR_FAMILY |
                       ADDR_ATTR_PREFIXLEN | ADDR_ATTR_LOCAL;

        <span class="keywordflow">if</span> ((addr-&gt;ce_mask &amp; required) != required) {
                nl_error(EINVAL, <span class="stringliteral">&quot;Missing mandatory attributes, required are: &quot;</span>
                                 <span class="stringliteral">&quot;ifindex, family, prefixlen, local address.&quot;</span>);
                <span class="keywordflow">return</span> NULL;
        }
        
        <span class="keywordflow">return</span> build_addr_msg(addr, RTM_NEWADDR, <a class="code" href="group__msg.html#ga20a00ae52e4c150f54649d7346d23a7a" title="Create config object if it doesn&amp;#39;t already exist.">NLM_F_CREATE</a> | flags);
}
</pre></div>
</div>
</div>
<a class="anchor" id="gaca17d1f36aba895483069b53c0a237b1"></a><!-- doxytag: member="addr.c::rtnl_addr_add" ref="gaca17d1f36aba895483069b53c0a237b1" args="(struct nl_handle *handle, struct rtnl_addr *addr, int flags)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_addr_add </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">struct rtnl_addr *&#160;</td>
          <td class="paramname"><em>addr</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">addr</td><td>Address object representing the new address. </td></tr>
    <tr><td class="paramname">flags</td><td>Additional netlink message flags.</td></tr>
  </table>
  </dd>
</dl>
<p>Builds a netlink message by calling <a class="el" href="group__rtaddr.html#ga85d2aead6c32082fb4e8e7680be968b9" title="Build netlink request message to request addition of new address.">rtnl_addr_build_add_request()</a>, sends the request to the kernel and waits for the next ACK to be received and thus blocks until the request has been fullfilled.</p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__rtaddr.html#ga85d2aead6c32082fb4e8e7680be968b9" title="Build netlink request message to request addition of new address.">rtnl_addr_build_add_request()</a></dd></dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on sucess or a negative error if an error occured. </dd></dl>

<p>Definition at line <a class="el" href="route_2addr_8c_source.html#l00765">765</a> of file <a class="el" href="route_2addr_8c_source.html">addr.c</a>.</p>

<p>References <a class="el" href="nl_8c_source.html#l00373">nl_send_auto_complete()</a>, <a class="el" href="nl_8c_source.html#l00800">nl_wait_for_ack()</a>, <a class="el" href="msg_8c_source.html#l00656">nlmsg_free()</a>, and <a class="el" href="route_2addr_8c_source.html#l00737">rtnl_addr_build_add_request()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nl_msg *msg;
        <span class="keywordtype">int</span> err;

        msg = <a class="code" href="group__rtaddr.html#ga85d2aead6c32082fb4e8e7680be968b9" title="Build netlink request message to request addition of new address.">rtnl_addr_build_add_request</a>(addr, flags);
        <span class="keywordflow">if</span> (!msg)
                <span class="keywordflow">return</span> nl_get_errno();

        err = <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, msg);
        <a class="code" href="group__msg.html#ga138ba9bee70553f9fbe7143deacad48c" title="Free a netlink message.">nlmsg_free</a>(msg);
        <span class="keywordflow">if</span> (err &lt; 0)
                <span class="keywordflow">return</span> err;

        <span class="keywordflow">return</span> <a class="code" href="group__nl.html#gaa65fec588e0a0a2de1881fb8366ccd79" title="Wait for ACK.">nl_wait_for_ack</a>(handle);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga187197659007dbb5deb4282cf546d18a"></a><!-- doxytag: member="addr.c::rtnl_addr_build_delete_request" ref="ga187197659007dbb5deb4282cf546d18a" args="(struct rtnl_addr *addr, int flags)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nl_msg* rtnl_addr_build_delete_request </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_addr *&#160;</td>
          <td class="paramname"><em>addr</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><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">addr</td><td>Address object to be deleteted. </td></tr>
    <tr><td class="paramname">flags</td><td>Additional netlink message flags.</td></tr>
  </table>
  </dd>
</dl>
<p>Builds a new netlink message requesting a deletion of an address. The netlink message header isn't fully equipped with all relevant fields and must thus be sent out via <a class="el" href="group__nl.html#ga01a2aad82350f867e704d5c696438b60" title="Send netlink message and check &amp; extend header values as needed.">nl_send_auto_complete()</a> or supplemented as needed.</p>
<p>Minimal required attributes:</p>
<ul>
<li>interface index (rtnl_addr_set_ifindex())</li>
<li>address family (rtnl_addr_set_family())</li>
</ul>
<p>Optional attributes:</p>
<ul>
<li>local address (rtnl_addr_set_local())</li>
<li>label (rtnl_addr_set_label(), IPv4/DECnet only)</li>
<li>peer address (rtnl_addr_set_peer(), IPv4 only)</li>
</ul>
<dl class="note"><dt><b>Note:</b></dt><dd>Free the memory after usage using <a class="el" href="group__msg.html#ga138ba9bee70553f9fbe7143deacad48c" title="Free a netlink message.">nlmsg_free()</a>. </dd></dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Newly allocated netlink message or NULL if an error occured. </dd></dl>

<p>Definition at line <a class="el" href="route_2addr_8c_source.html#l00811">811</a> of file <a class="el" href="route_2addr_8c_source.html">addr.c</a>.</p>

<p>Referenced by <a class="el" href="route_2addr_8c_source.html#l00838">rtnl_addr_delete()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">int</span> required = ADDR_ATTR_IFINDEX | ADDR_ATTR_FAMILY;

        <span class="keywordflow">if</span> ((addr-&gt;ce_mask &amp; required) != required) {
                nl_error(EINVAL, <span class="stringliteral">&quot;Missing mandatory attributes, required are: &quot;</span>
                                 <span class="stringliteral">&quot;ifindex, family&quot;</span>);
                <span class="keywordflow">return</span> NULL;
        }
        
        <span class="keywordflow">return</span> build_addr_msg(addr, RTM_DELADDR, flags);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga525b1c90bb5a26c0c945a93d37973c8a"></a><!-- doxytag: member="addr.c::rtnl_addr_delete" ref="ga525b1c90bb5a26c0c945a93d37973c8a" args="(struct nl_handle *handle, struct rtnl_addr *addr, int flags)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_addr_delete </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">struct rtnl_addr *&#160;</td>
          <td class="paramname"><em>addr</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">addr</td><td>Address object to be deleted. </td></tr>
    <tr><td class="paramname">flags</td><td>Additional netlink message flags.</td></tr>
  </table>
  </dd>
</dl>
<p>Builds a netlink message by calling <a class="el" href="group__rtaddr.html#ga187197659007dbb5deb4282cf546d18a" title="Build a netlink request message to request deletion of an address.">rtnl_addr_build_delete_request()</a>, sends the request to the kernel and waits for the next ACK to be received and thus blocks until the request has been fullfilled.</p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__rtaddr.html#ga187197659007dbb5deb4282cf546d18a" title="Build a netlink request message to request deletion of an address.">rtnl_addr_build_delete_request()</a>;</dd></dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on sucess or a negative error if an error occured. </dd></dl>

<p>Definition at line <a class="el" href="route_2addr_8c_source.html#l00838">838</a> of file <a class="el" href="route_2addr_8c_source.html">addr.c</a>.</p>

<p>References <a class="el" href="nl_8c_source.html#l00373">nl_send_auto_complete()</a>, <a class="el" href="nl_8c_source.html#l00800">nl_wait_for_ack()</a>, <a class="el" href="msg_8c_source.html#l00656">nlmsg_free()</a>, and <a class="el" href="route_2addr_8c_source.html#l00811">rtnl_addr_build_delete_request()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nl_msg *msg;
        <span class="keywordtype">int</span> err;

        msg = <a class="code" href="group__rtaddr.html#ga187197659007dbb5deb4282cf546d18a" title="Build a netlink request message to request deletion of an address.">rtnl_addr_build_delete_request</a>(addr, flags);
        <span class="keywordflow">if</span> (!msg)
                <span class="keywordflow">return</span> nl_get_errno();

        err = <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, msg);
        <a class="code" href="group__msg.html#ga138ba9bee70553f9fbe7143deacad48c" title="Free a netlink message.">nlmsg_free</a>(msg);
        <span class="keywordflow">if</span> (err &lt; 0)
                <span class="keywordflow">return</span> err;

        <span class="keywordflow">return</span> <a class="code" href="group__nl.html#gaa65fec588e0a0a2de1881fb8366ccd79" title="Wait for ACK.">nl_wait_for_ack</a>(handle);
}
</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>