Revert "Revert "and added files""
[bcm963xx.git] / userapps / opensource / net-snmp / include / net-snmp / agent / agent_registry.h
1 #ifndef AGENT_REGISTRY_H
2 #define AGENT_REGISTRY_H
3
4 /***********************************************************************/
5 /*
6  * new version2 agent handler API structures 
7  */
8 /***********************************************************************/
9
10 #include <net-snmp/agent/snmp_agent.h>
11
12 #ifdef __cplusplus
13 extern          "C" {
14 #endif
15
16 /***********************************************************************/
17     /*
18      * requests api definitions 
19      */
20 /***********************************************************************/
21
22     /*
23      * the structure of parameters passed to registered ACM modules 
24      */
25 struct view_parameters {
26     netsnmp_pdu    *pdu;
27     oid            *name;
28     size_t          namelen;
29     int             test;
30     int             errorcode;          /*  Do not change unless you're
31                                             specifying an error, as it starts
32                                             in a success state.  */
33     int             check_subtree;
34 };
35
36 struct register_parameters {
37     oid            *name;
38     size_t          namelen;
39     int             priority;
40     int             range_subid;
41     oid             range_ubound;
42     int             timeout;
43     u_char          flags;
44 };
45
46 typedef struct subtree_context_cache_s {
47     char                                *context_name;
48     struct netsnmp_subtree_s            *first_subtree;
49     struct subtree_context_cache_s      *next;
50 } subtree_context_cache;
51
52
53
54 void             setup_tree               (void);
55
56 netsnmp_subtree *netsnmp_subtree_find     (oid *, size_t, netsnmp_subtree *,
57                                            const char *context_name);
58
59 netsnmp_subtree *netsnmp_subtree_find_next(oid *, size_t, netsnmp_subtree *,
60                                            const char *context_name);
61
62 netsnmp_subtree *netsnmp_subtree_find_prev(oid *, size_t,netsnmp_subtree *,
63                                            const char *context_name);
64
65 netsnmp_subtree *netsnmp_subtree_find_first(const char *context_name);
66
67 netsnmp_session *get_session_for_oid       (oid *, size_t, 
68                                             const char *context_name);
69
70 subtree_context_cache *get_top_context_cache(void);
71
72 void netsnmp_set_lookup_cache_size(int newsize);
73 int netsnmp_get_lookup_cache_size(void);
74
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
82
83 int             register_mib               (const char *, struct variable *,
84                                             size_t, size_t, oid *, size_t);
85
86 int             register_mib_priority      (const char *, struct variable *,
87                                             size_t, size_t, oid *, size_t,
88                                             int);
89
90 int             register_mib_range         (const char *, struct variable *,
91                                             size_t, size_t, oid *, size_t, 
92                                             int, int, oid, netsnmp_session *);
93
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);
98
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);
103
104 int             unregister_mib             (oid *, size_t);
105
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,
109                                             const char *);
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,
113                                             oid range_ubound,
114                                             const char *context);
115
116 int             compare_tree               (const oid *, size_t, 
117                                             const oid *, size_t);
118 int             in_a_view                  (oid *, size_t *, 
119                                             netsnmp_pdu *, int);
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);
124
125 /*
126  * REGISTER_MIB(): This macro simply loads register_mib with less pain:
127  * 
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!) 
133  */
134
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));
140
141
142
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
148
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;
152
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 *);
156
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];
160
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);
167
168
169
170 #define NUM_EXTERNAL_SIGS 32
171 #define SIG_REGISTERED_OK                0
172 #define SIG_REGISTRATION_FAILED         -2
173 #define SIG_UNREGISTERED_OK              0
174
175 extern int      external_signal_scheduled[NUM_EXTERNAL_SIGS];
176 extern void     (*external_signal_handler[NUM_EXTERNAL_SIGS])(int);
177
178 int             register_signal(int, void (*func)(int));
179 int             unregister_signal(int);
180
181
182
183 /*
184  * internal API.  Don't use this.  Use netsnmp_register_handler instead 
185  */
186
187 struct netsnmp_handler_registration_s;
188
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 *,
194                                      int);
195
196 #ifdef __cplusplus
197 };
198 #endif
199
200 #endif                          /* AGENT_REGISTRY_H */