📄 table_dataset.h
字号:
/* * table_iterator.h */#ifndef _TABLE_DATA_SET_HANDLER_H_#define _TABLE_DATA_SET_HANDLER_H_#ifdef __cplusplusextern "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 OPAQUE_SPECIAL_TYPES float *floatVal; double *doubleVal;#endif /* 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); NETSNMP_INLINE void netsnmp_table_dataset_delete_all_data( netsnmp_table_data_set_storage *data); NETSNMP_INLINE void netsnmp_table_dataset_delete_row(netsnmp_table_row *row); NETSNMP_INLINE void netsnmp_table_dataset_add_row(netsnmp_table_data_set *table, netsnmp_table_row *row); NETSNMP_INLINE void netsnmp_table_dataset_replace_row(netsnmp_table_data_set *table, netsnmp_table_row *origrow, netsnmp_table_row *newrow); NETSNMP_INLINE void netsnmp_table_dataset_remove_row(netsnmp_table_data_set *table, netsnmp_table_row *row); NETSNMP_INLINE void netsnmp_table_dataset_remove_and_delete_row(netsnmp_table_data_set *table, netsnmp_table_row *row);/* ============================ * 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);#if HAVE_STDARG_H void netsnmp_table_set_multi_add_default_row(netsnmp_table_data_set *, ...);#else void netsnmp_table_set_multi_add_default_row(va_alist);#endif/* ============================ * 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_INLINE 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);/* ============================ * DataSet API: Config-based operations * ============================ */ void netsnmp_register_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 char *, size_t);/* ============================ * DataSet API: Index operations * ============================ */ NETSNMP_INLINE void netsnmp_table_dataset_add_index(netsnmp_table_data_set *table, u_char type);#if HAVE_STDARG_H void netsnmp_table_set_add_indexes(netsnmp_table_data_set *tset, ...);#else void netsnmp_table_helper_add_indexes(va_alist);#endif#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_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -