blob: 2949c9df999bfb5e81243db62261b3029072aed7 [file] [log] [blame]
#ifndef AGENT_REGISTRY_H
#define AGENT_REGISTRY_H
/***********************************************************************/
/*
* new version2 agent handler API structures
*/
/***********************************************************************/
#include <net-snmp/agent/snmp_agent.h>
#include <net-snmp/library/fd_event_manager.h>
#ifdef __cplusplus
extern "C" {
#endif
/***********************************************************************/
/*
* requests api definitions
*/
/***********************************************************************/
/*
* the structure of parameters passed to registered ACM modules
*/
struct view_parameters {
netsnmp_pdu *pdu;
oid *name;
size_t namelen;
int test;
int errorcode; /* Do not change unless you're
specifying an error, as it starts
in a success state. */
int check_subtree;
};
struct register_parameters {
oid *name;
size_t namelen;
int priority;
int range_subid;
oid range_ubound;
int timeout;
u_char flags;
const char *contextName;
netsnmp_session *session;
netsnmp_handler_registration *reginfo;
};
typedef struct subtree_context_cache_s {
const char *context_name;
struct netsnmp_subtree_s *first_subtree;
struct subtree_context_cache_s *next;
} subtree_context_cache;
void setup_tree (void);
void shutdown_tree (void);
netsnmp_subtree *netsnmp_subtree_find (const oid *, size_t,
netsnmp_subtree *,
const char *context_name);
netsnmp_subtree *netsnmp_subtree_find_next(const oid *, size_t,
netsnmp_subtree *,
const char *context_name);
netsnmp_subtree *netsnmp_subtree_find_prev(const oid *, size_t,
netsnmp_subtree *,
const char *context_name);
netsnmp_subtree *netsnmp_subtree_find_first(const char *context_name);
netsnmp_session *get_session_for_oid (const oid *, size_t,
const char *context_name);
subtree_context_cache *get_top_context_cache(void);
void netsnmp_set_lookup_cache_size(int newsize);
int netsnmp_get_lookup_cache_size(void);
#define MIB_REGISTERED_OK 0
#define MIB_DUPLICATE_REGISTRATION -1
#define MIB_REGISTRATION_FAILED -2
#define MIB_UNREGISTERED_OK 0
#define MIB_NO_SUCH_REGISTRATION -1
#define MIB_UNREGISTRATION_FAILED -2
#define DEFAULT_MIB_PRIORITY 127
int register_mib (const char *,
const struct variable *,
size_t, size_t, const oid *,
size_t);
int register_mib_priority (const char *,
const struct variable *,
size_t, size_t, const oid *, size_t,
int);
int register_mib_range (const char *,
const struct variable *,
size_t, size_t, const oid *,
size_t, int, int, oid,
netsnmp_session *);
int register_mib_context (const char *,
const struct variable *,
size_t, size_t, const oid *, size_t,
int, int, oid, netsnmp_session *,
const char *, int, int);
int netsnmp_register_mib_table_row (const char *,
const struct variable *,
size_t, size_t, oid *,
size_t, int, int, netsnmp_session *,
const char *, int, int);
int unregister_mib (oid *, size_t);
int unregister_mib_priority (oid *, size_t, int);
int unregister_mib_range (oid *, size_t, int, int, oid);
int unregister_mib_context (oid *, size_t, int, int, oid,
const char *);
void clear_context (void);
void unregister_mibs_by_session (netsnmp_session *);
int netsnmp_unregister_mib_table_row (oid *mibloc, size_t mibloclen,
int priority, int var_subid,
oid range_ubound,
const char *context);
int compare_tree (const oid *, size_t,
const oid *, size_t);
int in_a_view (oid *, size_t *,
netsnmp_pdu *, int);
int check_access (netsnmp_pdu *pdu);
int netsnmp_acm_check_subtree (netsnmp_pdu *, oid *, size_t);
void register_mib_reattach (void);
void register_mib_detach (void);
/*
* REGISTER_MIB(): This macro simply loads register_mib with less pain:
*
* descr: A short description of the mib group being loaded.
* var: The variable structure to load.
* vartype: The variable structure used to define it (variable[2, 4, ...])
* theoid: An *initialized* *exact length* oid pointer.
* (sizeof(theoid) *must* return the number of elements!)
*/
#define REGISTER_MIB(descr, var, vartype, theoid) \
if (register_mib(descr, (const struct variable *) var, \
sizeof(struct vartype), \
sizeof(var)/sizeof(struct vartype), \
theoid, sizeof(theoid)/sizeof(oid)) != \
MIB_REGISTERED_OK) \
DEBUGMSGTL(("register_mib", "%s registration failed\n", descr));
#define NUM_EXTERNAL_SIGS 32
#define SIG_REGISTERED_OK 0
#define SIG_REGISTRATION_FAILED -2
#define SIG_UNREGISTERED_OK 0
extern int external_signal_scheduled[NUM_EXTERNAL_SIGS];
extern void (*external_signal_handler[NUM_EXTERNAL_SIGS])(int);
int register_signal(int, void (*func)(int));
int unregister_signal(int);
/*
* internal API. Don't use this. Use netsnmp_register_handler instead
*/
struct netsnmp_handler_registration_s;
int netsnmp_register_mib(const char *, struct variable *,
size_t, size_t, oid *, size_t,
int, int, oid, netsnmp_session *,
const char *, int, int,
struct netsnmp_handler_registration_s *,
int);
#ifdef __cplusplus
}
#endif
#endif /* AGENT_REGISTRY_H */