diff options
Diffstat (limited to 'include/net-snmp/agent/table_dataset.h')
-rw-r--r-- | include/net-snmp/agent/table_dataset.h | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/include/net-snmp/agent/table_dataset.h b/include/net-snmp/agent/table_dataset.h new file mode 100644 index 0000000..66e3b3c --- /dev/null +++ b/include/net-snmp/agent/table_dataset.h @@ -0,0 +1,196 @@ +/* + * table_iterator.h + */ +#ifndef _TABLE_DATA_SET_HANDLER_H_ +#define _TABLE_DATA_SET_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. + */ + + void netsnmp_init_table_dataset(void); + +#define TABLE_DATA_SET_NAME "netsnmp_table_data_set" + + /* + * return SNMP_ERR_NOERROR or some SNMP specific protocol error id + */ + typedef int (Netsnmp_Value_Change_Ok) (char *old_value, + size_t old_value_len, + char *new_value, + size_t new_value_len, + void *mydata); + + /* + * stored within a given row + */ + typedef struct netsnmp_table_data_set_storage_s { + unsigned int column; + + /* + * info about it? + */ + char writable; + Netsnmp_Value_Change_Ok *change_ok_fn; + void *my_change_data; + + /* + * data actually stored + */ + u_char type; + union { /* value of variable */ + void *voidp; + long *integer; + u_char *string; + oid *objid; + u_char *bitstring; + struct counter64 *counter64; +#ifdef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES + float *floatVal; + double *doubleVal; +#endif /* NETSNMP_WITH_OPAQUE_SPECIAL_TYPES */ + } data; + u_long data_len; + + struct netsnmp_table_data_set_storage_s *next; + } netsnmp_table_data_set_storage; + + typedef struct netsnmp_table_data_set_s { + netsnmp_table_data *table; + netsnmp_table_data_set_storage *default_row; + int allow_creation; /* set to 1 to allow creation of new rows */ + unsigned int rowstatus_column; + } netsnmp_table_data_set; + + +/* ============================ + * DataSet API: Table maintenance + * ============================ */ + + netsnmp_table_data_set *netsnmp_create_table_data_set(const char *); + netsnmp_table_row *netsnmp_table_data_set_clone_row( netsnmp_table_row *row); + void netsnmp_table_dataset_delete_all_data( + netsnmp_table_data_set_storage *data); + void netsnmp_table_dataset_delete_row(netsnmp_table_row *row); + + void netsnmp_table_dataset_add_row(netsnmp_table_data_set + *table, + netsnmp_table_row *row); + void + netsnmp_table_dataset_replace_row(netsnmp_table_data_set *table, + netsnmp_table_row *origrow, + netsnmp_table_row *newrow); + void netsnmp_table_dataset_remove_row(netsnmp_table_data_set + *table, + netsnmp_table_row *row); + void + netsnmp_table_dataset_remove_and_delete_row(netsnmp_table_data_set + *table, + netsnmp_table_row *row); + void netsnmp_delete_table_data_set(netsnmp_table_data_set *table_set); + +/* ============================ + * DataSet API: Default row operations + * ============================ */ + + /* + * to set, add column, type, (writable) ? 1 : 0 + */ + /* + * default value, if not NULL, is the default value used in row + * creation. It is copied into the storage template (free your + * calling argument). + */ + int netsnmp_table_set_add_default_row(netsnmp_table_data_set *, + unsigned int, int, int, + void *default_value, + size_t default_value_len); + void netsnmp_table_set_multi_add_default_row(netsnmp_table_data_set *, + ...); + + +/* ============================ + * DataSet API: MIB maintenance + * ============================ */ + + netsnmp_mib_handler + *netsnmp_get_table_data_set_handler(netsnmp_table_data_set *); + Netsnmp_Node_Handler netsnmp_table_data_set_helper_handler; + int netsnmp_register_table_data_set(netsnmp_handler_registration *, + netsnmp_table_data_set *, + netsnmp_table_registration_info *); + netsnmp_table_data_set + *netsnmp_extract_table_data_set(netsnmp_request_info *request); + netsnmp_table_data_set_storage + *netsnmp_extract_table_data_set_column(netsnmp_request_info *, + unsigned int); + netsnmp_oid_stash_node ** + netsnmp_table_dataset_get_or_create_stash(netsnmp_agent_request_info *ari, + netsnmp_table_data_set *tds, + netsnmp_table_request_info *tri); + netsnmp_table_row * + netsnmp_table_dataset_get_newrow(netsnmp_request_info *request, + netsnmp_agent_request_info *reqinfo, + int rootoid_len, + netsnmp_table_data_set *datatable, + netsnmp_table_request_info *table_info); + + +/* ============================ + * DataSet API: Config-based operations + * ============================ */ + + void netsnmp_register_auto_data_table(netsnmp_table_data_set *table_set, + char *registration_name); + void netsnmp_unregister_auto_data_table(netsnmp_table_data_set *table_set, + char *registration_name); + void netsnmp_config_parse_table_set(const char *token, char *line); + void netsnmp_config_parse_add_row( const char *token, char *line); + + +/* ============================ + * DataSet API: Row operations + * ============================ */ + + netsnmp_table_row *netsnmp_table_data_set_get_first_row(netsnmp_table_data_set *table); + netsnmp_table_row *netsnmp_table_data_set_get_next_row( netsnmp_table_data_set *table, + netsnmp_table_row *row); + int netsnmp_table_set_num_rows(netsnmp_table_data_set *table); + + +/* ============================ + * DataSet API: Column operations + * ============================ */ + + netsnmp_table_data_set_storage + *netsnmp_table_data_set_find_column(netsnmp_table_data_set_storage *, + unsigned int); + int netsnmp_mark_row_column_writable( netsnmp_table_row *row, + int column, int writable); + int netsnmp_set_row_column( netsnmp_table_row *, + unsigned int, int, const void *, + size_t); + +/* ============================ + * DataSet API: Index operations + * ============================ */ + + void netsnmp_table_dataset_add_index(netsnmp_table_data_set + *table, u_char type); + void netsnmp_table_set_add_indexes(netsnmp_table_data_set *tset, ...); + +#ifdef __cplusplus +} +#endif + +#define netsnmp_table_row_add_column(row, type, value, value_len) snmp_varlist_add_variable(&row->indexes, NULL, 0, type, (u_char *) value, value_len) + +#endif /* _TABLE_DATA_SET_HANDLER_H_ */ |