--- /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);
+}