summaryrefslogtreecommitdiff
path: root/include/net-snmp/agent/table_data.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net-snmp/agent/table_data.h')
-rw-r--r--include/net-snmp/agent/table_data.h124
1 files changed, 124 insertions, 0 deletions
diff --git a/include/net-snmp/agent/table_data.h b/include/net-snmp/agent/table_data.h
new file mode 100644
index 0000000..f64475e
--- /dev/null
+++ b/include/net-snmp/agent/table_data.h
@@ -0,0 +1,124 @@
+/*
+ * 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_ */