/* * table_iterator.h */ #ifndef _TABLE_DATA_HANDLER_H_ #define _TABLE_DATA_HANDLER_H_ #ifdef __cplusplus extern "C" { #endif /* * This helper is designed to completely automate the task of storing * tables of data within the agent that are not tied to external data * sources (like the kernel, hardware, or other processes, etc). IE, * all rows within a table are expected to be added manually using * functions found below. */ #define TABLE_DATA_NAME "table_data" #define TABLE_DATA_ROW "table_data" #define TABLE_DATA_TABLE "table_data_table" typedef struct netsnmp_table_row_s { netsnmp_variable_list *indexes; /* stored permanently if store_indexes = 1 */ oid *index_oid; size_t index_oid_len; void *data; /* the data to store */ struct netsnmp_table_row_s *next, *prev; /* if used in a list */ } netsnmp_table_row; typedef struct netsnmp_table_data_s { netsnmp_variable_list *indexes_template; /* containing only types */ char *name; /* if !NULL, it's registered globally */ int flags; /* not currently used */ int store_indexes; netsnmp_table_row *first_row; netsnmp_table_row *last_row; } netsnmp_table_data; /* ================================= * Table Data API: Table maintenance * ================================= */ void netsnmp_table_data_generate_index_oid( netsnmp_table_row *row); netsnmp_table_data *netsnmp_create_table_data(const char *name); netsnmp_table_row *netsnmp_create_table_data_row(void); netsnmp_table_row *netsnmp_table_data_clone_row( netsnmp_table_row *row); void *netsnmp_table_data_delete_row(netsnmp_table_row *row); int netsnmp_table_data_add_row( netsnmp_table_data *table, netsnmp_table_row *row); void netsnmp_table_data_replace_row(netsnmp_table_data *table, netsnmp_table_row *origrow, netsnmp_table_row *newrow); netsnmp_table_row *netsnmp_table_data_remove_row(netsnmp_table_data *table, netsnmp_table_row *row); void *netsnmp_table_data_remove_and_delete_row(netsnmp_table_data *table, netsnmp_table_row *row); void netsnmp_table_data_delete_table( netsnmp_table_data *table ); /* ================================= * Table Data API: MIB maintenance * ================================= */ netsnmp_mib_handler * netsnmp_get_table_data_handler(netsnmp_table_data *table); int netsnmp_register_table_data(netsnmp_handler_registration *reginfo, netsnmp_table_data *table, netsnmp_table_registration_info *table_info); int netsnmp_register_read_only_table_data( netsnmp_handler_registration *reginfo, netsnmp_table_data *table, netsnmp_table_registration_info *table_info); Netsnmp_Node_Handler netsnmp_table_data_helper_handler; netsnmp_table_data *netsnmp_extract_table( netsnmp_request_info *); netsnmp_table_row *netsnmp_extract_table_row(netsnmp_request_info *); void *netsnmp_extract_table_row_data(netsnmp_request_info *); void netsnmp_insert_table_row(netsnmp_request_info *, netsnmp_table_row *); int netsnmp_table_data_build_result(netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *request, netsnmp_table_row *row, int column, u_char type, u_char * result_data, size_t result_data_len); /* ================================= * Table Data API: Row operations * ================================= */ netsnmp_table_row *netsnmp_table_data_get_first_row( netsnmp_table_data *table); netsnmp_table_row *netsnmp_table_data_get_next_row( netsnmp_table_data *table, netsnmp_table_row *row); netsnmp_table_row *netsnmp_table_data_get(netsnmp_table_data *table, netsnmp_variable_list *indexes); netsnmp_table_row *netsnmp_table_data_get_from_oid( netsnmp_table_data *table, oid * searchfor, size_t searchfor_len); int netsnmp_table_data_num_rows(netsnmp_table_data *table); /* ================================= * Table Data API: Index operations * ================================= */ #define netsnmp_table_data_add_index(thetable, type) snmp_varlist_add_variable(&thetable->indexes_template, NULL, 0, type, NULL, 0) #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) #ifdef __cplusplus } #endif #endif /* _TABLE_DATA_HANDLER_H_ */