Sophie

Sophie

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

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: Links (Interfaces)</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> &#124;
<a href="#define-members">Defines</a>  </div>
  <div class="headertitle">
<h1>Links (Interfaces)</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="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__link__info.html">Link Info API</a></td></tr>
<tr><td colspan="2"><h2><a name="define-members"></a>
Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga774720bec7d14a6e314238c42122ec78"></a><!-- doxytag: member="link::RTNL_LINK_NOT_FOUND" ref="ga774720bec7d14a6e314238c42122ec78" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__link.html#ga774720bec7d14a6e314238c42122ec78">RTNL_LINK_NOT_FOUND</a>&#160;&#160;&#160;-1</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Special interface index stating the link was not found. <br/></td></tr>
<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="gae7123d57288bfe90dc405cb67c72615d"></a><!-- doxytag: member="link::rtnl_link_alloc" ref="gae7123d57288bfe90dc405cb67c72615d" args="(void)" -->
struct rtnl_link *&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_alloc</b> (void)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad4c047c313cc2d6b84943707f37509c4"></a><!-- doxytag: member="link::rtnl_link_put" ref="gad4c047c313cc2d6b84943707f37509c4" args="(struct rtnl_link *link)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_put</b> (struct rtnl_link *link)</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">struct nl_cache *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__link.html#gaf0d952cc3ca4e787b51f38b2fedfee24">rtnl_link_alloc_cache</a> (struct nl_handle *handle)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocate link cache and fill in all configured links.  <a href="#gaf0d952cc3ca4e787b51f38b2fedfee24"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct rtnl_link *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__link.html#ga2a3657b69c47c9e3ab809cac73bf0986">rtnl_link_get</a> (struct nl_cache *cache, int ifindex)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Look up link by interface index in the provided cache.  <a href="#ga2a3657b69c47c9e3ab809cac73bf0986"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct rtnl_link *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__link.html#ga1d583e4f0b43c89d854e5e681a529fad">rtnl_link_get_by_name</a> (struct nl_cache *cache, const char *name)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Look up link by link name in the provided cache.  <a href="#ga1d583e4f0b43c89d854e5e681a529fad"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Link Modifications</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__link.html#gadb36ec872a4469a3e30a94394f0bad3e">rtnl_link_build_change_request</a> (struct rtnl_link *old, struct rtnl_link *tmpl, int flags)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Builds a netlink change request message to change link attributes.  <a href="#gadb36ec872a4469a3e30a94394f0bad3e"></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__link.html#ga9ea11f67fcc1d3c75fdac1fcf860fa64">rtnl_link_change</a> (struct nl_handle *handle, struct rtnl_link *old, struct rtnl_link *tmpl, int flags)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Change link attributes.  <a href="#ga9ea11f67fcc1d3c75fdac1fcf860fa64"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Name &lt;-&gt; Index Translations</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__link.html#ga66328cb096fb4d21499775e75089109d">rtnl_link_i2name</a> (struct nl_cache *cache, int ifindex, char *dst, size_t len)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Translate an interface index to the corresponding link name.  <a href="#ga66328cb096fb4d21499775e75089109d"></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__link.html#ga8de66ce556b6d23f045fbc6079d547ed">rtnl_link_name2i</a> (struct nl_cache *cache, const char *name)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Translate a link name to the corresponding interface index.  <a href="#ga8de66ce556b6d23f045fbc6079d547ed"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Link Flags Translations</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga577724a7dad1c8fadf4df622457445b9"></a><!-- doxytag: member="link::rtnl_link_flags2str" ref="ga577724a7dad1c8fadf4df622457445b9" args="(int flags, char *buf, size_t len)" -->
char *&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_flags2str</b> (int flags, char *buf, size_t len)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5754f00496c9f8b41598357dc741b2c5"></a><!-- doxytag: member="link::rtnl_link_str2flags" ref="ga5754f00496c9f8b41598357dc741b2c5" args="(const char *name)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_str2flags</b> (const char *name)</td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Link Statistics Translations</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf7cdf0414a6d3e19d780b06e0528f7f7"></a><!-- doxytag: member="link::rtnl_link_stat2str" ref="gaf7cdf0414a6d3e19d780b06e0528f7f7" args="(int st, char *buf, size_t len)" -->
char *&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_stat2str</b> (int st, char *buf, size_t len)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9de23e9760fb8bce38a15845dc34080e"></a><!-- doxytag: member="link::rtnl_link_str2stat" ref="ga9de23e9760fb8bce38a15845dc34080e" args="(const char *name)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_str2stat</b> (const char *name)</td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Link Operstate Translations</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7bac10f9fb01d7bbf2d1636ec1f6f812"></a><!-- doxytag: member="link::rtnl_link_operstate2str" ref="ga7bac10f9fb01d7bbf2d1636ec1f6f812" args="(int st, char *buf, size_t len)" -->
char *&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_operstate2str</b> (int st, char *buf, size_t len)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2a4ecc90559697cd3eed2f81a144138f"></a><!-- doxytag: member="link::rtnl_link_str2operstate" ref="ga2a4ecc90559697cd3eed2f81a144138f" args="(const char *name)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_str2operstate</b> (const char *name)</td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Link Mode Translations</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf162d20d9ba4c341c0516c525c88fd21"></a><!-- doxytag: member="link::rtnl_link_mode2str" ref="gaf162d20d9ba4c341c0516c525c88fd21" args="(int st, char *buf, size_t len)" -->
char *&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_mode2str</b> (int st, char *buf, size_t len)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4c326f1013bf1492d1e971df60cd3186"></a><!-- doxytag: member="link::rtnl_link_str2mode" ref="ga4c326f1013bf1492d1e971df60cd3186" args="(const char *name)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_str2mode</b> (const char *name)</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="ga3eedea7bf5eccbc57643d91a7461d912"></a><!-- doxytag: member="link::rtnl_link_set_qdisc" ref="ga3eedea7bf5eccbc57643d91a7461d912" args="(struct rtnl_link *link, const char *qdisc)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_set_qdisc</b> (struct rtnl_link *link, const char *qdisc)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga62c055550426d189f723d9a03f8677f9"></a><!-- doxytag: member="link::rtnl_link_get_qdisc" ref="ga62c055550426d189f723d9a03f8677f9" args="(struct rtnl_link *link)" -->
char *&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_get_qdisc</b> (struct rtnl_link *link)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7cce5e6bea4df62c78948e94398ec6f9"></a><!-- doxytag: member="link::rtnl_link_set_name" ref="ga7cce5e6bea4df62c78948e94398ec6f9" args="(struct rtnl_link *link, const char *name)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_set_name</b> (struct rtnl_link *link, const char *name)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2bea251a28c71f160230b44a7ec79763"></a><!-- doxytag: member="link::rtnl_link_get_name" ref="ga2bea251a28c71f160230b44a7ec79763" args="(struct rtnl_link *link)" -->
char *&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_get_name</b> (struct rtnl_link *link)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga31fef8ebdb0b127dba77e5c0e79a8c9b"></a><!-- doxytag: member="link::rtnl_link_set_addr" ref="ga31fef8ebdb0b127dba77e5c0e79a8c9b" args="(struct rtnl_link *link, struct nl_addr *addr)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_set_addr</b> (struct rtnl_link *link, struct nl_addr *addr)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga02bd3a6ac530a51220f0923c6e5e5996"></a><!-- doxytag: member="link::rtnl_link_get_addr" ref="ga02bd3a6ac530a51220f0923c6e5e5996" args="(struct rtnl_link *link)" -->
struct nl_addr *&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_get_addr</b> (struct rtnl_link *link)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga124ac4cbd16ae07333784c99243af336"></a><!-- doxytag: member="link::rtnl_link_set_broadcast" ref="ga124ac4cbd16ae07333784c99243af336" args="(struct rtnl_link *link, struct nl_addr *brd)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_set_broadcast</b> (struct rtnl_link *link, struct nl_addr *brd)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga06b40fbe8e5bf9f7ee161ac2c51217b0"></a><!-- doxytag: member="link::rtnl_link_get_broadcast" ref="ga06b40fbe8e5bf9f7ee161ac2c51217b0" args="(struct rtnl_link *link)" -->
struct nl_addr *&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_get_broadcast</b> (struct rtnl_link *link)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9a43f1fdc2397eedeb7190e9ea0b4e47"></a><!-- doxytag: member="link::rtnl_link_set_flags" ref="ga9a43f1fdc2397eedeb7190e9ea0b4e47" args="(struct rtnl_link *link, unsigned int flags)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_set_flags</b> (struct rtnl_link *link, unsigned int flags)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga40c02d4d30f07243093faa3279f57ed3"></a><!-- doxytag: member="link::rtnl_link_unset_flags" ref="ga40c02d4d30f07243093faa3279f57ed3" args="(struct rtnl_link *link, unsigned int flags)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_unset_flags</b> (struct rtnl_link *link, unsigned int flags)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafcf6bb7515e5fa4915ec0194b046a4af"></a><!-- doxytag: member="link::rtnl_link_get_flags" ref="gafcf6bb7515e5fa4915ec0194b046a4af" args="(struct rtnl_link *link)" -->
unsigned int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_get_flags</b> (struct rtnl_link *link)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac3d6d355daaba562b8b07066ad346a20"></a><!-- doxytag: member="link::rtnl_link_set_family" ref="gac3d6d355daaba562b8b07066ad346a20" args="(struct rtnl_link *link, int family)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_set_family</b> (struct rtnl_link *link, int family)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga93dac91665467d374beb3cbe1b4e1ca2"></a><!-- doxytag: member="link::rtnl_link_get_family" ref="ga93dac91665467d374beb3cbe1b4e1ca2" args="(struct rtnl_link *link)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_get_family</b> (struct rtnl_link *link)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3faf1a01287bed0d30bca55b7eef6394"></a><!-- doxytag: member="link::rtnl_link_set_arptype" ref="ga3faf1a01287bed0d30bca55b7eef6394" args="(struct rtnl_link *link, unsigned int arptype)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_set_arptype</b> (struct rtnl_link *link, unsigned int arptype)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga901562c2300590ff75005e02fc652387"></a><!-- doxytag: member="link::rtnl_link_get_arptype" ref="ga901562c2300590ff75005e02fc652387" args="(struct rtnl_link *link)" -->
unsigned int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_get_arptype</b> (struct rtnl_link *link)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf204fa0a17dedbac283d3955cf21f608"></a><!-- doxytag: member="link::rtnl_link_set_ifindex" ref="gaf204fa0a17dedbac283d3955cf21f608" args="(struct rtnl_link *link, int ifindex)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_set_ifindex</b> (struct rtnl_link *link, int ifindex)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafd48d0b99697235ce3c8217a4664b135"></a><!-- doxytag: member="link::rtnl_link_get_ifindex" ref="gafd48d0b99697235ce3c8217a4664b135" args="(struct rtnl_link *link)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_get_ifindex</b> (struct rtnl_link *link)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga15064719789d110959eb79809746c128"></a><!-- doxytag: member="link::rtnl_link_set_mtu" ref="ga15064719789d110959eb79809746c128" args="(struct rtnl_link *link, unsigned int mtu)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_set_mtu</b> (struct rtnl_link *link, unsigned int mtu)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaecd466ecfef90609f30c3ee8f67ecd37"></a><!-- doxytag: member="link::rtnl_link_get_mtu" ref="gaecd466ecfef90609f30c3ee8f67ecd37" args="(struct rtnl_link *link)" -->
unsigned int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_get_mtu</b> (struct rtnl_link *link)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaefe933675754615d39f2d5aae0ead539"></a><!-- doxytag: member="link::rtnl_link_set_txqlen" ref="gaefe933675754615d39f2d5aae0ead539" args="(struct rtnl_link *link, unsigned int txqlen)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_set_txqlen</b> (struct rtnl_link *link, unsigned int txqlen)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9c9cd6922b1825003ff2674a20fdeb0e"></a><!-- doxytag: member="link::rtnl_link_get_txqlen" ref="ga9c9cd6922b1825003ff2674a20fdeb0e" args="(struct rtnl_link *link)" -->
unsigned int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_get_txqlen</b> (struct rtnl_link *link)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga620a899abab144ac472405706c3159a6"></a><!-- doxytag: member="link::rtnl_link_set_weight" ref="ga620a899abab144ac472405706c3159a6" args="(struct rtnl_link *link, unsigned int weight)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_set_weight</b> (struct rtnl_link *link, unsigned int weight)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga203d15a3c54d628f09b1b9b8144c37d6"></a><!-- doxytag: member="link::rtnl_link_get_weight" ref="ga203d15a3c54d628f09b1b9b8144c37d6" args="(struct rtnl_link *link)" -->
unsigned int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_get_weight</b> (struct rtnl_link *link)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafc0fd9407e0d5911384d3d17fbd25ba9"></a><!-- doxytag: member="link::rtnl_link_set_link" ref="gafc0fd9407e0d5911384d3d17fbd25ba9" args="(struct rtnl_link *link, int ifindex)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_set_link</b> (struct rtnl_link *link, int ifindex)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2b1f42231615310b727854409d4f32a9"></a><!-- doxytag: member="link::rtnl_link_get_link" ref="ga2b1f42231615310b727854409d4f32a9" args="(struct rtnl_link *link)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_get_link</b> (struct rtnl_link *link)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae538e896372b12347daac1dd50fd3f9d"></a><!-- doxytag: member="link::rtnl_link_set_master" ref="gae538e896372b12347daac1dd50fd3f9d" args="(struct rtnl_link *link, int ifindex)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_set_master</b> (struct rtnl_link *link, int ifindex)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0efbecffaca6d12e029e023524d17fbc"></a><!-- doxytag: member="link::rtnl_link_get_master" ref="ga0efbecffaca6d12e029e023524d17fbc" args="(struct rtnl_link *link)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_get_master</b> (struct rtnl_link *link)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga79632f07da70f33258955b70bf423afd"></a><!-- doxytag: member="link::rtnl_link_set_operstate" ref="ga79632f07da70f33258955b70bf423afd" args="(struct rtnl_link *link, uint8_t operstate)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_set_operstate</b> (struct rtnl_link *link, uint8_t operstate)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5881f6b39e545bbca94c307b71962e90"></a><!-- doxytag: member="link::rtnl_link_get_operstate" ref="ga5881f6b39e545bbca94c307b71962e90" args="(struct rtnl_link *link)" -->
uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_get_operstate</b> (struct rtnl_link *link)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga24a83f905d2d43c4296cbaa54d25e2fb"></a><!-- doxytag: member="link::rtnl_link_set_linkmode" ref="ga24a83f905d2d43c4296cbaa54d25e2fb" args="(struct rtnl_link *link, uint8_t linkmode)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_set_linkmode</b> (struct rtnl_link *link, uint8_t linkmode)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0424ab2b9ee65104b409695e6d6b65c3"></a><!-- doxytag: member="link::rtnl_link_get_linkmode" ref="ga0424ab2b9ee65104b409695e6d6b65c3" args="(struct rtnl_link *link)" -->
uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_get_linkmode</b> (struct rtnl_link *link)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga399c6ff572acb5b81acbcd5f4598a3b4"></a><!-- doxytag: member="link::rtnl_link_get_stat" ref="ga399c6ff572acb5b81acbcd5f4598a3b4" args="(struct rtnl_link *link, int id)" -->
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>rtnl_link_get_stat</b> (struct rtnl_link *link, int id)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__link.html#gadddd34902ec52fa8674f66a2cd99fa9f">rtnl_link_set_info_type</a> (struct rtnl_link *link, const char *type)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Specify the info type of a link.  <a href="#gadddd34902ec52fa8674f66a2cd99fa9f"></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__link.html#gaae3e6282f5a38076e05ba596a12b4280">rtnl_link_get_info_type</a> (struct rtnl_link *link)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Return info type of a link.  <a href="#gaae3e6282f5a38076e05ba596a12b4280"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<dl class="user"><dt><b>Link Identification</b></dt><dd>A link can be identified by either its interface index or by its name. The kernel favours the interface index but falls back to the interface name if the interface index is lesser-than 0 for kernels &gt;= 2.6.11. Therefore you can request changes without mapping a interface name to the corresponding index first.</dd></dl>
<dl class="user"><dt><b>Changeable Attributes</b></dt><dd><a class="anchor" id="link_changeable"></a><ul>
<li>Link layer address</li>
<li>Link layer broadcast address</li>
<li>device mapping (ifmap) (&gt;= 2.6.9)</li>
<li>MTU (&gt;= 2.6.9)</li>
<li>Transmission queue length (&gt;= 2.6.9)</li>
<li>Weight (&gt;= 2.6.9)</li>
<li>Link name (only via access through interface index) (&gt;= 2.6.9)</li>
<li>Flags (&gt;= 2.6.9)<ul>
<li>IFF_DEBUG</li>
<li>IFF_NOTRAILERS</li>
<li>IFF_NOARP</li>
<li>IFF_DYNAMIC</li>
<li>IFF_MULTICAST</li>
<li>IFF_PORTSEL</li>
<li>IFF_AUTOMEDIA</li>
<li>IFF_UP</li>
<li>IFF_PROMISC</li>
<li>IFF_ALLMULTI</li>
</ul>
</li>
</ul>
</dd></dl>
<dl class="user"><dt><b>Link Flags (linux/if.h)</b></dt><dd><a class="anchor" id="link_flags"></a> <div class="fragment"><pre class="fragment">   IFF_UP            Status of link (up|down)
   IFF_BROADCAST     Indicates this link allows broadcasting
   IFF_MULTICAST     Indicates this link allows multicasting
   IFF_ALLMULTI      Indicates this link is doing multicast routing
   IFF_DEBUG         Tell the driver to do debugging (currently unused)
   IFF_LOOPBACK      This is the loopback link
   IFF_POINTOPOINT   Point-to-point link
   IFF_NOARP         Link is unable to perform ARP
   IFF_PROMISC       Status of promiscious mode flag
   IFF_MASTER        Used by teql
   IFF_SLAVE         Used by teql
   IFF_PORTSEL       Indicates this link allows port selection
   IFF_AUTOMEDIA     Indicates this link selects port automatically
   IFF_DYNAMIC       Indicates the address of this link is dynamic
   IFF_RUNNING       Link is running and carrier is ok.
   IFF_NOTRAILERS    Unused, BSD compat.
</pre></div></dd></dl>
<dl class="user"><dt><b>Notes on IFF_PROMISC and IFF_ALLMULTI flags</b></dt><dd>Although you can query the status of IFF_PROMISC and IFF_ALLMULTI they do not represent the actual state in the kernel but rather whether the flag has been enabled/disabled by userspace. The link may be in promiscious mode even if IFF_PROMISC is not set in a link dump request response because promiscity might be needed by the driver for a period of time.</dd></dl>
<dl class="note"><dt><b>Note:</b></dt><dd>The unit of the transmission queue length depends on the link type, a common unit is <em>packets</em>.</dd></dl>
<dl class="user"><dt><b>1) Retrieving information about available links</b></dt><dd><div class="fragment"><pre class="fragment"> <span class="comment">// The first step is to retrieve a list of all available interfaces within</span>
 <span class="comment">// the kernel and put them into a cache.</span>
 <span class="keyword">struct </span>nl_cache *cache = <a class="code" href="group__link.html#gaf0d952cc3ca4e787b51f38b2fedfee24" title="Allocate link cache and fill in all configured links.">rtnl_link_alloc_cache</a>(nl_handle);

 <span class="comment">// In a second step, a specific link may be looked up by either interface</span>
 <span class="comment">// index or interface name.</span>
 <span class="keyword">struct </span>rtnl_link *link = <a class="code" href="group__link.html#ga1d583e4f0b43c89d854e5e681a529fad" title="Look up link by link name in the provided cache.">rtnl_link_get_by_name</a>(cache, <span class="stringliteral">&quot;lo&quot;</span>);

 <span class="comment">// rtnl_link_get_by_name() is the short version for translating the</span>
 <span class="comment">// interface name to an interface index first like this:</span>
 <span class="keywordtype">int</span> ifindex = <a class="code" href="group__link.html#ga8de66ce556b6d23f045fbc6079d547ed" title="Translate a link name to the corresponding interface index.">rtnl_link_name2i</a>(cache, <span class="stringliteral">&quot;lo&quot;</span>);
 <span class="keyword">struct </span>rtnl_link *link = <a class="code" href="group__link.html#ga2a3657b69c47c9e3ab809cac73bf0986" title="Look up link by interface index in the provided cache.">rtnl_link_get</a>(cache, ifindex);

 <span class="comment">// After successful usage, the object must be given back to the cache</span>
 rtnl_link_put(link);
</pre></div></dd></dl>
<dl class="user"><dt><b>2) Changing link attributes</b></dt><dd><div class="fragment"><pre class="fragment"> <span class="comment">// In order to change any attributes of an existing link, we must allocate</span>
 <span class="comment">// a new link to hold the change requests:</span>
 <span class="keyword">struct </span>rtnl_link *request = rtnl_link_alloc();

 <span class="comment">// Now we can go on and specify the attributes we want to change:</span>
 rtnl_link_set_weight(request, 300);
 rtnl_link_set_mtu(request, 1360);

 <span class="comment">// We can also shut an interface down administratively</span>
 rtnl_link_unset_flags(request, rtnl_link_str2flags(<span class="stringliteral">&quot;up&quot;</span>));

 <span class="comment">// Actually, we should know which link to change, so let&#39;s look it up</span>
 <span class="keyword">struct </span>rtnl_link *old = <a class="code" href="group__link.html#ga2a3657b69c47c9e3ab809cac73bf0986" title="Look up link by interface index in the provided cache.">rtnl_link_get</a>(cache, <span class="stringliteral">&quot;eth0&quot;</span>);

 <span class="comment">// Two ways exist to commit this change request, the first one is to</span>
 <span class="comment">// build the required netlink message and send it out in one single</span>
 <span class="comment">// step:</span>
 <a class="code" href="group__link.html#ga9ea11f67fcc1d3c75fdac1fcf860fa64" title="Change link attributes.">rtnl_link_change</a>(nl_handle, old, request);

 <span class="comment">// An alternative way is to build the netlink message and send it</span>
 <span class="comment">// out yourself using nl_send_auto_complete()</span>
 <span class="keyword">struct </span>nl_msg *msg = <a class="code" href="group__link.html#gadb36ec872a4469a3e30a94394f0bad3e" title="Builds a netlink change request message to change link attributes.">rtnl_link_build_change_request</a>(old, request);
 <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, <a class="code" href="group__msg.html#gaa5f29579d86d2bdab26c312b44b56de7" title="Return actual netlink message.">nlmsg_hdr</a>(msg));
 <a class="code" href="group__msg.html#ga138ba9bee70553f9fbe7143deacad48c" title="Free a netlink message.">nlmsg_free</a>(msg);

 <span class="comment">// Don&#39;t forget to give back the link object ;-&gt;</span>
 rtnl_link_put(old);
</pre></div></dd></dl>
<dl class="user"><dt><b>3) Link Type Specific Attributes</b></dt><dd><div class="fragment"><pre class="fragment"> <span class="comment">// Some link types offer additional parameters and statistics specific</span>
 <span class="comment">// to their type. F.e. a VLAN link can be configured like this:</span>
 <span class="comment">//</span>
 <span class="comment">// Allocate a new link and set the info type to &quot;vlan&quot;. This is required</span>
 <span class="comment">// to prepare the link to hold vlan specific attributes.</span>
 <span class="keyword">struct </span>rtnl_link *request = rtnl_link_alloc();
 <a class="code" href="group__link.html#gadddd34902ec52fa8674f66a2cd99fa9f" title="Specify the info type of a link.">rtnl_link_set_info_type</a>(request, <span class="stringliteral">&quot;vlan&quot;</span>);

 <span class="comment">// Now vlan specific attributes can be set:</span>
 rtnl_link_vlan_set_id(request, 10);
 rtnl_link_vlan_set_ingress_map(request, 2, 8);

 <span class="comment">// Of course the attributes can also be read, check the info type</span>
 <span class="comment">// to make sure you are using the right access functions:</span>
 <span class="keywordtype">char</span> *type = <a class="code" href="group__link.html#gaae3e6282f5a38076e05ba596a12b4280" title="Return info type of a link.">rtnl_link_get_info_type</a>(link);
 <span class="keywordflow">if</span> (!strcmp(type, <span class="stringliteral">&quot;vlan&quot;</span>))
        <span class="keywordtype">int</span> <span class="keywordtype">id</span> = rtnl_link_vlan_get_id(link);
</pre></div> </dd></dl>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="gaf0d952cc3ca4e787b51f38b2fedfee24"></a><!-- doxytag: member="link.c::rtnl_link_alloc_cache" ref="gaf0d952cc3ca4e787b51f38b2fedfee24" args="(struct nl_handle *handle)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nl_cache* rtnl_link_alloc_cache </td>
          <td>(</td>
          <td class="paramtype">struct nl_handle *&#160;</td>
          <td class="paramname"><em>handle</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">handle</td><td>Netlink handle.</td></tr>
  </table>
  </dd>
</dl>
<p>Allocates a new link cache, initializes it properly and updates it to include all links currently configured in the kernel.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>Free the memory after usage. </dd></dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Newly allocated cache or NULL if an error occured. </dd></dl>

<p>Definition at line <a class="el" href="link_8c_source.html#l00869">869</a> of file <a class="el" href="link_8c_source.html">link.c</a>.</p>

<p>References <a class="el" href="cache_8c_source.html#l00173">nl_cache_alloc()</a>, <a class="el" href="cache_8c_source.html#l00265">nl_cache_free()</a>, and <a class="el" href="cache_8c_source.html#l00662">nl_cache_refill()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nl_cache * cache;
        
        cache = <a class="code" href="group__cache.html#ga9520ae0f2158db3c081f34c851d92252" title="Allocate an empty cache.">nl_cache_alloc</a>(&amp;rtnl_link_ops);
        <span class="keywordflow">if</span> (cache == NULL)
                <span class="keywordflow">return</span> NULL;
        
        <span class="keywordflow">if</span> (handle &amp;&amp; <a class="code" href="group__cache.html#gaf5bd584017847e6ef69ec36739a6aaf0" title="(Re)fill a cache with the contents in the kernel.">nl_cache_refill</a>(handle, cache) &lt; 0) {
                <a class="code" href="group__cache.html#ga530c896db26d72001d011114b1e6cfaa" title="Free a cache.">nl_cache_free</a>(cache);
                <span class="keywordflow">return</span> NULL;
        }

        <span class="keywordflow">return</span> cache;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga2a3657b69c47c9e3ab809cac73bf0986"></a><!-- doxytag: member="link.c::rtnl_link_get" ref="ga2a3657b69c47c9e3ab809cac73bf0986" args="(struct nl_cache *cache, int ifindex)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct rtnl_link* rtnl_link_get </td>
          <td>(</td>
          <td class="paramtype">struct nl_cache *&#160;</td>
          <td class="paramname"><em>cache</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>ifindex</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">cache</td><td>link cache </td></tr>
    <tr><td class="paramname">ifindex</td><td>link interface index</td></tr>
  </table>
  </dd>
</dl>
<p>The caller owns a reference on the returned object and must give the object back via rtnl_link_put().</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>pointer to link inside the cache or NULL if no match was found. </dd></dl>

<p>Definition at line <a class="el" href="link_8c_source.html#l00895">895</a> of file <a class="el" href="link_8c_source.html">link.c</a>.</p>

<p>References <a class="el" href="object_8c_source.html#l00162">nl_object_get()</a>.</p>

<p>Referenced by <a class="el" href="link_8c_source.html#l01085">rtnl_link_i2name()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>rtnl_link *link;

        <span class="keywordflow">if</span> (cache-&gt;c_ops != &amp;rtnl_link_ops)
                <span class="keywordflow">return</span> NULL;

        nl_list_for_each_entry(link, &amp;cache-&gt;c_items, ce_list) {
                <span class="keywordflow">if</span> (link-&gt;l_index == ifindex) {
                        <a class="code" href="group__object.html#gabd5767ac47ec6f09d1ac643f44eb8bfd" title="Acquire a reference on a object.">nl_object_get</a>((<span class="keyword">struct</span> nl_object *) link);
                        <span class="keywordflow">return</span> link;
                }
        }

        <span class="keywordflow">return</span> NULL;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga1d583e4f0b43c89d854e5e681a529fad"></a><!-- doxytag: member="link.c::rtnl_link_get_by_name" ref="ga1d583e4f0b43c89d854e5e681a529fad" args="(struct nl_cache *cache, const char *name)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct rtnl_link* rtnl_link_get_by_name </td>
          <td>(</td>
          <td class="paramtype">struct nl_cache *&#160;</td>
          <td class="paramname"><em>cache</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>name</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">cache</td><td>link cache </td></tr>
    <tr><td class="paramname">name</td><td>link name</td></tr>
  </table>
  </dd>
</dl>
<p>The caller owns a reference on the returned object and must give the object back via rtnl_link_put().</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>pointer to link inside the cache or NULL if no match was found. </dd></dl>

<p>Definition at line <a class="el" href="link_8c_source.html#l00922">922</a> of file <a class="el" href="link_8c_source.html">link.c</a>.</p>

<p>References <a class="el" href="object_8c_source.html#l00162">nl_object_get()</a>.</p>

<p>Referenced by <a class="el" href="link_8c_source.html#l01106">rtnl_link_name2i()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>rtnl_link *link;

        <span class="keywordflow">if</span> (cache-&gt;c_ops != &amp;rtnl_link_ops)
                <span class="keywordflow">return</span> NULL;

        nl_list_for_each_entry(link, &amp;cache-&gt;c_items, ce_list) {
                <span class="keywordflow">if</span> (!strcmp(name, link-&gt;l_name)) {
                        <a class="code" href="group__object.html#gabd5767ac47ec6f09d1ac643f44eb8bfd" title="Acquire a reference on a object.">nl_object_get</a>((<span class="keyword">struct</span> nl_object *) link);
                        <span class="keywordflow">return</span> link;
                }
        }

        <span class="keywordflow">return</span> NULL;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gadb36ec872a4469a3e30a94394f0bad3e"></a><!-- doxytag: member="link.c::rtnl_link_build_change_request" ref="gadb36ec872a4469a3e30a94394f0bad3e" args="(struct rtnl_link *old, struct rtnl_link *tmpl, int flags)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nl_msg* rtnl_link_build_change_request </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_link *&#160;</td>
          <td class="paramname"><em>old</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct rtnl_link *&#160;</td>
          <td class="paramname"><em>tmpl</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">old</td><td>link to be changed </td></tr>
    <tr><td class="paramname">tmpl</td><td>template with requested changes </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 change of link attributes. The netlink message header isn't fully equipped with all relevant fields and must 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. <em>old</em> must point to a link currently configured in the kernel and <em>tmpl</em> must contain the attributes to be changed set via <code>rtnl_link_set_*</code> functions.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>New netlink message </dd></dl>
<dl class="note"><dt><b>Note:</b></dt><dd>Not all attributes can be changed, see <a class="el" href="group__link.html#link_changeable">Changeable Attributes</a> for more details. </dd></dl>

<p>Definition at line <a class="el" href="link_8c_source.html#l00965">965</a> of file <a class="el" href="link_8c_source.html">link.c</a>.</p>

<p>References <a class="el" href="attr_8c_source.html#l00676">nla_nest_end()</a>, <a class="el" href="attr_8c_source.html#l00656">nla_nest_start()</a>, <a class="el" href="attr_8h_source.html#l00245">NLA_PUT_ADDR</a>, <a class="el" href="attr_8h_source.html#l00219">NLA_PUT_STRING</a>, <a class="el" href="attr_8h_source.html#l00201">NLA_PUT_U32</a>, <a class="el" href="attr_8h_source.html#l00183">NLA_PUT_U8</a>, <a class="el" href="msg_8c_source.html#l00448">nlmsg_alloc_simple()</a>, <a class="el" href="msg_8c_source.html#l00549">nlmsg_append()</a>, and <a class="el" href="msg_8c_source.html#l00656">nlmsg_free()</a>.</p>

<p>Referenced by <a class="el" href="link_8c_source.html#l01048">rtnl_link_change()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nl_msg *msg;
        <span class="keyword">struct </span>ifinfomsg ifi = {
                .ifi_family = old-&gt;l_family,
                .ifi_index = old-&gt;l_index,
        };

        <span class="keywordflow">if</span> (tmpl-&gt;ce_mask &amp; LINK_ATTR_FLAGS) {
                ifi.ifi_flags = old-&gt;l_flags &amp; ~tmpl-&gt;l_flag_mask;
                ifi.ifi_flags |= tmpl-&gt;l_flags;
        }

        msg = <a class="code" href="group__msg.html#ga580d8697d19050c55060bc10ab4eae9f" title="Allocate a new netlink message.">nlmsg_alloc_simple</a>(RTM_SETLINK, flags);
        <span class="keywordflow">if</span> (!msg)
                <span class="keywordflow">goto</span> nla_put_failure;

        <span class="keywordflow">if</span> (<a class="code" href="group__msg.html#gacc5e5ade5675d041f86c7c8693f7088d" title="Append data to tail of a netlink message.">nlmsg_append</a>(msg, &amp;ifi, <span class="keyword">sizeof</span>(ifi), NLMSG_ALIGNTO) &lt; 0)
                <span class="keywordflow">goto</span> nla_put_failure;

        <span class="keywordflow">if</span> (tmpl-&gt;ce_mask &amp; LINK_ATTR_ADDR)
                <a class="code" href="group__attr.html#ga34038d75b33942a151a0e91791629a76" title="Add a address attribute to a netlink message.">NLA_PUT_ADDR</a>(msg, IFLA_ADDRESS, tmpl-&gt;l_addr);

        <span class="keywordflow">if</span> (tmpl-&gt;ce_mask &amp; LINK_ATTR_BRD)
                <a class="code" href="group__attr.html#ga34038d75b33942a151a0e91791629a76" title="Add a address attribute to a netlink message.">NLA_PUT_ADDR</a>(msg, IFLA_BROADCAST, tmpl-&gt;l_bcast);

        <span class="keywordflow">if</span> (tmpl-&gt;ce_mask &amp; LINK_ATTR_MTU)
                <a class="code" href="group__attr.html#ga61c87db4b2aa6c7b31e733d1ec684efb" title="Add a u32 netlink attribute to a netlink message.">NLA_PUT_U32</a>(msg, IFLA_MTU, tmpl-&gt;l_mtu);

        <span class="keywordflow">if</span> (tmpl-&gt;ce_mask &amp; LINK_ATTR_TXQLEN)
                <a class="code" href="group__attr.html#ga61c87db4b2aa6c7b31e733d1ec684efb" title="Add a u32 netlink attribute to a netlink message.">NLA_PUT_U32</a>(msg, IFLA_TXQLEN, tmpl-&gt;l_txqlen);

        <span class="keywordflow">if</span> (tmpl-&gt;ce_mask &amp; LINK_ATTR_WEIGHT)
                <a class="code" href="group__attr.html#ga61c87db4b2aa6c7b31e733d1ec684efb" title="Add a u32 netlink attribute to a netlink message.">NLA_PUT_U32</a>(msg, IFLA_WEIGHT, tmpl-&gt;l_weight);

        <span class="keywordflow">if</span> (tmpl-&gt;ce_mask &amp; LINK_ATTR_IFNAME)
                <a class="code" href="group__attr.html#ga7f2397f226e4561d195611572021b714" title="Add a character string netlink attribute to a netlink message.">NLA_PUT_STRING</a>(msg, IFLA_IFNAME, tmpl-&gt;l_name);

        <span class="keywordflow">if</span> (tmpl-&gt;ce_mask &amp; LINK_ATTR_OPERSTATE)
                <a class="code" href="group__attr.html#ga9df4c7be2d17ef301e5218b622bd984d" title="Add a u8 netlink attribute to a netlink message.">NLA_PUT_U8</a>(msg, IFLA_OPERSTATE, tmpl-&gt;l_operstate);

        <span class="keywordflow">if</span> (tmpl-&gt;ce_mask &amp; LINK_ATTR_LINKMODE)
                <a class="code" href="group__attr.html#ga9df4c7be2d17ef301e5218b622bd984d" title="Add a u8 netlink attribute to a netlink message.">NLA_PUT_U8</a>(msg, IFLA_LINKMODE, tmpl-&gt;l_linkmode);

        <span class="keywordflow">if</span> ((tmpl-&gt;ce_mask &amp; LINK_ATTR_LINKINFO) &amp;&amp; tmpl-&gt;l_info_ops &amp;&amp;
            tmpl-&gt;l_info_ops-&gt;io_put_attrs) {
                <span class="keyword">struct </span>nlattr *info;

                <span class="keywordflow">if</span> (!(info = <a class="code" href="group__attr.html#ga18640b6320b8959bb586fa2ca456130c" title="Start a new level of nested attributes.">nla_nest_start</a>(msg, IFLA_LINKINFO)))
                        <span class="keywordflow">goto</span> nla_put_failure;

                <a class="code" href="group__attr.html#ga7f2397f226e4561d195611572021b714" title="Add a character string netlink attribute to a netlink message.">NLA_PUT_STRING</a>(msg, IFLA_INFO_KIND, tmpl-&gt;l_info_ops-&gt;io_name);

                <span class="keywordflow">if</span> (tmpl-&gt;l_info_ops-&gt;io_put_attrs(msg, tmpl) &lt; 0)
                        <span class="keywordflow">goto</span> nla_put_failure;

                <a class="code" href="group__attr.html#ga067f9ada74902c02d97c725a47f590b7" title="Finalize nesting of attributes.">nla_nest_end</a>(msg, info);
        }

        <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="ga9ea11f67fcc1d3c75fdac1fcf860fa64"></a><!-- doxytag: member="link.c::rtnl_link_change" ref="ga9ea11f67fcc1d3c75fdac1fcf860fa64" args="(struct nl_handle *handle, struct rtnl_link *old, struct rtnl_link *tmpl, int flags)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_link_change </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_link *&#160;</td>
          <td class="paramname"><em>old</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct rtnl_link *&#160;</td>
          <td class="paramname"><em>tmpl</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">old</td><td>link to be changed </td></tr>
    <tr><td class="paramname">tmpl</td><td>template with requested changes </td></tr>
    <tr><td class="paramname">flags</td><td>additional netlink message flags</td></tr>
  </table>
  </dd>
</dl>
<p>Builds a new netlink message by calling <a class="el" href="group__link.html#gadb36ec872a4469a3e30a94394f0bad3e" title="Builds a netlink change request message to change link attributes.">rtnl_link_build_change_request()</a>, sends the request to the kernel and waits for the next ACK to be received, i.e. blocks until the request has been processed.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on success or a negative error code </dd></dl>
<dl class="note"><dt><b>Note:</b></dt><dd>Not all attributes can be changed, see <a class="el" href="group__link.html#link_changeable">Changeable Attributes</a> for more details. </dd></dl>

<p>Definition at line <a class="el" href="link_8c_source.html#l01048">1048</a> of file <a class="el" href="link_8c_source.html">link.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="link_8c_source.html#l00965">rtnl_link_build_change_request()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">int</span> err;
        <span class="keyword">struct </span>nl_msg *msg;
        
        msg = <a class="code" href="group__link.html#gadb36ec872a4469a3e30a94394f0bad3e" title="Builds a netlink change request message to change link attributes.">rtnl_link_build_change_request</a>(old, tmpl, flags);
        <span class="keywordflow">if</span> (!msg)
                <span class="keywordflow">return</span> nl_errno(ENOMEM);
        
        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);
        <span class="keywordflow">if</span> (err &lt; 0)
                <span class="keywordflow">return</span> err;

        <a class="code" href="group__msg.html#ga138ba9bee70553f9fbe7143deacad48c" title="Free a netlink message.">nlmsg_free</a>(msg);
        <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="ga66328cb096fb4d21499775e75089109d"></a><!-- doxytag: member="link.c::rtnl_link_i2name" ref="ga66328cb096fb4d21499775e75089109d" args="(struct nl_cache *cache, int ifindex, char *dst, size_t len)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">char* rtnl_link_i2name </td>
          <td>(</td>
          <td class="paramtype">struct nl_cache *&#160;</td>
          <td class="paramname"><em>cache</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>ifindex</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></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">size_t&#160;</td>
          <td class="paramname"><em>len</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">cache</td><td>link cache </td></tr>
    <tr><td class="paramname">ifindex</td><td>link interface index </td></tr>
    <tr><td class="paramname">dst</td><td>destination buffer </td></tr>
    <tr><td class="paramname">len</td><td>length of destination buffer</td></tr>
  </table>
  </dd>
</dl>
<p>Translates the specified interface index to the corresponding link name and stores the name in the destination buffer.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>link name or NULL if no match was found. </dd></dl>

<p>Definition at line <a class="el" href="link_8c_source.html#l01085">1085</a> of file <a class="el" href="link_8c_source.html">link.c</a>.</p>

<p>References <a class="el" href="link_8c_source.html#l00895">rtnl_link_get()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>rtnl_link *link = <a class="code" href="group__link.html#ga2a3657b69c47c9e3ab809cac73bf0986" title="Look up link by interface index in the provided cache.">rtnl_link_get</a>(cache, ifindex);

        <span class="keywordflow">if</span> (link) {
                strncpy(dst, link-&gt;l_name, len - 1);
                rtnl_link_put(link);
                <span class="keywordflow">return</span> dst;
        }

        <span class="keywordflow">return</span> NULL;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga8de66ce556b6d23f045fbc6079d547ed"></a><!-- doxytag: member="link.c::rtnl_link_name2i" ref="ga8de66ce556b6d23f045fbc6079d547ed" args="(struct nl_cache *cache, const char *name)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_link_name2i </td>
          <td>(</td>
          <td class="paramtype">struct nl_cache *&#160;</td>
          <td class="paramname"><em>cache</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>name</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">cache</td><td>link cache </td></tr>
    <tr><td class="paramname">name</td><td>link name</td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>interface index or RTNL_LINK_NOT_FOUND if no match was found. </dd></dl>

<p>Definition at line <a class="el" href="link_8c_source.html#l01106">1106</a> of file <a class="el" href="link_8c_source.html">link.c</a>.</p>

<p>References <a class="el" href="link_8c_source.html#l00922">rtnl_link_get_by_name()</a>, and <a class="el" href="link_8h_source.html#l00058">RTNL_LINK_NOT_FOUND</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">int</span> ifindex = <a class="code" href="group__link.html#ga774720bec7d14a6e314238c42122ec78" title="Special interface index stating the link was not found.">RTNL_LINK_NOT_FOUND</a>;
        <span class="keyword">struct </span>rtnl_link *link;
        
        link = <a class="code" href="group__link.html#ga1d583e4f0b43c89d854e5e681a529fad" title="Look up link by link name in the provided cache.">rtnl_link_get_by_name</a>(cache, name);
        <span class="keywordflow">if</span> (link) {
                ifindex = link-&gt;l_index;
                rtnl_link_put(link);
        }

        <span class="keywordflow">return</span> ifindex;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gadddd34902ec52fa8674f66a2cd99fa9f"></a><!-- doxytag: member="link.c::rtnl_link_set_info_type" ref="gadddd34902ec52fa8674f66a2cd99fa9f" args="(struct rtnl_link *link, const char *type)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rtnl_link_set_info_type </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_link *&#160;</td>
          <td class="paramname"><em>link</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>type</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">link</td><td>link object </td></tr>
    <tr><td class="paramname">type</td><td>info type</td></tr>
  </table>
  </dd>
</dl>
<p>Looks up the info type and prepares the link to store info type specific attributes. If an info type has been assigned already it will be released with all changes lost.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on success or a negative errror code. </dd></dl>

<p>Definition at line <a class="el" href="link_8c_source.html#l01501">1501</a> of file <a class="el" href="link_8c_source.html">link.c</a>.</p>

<p>References <a class="el" href="info-api_8h_source.html#l00037">rtnl_link_info_ops::io_alloc</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span><a class="code" href="structrtnl__link__info__ops.html" title="Link info operations.">rtnl_link_info_ops</a> *io;
        <span class="keywordtype">int</span> err;

        <span class="keywordflow">if</span> ((io = rtnl_link_info_ops_lookup(type)) == NULL)
                <span class="keywordflow">return</span> nl_error(ENOENT, <span class="stringliteral">&quot;No such link info type exists&quot;</span>);

        <span class="keywordflow">if</span> (link-&gt;l_info_ops)
                release_link_info(link);

        <span class="keywordflow">if</span> ((err = io-&gt;<a class="code" href="structrtnl__link__info__ops.html#a0dcac57de49a6d9ebca60fec11f222f5" title="Called to assign an info type to a link.">io_alloc</a>(link)) &lt; 0)
                <span class="keywordflow">return</span> err;

        link-&gt;l_info_ops = io;

        <span class="keywordflow">return</span> 0;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gaae3e6282f5a38076e05ba596a12b4280"></a><!-- doxytag: member="link.c::rtnl_link_get_info_type" ref="gaae3e6282f5a38076e05ba596a12b4280" args="(struct rtnl_link *link)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">char* rtnl_link_get_info_type </td>
          <td>(</td>
          <td class="paramtype">struct rtnl_link *&#160;</td>
          <td class="paramname"><em>link</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">link</td><td>link object</td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>Note:</b></dt><dd>The returned pointer is only valid as long as the link exists </dd></dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Info type name or NULL if unknown. </dd></dl>

<p>Definition at line <a class="el" href="link_8c_source.html#l01527">1527</a> of file <a class="el" href="link_8c_source.html">link.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">if</span> (link-&gt;l_info_ops)
                <span class="keywordflow">return</span> link-&gt;l_info_ops-&gt;io_name;
        <span class="keywordflow">else</span>
                <span class="keywordflow">return</span> NULL;
}
</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>