oi-extras/net-snmp/sun/sdk/demo/demo_module_6/demo_module_6.c
branchoi-extras
changeset 215 6eb7b62e444c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/oi-extras/net-snmp/sun/sdk/demo/demo_module_6/demo_module_6.c	Wed Jun 22 00:51:55 2011 +0100
@@ -0,0 +1,162 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ *
+ * U.S. Government Rights - Commercial software. Government users are subject
+ * to the Sun Microsystems, Inc. standard license agreement and applicable
+ * provisions of the FAR and its supplements.
+ *
+ *
+ * This distribution may include materials developed by third parties. Sun,
+ * Sun Microsystems, the Sun logo and Solaris are trademarks or registered
+ * trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
+ *
+ */
+ 
+/*
+ * Note: this file originally auto-generated by mib2c using :
+ * mib2c.scalar.conf,v 1.5 2002/07/18 14:18:52 dts12 Exp $
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "demo_module_6.h"
+
+//Hardcoded size of fileX context name string
+static long fileX_data = 111;
+
+//Hardcoded size of fileY context name string
+static long fileY_data = 999;
+
+
+
+/*
+	The following code example shows how to write a module that registers
+	an object in two different contexts. It also shows how to check for
+	the contextName in a request and return a different value depending
+	on the value of the contextName.
+
+	The code example registers one object, filesize, in two different
+	contexts, fileX, and fileY. This example registers the OIDs using a
+	read-only instance handler helper. The OIDs do not need to be read-only.
+	You could also register the OIDs using any of the SMA instance handler
+	helper APIs.
+
+	The function get_filesize is registered to handle get requests for
+	instances of the filesize object. This function checks the contextName
+	in the reginfo structure that is passed to the function by the SMA
+	agent. If the value of contextName is fileX, the function returns
+	fileX_data, which has been set to the integer 111. If the value of
+	contextName is fileY, the function returns fileY_data, which has been
+	set to the integer 999.  */
+
+/*  Initialialization routine, which is automatically called by the agent.
+    The function name must match init_FILENAME() */
+
+void
+init_demo_module_6(void)
+{
+	/*
+	 * the OID at which to register the demo_module_6 integer.
+	 */
+	static oid filesize_oid[] =
+		{1, 3, 6, 1, 4, 1, 42, 2, 2, 4, 4, 6, 1, 1, 0};
+
+	netsnmp_handler_registration *myreg1;
+	//Registration handler
+		char *filexcon = "fileX";
+	//Name of fileX context
+		char *fileycon = "fileY";
+	//Name of fileY context
+
+	/*
+	 * A debugging statement.  Run the agent with -Ddemo_module_6 to see
+	 * the output of this debugging statement in /var/log/snmpd.log, by
+	 * default. Use the -L option to write debugging output to the
+	 * screen.
+	 */
+		DEBUGMSGTL(("demo_module_6", "Initializing\n"));
+	/*
+	 * Creates a read-only registration handler named demo_module_6,
+	 * which calls the get_demo_module_6 function to service snmp
+	 * requests for the demo_module_6_oid object.  The OID_LENGTH
+	 * argument calculates the length of the demo_module_6_oid.
+	 */
+	myreg1 = netsnmp_create_handler_registration
+		("filesize",
+			get_filesize,
+			filesize_oid,
+			OID_LENGTH(filesize_oid),
+			HANDLER_CAN_RONLY);
+	/*
+	 * Assigns new filename as a context string in the contextName member
+	 * of the netsnmp_registration_handler struct for the filesize_oid.
+	 */
+	myreg1->contextName = filexcon;
+	/*
+	 * Registers the OID and contextName.
+	 *
+	 */
+	netsnmp_register_read_only_instance(myreg1);
+	/*
+	 * Creates a read-only registration handler named filesize, which
+	 * calls the get_filesize function to service snmp requests for the
+	 * filesize_oid object.  The OID_LENGTH argument calculates the
+	 * length of the filesize_oid.
+	 */
+	myreg1 = netsnmp_create_handler_registration
+		("filesize",
+			get_filesize,
+			filesize_oid,
+			OID_LENGTH(filesize_oid),
+			HANDLER_CAN_RONLY);
+	/*
+	 * Assigns new filename as a context string in the contextName member
+	 * of the netsnmp_registration_handler struct for the filesize_oid.
+	 */
+	myreg1->contextName = fileycon;
+	/*
+	 * Creates a read-only registration handler named filesize, which
+	 * calls the get_filesize function to service snmp requests for the
+	 * filesize_oid object.  The OID_LENGTH argument calculates the
+	 * length of the filesize_oid.
+	 */
+	netsnmp_register_read_only_instance(myreg1);
+
+}
+
+
+int
+get_filesize(netsnmp_mib_handler * handler,
+	netsnmp_handler_registration * reginfo,
+	netsnmp_agent_request_info * reqinfo,
+	netsnmp_request_info * requests)
+{
+	/*
+	 * This handler is never called for a getnext if it is registered as
+	 * an instance. An instance handler only delivers one request at a
+	 * time, so we do not need to loop over a list of requests.
+	 */
+	DEBUGMSGTL(("demo_module_6", "get_filesize CALLED\n"));
+	DEBUGMSGTL(("demo_module_6", "INCOMING CONTEXT NAME = %s:\n",
+		    reginfo->contextName));
+	switch (reqinfo->mode) {
+	case MODE_GET:
+		if (strcmp(reginfo->contextName, "fileX") == 0)
+			snmp_set_var_typed_value(requests->requestvb,
+			ASN_INTEGER, (u_char *) & fileX_data,
+			sizeof (fileX_data) /* length in bytes */);
+		else if (strcmp(reginfo->contextName, "fileY") == 0)
+			snmp_set_var_typed_value(requests->requestvb,
+			ASN_INTEGER, (u_char *)
+			& fileY_data,
+			sizeof (fileY_data));
+		break;
+	default:
+		/*
+		 * We should never get here, so this is a really bad error.
+		 */
+		return (SNMP_ERR_GENERR);
+	}
+	return (SNMP_ERR_NOERROR);
+}