summaryrefslogtreecommitdiff
path: root/agent/mibgroup/host/hrSWRunPerfTable.c
diff options
context:
space:
mode:
Diffstat (limited to 'agent/mibgroup/host/hrSWRunPerfTable.c')
-rw-r--r--agent/mibgroup/host/hrSWRunPerfTable.c198
1 files changed, 198 insertions, 0 deletions
diff --git a/agent/mibgroup/host/hrSWRunPerfTable.c b/agent/mibgroup/host/hrSWRunPerfTable.c
new file mode 100644
index 0000000..43b44d1
--- /dev/null
+++ b/agent/mibgroup/host/hrSWRunPerfTable.c
@@ -0,0 +1,198 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.container.conf,v 1.8 2006/07/26 15:58:26 dts12 Exp $
+ */
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright (C) 2007 Apple, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/data_access/swrun.h>
+#include "hrSWRunPerfTable.h"
+#include "data_access/swrun.h"
+
+#define MYTABLE "hrSWRunPerfTable"
+
+/** Initializes the hrSWRunPerfTable module */
+void
+init_hrSWRunPerfTable(void)
+{
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ initialize_table_hrSWRunPerfTable();
+}
+
+void
+shutdown_hrSWRunPerfTable(void)
+{
+ shutdown_table_hrSWRunPerfTable();
+}
+
+extern oid hrSWRunTable_oid[];
+extern size_t hrSWRunTable_oid_len;
+static netsnmp_table_registration_info *table_info;
+
+/** Initialize the hrSWRunPerfTable table by defining its contents and how it's structured */
+void
+initialize_table_hrSWRunPerfTable(void)
+{
+ static oid hrSWRunPerfTable_oid[] =
+ { 1, 3, 6, 1, 2, 1, 25, 5, 1 };
+ size_t hrSWRunPerfTable_oid_len =
+ OID_LENGTH(hrSWRunPerfTable_oid);
+ netsnmp_handler_registration *reg;
+ netsnmp_mib_handler *handler = NULL;
+
+ reg =
+ netsnmp_create_handler_registration("hrSWRunPerfTable",
+ hrSWRunPerfTable_handler,
+ hrSWRunPerfTable_oid,
+ hrSWRunPerfTable_oid_len,
+ HANDLER_CAN_RONLY);
+ if (NULL == reg) {
+ snmp_log(LOG_ERR,"error creating handler registration for "
+ MYTABLE "\n");
+ goto bail;
+ }
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ if (NULL == table_info) {
+ snmp_log(LOG_ERR,"error allocating table registration for "
+ MYTABLE "\n");
+ goto bail;
+ }
+ netsnmp_table_helper_add_indexes(table_info, ASN_INTEGER, /* index: hrSWRunIndex */
+ 0);
+ table_info->min_column = COLUMN_HRSWRUNPERFCPU;
+ table_info->max_column = COLUMN_HRSWRUNPERFMEM;
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler = netsnmp_container_table_handler_get(table_info, netsnmp_swrun_container(),
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ if (NULL == handler) {
+ snmp_log(LOG_ERR,"error allocating table registration for "
+ MYTABLE "\n");
+ goto bail;
+ }
+ if (SNMPERR_SUCCESS != netsnmp_inject_handler(reg, handler)) {
+ snmp_log(LOG_ERR,"error injecting container_table handler for "
+ MYTABLE "\n");
+ goto bail;
+ }
+ handler = NULL; /* reg has it, will reuse below */
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+
+ handler = netsnmp_cache_handler_get(netsnmp_swrun_cache());
+ if (NULL == handler) {
+ snmp_log(LOG_ERR, "error creating cache handler for " MYTABLE "\n");
+ goto bail;
+ }
+
+ if (SNMPERR_SUCCESS != netsnmp_inject_handler(reg, handler)) {
+ snmp_log(LOG_ERR,"error injecting cache handler for "
+ MYTABLE "\n");
+ goto bail;
+ }
+ handler = NULL; /* reg has it*/
+
+ if (SNMPERR_SUCCESS != netsnmp_register_table(reg, table_info)) {
+ snmp_log(LOG_ERR,"error registering table handler for "
+ MYTABLE "\n");
+ reg = NULL; /* it was freed inside netsnmp_register_table */
+ goto bail;
+ }
+
+ return; /* ok */
+
+
+ bail: /* not ok */
+
+ if (handler)
+ netsnmp_handler_free(handler);
+
+ if (table_info)
+ netsnmp_table_registration_info_free(table_info);
+
+ if (reg)
+ netsnmp_handler_registration_free(reg);
+}
+
+void
+shutdown_table_hrSWRunPerfTable(void)
+{
+ if (table_info) {
+ netsnmp_table_registration_info_free(table_info);
+ table_info = NULL;
+ }
+}
+
+/** handles requests for the hrSWRunPerfTable table */
+int
+hrSWRunPerfTable_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ netsnmp_request_info *request;
+ netsnmp_table_request_info *table_info;
+ netsnmp_swrun_entry *table_entry;
+
+ switch (reqinfo->mode) {
+ /*
+ * Read-support (also covers GetNext requests)
+ */
+ case MODE_GET:
+ for (request = requests; request; request = request->next) {
+ if (request->processed)
+ continue;
+ table_entry = (netsnmp_swrun_entry *)
+ netsnmp_container_table_extract_context(request);
+ table_info = netsnmp_extract_table_info(request);
+ if ((NULL == table_entry) || (NULL == table_info)) {
+ snmp_log(LOG_ERR, "could not extract table entry or info for "
+ MYTABLE "\n");
+ snmp_set_var_typed_value(request->requestvb,
+ SNMP_ERR_GENERR, NULL, 0);
+ continue;
+ }
+
+ switch (table_info->colnum) {
+ case COLUMN_HRSWRUNPERFCPU:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ table_entry->hrSWRunPerfCPU);
+ break;
+ case COLUMN_HRSWRUNPERFMEM:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ table_entry->hrSWRunPerfMem);
+ break;
+ default:
+ /*
+ * An unsupported/unreadable column (if applicable)
+ */
+ snmp_set_var_typed_value(request->requestvb,
+ SNMP_NOSUCHOBJECT, NULL, 0);
+ }
+ }
+ break;
+
+ }
+ return SNMP_ERR_NOERROR;
+}