4 #ifndef _TABLE_DATA_HANDLER_H_
5 #define _TABLE_DATA_HANDLER_H_
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.
19 #define TABLE_DATA_NAME "table_data"
21 typedef struct netsnmp_table_row_s {
22 netsnmp_variable_list *indexes; /* stored permanently if store_indexes = 1 */
25 void *data; /* the data to store */
27 struct netsnmp_table_row_s *next, *prev; /* if used in a list */
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 */
35 netsnmp_table_row *first_row;
38 netsnmp_mib_handler *netsnmp_get_table_data_handler(netsnmp_table_data
40 void netsnmp_table_data_generate_index_oid(netsnmp_table_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
48 void *netsnmp_table_data_delete_row(netsnmp_table_row *row);
50 *netsnmp_table_data_remove_and_delete_row(netsnmp_table_data
52 netsnmp_table_row *row);
54 netsnmp_table_row *netsnmp_table_data_get(netsnmp_table_data *table,
55 netsnmp_variable_list *
58 netsnmp_table_row *netsnmp_table_data_get_from_oid(netsnmp_table_data
65 netsnmp_register_table_data(netsnmp_handler_registration *reginfo,
66 netsnmp_table_data *table,
67 netsnmp_table_registration_info
70 netsnmp_register_read_only_table_data(netsnmp_handler_registration
72 netsnmp_table_data *table,
73 netsnmp_table_registration_info
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
82 NETSNMP_INLINE void netsnmp_table_data_replace_row(netsnmp_table_data
90 netsnmp_table_data_build_result(netsnmp_handler_registration
92 netsnmp_agent_request_info
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);
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)
104 Netsnmp_Node_Handler netsnmp_table_data_helper_handler;
110 #endif /* _TABLE_DATA_HANDLER_H_ */