00001
00002
00003
00004 #ifndef _TABLE_DATA_HANDLER_H_
00005 #define _TABLE_DATA_HANDLER_H_
00006
00007 #ifdef __cplusplus
00008 extern "C" {
00009 #endif
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #define TABLE_DATA_NAME "table_data"
00020 #define TABLE_DATA_ROW "table_data"
00021 #define TABLE_DATA_TABLE "table_data_table"
00022
00023 typedef struct netsnmp_table_row_s {
00024 netsnmp_variable_list *indexes;
00025 oid *index_oid;
00026 size_t index_oid_len;
00027 void *data;
00028
00029 struct netsnmp_table_row_s *next, *prev;
00030 } netsnmp_table_row;
00031
00032 typedef struct netsnmp_table_data_s {
00033 netsnmp_variable_list *indexes_template;
00034 char *name;
00035 int flags;
00036 int store_indexes;
00037 netsnmp_table_row *first_row;
00038 netsnmp_table_row *last_row;
00039 } netsnmp_table_data;
00040
00041
00042
00043
00044
00045 void netsnmp_table_data_generate_index_oid( netsnmp_table_row *row);
00046
00047 netsnmp_table_data *netsnmp_create_table_data(const char *name);
00048 netsnmp_table_row *netsnmp_create_table_data_row(void);
00049 netsnmp_table_row *netsnmp_table_data_clone_row( netsnmp_table_row *row);
00050 void *netsnmp_table_data_delete_row(netsnmp_table_row *row);
00051 int netsnmp_table_data_add_row( netsnmp_table_data *table,
00052 netsnmp_table_row *row);
00053 NETSNMP_INLINE void
00054 netsnmp_table_data_replace_row(netsnmp_table_data *table,
00055 netsnmp_table_row *origrow,
00056 netsnmp_table_row *newrow);
00057 netsnmp_table_row *netsnmp_table_data_remove_row(netsnmp_table_data *table,
00058 netsnmp_table_row *row);
00059 void *netsnmp_table_data_remove_and_delete_row(netsnmp_table_data *table,
00060 netsnmp_table_row *row);
00061
00062
00063
00064
00065
00066 netsnmp_mib_handler *
00067 netsnmp_get_table_data_handler(netsnmp_table_data *table);
00068
00069 int netsnmp_register_table_data(netsnmp_handler_registration *reginfo,
00070 netsnmp_table_data *table,
00071 netsnmp_table_registration_info *table_info);
00072 int netsnmp_register_read_only_table_data(
00073 netsnmp_handler_registration *reginfo,
00074 netsnmp_table_data *table,
00075 netsnmp_table_registration_info *table_info);
00076 Netsnmp_Node_Handler netsnmp_table_data_helper_handler;
00077
00078 netsnmp_table_data *netsnmp_extract_table( netsnmp_request_info *);
00079 netsnmp_table_row *netsnmp_extract_table_row(netsnmp_request_info *);
00080 void *netsnmp_extract_table_row_data(netsnmp_request_info *);
00081 void netsnmp_insert_table_row(netsnmp_request_info *, netsnmp_table_row *);
00082
00083 int netsnmp_table_data_build_result(netsnmp_handler_registration *reginfo,
00084 netsnmp_agent_request_info *reqinfo,
00085 netsnmp_request_info *request,
00086 netsnmp_table_row *row, int column,
00087 u_char type, u_char * result_data,
00088 size_t result_data_len);
00089
00090
00091
00092
00093
00094 netsnmp_table_row *netsnmp_table_data_get_first_row(
00095 netsnmp_table_data *table);
00096 netsnmp_table_row *netsnmp_table_data_get_next_row(
00097 netsnmp_table_data *table,
00098 netsnmp_table_row *row);
00099
00100 netsnmp_table_row *netsnmp_table_data_get(netsnmp_table_data *table,
00101 netsnmp_variable_list *indexes);
00102
00103 netsnmp_table_row *netsnmp_table_data_get_from_oid(
00104 netsnmp_table_data *table,
00105 oid * searchfor,
00106 size_t searchfor_len);
00107
00108 int netsnmp_table_data_num_rows(netsnmp_table_data *table);
00109
00110
00111
00112
00113
00114
00115 #define netsnmp_table_data_add_index(thetable, type) snmp_varlist_add_variable(&thetable->indexes_template, NULL, 0, type, NULL, 0)
00116 #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)
00117
00118
00119 #ifdef __cplusplus
00120 }
00121 #endif
00122
00123 #endif