Sophie

Sophie

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

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: Object</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="#nested-classes">Data Structures</a> &#124;
<a href="#groups">Modules</a>  </div>
  <div class="headertitle">
<h1>Object</h1>  </div>
<div class="ingroups"><a class="el" href="group__cache.html">Cache</a></div></div>
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structnl__derived__object.html">nl_derived_object</a></td></tr>
<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__object__api.html">Object API</a></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Object Creation/Deletion</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct nl_object *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__object.html#ga9c1f2fd887d8325839f452879cdf982a">nl_object_alloc</a> (struct <a class="el" href="structnl__object__ops.html">nl_object_ops</a> *ops)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocate a new object of kind specified by the operations handle.  <a href="#ga9c1f2fd887d8325839f452879cdf982a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct nl_object *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__object.html#ga5123af5fe83a3c0bdc5984fd4561b7b6">nl_object_alloc_name</a> (const char *kind)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocate a new object of kind specified by the name.  <a href="#ga5123af5fe83a3c0bdc5984fd4561b7b6"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct nl_object *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__object.html#ga90d86d45c53d2be6ba927bec662159d7">nl_object_clone</a> (struct nl_object *obj)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocate a new object and copy all data from an existing object.  <a href="#ga90d86d45c53d2be6ba927bec662159d7"></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__object.html#gabf3bc276bb9102f83fc96d299b6b03ce">nl_object_free</a> (struct nl_object *obj)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Free a cacheable object.  <a href="#gabf3bc276bb9102f83fc96d299b6b03ce"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Reference Management</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__object.html#gabd5767ac47ec6f09d1ac643f44eb8bfd">nl_object_get</a> (struct nl_object *obj)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Acquire a reference on a object.  <a href="#gabd5767ac47ec6f09d1ac643f44eb8bfd"></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__object.html#ga9905da094bf4c03cf4ac78aeaa86a12b">nl_object_put</a> (struct nl_object *obj)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Release a reference from an object.  <a href="#ga9905da094bf4c03cf4ac78aeaa86a12b"></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__object.html#ga7dcec440f9e35a5611a6b613ed63eab8">nl_object_shared</a> (struct nl_object *obj)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Check whether this object is used by multiple users.  <a href="#ga7dcec440f9e35a5611a6b613ed63eab8"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Marks</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__object.html#gadbc633bb8ae194050473818e0484613d">nl_object_mark</a> (struct nl_object *obj)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add mark to object.  <a href="#gadbc633bb8ae194050473818e0484613d"></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__object.html#ga7e4df25f8e809ed9a0fd336c21b8f2b0">nl_object_unmark</a> (struct nl_object *obj)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Remove mark from object.  <a href="#ga7e4df25f8e809ed9a0fd336c21b8f2b0"></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__object.html#gad4e3c7a399395cc2f8d5ea61138484e5">nl_object_is_marked</a> (struct nl_object *obj)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Return true if object is marked.  <a href="#gad4e3c7a399395cc2f8d5ea61138484e5"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Utillities</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__object.html#ga22a8e9cfa628d4346de3655523fd90b3">nl_object_dump</a> (struct nl_object *obj, struct <a class="el" href="structnl__dump__params.html">nl_dump_params</a> *params)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Dump this object according to the specified parameters.  <a href="#ga22a8e9cfa628d4346de3655523fd90b3"></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__object.html#gaab17e2f7a53ad9eb9cae3d0a60e41074">nl_object_identical</a> (struct nl_object *a, struct nl_object *b)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if the identifiers of two objects are identical.  <a href="#gaab17e2f7a53ad9eb9cae3d0a60e41074"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__object.html#ga0ee9c6a43d27a40ef64e964184576aeb">nl_object_diff</a> (struct nl_object *a, struct nl_object *b)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute bitmask representing difference in attribute values.  <a href="#ga0ee9c6a43d27a40ef64e964184576aeb"></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__object.html#gad4d9124deaff34511d03f3b73fef040c">nl_object_match_filter</a> (struct nl_object *obj, struct nl_object *filter)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Match a filter against an object.  <a href="#gad4d9124deaff34511d03f3b73fef040c"></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__object.html#ga66f1f891eb1ebde2192e01a4b026c1c1">nl_object_attrs2str</a> (struct nl_object *obj, uint32_t attrs, char *buf, size_t len)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert bitmask of attributes to a character string.  <a href="#ga66f1f891eb1ebde2192e01a4b026c1c1"></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__object.html#ga654b45a913fc7c59cd8ac7f918311655">nl_object_attr_list</a> (struct nl_object *obj, char *buf, size_t len)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Return list of attributes present in an object.  <a href="#ga654b45a913fc7c59cd8ac7f918311655"></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="ga7a1b63f7a60c49cd3685a827c41f0611"></a><!-- doxytag: member="object::nl_object_get_refcnt" ref="ga7a1b63f7a60c49cd3685a827c41f0611" args="(struct nl_object *obj)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>nl_object_get_refcnt</b> (struct nl_object *obj)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad2aa1ab8d0b7996714af1eccc7842667"></a><!-- doxytag: member="object::nl_object_get_cache" ref="gad2aa1ab8d0b7996714af1eccc7842667" args="(struct nl_object *obj)" -->
struct nl_cache *&#160;</td><td class="memItemRight" valign="bottom"><b>nl_object_get_cache</b> (struct nl_object *obj)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1e7f5078bf2569a696d177403907796e"></a><!-- doxytag: member="object::nl_object_priv" ref="ga1e7f5078bf2569a696d177403907796e" args="(struct nl_object *obj)" -->
void *&#160;</td><td class="memItemRight" valign="bottom"><b>nl_object_priv</b> (struct nl_object *obj)</td></tr>
</table>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="ga9c1f2fd887d8325839f452879cdf982a"></a><!-- doxytag: member="object.c::nl_object_alloc" ref="ga9c1f2fd887d8325839f452879cdf982a" args="(struct nl_object_ops *ops)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nl_object* nl_object_alloc </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structnl__object__ops.html">nl_object_ops</a> *&#160;</td>
          <td class="paramname"><em>ops</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">ops</td><td>cache operations handle </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>The new object or NULL </dd></dl>

<p>Definition at line <a class="el" href="object_8c_source.html#l00042">42</a> of file <a class="el" href="object_8c_source.html">object.c</a>.</p>

<p>References <a class="el" href="object-api_8h_source.html#l00275">nl_object_ops::oo_constructor</a>, and <a class="el" href="object-api_8h_source.html#l00264">nl_object_ops::oo_size</a>.</p>

<p>Referenced by <a class="el" href="object_8c_source.html#l00072">nl_object_alloc_name()</a>, and <a class="el" href="object_8c_source.html#l00095">nl_object_clone()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nl_object *<span class="keyword">new</span>;

        <span class="keywordflow">if</span> (ops-&gt;<a class="code" href="structnl__object__ops.html#a0fbd42c77db2f0488b8cd72858ece719" title="Size of object including its header.">oo_size</a> &lt; <span class="keyword">sizeof</span>(*<span class="keyword">new</span>))
                BUG();

        <span class="keyword">new</span> = calloc(1, ops-&gt;<a class="code" href="structnl__object__ops.html#a0fbd42c77db2f0488b8cd72858ece719" title="Size of object including its header.">oo_size</a>);
        <span class="keywordflow">if</span> (!<span class="keyword">new</span>) {
                nl_errno(ENOMEM);
                <span class="keywordflow">return</span> NULL;
        }

        <span class="keyword">new</span>-&gt;ce_refcnt = 1;
        nl_init_list_head(&amp;new-&gt;ce_list);

        <span class="keyword">new</span>-&gt;ce_ops = ops;
        <span class="keywordflow">if</span> (ops-&gt;<a class="code" href="structnl__object__ops.html#ac15b64a03806850db9493bd2fbfb64b7" title="Constructor function.">oo_constructor</a>)
                ops-&gt;<a class="code" href="structnl__object__ops.html#ac15b64a03806850db9493bd2fbfb64b7" title="Constructor function.">oo_constructor</a>(<span class="keyword">new</span>);

        NL_DBG(4, <span class="stringliteral">&quot;Allocated new object %p\n&quot;</span>, <span class="keyword">new</span>);

        <span class="keywordflow">return</span> <span class="keyword">new</span>;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga5123af5fe83a3c0bdc5984fd4561b7b6"></a><!-- doxytag: member="object.c::nl_object_alloc_name" ref="ga5123af5fe83a3c0bdc5984fd4561b7b6" args="(const char *kind)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nl_object* nl_object_alloc_name </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>kind</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">kind</td><td>name of object type </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>The new object or nULL </dd></dl>

<p>Definition at line <a class="el" href="object_8c_source.html#l00072">72</a> of file <a class="el" href="object_8c_source.html">object.c</a>.</p>

<p>References <a class="el" href="cache__mngt_8c_source.html#l00036">nl_cache_ops_lookup()</a>, and <a class="el" href="object_8c_source.html#l00042">nl_object_alloc()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span><a class="code" href="structnl__cache__ops.html" title="Cache Operations.">nl_cache_ops</a> *ops;

        ops = <a class="code" href="group__cache__mngt.html#ga7657cf661e569b4b43842a82e409b5fd" title="Lookup the set cache operations of a certain cache type.">nl_cache_ops_lookup</a>(kind);
        <span class="keywordflow">if</span> (!ops) {
                nl_error(ENOENT, <span class="stringliteral">&quot;Unable to lookup cache kind \&quot;%s\&quot;&quot;</span>, kind);
                <span class="keywordflow">return</span> NULL;
        }

        <span class="keywordflow">return</span> <a class="code" href="group__object.html#ga9c1f2fd887d8325839f452879cdf982a" title="Allocate a new object of kind specified by the operations handle.">nl_object_alloc</a>(ops-&gt;co_obj_ops);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga90d86d45c53d2be6ba927bec662159d7"></a><!-- doxytag: member="object.c::nl_object_clone" ref="ga90d86d45c53d2be6ba927bec662159d7" args="(struct nl_object *obj)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct nl_object* nl_object_clone </td>
          <td>(</td>
          <td class="paramtype">struct nl_object *&#160;</td>
          <td class="paramname"><em>obj</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">obj</td><td>object to inherite data from </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>The new object or NULL. </dd></dl>

<p>Definition at line <a class="el" href="object_8c_source.html#l00095">95</a> of file <a class="el" href="object_8c_source.html">object.c</a>.</p>

<p>References <a class="el" href="object_8c_source.html#l00042">nl_object_alloc()</a>, <a class="el" href="object_8c_source.html#l00133">nl_object_free()</a>, <a class="el" href="object-api_8h_source.html#l00296">nl_object_ops::oo_clone</a>, <a class="el" href="object-api_8h_source.html#l00284">nl_object_ops::oo_free_data</a>, and <a class="el" href="object-api_8h_source.html#l00264">nl_object_ops::oo_size</a>.</p>

<p>Referenced by <a class="el" href="cache_8c_source.html#l00302">nl_cache_add()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span>nl_object *<span class="keyword">new</span>;
        <span class="keyword">struct </span><a class="code" href="structnl__object__ops.html" title="Object Operations.">nl_object_ops</a> *ops = obj_ops(obj);
        <span class="keywordtype">int</span> doff = offsetof(<span class="keyword">struct</span> <a class="code" href="structnl__derived__object.html">nl_derived_object</a>, data);
        <span class="keywordtype">int</span> size;

        <span class="keyword">new</span> = <a class="code" href="group__object.html#ga9c1f2fd887d8325839f452879cdf982a" title="Allocate a new object of kind specified by the operations handle.">nl_object_alloc</a>(ops);
        <span class="keywordflow">if</span> (!<span class="keyword">new</span>)
                <span class="keywordflow">return</span> NULL;

        size = ops-&gt;<a class="code" href="structnl__object__ops.html#a0fbd42c77db2f0488b8cd72858ece719" title="Size of object including its header.">oo_size</a> - doff;
        <span class="keywordflow">if</span> (size &lt; 0)
                BUG();

        <span class="keyword">new</span>-&gt;ce_ops = obj-&gt;ce_ops;
        <span class="keyword">new</span>-&gt;ce_msgtype = obj-&gt;ce_msgtype;

        <span class="keywordflow">if</span> (size)
                memcpy((<span class="keywordtype">void</span> *)<span class="keyword">new</span> + doff, (<span class="keywordtype">void</span> *)obj + doff, size);

        <span class="keywordflow">if</span> (ops-&gt;<a class="code" href="structnl__object__ops.html#ada92030f50d49c033007952393c8d9b2" title="Cloning function.">oo_clone</a>) {
                <span class="keywordflow">if</span> (ops-&gt;<a class="code" href="structnl__object__ops.html#ada92030f50d49c033007952393c8d9b2" title="Cloning function.">oo_clone</a>(<span class="keyword">new</span>, obj) &lt; 0) {
                        <a class="code" href="group__object.html#gabf3bc276bb9102f83fc96d299b6b03ce" title="Free a cacheable object.">nl_object_free</a>(<span class="keyword">new</span>);
                        <span class="keywordflow">return</span> NULL;
                }
        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (size &amp;&amp; ops-&gt;<a class="code" href="structnl__object__ops.html#a38797e8754a31bb259120ef9101bbb0a" title="Destructor function.">oo_free_data</a>)
                BUG();

        <span class="keywordflow">return</span> <span class="keyword">new</span>;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gabf3bc276bb9102f83fc96d299b6b03ce"></a><!-- doxytag: member="object.c::nl_object_free" ref="gabf3bc276bb9102f83fc96d299b6b03ce" args="(struct nl_object *obj)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void nl_object_free </td>
          <td>(</td>
          <td class="paramtype">struct nl_object *&#160;</td>
          <td class="paramname"><em>obj</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">obj</td><td>object to free</td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 or a negative error code. </dd></dl>

<p>Definition at line <a class="el" href="object_8c_source.html#l00133">133</a> of file <a class="el" href="object_8c_source.html">object.c</a>.</p>

<p>References <a class="el" href="cache_8c_source.html#l00356">nl_cache_remove()</a>, and <a class="el" href="object-api_8h_source.html#l00284">nl_object_ops::oo_free_data</a>.</p>

<p>Referenced by <a class="el" href="object_8c_source.html#l00095">nl_object_clone()</a>, and <a class="el" href="object_8c_source.html#l00173">nl_object_put()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span><a class="code" href="structnl__object__ops.html" title="Object Operations.">nl_object_ops</a> *ops = obj_ops(obj);

        <span class="keywordflow">if</span> (obj-&gt;ce_refcnt &gt; 0)
                NL_DBG(1, <span class="stringliteral">&quot;Warning: Freeing object in use...\n&quot;</span>);

        <span class="keywordflow">if</span> (obj-&gt;ce_cache)
                <a class="code" href="group__cache.html#ga8d1f1d2c3b355a7f129d9cd6f7da2b52" title="Removes an object from a cache.">nl_cache_remove</a>(obj);

        <span class="keywordflow">if</span> (ops-&gt;<a class="code" href="structnl__object__ops.html#a38797e8754a31bb259120ef9101bbb0a" title="Destructor function.">oo_free_data</a>)
                ops-&gt;<a class="code" href="structnl__object__ops.html#a38797e8754a31bb259120ef9101bbb0a" title="Destructor function.">oo_free_data</a>(obj);

        free(obj);

        NL_DBG(4, <span class="stringliteral">&quot;Freed object %p\n&quot;</span>, obj);
}
</pre></div>
</div>
</div>
<a class="anchor" id="gabd5767ac47ec6f09d1ac643f44eb8bfd"></a><!-- doxytag: member="object.c::nl_object_get" ref="gabd5767ac47ec6f09d1ac643f44eb8bfd" args="(struct nl_object *obj)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void nl_object_get </td>
          <td>(</td>
          <td class="paramtype">struct nl_object *&#160;</td>
          <td class="paramname"><em>obj</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">obj</td><td>object to acquire reference from </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="object_8c_source.html#l00162">162</a> of file <a class="el" href="object_8c_source.html">object.c</a>.</p>

<p>Referenced by <a class="el" href="ctrl_8c_source.html#l00174">genl_ctrl_search()</a>, <a class="el" href="ctrl_8c_source.html#l00208">genl_ctrl_search_by_name()</a>, <a class="el" href="cache_8c_source.html#l00302">nl_cache_add()</a>, <a class="el" href="cache_8c_source.html#l00331">nl_cache_move()</a>, <a class="el" href="cache_8c_source.html#l00383">nl_cache_search()</a>, <a class="el" href="link_8c_source.html#l00895">rtnl_link_get()</a>, <a class="el" href="link_8c_source.html#l00922">rtnl_link_get_by_name()</a>, <a class="el" href="neigh_8c_source.html#l00559">rtnl_neigh_get()</a>, <a class="el" href="neightbl_8c_source.html#l00436">rtnl_neightbl_get()</a>, <a class="el" href="qdisc_8c_source.html#l00432">rtnl_qdisc_get()</a>, and <a class="el" href="qdisc_8c_source.html#l00407">rtnl_qdisc_get_by_parent()</a>.</p>
<div class="fragment"><pre class="fragment">{
        obj-&gt;ce_refcnt++;
        NL_DBG(4, <span class="stringliteral">&quot;New reference to object %p, total %d\n&quot;</span>,
               obj, obj-&gt;ce_refcnt);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga9905da094bf4c03cf4ac78aeaa86a12b"></a><!-- doxytag: member="object.c::nl_object_put" ref="ga9905da094bf4c03cf4ac78aeaa86a12b" args="(struct nl_object *obj)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void nl_object_put </td>
          <td>(</td>
          <td class="paramtype">struct nl_object *&#160;</td>
          <td class="paramname"><em>obj</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">obj</td><td>object to release reference from </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="object_8c_source.html#l00173">173</a> of file <a class="el" href="object_8c_source.html">object.c</a>.</p>

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

<p>Referenced by <a class="el" href="cache_8c_source.html#l00356">nl_cache_remove()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">if</span> (!obj)
                <span class="keywordflow">return</span>;

        obj-&gt;ce_refcnt--;
        NL_DBG(4, <span class="stringliteral">&quot;Returned object reference %p, %d remaining\n&quot;</span>,
               obj, obj-&gt;ce_refcnt);

        <span class="keywordflow">if</span> (obj-&gt;ce_refcnt &lt; 0)
                BUG();

        <span class="keywordflow">if</span> (obj-&gt;ce_refcnt &lt;= 0)
                <a class="code" href="group__object.html#gabf3bc276bb9102f83fc96d299b6b03ce" title="Free a cacheable object.">nl_object_free</a>(obj);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga7dcec440f9e35a5611a6b613ed63eab8"></a><!-- doxytag: member="object.c::nl_object_shared" ref="ga7dcec440f9e35a5611a6b613ed63eab8" args="(struct nl_object *obj)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nl_object_shared </td>
          <td>(</td>
          <td class="paramtype">struct nl_object *&#160;</td>
          <td class="paramname"><em>obj</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">obj</td><td>object to check </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>true or false </dd></dl>

<p>Definition at line <a class="el" href="object_8c_source.html#l00194">194</a> of file <a class="el" href="object_8c_source.html">object.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> obj-&gt;ce_refcnt &gt; 1;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gadbc633bb8ae194050473818e0484613d"></a><!-- doxytag: member="object.c::nl_object_mark" ref="gadbc633bb8ae194050473818e0484613d" args="(struct nl_object *obj)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void nl_object_mark </td>
          <td>(</td>
          <td class="paramtype">struct nl_object *&#160;</td>
          <td class="paramname"><em>obj</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">obj</td><td>Object to mark </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="object_8c_source.html#l00210">210</a> of file <a class="el" href="object_8c_source.html">object.c</a>.</p>

<p>Referenced by <a class="el" href="cache_8c_source.html#l00688">nl_cache_mark_all()</a>.</p>
<div class="fragment"><pre class="fragment">{
        obj-&gt;ce_flags |= NL_OBJ_MARK;
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga7e4df25f8e809ed9a0fd336c21b8f2b0"></a><!-- doxytag: member="object.c::nl_object_unmark" ref="ga7e4df25f8e809ed9a0fd336c21b8f2b0" args="(struct nl_object *obj)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void nl_object_unmark </td>
          <td>(</td>
          <td class="paramtype">struct nl_object *&#160;</td>
          <td class="paramname"><em>obj</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">obj</td><td>Object to unmark </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="object_8c_source.html#l00219">219</a> of file <a class="el" href="object_8c_source.html">object.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        obj-&gt;ce_flags &amp;= ~NL_OBJ_MARK;
}
</pre></div>
</div>
</div>
<a class="anchor" id="gad4e3c7a399395cc2f8d5ea61138484e5"></a><!-- doxytag: member="object.c::nl_object_is_marked" ref="gad4e3c7a399395cc2f8d5ea61138484e5" args="(struct nl_object *obj)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nl_object_is_marked </td>
          <td>(</td>
          <td class="paramtype">struct nl_object *&#160;</td>
          <td class="paramname"><em>obj</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">obj</td><td>Object to check </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>true if object is marked, otherwise false </dd></dl>

<p>Definition at line <a class="el" href="object_8c_source.html#l00229">229</a> of file <a class="el" href="object_8c_source.html">object.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> (obj-&gt;ce_flags &amp; NL_OBJ_MARK);
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga22a8e9cfa628d4346de3655523fd90b3"></a><!-- doxytag: member="object.c::nl_object_dump" ref="ga22a8e9cfa628d4346de3655523fd90b3" args="(struct nl_object *obj, struct nl_dump_params *params)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void nl_object_dump </td>
          <td>(</td>
          <td class="paramtype">struct nl_object *&#160;</td>
          <td class="paramname"><em>obj</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structnl__dump__params.html">nl_dump_params</a> *&#160;</td>
          <td class="paramname"><em>params</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">obj</td><td>object to dump </td></tr>
    <tr><td class="paramname">params</td><td>dumping parameters </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="object_8c_source.html#l00246">246</a> of file <a class="el" href="object_8c_source.html">object.c</a>.</p>
<div class="fragment"><pre class="fragment">{
        dump_from_ops(obj, params);
}
</pre></div>
</div>
</div>
<a class="anchor" id="gaab17e2f7a53ad9eb9cae3d0a60e41074"></a><!-- doxytag: member="object.c::nl_object_identical" ref="gaab17e2f7a53ad9eb9cae3d0a60e41074" args="(struct nl_object *a, struct nl_object *b)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nl_object_identical </td>
          <td>(</td>
          <td class="paramtype">struct nl_object *&#160;</td>
          <td class="paramname"><em>a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct nl_object *&#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>an object </td></tr>
    <tr><td class="paramname">b</td><td>another object of same type</td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>true if both objects have equal identifiers, otherwise false. </dd></dl>

<p>Definition at line <a class="el" href="object_8c_source.html#l00258">258</a> of file <a class="el" href="object_8c_source.html">object.c</a>.</p>

<p>References <a class="el" href="object-api_8h_source.html#l00321">nl_object_ops::oo_compare</a>.</p>

<p>Referenced by <a class="el" href="cache_8c_source.html#l00383">nl_cache_search()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span><a class="code" href="structnl__object__ops.html" title="Object Operations.">nl_object_ops</a> *ops = obj_ops(a);
        <span class="keywordtype">int</span> req_attrs;

        <span class="comment">/* Both objects must be of same type */</span>
        <span class="keywordflow">if</span> (ops != obj_ops(b))
                <span class="keywordflow">return</span> 0;

        req_attrs = ops-&gt;oo_id_attrs;

        <span class="comment">/* Both objects must provide all required attributes to uniquely</span>
<span class="comment">         * identify an object */</span>
        <span class="keywordflow">if</span> ((a-&gt;ce_mask &amp; req_attrs) != req_attrs ||
            (b-&gt;ce_mask &amp; req_attrs) != req_attrs)
                <span class="keywordflow">return</span> 0;

        <span class="comment">/* Can&#39;t judge unless we can compare */</span>
        <span class="keywordflow">if</span> (ops-&gt;<a class="code" href="structnl__object__ops.html#aeabb90e7882be2af2c6e92391cce9597" title="Comparison function.">oo_compare</a> == NULL)
                <span class="keywordflow">return</span> 0;

        <span class="keywordflow">return</span> !(ops-&gt;<a class="code" href="structnl__object__ops.html#aeabb90e7882be2af2c6e92391cce9597" title="Comparison function.">oo_compare</a>(a, b, req_attrs, 0));
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga0ee9c6a43d27a40ef64e964184576aeb"></a><!-- doxytag: member="object.c::nl_object_diff" ref="ga0ee9c6a43d27a40ef64e964184576aeb" args="(struct nl_object *a, struct nl_object *b)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">uint32_t nl_object_diff </td>
          <td>(</td>
          <td class="paramtype">struct nl_object *&#160;</td>
          <td class="paramname"><em>a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct nl_object *&#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>an object </td></tr>
    <tr><td class="paramname">b</td><td>another object of same type</td></tr>
  </table>
  </dd>
</dl>
<p>The bitmask returned is specific to an object type, each bit set represents an attribute which mismatches in either of the two objects. Unavailability of an attribute in one object and presence in the other is regarded a mismatch as well.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>Bitmask describing differences or 0 if they are completely identical. </dd></dl>

<p>Definition at line <a class="el" href="object_8c_source.html#l00294">294</a> of file <a class="el" href="object_8c_source.html">object.c</a>.</p>

<p>References <a class="el" href="object-api_8h_source.html#l00321">nl_object_ops::oo_compare</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span><a class="code" href="structnl__object__ops.html" title="Object Operations.">nl_object_ops</a> *ops = obj_ops(a);

        <span class="keywordflow">if</span> (ops != obj_ops(b) || ops-&gt;<a class="code" href="structnl__object__ops.html#aeabb90e7882be2af2c6e92391cce9597" title="Comparison function.">oo_compare</a> == NULL)
                <span class="keywordflow">return</span> UINT_MAX;

        <span class="keywordflow">return</span> ops-&gt;<a class="code" href="structnl__object__ops.html#aeabb90e7882be2af2c6e92391cce9597" title="Comparison function.">oo_compare</a>(a, b, ~0, 0);
}
</pre></div>
</div>
</div>
<a class="anchor" id="gad4d9124deaff34511d03f3b73fef040c"></a><!-- doxytag: member="object.c::nl_object_match_filter" ref="gad4d9124deaff34511d03f3b73fef040c" args="(struct nl_object *obj, struct nl_object *filter)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nl_object_match_filter </td>
          <td>(</td>
          <td class="paramtype">struct nl_object *&#160;</td>
          <td class="paramname"><em>obj</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct nl_object *&#160;</td>
          <td class="paramname"><em>filter</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">obj</td><td>object to check </td></tr>
    <tr><td class="paramname">filter</td><td>object of same type acting as filter</td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>1 if the object matches the filter or 0 if no filter procedure is available or if the filter does not match. </dd></dl>

<p>Definition at line <a class="el" href="object_8c_source.html#l00313">313</a> of file <a class="el" href="object_8c_source.html">object.c</a>.</p>

<p>References <a class="el" href="object-api_8h_source.html#l00321">nl_object_ops::oo_compare</a>.</p>

<p>Referenced by <a class="el" href="cache_8c_source.html#l00727">nl_cache_dump_filter()</a>, <a class="el" href="cache_8c_source.html#l00790">nl_cache_foreach_filter()</a>, <a class="el" href="cache_8c_source.html#l00068">nl_cache_nitems_filter()</a>, and <a class="el" href="cache_8c_source.html#l00215">nl_cache_subset()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span><a class="code" href="structnl__object__ops.html" title="Object Operations.">nl_object_ops</a> *ops = obj_ops(obj);

        <span class="keywordflow">if</span> (ops != obj_ops(filter) || ops-&gt;<a class="code" href="structnl__object__ops.html#aeabb90e7882be2af2c6e92391cce9597" title="Comparison function.">oo_compare</a> == NULL)
                <span class="keywordflow">return</span> 0;
        
        <span class="keywordflow">return</span> !(ops-&gt;<a class="code" href="structnl__object__ops.html#aeabb90e7882be2af2c6e92391cce9597" title="Comparison function.">oo_compare</a>(obj, filter, filter-&gt;ce_mask,
                                 LOOSE_FLAG_COMPARISON));
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga66f1f891eb1ebde2192e01a4b026c1c1"></a><!-- doxytag: member="object.c::nl_object_attrs2str" ref="ga66f1f891eb1ebde2192e01a4b026c1c1" args="(struct nl_object *obj, uint32_t attrs, char *buf, size_t len)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">char* nl_object_attrs2str </td>
          <td>(</td>
          <td class="paramtype">struct nl_object *&#160;</td>
          <td class="paramname"><em>obj</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&#160;</td>
          <td class="paramname"><em>attrs</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>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">obj</td><td>object of same type as attribute bitmask </td></tr>
    <tr><td class="paramname">attrs</td><td>bitmask of attribute types </td></tr>
    <tr><td class="paramname">buf</td><td>destination buffer </td></tr>
    <tr><td class="paramname">len</td><td>length of destination buffer</td></tr>
  </table>
  </dd>
</dl>
<p>Converts the bitmask of attribute types into a list of attribute names separated by comas.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>destination buffer. </dd></dl>

<p>Definition at line <a class="el" href="object_8c_source.html#l00336">336</a> of file <a class="el" href="object_8c_source.html">object.c</a>.</p>

<p>Referenced by <a class="el" href="object_8c_source.html#l00357">nl_object_attr_list()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keyword">struct </span><a class="code" href="structnl__object__ops.html" title="Object Operations.">nl_object_ops</a> *ops = obj_ops(obj);

        <span class="keywordflow">if</span> (ops-&gt;oo_attrs2str != NULL)
                <span class="keywordflow">return</span> ops-&gt;oo_attrs2str(attrs, buf, len);
        <span class="keywordflow">else</span> {
                memset(buf, 0, len);
                <span class="keywordflow">return</span> buf;
        }
}
</pre></div>
</div>
</div>
<a class="anchor" id="ga654b45a913fc7c59cd8ac7f918311655"></a><!-- doxytag: member="object.c::nl_object_attr_list" ref="ga654b45a913fc7c59cd8ac7f918311655" args="(struct nl_object *obj, char *buf, size_t len)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">char* nl_object_attr_list </td>
          <td>(</td>
          <td class="paramtype">struct nl_object *&#160;</td>
          <td class="paramname"><em>obj</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>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">obj</td><td>an object </td></tr>
    <tr><td class="paramname">buf</td><td>destination buffer </td></tr>
    <tr><td class="paramname">len</td><td>length of destination buffer</td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>destination buffer. </dd></dl>

<p>Definition at line <a class="el" href="object_8c_source.html#l00357">357</a> of file <a class="el" href="object_8c_source.html">object.c</a>.</p>

<p>References <a class="el" href="object_8c_source.html#l00336">nl_object_attrs2str()</a>.</p>
<div class="fragment"><pre class="fragment">{
        <span class="keywordflow">return</span> <a class="code" href="group__object.html#ga66f1f891eb1ebde2192e01a4b026c1c1" title="Convert bitmask of attributes to a character string.">nl_object_attrs2str</a>(obj, obj-&gt;ce_mask, buf, len);
}
</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>