| Current File : //usr/share/doc/net-snmp/html/group__callback.html |
<!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"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>net-snmp: A generic callback mechanism</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">net-snmp
 <span id="projectnumber">5.4.1</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- Generated by Doxygen 1.7.6.1 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="pages.html"><span>Related Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li><a href="examples.html"><span>Examples</span></a></li>
</ul>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#define-members">Defines</a> |
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">A generic callback mechanism</div> </div>
<div class="ingroups"><a class="el" href="group__library.html">The Net-SNMP library</a></div></div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="define-members"></a>
Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4946eeae848cfa091e148d4832f9f98d"></a><!-- doxytag: member="callback::CALLBACK_NAME_LOGGING" ref="ga4946eeae848cfa091e148d4832f9f98d" args="" -->
#define </td><td class="memItemRight" valign="bottom"><b>CALLBACK_NAME_LOGGING</b>   1</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5ebd3af965110eb7399276c205345e93"></a><!-- doxytag: member="callback::LOCK_PER_CALLBACK_SUBID" ref="ga5ebd3af965110eb7399276c205345e93" args="" -->
#define </td><td class="memItemRight" valign="bottom"><b>LOCK_PER_CALLBACK_SUBID</b>   1</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad51c6110d14665aa5a2e524964783bce"></a><!-- doxytag: member="callback::CALLBACK_LOCK" ref="gad51c6110d14665aa5a2e524964783bce" args="(maj, min)" -->
#define </td><td class="memItemRight" valign="bottom"><b>CALLBACK_LOCK</b>(maj, min)   ++_locks[major][minor]</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafa4898a2cb86b9f65fbaed5ebaa7a84e"></a><!-- doxytag: member="callback::CALLBACK_UNLOCK" ref="gafa4898a2cb86b9f65fbaed5ebaa7a84e" args="(maj, min)" -->
#define </td><td class="memItemRight" valign="bottom"><b>CALLBACK_UNLOCK</b>(maj, min)   --_locks[major][minor]</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga267e42ec3aa3e33f9c273431324fe35a"></a><!-- doxytag: member="callback::CALLBACK_LOCK_COUNT" ref="ga267e42ec3aa3e33f9c273431324fe35a" args="(maj, min)" -->
#define </td><td class="memItemRight" valign="bottom"><b>CALLBACK_LOCK_COUNT</b>(maj, min)   _locks[major][minor]</td></tr>
<tr><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa633fa04869e3a1de60565038ab89271"></a><!-- doxytag: member="callback::_callback_lock" ref="gaa633fa04869e3a1de60565038ab89271" args="(int major, int minor, const char *warn, int assert)" -->
NETSNMP_STATIC_INLINE int </td><td class="memItemRight" valign="bottom"><b>_callback_lock</b> (int major, int minor, const char *warn, int assert)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga83b53fd911e4b226037a2459af0ad97a"></a><!-- doxytag: member="callback::_callback_unlock" ref="ga83b53fd911e4b226037a2459af0ad97a" args="(int major, int minor)" -->
NETSNMP_STATIC_INLINE void </td><td class="memItemRight" valign="bottom"><b>_callback_unlock</b> (int major, int minor)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga65e598dcfa9b5491c0df58d86ef74b8a"></a><!-- doxytag: member="callback::init_callbacks" ref="ga65e598dcfa9b5491c0df58d86ef74b8a" args="(void)" -->
void </td><td class="memItemRight" valign="bottom"><b>init_callbacks</b> (void)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback.html#gaa74bcb0ea6a8b7270f5e26746ba1fff1">snmp_register_callback</a> (int major, int minor, SNMPCallback *new_callback, void *arg)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">This function registers a generic callback function. <a href="#gaa74bcb0ea6a8b7270f5e26746ba1fff1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga901e5847ad03692b5eda38a815b4a174"></a><!-- doxytag: member="callback::netsnmp_register_callback" ref="ga901e5847ad03692b5eda38a815b4a174" args="(int major, int minor, SNMPCallback *new_callback, void *arg, int priority)" -->
int </td><td class="memItemRight" valign="bottom"><b>netsnmp_register_callback</b> (int major, int minor, SNMPCallback *new_callback, void *arg, int priority)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback.html#ga9812d01ed88b541cd6c7a64d004564d4">snmp_call_callbacks</a> (int major, int minor, void *caller_arg)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">This function calls the callback function for each registered callback of type major and minor. <a href="#ga9812d01ed88b541cd6c7a64d004564d4"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga959f44aa886d37235cf9bda02e1daa39"></a><!-- doxytag: member="callback::snmp_count_callbacks" ref="ga959f44aa886d37235cf9bda02e1daa39" args="(int major, int minor)" -->
int </td><td class="memItemRight" valign="bottom"><b>snmp_count_callbacks</b> (int major, int minor)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0c696c80848266cbe243c9e0c6da4b71"></a><!-- doxytag: member="callback::snmp_callback_available" ref="ga0c696c80848266cbe243c9e0c6da4b71" args="(int major, int minor)" -->
int </td><td class="memItemRight" valign="bottom"><b>snmp_callback_available</b> (int major, int minor)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback.html#ga5c66a4113fa371927b907e5dfc44cd9f">snmp_unregister_callback</a> (int major, int minor, SNMPCallback *target, void *arg, int matchargs)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">This function unregisters a specified callback function given a major and minor type. <a href="#ga5c66a4113fa371927b907e5dfc44cd9f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback.html#ga691a6855c9bc8212c8dc9ec596822c76">netsnmp_callback_clear_client_arg</a> (void *ptr, int i, int j)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">find and clear client args that match ptr <a href="#ga691a6855c9bc8212c8dc9ec596822c76"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae39466afe8ffc52c0a65044ced2bd062"></a><!-- doxytag: member="callback::clear_callback" ref="gae39466afe8ffc52c0a65044ced2bd062" args="(void)" -->
void </td><td class="memItemRight" valign="bottom"><b>clear_callback</b> (void)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3634d8793cd419166bb8045120716bd9"></a><!-- doxytag: member="callback::snmp_callback_list" ref="ga3634d8793cd419166bb8045120716bd9" args="(int major, int minor)" -->
struct <a class="el" href="structsnmp__gen__callback.html">snmp_gen_callback</a> * </td><td class="memItemRight" valign="bottom"><b>snmp_callback_list</b> (int major, int minor)</td></tr>
</table>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="ga691a6855c9bc8212c8dc9ec596822c76"></a><!-- doxytag: member="callback.c::netsnmp_callback_clear_client_arg" ref="ga691a6855c9bc8212c8dc9ec596822c76" args="(void *ptr, int i, int j)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="group__callback.html#ga691a6855c9bc8212c8dc9ec596822c76">netsnmp_callback_clear_client_arg</a> </td>
<td>(</td>
<td class="paramtype">void * </td>
<td class="paramname"><em>ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>i</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>j</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>find and clear client args that match ptr </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">ptr</td><td>pointer to search for </td></tr>
<tr><td class="paramname">i</td><td>callback id to start at </td></tr>
<tr><td class="paramname">j</td><td>callback subid to start at </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="callback_8c_source.html#l00462">462</a> of file <a class="el" href="callback_8c_source.html">callback.c</a>.</p>
</div>
</div>
<a class="anchor" id="ga9812d01ed88b541cd6c7a64d004564d4"></a><!-- doxytag: member="callback.c::snmp_call_callbacks" ref="ga9812d01ed88b541cd6c7a64d004564d4" args="(int major, int minor, void *caller_arg)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="group__callback.html#ga9812d01ed88b541cd6c7a64d004564d4">snmp_call_callbacks</a> </td>
<td>(</td>
<td class="paramtype">int </td>
<td class="paramname"><em>major</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>minor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void * </td>
<td class="paramname"><em>caller_arg</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>This function calls the callback function for each registered callback of type major and minor. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">major</td><td>is the SNMP callback major type used</td></tr>
<tr><td class="paramname">minor</td><td>is the SNMP callback minor type used</td></tr>
<tr><td class="paramname">caller_arg</td><td>is a void pointer which is sent in as the callback's serverarg parameter, if needed.</td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns SNMPERR_GENERR if major is >= MAX_CALLBACK_IDS or minor is >= MAX_CALLBACK_SUBIDS, otherwise SNMPERR_SUCCESS is returned.</dd></dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__callback.html#gaa74bcb0ea6a8b7270f5e26746ba1fff1" title="This function registers a generic callback function.">snmp_register_callback</a> </dd>
<dd>
<a class="el" href="group__callback.html#ga5c66a4113fa371927b907e5dfc44cd9f" title="This function unregisters a specified callback function given a major and minor type.">snmp_unregister_callback</a> </dd></dl>
<p>Definition at line <a class="el" href="callback_8c_source.html#l00286">286</a> of file <a class="el" href="callback_8c_source.html">callback.c</a>.</p>
</div>
</div>
<a class="anchor" id="gaa74bcb0ea6a8b7270f5e26746ba1fff1"></a><!-- doxytag: member="callback.c::snmp_register_callback" ref="gaa74bcb0ea6a8b7270f5e26746ba1fff1" args="(int major, int minor, SNMPCallback *new_callback, void *arg)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="group__callback.html#gaa74bcb0ea6a8b7270f5e26746ba1fff1">snmp_register_callback</a> </td>
<td>(</td>
<td class="paramtype">int </td>
<td class="paramname"><em>major</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>minor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">SNMPCallback * </td>
<td class="paramname"><em>new_callback</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void * </td>
<td class="paramname"><em>arg</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>This function registers a generic callback function. </p>
<p>The major and minor values are used to set the new_callback function into a global static multi-dimensional array of type struct <a class="el" href="structsnmp__gen__callback.html">snmp_gen_callback</a>. The function makes sure to append this callback function at the end of the link list, snmp_gen_callback->next.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">major</td><td>is the SNMP callback major type used<ul>
<li>SNMP_CALLBACK_LIBRARY</li>
</ul>
</td></tr>
</table>
</dd>
</dl>
<ul>
<li>SNMP_CALLBACK_APPLICATION</li>
</ul>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">minor</td><td>is the SNMP callback minor type used<ul>
<li>SNMP_CALLBACK_POST_READ_CONFIG</li>
<li>SNMP_CALLBACK_STORE_DATA</li>
<li>SNMP_CALLBACK_SHUTDOWN</li>
<li>SNMP_CALLBACK_POST_PREMIB_READ_CONFIG</li>
<li>SNMP_CALLBACK_LOGGING</li>
<li>SNMP_CALLBACK_SESSION_INIT</li>
</ul>
</td></tr>
<tr><td class="paramname">new_callback</td><td>is the callback function that is registered.</td></tr>
<tr><td class="paramname">arg</td><td>when not NULL is a void pointer used whenever new_callback function is exercised.</td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns SNMPERR_GENERR if major is >= MAX_CALLBACK_IDS or minor is >= MAX_CALLBACK_SUBIDS or a <a class="el" href="structsnmp__gen__callback.html">snmp_gen_callback</a> pointer could not be allocated, otherwise SNMPERR_SUCCESS is returned.<ul>
<li>#define MAX_CALLBACK_IDS 2</li>
<li>#define MAX_CALLBACK_SUBIDS 16</li>
</ul>
</dd></dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__callback.html#ga9812d01ed88b541cd6c7a64d004564d4" title="This function calls the callback function for each registered callback of type major and minor...">snmp_call_callbacks</a> </dd>
<dd>
<a class="el" href="group__callback.html#ga5c66a4113fa371927b907e5dfc44cd9f" title="This function unregisters a specified callback function given a major and minor type.">snmp_unregister_callback</a> </dd></dl>
<p>Definition at line <a class="el" href="callback_8c_source.html#l00218">218</a> of file <a class="el" href="callback_8c_source.html">callback.c</a>.</p>
</div>
</div>
<a class="anchor" id="ga5c66a4113fa371927b907e5dfc44cd9f"></a><!-- doxytag: member="callback.c::snmp_unregister_callback" ref="ga5c66a4113fa371927b907e5dfc44cd9f" args="(int major, int minor, SNMPCallback *target, void *arg, int matchargs)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="group__callback.html#ga5c66a4113fa371927b907e5dfc44cd9f">snmp_unregister_callback</a> </td>
<td>(</td>
<td class="paramtype">int </td>
<td class="paramname"><em>major</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>minor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">SNMPCallback * </td>
<td class="paramname"><em>target</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void * </td>
<td class="paramname"><em>arg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>matchargs</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>This function unregisters a specified callback function given a major and minor type. </p>
<p>Note: no bound checking on major and minor.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">major</td><td>is the SNMP callback major type used</td></tr>
<tr><td class="paramname">minor</td><td>is the SNMP callback minor type used</td></tr>
<tr><td class="paramname">target</td><td>is the callback function that will be unregistered.</td></tr>
<tr><td class="paramname">arg</td><td>is a void pointer used for comparison against the registered callback's sc_client_arg variable.</td></tr>
<tr><td class="paramname">matchargs</td><td>is an integer used to bypass the comparison of arg and the callback's sc_client_arg variable only when matchargs is set to 0.</td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns the number of callbacks that were unregistered.</dd></dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__callback.html#gaa74bcb0ea6a8b7270f5e26746ba1fff1" title="This function registers a generic callback function.">snmp_register_callback</a> </dd>
<dd>
<a class="el" href="group__callback.html#ga9812d01ed88b541cd6c7a64d004564d4" title="This function calls the callback function for each registered callback of type major and minor...">snmp_call_callbacks</a> </dd></dl>
<p>set cleanup flag? </p>
<p>Definition at line <a class="el" href="callback_8c_source.html#l00406">406</a> of file <a class="el" href="callback_8c_source.html">callback.c</a>.</p>
</div>
</div>
</div><!-- contents -->
<hr class="footer"/><address class="footer"><small>
Generated by  <a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.7.6.1
</small></address>
</body>
</html>