1 #ifndef AGENT_REGISTRY_H
2 #define AGENT_REGISTRY_H
4 /***********************************************************************/
6 * new version2 agent handler API structures
8 /***********************************************************************/
10 #include <net-snmp/agent/snmp_agent.h>
16 /***********************************************************************/
18 * requests api definitions
20 /***********************************************************************/
23 * the structure of parameters passed to registered ACM modules
25 struct view_parameters {
30 int errorcode; /* Do not change unless you're
31 specifying an error, as it starts
32 in a success state. */
36 struct register_parameters {
46 typedef struct subtree_context_cache_s {
48 struct netsnmp_subtree_s *first_subtree;
49 struct subtree_context_cache_s *next;
50 } subtree_context_cache;
54 void setup_tree (void);
56 netsnmp_subtree *netsnmp_subtree_find (oid *, size_t, netsnmp_subtree *,
57 const char *context_name);
59 netsnmp_subtree *netsnmp_subtree_find_next(oid *, size_t, netsnmp_subtree *,
60 const char *context_name);
62 netsnmp_subtree *netsnmp_subtree_find_prev(oid *, size_t,netsnmp_subtree *,
63 const char *context_name);
65 netsnmp_subtree *netsnmp_subtree_find_first(const char *context_name);
67 netsnmp_session *get_session_for_oid (oid *, size_t,
68 const char *context_name);
70 subtree_context_cache *get_top_context_cache(void);
72 void netsnmp_set_lookup_cache_size(int newsize);
73 int netsnmp_get_lookup_cache_size(void);
75 #define MIB_REGISTERED_OK 0
76 #define MIB_DUPLICATE_REGISTRATION -1
77 #define MIB_REGISTRATION_FAILED -2
78 #define MIB_UNREGISTERED_OK 0
79 #define MIB_NO_SUCH_REGISTRATION -1
80 #define MIB_UNREGISTRATION_FAILED -2
81 #define DEFAULT_MIB_PRIORITY 127
83 int register_mib (const char *, struct variable *,
84 size_t, size_t, oid *, size_t);
86 int register_mib_priority (const char *, struct variable *,
87 size_t, size_t, oid *, size_t,
90 int register_mib_range (const char *, struct variable *,
91 size_t, size_t, oid *, size_t,
92 int, int, oid, netsnmp_session *);
94 int register_mib_context (const char *, struct variable *,
95 size_t, size_t, oid *, size_t,
96 int, int, oid, netsnmp_session *,
97 const char *, int, int);
99 int netsnmp_register_mib_table_row (const char *, struct variable *,
100 size_t, size_t, oid *, size_t,
101 int, int, netsnmp_session *,
102 const char *, int, int);
104 int unregister_mib (oid *, size_t);
106 int unregister_mib_priority (oid *, size_t, int);
107 int unregister_mib_range (oid *, size_t, int, int, oid);
108 int unregister_mib_context (oid *, size_t, int, int, oid,
110 void unregister_mibs_by_session (netsnmp_session *);
111 int netsnmp_unregister_mib_table_row (oid *mibloc, size_t mibloclen,
112 int priority, int var_subid,
114 const char *context);
116 int compare_tree (const oid *, size_t,
117 const oid *, size_t);
118 int in_a_view (oid *, size_t *,
120 int check_access (netsnmp_pdu *pdu);
121 int netsnmp_acm_check_subtree (netsnmp_pdu *, oid *, size_t);
122 void register_mib_reattach (void);
123 void register_mib_detach (void);
126 * REGISTER_MIB(): This macro simply loads register_mib with less pain:
128 * descr: A short description of the mib group being loaded.
129 * var: The variable structure to load.
130 * vartype: The variable structure used to define it (variable[2, 4, ...])
131 * theoid: An *initialized* *exact length* oid pointer.
132 * (sizeof(theoid) *must* return the number of elements!)
135 #define REGISTER_MIB(descr, var, vartype, theoid) \
136 if (register_mib(descr, (struct variable *) var, sizeof(struct vartype), \
137 sizeof(var)/sizeof(struct vartype), \
138 theoid, sizeof(theoid)/sizeof(oid)) != MIB_REGISTERED_OK ) \
139 DEBUGMSGTL(("register_mib", "%s registration failed\n", descr));
143 #define NUM_EXTERNAL_FDS 32
144 #define FD_REGISTERED_OK 0
145 #define FD_REGISTRATION_FAILED -2
146 #define FD_UNREGISTERED_OK 0
147 #define FD_NO_SUCH_REGISTRATION -1
149 extern int external_readfd[NUM_EXTERNAL_FDS], external_readfdlen;
150 extern int external_writefd[NUM_EXTERNAL_FDS], external_writefdlen;
151 extern int external_exceptfd[NUM_EXTERNAL_FDS], external_exceptfdlen;
153 extern void (*external_readfdfunc[NUM_EXTERNAL_FDS]) (int, void *);
154 extern void (*external_writefdfunc[NUM_EXTERNAL_FDS]) (int, void *);
155 extern void (*external_exceptfdfunc[NUM_EXTERNAL_FDS]) (int, void *);
157 extern void *external_readfd_data[NUM_EXTERNAL_FDS];
158 extern void *external_writefd_data[NUM_EXTERNAL_FDS];
159 extern void *external_exceptfd_data[NUM_EXTERNAL_FDS];
161 int register_readfd(int, void (*func)(int, void *), void *);
162 int register_writefd(int, void (*func)(int, void *), void *);
163 int register_exceptfd(int, void (*func)(int, void *), void *);
164 int unregister_readfd(int);
165 int unregister_writefd(int);
166 int unregister_exceptfd(int);
170 #define NUM_EXTERNAL_SIGS 32
171 #define SIG_REGISTERED_OK 0
172 #define SIG_REGISTRATION_FAILED -2
173 #define SIG_UNREGISTERED_OK 0
175 extern int external_signal_scheduled[NUM_EXTERNAL_SIGS];
176 extern void (*external_signal_handler[NUM_EXTERNAL_SIGS])(int);
178 int register_signal(int, void (*func)(int));
179 int unregister_signal(int);
184 * internal API. Don't use this. Use netsnmp_register_handler instead
187 struct netsnmp_handler_registration_s;
189 int netsnmp_register_mib(const char *, struct variable *,
190 size_t, size_t, oid *, size_t,
191 int, int, oid, netsnmp_session *,
192 const char *, int, int,
193 struct netsnmp_handler_registration_s *,
200 #endif /* AGENT_REGISTRY_H */