Sophie

Sophie

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

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: Abstract Address</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>Abstract Address</h1>  </div>
<div class="ingroups"><a class="el" href="group__utils.html">Utilities</a></div></div>
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="member-group"></a>
Creating Abstract Addresses</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct nl_addr *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__addr.html#ga95f044c6a8065a7e909ffe214517c501">nl_addr_alloc</a> (size_t maxsize)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocate new abstract address object.  <a href="#ga95f044c6a8065a7e909ffe214517c501"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct nl_addr *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__addr.html#ga3ba58249a980740157be8a4fca3635fd">nl_addr_build</a> (int family, void *buf, size_t size)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocate new abstract address object based on a binary address.  <a href="#ga3ba58249a980740157be8a4fca3635fd"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct nl_addr *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__addr.html#ga5da2311446bbbb446cf1127ec4a60e3c">nl_addr_parse</a> (const char *addrstr, int hint)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocate abstract address object based on a character string.  <a href="#ga5da2311446bbbb446cf1127ec4a60e3c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct nl_addr *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__addr.html#ga40b37a1ccec7acf84d868e588e516cba">nl_addr_clone</a> (struct nl_addr *addr)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Clone existing abstract address object.  <a href="#ga40b37a1ccec7acf84d868e588e516cba"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Destroying Abstract Addresses</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__addr.html#ga207e09ec819653e397cca5760351ee6c">nl_addr_destroy</a> (struct nl_addr *addr)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Destroy abstract address object.  <a href="#ga207e09ec819653e397cca5760351ee6c"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Managing Usage References</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa727690ed74011ae05e77780bea69074"></a><!-- doxytag: member="addr::nl_addr_get" ref="gaa727690ed74011ae05e77780bea69074" args="(struct nl_addr *addr)" -->
struct nl_addr *&#160;</td><td class="memItemRight" valign="bottom"><b>nl_addr_get</b> (struct nl_addr *addr)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac22f34e0647815e1a483bccac3d48a83"></a><!-- doxytag: member="addr::nl_addr_put" ref="gac22f34e0647815e1a483bccac3d48a83" args="(struct nl_addr *addr)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>nl_addr_put</b> (struct nl_addr *addr)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__addr.html#gad8efee1b6e850834310120ab79927966">nl_addr_shared</a> (struct nl_addr *addr)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Check whether an abstract address object is shared.  <a href="#gad8efee1b6e850834310120ab79927966"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Miscellaneous</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__addr.html#ga3b85d180a4f6d2df86be1dc8798a7d9a">nl_addr_cmp</a> (struct nl_addr *a, struct nl_addr *b)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Compares two abstract address objects.  <a href="#ga3b85d180a4f6d2df86be1dc8798a7d9a"></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__addr.html#ga777eeb15fd47b88a43aea067139cb7e4">nl_addr_cmp_prefix</a> (struct nl_addr *a, struct nl_addr *b)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Compares the prefix of two abstract address objects.  <a href="#ga777eeb15fd47b88a43aea067139cb7e4"></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__addr.html#ga5ca21cacd97bd78ac00319a181f4b628">nl_addr_iszero</a> (struct nl_addr *addr)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if the address consists of all zeros.  <a href="#ga5ca21cacd97bd78ac00319a181f4b628"></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__addr.html#gadeee18d1b98665be71cb39b574a3969e">nl_addr_valid</a> (char *addr, int family)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if an address matches a certain family.  <a href="#gadeee18d1b98665be71cb39b574a3969e"></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__addr.html#gaff2e98f656a046a29c561db403a8ec82">nl_addr_guess_family</a> (struct nl_addr *addr)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Guess address family of an abstract address object based on address size.  <a href="#gaff2e98f656a046a29c561db403a8ec82"></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__addr.html#ga21d22fc4131cc8be9863442ffce73c05">nl_addr_fill_sockaddr</a> (struct nl_addr *addr, struct sockaddr *sa, socklen_t *salen)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Fill out sockaddr structure with values from abstract address object.  <a href="#ga21d22fc4131cc8be9863442ffce73c05"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Getting Information About Addresses</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct addrinfo *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__addr.html#ga7b58c0b73f416350843622b70d9bb9fc">nl_addr_info</a> (struct nl_addr *addr)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Call getaddrinfo() for an abstract address object.  <a href="#ga7b58c0b73f416350843622b70d9bb9fc"></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__addr.html#ga74bf028c08e6fbb2679ef684a9cb671a">nl_addr_resolve</a> (struct nl_addr *addr, char *host, size_t hostlen)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Resolve abstract address object to a name using getnameinfo().  <a href="#ga74bf028c08e6fbb2679ef684a9cb671a"></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="gadaeefe43225e292066cc81063e5619d3"></a><!-- doxytag: member="addr::nl_addr_set_family" ref="gadaeefe43225e292066cc81063e5619d3" args="(struct nl_addr *addr, int family)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>nl_addr_set_family</b> (struct nl_addr *addr, int family)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga23a8f92993447f9cf6d3a9c673a13867"></a><!-- doxytag: member="addr::nl_addr_get_family" ref="ga23a8f92993447f9cf6d3a9c673a13867" args="(struct nl_addr *addr)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>nl_addr_get_family</b> (struct nl_addr *addr)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__addr.html#ga85252474e38e570abadb76cc888d9cb0">nl_addr_set_binary_addr</a> (struct nl_addr *addr, void *buf, size_t len)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Set binary address of abstract address object.  <a href="#ga85252474e38e570abadb76cc888d9cb0"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__addr.html#ga7721da4e82e80e8b29960405539ca72d">nl_addr_get_binary_addr</a> (struct nl_addr *addr)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get binary address of abstract address object.  <a href="#ga7721da4e82e80e8b29960405539ca72d"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__addr.html#ga6c517a330f9fd12db0844f7ac0c72134">nl_addr_get_len</a> (struct nl_addr *addr)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get length of binary address of abstract address object.  <a href="#ga6c517a330f9fd12db0844f7ac0c72134"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga180cd5625fcfde23a8dd6b541a6bc60d"></a><!-- doxytag: member="addr::nl_addr_set_prefixlen" ref="ga180cd5625fcfde23a8dd6b541a6bc60d" args="(struct nl_addr *addr, int prefixlen)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>nl_addr_set_prefixlen</b> (struct nl_addr *addr, int prefixlen)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__addr.html#gabaeaaa163f115fff9318424fc9bd304b">nl_addr_get_prefixlen</a> (struct nl_addr *addr)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get prefix length of abstract address object.  <a href="#gabaeaaa163f115fff9318424fc9bd304b"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Translations to Strings</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__addr.html#ga6471f04b9fa8ef1d4af1bf2b87b49529">nl_addr2str</a> (struct nl_addr *addr, char *buf, size_t size)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert abstract address object to character string.  <a href="#ga6471f04b9fa8ef1d4af1bf2b87b49529"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Address Family Transformations</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga81ab1e3156bdf9bfc2f1f38e8a681052"></a><!-- doxytag: member="addr::nl_af2str" ref="ga81ab1e3156bdf9bfc2f1f38e8a681052" args="(int family, char *buf, size_t size)" -->
char *&#160;</td><td class="memItemRight" valign="bottom"><b>nl_af2str</b> (int family, char *buf, size_t size)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga045982bf5831781ca51cd4bfeeaf422b"></a><!-- doxytag: member="addr::nl_str2af" ref="ga045982bf5831781ca51cd4bfeeaf422b" args="(const char *name)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>nl_str2af</b> (const char *name)</td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<dl class="user"><dt><b>1) Transform character string to abstract address</b></dt><dd><div class="fragment"><pre class="fragment"> <span class="keyword">struct </span>nl_addr *a = <a class="code" href="group__addr.html#ga5da2311446bbbb446cf1127ec4a60e3c" title="Allocate abstract address object based on a character string.">nl_addr_parse</a>(<span class="stringliteral">&quot;::1&quot;</span>, AF_UNSPEC);
 printf(<span class="stringliteral">&quot;Address family: %s\n&quot;</span>, nl_af2str(nl_addr_get_family(a)));
 nl_addr_put(a);
 a = <a class="code" href="group__addr.html#ga5da2311446bbbb446cf1127ec4a60e3c" title="Allocate abstract address object based on a character string.">nl_addr_parse</a>(<span class="stringliteral">&quot;11:22:33:44:55:66&quot;</span>, AF_UNSPEC);
 printf(<span class="stringliteral">&quot;Address family: %s\n&quot;</span>, nl_af2str(nl_addr_get_family(a)));
 nl_addr_put(a);
</pre></div> </dd></dl>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="ga95f044c6a8065a7e909ffe214517c501"></a><!-- doxytag: member="addr.c::nl_addr_alloc" ref="ga95f044c6a8065a7e909ffe214517c501" args="(size_t maxsize)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nl_addr* nl_addr_alloc </td>
          <td>(</td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>maxsize</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">maxsize</td><td>Maximum size of the binary address. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Newly allocated address object or NULL </dd></dl>

<p>Definition at line <a class="el" href="addr_8c_source.html#l00164">164</a> of file <a class="el" href="addr_8c_source.html">addr.c</a>.</p>

<p>Referenced by <a class="el" href="addr_8c_source.html#l00187">nl_addr_build()</a>, and <a class="el" href="addr_8c_source.html#l00231">nl_addr_parse()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nl_addr *addr;
        
        addr = calloc(1, <span class="keyword">sizeof</span>(*addr) + maxsize);
        <span class="keywordflow">if</span> (!addr) {
                nl_errno(ENOMEM);
                <span class="keywordflow">return</span> NULL;
        }

        addr-&gt;a_refcnt = 1;
        addr-&gt;a_maxsize = maxsize;

        <span class="keywordflow">return</span> addr;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga3ba58249a980740157be8a4fca3635fd"></a><!-- doxytag: member="addr.c::nl_addr_build" ref="ga3ba58249a980740157be8a4fca3635fd" args="(int family, void *buf, size_t size)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nl_addr* nl_addr_build </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>family</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>size</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">family</td><td>Address family. </td></tr>
    <tr><td class="paramname">buf</td><td>Buffer containing the binary address. </td></tr>
    <tr><td class="paramname">size</td><td>Length of binary address buffer. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Newly allocated address handle or NULL </dd></dl>

<p>Definition at line <a class="el" href="addr_8c_source.html#l00187">187</a> of file <a class="el" href="addr_8c_source.html">addr.c</a>.</p>

<p>References <a class="el" href="addr_8c_source.html#l00164">nl_addr_alloc()</a>.</p>

<p>Referenced by <a class="el" href="addr_8c_source.html#l00406">nl_addr_clone()</a>, and <a class="el" href="attr_8c_source.html#l00766">nla_get_addr()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nl_addr *addr;

        addr = <a class="code" href="group__addr.html#ga95f044c6a8065a7e909ffe214517c501" title="Allocate new abstract address object.">nl_addr_alloc</a>(size);
        <span class="keywordflow">if</span> (!addr)
                <span class="keywordflow">return</span> NULL;

        addr-&gt;a_family = family;
        addr-&gt;a_len = size;
        addr-&gt;a_prefixlen = size*8;

        <span class="keywordflow">if</span> (size)
                memcpy(addr-&gt;a_addr, buf, size);

        <span class="keywordflow">return</span> addr;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga5da2311446bbbb446cf1127ec4a60e3c"></a><!-- doxytag: member="addr.c::nl_addr_parse" ref="ga5da2311446bbbb446cf1127ec4a60e3c" args="(const char *addrstr, int hint)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nl_addr* nl_addr_parse </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>addrstr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>hint</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">addrstr</td><td>Address represented as character string. </td></tr>
    <tr><td class="paramname">hint</td><td>Address family hint or AF_UNSPEC.</td></tr>
  </table>
  </dd>
</dl>
<p>Regognizes the following address formats: </p>
<div class="fragment"><pre class="fragment">  Format                      Len                Family
  ----------------------------------------------------------------
  IPv6 address format         16                 AF_INET6
  ddd.ddd.ddd.ddd             4                  AF_INET
  HH:HH:HH:HH:HH:HH           6                  AF_LLC
  AA{.|,}NNNN                 2                  AF_DECnet
  HH:HH:HH:...                variable           AF_UNSPEC
</pre></div><p>Special values:</p>
<ul>
<li>none: All bits and length set to 0.</li>
<li>{default|all|any}: All bits set to 0, length based on hint or AF_INET if no hint is given.</li>
</ul>
<p>The prefix length may be appened at the end prefixed with a slash, e.g. 10.0.0.0/8.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>Newly allocated abstract address object or NULL. </dd></dl>

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

<p>References <a class="el" href="addr_8c_source.html#l00164">nl_addr_alloc()</a>, <a class="el" href="addr_8c_source.html#l00428">nl_addr_destroy()</a>, and <a class="el" href="addr_8c_source.html#l00741">nl_addr_set_binary_addr()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">int</span> err, copy = 0, len = 0, family = AF_UNSPEC;
        <span class="keywordtype">char</span> *str, *prefix, buf[32];
        <span class="keyword">struct </span>nl_addr *addr = NULL; <span class="comment">/* gcc ain&#39;t that smart */</span>

        str = strdup(addrstr);
        <span class="keywordflow">if</span> (!str) {
                err = nl_errno(ENOMEM);
                <span class="keywordflow">goto</span> errout;
        }

        prefix = strchr(str, <span class="charliteral">&#39;/&#39;</span>);
        <span class="keywordflow">if</span> (prefix)
                *prefix = <span class="charliteral">&#39;\0&#39;</span>;

        <span class="keywordflow">if</span> (!strcasecmp(str, <span class="stringliteral">&quot;none&quot;</span>)) {
                family = hint;
                <span class="keywordflow">goto</span> prefix;
        }

        <span class="keywordflow">if</span> (!strcasecmp(str, <span class="stringliteral">&quot;default&quot;</span>) ||
            !strcasecmp(str, <span class="stringliteral">&quot;all&quot;</span>) ||
            !strcasecmp(str, <span class="stringliteral">&quot;any&quot;</span>)) {
                        
                <span class="keywordflow">switch</span> (hint) {
                        <span class="keywordflow">case</span> AF_INET:
                        <span class="keywordflow">case</span> AF_UNSPEC:
                                <span class="comment">/* Kind of a hack, we assume that if there is</span>
<span class="comment">                                 * no hint given the user wants to have a IPv4</span>
<span class="comment">                                 * address given back. */</span>
                                family = AF_INET;
                                len = 4;
                                <span class="keywordflow">goto</span> prefix;

                        <span class="keywordflow">case</span> AF_INET6:
                                family = AF_INET6;
                                len = 16;
                                <span class="keywordflow">goto</span> prefix;

                        <span class="keywordflow">case</span> AF_LLC:
                                family = AF_LLC;
                                len = 6;
                                <span class="keywordflow">goto</span> prefix;

                        <span class="keywordflow">default</span>:
                                err = nl_error(EINVAL, <span class="stringliteral">&quot;Unsuported address&quot;</span> \
                                    <span class="stringliteral">&quot;family for default address&quot;</span>);
                                <span class="keywordflow">goto</span> errout;
                }
        }

        copy = 1;

        <span class="keywordflow">if</span> (hint == AF_INET || hint == AF_UNSPEC) {
                <span class="keywordflow">if</span> (inet_pton(AF_INET, str, buf) &gt; 0) {
                        family = AF_INET;
                        len = 4;
                        <span class="keywordflow">goto</span> prefix;
                }
                <span class="keywordflow">if</span> (hint == AF_INET) {
                        err = nl_error(EINVAL, <span class="stringliteral">&quot;Invalid IPv4 address&quot;</span>);
                        <span class="keywordflow">goto</span> errout;
                }
        }

        <span class="keywordflow">if</span> (hint == AF_INET6 || hint == AF_UNSPEC) {
                <span class="keywordflow">if</span> (inet_pton(AF_INET6, str, buf) &gt; 0) {
                        family = AF_INET6;
                        len = 16;
                        <span class="keywordflow">goto</span> prefix;
                }
                <span class="keywordflow">if</span> (hint == AF_INET6) {
                        err = nl_error(EINVAL, <span class="stringliteral">&quot;Invalid IPv6 address&quot;</span>);
                        <span class="keywordflow">goto</span> errout;
                }
        }

        <span class="keywordflow">if</span> ((hint == AF_LLC || hint == AF_UNSPEC) &amp;&amp; strchr(str, <span class="charliteral">&#39;:&#39;</span>)) {
                <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> a, b, c, d, e, f;

                <span class="keywordflow">if</span> (sscanf(str, <span class="stringliteral">&quot;%02x:%02x:%02x:%02x:%02x:%02x&quot;</span>,
                    &amp;a, &amp;b, &amp;c, &amp;d, &amp;e, &amp;f) == 6) {
                        family = AF_LLC;
                        len = 6;
                        buf[0] = (<span class="keywordtype">unsigned</span> char) a;
                        buf[1] = (<span class="keywordtype">unsigned</span> char) b;
                        buf[2] = (<span class="keywordtype">unsigned</span> char) c;
                        buf[3] = (<span class="keywordtype">unsigned</span> char) d;
                        buf[4] = (<span class="keywordtype">unsigned</span> char) e;
                        buf[5] = (<span class="keywordtype">unsigned</span> char) f;
                        <span class="keywordflow">goto</span> prefix;
                }

                <span class="keywordflow">if</span> (hint == AF_LLC) {
                        err = nl_error(EINVAL, <span class="stringliteral">&quot;Invalid link layer address&quot;</span>);
                        <span class="keywordflow">goto</span> errout;
                }
        }

        <span class="keywordflow">if</span> ((hint == AF_DECnet || hint == AF_UNSPEC) &amp;&amp;
            (strchr(str, <span class="charliteral">&#39;.&#39;</span>) || strchr(str, <span class="charliteral">&#39;,&#39;</span>))) {
                <span class="keywordflow">if</span> (dnet_pton(str, buf) &gt; 0) {
                        family = AF_DECnet;
                        len = 2;
                        <span class="keywordflow">goto</span> prefix;
                }
                <span class="keywordflow">if</span> (hint == AF_DECnet) {
                        err = nl_error(EINVAL, <span class="stringliteral">&quot;Invalid DECnet address&quot;</span>);
                        <span class="keywordflow">goto</span> errout;
                }
        }

        <span class="keywordflow">if</span> (hint == AF_UNSPEC &amp;&amp; strchr(str, <span class="charliteral">&#39;:&#39;</span>)) {
                <span class="keywordtype">int</span> i = 0;
                <span class="keywordtype">char</span> *s = str, *p;
                <span class="keywordflow">for</span> (;;) {
                        <span class="keywordtype">long</span> l = strtol(s, &amp;p, 16);

                        <span class="keywordflow">if</span> (s == p || l &gt; 0xff || i &gt;= <span class="keyword">sizeof</span>(buf)) {
                                err = -EINVAL;
                                <span class="keywordflow">goto</span> errout;
                        }

                        buf[i++] = (<span class="keywordtype">unsigned</span> char) l;
                        <span class="keywordflow">if</span> (*p == <span class="charliteral">&#39;\0&#39;</span>)
                                <span class="keywordflow">break</span>;
                        s = ++p;
                }

                len = i;
                family = AF_UNSPEC;
                <span class="keywordflow">goto</span> prefix;
        }

        err = nl_error(EINVAL, <span class="stringliteral">&quot;Invalid address&quot;</span>);
        <span class="keywordflow">goto</span> errout;

prefix:
        addr = <a class="code" href="group__addr.html#ga95f044c6a8065a7e909ffe214517c501" title="Allocate new abstract address object.">nl_addr_alloc</a>(len);
        <span class="keywordflow">if</span> (!addr) {
                err = nl_errno(ENOMEM);
                <span class="keywordflow">goto</span> errout;
        }

        nl_addr_set_family(addr, family);

        <span class="keywordflow">if</span> (copy)
                <a class="code" href="group__addr.html#ga85252474e38e570abadb76cc888d9cb0" title="Set binary address of abstract address object.">nl_addr_set_binary_addr</a>(addr, buf, len);

        <span class="keywordflow">if</span> (prefix) {
                <span class="keywordtype">char</span> *p;
                <span class="keywordtype">long</span> pl = strtol(++prefix, &amp;p, 0);
                <span class="keywordflow">if</span> (p == prefix) {
                        <a class="code" href="group__addr.html#ga207e09ec819653e397cca5760351ee6c" title="Destroy abstract address object.">nl_addr_destroy</a>(addr);
                        err = -EINVAL;
                        <span class="keywordflow">goto</span> errout;
                }
                nl_addr_set_prefixlen(addr, pl);
        } <span class="keywordflow">else</span>
                nl_addr_set_prefixlen(addr, len * 8);

        err = 0;
errout:
        free(str);

        <span class="keywordflow">return</span> err ? NULL : addr;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga40b37a1ccec7acf84d868e588e516cba"></a><!-- doxytag: member="addr.c::nl_addr_clone" ref="ga40b37a1ccec7acf84d868e588e516cba" args="(struct nl_addr *addr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nl_addr* nl_addr_clone </td>
          <td>(</td>
          <td class="paramtype">struct nl_addr *&#160;</td>
          <td class="paramname"><em>addr</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">addr</td><td>Abstract address object. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Newly allocated abstract address object being a duplicate of the specified address object or NULL if a failure occured. </dd></dl>

<p>Definition at line <a class="el" href="addr_8c_source.html#l00406">406</a> of file <a class="el" href="addr_8c_source.html">addr.c</a>.</p>

<p>References <a class="el" href="addr_8c_source.html#l00187">nl_addr_build()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nl_addr *<span class="keyword">new</span>;

        <span class="keyword">new</span> = <a class="code" href="group__addr.html#ga3ba58249a980740157be8a4fca3635fd" title="Allocate new abstract address object based on a binary address.">nl_addr_build</a>(addr-&gt;a_family, addr-&gt;a_addr, addr-&gt;a_len);
        <span class="keywordflow">if</span> (<span class="keyword">new</span>)
                <span class="keyword">new</span>-&gt;a_prefixlen = addr-&gt;a_prefixlen;

        <span class="keywordflow">return</span> <span class="keyword">new</span>;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga207e09ec819653e397cca5760351ee6c"></a><!-- doxytag: member="addr.c::nl_addr_destroy" ref="ga207e09ec819653e397cca5760351ee6c" args="(struct nl_addr *addr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void nl_addr_destroy </td>
          <td>(</td>
          <td class="paramtype">struct nl_addr *&#160;</td>
          <td class="paramname"><em>addr</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">addr</td><td>Abstract address object. </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="addr_8c_source.html#l00428">428</a> of file <a class="el" href="addr_8c_source.html">addr.c</a>.</p>

<p>Referenced by <a class="el" href="addr_8c_source.html#l00231">nl_addr_parse()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">if</span> (!addr)
                <span class="keywordflow">return</span>;

        <span class="keywordflow">if</span> (addr-&gt;a_refcnt != 1)
                BUG();

        free(addr);
}
</pre></div>
</div>
</div>
<a class="anchor" id="gad8efee1b6e850834310120ab79927966"></a><!-- doxytag: member="addr.c::nl_addr_shared" ref="gad8efee1b6e850834310120ab79927966" args="(struct nl_addr *addr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nl_addr_shared </td>
          <td>(</td>
          <td class="paramtype">struct nl_addr *&#160;</td>
          <td class="paramname"><em>addr</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">addr</td><td>Abstract address object. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Non-zero if the abstract address object is shared, otherwise 0. </dd></dl>

<p>Definition at line <a class="el" href="addr_8c_source.html#l00469">469</a> of file <a class="el" href="addr_8c_source.html">addr.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> addr-&gt;a_refcnt &gt; 1;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga3b85d180a4f6d2df86be1dc8798a7d9a"></a><!-- doxytag: member="addr.c::nl_addr_cmp" ref="ga3b85d180a4f6d2df86be1dc8798a7d9a" args="(struct nl_addr *a, struct nl_addr *b)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nl_addr_cmp </td>
          <td>(</td>
          <td class="paramtype">struct nl_addr *&#160;</td>
          <td class="paramname"><em>a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct nl_addr *&#160;</td>
          <td class="paramname"><em>b</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">a</td><td>A abstract address object. </td></tr>
    <tr><td class="paramname">b</td><td>Another abstract address object.</td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Integer less than, equal to or greather than zero if <code>is</code> found, respectively to be less than, to, or be greater than <code>b</code>. </dd></dl>

<p>Definition at line <a class="el" href="addr_8c_source.html#l00489">489</a> of file <a class="el" href="addr_8c_source.html">addr.c</a>.</p>

<p>Referenced by <a class="el" href="neigh_8c_source.html#l00559">rtnl_neigh_get()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">int</span> d = a-&gt;a_family - b-&gt;a_family;

        <span class="keywordflow">if</span> (d == 0) {
                d = a-&gt;a_len - b-&gt;a_len;

                <span class="keywordflow">if</span> (a-&gt;a_len &amp;&amp; d == 0)
                        <span class="keywordflow">return</span> memcmp(a-&gt;a_addr, b-&gt;a_addr, a-&gt;a_len);
        }

        <span class="keywordflow">return</span> d;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga777eeb15fd47b88a43aea067139cb7e4"></a><!-- doxytag: member="addr.c::nl_addr_cmp_prefix" ref="ga777eeb15fd47b88a43aea067139cb7e4" args="(struct nl_addr *a, struct nl_addr *b)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nl_addr_cmp_prefix </td>
          <td>(</td>
          <td class="paramtype">struct nl_addr *&#160;</td>
          <td class="paramname"><em>a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct nl_addr *&#160;</td>
          <td class="paramname"><em>b</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">a</td><td>A abstract address object. </td></tr>
    <tr><td class="paramname">b</td><td>Another abstract address object.</td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Integer less than, equal to or greather than zero if <code>is</code> found, respectively to be less than, to, or be greater than <code>b</code>. </dd></dl>

<p>Definition at line <a class="el" href="addr_8c_source.html#l00511">511</a> of file <a class="el" href="addr_8c_source.html">addr.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">int</span> d = a-&gt;a_family - b-&gt;a_family;

        <span class="keywordflow">if</span> (d == 0) {
                <span class="keywordtype">int</span> len = min(a-&gt;a_prefixlen, b-&gt;a_prefixlen);
                <span class="keywordtype">int</span> bytes = len / 8;

                d = memcmp(a-&gt;a_addr, b-&gt;a_addr, bytes);
                <span class="keywordflow">if</span> (d == 0) {
                        <span class="keywordtype">int</span> mask = (1UL &lt;&lt; (len % 8)) - 1UL;

                        d = (a-&gt;a_addr[bytes] &amp; mask) -
                            (b-&gt;a_addr[bytes] &amp; mask);
                }
        }

        <span class="keywordflow">return</span> d;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga5ca21cacd97bd78ac00319a181f4b628"></a><!-- doxytag: member="addr.c::nl_addr_iszero" ref="ga5ca21cacd97bd78ac00319a181f4b628" args="(struct nl_addr *addr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nl_addr_iszero </td>
          <td>(</td>
          <td class="paramtype">struct nl_addr *&#160;</td>
          <td class="paramname"><em>addr</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">addr</td><td>Address to look at. </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="addr_8c_source.html#l00535">535</a> of file <a class="el" href="addr_8c_source.html">addr.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">int</span> i;

        <span class="keywordflow">for</span> (i = 0; i &lt; addr-&gt;a_len; i++)
                <span class="keywordflow">if</span> (addr-&gt;a_addr[i])
                        <span class="keywordflow">return</span> 0;

        <span class="keywordflow">return</span> 1;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gadeee18d1b98665be71cb39b574a3969e"></a><!-- doxytag: member="addr.c::nl_addr_valid" ref="gadeee18d1b98665be71cb39b574a3969e" args="(char *addr, int family)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nl_addr_valid </td>
          <td>(</td>
          <td class="paramtype">char *&#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>family</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">addr</td><td>Address represented as character string. </td></tr>
    <tr><td class="paramname">family</td><td>Desired address family.</td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>1 if the address is of the desired address family, otherwise 0 is returned. </dd></dl>

<p>Definition at line <a class="el" href="addr_8c_source.html#l00554">554</a> of file <a class="el" href="addr_8c_source.html">addr.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">int</span> ret;
        <span class="keywordtype">char</span> buf[32];

        <span class="keywordflow">switch</span> (family) {
        <span class="keywordflow">case</span> AF_INET:
        <span class="keywordflow">case</span> AF_INET6:
                ret = inet_pton(family, addr, buf);
                <span class="keywordflow">if</span> (ret &lt;= 0)
                        <span class="keywordflow">return</span> 0;
                <span class="keywordflow">break</span>;

        <span class="keywordflow">case</span> AF_DECnet:
                ret = dnet_pton(addr, buf);
                <span class="keywordflow">if</span> (ret &lt;= 0)
                        <span class="keywordflow">return</span> 0;
                <span class="keywordflow">break</span>;

        <span class="keywordflow">case</span> AF_LLC:
                <span class="keywordflow">if</span> (sscanf(addr, <span class="stringliteral">&quot;%*02x:%*02x:%*02x:%*02x:%*02x:%*02x&quot;</span>) != 6)
                        <span class="keywordflow">return</span> 0;
                <span class="keywordflow">break</span>;
        }

        <span class="keywordflow">return</span> 1;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gaff2e98f656a046a29c561db403a8ec82"></a><!-- doxytag: member="addr.c::nl_addr_guess_family" ref="gaff2e98f656a046a29c561db403a8ec82" args="(struct nl_addr *addr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nl_addr_guess_family </td>
          <td>(</td>
          <td class="paramtype">struct nl_addr *&#160;</td>
          <td class="paramname"><em>addr</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">addr</td><td>Abstract address object. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Address family or AF_UNSPEC if guessing wasn't successful. </dd></dl>

<p>Definition at line <a class="el" href="addr_8c_source.html#l00587">587</a> of file <a class="el" href="addr_8c_source.html">addr.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">switch</span> (addr-&gt;a_len) {
                <span class="keywordflow">case</span> 4:
                        <span class="keywordflow">return</span> AF_INET;
                <span class="keywordflow">case</span> 6:
                        <span class="keywordflow">return</span> AF_LLC;
                <span class="keywordflow">case</span> 16:
                        <span class="keywordflow">return</span> AF_INET6;
                <span class="keywordflow">default</span>:
                        <span class="keywordflow">return</span> AF_UNSPEC;
        }
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga21d22fc4131cc8be9863442ffce73c05"></a><!-- doxytag: member="addr.c::nl_addr_fill_sockaddr" ref="ga21d22fc4131cc8be9863442ffce73c05" args="(struct nl_addr *addr, struct sockaddr *sa, socklen_t *salen)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nl_addr_fill_sockaddr </td>
          <td>(</td>
          <td class="paramtype">struct nl_addr *&#160;</td>
          <td class="paramname"><em>addr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct sockaddr *&#160;</td>
          <td class="paramname"><em>sa</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">socklen_t *&#160;</td>
          <td class="paramname"><em>salen</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">addr</td><td>Abstract address object. </td></tr>
    <tr><td class="paramname">sa</td><td>Destination sockaddr structure buffer. </td></tr>
    <tr><td class="paramname">salen</td><td>Length of sockaddr structure buffer.</td></tr>
  </table>
  </dd>
</dl>
<p>Fills out the specified sockaddr structure with the data found in the specified abstract address. The salen argument needs to be set to the size of sa but will be modified to the actual size used during before the function exits.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on success or a negative error code </dd></dl>

<p>Definition at line <a class="el" href="addr_8c_source.html#l00614">614</a> of file <a class="el" href="addr_8c_source.html">addr.c</a>.</p>

<p>Referenced by <a class="el" href="addr_8c_source.html#l00704">nl_addr_resolve()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">switch</span> (addr-&gt;a_family) {
        <span class="keywordflow">case</span> AF_INET: {
                <span class="keyword">struct </span>sockaddr_in *sai = (<span class="keyword">struct </span>sockaddr_in *) sa;

                <span class="keywordflow">if</span> (*salen &lt; <span class="keyword">sizeof</span>(*sai))
                        <span class="keywordflow">return</span> -EINVAL;

                sai-&gt;sin_family = addr-&gt;a_family;
                memcpy(&amp;sai-&gt;sin_addr, addr-&gt;a_addr, 4);
                *salen = <span class="keyword">sizeof</span>(*sai);
        }
                <span class="keywordflow">break</span>;

        <span class="keywordflow">case</span> AF_INET6: {
                <span class="keyword">struct </span>sockaddr_in6 *sa6 = (<span class="keyword">struct </span>sockaddr_in6 *) sa;

                <span class="keywordflow">if</span> (*salen &lt; <span class="keyword">sizeof</span>(*sa6))
                        <span class="keywordflow">return</span> -EINVAL;

                sa6-&gt;sin6_family = addr-&gt;a_family;
                memcpy(&amp;sa6-&gt;sin6_addr, addr-&gt;a_addr, 16);
                *salen = <span class="keyword">sizeof</span>(*sa6);
        }
                <span class="keywordflow">break</span>;

        <span class="keywordflow">default</span>:
                <span class="keywordflow">return</span> -EINVAL;
        }

        <span class="keywordflow">return</span> 0;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga7b58c0b73f416350843622b70d9bb9fc"></a><!-- doxytag: member="addr.c::nl_addr_info" ref="ga7b58c0b73f416350843622b70d9bb9fc" args="(struct nl_addr *addr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct addrinfo* nl_addr_info </td>
          <td>(</td>
          <td class="paramtype">struct nl_addr *&#160;</td>
          <td class="paramname"><em>addr</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">addr</td><td>Abstract address object.</td></tr>
  </table>
  </dd>
</dl>
<p>Calls getaddrinfo() for the specified abstract address in AI_NUMERICHOST mode.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The caller is responsible for freeing the linked list using the interface provided by getaddrinfo(3).</dd></dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>A linked list of addrinfo handles or NULL with an error message associated. </dd></dl>

<p>Definition at line <a class="el" href="addr_8c_source.html#l00670">670</a> of file <a class="el" href="addr_8c_source.html">addr.c</a>.</p>

<p>References <a class="el" href="addr_8c_source.html#l00802">nl_addr2str()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">int</span> err;
        <span class="keyword">struct </span>addrinfo *res;
        <span class="keywordtype">char</span> buf[INET6_ADDRSTRLEN+5];
        <span class="keyword">struct </span>addrinfo hint = {
                .ai_flags = AI_NUMERICHOST,
                .ai_family = addr-&gt;a_family,
        };

        <a class="code" href="group__addr.html#ga6471f04b9fa8ef1d4af1bf2b87b49529" title="Convert abstract address object to character string.">nl_addr2str</a>(addr, buf, <span class="keyword">sizeof</span>(buf));

        err = getaddrinfo(buf, NULL, &amp;hint, &amp;res);
        <span class="keywordflow">if</span> (err != 0) {
                nl_error(err, gai_strerror(err));
                <span class="keywordflow">return</span> NULL;
        }

        <span class="keywordflow">return</span> res;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga74bf028c08e6fbb2679ef684a9cb671a"></a><!-- doxytag: member="addr.c::nl_addr_resolve" ref="ga74bf028c08e6fbb2679ef684a9cb671a" args="(struct nl_addr *addr, char *host, size_t hostlen)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nl_addr_resolve </td>
          <td>(</td>
          <td class="paramtype">struct nl_addr *&#160;</td>
          <td class="paramname"><em>addr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>host</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>hostlen</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">addr</td><td>Abstract address object. </td></tr>
    <tr><td class="paramname">host</td><td>Destination buffer for host name. </td></tr>
    <tr><td class="paramname">hostlen</td><td>Length of destination buffer.</td></tr>
  </table>
  </dd>
</dl>
<p>Resolves the abstract address to a name and writes the looked up result into the host buffer. getnameinfo() is used to perform the lookup and is put into NI_NAMEREQD mode so the function will fail if the lookup couldn't be performed.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on success or a negative error code. </dd></dl>

<p>Definition at line <a class="el" href="addr_8c_source.html#l00704">704</a> of file <a class="el" href="addr_8c_source.html">addr.c</a>.</p>

<p>References <a class="el" href="addr_8c_source.html#l00614">nl_addr_fill_sockaddr()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">int</span> err;
        <span class="keyword">struct </span>sockaddr_in6 buf;
        socklen_t salen = <span class="keyword">sizeof</span>(buf);

        err = <a class="code" href="group__addr.html#ga21d22fc4131cc8be9863442ffce73c05" title="Fill out sockaddr structure with values from abstract address object.">nl_addr_fill_sockaddr</a>(addr, (<span class="keyword">struct</span> sockaddr *) &amp;buf, &amp;salen);
        <span class="keywordflow">if</span> (err &lt; 0)
                <span class="keywordflow">return</span> err;

        <span class="keywordflow">return</span> getnameinfo((<span class="keyword">struct</span> sockaddr *) &amp;buf, salen,
                           host, hostlen, NULL, 0, NI_NAMEREQD);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga85252474e38e570abadb76cc888d9cb0"></a><!-- doxytag: member="addr.c::nl_addr_set_binary_addr" ref="ga85252474e38e570abadb76cc888d9cb0" args="(struct nl_addr *addr, void *buf, size_t len)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nl_addr_set_binary_addr </td>
          <td>(</td>
          <td class="paramtype">struct nl_addr *&#160;</td>
          <td class="paramname"><em>addr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>buf</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">addr</td><td>Abstract address object. </td></tr>
    <tr><td class="paramname">buf</td><td>Buffer containing binary address. </td></tr>
    <tr><td class="paramname">len</td><td>Length of buffer containing binary address. </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="addr_8c_source.html#l00741">741</a> of file <a class="el" href="addr_8c_source.html">addr.c</a>.</p>

<p>Referenced by <a class="el" href="addr_8c_source.html#l00231">nl_addr_parse()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">if</span> (len &gt; addr-&gt;a_maxsize)
                <span class="keywordflow">return</span> -ERANGE;

        addr-&gt;a_len = len;
        memcpy(addr-&gt;a_addr, buf, len);

        <span class="keywordflow">return</span> 0;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga7721da4e82e80e8b29960405539ca72d"></a><!-- doxytag: member="addr.c::nl_addr_get_binary_addr" ref="ga7721da4e82e80e8b29960405539ca72d" args="(struct nl_addr *addr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void* nl_addr_get_binary_addr </td>
          <td>(</td>
          <td class="paramtype">struct nl_addr *&#160;</td>
          <td class="paramname"><em>addr</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">addr</td><td>Abstract address object. </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="addr_8c_source.html#l00756">756</a> of file <a class="el" href="addr_8c_source.html">addr.c</a>.</p>

<p>Referenced by <a class="el" href="lookup_8c_source.html#l00212">flnl_lookup_build_request()</a>, and <a class="el" href="attr_8c_source.html#l00636">nla_put_addr()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> addr-&gt;a_addr;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga6c517a330f9fd12db0844f7ac0c72134"></a><!-- doxytag: member="addr.c::nl_addr_get_len" ref="ga6c517a330f9fd12db0844f7ac0c72134" args="(struct nl_addr *addr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int nl_addr_get_len </td>
          <td>(</td>
          <td class="paramtype">struct nl_addr *&#160;</td>
          <td class="paramname"><em>addr</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">addr</td><td>Abstract address object. </td></tr>
  </table>
  </dd>
</dl>

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

<p>Referenced by <a class="el" href="attr_8c_source.html#l00636">nla_put_addr()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> addr-&gt;a_len;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gabaeaaa163f115fff9318424fc9bd304b"></a><!-- doxytag: member="addr.c::nl_addr_get_prefixlen" ref="gabaeaaa163f115fff9318424fc9bd304b" args="(struct nl_addr *addr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int nl_addr_get_prefixlen </td>
          <td>(</td>
          <td class="paramtype">struct nl_addr *&#160;</td>
          <td class="paramname"><em>addr</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">addr</td><td>Abstract address object. </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="addr_8c_source.html#l00779">779</a> of file <a class="el" href="addr_8c_source.html">addr.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> addr-&gt;a_prefixlen;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga6471f04b9fa8ef1d4af1bf2b87b49529"></a><!-- doxytag: member="addr.c::nl_addr2str" ref="ga6471f04b9fa8ef1d4af1bf2b87b49529" args="(struct nl_addr *addr, char *buf, size_t size)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">char* nl_addr2str </td>
          <td>(</td>
          <td class="paramtype">struct nl_addr *&#160;</td>
          <td class="paramname"><em>addr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>size</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">addr</td><td>Abstract address object. </td></tr>
    <tr><td class="paramname">buf</td><td>Destination buffer. </td></tr>
    <tr><td class="paramname">size</td><td>Size of destination buffer.</td></tr>
  </table>
  </dd>
</dl>
<p>Converts an abstract address to a character string and stores the result in the specified destination buffer.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>Address represented in ASCII stored in destination buffer. </dd></dl>

<p>Definition at line <a class="el" href="addr_8c_source.html#l00802">802</a> of file <a class="el" href="addr_8c_source.html">addr.c</a>.</p>

<p>Referenced by <a class="el" href="addr_8c_source.html#l00670">nl_addr_info()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordtype">int</span> i;
        <span class="keywordtype">char</span> tmp[16];

        <span class="keywordflow">if</span> (!addr-&gt;a_len) {
                snprintf(buf, size, <span class="stringliteral">&quot;none&quot;</span>);
                <span class="keywordflow">goto</span> prefix;
        }

        <span class="keywordflow">switch</span> (addr-&gt;a_family) {
                <span class="keywordflow">case</span> AF_INET:
                        inet_ntop(AF_INET, addr-&gt;a_addr, buf, size);
                        <span class="keywordflow">break</span>;

                <span class="keywordflow">case</span> AF_INET6:
                        inet_ntop(AF_INET6, addr-&gt;a_addr, buf, size);
                        <span class="keywordflow">break</span>;

                <span class="keywordflow">case</span> AF_DECnet:
                        dnet_ntop(addr-&gt;a_addr, addr-&gt;a_len, buf, size);
                        <span class="keywordflow">break</span>;

                <span class="keywordflow">case</span> AF_LLC:
                <span class="keywordflow">default</span>:
                        snprintf(buf, size, <span class="stringliteral">&quot;%02x&quot;</span>,
                                 (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>) addr-&gt;a_addr[0]);
                        <span class="keywordflow">for</span> (i = 1; i &lt; addr-&gt;a_len; i++) {
                                snprintf(tmp, <span class="keyword">sizeof</span>(tmp), <span class="stringliteral">&quot;:%02x&quot;</span>,
                                         (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>) addr-&gt;a_addr[i]);
                                strncat(buf, tmp, size - strlen(buf) - 1);
                        }
                        <span class="keywordflow">break</span>;
        }

prefix:
        <span class="keywordflow">if</span> (addr-&gt;a_prefixlen != (8 * addr-&gt;a_len)) {
                snprintf(tmp, <span class="keyword">sizeof</span>(tmp), <span class="stringliteral">&quot;/%u&quot;</span>, addr-&gt;a_prefixlen);
                strncat(buf, tmp, size - strlen(buf) - 1);
        }

        <span class="keywordflow">return</span> buf;
}
</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>