and added files
[bcm963xx.git] / userapps / opensource / net-snmp / include / net-snmp / agent / table_data.h
1 /*
2  * table_iterator.h 
3  */
4 #ifndef _TABLE_DATA_HANDLER_H_
5 #define _TABLE_DATA_HANDLER_H_
6
7 #ifdef __cplusplus
8 extern          "C" {
9 #endif
10
11     /*
12      * This helper is designed to completely automate the task of storing
13      * tables of data within the agent that are not tied to external data
14      * sources (like the kernel, hardware, or other processes, etc).  IE,
15      * all rows within a table are expected to be added manually using
16      * functions found below.
17      */
18
19 #define TABLE_DATA_NAME "table_data"
20
21     typedef struct netsnmp_table_row_s {
22         netsnmp_variable_list *indexes; /* stored permanently if store_indexes = 1 */
23         oid            *index_oid;
24         size_t          index_oid_len;
25         void           *data;   /* the data to store */
26
27         struct netsnmp_table_row_s *next, *prev;        /* if used in a list */
28     } netsnmp_table_row;
29
30     typedef struct netsnmp_table_data_s {
31         netsnmp_variable_list *indexes_template;        /* containing only types */
32         char           *name;   /* if !NULL, it's registered globally */
33         int             flags;  /* not currently used */
34         int             store_indexes;
35         netsnmp_table_row *first_row;
36     } netsnmp_table_data;
37
38     netsnmp_mib_handler *netsnmp_get_table_data_handler(netsnmp_table_data
39                                                         *table);
40     void            netsnmp_table_data_generate_index_oid(netsnmp_table_row
41                                                           *row);
42     int             netsnmp_table_data_add_row(netsnmp_table_data *table,
43                                                netsnmp_table_row *row);
44     netsnmp_table_row *netsnmp_table_data_remove_row(netsnmp_table_data
45                                                      *table,
46                                                      netsnmp_table_row
47                                                      *row);
48     void           *netsnmp_table_data_delete_row(netsnmp_table_row *row);
49     void          
50         *netsnmp_table_data_remove_and_delete_row(netsnmp_table_data
51                                                   *table,
52                                                   netsnmp_table_row *row);
53
54     netsnmp_table_row *netsnmp_table_data_get(netsnmp_table_data *table,
55                                               netsnmp_variable_list *
56                                               indexes);
57
58     netsnmp_table_row *netsnmp_table_data_get_from_oid(netsnmp_table_data
59                                                        *table,
60                                                        oid * searchfor,
61                                                        size_t
62                                                        searchfor_len);
63
64     int            
65         netsnmp_register_table_data(netsnmp_handler_registration *reginfo,
66                                     netsnmp_table_data *table,
67                                     netsnmp_table_registration_info
68                                     *table_info);
69     int            
70         netsnmp_register_read_only_table_data(netsnmp_handler_registration
71                                               *reginfo,
72                                               netsnmp_table_data *table,
73                                               netsnmp_table_registration_info
74                                               *table_info);
75
76     netsnmp_table_row *netsnmp_extract_table_row(netsnmp_request_info *);
77     void           *netsnmp_extract_table_row_data(netsnmp_request_info *);
78     netsnmp_table_data *netsnmp_create_table_data(const char *name);
79     netsnmp_table_row *netsnmp_create_table_data_row(void);
80     netsnmp_table_row *netsnmp_table_data_clone_row(netsnmp_table_row
81                                                     *row);
82     NETSNMP_INLINE void     netsnmp_table_data_replace_row(netsnmp_table_data
83                                                    *table,
84                                                    netsnmp_table_row
85                                                    *origrow,
86                                                    netsnmp_table_row
87                                                    *newrow);
88
89     int            
90         netsnmp_table_data_build_result(netsnmp_handler_registration
91                                         *reginfo,
92                                         netsnmp_agent_request_info
93                                         *reqinfo,
94                                         netsnmp_request_info *request,
95                                         netsnmp_table_row *row, int column,
96                                         u_char type, u_char * result_data,
97                                         size_t result_data_len);
98
99
100 #define netsnmp_table_data_add_index(thetable, type) snmp_varlist_add_variable(&thetable->indexes_template, NULL, 0, type, NULL, 0)
101 #define netsnmp_table_row_add_index(row, type, value, value_len) snmp_varlist_add_variable(&row->indexes, NULL, 0, type, (const u_char *) value, value_len)
102
103
104     Netsnmp_Node_Handler netsnmp_table_data_helper_handler;
105
106 #ifdef __cplusplus
107 };
108 #endif
109
110 #endif                          /* _TABLE_DATA_HANDLER_H_ */