diff options
Diffstat (limited to 'include/net-snmp/agent/agent_registry.h')
-rw-r--r-- | include/net-snmp/agent/agent_registry.h | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/include/net-snmp/agent/agent_registry.h b/include/net-snmp/agent/agent_registry.h new file mode 100644 index 0000000..6a907bf --- /dev/null +++ b/include/net-snmp/agent/agent_registry.h @@ -0,0 +1,184 @@ +#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 *, struct variable *, + size_t, size_t, const oid *, + size_t); + +int register_mib_priority (const char *, struct variable *, + size_t, size_t, const oid *, size_t, + int); + +int register_mib_range (const char *, struct variable *, + size_t, size_t, const oid *, + size_t, int, int, oid, + netsnmp_session *); + +int register_mib_context (const char *, 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 *, 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, (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 */ |