1 /*
2  * callback.c: A generic callback mechanism
3  */
4 
5 #ifndef CALLBACK_H
6 #define CALLBACK_H
7 
8 #ifdef __cplusplus
9 extern          "C" {
10 #endif
11 
12 #define MAX_CALLBACK_IDS    2
13 #define MAX_CALLBACK_SUBIDS 17
14 
15     /*
16      * Callback Major Types
17      */
18 #define SNMP_CALLBACK_LIBRARY     0
19 #define SNMP_CALLBACK_APPLICATION 1
20 
21     /*
22      * SNMP_CALLBACK_LIBRARY minor types
23      */
24 #define SNMP_CALLBACK_POST_READ_CONFIG	        0
25 #define SNMP_CALLBACK_STORE_DATA	        1
26 #define SNMP_CALLBACK_SHUTDOWN		        2
27 #define SNMP_CALLBACK_POST_PREMIB_READ_CONFIG	3
28 #define SNMP_CALLBACK_LOGGING			4
29 #define SNMP_CALLBACK_SESSION_INIT		5
30 #define SNMP_CALLBACK_PRE_READ_CONFIG	        7
31 #define SNMP_CALLBACK_PRE_PREMIB_READ_CONFIG	8
32 
33 
34     /*
35      * Callback priority (lower priority numbers called first(
36      */
37 #define NETSNMP_CALLBACK_HIGHEST_PRIORITY      -1024
38 #define NETSNMP_CALLBACK_DEFAULT_PRIORITY       0
39 #define NETSNMP_CALLBACK_LOWEST_PRIORITY        1024
40 
41     typedef int     (SNMPCallback) (int majorID, int minorID,
42                                     void *serverarg, void *clientarg);
43 
44     struct snmp_gen_callback {
45         SNMPCallback   *sc_callback;
46         void           *sc_client_arg;
47         int             priority;
48         struct snmp_gen_callback *next;
49     };
50 
51     /*
52      * function prototypes
53      */
54     NETSNMP_IMPORT
55     void            init_callbacks(void);
56 
57     NETSNMP_IMPORT
58     int             netsnmp_register_callback(int major, int minor,
59                                               SNMPCallback * new_callback,
60                                               void *arg, int priority);
61     NETSNMP_IMPORT
62     int             snmp_register_callback(int major, int minor,
63                                            SNMPCallback * new_callback,
64                                            void *arg);
65     NETSNMP_IMPORT
66     int             snmp_call_callbacks(int major, int minor,
67                                         void *caller_arg);
68     NETSNMP_IMPORT
69     int             snmp_callback_available(int major, int minor);      /* is >1 available */
70     NETSNMP_IMPORT
71     int             snmp_count_callbacks(int major, int minor); /* ret the number registered */
72     NETSNMP_IMPORT
73     int             snmp_unregister_callback(int major, int minor,
74                                              SNMPCallback * new_callback,
75                                              void *arg, int matchargs);
76     NETSNMP_IMPORT
77     void            clear_callback (void);
78     int             netsnmp_callback_clear_client_arg(void *, int i, int j);
79 
80     struct snmp_gen_callback *snmp_callback_list(int major, int minor);
81 
82 #ifdef __cplusplus
83 }
84 #endif
85 #endif                          /* CALLBACK_H */
86