summaryrefslogtreecommitdiff
path: root/agent/mibgroup/disman/event/mteScalars.c
diff options
context:
space:
mode:
Diffstat (limited to 'agent/mibgroup/disman/event/mteScalars.c')
-rw-r--r--agent/mibgroup/disman/event/mteScalars.c135
1 files changed, 135 insertions, 0 deletions
diff --git a/agent/mibgroup/disman/event/mteScalars.c b/agent/mibgroup/disman/event/mteScalars.c
new file mode 100644
index 0000000..769adc1
--- /dev/null
+++ b/agent/mibgroup/disman/event/mteScalars.c
@@ -0,0 +1,135 @@
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "mteScalars.h"
+#include "mteTrigger.h"
+
+/** Initializes the mteScalars module */
+void
+init_mteScalars(void)
+{
+ static oid mteResource_oid[] = { 1, 3, 6, 1, 2, 1, 88, 1, 1 };
+ static oid mteTriggerFail_oid[] = { 1, 3, 6, 1, 2, 1, 88, 1, 2, 1 };
+
+ DEBUGMSGTL(("mteScalars", "Initializing\n"));
+
+ netsnmp_register_scalar_group(
+ netsnmp_create_handler_registration("mteResource", handle_mteResourceGroup,
+ mteResource_oid, OID_LENGTH(mteResource_oid),
+ HANDLER_CAN_RONLY),
+ MTE_RESOURCE_SAMPLE_MINFREQ, MTE_RESOURCE_SAMPLE_LACKS);
+
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("mteTriggerFailures",
+ handle_mteTriggerFailures,
+ mteTriggerFail_oid, OID_LENGTH(mteTriggerFail_oid),
+ HANDLER_CAN_RONLY));
+}
+
+int
+handle_mteResourceGroup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ oid obj;
+ long value = 0;
+
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ obj = requests->requestvb->name[ requests->requestvb->name_length-2 ];
+ switch (obj) {
+ case MTE_RESOURCE_SAMPLE_MINFREQ:
+ value = 1; /* Fixed minimum sample frequency */
+ snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
+ (u_char *)&value, sizeof(value));
+ break;
+
+ case MTE_RESOURCE_SAMPLE_MAX_INST:
+ value = 0; /* No fixed maximum */
+ snmp_set_var_typed_value(requests->requestvb, ASN_UNSIGNED,
+ (u_char *)&value, sizeof(value));
+ break;
+
+ case MTE_RESOURCE_SAMPLE_INSTANCES:
+#ifdef USING_DISMAN_EVENT_MTETRIGGER_MODULE
+ value = mteTrigger_getNumEntries(0);
+#else
+ value = 0;
+#endif
+ snmp_set_var_typed_value(requests->requestvb, ASN_GAUGE,
+ (u_char *)&value, sizeof(value));
+ break;
+
+ case MTE_RESOURCE_SAMPLE_HIGH:
+#ifdef USING_DISMAN_EVENT_MTETRIGGER_MODULE
+ value = mteTrigger_getNumEntries(1);
+#else
+ value = 0;
+#endif
+ snmp_set_var_typed_value(requests->requestvb, ASN_GAUGE,
+ (u_char *)&value, sizeof(value));
+ break;
+
+ case MTE_RESOURCE_SAMPLE_LACKS:
+ value = 0; /* mteResSampleInstMax not used */
+ snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER,
+ (u_char *)&value, sizeof(value));
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown object (%d) in handle_mteResourceGroup\n", (int)obj);
+ return SNMP_ERR_GENERR;
+ }
+ break;
+
+ default:
+ /*
+ * Although mteResourceSampleMinimum and mteResourceSampleInstanceMaximum
+ * are defined with MAX-ACCESS read-write, this version hardcodes
+ * these values, so doesn't need to implement write access.
+ */
+ snmp_log(LOG_ERR,
+ "unknown mode (%d) in handle_mteResourceGroup\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_mteTriggerFailures(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+#ifdef USING_DISMAN_EVENT_MTETRIGGER_MODULE
+ extern long mteTriggerFailures;
+#else
+ long mteTriggerFailures = 0;
+#endif
+
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER,
+ (u_char *)&mteTriggerFailures,
+ sizeof(mteTriggerFailures));
+ break;
+
+
+ default:
+ /*
+ * we should never get here, so this is a really bad error
+ */
+ snmp_log(LOG_ERR,
+ "unknown mode (%d) in handle_mteTriggerFailures\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+