agent__registry_8c.html from net-snmp at Krugle
Show agent__registry_8c.html syntax highlighted
<!--#set var="section" value="development" -->
<!--#include virtual="/page-top.html" -->
<!-- CONTENT START -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>agent_registry.c File Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 1.2.11 -->
<center>
<a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="annotated.html">Data Structures</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Data Fields</a> <a class="qindex" href="globals.html">Globals</a> </center>
<hr><h1>agent_registry.c File Reference</h1><code>#include <<a class="el" href="config_8h-source.html">config.h</a>></code><br>
<code>#include <signal.h></code><br>
<code>#include <string.h></code><br>
<code>#include <stdlib.h></code><br>
<code>#include <sys/types.h></code><br>
<code>#include <stdio.h></code><br>
<code>#include <fcntl.h></code><br>
<code>#include <sys/time.h></code><br>
<code>#include <time.h></code><br>
<code>#include <dmalloc.h></code><br>
<code>#include "mibincl.h"</code><br>
<code>#include "snmp_client.h"</code><br>
<code>#include "default_store.h"</code><br>
<code>#include "<a class="el" href="ds__agent_8h-source.html">ds_agent.h</a>"</code><br>
<code>#include "callback.h"</code><br>
<code>#include "<a class="el" href="agent__callbacks_8h-source.html">agent_callbacks.h</a>"</code><br>
<code>#include "<a class="el" href="agent__registry_8h-source.html">agent_registry.h</a>"</code><br>
<code>#include "snmp_alarm.h"</code><br>
<code>#include "snmp_secmod.h"</code><br>
<code>#include "vacm.h"</code><br>
<code>#include "<a class="el" href="snmpd_8h-source.html">snmpd.h</a>"</code><br>
<code>#include "mibgroup/struct.h"</code><br>
<code>#include "<a class="el" href="old__api_8h-source.html">helpers/old_api.h</a>"</code><br>
<code>#include "<a class="el" href="null_8h-source.html">helpers/null.h</a>"</code><br>
<code>#include "<a class="el" href="table_8h-source.html">helpers/table.h</a>"</code><br>
<code>#include "<a class="el" href="table__iterator_8h-source.html">helpers/table_iterator.h</a>"</code><br>
<code>#include "mib_module_includes.h"</code><br>
<p>
<a href="agent__registry_8c-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a0">IN_SNMP_VARS_C</a></td></tr>
<tr><td colspan=2><br><h2>Functions</h2></td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="agent__registry_8h.html#a31">subtree_context_cache</a> * </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a17">get_top_context_cache</a> (void)</td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="structsubtree.html">subtree</a> * </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a18">find_first_subtree</a> (const char *context_name)</td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="structsubtree.html">subtree</a> * </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a19">add_subtree</a> (struct <a class="el" href="structsubtree.html">subtree</a> *new_tree, const char *context_name)</td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="structsubtree.html">subtree</a> * </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a20">replace_first_subtree</a> (struct <a class="el" href="structsubtree.html">subtree</a> *new_tree, const char *context_name)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a21">tree_compare</a> (const struct <a class="el" href="structsubtree.html">subtree</a> *ap, const struct <a class="el" href="structsubtree.html">subtree</a> *bp)</td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="structsubtree.html">subtree</a> * </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a22">split_subtree</a> (struct <a class="el" href="structsubtree.html">subtree</a> *current, oid name[], int name_len)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a23">load_subtree</a> (struct <a class="el" href="structsubtree.html">subtree</a> *new_sub, const char *context_name)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a24">register_mib_context2</a> (const char *moduleName, struct <a class="el" href="structvariable.html">variable</a> *var, size_t varsize, size_t numvars, oid *mibloc, size_t mibloclen, int priority, int range_subid, oid range_ubound, struct snmp_session *ss, const char *context, int timeout, int flags, <a class="el" href="helpers_2agent__handler_8h.html#a9">handler_registration</a> *reginfo)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a25">register_mib_context</a> (const char *moduleName, struct <a class="el" href="structvariable.html">variable</a> *var, size_t varsize, size_t numvars, oid *mibloc, size_t mibloclen, int priority, int range_subid, oid range_ubound, struct snmp_session *ss, const char *context, int timeout, int flags)</td></tr>
<tr><td nowrap align=right valign=top>void </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a26">register_mib_reattach_subtree</a> (struct <a class="el" href="structsubtree.html">subtree</a> *it)</td></tr>
<tr><td nowrap align=right valign=top>void </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a27">register_mib_reattach</a> (void)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a28">register_mib_range</a> (const char *moduleName, struct <a class="el" href="structvariable.html">variable</a> *var, size_t varsize, size_t numvars, oid *mibloc, size_t mibloclen, int priority, int range_subid, oid range_ubound, struct snmp_session *ss)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a29">register_mib_priority</a> (const char *moduleName, struct <a class="el" href="structvariable.html">variable</a> *var, size_t varsize, size_t numvars, oid *mibloc, size_t mibloclen, int priority)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a30">register_mib</a> (const char *moduleName, struct <a class="el" href="structvariable.html">variable</a> *var, size_t varsize, size_t numvars, oid *mibloc, size_t mibloclen)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a31">register_mib_table_row</a> (const char *moduleName, struct <a class="el" href="structvariable.html">variable</a> *var, size_t varsize, size_t numvars, oid *mibloc, size_t mibloclen, int priority, int var_subid, struct snmp_session *ss, const char *context, int timeout, int flags)</td></tr>
<tr><td nowrap align=right valign=top>void </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a32">unload_subtree</a> (struct <a class="el" href="structsubtree.html">subtree</a> *sub, struct <a class="el" href="structsubtree.html">subtree</a> *prev)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a33">unregister_mib_context</a> (oid *name, size_t len, int priority, int range_subid, oid range_ubound, const char *context)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a34">unregister_mib_range</a> (oid *name, size_t len, int priority, int range_subid, oid range_ubound)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a35">unregister_mib_priority</a> (oid *name, size_t len, int priority)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a36">unregister_mib</a> (oid *name, size_t len)</td></tr>
<tr><td nowrap align=right valign=top>void </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a37">unregister_mibs_by_session</a> (struct snmp_session *ss)</td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="structsubtree.html">subtree</a> * </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a38">free_subtree</a> (struct <a class="el" href="structsubtree.html">subtree</a> *st)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a39">in_a_view</a> (oid *name, size_t *namelen, struct snmp_pdu *pdu, int type)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a40">check_access</a> (struct snmp_pdu *pdu)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a41">compare_tree</a> (const oid *in_name1, size_t len1, const oid *in_name2, size_t len2)</td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="structsubtree.html">subtree</a> * </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a42">find_subtree_previous</a> (oid *name, size_t len, struct <a class="el" href="structsubtree.html">subtree</a> *<a class="el" href="structsubtree.html">subtree</a>, const char *context_name)</td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="structsubtree.html">subtree</a> * </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a43">find_subtree_next</a> (oid *name, size_t len, struct <a class="el" href="structsubtree.html">subtree</a> *<a class="el" href="structsubtree.html">subtree</a>, const char *context_name)</td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="structsubtree.html">subtree</a> * </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a44">find_subtree</a> (oid *name, size_t len, struct <a class="el" href="structsubtree.html">subtree</a> *<a class="el" href="structsubtree.html">subtree</a>, const char *context_name)</td></tr>
<tr><td nowrap align=right valign=top>snmp_session * </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a45">get_session_for_oid</a> (oid *name, size_t len, const char *context_name)</td></tr>
<tr><td nowrap align=right valign=top>void </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a46">setup_tree</a> (void)</td></tr>
<tr><td nowrap align=right valign=top>void </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a47">dump_idx_registry</a> (void)</td></tr>
<tr><td nowrap align=right valign=top>void </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a48">dump_registry</a> (void)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a49">register_readfd</a> (int fd, void(*func)(int, void *), void *data)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a50">register_writefd</a> (int fd, void(*func)(int, void *), void *data)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a51">register_exceptfd</a> (int fd, void(*func)(int, void *), void *data)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a52">unregister_readfd</a> (int fd)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a53">unregister_writefd</a> (int fd)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a54">unregister_exceptfd</a> (int fd)</td></tr>
<tr><td nowrap align=right valign=top>RETSIGTYPE </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a55">agent_SIGCHLD_handler</a> (int sig)</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a56">register_signal</a> (int sig, void(*func)(int))</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a57">unregister_signal</a> (int sig)</td></tr>
<tr><td colspan=2><br><h2>Variables</h2></td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="agent__registry_8h.html#a31">subtree_context_cache</a> * </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a1">context_subtrees</a> = NULL</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a3">external_readfd</a> [NUM_EXTERNAL_FDS]</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a4">external_readfdlen</a> = 0</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a5">external_writefd</a> [NUM_EXTERNAL_FDS]</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a6">external_writefdlen</a> = 0</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a7">external_exceptfd</a> [NUM_EXTERNAL_FDS]</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a8">external_exceptfdlen</a> = 0</td></tr>
<tr><td nowrap align=right valign=top>void(* </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a9">external_readfdfunc</a> [NUM_EXTERNAL_FDS])(int, void *)</td></tr>
<tr><td nowrap align=right valign=top>void(* </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a10">external_writefdfunc</a> [NUM_EXTERNAL_FDS])(int, void *)</td></tr>
<tr><td nowrap align=right valign=top>void(* </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a11">external_exceptfdfunc</a> [NUM_EXTERNAL_FDS])(int, void *)</td></tr>
<tr><td nowrap align=right valign=top>void * </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a12">external_readfd_data</a> [NUM_EXTERNAL_FDS]</td></tr>
<tr><td nowrap align=right valign=top>void * </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a13">external_writefd_data</a> [NUM_EXTERNAL_FDS]</td></tr>
<tr><td nowrap align=right valign=top>void * </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a14">external_exceptfd_data</a> [NUM_EXTERNAL_FDS]</td></tr>
<tr><td nowrap align=right valign=top>int </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a15">external_signal_scheduled</a> [NUM_EXTERNAL_SIGS]</td></tr>
<tr><td nowrap align=right valign=top>void(* </td><td valign=bottom><a class="el" href="agent__registry_8c.html#a16">external_signal_handler</a> [NUM_EXTERNAL_SIGS])(int)</td></tr>
</table>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="agent_registry.c::IN_SNMP_VARS_C"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define IN_SNMP_VARS_C
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00008">8</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>. </td>
</tr>
</table>
<hr><h2>Function Documentation</h2>
<a name="a19" doxytag="agent_registry.c::add_subtree"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> struct <a class="el" href="structsubtree.html">subtree</a>* add_subtree </td>
<td class="md">( </td>
<td class="md" nowrap>struct <a class="el" href="structsubtree.html">subtree</a> * </td>
<td class="mdname"> <em>new_tree</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>const char * </td>
<td class="mdname"> <em>context_name</em></td>
</tr>
<tr>
<td></td>
<td class="md">) </td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00090">90</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.
<p>
Referenced by <a class="el" href="agent__registry_8c-source.html#l00107">replace_first_subtree</a>().
<p>
<div class="fragment"><pre>00090 {
00091 <a class="code" href="structsubtree__context__cache__s.html">subtree_context_cache</a> *ptr = SNMP_MALLOC_TYPEDEF(<a class="code" href="structsubtree__context__cache__s.html">subtree_context_cache</a>);
00092 <font class="keywordflow">if</font> (!context_name)
00093 context_name = <font class="stringliteral">""</font>;
00094
00095 <font class="keywordflow">if</font> (!ptr)
00096 <font class="keywordflow">return</font> NULL;
00097
00098 DEBUGMSGTL((<font class="stringliteral">"add_subtree"</font>,<font class="stringliteral">"adding subtree for context: \"%s\"\n"</font>, context_name));
00099 ptr-><a class="code" href="structsubtree__context__cache__s.html#m2">next</a> = <a class="code" href="agent__registry_8c.html#a1">context_subtrees</a>;
00100 ptr-><a class="code" href="structsubtree__context__cache__s.html#m1">first_subtree</a> = new_tree;
00101 ptr-><a class="code" href="structsubtree__context__cache__s.html#m0">context_name</a> = strdup(context_name);
00102 <a class="code" href="agent__registry_8c.html#a1">context_subtrees</a> = ptr;
00103 <font class="keywordflow">return</font> ptr-><a class="code" href="structsubtree__context__cache__s.html#m1">first_subtree</a>;
00104 }
</pre></div> </td>
</tr>
</table>
<a name="a55" doxytag="agent_registry.c::agent_SIGCHLD_handler"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> RETSIGTYPE agent_SIGCHLD_handler </td>
<td class="md">( </td>
<td class="md" nowrap>int </td>
<td class="mdname1"> <em>sig</em> </td>
<td class="md">) </td>
<td class="md"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l01172">1172</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>01173 {
01174 external_signal_scheduled[SIGCHLD]++;
01175 <font class="preprocessor">#ifndef HAVE_SIGACTION</font>
01176 <font class="comment">/* signal() sucks. It *might* have SysV semantics, which means that</font>
01177 * a signal handler is reset once it gets called. Ensure that it
01178 * remains active.
01179 */
01180 signal(SIGCHLD, <a class="code" href="agent__registry_8c.html#a55">agent_SIGCHLD_handler</a>);
01181 <font class="preprocessor">#endif</font>
01182 }
</pre></div> </td>
</tr>
</table>
<a name="a40" doxytag="agent_registry.c::check_access"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> int check_access </td>
<td class="md">( </td>
<td class="md" nowrap>struct snmp_pdu * </td>
<td class="mdname1"> <em>pdu</em> </td>
<td class="md">) </td>
<td class="md"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00866">866</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00867 {
00868 <font class="keyword">struct </font><a class="code" href="structview__parameters.html">view_parameters</a> view_parms;
00869 view_parms.<a class="code" href="structview__parameters.html#m0">pdu</a> = pdu;
00870 view_parms.<a class="code" href="structview__parameters.html#m1">name</a> = 0;
00871 view_parms.<a class="code" href="structview__parameters.html#m2">namelen</a> = 0;
00872 view_parms.<a class="code" href="structview__parameters.html#m3">errorcode</a> = 0;
00873
00874 <font class="keywordflow">if</font> (pdu->flags & UCD_MSG_FLAG_ALWAYS_IN_VIEW)
00875 <font class="keywordflow">return</font> 0; <font class="comment">/* Enable bypassing of view-based access control */</font>
00876
00877 <font class="keywordflow">switch</font> (pdu->version) {
00878 <font class="keywordflow">case</font> SNMP_VERSION_1:
00879 <font class="keywordflow">case</font> SNMP_VERSION_2c:
00880 <font class="keywordflow">case</font> SNMP_VERSION_3:
00881 snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
00882 <a class="code" href="agent__callbacks_8h.html#a5">SNMPD_CALLBACK_ACM_CHECK_INITIAL</a>,
00883 &view_parms);
00884 <font class="keywordflow">return</font> view_parms.<a class="code" href="structview__parameters.html#m3">errorcode</a>;
00885 }
00886 <font class="keywordflow">return</font> 1;
00887 }
</pre></div> </td>
</tr>
</table>
<a name="a41" doxytag="agent_registry.c::compare_tree"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> int compare_tree </td>
<td class="md">( </td>
<td class="md" nowrap>const oid * </td>
<td class="mdname"> <em>in_name1</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>size_t </td>
<td class="mdname"> <em>len1</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>const oid * </td>
<td class="mdname"> <em>in_name2</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>size_t </td>
<td class="mdname"> <em>len2</em></td>
</tr>
<tr>
<td></td>
<td class="md">) </td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00897">897</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00901 {
00902 <font class="keyword">register</font> <font class="keywordtype">int</font> len, res;
00903 <font class="keyword">register</font> <font class="keyword">const</font> oid * name1 = in_name1;
00904 <font class="keyword">register</font> <font class="keyword">const</font> oid * name2 = in_name2;
00905
00906 <font class="comment">/* len = minimum of len1 and len2 */</font>
00907 <font class="keywordflow">if</font> (len1 < len2)
00908 len = len1;
00909 <font class="keywordflow">else</font>
00910 len = len2;
00911 <font class="comment">/* find first non-matching OID */</font>
00912 <font class="keywordflow">while</font>(len-- > 0){
00913 res = *(name1++) - *(name2++);
00914 <font class="keywordflow">if</font> (res < 0)
00915 <font class="keywordflow">return</font> -1;
00916 <font class="keywordflow">if</font> (res > 0)
00917 <font class="keywordflow">return</font> 1;
00918 }
00919 <font class="comment">/* both OIDs equal up to length of shorter OID */</font>
00920 <font class="keywordflow">if</font> (len1 < len2)
00921 <font class="keywordflow">return</font> -1;
00922
00923 <font class="comment">/* name1 matches name2 for length of name2, or they are equal */</font>
00924 <font class="keywordflow">return</font> 0;
00925 }
</pre></div> </td>
</tr>
</table>
<a name="a47" doxytag="agent_registry.c::dump_idx_registry"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> void dump_idx_registry </td>
<td class="md">( </td>
<td class="md" nowrap>void </td>
<td class="mdname1"> </td>
<td class="md">) </td>
<td class="md"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__index_8c-source.html#l00495">495</a> of file <a class="el" href="agent__index_8c-source.html">agent_index.c</a>.<div class="fragment"><pre>00496 {
00497 <font class="keyword">struct </font><a class="code" href="structsnmp__index.html">snmp_index</a> *idxptr, *idxptr2;
00498 <font class="keywordtype">char</font> start_oid[SPRINT_MAX_LEN];
00499 <font class="keywordtype">char</font> end_oid[SPRINT_MAX_LEN];
00500
00501 <font class="keywordflow">if</font> ( snmp_index_head )
00502 printf(<font class="stringliteral">"\nIndex Allocations:\n"</font>);
00503 <font class="keywordflow">for</font>( idxptr = <a class="code" href="agent__index_8c.html#a0">snmp_index_head</a> ; idxptr != NULL; idxptr = idxptr-><a class="code" href="structsnmp__index.html#m2">next_oid</a>) {
00504 sprint_objid(start_oid, idxptr-><a class="code" href="structsnmp__index.html#m0">varbind</a>->name, idxptr-><a class="code" href="structsnmp__index.html#m0">varbind</a>->name_length);
00505 printf(<font class="stringliteral">"%s indexes:\n"</font>, start_oid);
00506 <font class="keywordflow">for</font>( idxptr2 = idxptr ; idxptr2 != NULL; idxptr2 = idxptr2-><a class="code" href="structsnmp__index.html#m4">next_idx</a>) {
00507 <font class="keywordflow">switch</font>( idxptr2-><a class="code" href="structsnmp__index.html#m0">varbind</a>->type ) {
00508 <font class="keywordflow">case</font> ASN_INTEGER:
00509 printf(<font class="stringliteral">" %c %ld %c\n"</font>,
00510 ( idxptr2-><a class="code" href="structsnmp__index.html#m1">session</a> ? <font class="charliteral">' '</font> : <font class="charliteral">'('</font> ),
00511 *idxptr2-><a class="code" href="structsnmp__index.html#m0">varbind</a>->val.integer,
00512 ( idxptr2-><a class="code" href="structsnmp__index.html#m1">session</a> ? <font class="charliteral">' '</font> : <font class="charliteral">')'</font> ));
00513 <font class="keywordflow">break</font>;
00514 <font class="keywordflow">case</font> ASN_OCTET_STR:
00515 printf(<font class="stringliteral">" %c %s %c\n"</font>,
00516 ( idxptr2-><a class="code" href="structsnmp__index.html#m1">session</a> ? <font class="charliteral">' '</font> : <font class="charliteral">'('</font> ),
00517 idxptr2-><a class="code" href="structsnmp__index.html#m0">varbind</a>->val.string,
00518 ( idxptr2-><a class="code" href="structsnmp__index.html#m1">session</a> ? <font class="charliteral">' '</font> : <font class="charliteral">')'</font> ));
00519 <font class="keywordflow">break</font>;
00520 <font class="keywordflow">case</font> ASN_OBJECT_ID:
00521 sprint_objid(end_oid, idxptr2-><a class="code" href="structsnmp__index.html#m0">varbind</a>->val.objid,
00522 idxptr2-><a class="code" href="structsnmp__index.html#m0">varbind</a>->val_len/<font class="keyword">sizeof</font>(oid));
00523 printf(<font class="stringliteral">" %c %s %c\n"</font>,
00524 ( idxptr2-><a class="code" href="structsnmp__index.html#m1">session</a> ? <font class="charliteral">' '</font> : <font class="charliteral">'('</font> ),
00525 end_oid,
00526 ( idxptr2-><a class="code" href="structsnmp__index.html#m1">session</a> ? <font class="charliteral">' '</font> : <font class="charliteral">')'</font> ));
00527 <font class="keywordflow">break</font>;
00528 <font class="keywordflow">default</font>:
00529 printf(<font class="stringliteral">"unsupported type (%d)\n"</font>,
00530 idxptr2-><a class="code" href="structsnmp__index.html#m0">varbind</a>->type);
00531 }
00532 }
00533 }
00534 }
</pre></div> </td>
</tr>
</table>
<a name="a48" doxytag="agent_registry.c::dump_registry"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> void dump_registry </td>
<td class="md">( </td>
<td class="md" nowrap>void </td>
<td class="mdname1"> </td>
<td class="md">) </td>
<td class="md"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l01031">1031</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>01032 {
01033 <font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *myptr, *myptr2;
01034 <font class="keywordtype">char</font> start_oid[SPRINT_MAX_LEN];
01035 <font class="keywordtype">char</font> end_oid[SPRINT_MAX_LEN];
01036
01037 <a class="code" href="structsubtree__context__cache__s.html">subtree_context_cache</a> *ptr;
01038 <font class="keywordflow">for</font>(ptr = <a class="code" href="agent__registry_8c.html#a1">context_subtrees</a>; ptr; ptr = ptr-><a class="code" href="structsubtree__context__cache__s.html#m2">next</a>) {
01039 printf(<font class="stringliteral">"Subtrees for Context: %s\n"</font>, ptr-><a class="code" href="structsubtree__context__cache__s.html#m0">context_name</a>);
01040 <font class="keywordflow">for</font>( myptr = ptr-><a class="code" href="structsubtree__context__cache__s.html#m1">first_subtree</a> ; myptr != NULL; myptr = myptr-><a class="code" href="structsubtree.html#m14">next</a>) {
01041 sprint_objid(start_oid, myptr-><a class="code" href="structsubtree.html#m2">start</a>, myptr-><a class="code" href="structsubtree.html#m3">start_len</a>);
01042 sprint_objid(end_oid, myptr-><a class="code" href="structsubtree.html#m4">end</a>, myptr-><a class="code" href="structsubtree.html#m5">end_len</a>);
01043 printf(<font class="stringliteral">"%s%c %s - %s %c\n"</font>,
01044 (myptr-><a class="code" href="structsubtree.html#m11">flags</a> & <a class="code" href="var__struct_8h.html#a1">FULLY_QUALIFIED_INSTANCE</a>)?<font class="stringliteral">"[FQI] "</font>:<font class="stringliteral">""</font>,
01045 ( myptr-><a class="code" href="structsubtree.html#m6">variables</a> ? <font class="charliteral">' '</font> : <font class="charliteral">'('</font> ),
01046 start_oid, end_oid,
01047 ( myptr-><a class="code" href="structsubtree.html#m6">variables</a> ? <font class="charliteral">' '</font> : <font class="charliteral">')'</font> ));
01048 <font class="keywordflow">for</font>( myptr2 = myptr ; myptr2 != NULL; myptr2 = myptr2-><a class="code" href="structsubtree.html#m16">children</a>) {
01049 <font class="keywordflow">if</font> ( myptr2-><a class="code" href="structsubtree.html#m9">label</a> && myptr2-><a class="code" href="structsubtree.html#m9">label</a>[0] )
01050 printf(<font class="stringliteral">"\t%s\n"</font>, myptr2-><a class="code" href="structsubtree.html#m9">label</a>);
01051 }
01052 }
01053 }
01054
01055 <a class="code" href="agent__index_8c.html#a10">dump_idx_registry</a>();
01056 }
</pre></div> </td>
</tr>
</table>
<a name="a18" doxytag="agent_registry.c::find_first_subtree"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> struct <a class="el" href="structsubtree.html">subtree</a>* find_first_subtree </td>
<td class="md">( </td>
<td class="md" nowrap>const char * </td>
<td class="mdname1"> <em>context_name</em> </td>
<td class="md">) </td>
<td class="md"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00074">74</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00074 {
00075 <a class="code" href="structsubtree__context__cache__s.html">subtree_context_cache</a> *ptr;
00076 <font class="keywordflow">if</font> (!context_name)
00077 context_name = <font class="stringliteral">""</font>;
00078 DEBUGMSGTL((<font class="stringliteral">"find_first_subtree"</font>,<font class="stringliteral">"looking for subtree for context: \"%s\"\n"</font>, context_name));
00079 <font class="keywordflow">for</font>(ptr = <a class="code" href="agent__registry_8c.html#a1">context_subtrees</a>; ptr; ptr = ptr-><a class="code" href="structsubtree__context__cache__s.html#m2">next</a>) {
00080 <font class="keywordflow">if</font> (strcmp(ptr-><a class="code" href="structsubtree__context__cache__s.html#m0">context_name</a>, context_name) == 0)<font class="keyword"> </font>{
00081 DEBUGMSGTL((<font class="stringliteral">"find_first_subtree"</font>,<font class="stringliteral">"found one for: \"%s\"\n"</font>, context_name));
00082 <font class="keywordflow">return</font> ptr-><a class="code" href="structsubtree__context__cache__s.html#m1">first_subtree</a>;
00083 }
00084 }
00085 DEBUGMSGTL((<font class="stringliteral">"find_first_subtree"</font>,<font class="stringliteral">"Didn't find a subtree for: \"%s\"\n"</font>, context_name));
00086 <font class="keywordflow">return</font> NULL;
00087 }
</pre></div> </td>
</tr>
</table>
<a name="a44" doxytag="agent_registry.c::find_subtree"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> struct <a class="el" href="structsubtree.html">subtree</a>* find_subtree </td>
<td class="md">( </td>
<td class="md" nowrap>oid * </td>
<td class="mdname"> <em>name</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>size_t </td>
<td class="mdname"> <em>len</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>struct <a class="el" href="structsubtree.html">subtree</a> * </td>
<td class="mdname"> <em>subtree</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>const char * </td>
<td class="mdname"> <em>context_name</em></td>
</tr>
<tr>
<td></td>
<td class="md">) </td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00967">967</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00971 {
00972 <font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *myptr;
00973
00974 myptr = <a class="code" href="agent__registry_8h.html#a35">find_subtree_previous</a>(name, len, <a class="code" href="structsubtree.html">subtree</a>, context_name);
00975 <font class="keywordflow">if</font> (myptr && snmp_oid_compare(name, len, myptr-><a class="code" href="structsubtree.html#m4">end</a>, myptr-><a class="code" href="structsubtree.html#m5">end_len</a>) < 0)
00976 <font class="keywordflow">return</font> myptr;
00977
00978 <font class="keywordflow">return</font> NULL;
00979 }
</pre></div> </td>
</tr>
</table>
<a name="a43" doxytag="agent_registry.c::find_subtree_next"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> struct <a class="el" href="structsubtree.html">subtree</a>* find_subtree_next </td>
<td class="md">( </td>
<td class="md" nowrap>oid * </td>
<td class="mdname"> <em>name</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>size_t </td>
<td class="mdname"> <em>len</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>struct <a class="el" href="structsubtree.html">subtree</a> * </td>
<td class="mdname"> <em>subtree</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>const char * </td>
<td class="mdname"> <em>context_name</em></td>
</tr>
<tr>
<td></td>
<td class="md">) </td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00947">947</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00951 {
00952 <font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *myptr = NULL;
00953
00954 myptr = <a class="code" href="agent__registry_8h.html#a35">find_subtree_previous</a>(name, len, <a class="code" href="structsubtree.html">subtree</a>, context_name);
00955 <font class="keywordflow">if</font> ( myptr != NULL ) {
00956 myptr = myptr-><a class="code" href="structsubtree.html#m14">next</a>;
00957 <font class="keywordflow">while</font> ( myptr && (myptr-><a class="code" href="structsubtree.html#m6">variables</a> == NULL || myptr-><a class="code" href="structsubtree.html#m7">variables_len</a> == 0) )
00958 myptr = myptr-><a class="code" href="structsubtree.html#m14">next</a>;
00959 <font class="keywordflow">return</font> myptr;
00960 }
00961 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (<a class="code" href="structsubtree.html">subtree</a> && snmp_oid_compare(name, len, subtree-><a class="code" href="structsubtree.html#m2">start</a>, subtree-><a class="code" href="structsubtree.html#m3">start_len</a>) < 0)
00962 <font class="keywordflow">return</font> <a class="code" href="structsubtree.html">subtree</a>;
00963 <font class="keywordflow">else</font>
00964 <font class="keywordflow">return</font> NULL;
00965 }
</pre></div> </td>
</tr>
</table>
<a name="a42" doxytag="agent_registry.c::find_subtree_previous"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> struct <a class="el" href="structsubtree.html">subtree</a>* find_subtree_previous </td>
<td class="md">( </td>
<td class="md" nowrap>oid * </td>
<td class="mdname"> <em>name</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>size_t </td>
<td class="mdname"> <em>len</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>struct <a class="el" href="structsubtree.html">subtree</a> * </td>
<td class="mdname"> <em>subtree</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>const char * </td>
<td class="mdname"> <em>context_name</em></td>
</tr>
<tr>
<td></td>
<td class="md">) </td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00927">927</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00931 {
00932 <font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *myptr, *previous = NULL;
00933
00934 <font class="keywordflow">if</font> ( subtree )
00935 myptr = <a class="code" href="structsubtree.html">subtree</a>;
00936 <font class="keywordflow">else</font>
00937 myptr = <a class="code" href="agent__registry_8h.html#a60">find_first_subtree</a>(context_name); <font class="comment">/* look through everything */</font>
00938
00939 <font class="keywordflow">for</font>( ; myptr != NULL; previous = myptr, myptr = myptr-><a class="code" href="structsubtree.html#m14">next</a>) {
00940 <font class="keywordflow">if</font> (snmp_oid_compare(name, len, myptr-><a class="code" href="structsubtree.html#m2">start</a>, myptr-><a class="code" href="structsubtree.html#m3">start_len</a>) < 0)<font class="keyword"> </font>{
00941 <font class="keywordflow">return</font> previous;
00942 }
00943 }
00944 <font class="keywordflow">return</font> previous;
00945 }
</pre></div> </td>
</tr>
</table>
<a name="a38" doxytag="agent_registry.c::free_subtree"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> struct <a class="el" href="structsubtree.html">subtree</a>* free_subtree </td>
<td class="md">( </td>
<td class="md" nowrap>struct <a class="el" href="structsubtree.html">subtree</a> * </td>
<td class="mdname1"> <em>st</em> </td>
<td class="md">) </td>
<td class="md"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00806">806</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00807 {
00808 <font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *ret = NULL;
00809
00810 <font class="keywordflow">if</font> (st-><a class="code" href="structsubtree.html#m6">variables</a> != NULL &&
00811 snmp_oid_compare(st-><a class="code" href="structsubtree.html#m0">name</a>, st-><a class="code" href="structsubtree.html#m1">namelen</a>, st-><a class="code" href="structsubtree.html#m2">start</a>, st-><a class="code" href="structsubtree.html#m3">start_len</a>) == 0)<font class="keyword"> </font>{
00812 free(st-><a class="code" href="structsubtree.html#m6">variables</a>);
00813 st-><a class="code" href="structsubtree.html#m6">variables</a> = NULL;
00814 }
00815 <font class="keywordflow">if</font> (st-><a class="code" href="structsubtree.html#m14">next</a> != NULL) {
00816 ret = st-><a class="code" href="structsubtree.html#m14">next</a>;
00817 }
00818 free(st);
00819 <font class="keywordflow">return</font> ret;
00820 }
</pre></div> </td>
</tr>
</table>
<a name="a45" doxytag="agent_registry.c::get_session_for_oid"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> struct snmp_session* get_session_for_oid </td>
<td class="md">( </td>
<td class="md" nowrap>oid * </td>
<td class="mdname"> <em>name</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>size_t </td>
<td class="mdname"> <em>len</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>const char * </td>
<td class="mdname"> <em>context_name</em></td>
</tr>
<tr>
<td></td>
<td class="md">) </td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00981">981</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00983 {
00984 <font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *myptr;
00985
00986 myptr = <a class="code" href="agent__registry_8h.html#a35">find_subtree_previous</a>(name, len, <a class="code" href="agent__registry_8h.html#a60">find_first_subtree</a>(context_name),
00987 context_name);
00988 <font class="keywordflow">while</font> ( myptr && myptr-><a class="code" href="structsubtree.html#m6">variables</a> == NULL )
00989 myptr = myptr-><a class="code" href="structsubtree.html#m14">next</a>;
00990
00991 <font class="keywordflow">if</font> ( myptr == NULL )
00992 <font class="keywordflow">return</font> NULL;
00993 <font class="keywordflow">else</font>
00994 <font class="keywordflow">return</font> myptr-><a class="code" href="structsubtree.html#m10">session</a>;
00995 }
</pre></div> </td>
</tr>
</table>
<a name="a17" doxytag="agent_registry.c::get_top_context_cache"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> <a class="el" href="agent__registry_8h.html#a31">subtree_context_cache</a>* get_top_context_cache </td>
<td class="md">( </td>
<td class="md" nowrap>void </td>
<td class="mdname1"> </td>
<td class="md">) </td>
<td class="md"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00069">69</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00069 {
00070 <font class="keywordflow">return</font> <a class="code" href="agent__registry_8c.html#a1">context_subtrees</a>;
00071 }
</pre></div> </td>
</tr>
</table>
<a name="a39" doxytag="agent_registry.c::in_a_view"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> int in_a_view </td>
<td class="md">( </td>
<td class="md" nowrap>oid * </td>
<td class="mdname"> <em>name</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>size_t * </td>
<td class="mdname"> <em>namelen</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>struct snmp_pdu * </td>
<td class="mdname"> <em>pdu</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>int </td>
<td class="mdname"> <em>type</em></td>
</tr>
<tr>
<td></td>
<td class="md">) </td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00831">831</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00835 {
00836
00837 <font class="keyword">struct </font><a class="code" href="structview__parameters.html">view_parameters</a> view_parms;
00838 view_parms.<a class="code" href="structview__parameters.html#m0">pdu</a> = pdu;
00839 view_parms.<a class="code" href="structview__parameters.html#m1">name</a> = name;
00840 <font class="keywordflow">if</font> (namelen)
00841 view_parms.<a class="code" href="structview__parameters.html#m2">namelen</a> = *namelen;
00842 <font class="keywordflow">else</font>
00843 view_parms.<a class="code" href="structview__parameters.html#m2">namelen</a> = 0;
00844 view_parms.<a class="code" href="structview__parameters.html#m3">errorcode</a> = 0;
00845
00846 <font class="keywordflow">if</font> (pdu->flags & UCD_MSG_FLAG_ALWAYS_IN_VIEW)
00847 <font class="keywordflow">return</font> VACM_SUCCESS; <font class="comment">/* Enable bypassing of view-based access control */</font>
00848
00849 <font class="comment">/* check for v1 and counter64s, since snmpv1 doesn't support it */</font>
00850 <font class="keywordflow">if</font> (pdu->version == SNMP_VERSION_1 && type == ASN_COUNTER64)
00851 <font class="keywordflow">return</font> VACM_NOTINVIEW;
00852 <font class="keywordflow">switch</font> (pdu->version) {
00853 <font class="keywordflow">case</font> SNMP_VERSION_1:
00854 <font class="keywordflow">case</font> SNMP_VERSION_2c:
00855 <font class="keywordflow">case</font> SNMP_VERSION_3:
00856 snmp_call_callbacks(SNMP_CALLBACK_APPLICATION, <a class="code" href="agent__callbacks_8h.html#a0">SNMPD_CALLBACK_ACM_CHECK</a>,
00857 &view_parms);
00858 <font class="keywordflow">return</font> view_parms.<a class="code" href="structview__parameters.html#m3">errorcode</a>;
00859 }
00860 <font class="keywordflow">return</font> VACM_NOSECNAME;
00861 }
</pre></div> </td>
</tr>
</table>
<a name="a23" doxytag="agent_registry.c::load_subtree"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> int load_subtree </td>
<td class="md">( </td>
<td class="md" nowrap>struct <a class="el" href="structsubtree.html">subtree</a> * </td>
<td class="mdname"> <em>new_sub</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>const char * </td>
<td class="mdname"> <em>context_name</em></td>
</tr>
<tr>
<td></td>
<td class="md">) </td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00203">203</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.
<p>
Referenced by <a class="el" href="agent__registry_8c-source.html#l00355">register_mib_context2</a>(), and <a class="el" href="agent__registry_8c-source.html#l00578">register_mib_table_row</a>().
<p>
<div class="fragment"><pre>00204 {
00205 <font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *tree1, *tree2, *new2;
00206 <font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *prev, *next;
00207 <font class="keywordtype">int</font> res;
00208
00209 <font class="keywordflow">if</font> ( new_sub == NULL )
00210 <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a0">MIB_REGISTERED_OK</a>; <font class="comment">/* Degenerate case */</font>
00211
00212 <font class="comment">/*</font>
00213 * Find the subtree that contains the start of
00214 * the new subtree (if any)...
00215 */
00216 tree1 = <a class="code" href="agent__registry_8h.html#a33">find_subtree</a>( new_sub-><a class="code" href="structsubtree.html#m2">start</a>, new_sub-><a class="code" href="structsubtree.html#m3">start_len</a>, NULL,
00217 context_name );
00218 <font class="comment">/*</font>
00219 * ...and the subtree that follows the new one
00220 * (NULL implies this is the final region covered)
00221 */
00222 <font class="keywordflow">if</font> ( tree1 == NULL )
00223 tree2 = <a class="code" href="agent__registry_8h.html#a34">find_subtree_next</a>( new_sub-><a class="code" href="structsubtree.html#m2">start</a>, new_sub-><a class="code" href="structsubtree.html#m3">start_len</a>, NULL,
00224 context_name);
00225 <font class="keywordflow">else</font>
00226 tree2 = tree1-><a class="code" href="structsubtree.html#m14">next</a>;
00227
00228
00229 <font class="comment">/*</font>
00230 * Handle new subtrees that start in virgin territory.
00231 */
00232 <font class="keywordflow">if</font> ( tree1 == NULL ) {
00233 new2 = NULL;
00234 <font class="comment">/* Is there any overlap with later subtrees ? */</font>
00235 <font class="keywordflow">if</font> ( tree2 && snmp_oid_compare( new_sub-><a class="code" href="structsubtree.html#m4">end</a>, new_sub-><a class="code" href="structsubtree.html#m5">end_len</a>,
00236 tree2-><a class="code" href="structsubtree.html#m2">start</a>, tree2-><a class="code" href="structsubtree.html#m3">start_len</a> ) > 0 )
00237 new2 = <a class="code" href="agent__registry_8c.html#a22">split_subtree</a>( new_sub, tree2-><a class="code" href="structsubtree.html#m2">start</a>, tree2-><a class="code" href="structsubtree.html#m3">start_len</a> );
00238 <font class="comment">/*</font>
00239 * Link the new subtree (less any overlapping region)
00240 * with the list of existing registrations
00241 */
00242 <font class="keywordflow">if</font> ( tree2 ) {
00243 new_sub-><a class="code" href="structsubtree.html#m15">prev</a> = tree2-><a class="code" href="structsubtree.html#m15">prev</a>;
00244 tree2-><a class="code" href="structsubtree.html#m15">prev</a> = new_sub;
00245 }
00246 <font class="keywordflow">else</font>
00247 new_sub-><a class="code" href="structsubtree.html#m15">prev</a> = <a class="code" href="agent__registry_8h.html#a35">find_subtree_previous</a>( new_sub-><a class="code" href="structsubtree.html#m2">start</a>, new_sub-><a class="code" href="structsubtree.html#m3">start_len</a>, NULL, context_name );
00248
00249 <font class="keywordflow">if</font> ( new_sub-><a class="code" href="structsubtree.html#m15">prev</a> )
00250 new_sub-><a class="code" href="structsubtree.html#m15">prev</a>-><a class="code" href="structsubtree.html#m14">next</a> = new_sub;
00251 <font class="keywordflow">else</font>
00252 <a class="code" href="agent__registry_8c.html#a20">replace_first_subtree</a>(new_sub, context_name);
00253
00254 new_sub-><a class="code" href="structsubtree.html#m14">next</a> = tree2;
00255
00256 <font class="comment">/*</font>
00257 * If there was any overlap,
00258 * recurse to merge in the overlapping region
00259 * (including anything that may follow the overlap)
00260 */
00261 <font class="keywordflow">if</font> ( new2 )
00262 <font class="keywordflow">return</font> <a class="code" href="agent__registry_8c.html#a23">load_subtree</a>( new2, context_name );
00263 }
00264
00265 <font class="keywordflow">else</font> {
00266 <font class="comment">/*</font>
00267 * If the new subtree starts *within* an existing registration
00268 * (rather than at the same point as it), then split the
00269 * existing subtree at this point.
00270 */
00271 <font class="keywordflow">if</font> ( snmp_oid_compare( new_sub-><a class="code" href="structsubtree.html#m2">start</a>, new_sub-><a class="code" href="structsubtree.html#m3">start_len</a>,
00272 tree1-><a class="code" href="structsubtree.html#m2">start</a>, tree1-><a class="code" href="structsubtree.html#m3">start_len</a>) != 0 )
00273 tree1 = <a class="code" href="agent__registry_8c.html#a22">split_subtree</a>( tree1, new_sub-><a class="code" href="structsubtree.html#m2">start</a>, new_sub-><a class="code" href="structsubtree.html#m3">start_len</a>);
00274 <font class="keywordflow">if</font> ( tree1 == NULL )
00275 <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a2">MIB_REGISTRATION_FAILED</a>;
00276
00277 <font class="comment">/* Now consider the end of this existing subtree:</font>
00278 * If it matches the new subtree precisely,
00279 * simply merge the new one into the list of children
00280 * If it includes the whole of the new subtree,
00281 * split it at the appropriate point, and merge again
00282 *
00283 * If the new subtree extends beyond this existing region,
00284 * split it, and recurse to merge the two parts.
00285 */
00286
00287 <font class="keywordflow">switch</font> ( snmp_oid_compare( new_sub-><a class="code" href="structsubtree.html#m4">end</a>, new_sub-><a class="code" href="structsubtree.html#m5">end_len</a>,
00288 tree1-><a class="code" href="structsubtree.html#m4">end</a>, tree1-><a class="code" href="structsubtree.html#m5">end_len</a>))<font class="keyword"> </font>{
00289
00290 <font class="keywordflow">case</font> -1: <font class="comment">/* Existing subtree contains new one */</font>
00291 (void) <a class="code" href="agent__registry_8c.html#a22">split_subtree</a>( tree1,
00292 new_sub-><a class="code" href="structsubtree.html#m4">end</a>, new_sub-><a class="code" href="structsubtree.html#m5">end_len</a>);
00293 <font class="comment">/* Fall Through */</font>
00294
00295 <font class="keywordflow">case</font> 0: <font class="comment">/* The two trees match precisely */</font>
00296 <font class="comment">/*</font>
00297 * Note: This is the only point where the original
00298 * registration OID ("name") is used
00299 */
00300 prev = NULL;
00301 next = tree1;
00302 <font class="keywordflow">while</font> ( next && next-><a class="code" href="structsubtree.html#m1">namelen</a> > new_sub-><a class="code" href="structsubtree.html#m1">namelen</a> ) {
00303 prev = next;
00304 next = next-><a class="code" href="structsubtree.html#m16">children</a>;
00305 }
00306 <font class="keywordflow">while</font> ( next && next-><a class="code" href="structsubtree.html#m1">namelen</a> == new_sub-><a class="code" href="structsubtree.html#m1">namelen</a> &&
00307 next-><a class="code" href="structsubtree.html#m12">priority</a> < new_sub-><a class="code" href="structsubtree.html#m12">priority</a> ) {
00308 prev = next;
00309 next = next-><a class="code" href="structsubtree.html#m16">children</a>;
00310 }
00311 <font class="keywordflow">if</font> ( next && next-><a class="code" href="structsubtree.html#m1">namelen</a> == new_sub-><a class="code" href="structsubtree.html#m1">namelen</a> &&
00312 next-><a class="code" href="structsubtree.html#m12">priority</a> == new_sub-><a class="code" href="structsubtree.html#m12">priority</a> )
00313 <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a1">MIB_DUPLICATE_REGISTRATION</a>;
00314
00315 <font class="keywordflow">if</font> ( prev ) {
00316 new_sub-><a class="code" href="structsubtree.html#m16">children</a> = next;
00317 prev-><a class="code" href="structsubtree.html#m16">children</a> = new_sub;
00318 new_sub-><a class="code" href="structsubtree.html#m15">prev</a> = prev-><a class="code" href="structsubtree.html#m15">prev</a>;
00319 new_sub-><a class="code" href="structsubtree.html#m14">next</a> = prev-><a class="code" href="structsubtree.html#m14">next</a>;
00320 }
00321 <font class="keywordflow">else</font> {
00322 new_sub-><a class="code" href="structsubtree.html#m16">children</a> = next;
00323 new_sub-><a class="code" href="structsubtree.html#m15">prev</a> = next-><a class="code" href="structsubtree.html#m15">prev</a>;
00324 new_sub-><a class="code" href="structsubtree.html#m14">next</a> = next-><a class="code" href="structsubtree.html#m14">next</a>;
00325
00326 <font class="keywordflow">for</font> ( next = new_sub-><a class="code" href="structsubtree.html#m14">next</a> ;
00327 next != NULL ;
00328 next = next-><a class="code" href="structsubtree.html#m16">children</a> )
00329 next-><a class="code" href="structsubtree.html#m15">prev</a> = new_sub;
00330
00331 <font class="keywordflow">for</font> ( prev = new_sub-><a class="code" href="structsubtree.html#m15">prev</a> ;
00332 prev != NULL ;
00333 prev = prev-><a class="code" href="structsubtree.html#m16">children</a> )
00334 prev-><a class="code" href="structsubtree.html#m14">next</a> = new_sub;
00335 }
00336 <font class="keywordflow">break</font>;
00337
00338 <font class="keywordflow">case</font> 1: <font class="comment">/* New subtree contains the existing one */</font>
00339 new2 = <a class="code" href="agent__registry_8c.html#a22">split_subtree</a>( new_sub,
00340 tree1-><a class="code" href="structsubtree.html#m4">end</a>, tree1-><a class="code" href="structsubtree.html#m5">end_len</a>);
00341 res = <a class="code" href="agent__registry_8c.html#a23">load_subtree</a>( new_sub, context_name );
00342 <font class="keywordflow">if</font> ( res != <a class="code" href="agent__registry_8h.html#a0">MIB_REGISTERED_OK</a> ) {
00343 <a class="code" href="agent__registry_8h.html#a47">free_subtree</a>(new2);
00344 <font class="keywordflow">return</font> res;
00345 }
00346 <font class="keywordflow">return</font> <a class="code" href="agent__registry_8c.html#a23">load_subtree</a>( new2, context_name );
00347
00348 }
00349
00350 }
00351 <font class="keywordflow">return</font> 0;
00352 }
</pre></div> </td>
</tr>
</table>
<a name="a51" doxytag="agent_registry.c::register_exceptfd"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> int register_exceptfd </td>
<td class="md">( </td>
<td class="md" nowrap>int </td>
<td class="mdname"> <em>fd</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>void(* </td>
<td class="mdname"> <em>func</em>)(int, void *), </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>void * </td>
<td class="mdname"> <em>data</em></td>
</tr>
<tr>
<td></td>
<td class="md">) </td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l01097">1097</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>01097 {
01098 <font class="keywordflow">if</font> (external_exceptfdlen < <a class="code" href="agent__registry_8h.html#a8">NUM_EXTERNAL_FDS</a>) {
01099 external_exceptfd[external_exceptfdlen] = fd;
01100 external_exceptfdfunc[external_exceptfdlen] = func;
01101 external_exceptfd_data[external_exceptfdlen] = data;
01102 external_exceptfdlen++;
01103 DEBUGMSGTL((<font class="stringliteral">"register_exceptfd"</font>, <font class="stringliteral">"registered fd %d\n"</font>, fd));
01104 <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a9">FD_REGISTERED_OK</a>;
01105 } <font class="keywordflow">else</font> {
01106 snmp_log(LOG_CRIT, <font class="stringliteral">"register_exceptfd: too many file descriptors\n"</font>);
01107 <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a10">FD_REGISTRATION_FAILED</a>;
01108 }
01109 }
</pre></div> </td>
</tr>
</table>
<a name="a30" doxytag="agent_registry.c::register_mib"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> int register_mib </td>
<td class="md">( </td>
<td class="md" nowrap>const char * </td>
<td class="mdname"> <em>moduleName</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>struct <a class="el" href="structvariable.html">variable</a> * </td>
<td class="mdname"> <em>var</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>size_t </td>
<td class="mdname"> <em>varsize</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>size_t </td>
<td class="mdname"> <em>numvars</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>oid * </td>
<td class="mdname"> <em>mibloc</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>size_t </td>
<td class="mdname"> <em>mibloclen</em></td>
</tr>
<tr>
<td></td>
<td class="md">) </td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00565">565</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00571 {
00572 <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a38">register_mib_priority</a>( moduleName, var, varsize, numvars,
00573 mibloc, mibloclen, <a class="code" href="agent__registry_8h.html#a6">DEFAULT_MIB_PRIORITY</a> );
00574 }
</pre></div> </td>
</tr>
</table>
<a name="a25" doxytag="agent_registry.c::register_mib_context"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> int register_mib_context </td>
<td class="md">( </td>
<td class="md" nowrap>const char * </td>
<td class="mdname"> <em>moduleName</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>struct <a class="el" href="structvariable.html">variable</a> * </td>
<td class="mdname"> <em>var</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>size_t </td>
<td class="mdname"> <em>varsize</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>size_t </td>
<td class="mdname"> <em>numvars</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>oid * </td>
<td class="mdname"> <em>mibloc</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>size_t </td>
<td class="mdname"> <em>mibloclen</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>int </td>
<td class="mdname"> <em>priority</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>int </td>
<td class="mdname"> <em>range_subid</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>oid </td>
<td class="mdname"> <em>range_ubound</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>struct snmp_session * </td>
<td class="mdname"> <em>ss</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>const char * </td>
<td class="mdname"> <em>context</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>int </td>
<td class="mdname"> <em>timeout</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>int </td>
<td class="mdname"> <em>flags</em></td>
</tr>
<tr>
<td></td>
<td class="md">) </td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00481">481</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00493 {
00494 <font class="keywordflow">return</font> <a class="code" href="old__api_8h.html#a4">register_old_api</a>(moduleName, var, varsize, numvars, mibloc,
00495 mibloclen, priority,
00496 range_subid, range_ubound,
00497 ss, context, timeout, flags);
00498 }
</pre></div> </td>
</tr>
</table>
<a name="a24" doxytag="agent_registry.c::register_mib_context2"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> int register_mib_context2 </td>
<td class="md">( </td>
<td class="md" nowrap>const char * </td>
<td class="mdname"> <em>moduleName</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>struct <a class="el" href="structvariable.html">variable</a> * </td>
<td class="mdname"> <em>var</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>size_t </td>
<td class="mdname"> <em>varsize</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>size_t </td>
<td class="mdname"> <em>numvars</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>oid * </td>
<td class="mdname"> <em>mibloc</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>size_t </td>
<td class="mdname"> <em>mibloclen</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>int </td>
<td class="mdname"> <em>priority</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>int </td>
<td class="mdname"> <em>range_subid</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>oid </td>
<td class="mdname"> <em>range_ubound</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>struct snmp_session * </td>
<td class="mdname"> <em>ss</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>const char * </td>
<td class="mdname"> <em>context</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>int </td>
<td class="mdname"> <em>timeout</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap>int </td>
<td class="mdname"> <em>flags</em>, </td>
</tr>
<tr>
<td></td>
<td></td>
<td class="md" nowrap><a class="el" href="helpers_2agent__handler_8h.html#a9">handler_registration</a> * </td>
<td class="mdname"> <em>reginfo</em></td>
</tr>
<tr>
<td></td>
<td class="md">) </td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
</td>
<td>
<p>
<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00355">355</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.
<p>
Referenced by <a class="el" href="agent__handler_8c-source.html#l00020">register_handler</a>().
<p>
<div class="fragment"><pre>00369 {
00370 <font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *subtree, *sub2;
00371 <font class="keywordtype">int</font> res, i;
00372 <font class="keyword">struct </font><a class="code" href="structregister__parameters.html">register_parameters</a> reg_parms;
00373
00374 <a class="code" href="structsubtree.html">subtree</a> = (<font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *) malloc(sizeof(struct subtree));
00375 <font class="keywordflow">if</font> (<a class="code" href="structsubtree.html">subtree</a> == NULL) {
00376 <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a2">MIB_REGISTRATION_FAILED</a>;
00377 }
00378 memset(<a class="code" href="structsubtree.html">subtree</a>, 0, <font class="keyword">sizeof</font>(<font class="keyword">struct</font> <a class="code" href="structsubtree.html">subtree</a>));
00379
00380 DEBUGMSGTL((<font class="stringliteral">"register_mib"</font>, <font class="stringliteral">"registering \"%s\" at "</font>, moduleName));
00381 DEBUGMSGOID((<font class="stringliteral">"register_mib"</font>, mibloc, mibloclen));
00382 DEBUGMSG((<font class="stringliteral">"register_mib"</font>,<font class="stringliteral">"\n"</font>));
00383
00384 <font class="comment">/*</font>
00385 * Create the new subtree node being registered
00386 */
00387 memcpy(subtree-><a class="code" href="structsubtree.html#m0">name</a>, mibloc, mibloclen*<font class="keyword">sizeof</font>(oid));
00388 <a class="code" href="structsubtree.html">subtree</a>-><a class="code" href="structsubtree.html#m1">namelen</a> = (u_char) mibloclen;
00389 memcpy(subtree-><a class="code" href="structsubtree.html#m2">start</a>, mibloc, mibloclen*<font class="keyword">sizeof</font>(oid));
00390 <a class="code" href="structsubtree.html">subtree</a>-><a class="code" href="structsubtree.html#m3">start_len</a> = (u_char) mibloclen;
00391 memcpy(subtree-><a class="code" href="structsubtree.html#m4">end</a>, mibloc, mibloclen*<font class="keyword">sizeof</font>(oid));
00392 <a class="code" href="structsubtree.html">subtree</a>-><a class="code" href="structsubtree.html#m4">end</a>[ mibloclen-1 ]++; <font class="comment">/* XXX - or use 'variables' info ? */</font>
00393 <a class="code" href="structsubtree.html">subtree</a>-><a class="code" href="structsubtree.html#m5">end_len</a> = (u_char) mibloclen;
00394 memcpy(subtree-><a class="code" href="structsubtree.html#m9">label</a>, moduleName, strlen(moduleName)+1);
00395 <font class="keywordflow">if</font> (var) {
00396 <a class="code" href="structsubtree.html">subtree</a>-><a class="code" href="structsubtree.html#m6">variables</a> = (<font class="keyword">struct </font><a class="code" href="structvariable.html">variable</a> *) malloc(varsize*numvars);
00397 <font class="keywordflow">if</font> (<a class="code" href="structsubtree.html">subtree</a>-><a class="code" href="structsubtree.html#m6">variables</a> == NULL) {
00398 free(<a class="code" href="structsubtree.html">subtree</a>);
00399 <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a2">MIB_REGISTRATION_FAILED</a>;
00400 }
00401 memcpy(subtree-><a class="code" href="structsubtree.html#m6">variables</a>, var, numvars*varsize);
00402 <a class="code" href="structsubtree.html">subtree</a>-><a class="code" href="structsubtree.html#m7">variables_len</a> = numvars;
00403 <a class="code" href="structsubtree.html">subtree</a>-><a class="code" href="structsubtree.html#m8">variables_width</a> = varsize;
00404 }
00405 <a class="code" href="structsubtree.html">subtree</a>-><a class="code" href="structsubtree.html#m12">priority</a> = priority;
00406 <a class="code" href="structsubtree.html">subtree</a>-><a class="code" href="structsubtree.html#m13">timeout</a> = timeout;
00407 <a class="code" href="structsubtree.html">subtree</a>-><a class="code" href="structsubtree.html#m17">range_subid</a> = range_subid;
00408 <a class="code" href="structsubtree.html">subtree</a>-><a class="code" href="structsubtree.html#m18">range_ubound</a> = range_ubound;
00409 <a class="code" href="structsubtree.html">subtree</a>-><a class="code" href="structsubtree.html#m10">session</a> = ss;
00410 <a class="code" href="structsubtree.html">subtree</a>-><a class="code" href="structsubtree.html#m19">reginfo</a> = reginfo;
00411 <a class="code" href="structsubtree.html">subtree</a>-><a class="code" href="structsubtree.html#m11">flags</a> = (u_char)flags; <font class="comment">/* used to identify instance oids */</font>
00412 <a class="code" href="structsubtree.html">subtree</a>-><a class="code" href="structsubtree.html#m20">cacheid</a> = -1;
00413 res = <a class="code" href="agent__registry_8c.html#a23">load_subtree</a>(<a class="code" href="structsubtree.html">subtree</a>, context);
00414
00415 <font class="comment">/*</font>
00416 * If registering a range,
00417 * use the first subtree as a template
00418 * for the rest of the range
00419 */
00420 <font class="keywordflow">if</font> (( res == <a class="code" href="agent__registry_8h.html#a0">MIB_REGISTERED_OK</a> ) && ( range_subid != 0 )) {
00421 <font class="keywordflow">for</font> ( i = mibloc[range_subid-1] +1 ; i <= (int)range_ubound ; i++ ) {
00422 sub2 = (<font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *) malloc(sizeof(struct subtree));
00423
00424 <font class="keywordflow">if</font> (sub2 == NULL) {
00425 <a class="code" href="agent__registry_8h.html#a45">unregister_mib_context</a>(mibloc, mibloclen, priority,
00426 range_subid, range_ubound, context);
00427 <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a2">MIB_REGISTRATION_FAILED</a>;
00428 }
00429
00430 memcpy(sub2, <a class="code" href="structsubtree.html">subtree</a>, <font class="keyword">sizeof</font>(<font class="keyword">struct</font> <a class="code" href="structsubtree.html">subtree</a>));
00431
00432 <font class="comment">/* Note: have to deep-copy sub2->variables, otherwise it will</font>
00433 be free()d more than once. This is kind of inefficient. */
00434
00435 <font class="keywordflow">if</font> (<a class="code" href="structsubtree.html">subtree</a>-><a class="code" href="structsubtree.html#m6">variables</a> != NULL) {
00436 sub2-><a class="code" href="structsubtree.html#m6">variables</a> = (<font class="keyword">struct </font><a class="code" href="structvariable.html">variable</a> *)malloc(varsize * numvars);
00437 <font class="keywordflow">if</font> (sub2-><a class="code" href="structsubtree.html#m6">variables</a> == NULL) {
00438 free(sub2);
00439 <a class="code" href="agent__registry_8h.html#a45">unregister_mib_context</a>(mibloc, mibloclen, priority,
00440 range_subid, range_ubound, context);
00441 <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a2">MIB_REGISTRATION_FAILED</a>;
00442 }
00443
00444 memcpy(sub2-><a class="code" href="structsubtree.html#m6">variables</a>, var, numvars * varsize);
00445 }
00446
00447 sub2-><a class="code" href="structsubtree.html#m0">name</a>[range_subid-1] = i;
00448 sub2-><a class="code" href="structsubtree.html#m2">start</a>[range_subid-1] = i;
00449 sub2-><a class="code" href="structsubtree.html#m4">end</a>[ range_subid-1] = i; <font class="comment">/* XXX - ???? */</font>
00450 res = <a class="code" href="agent__registry_8c.html#a23">load_subtree</a>(sub2, context);
00451 <font class="keywordflow">if</font> (res != <a class="code" href="agent__registry_8h.html#a0">MIB_REGISTERED_OK</a>) {
00452 <a