components/net-snmp-57/sun/sdk/demo/demo_module_8/me1LoadGroup.c
changeset 5867 445e2cf1c845
parent 252 ee0fb1eabcbf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/net-snmp-57/sun/sdk/demo/demo_module_8/me1LoadGroup.c	Fri Dec 11 03:49:26 2015 -0800
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "me1LoadGroup.h"
+#include <sys/loadavg.h>
+
+char *
+getLoadAvg(int timeAverage)
+{
+	double loadavg[3];
+	char *data = malloc(30 * sizeof (char));
+	int numOfSamples = getloadavg(loadavg, 3);
+	sprintf(data, "%e", loadavg[timeAverage]);
+	return (data);
+}
+
+/* Initializes the me1LoadGroup module */
+void
+init_me1LoadGroup(void)
+{
+	static oid me1SystemLoadAvg15min_oid[] =
+		{ 1, 3, 6, 1, 4, 1, 42, 2, 2, 4, 4, 1, 1, 3, 0 };
+	static oid me1SystemLoadAvg1min_oid[] =
+		{1, 3, 6, 1, 4, 1, 42, 2, 2, 4, 4, 1, 1, 1, 0 };
+	static oid me1SystemLoadAvg5min_oid[] =
+		{1, 3, 6, 1, 4, 1, 42, 2, 2, 4, 4, 1, 1, 2, 0 };
+
+	DEBUGMSGTL(("me1LoadGroup", "Initializing\n"));
+
+	netsnmp_register_read_only_instance(netsnmp_create_handler_registration
+					("me1SystemLoadAvg15min",
+					get_me1SystemLoadAvg15min,
+					me1SystemLoadAvg15min_oid,
+					OID_LENGTH(me1SystemLoadAvg15min_oid),
+					HANDLER_CAN_RONLY));
+	netsnmp_register_read_only_instance(netsnmp_create_handler_registration
+					("me1SystemLoadAvg1min",
+					get_me1SystemLoadAvg1min,
+					me1SystemLoadAvg1min_oid,
+					OID_LENGTH(me1SystemLoadAvg1min_oid),
+					HANDLER_CAN_RONLY));
+	netsnmp_register_read_only_instance(netsnmp_create_handler_registration
+					("me1SystemLoadAvg5min",
+					get_me1SystemLoadAvg5min,
+					me1SystemLoadAvg5min_oid,
+					OID_LENGTH(me1SystemLoadAvg5min_oid),
+					HANDLER_CAN_RONLY));
+}
+
+int
+get_me1SystemLoadAvg15min(netsnmp_mib_handler * handler,
+			netsnmp_handler_registration * reginfo,
+			netsnmp_agent_request_info * reqinfo,
+			netsnmp_request_info * requests)
+{
+	/*
+	 * We are never called for a GETNEXT if it's registered as a
+	 * "instance", as it's "magically" handled for us.
+	 */
+
+	/*
+	 * a instance handler also only hands us one request at a time, so we
+	 * don't need to loop over a list of requests; we'll only get one.
+	 */
+	char *data = getLoadAvg(LOADAVG_15MIN);
+	switch (reqinfo->mode) {
+
+	case MODE_GET:
+		/*
+		 * Get data from data collection routine, Hardcoded here for
+		 * testing purpose
+		 */
+		snmp_set_var_typed_value(requests->requestvb,
+			ASN_OCTET_STR, (u_char *) data, strlen(data));
+		free(data);
+		break;
+
+
+	default:
+		/* we should never get here, so this is a really bad error */
+		return (SNMP_ERR_GENERR);
+	}
+
+	return (SNMP_ERR_NOERROR);
+}
+int
+get_me1SystemLoadAvg1min(netsnmp_mib_handler * handler,
+			netsnmp_handler_registration * reginfo,
+			netsnmp_agent_request_info * reqinfo,
+			netsnmp_request_info * requests)
+{
+	/*
+	 * We are never called for a GETNEXT if it's registered as a
+	 * "instance", as it's "magically" handled for us.
+	 */
+
+	/*
+	 * a instance handler also only hands us one request at a time, so we
+	 * don't need to loop over a list of requests; we'll only get one.
+	 */
+
+	char *data = getLoadAvg(LOADAVG_1MIN);
+	switch (reqinfo->mode) {
+
+	case MODE_GET:
+		snmp_set_var_typed_value(requests->requestvb,
+			ASN_OCTET_STR, (u_char *) data, strlen(data));
+		free(data);
+		break;
+
+
+	default:
+		/* we should never get here, so this is a really bad error */
+		return (SNMP_ERR_GENERR);
+	}
+
+	return (SNMP_ERR_NOERROR);
+}
+int
+get_me1SystemLoadAvg5min(netsnmp_mib_handler * handler,
+			netsnmp_handler_registration * reginfo,
+			netsnmp_agent_request_info * reqinfo,
+			netsnmp_request_info * requests)
+{
+	/*
+	 * We are never called for a GETNEXT if it's registered as a
+	 * "instance", as it's "magically" handled for us.
+	 */
+
+	/*
+	 * a instance handler also only hands us one request at a time, so we
+	 * don't need to loop over a list of requests; we'll only get one.
+	 */
+
+	char *data = getLoadAvg(LOADAVG_5MIN);
+	switch (reqinfo->mode) {
+	case MODE_GET:
+		snmp_set_var_typed_value(requests->requestvb,
+			ASN_OCTET_STR, (u_char *) data, strlen(data));
+		free(data);
+		break;
+
+
+	default:
+		/* we should never get here, so this is a really bad error */
+		return (SNMP_ERR_GENERR);
+	}
+
+	return (SNMP_ERR_NOERROR);
+}