6967 lines
248 KiB
Diff
6967 lines
248 KiB
Diff
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/data_access/etherstats.h net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/data_access/etherstats.h
|
|
--- net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/data_access/etherstats.h 1969-12-31 19:00:00.000000000 -0500
|
|
+++ net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/data_access/etherstats.h 2008-12-21 05:47:47.000000000 -0500
|
|
@@ -0,0 +1,7 @@
|
|
+/*
|
|
+ * module to include the modules
|
|
+ */
|
|
+
|
|
+#if defined(linux)
|
|
+config_require(rmon-mib/data_access/etherstats_linux)
|
|
+#endif
|
|
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/data_access/etherstats_linux.c net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/data_access/etherstats_linux.c
|
|
--- net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/data_access/etherstats_linux.c 1969-12-31 19:00:00.000000000 -0500
|
|
+++ net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/data_access/etherstats_linux.c 2009-01-12 07:38:52.000000000 -0500
|
|
@@ -0,0 +1,319 @@
|
|
+/*
|
|
+ * standard Net-SNMP includes
|
|
+ */
|
|
+#include <net-snmp/net-snmp-config.h>
|
|
+#include <net-snmp/net-snmp-includes.h>
|
|
+#include <net-snmp/agent/net-snmp-agent-includes.h>
|
|
+
|
|
+/*
|
|
+ * include our parent header
|
|
+ */
|
|
+#include "rmon-mib/etherStatsTable/etherStatsTable.h"
|
|
+#include "rmon-mib/etherStatsTable/etherStatsTable_data_access.h"
|
|
+#include "rmon-mib/etherStatsTable/ioctl_imp_common.h"
|
|
+
|
|
+/*
|
|
+ * @retval 0 success
|
|
+ * @retval -1 getifaddrs failed
|
|
+ * @retval -2 memory allocation failed
|
|
+ */
|
|
+
|
|
+struct ifname *
|
|
+etherstats_interface_name_list_get (struct ifname *list_head, int *retval)
|
|
+{
|
|
+ struct ifaddrs *addrs = NULL, *p = NULL;
|
|
+ struct ifname *nameptr1=NULL, *nameptr2 = NULL;
|
|
+
|
|
+ DEBUGMSGTL(("access:etherStatsTable:interface_name_list_get",
|
|
+ "called\n"));
|
|
+
|
|
+ if ((getifaddrs(&addrs)) < 0) {
|
|
+ DEBUGMSGTL(("access:etherStatsTable:interface_name_list_get",
|
|
+ "getifaddrs failed\n"));
|
|
+ snmp_log (LOG_ERR, "access:etherStatsTable,interface_name_list_get, getifaddrs failed\n");
|
|
+ *retval = -1;
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ for (p = addrs; p; p = p->ifa_next) {
|
|
+
|
|
+ if (!list_head) {
|
|
+ if ( (list_head = (struct ifname *) malloc (sizeof(struct ifname))) < 0) {
|
|
+ DEBUGMSGTL(("access:etherStatsTable:interface_name_list_get",
|
|
+ "memory allocation failed\n"));
|
|
+ snmp_log (LOG_ERR, "access:etherStatsTable,interface_name_list_get, memory allocation failed\n");
|
|
+ freeifaddrs(addrs);
|
|
+ *retval = -2;
|
|
+ return NULL;
|
|
+ }
|
|
+ memset (list_head, 0, sizeof (struct ifname));
|
|
+ strncpy (list_head->name, p->ifa_name, IF_NAMESIZE);
|
|
+ continue;
|
|
+ }
|
|
+ for (nameptr1 = list_head; nameptr1; nameptr2 = nameptr1, nameptr1 = nameptr1->ifn_next)
|
|
+ if (!strncmp(p->ifa_name, nameptr1->name, IF_NAMESIZE))
|
|
+ break;
|
|
+
|
|
+ if (nameptr1)
|
|
+ continue;
|
|
+
|
|
+ if ( (nameptr2->ifn_next = (struct ifname *) malloc (sizeof(struct ifname))) < 0) {
|
|
+ DEBUGMSGTL(("access:etherStatsTable:interface_name_list_get",
|
|
+ "memory allocation failed\n"));
|
|
+ snmp_log (LOG_ERR, "access:etherStatsTable,interface_name_list_get, memory allocation failed\n");
|
|
+ interface_name_list_free (list_head);
|
|
+ freeifaddrs(addrs);
|
|
+ *retval = -2;
|
|
+ return NULL;
|
|
+ }
|
|
+ nameptr2 = nameptr2->ifn_next;
|
|
+ memset (nameptr2, 0, sizeof (struct ifname));
|
|
+ strncpy (nameptr2->name, p->ifa_name, IF_NAMESIZE);
|
|
+ continue;
|
|
+
|
|
+ }
|
|
+
|
|
+ freeifaddrs(addrs);
|
|
+ *retval = 0;
|
|
+ return list_head;
|
|
+}
|
|
+
|
|
+
|
|
+/*
|
|
+ * @retval 0 success
|
|
+ * @retval -1 invalid pointer
|
|
+ */
|
|
+
|
|
+int
|
|
+etherstats_interface_name_list_free (struct ifname *list_head)
|
|
+{
|
|
+ struct ifname *nameptr1 = NULL, *nameptr2 = NULL;
|
|
+
|
|
+ DEBUGMSGTL(("access:etherStatsTable:interface_name_list_free",
|
|
+ "called\n"));
|
|
+
|
|
+ if (!list_head) {
|
|
+ snmp_log (LOG_ERR, "access:etherStatsTable:interface_name_list_free: invalid pointer list_head");
|
|
+ DEBUGMSGTL(("access:etherStatsTable:interface_name_list_free",
|
|
+ "invalid pointer list_head\n"));
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ for (nameptr1 = list_head; nameptr1; nameptr1 = nameptr2) {
|
|
+ nameptr2 = nameptr1->ifn_next;
|
|
+ free (nameptr1);
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * @retval 0 : not found
|
|
+ * @retval !0 : ifIndex
|
|
+ */
|
|
+
|
|
+int
|
|
+etherstats_interface_ioctl_ifindex_get (int fd, const char *name) {
|
|
+#ifndef SIOCGIFINDEX
|
|
+ return 0;
|
|
+#else
|
|
+ struct ifreq ifrq;
|
|
+ int rc = 0;
|
|
+
|
|
+ DEBUGMSGTL(("access:etherStatsTable:ioctl", "ifindex_get\n"));
|
|
+
|
|
+ rc = _etherStats_ioctl_get(fd, SIOCGIFINDEX, &ifrq, name);
|
|
+ if (rc < 0) {
|
|
+ DEBUGMSGTL(("access:etherStats:ioctl",
|
|
+ "ifindex_get error on inerface '%s'\n", name));
|
|
+ snmp_log (LOG_ERR, "access:etherStatsTable:ioctl, ifindex_get error on inerface '%s'\n", name);
|
|
+ return 0;
|
|
+
|
|
+ }
|
|
+
|
|
+ return ifrq.ifr_ifindex;
|
|
+#endif /* SIOCGIFINDEX */
|
|
+}
|
|
+
|
|
+/*
|
|
+ * @retval 0 success
|
|
+ * @retval -1 cannot get ETHTOOL_DRVINFO failed
|
|
+ * @retval -2 n_stats zero - no statistcs available
|
|
+ * @retval -3 memory allocation for holding the statistics failed
|
|
+ * @retval -4 cannot get ETHTOOL_GSTRINGS information
|
|
+ * @retval -5 cannot get ETHTOOL_GSTATS information
|
|
+ * @retval -6 function not supported if HAVE_LINUX_ETHTOOL_H not defined
|
|
+ */
|
|
+
|
|
+int
|
|
+interface_ioctl_etherstats_get (etherStatsTable_rowreq_ctx *rowreq_ctx , int fd, const char *name) {
|
|
+
|
|
+#ifdef HAVE_LINUX_ETHTOOL_H
|
|
+
|
|
+ etherStatsTable_data *data = &rowreq_ctx->data;
|
|
+ struct ethtool_drvinfo driver_info;
|
|
+ struct ethtool_gstrings *eth_strings;
|
|
+ struct ethtool_stats *eth_stats;
|
|
+ struct ifreq ifr;
|
|
+ unsigned int nstats, size_str, size_stats, i;
|
|
+ int err;
|
|
+
|
|
+ DEBUGMSGTL(("access:etherStatsTable:interface_ioctl_etherstats_get",
|
|
+ "called\n"));
|
|
+
|
|
+ memset(&ifr, 0, sizeof(ifr));
|
|
+ strcpy(ifr.ifr_name, name);
|
|
+
|
|
+ memset(&driver_info, 0, sizeof(driver_info));
|
|
+ driver_info.cmd = ETHTOOL_GDRVINFO;
|
|
+ ifr.ifr_data = (char *)&driver_info;
|
|
+
|
|
+ err = _etherStats_ioctl_get(fd, SIOCETHTOOL, &ifr, name);
|
|
+ if (err < 0) {
|
|
+ DEBUGMSGTL(("access:etherStatsTable:interface_ioctl_etherstats_get",
|
|
+ "ETHTOOL_GETDRVINFO failed on interface |%s| \n", name));
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ nstats = driver_info.n_stats;
|
|
+ if (nstats < 1) {
|
|
+ DEBUGMSGTL(("access:etherStatsTable:interface_ioctl_etherstats_get",
|
|
+ "no stats available for interface |%s| \n", name));
|
|
+ snmp_log (LOG_ERR, "access:etherStatsTable,interface_ioctl_etherstats_get, no stats availablei for interface |%s| \n", name);
|
|
+ return -2;
|
|
+ }
|
|
+
|
|
+ size_str = nstats * ETH_GSTRING_LEN;
|
|
+ size_stats = nstats * sizeof(u64);
|
|
+
|
|
+ eth_strings = malloc(size_str + sizeof (struct ethtool_gstrings));
|
|
+ if (!eth_strings) {
|
|
+ DEBUGMSGTL(("access:etherStatsTable:interface_ioctl_etherstats_get",
|
|
+ "no memory available\n"));
|
|
+ snmp_log (LOG_ERR, "access:etherStatsTable,interface_ioctl_etherstats_get, no memory available\n");
|
|
+
|
|
+ return -3;
|
|
+ }
|
|
+ memset (eth_strings, 0, (size_str + sizeof (struct ethtool_gstrings)));
|
|
+
|
|
+ eth_stats = malloc (size_str + sizeof (struct ethtool_stats));
|
|
+ if (!eth_stats) {
|
|
+ free (eth_strings);
|
|
+ DEBUGMSGTL(("access:etherStatsTable:interface_ioctl_etherstats_get",
|
|
+ "no memory available\n"));
|
|
+ snmp_log (LOG_ERR, "access:etherStatsTable,interface_ioctl_etherstats_get, no memory available\n");
|
|
+
|
|
+ return -3;
|
|
+ }
|
|
+ memset (eth_stats, 0, (size_str + sizeof (struct ethtool_stats)));
|
|
+
|
|
+ eth_strings->cmd = ETHTOOL_GSTRINGS;
|
|
+ eth_strings->string_set = ETH_SS_STATS;
|
|
+ eth_strings->len = nstats;
|
|
+ ifr.ifr_data = (char *) eth_strings;
|
|
+
|
|
+ err = _etherStats_ioctl_get(fd, SIOCETHTOOL, &ifr, name);
|
|
+ if (err < 0) {
|
|
+ DEBUGMSGTL(("access:etherStatsTable:interface_ioctl_etherstats_get",
|
|
+ "cannot get stats strings information for interface |%s| \n", name));
|
|
+ snmp_log (LOG_ERR, "access:etherStatsTable,interface_ioctl_etherstats_get, cannot get stats strings information for interface |%s| \n", name);
|
|
+
|
|
+ free(eth_strings);
|
|
+ free(eth_stats);
|
|
+ return -4;
|
|
+ }
|
|
+
|
|
+ eth_stats->cmd = ETHTOOL_GSTATS;
|
|
+ eth_stats->n_stats = nstats;
|
|
+ ifr.ifr_data = (char *) eth_stats;
|
|
+ err = _etherStats_ioctl_get(fd, SIOCETHTOOL, &ifr, name);
|
|
+ if (err < 0) {
|
|
+ DEBUGMSGTL(("access:etherStatsTable:interface_ioctl_etherstats_get",
|
|
+ "cannot get stats strings information for interface |%s| \n", name));
|
|
+ snmp_log (LOG_ERR, "access:etherStatsTable,interface_ioctl_etherstats_get, cannot get stats information for interface |%s| \n", name);
|
|
+
|
|
+ free(eth_strings);
|
|
+ free(eth_stats);
|
|
+ return -5;
|
|
+ }
|
|
+
|
|
+ for (i = 0; i < nstats; i++) {
|
|
+ char s[ETH_GSTRING_LEN];
|
|
+
|
|
+ strncpy(s, (const char *) ð_strings->data[i * ETH_GSTRING_LEN],
|
|
+ ETH_GSTRING_LEN);
|
|
+
|
|
+ if (ETHERSTATSJABBERS(s)) {
|
|
+ data->etherStatsJabbers = (u_long)eth_stats->data[i];
|
|
+ rowreq_ctx->column_exists_flags |= COLUMN_ETHERSTATSJABBERS_FLAG;
|
|
+ }
|
|
+ }
|
|
+ free(eth_strings);
|
|
+ free(eth_stats);
|
|
+
|
|
+ return 0;
|
|
+#else
|
|
+ return -6;
|
|
+#endif
|
|
+
|
|
+}
|
|
+
|
|
+
|
|
+/* ioctl wrapper
|
|
+ *
|
|
+ * @param fd : socket fd to use w/ioctl, or -1 to open/close one
|
|
+ * @param which
|
|
+ * @param ifrq
|
|
+ * param ifentry : ifentry to update
|
|
+ * @param name
|
|
+ *
|
|
+ * @retval 0 : success
|
|
+ * @retval -1 : invalid parameters
|
|
+ * @retval -2 : couldn't create socket
|
|
+ * @retval -3 : ioctl call failed
|
|
+ */
|
|
+int
|
|
+_etherStats_ioctl_get(int fd, int which, struct ifreq *ifrq, const char* name)
|
|
+{
|
|
+ int ourfd = -1, rc = 0;
|
|
+
|
|
+ DEBUGMSGTL(("access:etherStatsTable:ioctl", "_etherStats_ioctl_get\n"));
|
|
+ /*
|
|
+ * sanity checks
|
|
+ */
|
|
+ if(NULL == name) {
|
|
+ DEBUGMSGTL(("access:etherStatsTable:ioctl",
|
|
+ "_etherStats_ioctl_get invalid ifname '%s'\n", name));
|
|
+ snmp_log (LOG_ERR, "access:etherStatsTable:ioctl, _etherStats_ioctl_get error on inerface '%s'\n", name);
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * create socket for ioctls
|
|
+ */
|
|
+ if(fd < 0) {
|
|
+ fd = ourfd = socket(AF_INET, SOCK_DGRAM, 0);
|
|
+ if(ourfd < 0) {
|
|
+ DEBUGMSGTL(("access:etherStatsTable:ioctl",
|
|
+ "_etherStats_ioctl_get couldn't create a socket\n", name));
|
|
+ snmp_log (LOG_ERR, "access:etherStatsTable:ioctl, _etherStats_ioctl_get error on inerface '%s'\n", name);
|
|
+
|
|
+ return -2;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ strncpy(ifrq->ifr_name, name, sizeof(ifrq->ifr_name));
|
|
+ ifrq->ifr_name[ sizeof(ifrq->ifr_name)-1 ] = 0;
|
|
+ rc = ioctl(fd, which, ifrq);
|
|
+ if (rc < 0) {
|
|
+ DEBUGMSGTL(("access:etherStatsTable:ioctl",
|
|
+ "_etherStats_ioctl_get ioctl %d returned %d\n", which, rc));
|
|
+ rc = -3;
|
|
+ }
|
|
+
|
|
+ if(ourfd >= 0)
|
|
+ close(ourfd);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable.c net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable.c
|
|
--- net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable.c 1969-12-31 19:00:00.000000000 -0500
|
|
+++ net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable.c 2008-08-25 02:37:27.000000000 -0400
|
|
@@ -0,0 +1,229 @@
|
|
+/*
|
|
+ * Note: this file originally auto-generated by mib2c using
|
|
+ * version : 14170 $ of $
|
|
+ *
|
|
+ * $Id:$
|
|
+ */
|
|
+/** \page MFD helper for etherStatsTable
|
|
+ *
|
|
+ * \section intro Introduction
|
|
+ * Introductory text.
|
|
+ *
|
|
+ */
|
|
+/*
|
|
+ * standard Net-SNMP includes
|
|
+ */
|
|
+#include <net-snmp/net-snmp-config.h>
|
|
+#include <net-snmp/net-snmp-includes.h>
|
|
+#include <net-snmp/agent/net-snmp-agent-includes.h>
|
|
+
|
|
+/*
|
|
+ * include our parent header
|
|
+ */
|
|
+#include "etherStatsTable.h"
|
|
+
|
|
+#include <net-snmp/agent/mib_modules.h>
|
|
+
|
|
+#include "etherStatsTable_interface.h"
|
|
+
|
|
+oid etherStatsTable_oid[] = { ETHERSTATSTABLE_OID };
|
|
+int etherStatsTable_oid_size = OID_LENGTH(etherStatsTable_oid);
|
|
+
|
|
+etherStatsTable_registration etherStatsTable_user_context;
|
|
+
|
|
+void initialize_table_etherStatsTable(void);
|
|
+void shutdown_table_etherStatsTable(void);
|
|
+
|
|
+
|
|
+/**
|
|
+ * Initializes the etherStatsTable module
|
|
+ */
|
|
+void
|
|
+init_etherStatsTable(void)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:init_etherStatsTable",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * TODO:300:o: Perform etherStatsTable one-time module initialization.
|
|
+ */
|
|
+
|
|
+ /*
|
|
+ * here we initialize all the tables we're planning on supporting
|
|
+ */
|
|
+ if (should_init("etherStatsTable"))
|
|
+ initialize_table_etherStatsTable();
|
|
+
|
|
+} /* init_etherStatsTable */
|
|
+
|
|
+/**
|
|
+ * Shut-down the etherStatsTable module (agent is exiting)
|
|
+ */
|
|
+void
|
|
+shutdown_etherStatsTable(void)
|
|
+{
|
|
+ if (should_init("etherStatsTable"))
|
|
+ shutdown_table_etherStatsTable();
|
|
+
|
|
+}
|
|
+
|
|
+/**
|
|
+ * Initialize the table etherStatsTable
|
|
+ * (Define its contents and how it's structured)
|
|
+ */
|
|
+void
|
|
+initialize_table_etherStatsTable(void)
|
|
+{
|
|
+ etherStatsTable_registration *user_context;
|
|
+ u_long flags;
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:initialize_table_etherStatsTable",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * TODO:301:o: Perform etherStatsTable one-time table initialization.
|
|
+ */
|
|
+
|
|
+ /*
|
|
+ * TODO:302:o: |->Initialize etherStatsTable user context
|
|
+ * if you'd like to pass in a pointer to some data for this
|
|
+ * table, allocate or set it up here.
|
|
+ */
|
|
+ /*
|
|
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
|
|
+ * string token is used to add, find or remove pointers.
|
|
+ */
|
|
+ user_context = netsnmp_create_data_list("etherStatsTable", NULL, NULL);
|
|
+
|
|
+ /*
|
|
+ * No support for any flags yet, but in the future you would
|
|
+ * set any flags here.
|
|
+ */
|
|
+ flags = 0;
|
|
+
|
|
+ /*
|
|
+ * call interface initialization code
|
|
+ */
|
|
+ _etherStatsTable_initialize_interface(user_context, flags);
|
|
+} /* initialize_table_etherStatsTable */
|
|
+
|
|
+/**
|
|
+ * Shutdown the table etherStatsTable
|
|
+ */
|
|
+void
|
|
+shutdown_table_etherStatsTable(void)
|
|
+{
|
|
+ /*
|
|
+ * call interface shutdown code
|
|
+ */
|
|
+ _etherStatsTable_shutdown_interface(ðerStatsTable_user_context);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * extra context initialization (eg default values)
|
|
+ *
|
|
+ * @param rowreq_ctx : row request context
|
|
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : no errors
|
|
+ * @retval MFD_ERROR : error (context allocate will fail)
|
|
+ */
|
|
+int
|
|
+etherStatsTable_rowreq_ctx_init(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ void *user_init_ctx)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_rowreq_ctx_init",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:210:o: |-> Perform extra etherStatsTable rowreq initialization. (eg DEFVALS)
|
|
+ */
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsTable_rowreq_ctx_init */
|
|
+
|
|
+/**
|
|
+ * extra context cleanup
|
|
+ *
|
|
+ */
|
|
+void
|
|
+etherStatsTable_rowreq_ctx_cleanup(etherStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_rowreq_ctx_cleanup", "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:211:o: |-> Perform extra etherStatsTable rowreq cleanup.
|
|
+ */
|
|
+} /* etherStatsTable_rowreq_ctx_cleanup */
|
|
+
|
|
+/**
|
|
+ * pre-request callback
|
|
+ *
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success.
|
|
+ * @retval MFD_ERROR : other error
|
|
+ */
|
|
+int
|
|
+etherStatsTable_pre_request(etherStatsTable_registration * user_context)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_pre_request",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * TODO:510:o: Perform etherStatsTable pre-request actions.
|
|
+ */
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsTable_pre_request */
|
|
+
|
|
+/**
|
|
+ * post-request callback
|
|
+ *
|
|
+ * Note:
|
|
+ * New rows have been inserted into the container, and
|
|
+ * deleted rows have been removed from the container and
|
|
+ * released.
|
|
+ *
|
|
+ * @param user_context
|
|
+ * @param rc : MFD_SUCCESS if all requests succeeded
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success.
|
|
+ * @retval MFD_ERROR : other error (ignored)
|
|
+ */
|
|
+int
|
|
+etherStatsTable_post_request(etherStatsTable_registration * user_context,
|
|
+ int rc)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_post_request",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * TODO:511:o: Perform etherStatsTable post-request actions.
|
|
+ */
|
|
+
|
|
+ /*
|
|
+ * check to set if any rows were changed.
|
|
+ */
|
|
+ if (etherStatsTable_dirty_get()) {
|
|
+ /*
|
|
+ * check if request was successful. If so, this would be
|
|
+ * a good place to save data to its persistent store.
|
|
+ */
|
|
+ if (MFD_SUCCESS == rc) {
|
|
+ /*
|
|
+ * save changed rows, if you haven't already
|
|
+ */
|
|
+ }
|
|
+
|
|
+ etherStatsTable_dirty_set(0); /* clear table dirty flag */
|
|
+ }
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsTable_post_request */
|
|
+
|
|
+
|
|
+/** @{ */
|
|
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_access.c net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_access.c
|
|
--- net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_access.c 1969-12-31 19:00:00.000000000 -0500
|
|
+++ net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_access.c 2009-01-12 03:39:26.000000000 -0500
|
|
@@ -0,0 +1,522 @@
|
|
+/*
|
|
+ * Note: this file originally auto-generated by mib2c using
|
|
+ * version : 14170 $ of $
|
|
+ *
|
|
+ * $Id:$
|
|
+ */
|
|
+/*
|
|
+ * standard Net-SNMP includes
|
|
+ */
|
|
+#include <net-snmp/net-snmp-config.h>
|
|
+#include <net-snmp/net-snmp-includes.h>
|
|
+#include <net-snmp/agent/net-snmp-agent-includes.h>
|
|
+
|
|
+/*
|
|
+ * include our parent header
|
|
+ */
|
|
+#include "etherStatsTable.h"
|
|
+#include "etherStatsTable_data_access.h"
|
|
+
|
|
+#if defined(linux)
|
|
+#include "ioctl_imp_common.h"
|
|
+#endif
|
|
+
|
|
+/** @ingroup interface
|
|
+ * @addtogroup data_access data_access: Routines to access data
|
|
+ *
|
|
+ * These routines are used to locate the data used to satisfy
|
|
+ * requests.
|
|
+ *
|
|
+ * @{
|
|
+ */
|
|
+/**********************************************************************
|
|
+ **********************************************************************
|
|
+ ***
|
|
+ *** Table etherStatsTable
|
|
+ ***
|
|
+ **********************************************************************
|
|
+ **********************************************************************/
|
|
+/*
|
|
+ * RMON-MIB::etherStatsTable is subid 1 of statistics.
|
|
+ * Its status is Current.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1, length: 9
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * initialization for etherStatsTable data access
|
|
+ *
|
|
+ * This function is called during startup to allow you to
|
|
+ * allocate any resources you need for the data table.
|
|
+ *
|
|
+ * @param etherStatsTable_reg
|
|
+ * Pointer to etherStatsTable_registration
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success.
|
|
+ * @retval MFD_ERROR : unrecoverable error.
|
|
+ */
|
|
+int
|
|
+etherStatsTable_init_data(etherStatsTable_registration *
|
|
+ etherStatsTable_reg)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_init_data",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * TODO:303:o: Initialize etherStatsTable data.
|
|
+ */
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsTable_init_data */
|
|
+
|
|
+/**
|
|
+ * container overview
|
|
+ *
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * container initialization
|
|
+ *
|
|
+ * @param container_ptr_ptr A pointer to a container pointer. If you
|
|
+ * create a custom container, use this parameter to return it
|
|
+ * to the MFD helper. If set to NULL, the MFD helper will
|
|
+ * allocate a container for you.
|
|
+ * @param cache A pointer to a cache structure. You can set the timeout
|
|
+ * and other cache flags using this pointer.
|
|
+ *
|
|
+ * This function is called at startup to allow you to customize certain
|
|
+ * aspects of the access method. For the most part, it is for advanced
|
|
+ * users. The default code should suffice for most cases. If no custom
|
|
+ * container is allocated, the MFD code will create one for your.
|
|
+ *
|
|
+ * This is also the place to set up cache behavior. The default, to
|
|
+ * simply set the cache timeout, will work well with the default
|
|
+ * container. If you are using a custom container, you may want to
|
|
+ * look at the cache helper documentation to see if there are any
|
|
+ * flags you want to set.
|
|
+ *
|
|
+ * @remark
|
|
+ * This would also be a good place to do any initialization needed
|
|
+ * for you data source. For example, opening a connection to another
|
|
+ * process that will supply the data, opening a database, etc.
|
|
+ */
|
|
+void
|
|
+etherStatsTable_container_init(netsnmp_container ** container_ptr_ptr,
|
|
+ netsnmp_cache * cache)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_container_init",
|
|
+ "called\n"));
|
|
+
|
|
+ if (NULL == container_ptr_ptr) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "bad container param to etherStatsTable_container_init\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * For advanced users, you can use a custom container. If you
|
|
+ * do not create one, one will be created for you.
|
|
+ */
|
|
+ *container_ptr_ptr = NULL;
|
|
+
|
|
+ if (NULL == cache) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "bad cache param to etherStatsTable_container_init\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * TODO:345:A: Set up etherStatsTable cache properties.
|
|
+ *
|
|
+ * Also for advanced users, you can set parameters for the
|
|
+ * cache. Do not change the magic pointer, as it is used
|
|
+ * by the MFD helper. To completely disable caching, set
|
|
+ * cache->enabled to 0.
|
|
+ */
|
|
+ cache->timeout = ETHERSTATSTABLE_CACHE_TIMEOUT; /* seconds */
|
|
+} /* etherStatsTable_container_init */
|
|
+
|
|
+/**
|
|
+ * container shutdown
|
|
+ *
|
|
+ * @param container_ptr A pointer to the container.
|
|
+ *
|
|
+ * This function is called at shutdown to allow you to customize certain
|
|
+ * aspects of the access method. For the most part, it is for advanced
|
|
+ * users. The default code should suffice for most cases.
|
|
+ *
|
|
+ * This function is called before etherStatsTable_container_free().
|
|
+ *
|
|
+ * @remark
|
|
+ * This would also be a good place to do any cleanup needed
|
|
+ * for you data source. For example, closing a connection to another
|
|
+ * process that supplied the data, closing a database, etc.
|
|
+ */
|
|
+void
|
|
+etherStatsTable_container_shutdown(netsnmp_container * container_ptr)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_container_shutdown", "called\n"));
|
|
+
|
|
+ if (NULL == container_ptr) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "bad params to etherStatsTable_container_shutdown\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+} /* etherStatsTable_container_shutdown */
|
|
+
|
|
+/**
|
|
+ * load initial data
|
|
+ *
|
|
+ * TODO:350:M: Implement etherStatsTable data load
|
|
+ * This function will also be called by the cache helper to load
|
|
+ * the container again (after the container free function has been
|
|
+ * called to free the previous contents).
|
|
+ *
|
|
+ * @param container container to which items should be inserted
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success.
|
|
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
|
|
+ * @retval MFD_ERROR : other error.
|
|
+ *
|
|
+ * This function is called to load the index(es) (and data, optionally)
|
|
+ * for the every row in the data set.
|
|
+ *
|
|
+ * @remark
|
|
+ * While loading the data, the only important thing is the indexes.
|
|
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
|
|
+ * structure in memory), it would make sense to update the data here.
|
|
+ * If, however, the accessing the data invovles more work (e.g. parsing
|
|
+ * some other existing data, or peforming calculations to derive the data),
|
|
+ * then you can limit yourself to setting the indexes and saving any
|
|
+ * information you will need later. Then use the saved information in
|
|
+ * etherStatsTable_row_prep() for populating data.
|
|
+ *
|
|
+ * @note
|
|
+ * If you need consistency between rows (like you want statistics
|
|
+ * for each row to be from the same time frame), you should set all
|
|
+ * data here.
|
|
+ *
|
|
+ */
|
|
+int
|
|
+etherStatsTable_container_load(netsnmp_container * container)
|
|
+{
|
|
+ etherStatsTable_rowreq_ctx *rowreq_ctx;
|
|
+ size_t count = 0;
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_container_load",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * TODO:352:M: | |-> set indexes in new etherStatsTable rowreq context.
|
|
+ * data context will be set from the param (unless NULL,
|
|
+ * in which case a new data context will be allocated)
|
|
+ */
|
|
+
|
|
+ /*
|
|
+ * temporary storage for index values
|
|
+ */
|
|
+
|
|
+ /*
|
|
+ * etherStatsIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
|
|
+ */
|
|
+
|
|
+ long etherStatsIndex;
|
|
+ int fd;
|
|
+ int rc = 0, retval = 0;
|
|
+
|
|
+#if defined(linux)
|
|
+ struct ifname *list_head = NULL, *p = NULL;
|
|
+#endif
|
|
+
|
|
+ /*
|
|
+ * create socket for ioctls
|
|
+ */
|
|
+
|
|
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
|
|
+ if(fd < 0) {
|
|
+ snmp_log(LOG_ERR, "could not create socket\n");
|
|
+ return -2;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * get the interface names of the devices present in the system, in case of failure retval suggests the reson for failure
|
|
+ * and list_head contains null
|
|
+ */
|
|
+
|
|
+#if defined(linux)
|
|
+ list_head = etherstats_interface_name_list_get (list_head, &retval);
|
|
+
|
|
+ if (!list_head) {
|
|
+ snmp_log (LOG_ERR, "access:etherStatsTable, error getting the interface names present in the system\n");
|
|
+ DEBUGMSGTL(("access:etherStatsTable", "error getting the interface names present in the system"));
|
|
+ return MFD_ERROR;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * Walk over the list of interface names present in the system and retreive the statistics
|
|
+ */
|
|
+
|
|
+ for (p = list_head; p; p = p->ifn_next) {
|
|
+ u_int flags;
|
|
+
|
|
+ flags = 0;
|
|
+
|
|
+ DEBUGMSGTL(("access:etherStatsTable", "processing '%s'\n", p->name));
|
|
+
|
|
+ /*
|
|
+ * get index via ioctl.
|
|
+ */
|
|
+
|
|
+ etherStatsIndex = (long) etherstats_interface_ioctl_ifindex_get(-1, p->name);
|
|
+
|
|
+ /*
|
|
+ * get the etherstats contents populated, if the device is not an ethernet device
|
|
+ * the operation will not be supported and an error message will be logged
|
|
+ */
|
|
+
|
|
+ rowreq_ctx = etherStatsTable_allocate_rowreq_ctx(NULL);
|
|
+ if (NULL == rowreq_ctx) {
|
|
+ snmp_log(LOG_ERR, "memory allocation failed\n");
|
|
+ return MFD_RESOURCE_UNAVAILABLE;
|
|
+ }
|
|
+
|
|
+ if (MFD_SUCCESS !=
|
|
+ etherStatsTable_indexes_set(rowreq_ctx, etherStatsIndex)) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "error setting index while loading "
|
|
+ "etherStatsTable data.\n");
|
|
+ etherStatsTable_release_rowreq_ctx(rowreq_ctx);
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * TODO:352:r: | |-> populate etherStatsTable data context.
|
|
+ * Populate data context here. (optionally, delay until row prep)
|
|
+ */
|
|
+ /*
|
|
+ * non-TRANSIENT data: no need to copy. set pointer to data
|
|
+ */
|
|
+
|
|
+ memset (&rowreq_ctx->data, 0, sizeof (rowreq_ctx->data));
|
|
+ rc = interface_ioctl_etherstats_get (rowreq_ctx, fd, p->name);
|
|
+
|
|
+ if (rc < 0) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "error getting the statistics for interface |%s| "
|
|
+ "etherStatsTable data, operation might not be supported \n", p->name);
|
|
+ DEBUGMSGTL(("access:etherStatsTable", "error getting the statistics for interface |%s| "
|
|
+ "etherStatsTable data, operation might not be supported\n", p->name));
|
|
+ etherStatsTable_release_rowreq_ctx(rowreq_ctx);
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * insert into table container
|
|
+ */
|
|
+ CONTAINER_INSERT(container, rowreq_ctx);
|
|
+ ++count;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * free the interface names list
|
|
+ */
|
|
+
|
|
+ if ( (etherstats_interface_name_list_free(list_head)) < 0) {
|
|
+ snmp_log(LOG_ERR, "access:etherStatsTable, error freeing the interface name list \n");
|
|
+ DEBUGMSGTL(("access:etherStatsTable", "error freeing the interface name list\n"));
|
|
+ return MFD_ERROR;
|
|
+ }
|
|
+#endif
|
|
+
|
|
+ DEBUGMSGT(("verbose:etherStatsTable:etherStatsTable_container_load",
|
|
+ "inserted %d records\n", count));
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+}
|
|
+ /* etherStatsTable_container_load */
|
|
+
|
|
+
|
|
+/**
|
|
+ * container clean up
|
|
+ *
|
|
+ * @param container container with all current items
|
|
+ *
|
|
+ * This optional callback is called prior to all
|
|
+ * item's being removed from the container. If you
|
|
+ * need to do any processing before that, do it here.
|
|
+ *
|
|
+ * @note
|
|
+ * The MFD helper will take care of releasing all the row contexts.
|
|
+ *
|
|
+ */
|
|
+void
|
|
+etherStatsTable_container_free(netsnmp_container * container)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_container_free",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * TODO:380:M: Free etherStatsTable container data.
|
|
+ */
|
|
+} /* etherStatsTable_container_free */
|
|
+
|
|
+/**
|
|
+ * prepare row for processing.
|
|
+ *
|
|
+ * When the agent has located the row for a request, this function is
|
|
+ * called to prepare the row for processing. If you fully populated
|
|
+ * the data context during the index setup phase, you may not need to
|
|
+ * do anything.
|
|
+ *
|
|
+ * @param rowreq_ctx pointer to a context.
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success.
|
|
+ * @retval MFD_ERROR : other error.
|
|
+ */
|
|
+int
|
|
+etherStatsTable_row_prep(etherStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_row_prep",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:390:o: Prepare row for request.
|
|
+ * If populating row data was delayed, this is the place to
|
|
+ * fill in the row for this request.
|
|
+ */
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsTable_row_prep */
|
|
+
|
|
+/*
|
|
+ * TODO:420:r: Implement etherStatsTable index validation.
|
|
+ */
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsIndex
|
|
+ * etherStatsIndex is subid 1 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.1
|
|
+ * Description:
|
|
+The value of this object uniquely identifies this
|
|
+ etherStats entry.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 1 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ * Ranges: 1 - 65535;
|
|
+ *
|
|
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
|
|
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
|
|
+ */
|
|
+/**
|
|
+ * check validity of etherStatsIndex index portion
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : the incoming value is legal
|
|
+ * @retval MFD_ERROR : the incoming value is NOT legal
|
|
+ *
|
|
+ * @note this is not the place to do any checks for the sanity
|
|
+ * of multiple indexes. Those types of checks should be done in the
|
|
+ * etherStatsTable_validate_index() function.
|
|
+ *
|
|
+ * @note Also keep in mind that if the index refers to a row in this or
|
|
+ * some other table, you can't check for that row here to make
|
|
+ * decisions, since that row might not be created yet, but may
|
|
+ * be created during the processing this request. If you have
|
|
+ * such checks, they should be done in the check_dependencies
|
|
+ * function, because any new/deleted/changed rows should be
|
|
+ * available then.
|
|
+ *
|
|
+ * The following checks have already been done for you:
|
|
+ * The value is in (one of) the range set(s): 1 - 65535
|
|
+ *
|
|
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
|
|
+ */
|
|
+int
|
|
+etherStatsIndex_check_index(etherStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsIndex_check_index",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:426:M: |-> Check etherStatsTable index etherStatsIndex.
|
|
+ * check that index value in the table context is legal.
|
|
+ * (rowreq_ctx->tbl_index.etherStatsIndex)
|
|
+ */
|
|
+
|
|
+ return MFD_SUCCESS; /* etherStatsIndex index ok */
|
|
+} /* etherStatsIndex_check_index */
|
|
+
|
|
+/**
|
|
+ * verify specified index is valid.
|
|
+ *
|
|
+ * This check is independent of whether or not the values specified for
|
|
+ * the columns of the new row are valid. Column values and row consistency
|
|
+ * will be checked later. At this point, only the index values should be
|
|
+ * checked.
|
|
+ *
|
|
+ * All of the individual index validation functions have been called, so this
|
|
+ * is the place to make sure they are valid as a whole when combined. If
|
|
+ * you only have one index, then you probably don't need to do anything else
|
|
+ * here.
|
|
+ *
|
|
+ * @note Keep in mind that if the indexes refer to a row in this or
|
|
+ * some other table, you can't check for that row here to make
|
|
+ * decisions, since that row might not be created yet, but may
|
|
+ * be created during the processing this request. If you have
|
|
+ * such checks, they should be done in the check_dependencies
|
|
+ * function, because any new/deleted/changed rows should be
|
|
+ * available then.
|
|
+ *
|
|
+ *
|
|
+ * @param etherStatsTable_reg
|
|
+ * Pointer to the user registration data
|
|
+ * @param etherStatsTable_rowreq_ctx
|
|
+ * Pointer to the users context.
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_CANNOT_CREATE_NOW : index not valid right now
|
|
+ * @retval MFD_CANNOT_CREATE_EVER : index never valid
|
|
+ */
|
|
+int
|
|
+etherStatsTable_validate_index(etherStatsTable_registration *
|
|
+ etherStatsTable_reg,
|
|
+ etherStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+ int rc = MFD_SUCCESS;
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_validate_index",
|
|
+ "called\n"));
|
|
+
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:430:M: |-> Validate potential etherStatsTable index.
|
|
+ */
|
|
+ if (1) {
|
|
+ snmp_log(LOG_WARNING, "invalid index for a new row in the "
|
|
+ "etherStatsTable table.\n");
|
|
+ /*
|
|
+ * determine failure type.
|
|
+ *
|
|
+ * If the index could not ever be created, return MFD_NOT_EVER
|
|
+ * If the index can not be created under the present circumstances
|
|
+ * (even though it could be created under other circumstances),
|
|
+ * return MFD_NOT_NOW.
|
|
+ */
|
|
+ if (0) {
|
|
+ return MFD_CANNOT_CREATE_EVER;
|
|
+ } else {
|
|
+ return MFD_CANNOT_CREATE_NOW;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return rc;
|
|
+} /* etherStatsTable_validate_index */
|
|
+
|
|
+/** @} */
|
|
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_access.h net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_access.h
|
|
--- net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_access.h 1969-12-31 19:00:00.000000000 -0500
|
|
+++ net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_access.h 2008-08-31 11:04:55.000000000 -0400
|
|
@@ -0,0 +1,80 @@
|
|
+/*
|
|
+ * Note: this file originally auto-generated by mib2c using
|
|
+ * version : 14170 $ of $
|
|
+ *
|
|
+ * $Id:$
|
|
+ */
|
|
+#ifndef ETHERSTATSTABLE_DATA_ACCESS_H
|
|
+#define ETHERSTATSTABLE_DATA_ACCESS_H
|
|
+
|
|
+#ifdef __cplusplus
|
|
+extern "C" {
|
|
+#endif
|
|
+
|
|
+
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * function declarations
|
|
+ */
|
|
+
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * Table declarations
|
|
+ */
|
|
+/**********************************************************************
|
|
+ **********************************************************************
|
|
+ ***
|
|
+ *** Table etherStatsTable
|
|
+ ***
|
|
+ **********************************************************************
|
|
+ **********************************************************************/
|
|
+ /*
|
|
+ * RMON-MIB::etherStatsTable is subid 1 of statistics.
|
|
+ * Its status is Current.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1, length: 9
|
|
+ */
|
|
+
|
|
+
|
|
+ int etherStatsTable_init_data(etherStatsTable_registration
|
|
+ * etherStatsTable_reg);
|
|
+
|
|
+
|
|
+ /*
|
|
+ * TODO:180:o: Review etherStatsTable cache timeout.
|
|
+ * The number of seconds before the cache times out
|
|
+ */
|
|
+#define ETHERSTATSTABLE_CACHE_TIMEOUT 60
|
|
+
|
|
+ void etherStatsTable_container_init(netsnmp_container **
|
|
+ container_ptr_ptr,
|
|
+ netsnmp_cache * cache);
|
|
+ void etherStatsTable_container_shutdown(netsnmp_container *
|
|
+ container_ptr);
|
|
+
|
|
+ int etherStatsTable_container_load(netsnmp_container *
|
|
+ container);
|
|
+ void etherStatsTable_container_free(netsnmp_container *
|
|
+ container);
|
|
+
|
|
+ int etherStatsTable_cache_load(netsnmp_container *
|
|
+ container);
|
|
+ void etherStatsTable_cache_free(netsnmp_container *
|
|
+ container);
|
|
+
|
|
+#define MAX_LINE_SIZE 256
|
|
+
|
|
+ int etherStatsTable_row_prep(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ int
|
|
+ etherStatsTable_validate_index(etherStatsTable_registration *
|
|
+ etherStatsTable_reg,
|
|
+ etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+ int etherStatsIndex_check_index(etherStatsTable_rowreq_ctx * rowreq_ctx); /* internal */
|
|
+
|
|
+
|
|
+#ifdef __cplusplus
|
|
+}
|
|
+#endif
|
|
+#endif /* ETHERSTATSTABLE_DATA_ACCESS_H */
|
|
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_get.c net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_get.c
|
|
--- net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_get.c 1969-12-31 19:00:00.000000000 -0500
|
|
+++ net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_get.c 2008-08-25 09:31:32.000000000 -0400
|
|
@@ -0,0 +1,1411 @@
|
|
+/*
|
|
+ * Note: this file originally auto-generated by mib2c using
|
|
+ * version : 12088 $ of $
|
|
+ *
|
|
+ * $Id:$
|
|
+ */
|
|
+/*
|
|
+ * standard Net-SNMP includes
|
|
+ */
|
|
+#include <net-snmp/net-snmp-config.h>
|
|
+#include <net-snmp/net-snmp-includes.h>
|
|
+#include <net-snmp/agent/net-snmp-agent-includes.h>
|
|
+
|
|
+/*
|
|
+ * include our parent header
|
|
+ */
|
|
+#include "etherStatsTable.h"
|
|
+
|
|
+
|
|
+/** @defgroup data_get data_get: Routines to get data
|
|
+ *
|
|
+ * TODO:230:M: Implement etherStatsTable get routines.
|
|
+ * TODO:240:M: Implement etherStatsTable mapping routines (if any).
|
|
+ *
|
|
+ * These routine are used to get the value for individual objects. The
|
|
+ * row context is passed, along with a pointer to the memory where the
|
|
+ * value should be copied.
|
|
+ *
|
|
+ * @{
|
|
+ */
|
|
+/**********************************************************************
|
|
+ **********************************************************************
|
|
+ ***
|
|
+ *** Table etherStatsTable
|
|
+ ***
|
|
+ **********************************************************************
|
|
+ **********************************************************************/
|
|
+/*
|
|
+ * RMON-MIB::etherStatsTable is subid 1 of statistics.
|
|
+ * Its status is Current.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1, length: 9
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * ---------------------------------------------------------------------
|
|
+ * * TODO:200:r: Implement etherStatsTable data context functions.
|
|
+ */
|
|
+
|
|
+
|
|
+/**
|
|
+ * set mib index(es)
|
|
+ *
|
|
+ * @param tbl_idx mib index structure
|
|
+ * @param etherStatsIndex_val
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success.
|
|
+ * @retval MFD_ERROR : other error.
|
|
+ *
|
|
+ * @remark
|
|
+ * This convenience function is useful for setting all the MIB index
|
|
+ * components with a single function call. It is assume that the C values
|
|
+ * have already been mapped from their native/rawformat to the MIB format.
|
|
+ */
|
|
+int
|
|
+etherStatsTable_indexes_set_tbl_idx(etherStatsTable_mib_index * tbl_idx,
|
|
+ long etherStatsIndex_val)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_indexes_set_tbl_idx", "called\n"));
|
|
+
|
|
+ /*
|
|
+ * etherStatsIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
|
|
+ */
|
|
+ tbl_idx->etherStatsIndex = etherStatsIndex_val;
|
|
+
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsTable_indexes_set_tbl_idx */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ * set row context indexes
|
|
+ *
|
|
+ * @param reqreq_ctx the row context that needs updated indexes
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success.
|
|
+ * @retval MFD_ERROR : other error.
|
|
+ *
|
|
+ * @remark
|
|
+ * This function sets the mib indexs, then updates the oid indexs
|
|
+ * from the mib index.
|
|
+ */
|
|
+int
|
|
+etherStatsTable_indexes_set(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ long etherStatsIndex_val)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_indexes_set",
|
|
+ "called\n"));
|
|
+
|
|
+ if (MFD_SUCCESS !=
|
|
+ etherStatsTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
|
|
+ etherStatsIndex_val))
|
|
+ return MFD_ERROR;
|
|
+
|
|
+ /*
|
|
+ * convert mib index to oid index
|
|
+ */
|
|
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
|
|
+ if (0 != etherStatsTable_index_to_oid(&rowreq_ctx->oid_idx,
|
|
+ &rowreq_ctx->tbl_idx)) {
|
|
+ return MFD_ERROR;
|
|
+ }
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsTable_indexes_set */
|
|
+
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsDataSource
|
|
+ * etherStatsDataSource is subid 2 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is Create.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.2
|
|
+ * Description:
|
|
+This object identifies the source of the data that
|
|
+ this etherStats entry is configured to analyze. This
|
|
+ source can be any ethernet interface on this device.
|
|
+ In order to identify a particular interface, this object
|
|
+ shall identify the instance of the ifIndex object,
|
|
+ defined in RFC 2233 [17], for the desired interface.
|
|
+ For example, if an entry were to receive data from
|
|
+ interface #1, this object would be set to ifIndex.1.
|
|
+
|
|
+ The statistics in this group reflect all packets
|
|
+ on the local network segment attached to the identified
|
|
+ interface.
|
|
+
|
|
+ An agent may or may not be able to tell if fundamental
|
|
+ changes to the media of the interface have occurred and
|
|
+ necessitate an invalidation of this entry. For example, a
|
|
+ hot-pluggable ethernet card could be pulled out and replaced
|
|
+ by a token-ring card. In such a case, if the agent has such
|
|
+ knowledge of the change, it is recommended that it
|
|
+ invalidate this entry.
|
|
+
|
|
+ This object may not be modified if the associated
|
|
+ etherStatsStatus object is equal to valid(1).
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 1
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is OBJECTID (based on perltype OBJECTID)
|
|
+ * The net-snmp type is ASN_OBJECT_ID. The C type decl is oid (oid)
|
|
+ * This data type requires a length.
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsDataSource data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsDataSource_val_ptr_ptr
|
|
+ * Pointer to storage for a oid variable
|
|
+ * @param etherStatsDataSource_val_ptr_len_ptr
|
|
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
|
|
+ * pointed to by etherStatsDataSource.
|
|
+ * On exit, this value should contain the data size (in bytes).
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+*
|
|
+ * @note If you need more than (*etherStatsDataSource_val_ptr_len_ptr) bytes of memory,
|
|
+ * allocate it using malloc() and update etherStatsDataSource_val_ptr_ptr.
|
|
+ * <b>DO NOT</b> free the previous pointer.
|
|
+ * The MFD helper will release the memory you allocate.
|
|
+ *
|
|
+ * @remark If you call this function yourself, you are responsible
|
|
+ * for checking if the pointer changed, and freeing any
|
|
+ * previously allocated memory. (Not necessary if you pass
|
|
+ * in a pointer to static memory, obviously.)
|
|
+ */
|
|
+int
|
|
+etherStatsDataSource_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ oid ** etherStatsDataSource_val_ptr_ptr,
|
|
+ size_t *etherStatsDataSource_val_ptr_len_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer and enough storage */
|
|
+ netsnmp_assert((NULL != etherStatsDataSource_val_ptr_ptr)
|
|
+ && (NULL != *etherStatsDataSource_val_ptr_ptr));
|
|
+ netsnmp_assert(NULL != etherStatsDataSource_val_ptr_len_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsDataSource_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsDataSource data.
|
|
+ * copy (* etherStatsDataSource_val_ptr_ptr ) data and (* etherStatsDataSource_val_ptr_len_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ /*
|
|
+ * make sure there is enough space for etherStatsDataSource data
|
|
+ */
|
|
+ if ((NULL == (*etherStatsDataSource_val_ptr_ptr)) ||
|
|
+ ((*etherStatsDataSource_val_ptr_len_ptr) <
|
|
+ (rowreq_ctx->data.etherStatsDataSource_len *
|
|
+ sizeof(rowreq_ctx->data.etherStatsDataSource[0])))) {
|
|
+ /*
|
|
+ * allocate space for etherStatsDataSource data
|
|
+ */
|
|
+ (*etherStatsDataSource_val_ptr_ptr) =
|
|
+ malloc(rowreq_ctx->data.etherStatsDataSource_len *
|
|
+ sizeof(rowreq_ctx->data.etherStatsDataSource[0]));
|
|
+ if (NULL == (*etherStatsDataSource_val_ptr_ptr)) {
|
|
+ snmp_log(LOG_ERR, "could not allocate memory\n");
|
|
+ return MFD_ERROR;
|
|
+ }
|
|
+ }
|
|
+ (*etherStatsDataSource_val_ptr_len_ptr) =
|
|
+ rowreq_ctx->data.etherStatsDataSource_len *
|
|
+ sizeof(rowreq_ctx->data.etherStatsDataSource[0]);
|
|
+ memcpy((*etherStatsDataSource_val_ptr_ptr),
|
|
+ rowreq_ctx->data.etherStatsDataSource,
|
|
+ rowreq_ctx->data.etherStatsDataSource_len *
|
|
+ sizeof(rowreq_ctx->data.etherStatsDataSource[0]));
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsDataSource_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsDropEvents
|
|
+ * etherStatsDropEvents is subid 3 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.3
|
|
+ * Description:
|
|
+The total number of events in which packets
|
|
+ were dropped by the probe due to lack of resources.
|
|
+ Note that this number is not necessarily the number of
|
|
+ packets dropped; it is just the number of times this
|
|
+ condition has been detected.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER (based on perltype COUNTER)
|
|
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsDropEvents data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsDropEvents_val_ptr
|
|
+ * Pointer to storage for a u_long variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+etherStatsDropEvents_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * etherStatsDropEvents_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != etherStatsDropEvents_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsDropEvents_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsDropEvents data.
|
|
+ * copy (* etherStatsDropEvents_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ (*etherStatsDropEvents_val_ptr) =
|
|
+ rowreq_ctx->data.etherStatsDropEvents;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsDropEvents_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsOctets
|
|
+ * etherStatsOctets is subid 4 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.4
|
|
+ * Description:
|
|
+The total number of octets of data (including
|
|
+ those in bad packets) received on the
|
|
+ network (excluding framing bits but including
|
|
+ FCS octets).
|
|
+
|
|
+ This object can be used as a reasonable estimate of
|
|
+ 10-Megabit ethernet utilization. If greater precision is
|
|
+ desired, the etherStatsPkts and etherStatsOctets objects
|
|
+ should be sampled before and after a common interval. The
|
|
+ differences in the sampled values are Pkts and Octets,
|
|
+ respectively, and the number of seconds in the interval is
|
|
+ Interval. These values are used to calculate the Utilization
|
|
+ as follows:
|
|
+
|
|
+ Pkts * (9.6 + 6.4) + (Octets * .8)
|
|
+ Utilization = -------------------------------------
|
|
+ Interval * 10,000
|
|
+
|
|
+ The result of this equation is the value Utilization which
|
|
+ is the percent utilization of the ethernet segment on a
|
|
+ scale of 0 to 100 percent.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER (based on perltype COUNTER)
|
|
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsOctets data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsOctets_val_ptr
|
|
+ * Pointer to storage for a u_long variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+etherStatsOctets_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * etherStatsOctets_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != etherStatsOctets_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsOctets_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsOctets data.
|
|
+ * copy (* etherStatsOctets_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ (*etherStatsOctets_val_ptr) = rowreq_ctx->data.etherStatsOctets;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsOctets_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsPkts
|
|
+ * etherStatsPkts is subid 5 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.5
|
|
+ * Description:
|
|
+The total number of packets (including bad packets,
|
|
+ broadcast packets, and multicast packets) received.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER (based on perltype COUNTER)
|
|
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsPkts data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsPkts_val_ptr
|
|
+ * Pointer to storage for a u_long variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+etherStatsPkts_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * etherStatsPkts_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != etherStatsPkts_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsPkts_get", "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsPkts data.
|
|
+ * copy (* etherStatsPkts_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ (*etherStatsPkts_val_ptr) = rowreq_ctx->data.etherStatsPkts;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsPkts_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsBroadcastPkts
|
|
+ * etherStatsBroadcastPkts is subid 6 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.6
|
|
+ * Description:
|
|
+The total number of good packets received that were
|
|
+ directed to the broadcast address. Note that this
|
|
+ does not include multicast packets.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER (based on perltype COUNTER)
|
|
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsBroadcastPkts data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsBroadcastPkts_val_ptr
|
|
+ * Pointer to storage for a u_long variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+etherStatsBroadcastPkts_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * etherStatsBroadcastPkts_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != etherStatsBroadcastPkts_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsBroadcastPkts_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsBroadcastPkts data.
|
|
+ * copy (* etherStatsBroadcastPkts_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ (*etherStatsBroadcastPkts_val_ptr) =
|
|
+ rowreq_ctx->data.etherStatsBroadcastPkts;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsBroadcastPkts_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsMulticastPkts
|
|
+ * etherStatsMulticastPkts is subid 7 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.7
|
|
+ * Description:
|
|
+The total number of good packets received that were
|
|
+ directed to a multicast address. Note that this number
|
|
+ does not include packets directed to the broadcast
|
|
+
|
|
+ address.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER (based on perltype COUNTER)
|
|
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsMulticastPkts data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsMulticastPkts_val_ptr
|
|
+ * Pointer to storage for a u_long variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+etherStatsMulticastPkts_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * etherStatsMulticastPkts_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != etherStatsMulticastPkts_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsMulticastPkts_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsMulticastPkts data.
|
|
+ * copy (* etherStatsMulticastPkts_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ (*etherStatsMulticastPkts_val_ptr) =
|
|
+ rowreq_ctx->data.etherStatsMulticastPkts;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsMulticastPkts_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsCRCAlignErrors
|
|
+ * etherStatsCRCAlignErrors is subid 8 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.8
|
|
+ * Description:
|
|
+The total number of packets received that
|
|
+ had a length (excluding framing bits, but
|
|
+ including FCS octets) of between 64 and 1518
|
|
+ octets, inclusive, but had either a bad
|
|
+ Frame Check Sequence (FCS) with an integral
|
|
+ number of octets (FCS Error) or a bad FCS with
|
|
+ a non-integral number of octets (Alignment Error).
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER (based on perltype COUNTER)
|
|
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsCRCAlignErrors data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsCRCAlignErrors_val_ptr
|
|
+ * Pointer to storage for a u_long variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+etherStatsCRCAlignErrors_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * etherStatsCRCAlignErrors_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != etherStatsCRCAlignErrors_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsCRCAlignErrors_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsCRCAlignErrors data.
|
|
+ * copy (* etherStatsCRCAlignErrors_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ (*etherStatsCRCAlignErrors_val_ptr) =
|
|
+ rowreq_ctx->data.etherStatsCRCAlignErrors;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsCRCAlignErrors_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsUndersizePkts
|
|
+ * etherStatsUndersizePkts is subid 9 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.9
|
|
+ * Description:
|
|
+The total number of packets received that were
|
|
+ less than 64 octets long (excluding framing bits,
|
|
+ but including FCS octets) and were otherwise well
|
|
+ formed.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER (based on perltype COUNTER)
|
|
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsUndersizePkts data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsUndersizePkts_val_ptr
|
|
+ * Pointer to storage for a u_long variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+etherStatsUndersizePkts_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * etherStatsUndersizePkts_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != etherStatsUndersizePkts_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsUndersizePkts_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsUndersizePkts data.
|
|
+ * copy (* etherStatsUndersizePkts_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ (*etherStatsUndersizePkts_val_ptr) =
|
|
+ rowreq_ctx->data.etherStatsUndersizePkts;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsUndersizePkts_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsOversizePkts
|
|
+ * etherStatsOversizePkts is subid 10 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.10
|
|
+ * Description:
|
|
+The total number of packets received that were
|
|
+ longer than 1518 octets (excluding framing bits,
|
|
+ but including FCS octets) and were otherwise
|
|
+ well formed.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER (based on perltype COUNTER)
|
|
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsOversizePkts data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsOversizePkts_val_ptr
|
|
+ * Pointer to storage for a u_long variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+etherStatsOversizePkts_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * etherStatsOversizePkts_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != etherStatsOversizePkts_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsOversizePkts_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsOversizePkts data.
|
|
+ * copy (* etherStatsOversizePkts_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ (*etherStatsOversizePkts_val_ptr) =
|
|
+ rowreq_ctx->data.etherStatsOversizePkts;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsOversizePkts_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsFragments
|
|
+ * etherStatsFragments is subid 11 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.11
|
|
+ * Description:
|
|
+The total number of packets received that were less than
|
|
+ 64 octets in length (excluding framing bits but including
|
|
+ FCS octets) and had either a bad Frame Check Sequence
|
|
+ (FCS) with an integral number of octets (FCS Error) or a
|
|
+ bad FCS with a non-integral number of octets (Alignment
|
|
+ Error).
|
|
+
|
|
+ Note that it is entirely normal for etherStatsFragments to
|
|
+ increment. This is because it counts both runts (which are
|
|
+ normal occurrences due to collisions) and noise hits.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER (based on perltype COUNTER)
|
|
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsFragments data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsFragments_val_ptr
|
|
+ * Pointer to storage for a u_long variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+etherStatsFragments_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * etherStatsFragments_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != etherStatsFragments_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsFragments_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsFragments data.
|
|
+ * copy (* etherStatsFragments_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ (*etherStatsFragments_val_ptr) = rowreq_ctx->data.etherStatsFragments;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsFragments_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsJabbers
|
|
+ * etherStatsJabbers is subid 12 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.12
|
|
+ * Description:
|
|
+The total number of packets received that were
|
|
+ longer than 1518 octets (excluding framing bits,
|
|
+ but including FCS octets), and had either a bad
|
|
+ Frame Check Sequence (FCS) with an integral number
|
|
+ of octets (FCS Error) or a bad FCS with a non-integral
|
|
+ number of octets (Alignment Error).
|
|
+
|
|
+ Note that this definition of jabber is different
|
|
+ than the definition in IEEE-802.3 section 8.2.1.5
|
|
+ (10BASE5) and section 10.3.1.4 (10BASE2). These
|
|
+ documents define jabber as the condition where any
|
|
+ packet exceeds 20 ms. The allowed range to detect
|
|
+ jabber is between 20 ms and 150 ms.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER (based on perltype COUNTER)
|
|
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsJabbers data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsJabbers_val_ptr
|
|
+ * Pointer to storage for a u_long variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+etherStatsJabbers_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * etherStatsJabbers_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != etherStatsJabbers_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsJabbers_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsJabbers data.
|
|
+ * copy (* etherStatsJabbers_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ (*etherStatsJabbers_val_ptr) = rowreq_ctx->data.etherStatsJabbers;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsJabbers_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsCollisions
|
|
+ * etherStatsCollisions is subid 13 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.13
|
|
+ * Description:
|
|
+The best estimate of the total number of collisions
|
|
+ on this Ethernet segment.
|
|
+
|
|
+ The value returned will depend on the location of the
|
|
+ RMON probe. Section 8.2.1.3 (10BASE-5) and section
|
|
+ 10.3.1.3 (10BASE-2) of IEEE standard 802.3 states that a
|
|
+ station must detect a collision, in the receive mode, if
|
|
+ three or more stations are transmitting simultaneously. A
|
|
+ repeater port must detect a collision when two or more
|
|
+
|
|
+ stations are transmitting simultaneously. Thus a probe
|
|
+ placed on a repeater port could record more collisions
|
|
+ than a probe connected to a station on the same segment
|
|
+ would.
|
|
+
|
|
+ Probe location plays a much smaller role when considering
|
|
+ 10BASE-T. 14.2.1.4 (10BASE-T) of IEEE standard 802.3
|
|
+ defines a collision as the simultaneous presence of signals
|
|
+ on the DO and RD circuits (transmitting and receiving
|
|
+ at the same time). A 10BASE-T station can only detect
|
|
+ collisions when it is transmitting. Thus probes placed on
|
|
+ a station and a repeater, should report the same number of
|
|
+ collisions.
|
|
+
|
|
+ Note also that an RMON probe inside a repeater should
|
|
+ ideally report collisions between the repeater and one or
|
|
+ more other hosts (transmit collisions as defined by IEEE
|
|
+ 802.3k) plus receiver collisions observed on any coax
|
|
+ segments to which the repeater is connected.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER (based on perltype COUNTER)
|
|
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsCollisions data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsCollisions_val_ptr
|
|
+ * Pointer to storage for a u_long variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+etherStatsCollisions_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * etherStatsCollisions_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != etherStatsCollisions_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsCollisions_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsCollisions data.
|
|
+ * copy (* etherStatsCollisions_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ (*etherStatsCollisions_val_ptr) =
|
|
+ rowreq_ctx->data.etherStatsCollisions;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsCollisions_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsPkts64Octets
|
|
+ * etherStatsPkts64Octets is subid 14 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.14
|
|
+ * Description:
|
|
+The total number of packets (including bad
|
|
+ packets) received that were 64 octets in length
|
|
+ (excluding framing bits but including FCS octets).
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER (based on perltype COUNTER)
|
|
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsPkts64Octets data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsPkts64Octets_val_ptr
|
|
+ * Pointer to storage for a u_long variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+etherStatsPkts64Octets_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * etherStatsPkts64Octets_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != etherStatsPkts64Octets_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsPkts64Octets_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsPkts64Octets data.
|
|
+ * copy (* etherStatsPkts64Octets_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ (*etherStatsPkts64Octets_val_ptr) =
|
|
+ rowreq_ctx->data.etherStatsPkts64Octets;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsPkts64Octets_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsPkts65to127Octets
|
|
+ * etherStatsPkts65to127Octets is subid 15 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.15
|
|
+ * Description:
|
|
+The total number of packets (including bad
|
|
+ packets) received that were between
|
|
+ 65 and 127 octets in length inclusive
|
|
+ (excluding framing bits but including FCS octets).
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER (based on perltype COUNTER)
|
|
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsPkts65to127Octets data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsPkts65to127Octets_val_ptr
|
|
+ * Pointer to storage for a u_long variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+etherStatsPkts65to127Octets_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsPkts65to127Octets_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != etherStatsPkts65to127Octets_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsPkts65to127Octets_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsPkts65to127Octets data.
|
|
+ * copy (* etherStatsPkts65to127Octets_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ (*etherStatsPkts65to127Octets_val_ptr) =
|
|
+ rowreq_ctx->data.etherStatsPkts65to127Octets;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsPkts65to127Octets_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsPkts128to255Octets
|
|
+ * etherStatsPkts128to255Octets is subid 16 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.16
|
|
+ * Description:
|
|
+The total number of packets (including bad
|
|
+ packets) received that were between
|
|
+ 128 and 255 octets in length inclusive
|
|
+ (excluding framing bits but including FCS octets).
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER (based on perltype COUNTER)
|
|
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsPkts128to255Octets data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsPkts128to255Octets_val_ptr
|
|
+ * Pointer to storage for a u_long variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+etherStatsPkts128to255Octets_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsPkts128to255Octets_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != etherStatsPkts128to255Octets_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsPkts128to255Octets_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsPkts128to255Octets data.
|
|
+ * copy (* etherStatsPkts128to255Octets_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ (*etherStatsPkts128to255Octets_val_ptr) =
|
|
+ rowreq_ctx->data.etherStatsPkts128to255Octets;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsPkts128to255Octets_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsPkts256to511Octets
|
|
+ * etherStatsPkts256to511Octets is subid 17 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.17
|
|
+ * Description:
|
|
+The total number of packets (including bad
|
|
+ packets) received that were between
|
|
+ 256 and 511 octets in length inclusive
|
|
+ (excluding framing bits but including FCS octets).
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER (based on perltype COUNTER)
|
|
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsPkts256to511Octets data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsPkts256to511Octets_val_ptr
|
|
+ * Pointer to storage for a u_long variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+etherStatsPkts256to511Octets_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsPkts256to511Octets_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != etherStatsPkts256to511Octets_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsPkts256to511Octets_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsPkts256to511Octets data.
|
|
+ * copy (* etherStatsPkts256to511Octets_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ (*etherStatsPkts256to511Octets_val_ptr) =
|
|
+ rowreq_ctx->data.etherStatsPkts256to511Octets;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsPkts256to511Octets_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsPkts512to1023Octets
|
|
+ * etherStatsPkts512to1023Octets is subid 18 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.18
|
|
+ * Description:
|
|
+The total number of packets (including bad
|
|
+ packets) received that were between
|
|
+ 512 and 1023 octets in length inclusive
|
|
+ (excluding framing bits but including FCS octets).
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER (based on perltype COUNTER)
|
|
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsPkts512to1023Octets data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsPkts512to1023Octets_val_ptr
|
|
+ * Pointer to storage for a u_long variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+etherStatsPkts512to1023Octets_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsPkts512to1023Octets_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != etherStatsPkts512to1023Octets_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsPkts512to1023Octets_get", "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsPkts512to1023Octets data.
|
|
+ * copy (* etherStatsPkts512to1023Octets_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ (*etherStatsPkts512to1023Octets_val_ptr) =
|
|
+ rowreq_ctx->data.etherStatsPkts512to1023Octets;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsPkts512to1023Octets_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsPkts1024to1518Octets
|
|
+ * etherStatsPkts1024to1518Octets is subid 19 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.19
|
|
+ * Description:
|
|
+The total number of packets (including bad
|
|
+ packets) received that were between
|
|
+ 1024 and 1518 octets in length inclusive
|
|
+ (excluding framing bits but including FCS octets).
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER (based on perltype COUNTER)
|
|
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsPkts1024to1518Octets data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsPkts1024to1518Octets_val_ptr
|
|
+ * Pointer to storage for a u_long variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+etherStatsPkts1024to1518Octets_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsPkts1024to1518Octets_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != etherStatsPkts1024to1518Octets_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsPkts1024to1518Octets_get", "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsPkts1024to1518Octets data.
|
|
+ * copy (* etherStatsPkts1024to1518Octets_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ (*etherStatsPkts1024to1518Octets_val_ptr) =
|
|
+ rowreq_ctx->data.etherStatsPkts1024to1518Octets;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsPkts1024to1518Octets_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsOwner
|
|
+ * etherStatsOwner is subid 20 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is Create.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.20
|
|
+ * Description:
|
|
+The entity that configured this entry and is therefore
|
|
+ using the resources assigned to it.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 1 hashint 0
|
|
+ * settable 1
|
|
+ *
|
|
+ * Ranges: 0 - 127;
|
|
+ *
|
|
+ * Its syntax is OwnerString (based on perltype OCTETSTR)
|
|
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
|
|
+ * This data type requires a length. (Max 127)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsOwner data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsOwner_val_ptr_ptr
|
|
+ * Pointer to storage for a char variable
|
|
+ * @param etherStatsOwner_val_ptr_len_ptr
|
|
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
|
|
+ * pointed to by etherStatsOwner.
|
|
+ * On exit, this value should contain the data size (in bytes).
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+*
|
|
+ * @note If you need more than (*etherStatsOwner_val_ptr_len_ptr) bytes of memory,
|
|
+ * allocate it using malloc() and update etherStatsOwner_val_ptr_ptr.
|
|
+ * <b>DO NOT</b> free the previous pointer.
|
|
+ * The MFD helper will release the memory you allocate.
|
|
+ *
|
|
+ * @remark If you call this function yourself, you are responsible
|
|
+ * for checking if the pointer changed, and freeing any
|
|
+ * previously allocated memory. (Not necessary if you pass
|
|
+ * in a pointer to static memory, obviously.)
|
|
+ */
|
|
+int
|
|
+etherStatsOwner_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ char **etherStatsOwner_val_ptr_ptr,
|
|
+ size_t *etherStatsOwner_val_ptr_len_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer and enough storage */
|
|
+ netsnmp_assert((NULL != etherStatsOwner_val_ptr_ptr)
|
|
+ && (NULL != *etherStatsOwner_val_ptr_ptr));
|
|
+ netsnmp_assert(NULL != etherStatsOwner_val_ptr_len_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsOwner_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsOwner data.
|
|
+ * copy (* etherStatsOwner_val_ptr_ptr ) data and (* etherStatsOwner_val_ptr_len_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ /*
|
|
+ * make sure there is enough space for etherStatsOwner data
|
|
+ */
|
|
+ if ((NULL == (*etherStatsOwner_val_ptr_ptr)) ||
|
|
+ ((*etherStatsOwner_val_ptr_len_ptr) <
|
|
+ (rowreq_ctx->data.etherStatsOwner_len *
|
|
+ sizeof(rowreq_ctx->data.etherStatsOwner[0])))) {
|
|
+ /*
|
|
+ * allocate space for etherStatsOwner data
|
|
+ */
|
|
+ (*etherStatsOwner_val_ptr_ptr) =
|
|
+ malloc(rowreq_ctx->data.etherStatsOwner_len *
|
|
+ sizeof(rowreq_ctx->data.etherStatsOwner[0]));
|
|
+ if (NULL == (*etherStatsOwner_val_ptr_ptr)) {
|
|
+ snmp_log(LOG_ERR, "could not allocate memory\n");
|
|
+ return MFD_ERROR;
|
|
+ }
|
|
+ }
|
|
+ (*etherStatsOwner_val_ptr_len_ptr) =
|
|
+ rowreq_ctx->data.etherStatsOwner_len *
|
|
+ sizeof(rowreq_ctx->data.etherStatsOwner[0]);
|
|
+ memcpy((*etherStatsOwner_val_ptr_ptr),
|
|
+ rowreq_ctx->data.etherStatsOwner,
|
|
+ rowreq_ctx->data.etherStatsOwner_len *
|
|
+ sizeof(rowreq_ctx->data.etherStatsOwner[0]));
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsOwner_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsStatus
|
|
+ * etherStatsStatus is subid 21 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is Create.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.21
|
|
+ * Description:
|
|
+The status of this etherStats entry.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 1
|
|
+ *
|
|
+ * Enum range: 2/8. Values: valid(1), createRequest(2), underCreation(3), invalid(4)
|
|
+ *
|
|
+ * Its syntax is EntryStatus (based on perltype INTEGER)
|
|
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the etherStatsStatus data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsStatus_val_ptr
|
|
+ * Pointer to storage for a long variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+etherStatsStatus_get(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * etherStatsStatus_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != etherStatsStatus_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsStatus_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the etherStatsStatus data.
|
|
+ * copy (* etherStatsStatus_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ (*etherStatsStatus_val_ptr) = rowreq_ctx->data.etherStatsStatus;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsStatus_get */
|
|
+
|
|
+
|
|
+
|
|
+/** @} */
|
|
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_get.h net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_get.h
|
|
--- net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_get.h 1969-12-31 19:00:00.000000000 -0500
|
|
+++ net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_get.h 2008-08-25 02:37:27.000000000 -0400
|
|
@@ -0,0 +1,151 @@
|
|
+/*
|
|
+ * Note: this file originally auto-generated by mib2c using
|
|
+ * version : 12088 $ of $
|
|
+ *
|
|
+ * $Id:$
|
|
+ *
|
|
+ * @file etherStatsTable_data_get.h
|
|
+ *
|
|
+ * @addtogroup get
|
|
+ *
|
|
+ * Prototypes for get functions
|
|
+ *
|
|
+ * @{
|
|
+ */
|
|
+#ifndef ETHERSTATSTABLE_DATA_GET_H
|
|
+#define ETHERSTATSTABLE_DATA_GET_H
|
|
+
|
|
+#ifdef __cplusplus
|
|
+extern "C" {
|
|
+#endif
|
|
+
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * GET function declarations
|
|
+ */
|
|
+
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * GET Table declarations
|
|
+ */
|
|
+/**********************************************************************
|
|
+ **********************************************************************
|
|
+ ***
|
|
+ *** Table etherStatsTable
|
|
+ ***
|
|
+ **********************************************************************
|
|
+ **********************************************************************/
|
|
+ /*
|
|
+ * RMON-MIB::etherStatsTable is subid 1 of statistics.
|
|
+ * Its status is Current.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1, length: 9
|
|
+ */
|
|
+ /*
|
|
+ * indexes
|
|
+ */
|
|
+
|
|
+ int etherStatsDataSource_get(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ oid **
|
|
+ etherStatsDataSource_val_ptr_ptr,
|
|
+ size_t
|
|
+ *etherStatsDataSource_val_ptr_len_ptr);
|
|
+ int etherStatsDropEvents_get(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsDropEvents_val_ptr);
|
|
+ int etherStatsOctets_get(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsOctets_val_ptr);
|
|
+ int etherStatsPkts_get(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long * etherStatsPkts_val_ptr);
|
|
+ int etherStatsBroadcastPkts_get(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsBroadcastPkts_val_ptr);
|
|
+ int etherStatsMulticastPkts_get(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsMulticastPkts_val_ptr);
|
|
+ int etherStatsCRCAlignErrors_get(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsCRCAlignErrors_val_ptr);
|
|
+ int etherStatsUndersizePkts_get(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsUndersizePkts_val_ptr);
|
|
+ int etherStatsOversizePkts_get(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsOversizePkts_val_ptr);
|
|
+ int etherStatsFragments_get(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsFragments_val_ptr);
|
|
+ int etherStatsJabbers_get(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsJabbers_val_ptr);
|
|
+ int etherStatsCollisions_get(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsCollisions_val_ptr);
|
|
+ int etherStatsPkts64Octets_get(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsPkts64Octets_val_ptr);
|
|
+ int
|
|
+ etherStatsPkts65to127Octets_get(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsPkts65to127Octets_val_ptr);
|
|
+ int
|
|
+ etherStatsPkts128to255Octets_get(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsPkts128to255Octets_val_ptr);
|
|
+ int
|
|
+ etherStatsPkts256to511Octets_get(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsPkts256to511Octets_val_ptr);
|
|
+ int
|
|
+ etherStatsPkts512to1023Octets_get(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsPkts512to1023Octets_val_ptr);
|
|
+ int
|
|
+ etherStatsPkts1024to1518Octets_get(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsPkts1024to1518Octets_val_ptr);
|
|
+ int etherStatsOwner_get(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ char **etherStatsOwner_val_ptr_ptr,
|
|
+ size_t
|
|
+ *etherStatsOwner_val_ptr_len_ptr);
|
|
+ int etherStatsStatus_get(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ etherStatsStatus_val_ptr);
|
|
+
|
|
+
|
|
+ int
|
|
+ etherStatsTable_indexes_set_tbl_idx(etherStatsTable_mib_index *
|
|
+ tbl_idx,
|
|
+ long etherStatsIndex_val);
|
|
+ int etherStatsTable_indexes_set(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ long etherStatsIndex_val);
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+#ifdef __cplusplus
|
|
+}
|
|
+#endif
|
|
+#endif /* ETHERSTATSTABLE_DATA_GET_H */
|
|
+/** @} */
|
|
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_set.c net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_set.c
|
|
--- net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_set.c 1969-12-31 19:00:00.000000000 -0500
|
|
+++ net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_set.c 2008-08-25 02:37:27.000000000 -0400
|
|
@@ -0,0 +1,977 @@
|
|
+/*
|
|
+ * Note: this file originally auto-generated by mib2c using
|
|
+ * version : 12077 $ of $
|
|
+ *
|
|
+ * $Id:$
|
|
+ *
|
|
+ */
|
|
+/*
|
|
+ * standard Net-SNMP includes
|
|
+ */
|
|
+#include <net-snmp/net-snmp-config.h>
|
|
+#include <net-snmp/net-snmp-includes.h>
|
|
+#include <net-snmp/agent/net-snmp-agent-includes.h>
|
|
+
|
|
+/*
|
|
+ * include our parent header
|
|
+ */
|
|
+#include "etherStatsTable.h"
|
|
+
|
|
+
|
|
+/** @defgroup data_set data_set: Routines to set data
|
|
+ *
|
|
+ * These routines are used to set the value for individual objects. The
|
|
+ * row context is passed, along with the new value.
|
|
+ *
|
|
+ * @{
|
|
+ */
|
|
+/**********************************************************************
|
|
+ **********************************************************************
|
|
+ ***
|
|
+ *** Table etherStatsTable
|
|
+ ***
|
|
+ **********************************************************************
|
|
+ **********************************************************************/
|
|
+/*
|
|
+ * RMON-MIB::etherStatsTable is subid 1 of statistics.
|
|
+ * Its status is Current.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1, length: 9
|
|
+ */
|
|
+ /*
|
|
+ * NOTE: if you update this chart, please update the versions in
|
|
+ * local/mib2c-conf.d/parent-set.m2i
|
|
+ * agent/mibgroup/helpers/baby_steps.c
|
|
+ * while you're at it.
|
|
+ */
|
|
+ /*
|
|
+ ***********************************************************************
|
|
+ * Baby Steps Flow Chart (2004.06.05) *
|
|
+ * *
|
|
+ * +--------------+ +================+ U = unconditional path *
|
|
+ * |optional state| ||required state|| S = path for success *
|
|
+ * +--------------+ +================+ E = path for error *
|
|
+ ***********************************************************************
|
|
+ *
|
|
+ * +--------------+
|
|
+ * | pre |
|
|
+ * | request |
|
|
+ * +--------------+
|
|
+ * | U
|
|
+ * +-------------+ +==============+
|
|
+ * | row |f|<-------|| object ||
|
|
+ * | create |1| E || lookup ||
|
|
+ * +-------------+ +==============+
|
|
+ * E | | S | S
|
|
+ * | +------------------>|
|
|
+ * | +==============+
|
|
+ * | E || check ||
|
|
+ * |<---------------|| values ||
|
|
+ * | +==============+
|
|
+ * | | S
|
|
+ * | +==============+
|
|
+ * | +<-------|| undo ||
|
|
+ * | | E || setup ||
|
|
+ * | | +==============+
|
|
+ * | | | S
|
|
+ * | | +==============+
|
|
+ * | | || set ||-------------------------->+
|
|
+ * | | || value || E |
|
|
+ * | | +==============+ |
|
|
+ * | | | S |
|
|
+ * | | +--------------+ |
|
|
+ * | | | check |-------------------------->|
|
|
+ * | | | consistency | E |
|
|
+ * | | +--------------+ |
|
|
+ * | | | S |
|
|
+ * | | +==============+ +==============+ |
|
|
+ * | | || commit ||-------->|| undo || |
|
|
+ * | | || || E || commit || |
|
|
+ * | | +==============+ +==============+ |
|
|
+ * | | | S U |<--------+
|
|
+ * | | +--------------+ +==============+
|
|
+ * | | | irreversible | || undo ||
|
|
+ * | | | commit | || set ||
|
|
+ * | | +--------------+ +==============+
|
|
+ * | | | U U |
|
|
+ * | +-------------->|<------------------------+
|
|
+ * | +==============+
|
|
+ * | || undo ||
|
|
+ * | || cleanup ||
|
|
+ * | +==============+
|
|
+ * +---------------------->| U
|
|
+ * |
|
|
+ * (err && f1)------------------->+
|
|
+ * | |
|
|
+ * +--------------+ +--------------+
|
|
+ * | post |<--------| row |
|
|
+ * | request | U | release |
|
|
+ * +--------------+ +--------------+
|
|
+ *
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * Setup up context with information needed to undo a set request.
|
|
+ *
|
|
+ * This function will be called before the individual node undo setup
|
|
+ * functions are called. If you need to do any undo setup that is not
|
|
+ * related to a specific column, you can do it here.
|
|
+ *
|
|
+ * Note that the undo context has been allocated with
|
|
+ * etherStatsTable_allocate_data(), but may need extra
|
|
+ * initialization similar to what you may have done in
|
|
+ * etherStatsTable_rowreq_ctx_init().
|
|
+ * Note that an individual node's undo_setup function will only be called
|
|
+ * if that node is being set to a new value.
|
|
+ *
|
|
+ * If there is any setup specific to a particular column (e.g. allocating
|
|
+ * memory for a string), you should do that setup in the node's undo_setup
|
|
+ * function, so it won't be done unless it is necessary.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the table context (etherStatsTable_rowreq_ctx)
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_ERROR : error. set will fail.
|
|
+ */
|
|
+int
|
|
+etherStatsTable_undo_setup(etherStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+ int rc = MFD_SUCCESS;
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_undo_setup",
|
|
+ "called\n"));
|
|
+
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:451:M: |-> Setup etherStatsTable undo.
|
|
+ * set up etherStatsTable undo information, in preparation for a set.
|
|
+ * Undo storage is in (* etherStatsStatus_val_ptr )*
|
|
+ */
|
|
+
|
|
+ return rc;
|
|
+} /* etherStatsTable_undo_setup */
|
|
+
|
|
+/**
|
|
+ * Undo a set request.
|
|
+ *
|
|
+ * This function will be called before the individual node undo
|
|
+ * functions are called. If you need to do any undo that is not
|
|
+ * related to a specific column, you can do it here.
|
|
+ *
|
|
+ * Note that an individual node's undo function will only be called
|
|
+ * if that node is being set to a new value.
|
|
+ *
|
|
+ * If there is anything specific to a particular column (e.g. releasing
|
|
+ * memory for a string), you should do that setup in the node's undo
|
|
+ * function, so it won't be done unless it is necessary.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the table context (etherStatsTable_rowreq_ctx)
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_ERROR : error. set will fail.
|
|
+ */
|
|
+int
|
|
+etherStatsTable_undo(etherStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+ int rc = MFD_SUCCESS;
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_undo",
|
|
+ "called\n"));
|
|
+
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:451:M: |-> etherStatsTable undo.
|
|
+ * etherStatsTable undo information, in response to a failed set.
|
|
+ * Undo storage is in (* etherStatsStatus_val_ptr )*
|
|
+ */
|
|
+
|
|
+ return rc;
|
|
+} /* etherStatsTable_undo_setup */
|
|
+
|
|
+/**
|
|
+ * Cleanup up context undo information.
|
|
+ *
|
|
+ * This function will be called after set/commit processing. If you
|
|
+ * allocated any resources in undo_setup, this is the place to release
|
|
+ * those resources.
|
|
+ *
|
|
+ * This function is called regardless of the success or failure of the set
|
|
+ * request. If you need to perform different steps for cleanup depending
|
|
+ * on success or failure, you can add a flag to the rowreq_ctx.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the table context (etherStatsTable_rowreq_ctx)
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_ERROR : error
|
|
+ */
|
|
+int
|
|
+etherStatsTable_undo_cleanup(etherStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+ int rc = MFD_SUCCESS;
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_undo_cleanup",
|
|
+ "called\n"));
|
|
+
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:452:M: |-> Cleanup etherStatsTable undo.
|
|
+ * Undo storage is in (* etherStatsStatus_val_ptr )*
|
|
+ */
|
|
+
|
|
+ return rc;
|
|
+} /* etherStatsTable_undo_cleanup */
|
|
+
|
|
+/**
|
|
+ * commit new values.
|
|
+ *
|
|
+ * At this point, you should have done everything you can to ensure that
|
|
+ * this commit will not fail.
|
|
+ *
|
|
+ * Should you need different behavior depending on which columns were
|
|
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
|
|
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
|
|
+ * etherStatsTable_oids.h.
|
|
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
|
|
+ *
|
|
+ * @param etherStatsTable_rowreq_ctx
|
|
+ * Pointer to the users context.
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_ERROR : error
|
|
+ */
|
|
+int
|
|
+etherStatsTable_commit(etherStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+ int rc = MFD_SUCCESS;
|
|
+ int save_flags;
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_commit",
|
|
+ "called\n"));
|
|
+
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * save flags, then clear until we actually do something
|
|
+ */
|
|
+ save_flags = rowreq_ctx->column_set_flags;
|
|
+ rowreq_ctx->column_set_flags = 0;
|
|
+
|
|
+ /*
|
|
+ * commit etherStatsTable data
|
|
+ * 1) check the column's flag in save_flags to see if it was set.
|
|
+ * 2) clear the flag when you handle that column
|
|
+ * 3) set the column's flag in column_set_flags if it needs undo
|
|
+ * processing in case of a failure.
|
|
+ */
|
|
+ if (save_flags & COLUMN_ETHERSTATSDATASOURCE_FLAG) {
|
|
+ save_flags &= ~COLUMN_ETHERSTATSDATASOURCE_FLAG; /* clear etherStatsDataSource */
|
|
+ /*
|
|
+ * TODO:482:o: |-> commit column etherStatsDataSource.
|
|
+ */
|
|
+ rc = -1;
|
|
+ if (-1 == rc) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "etherStatsTable column etherStatsDataSource commit failed\n");
|
|
+ } else {
|
|
+ /*
|
|
+ * set flag, in case we need to undo etherStatsDataSource
|
|
+ */
|
|
+ rowreq_ctx->column_set_flags |=
|
|
+ COLUMN_ETHERSTATSDATASOURCE_FLAG;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (save_flags & COLUMN_ETHERSTATSOWNER_FLAG) {
|
|
+ save_flags &= ~COLUMN_ETHERSTATSOWNER_FLAG; /* clear etherStatsOwner */
|
|
+ /*
|
|
+ * TODO:482:o: |-> commit column etherStatsOwner.
|
|
+ */
|
|
+ rc = -1;
|
|
+ if (-1 == rc) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "etherStatsTable column etherStatsOwner commit failed\n");
|
|
+ } else {
|
|
+ /*
|
|
+ * set flag, in case we need to undo etherStatsOwner
|
|
+ */
|
|
+ rowreq_ctx->column_set_flags |= COLUMN_ETHERSTATSOWNER_FLAG;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (save_flags & COLUMN_ETHERSTATSSTATUS_FLAG) {
|
|
+ save_flags &= ~COLUMN_ETHERSTATSSTATUS_FLAG; /* clear etherStatsStatus */
|
|
+ /*
|
|
+ * TODO:482:o: |-> commit column etherStatsStatus.
|
|
+ */
|
|
+ rc = -1;
|
|
+ if (-1 == rc) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "etherStatsTable column etherStatsStatus commit failed\n");
|
|
+ } else {
|
|
+ /*
|
|
+ * set flag, in case we need to undo etherStatsStatus
|
|
+ */
|
|
+ rowreq_ctx->column_set_flags |= COLUMN_ETHERSTATSSTATUS_FLAG;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * if we successfully commited this row, set the dirty flag.
|
|
+ */
|
|
+ if (MFD_SUCCESS == rc) {
|
|
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
|
|
+ }
|
|
+
|
|
+ if (save_flags) {
|
|
+ snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n",
|
|
+ save_flags);
|
|
+ return MFD_ERROR;
|
|
+ }
|
|
+
|
|
+ return rc;
|
|
+} /* etherStatsTable_commit */
|
|
+
|
|
+/**
|
|
+ * undo commit new values.
|
|
+ *
|
|
+ * Should you need different behavior depending on which columns were
|
|
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
|
|
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
|
|
+ * etherStatsTable_oids.h.
|
|
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
|
|
+ *
|
|
+ * @param etherStatsTable_rowreq_ctx
|
|
+ * Pointer to the users context.
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_ERROR : error
|
|
+ */
|
|
+int
|
|
+etherStatsTable_undo_commit(etherStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+ int rc = MFD_SUCCESS;
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_undo_commit",
|
|
+ "called\n"));
|
|
+
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:485:M: |-> Undo etherStatsTable commit.
|
|
+ * check the column's flag in rowreq_ctx->column_set_flags to see
|
|
+ * if it was set during commit, then undo it.
|
|
+ *
|
|
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
|
|
+ */
|
|
+
|
|
+
|
|
+ /*
|
|
+ * if we successfully un-commited this row, clear the dirty flag.
|
|
+ */
|
|
+ if (MFD_SUCCESS == rc) {
|
|
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
|
|
+ }
|
|
+
|
|
+ return rc;
|
|
+} /* etherStatsTable_undo_commit */
|
|
+
|
|
+/*
|
|
+ * TODO:440:M: Implement etherStatsTable node value checks.
|
|
+ * TODO:450:M: Implement etherStatsTable undo functions.
|
|
+ * TODO:460:M: Implement etherStatsTable set functions.
|
|
+ * TODO:480:M: Implement etherStatsTable commit functions.
|
|
+ */
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsDataSource
|
|
+ * etherStatsDataSource is subid 2 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is Create.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.2
|
|
+ * Description:
|
|
+This object identifies the source of the data that
|
|
+ this etherStats entry is configured to analyze. This
|
|
+ source can be any ethernet interface on this device.
|
|
+ In order to identify a particular interface, this object
|
|
+ shall identify the instance of the ifIndex object,
|
|
+ defined in RFC 2233 [17], for the desired interface.
|
|
+ For example, if an entry were to receive data from
|
|
+ interface #1, this object would be set to ifIndex.1.
|
|
+
|
|
+ The statistics in this group reflect all packets
|
|
+ on the local network segment attached to the identified
|
|
+ interface.
|
|
+
|
|
+ An agent may or may not be able to tell if fundamental
|
|
+ changes to the media of the interface have occurred and
|
|
+ necessitate an invalidation of this entry. For example, a
|
|
+ hot-pluggable ethernet card could be pulled out and replaced
|
|
+ by a token-ring card. In such a case, if the agent has such
|
|
+ knowledge of the change, it is recommended that it
|
|
+ invalidate this entry.
|
|
+
|
|
+ This object may not be modified if the associated
|
|
+ etherStatsStatus object is equal to valid(1).
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 1
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is OBJECTID (based on perltype OBJECTID)
|
|
+ * The net-snmp type is ASN_OBJECT_ID. The C type decl is oid (oid)
|
|
+ * This data type requires a length.
|
|
+ */
|
|
+/**
|
|
+ * Check that the proposed new value is potentially valid.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsDataSource_val_ptr
|
|
+ * A oid containing the new value.
|
|
+ * @param etherStatsDataSource_val_ptr_len
|
|
+ * The size (in bytes) of the data pointed to by etherStatsDataSource_val_ptr
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : incoming value is legal
|
|
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
|
|
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
|
|
+ *
|
|
+ * This is the place to check for requirements that are not
|
|
+ * expressed in the mib syntax (for example, a requirement that
|
|
+ * is detailed in the description for an object).
|
|
+ *
|
|
+ * You should check that the requested change between the undo value and the
|
|
+ * new value is legal (ie, the transistion from one value to another
|
|
+ * is legal).
|
|
+ *
|
|
+ *@note
|
|
+ * This check is only to determine if the new value
|
|
+ * is \b potentially valid. This is the first check of many, and
|
|
+ * is one of the simplest ones.
|
|
+ *
|
|
+ *@note
|
|
+ * this is not the place to do any checks for values
|
|
+ * which depend on some other value in the mib. Those
|
|
+ * types of checks should be done in the
|
|
+ * etherStatsTable_check_dependencies() function.
|
|
+ *
|
|
+ * The following checks have already been done for you:
|
|
+ * The syntax is ASN_OBJECT_ID
|
|
+ * The length is < sizeof(rowreq_ctx->data.etherStatsDataSource).
|
|
+ *
|
|
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
|
|
+ *
|
|
+ */
|
|
+int
|
|
+etherStatsDataSource_check_value(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ oid * etherStatsDataSource_val_ptr,
|
|
+ size_t etherStatsDataSource_val_ptr_len)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsDataSource_check_value",
|
|
+ "called\n"));
|
|
+
|
|
+ /** should never get a NULL pointer */
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+ netsnmp_assert(NULL != etherStatsDataSource_val_ptr);
|
|
+
|
|
+ /*
|
|
+ * TODO:441:o: |-> Check for valid etherStatsDataSource value.
|
|
+ */
|
|
+
|
|
+ return MFD_SUCCESS; /* etherStatsDataSource value not illegal */
|
|
+} /* etherStatsDataSource_check_value */
|
|
+
|
|
+/**
|
|
+ * Save old value information
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the table context (etherStatsTable_rowreq_ctx)
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_ERROR : error. set will fail.
|
|
+ *
|
|
+ * This function will be called after the table level undo setup function
|
|
+ * etherStatsTable_undo_setup has been called.
|
|
+ *
|
|
+ *@note
|
|
+ * this function will only be called if a new value is set for this column.
|
|
+ *
|
|
+ * If there is any setup specific to a particular column (e.g. allocating
|
|
+ * memory for a string), you should do that setup in this function, so it
|
|
+ * won't be done unless it is necessary.
|
|
+ */
|
|
+int
|
|
+etherStatsDataSource_undo_setup(etherStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsDataSource_undo_setup",
|
|
+ "called\n"));
|
|
+
|
|
+ /** should never get a NULL pointer */
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:455:o: |-> Setup etherStatsDataSource undo.
|
|
+ */
|
|
+ /*
|
|
+ * copy etherStatsDataSource and etherStatsDataSource_len data
|
|
+ * set rowreq_ctx->undo->etherStatsDataSource from rowreq_ctx->data.etherStatsDataSource
|
|
+ */
|
|
+ memcpy(rowreq_ctx->undo->etherStatsDataSource,
|
|
+ rowreq_ctx->data.etherStatsDataSource,
|
|
+ (rowreq_ctx->data.etherStatsDataSource_len *
|
|
+ sizeof(rowreq_ctx->undo->etherStatsDataSource[0])));
|
|
+ rowreq_ctx->undo->etherStatsDataSource_len =
|
|
+ rowreq_ctx->data.etherStatsDataSource_len;
|
|
+
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsDataSource_undo_setup */
|
|
+
|
|
+/**
|
|
+ * Set the new value.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the users context. You should know how to
|
|
+ * manipulate the value from this object.
|
|
+ * @param etherStatsDataSource_val_ptr
|
|
+ * A oid containing the new value.
|
|
+ * @param etherStatsDataSource_val_ptr_len
|
|
+ * The size (in bytes) of the data pointed to by etherStatsDataSource_val_ptr
|
|
+ */
|
|
+int
|
|
+etherStatsDataSource_set(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ oid * etherStatsDataSource_val_ptr,
|
|
+ size_t etherStatsDataSource_val_ptr_len)
|
|
+{
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsDataSource_set",
|
|
+ "called\n"));
|
|
+
|
|
+ /** should never get a NULL pointer */
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+ netsnmp_assert(NULL != etherStatsDataSource_val_ptr);
|
|
+
|
|
+ /*
|
|
+ * TODO:461:M: |-> Set etherStatsDataSource value.
|
|
+ * set etherStatsDataSource value in rowreq_ctx->data
|
|
+ */
|
|
+ memcpy(rowreq_ctx->data.etherStatsDataSource,
|
|
+ etherStatsDataSource_val_ptr, etherStatsDataSource_val_ptr_len);
|
|
+ /** convert bytes to number of oid */
|
|
+ rowreq_ctx->data.etherStatsDataSource_len =
|
|
+ etherStatsDataSource_val_ptr_len /
|
|
+ sizeof(etherStatsDataSource_val_ptr[0]);
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsDataSource_set */
|
|
+
|
|
+/**
|
|
+ * undo the previous set.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the users context.
|
|
+ */
|
|
+int
|
|
+etherStatsDataSource_undo(etherStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsDataSource_undo",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:456:o: |-> Clean up etherStatsDataSource undo.
|
|
+ */
|
|
+ /*
|
|
+ * copy etherStatsDataSource and etherStatsDataSource_len data
|
|
+ * set rowreq_ctx->data.etherStatsDataSource from rowreq_ctx->undo->etherStatsDataSource
|
|
+ */
|
|
+ memcpy(rowreq_ctx->data.etherStatsDataSource,
|
|
+ rowreq_ctx->undo->etherStatsDataSource,
|
|
+ (rowreq_ctx->undo->etherStatsDataSource_len *
|
|
+ sizeof(rowreq_ctx->data.etherStatsDataSource[0])));
|
|
+ rowreq_ctx->data.etherStatsDataSource_len =
|
|
+ rowreq_ctx->undo->etherStatsDataSource_len;
|
|
+
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsDataSource_undo */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsOwner
|
|
+ * etherStatsOwner is subid 20 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is Create.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.20
|
|
+ * Description:
|
|
+The entity that configured this entry and is therefore
|
|
+ using the resources assigned to it.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 1 hashint 0
|
|
+ * settable 1
|
|
+ *
|
|
+ * Ranges: 0 - 127;
|
|
+ *
|
|
+ * Its syntax is OwnerString (based on perltype OCTETSTR)
|
|
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
|
|
+ * This data type requires a length. (Max 127)
|
|
+ */
|
|
+/**
|
|
+ * Check that the proposed new value is potentially valid.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsOwner_val_ptr
|
|
+ * A char containing the new value.
|
|
+ * @param etherStatsOwner_val_ptr_len
|
|
+ * The size (in bytes) of the data pointed to by etherStatsOwner_val_ptr
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : incoming value is legal
|
|
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
|
|
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
|
|
+ *
|
|
+ * This is the place to check for requirements that are not
|
|
+ * expressed in the mib syntax (for example, a requirement that
|
|
+ * is detailed in the description for an object).
|
|
+ *
|
|
+ * You should check that the requested change between the undo value and the
|
|
+ * new value is legal (ie, the transistion from one value to another
|
|
+ * is legal).
|
|
+ *
|
|
+ *@note
|
|
+ * This check is only to determine if the new value
|
|
+ * is \b potentially valid. This is the first check of many, and
|
|
+ * is one of the simplest ones.
|
|
+ *
|
|
+ *@note
|
|
+ * this is not the place to do any checks for values
|
|
+ * which depend on some other value in the mib. Those
|
|
+ * types of checks should be done in the
|
|
+ * etherStatsTable_check_dependencies() function.
|
|
+ *
|
|
+ * The following checks have already been done for you:
|
|
+ * The syntax is ASN_OCTET_STR
|
|
+ * The length is < sizeof(rowreq_ctx->data.etherStatsOwner).
|
|
+ * The length is in (one of) the range set(s): 0 - 127
|
|
+ *
|
|
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
|
|
+ *
|
|
+ */
|
|
+int
|
|
+etherStatsOwner_check_value(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ char *etherStatsOwner_val_ptr,
|
|
+ size_t etherStatsOwner_val_ptr_len)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsOwner_check_value",
|
|
+ "called\n"));
|
|
+
|
|
+ /** should never get a NULL pointer */
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+ netsnmp_assert(NULL != etherStatsOwner_val_ptr);
|
|
+
|
|
+ /*
|
|
+ * TODO:441:o: |-> Check for valid etherStatsOwner value.
|
|
+ */
|
|
+
|
|
+ return MFD_SUCCESS; /* etherStatsOwner value not illegal */
|
|
+} /* etherStatsOwner_check_value */
|
|
+
|
|
+/**
|
|
+ * Save old value information
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the table context (etherStatsTable_rowreq_ctx)
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_ERROR : error. set will fail.
|
|
+ *
|
|
+ * This function will be called after the table level undo setup function
|
|
+ * etherStatsTable_undo_setup has been called.
|
|
+ *
|
|
+ *@note
|
|
+ * this function will only be called if a new value is set for this column.
|
|
+ *
|
|
+ * If there is any setup specific to a particular column (e.g. allocating
|
|
+ * memory for a string), you should do that setup in this function, so it
|
|
+ * won't be done unless it is necessary.
|
|
+ */
|
|
+int
|
|
+etherStatsOwner_undo_setup(etherStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsOwner_undo_setup",
|
|
+ "called\n"));
|
|
+
|
|
+ /** should never get a NULL pointer */
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:455:o: |-> Setup etherStatsOwner undo.
|
|
+ */
|
|
+ /*
|
|
+ * copy etherStatsOwner and etherStatsOwner_len data
|
|
+ * set rowreq_ctx->undo->etherStatsOwner from rowreq_ctx->data.etherStatsOwner
|
|
+ */
|
|
+ memcpy(rowreq_ctx->undo->etherStatsOwner,
|
|
+ rowreq_ctx->data.etherStatsOwner,
|
|
+ (rowreq_ctx->data.etherStatsOwner_len *
|
|
+ sizeof(rowreq_ctx->undo->etherStatsOwner[0])));
|
|
+ rowreq_ctx->undo->etherStatsOwner_len =
|
|
+ rowreq_ctx->data.etherStatsOwner_len;
|
|
+
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsOwner_undo_setup */
|
|
+
|
|
+/**
|
|
+ * Set the new value.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the users context. You should know how to
|
|
+ * manipulate the value from this object.
|
|
+ * @param etherStatsOwner_val_ptr
|
|
+ * A char containing the new value.
|
|
+ * @param etherStatsOwner_val_ptr_len
|
|
+ * The size (in bytes) of the data pointed to by etherStatsOwner_val_ptr
|
|
+ */
|
|
+int
|
|
+etherStatsOwner_set(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ char *etherStatsOwner_val_ptr,
|
|
+ size_t etherStatsOwner_val_ptr_len)
|
|
+{
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsOwner_set",
|
|
+ "called\n"));
|
|
+
|
|
+ /** should never get a NULL pointer */
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+ netsnmp_assert(NULL != etherStatsOwner_val_ptr);
|
|
+
|
|
+ /*
|
|
+ * TODO:461:M: |-> Set etherStatsOwner value.
|
|
+ * set etherStatsOwner value in rowreq_ctx->data
|
|
+ */
|
|
+ memcpy(rowreq_ctx->data.etherStatsOwner, etherStatsOwner_val_ptr,
|
|
+ etherStatsOwner_val_ptr_len);
|
|
+ /** convert bytes to number of char */
|
|
+ rowreq_ctx->data.etherStatsOwner_len =
|
|
+ etherStatsOwner_val_ptr_len / sizeof(etherStatsOwner_val_ptr[0]);
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsOwner_set */
|
|
+
|
|
+/**
|
|
+ * undo the previous set.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the users context.
|
|
+ */
|
|
+int
|
|
+etherStatsOwner_undo(etherStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsOwner_undo",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:456:o: |-> Clean up etherStatsOwner undo.
|
|
+ */
|
|
+ /*
|
|
+ * copy etherStatsOwner and etherStatsOwner_len data
|
|
+ * set rowreq_ctx->data.etherStatsOwner from rowreq_ctx->undo->etherStatsOwner
|
|
+ */
|
|
+ memcpy(rowreq_ctx->data.etherStatsOwner,
|
|
+ rowreq_ctx->undo->etherStatsOwner,
|
|
+ (rowreq_ctx->undo->etherStatsOwner_len *
|
|
+ sizeof(rowreq_ctx->data.etherStatsOwner[0])));
|
|
+ rowreq_ctx->data.etherStatsOwner_len =
|
|
+ rowreq_ctx->undo->etherStatsOwner_len;
|
|
+
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsOwner_undo */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * RMON-MIB::etherStatsEntry.etherStatsStatus
|
|
+ * etherStatsStatus is subid 21 of etherStatsEntry.
|
|
+ * Its status is Current, and its access level is Create.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1.1.21
|
|
+ * Description:
|
|
+The status of this etherStats entry.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 1
|
|
+ *
|
|
+ * Enum range: 2/8. Values: valid(1), createRequest(2), underCreation(3), invalid(4)
|
|
+ *
|
|
+ * Its syntax is EntryStatus (based on perltype INTEGER)
|
|
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Check that the proposed new value is potentially valid.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param etherStatsStatus_val
|
|
+ * A long containing the new value.
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : incoming value is legal
|
|
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
|
|
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
|
|
+ *
|
|
+ * This is the place to check for requirements that are not
|
|
+ * expressed in the mib syntax (for example, a requirement that
|
|
+ * is detailed in the description for an object).
|
|
+ *
|
|
+ * You should check that the requested change between the undo value and the
|
|
+ * new value is legal (ie, the transistion from one value to another
|
|
+ * is legal).
|
|
+ *
|
|
+ *@note
|
|
+ * This check is only to determine if the new value
|
|
+ * is \b potentially valid. This is the first check of many, and
|
|
+ * is one of the simplest ones.
|
|
+ *
|
|
+ *@note
|
|
+ * this is not the place to do any checks for values
|
|
+ * which depend on some other value in the mib. Those
|
|
+ * types of checks should be done in the
|
|
+ * etherStatsTable_check_dependencies() function.
|
|
+ *
|
|
+ * The following checks have already been done for you:
|
|
+ * The syntax is ASN_INTEGER
|
|
+ * The value is one of valid(1), createRequest(2), underCreation(3), invalid(4)
|
|
+ *
|
|
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
|
|
+ *
|
|
+ */
|
|
+int
|
|
+etherStatsStatus_check_value(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long etherStatsStatus_val)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsStatus_check_value",
|
|
+ "called\n"));
|
|
+
|
|
+ /** should never get a NULL pointer */
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:441:o: |-> Check for valid etherStatsStatus value.
|
|
+ */
|
|
+
|
|
+ return MFD_SUCCESS; /* etherStatsStatus value not illegal */
|
|
+} /* etherStatsStatus_check_value */
|
|
+
|
|
+/**
|
|
+ * Save old value information
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the table context (etherStatsTable_rowreq_ctx)
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_ERROR : error. set will fail.
|
|
+ *
|
|
+ * This function will be called after the table level undo setup function
|
|
+ * etherStatsTable_undo_setup has been called.
|
|
+ *
|
|
+ *@note
|
|
+ * this function will only be called if a new value is set for this column.
|
|
+ *
|
|
+ * If there is any setup specific to a particular column (e.g. allocating
|
|
+ * memory for a string), you should do that setup in this function, so it
|
|
+ * won't be done unless it is necessary.
|
|
+ */
|
|
+int
|
|
+etherStatsStatus_undo_setup(etherStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsStatus_undo_setup",
|
|
+ "called\n"));
|
|
+
|
|
+ /** should never get a NULL pointer */
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:455:o: |-> Setup etherStatsStatus undo.
|
|
+ */
|
|
+ /*
|
|
+ * copy etherStatsStatus data
|
|
+ * set rowreq_ctx->undo->etherStatsStatus from rowreq_ctx->data.etherStatsStatus
|
|
+ */
|
|
+ rowreq_ctx->undo->etherStatsStatus = rowreq_ctx->data.etherStatsStatus;
|
|
+
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsStatus_undo_setup */
|
|
+
|
|
+/**
|
|
+ * Set the new value.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the users context. You should know how to
|
|
+ * manipulate the value from this object.
|
|
+ * @param etherStatsStatus_val
|
|
+ * A long containing the new value.
|
|
+ */
|
|
+int
|
|
+etherStatsStatus_set(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long etherStatsStatus_val)
|
|
+{
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsStatus_set",
|
|
+ "called\n"));
|
|
+
|
|
+ /** should never get a NULL pointer */
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:461:M: |-> Set etherStatsStatus value.
|
|
+ * set etherStatsStatus value in rowreq_ctx->data
|
|
+ */
|
|
+ rowreq_ctx->data.etherStatsStatus = etherStatsStatus_val;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsStatus_set */
|
|
+
|
|
+/**
|
|
+ * undo the previous set.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the users context.
|
|
+ */
|
|
+int
|
|
+etherStatsStatus_undo(etherStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsStatus_undo",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:456:o: |-> Clean up etherStatsStatus undo.
|
|
+ */
|
|
+ /*
|
|
+ * copy etherStatsStatus data
|
|
+ * set rowreq_ctx->data.etherStatsStatus from rowreq_ctx->undo->etherStatsStatus
|
|
+ */
|
|
+ rowreq_ctx->data.etherStatsStatus = rowreq_ctx->undo->etherStatsStatus;
|
|
+
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* etherStatsStatus_undo */
|
|
+
|
|
+/** @} */
|
|
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_set.h net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_set.h
|
|
--- net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_set.h 1969-12-31 19:00:00.000000000 -0500
|
|
+++ net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_set.h 2008-08-25 02:37:27.000000000 -0400
|
|
@@ -0,0 +1,356 @@
|
|
+/*
|
|
+ * Note: this file originally auto-generated by mib2c using
|
|
+ * version : 12077 $ of $
|
|
+ *
|
|
+ * $Id:$
|
|
+ */
|
|
+#ifndef ETHERSTATSTABLE_DATA_SET_H
|
|
+#define ETHERSTATSTABLE_DATA_SET_H
|
|
+
|
|
+#ifdef __cplusplus
|
|
+extern "C" {
|
|
+#endif
|
|
+
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * SET function declarations
|
|
+ */
|
|
+
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * SET Table declarations
|
|
+ */
|
|
+/**********************************************************************
|
|
+ **********************************************************************
|
|
+ ***
|
|
+ *** Table etherStatsTable
|
|
+ ***
|
|
+ **********************************************************************
|
|
+ **********************************************************************/
|
|
+ /*
|
|
+ * RMON-MIB::etherStatsTable is subid 1 of statistics.
|
|
+ * Its status is Current.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1, length: 9
|
|
+ */
|
|
+
|
|
+
|
|
+ int etherStatsTable_undo_setup(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+ int etherStatsTable_undo_cleanup(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx);
|
|
+ int etherStatsTable_undo(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+ int etherStatsTable_commit(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+ int etherStatsTable_undo_commit(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx);
|
|
+
|
|
+
|
|
+ int
|
|
+ etherStatsDataSource_check_value(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ oid *
|
|
+ etherStatsDataSource_val_ptr,
|
|
+ size_t
|
|
+ etherStatsDataSource_val_ptr_len);
|
|
+ int
|
|
+ etherStatsDataSource_undo_setup(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+ int etherStatsDataSource_set(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ oid *
|
|
+ etherStatsDataSource_val_ptr,
|
|
+ size_t
|
|
+ etherStatsDataSource_val_ptr_len);
|
|
+ int etherStatsDataSource_undo(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ int
|
|
+ etherStatsDropEvents_check_value(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long etherStatsDropEvents_val);
|
|
+ int
|
|
+ etherStatsDropEvents_undo_setup(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+ int etherStatsDropEvents_set(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsDropEvents_val);
|
|
+ int etherStatsDropEvents_undo(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ int etherStatsOctets_check_value(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsOctets_val);
|
|
+ int etherStatsOctets_undo_setup(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx);
|
|
+ int etherStatsOctets_set(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long etherStatsOctets_val);
|
|
+ int etherStatsOctets_undo(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ int etherStatsPkts_check_value(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long etherStatsPkts_val);
|
|
+ int etherStatsPkts_undo_setup(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+ int etherStatsPkts_set(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long etherStatsPkts_val);
|
|
+ int etherStatsPkts_undo(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ int
|
|
+ etherStatsBroadcastPkts_check_value(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsBroadcastPkts_val);
|
|
+ int
|
|
+ etherStatsBroadcastPkts_undo_setup(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+ int etherStatsBroadcastPkts_set(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsBroadcastPkts_val);
|
|
+ int etherStatsBroadcastPkts_undo(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx);
|
|
+
|
|
+ int
|
|
+ etherStatsMulticastPkts_check_value(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsMulticastPkts_val);
|
|
+ int
|
|
+ etherStatsMulticastPkts_undo_setup(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+ int etherStatsMulticastPkts_set(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsMulticastPkts_val);
|
|
+ int etherStatsMulticastPkts_undo(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx);
|
|
+
|
|
+ int
|
|
+ etherStatsCRCAlignErrors_check_value(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsCRCAlignErrors_val);
|
|
+ int
|
|
+ etherStatsCRCAlignErrors_undo_setup(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+ int etherStatsCRCAlignErrors_set(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsCRCAlignErrors_val);
|
|
+ int
|
|
+ etherStatsCRCAlignErrors_undo(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ int
|
|
+ etherStatsUndersizePkts_check_value(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsUndersizePkts_val);
|
|
+ int
|
|
+ etherStatsUndersizePkts_undo_setup(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+ int etherStatsUndersizePkts_set(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsUndersizePkts_val);
|
|
+ int etherStatsUndersizePkts_undo(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx);
|
|
+
|
|
+ int
|
|
+ etherStatsOversizePkts_check_value(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsOversizePkts_val);
|
|
+ int
|
|
+ etherStatsOversizePkts_undo_setup(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+ int etherStatsOversizePkts_set(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsOversizePkts_val);
|
|
+ int etherStatsOversizePkts_undo(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx);
|
|
+
|
|
+ int
|
|
+ etherStatsFragments_check_value(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long etherStatsFragments_val);
|
|
+ int
|
|
+ etherStatsFragments_undo_setup(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+ int etherStatsFragments_set(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsFragments_val);
|
|
+ int etherStatsFragments_undo(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ int
|
|
+ etherStatsJabbers_check_value(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long etherStatsJabbers_val);
|
|
+ int etherStatsJabbers_undo_setup(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx);
|
|
+ int etherStatsJabbers_set(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long etherStatsJabbers_val);
|
|
+ int etherStatsJabbers_undo(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ int
|
|
+ etherStatsCollisions_check_value(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long etherStatsCollisions_val);
|
|
+ int
|
|
+ etherStatsCollisions_undo_setup(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+ int etherStatsCollisions_set(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsCollisions_val);
|
|
+ int etherStatsCollisions_undo(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ int
|
|
+ etherStatsPkts64Octets_check_value(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsPkts64Octets_val);
|
|
+ int
|
|
+ etherStatsPkts64Octets_undo_setup(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+ int etherStatsPkts64Octets_set(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsPkts64Octets_val);
|
|
+ int etherStatsPkts64Octets_undo(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx);
|
|
+
|
|
+ int
|
|
+ etherStatsPkts65to127Octets_check_value(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsPkts65to127Octets_val);
|
|
+ int
|
|
+ etherStatsPkts65to127Octets_undo_setup(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+ int
|
|
+ etherStatsPkts65to127Octets_set(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsPkts65to127Octets_val);
|
|
+ int
|
|
+ etherStatsPkts65to127Octets_undo(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ int
|
|
+ etherStatsPkts128to255Octets_check_value(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsPkts128to255Octets_val);
|
|
+ int
|
|
+ etherStatsPkts128to255Octets_undo_setup(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx);
|
|
+ int
|
|
+ etherStatsPkts128to255Octets_set(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsPkts128to255Octets_val);
|
|
+ int
|
|
+ etherStatsPkts128to255Octets_undo(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ int
|
|
+ etherStatsPkts256to511Octets_check_value(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsPkts256to511Octets_val);
|
|
+ int
|
|
+ etherStatsPkts256to511Octets_undo_setup(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx);
|
|
+ int
|
|
+ etherStatsPkts256to511Octets_set(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsPkts256to511Octets_val);
|
|
+ int
|
|
+ etherStatsPkts256to511Octets_undo(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ int
|
|
+ etherStatsPkts512to1023Octets_check_value
|
|
+ (etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long etherStatsPkts512to1023Octets_val);
|
|
+ int
|
|
+ etherStatsPkts512to1023Octets_undo_setup(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx);
|
|
+ int
|
|
+ etherStatsPkts512to1023Octets_set(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsPkts512to1023Octets_val);
|
|
+ int
|
|
+ etherStatsPkts512to1023Octets_undo(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ int
|
|
+ etherStatsPkts1024to1518Octets_check_value
|
|
+ (etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long etherStatsPkts1024to1518Octets_val);
|
|
+ int
|
|
+ etherStatsPkts1024to1518Octets_undo_setup
|
|
+ (etherStatsTable_rowreq_ctx * rowreq_ctx);
|
|
+ int
|
|
+ etherStatsPkts1024to1518Octets_set(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsPkts1024to1518Octets_val);
|
|
+ int
|
|
+ etherStatsPkts1024to1518Octets_undo(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ int etherStatsOwner_check_value(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ char
|
|
+ *etherStatsOwner_val_ptr,
|
|
+ size_t
|
|
+ etherStatsOwner_val_ptr_len);
|
|
+ int etherStatsOwner_undo_setup(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+ int etherStatsOwner_set(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ char *etherStatsOwner_val_ptr,
|
|
+ size_t
|
|
+ etherStatsOwner_val_ptr_len);
|
|
+ int etherStatsOwner_undo(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ int etherStatsStatus_check_value(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ u_long
|
|
+ etherStatsStatus_val);
|
|
+ int etherStatsStatus_undo_setup(etherStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx);
|
|
+ int etherStatsStatus_set(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long etherStatsStatus_val);
|
|
+ int etherStatsStatus_undo(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+
|
|
+ int
|
|
+ etherStatsTable_check_dependencies(etherStatsTable_rowreq_ctx *
|
|
+ ctx);
|
|
+
|
|
+
|
|
+#ifdef __cplusplus
|
|
+}
|
|
+#endif
|
|
+#endif /* ETHERSTATSTABLE_DATA_SET_H */
|
|
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_enums.h net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_enums.h
|
|
--- net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_enums.h 1969-12-31 19:00:00.000000000 -0500
|
|
+++ net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_enums.h 2008-08-25 02:37:27.000000000 -0400
|
|
@@ -0,0 +1,57 @@
|
|
+/*
|
|
+ * Note: this file originally auto-generated by mib2c using
|
|
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
|
|
+ *
|
|
+ * $Id:$
|
|
+ */
|
|
+#ifndef ETHERSTATSTABLE_ENUMS_H
|
|
+#define ETHERSTATSTABLE_ENUMS_H
|
|
+
|
|
+#ifdef __cplusplus
|
|
+extern "C" {
|
|
+#endif
|
|
+
|
|
+ /*
|
|
+ * NOTES on enums
|
|
+ * ==============
|
|
+ *
|
|
+ * Value Mapping
|
|
+ * -------------
|
|
+ * If the values for your data type don't exactly match the
|
|
+ * possible values defined by the mib, you should map them
|
|
+ * below. For example, a boolean flag (1/0) is usually represented
|
|
+ * as a TruthValue in a MIB, which maps to the values (1/2).
|
|
+ *
|
|
+ */
|
|
+/*************************************************************************
|
|
+ *************************************************************************
|
|
+ *
|
|
+ * enum definitions for table etherStatsTable
|
|
+ *
|
|
+ *************************************************************************
|
|
+ *************************************************************************/
|
|
+
|
|
+/*************************************************************
|
|
+ * constants for enums for the MIB node
|
|
+ * etherStatsStatus (EntryStatus / ASN_INTEGER)
|
|
+ *
|
|
+ * since a Textual Convention may be referenced more than once in a
|
|
+ * MIB, protect againt redefinitions of the enum values.
|
|
+ */
|
|
+#ifndef ENTRYSTATUS_ENUMS
|
|
+#define ENTRYSTATUS_ENUMS
|
|
+
|
|
+#define ENTRYSTATUS_VALID 1
|
|
+#define ENTRYSTATUS_CREATEREQUEST 2
|
|
+#define ENTRYSTATUS_UNDERCREATION 3
|
|
+#define ENTRYSTATUS_INVALID 4
|
|
+
|
|
+#endif /* ENTRYSTATUS_ENUMS */
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+#ifdef __cplusplus
|
|
+}
|
|
+#endif
|
|
+#endif /* ETHERSTATSTABLE_ENUMS_H */
|
|
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable.h net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable.h
|
|
--- net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable.h 1969-12-31 19:00:00.000000000 -0500
|
|
+++ net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable.h 2008-09-09 12:03:42.000000000 -0400
|
|
@@ -0,0 +1,303 @@
|
|
+/*
|
|
+ * Note: this file originally auto-generated by mib2c using
|
|
+ * version : 14170 $ of $
|
|
+ *
|
|
+ * $Id:$
|
|
+ */
|
|
+#ifndef ETHERSTATSTABLE_H
|
|
+#define ETHERSTATSTABLE_H
|
|
+
|
|
+#ifdef __cplusplus
|
|
+extern "C" {
|
|
+#endif
|
|
+
|
|
+
|
|
+/** @addtogroup misc misc: Miscellaneous routines
|
|
+ *
|
|
+ * @{
|
|
+ */
|
|
+#include <net-snmp/library/asn1.h>
|
|
+
|
|
+ /*
|
|
+ * OID and column number definitions for etherStatsTable
|
|
+ */
|
|
+#include "etherStatsTable_oids.h"
|
|
+
|
|
+ /*
|
|
+ * enum definions
|
|
+ */
|
|
+#include "etherStatsTable_enums.h"
|
|
+
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * function declarations
|
|
+ */
|
|
+ void init_etherStatsTable(void);
|
|
+ void shutdown_etherStatsTable(void);
|
|
+
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * Table declarations
|
|
+ */
|
|
+/**********************************************************************
|
|
+ **********************************************************************
|
|
+ ***
|
|
+ *** Table etherStatsTable
|
|
+ ***
|
|
+ **********************************************************************
|
|
+ **********************************************************************/
|
|
+ /*
|
|
+ * RMON-MIB::etherStatsTable is subid 1 of statistics.
|
|
+ * Its status is Current.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1, length: 9
|
|
+ */
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * When you register your mib, you get to provide a generic
|
|
+ * pointer that will be passed back to you for most of the
|
|
+ * functions calls.
|
|
+ *
|
|
+ * TODO:100:r: Review all context structures
|
|
+ */
|
|
+ /*
|
|
+ * TODO:101:o: |-> Review etherStatsTable registration context.
|
|
+ */
|
|
+ typedef netsnmp_data_list etherStatsTable_registration;
|
|
+
|
|
+/**********************************************************************/
|
|
+ /*
|
|
+ * TODO:110:r: |-> Review etherStatsTable data context structure.
|
|
+ * This structure is used to represent the data for etherStatsTable.
|
|
+ */
|
|
+ /*
|
|
+ * This structure contains storage for all the columns defined in the
|
|
+ * etherStatsTable.
|
|
+ */
|
|
+ typedef struct etherStatsTable_data_s {
|
|
+
|
|
+ /*
|
|
+ * etherStatsDataSource(2)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/A/W/e/r/d/h
|
|
+ */
|
|
+ oid etherStatsDataSource[128];
|
|
+ size_t etherStatsDataSource_len; /* # of oid elements, not bytes */
|
|
+
|
|
+ /*
|
|
+ * etherStatsDropEvents(3)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ u_long etherStatsDropEvents;
|
|
+
|
|
+ /*
|
|
+ * etherStatsOctets(4)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ u_long etherStatsOctets;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts(5)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ u_long etherStatsPkts;
|
|
+
|
|
+ /*
|
|
+ * etherStatsBroadcastPkts(6)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ u_long etherStatsBroadcastPkts;
|
|
+
|
|
+ /*
|
|
+ * etherStatsMulticastPkts(7)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ u_long etherStatsMulticastPkts;
|
|
+
|
|
+ /*
|
|
+ * etherStatsCRCAlignErrors(8)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ u_long etherStatsCRCAlignErrors;
|
|
+
|
|
+ /*
|
|
+ * etherStatsUndersizePkts(9)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ u_long etherStatsUndersizePkts;
|
|
+
|
|
+ /*
|
|
+ * etherStatsOversizePkts(10)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ u_long etherStatsOversizePkts;
|
|
+
|
|
+ /*
|
|
+ * etherStatsFragments(11)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ u_long etherStatsFragments;
|
|
+
|
|
+ /*
|
|
+ * etherStatsJabbers(12)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ u_long etherStatsJabbers;
|
|
+
|
|
+ /*
|
|
+ * etherStatsCollisions(13)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ u_long etherStatsCollisions;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts64Octets(14)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ u_long etherStatsPkts64Octets;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts65to127Octets(15)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ u_long etherStatsPkts65to127Octets;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts128to255Octets(16)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ u_long etherStatsPkts128to255Octets;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts256to511Octets(17)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ u_long etherStatsPkts256to511Octets;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts512to1023Octets(18)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ u_long etherStatsPkts512to1023Octets;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts1024to1518Octets(19)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ u_long etherStatsPkts1024to1518Octets;
|
|
+
|
|
+ /*
|
|
+ * etherStatsOwner(20)/OwnerString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h
|
|
+ */
|
|
+ char etherStatsOwner[127];
|
|
+ size_t etherStatsOwner_len; /* # of char elements, not bytes */
|
|
+
|
|
+ /*
|
|
+ * etherStatsStatus(21)/EntryStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
|
|
+ */
|
|
+ u_long etherStatsStatus;
|
|
+
|
|
+ } etherStatsTable_data;
|
|
+
|
|
+
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * TODO:115:o: |-> Review etherStatsTable undo context.
|
|
+ * We're just going to use the same data structure for our
|
|
+ * undo_context. If you want to do something more efficent,
|
|
+ * define your typedef here.
|
|
+ */
|
|
+ typedef etherStatsTable_data etherStatsTable_undo_data;
|
|
+
|
|
+ /*
|
|
+ * TODO:120:r: |-> Review etherStatsTable mib index.
|
|
+ * This structure is used to represent the index for etherStatsTable.
|
|
+ */
|
|
+ typedef struct etherStatsTable_mib_index_s {
|
|
+
|
|
+ /*
|
|
+ * etherStatsIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
|
|
+ */
|
|
+ long etherStatsIndex;
|
|
+
|
|
+
|
|
+ } etherStatsTable_mib_index;
|
|
+
|
|
+ /*
|
|
+ * TODO:121:r: | |-> Review etherStatsTable max index length.
|
|
+ * If you KNOW that your indexes will never exceed a certain
|
|
+ * length, update this macro to that length.
|
|
+ */
|
|
+#define MAX_etherStatsTable_IDX_LEN 1
|
|
+
|
|
+
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * TODO:130:o: |-> Review etherStatsTable Row request (rowreq) context.
|
|
+ * When your functions are called, you will be passed a
|
|
+ * etherStatsTable_rowreq_ctx pointer.
|
|
+ */
|
|
+ typedef struct etherStatsTable_rowreq_ctx_s {
|
|
+
|
|
+ /** this must be first for container compare to work */
|
|
+ netsnmp_index oid_idx;
|
|
+ oid oid_tmp[MAX_etherStatsTable_IDX_LEN];
|
|
+
|
|
+ etherStatsTable_mib_index tbl_idx;
|
|
+
|
|
+ etherStatsTable_data data;
|
|
+ unsigned int column_exists_flags; /* flags for existence */
|
|
+ etherStatsTable_undo_data *undo;
|
|
+ unsigned int column_set_flags; /* flags for set columns */
|
|
+
|
|
+
|
|
+ /*
|
|
+ * flags per row. Currently, the first (lower) 8 bits are reserved
|
|
+ * for the user. See mfd.h for other flags.
|
|
+ */
|
|
+ u_int rowreq_flags;
|
|
+
|
|
+ /*
|
|
+ * TODO:131:o: | |-> Add useful data to etherStatsTable rowreq context.
|
|
+ */
|
|
+
|
|
+ /*
|
|
+ * storage for future expansion
|
|
+ */
|
|
+ netsnmp_data_list *etherStatsTable_data_list;
|
|
+
|
|
+ } etherStatsTable_rowreq_ctx;
|
|
+
|
|
+ typedef struct etherStatsTable_ref_rowreq_ctx_s {
|
|
+ etherStatsTable_rowreq_ctx *rowreq_ctx;
|
|
+ } etherStatsTable_ref_rowreq_ctx;
|
|
+
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * function prototypes
|
|
+ */
|
|
+ int
|
|
+ etherStatsTable_pre_request(etherStatsTable_registration *
|
|
+ user_context);
|
|
+ int
|
|
+ etherStatsTable_post_request(etherStatsTable_registration *
|
|
+ user_context, int rc);
|
|
+
|
|
+ int
|
|
+ etherStatsTable_rowreq_ctx_init(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx, void *user_init_ctx);
|
|
+ void
|
|
+ etherStatsTable_rowreq_ctx_cleanup(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ int etherStatsTable_commit(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ etherStatsTable_rowreq_ctx
|
|
+ *etherStatsTable_row_find_by_mib_index(etherStatsTable_mib_index *
|
|
+ mib_idx);
|
|
+
|
|
+ extern oid etherStatsTable_oid[];
|
|
+ extern int etherStatsTable_oid_size;
|
|
+
|
|
+
|
|
+#include "etherStatsTable_interface.h"
|
|
+#include "etherStatsTable_data_access.h"
|
|
+#include "etherStatsTable_data_get.h"
|
|
+#include "etherStatsTable_data_set.h"
|
|
+
|
|
+ /*
|
|
+ * DUMMY markers, ignore
|
|
+ *
|
|
+ * TODO:099:x: *************************************************************
|
|
+ * TODO:199:x: *************************************************************
|
|
+ * TODO:299:x: *************************************************************
|
|
+ * TODO:399:x: *************************************************************
|
|
+ * TODO:499:x: *************************************************************
|
|
+ */
|
|
+
|
|
+#ifdef __cplusplus
|
|
+}
|
|
+#endif
|
|
+#endif /* ETHERSTATSTABLE_H */
|
|
+/** @} */
|
|
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_interface.c net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_interface.c
|
|
--- net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_interface.c 1969-12-31 19:00:00.000000000 -0500
|
|
+++ net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_interface.c 2008-09-12 14:15:42.000000000 -0400
|
|
@@ -0,0 +1,2225 @@
|
|
+/*
|
|
+ * Note: this file originally auto-generated by mib2c using
|
|
+ * version : 15899 $ of $
|
|
+ *
|
|
+ * $Id:$
|
|
+ */
|
|
+/*
|
|
+ * *********************************************************************
|
|
+ * *********************************************************************
|
|
+ * *********************************************************************
|
|
+ * *** ***
|
|
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
|
|
+ * *** ***
|
|
+ * *** ***
|
|
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
|
|
+ * *** ***
|
|
+ * *** ***
|
|
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
|
|
+ * *** ***
|
|
+ * *** ***
|
|
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
|
|
+ * *** ***
|
|
+ * *** ***
|
|
+ * *********************************************************************
|
|
+ * *********************************************************************
|
|
+ * *********************************************************************
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * standard Net-SNMP includes
|
|
+ */
|
|
+#include <net-snmp/net-snmp-config.h>
|
|
+#include <net-snmp/net-snmp-includes.h>
|
|
+#include <net-snmp/agent/net-snmp-agent-includes.h>
|
|
+
|
|
+/*
|
|
+ * include our parent header
|
|
+ */
|
|
+#include "etherStatsTable.h"
|
|
+
|
|
+
|
|
+#include <net-snmp/agent/table_container.h>
|
|
+#include <net-snmp/library/container.h>
|
|
+
|
|
+#include "etherStatsTable_interface.h"
|
|
+
|
|
+#include <ctype.h>
|
|
+
|
|
+/**********************************************************************
|
|
+ **********************************************************************
|
|
+ ***
|
|
+ *** Table etherStatsTable
|
|
+ ***
|
|
+ **********************************************************************
|
|
+ **********************************************************************/
|
|
+/*
|
|
+ * RMON-MIB::etherStatsTable is subid 1 of statistics.
|
|
+ * Its status is Current.
|
|
+ * OID: .1.3.6.1.2.1.16.1.1, length: 9
|
|
+ */
|
|
+typedef struct etherStatsTable_interface_ctx_s {
|
|
+
|
|
+ netsnmp_container *container;
|
|
+ netsnmp_cache *cache;
|
|
+
|
|
+ etherStatsTable_registration *user_ctx;
|
|
+
|
|
+ netsnmp_table_registration_info tbl_info;
|
|
+
|
|
+ netsnmp_baby_steps_access_methods access_multiplexer;
|
|
+
|
|
+ u_int table_dirty;
|
|
+
|
|
+} etherStatsTable_interface_ctx;
|
|
+
|
|
+static etherStatsTable_interface_ctx etherStatsTable_if_ctx;
|
|
+
|
|
+static void
|
|
+_etherStatsTable_container_init(etherStatsTable_interface_ctx * if_ctx);
|
|
+static void
|
|
+_etherStatsTable_container_shutdown(etherStatsTable_interface_ctx *
|
|
+ if_ctx);
|
|
+
|
|
+
|
|
+netsnmp_container *
|
|
+etherStatsTable_container_get(void)
|
|
+{
|
|
+ return etherStatsTable_if_ctx.container;
|
|
+}
|
|
+
|
|
+etherStatsTable_registration *
|
|
+etherStatsTable_registration_get(void)
|
|
+{
|
|
+ return etherStatsTable_if_ctx.user_ctx;
|
|
+}
|
|
+
|
|
+etherStatsTable_registration *
|
|
+etherStatsTable_registration_set(etherStatsTable_registration * newreg)
|
|
+{
|
|
+ etherStatsTable_registration *old = etherStatsTable_if_ctx.user_ctx;
|
|
+ etherStatsTable_if_ctx.user_ctx = newreg;
|
|
+ return old;
|
|
+}
|
|
+
|
|
+int
|
|
+etherStatsTable_container_size(void)
|
|
+{
|
|
+ return CONTAINER_SIZE(etherStatsTable_if_ctx.container);
|
|
+}
|
|
+
|
|
+u_int
|
|
+etherStatsTable_dirty_get(void)
|
|
+{
|
|
+ return etherStatsTable_if_ctx.table_dirty;
|
|
+}
|
|
+
|
|
+void
|
|
+etherStatsTable_dirty_set(u_int status)
|
|
+{
|
|
+ DEBUGMSGTL(("etherStatsTable:etherStatsTable_dirty_set",
|
|
+ "called. was %d, now %d\n",
|
|
+ etherStatsTable_if_ctx.table_dirty, status));
|
|
+ etherStatsTable_if_ctx.table_dirty = status;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * mfd multiplexer modes
|
|
+ */
|
|
+static Netsnmp_Node_Handler _mfd_etherStatsTable_pre_request;
|
|
+static Netsnmp_Node_Handler _mfd_etherStatsTable_post_request;
|
|
+static Netsnmp_Node_Handler _mfd_etherStatsTable_object_lookup;
|
|
+static Netsnmp_Node_Handler _mfd_etherStatsTable_get_values;
|
|
+static Netsnmp_Node_Handler _mfd_etherStatsTable_check_objects;
|
|
+static Netsnmp_Node_Handler _mfd_etherStatsTable_undo_setup;
|
|
+static Netsnmp_Node_Handler _mfd_etherStatsTable_set_values;
|
|
+static Netsnmp_Node_Handler _mfd_etherStatsTable_undo_cleanup;
|
|
+static Netsnmp_Node_Handler _mfd_etherStatsTable_undo_values;
|
|
+static Netsnmp_Node_Handler _mfd_etherStatsTable_commit;
|
|
+static Netsnmp_Node_Handler _mfd_etherStatsTable_undo_commit;
|
|
+static Netsnmp_Node_Handler _mfd_etherStatsTable_irreversible_commit;
|
|
+
|
|
+NETSNMP_STATIC_INLINE int
|
|
+_etherStatsTable_undo_column(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ netsnmp_variable_list * var, int column);
|
|
+
|
|
+NETSNMP_STATIC_INLINE int
|
|
+_etherStatsTable_check_indexes(etherStatsTable_rowreq_ctx * rowreq_ctx);
|
|
+
|
|
+etherStatsTable_data *etherStatsTable_allocate_data(void);
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ * Initialize the table etherStatsTable
|
|
+ * (Define its contents and how it's structured)
|
|
+ */
|
|
+void
|
|
+_etherStatsTable_initialize_interface(etherStatsTable_registration *
|
|
+ reg_ptr, u_long flags)
|
|
+{
|
|
+ netsnmp_baby_steps_access_methods *access_multiplexer =
|
|
+ ðerStatsTable_if_ctx.access_multiplexer;
|
|
+ netsnmp_table_registration_info *tbl_info =
|
|
+ ðerStatsTable_if_ctx.tbl_info;
|
|
+ netsnmp_handler_registration *reginfo;
|
|
+ netsnmp_mib_handler *handler;
|
|
+ int mfd_modes = 0;
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_etherStatsTable_initialize_interface", "called\n"));
|
|
+
|
|
+
|
|
+ /*************************************************
|
|
+ *
|
|
+ * save interface context for etherStatsTable
|
|
+ */
|
|
+ /*
|
|
+ * Setting up the table's definition
|
|
+ */
|
|
+ netsnmp_table_helper_add_indexes(tbl_info, ASN_INTEGER,
|
|
+ /** index: etherStatsIndex */
|
|
+ 0);
|
|
+
|
|
+ /*
|
|
+ * Define the minimum and maximum accessible columns. This
|
|
+ * optimizes retrival.
|
|
+ */
|
|
+ tbl_info->min_column = ETHERSTATSTABLE_MIN_COL;
|
|
+ tbl_info->max_column = ETHERSTATSTABLE_MAX_COL;
|
|
+
|
|
+ /*
|
|
+ * save users context
|
|
+ */
|
|
+ etherStatsTable_if_ctx.user_ctx = reg_ptr;
|
|
+
|
|
+ /*
|
|
+ * call data access initialization code
|
|
+ */
|
|
+ etherStatsTable_init_data(reg_ptr);
|
|
+
|
|
+ /*
|
|
+ * set up the container
|
|
+ */
|
|
+ _etherStatsTable_container_init(ðerStatsTable_if_ctx);
|
|
+ if (NULL == etherStatsTable_if_ctx.container) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "could not initialize container for etherStatsTable\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * access_multiplexer: REQUIRED wrapper for get request handling
|
|
+ */
|
|
+ access_multiplexer->object_lookup = _mfd_etherStatsTable_object_lookup;
|
|
+ access_multiplexer->get_values = _mfd_etherStatsTable_get_values;
|
|
+
|
|
+ /*
|
|
+ * no wrappers yet
|
|
+ */
|
|
+ access_multiplexer->pre_request = _mfd_etherStatsTable_pre_request;
|
|
+ access_multiplexer->post_request = _mfd_etherStatsTable_post_request;
|
|
+
|
|
+
|
|
+ /*
|
|
+ * REQUIRED wrappers for set request handling
|
|
+ */
|
|
+ access_multiplexer->object_syntax_checks =
|
|
+ _mfd_etherStatsTable_check_objects;
|
|
+ access_multiplexer->undo_setup = _mfd_etherStatsTable_undo_setup;
|
|
+ access_multiplexer->undo_cleanup = _mfd_etherStatsTable_undo_cleanup;
|
|
+ access_multiplexer->set_values = _mfd_etherStatsTable_set_values;
|
|
+ access_multiplexer->undo_sets = _mfd_etherStatsTable_undo_values;
|
|
+
|
|
+ /*
|
|
+ * no wrappers yet
|
|
+ */
|
|
+ access_multiplexer->commit = _mfd_etherStatsTable_commit;
|
|
+ access_multiplexer->undo_commit = _mfd_etherStatsTable_undo_commit;
|
|
+ access_multiplexer->irreversible_commit =
|
|
+ _mfd_etherStatsTable_irreversible_commit;
|
|
+
|
|
+ /*************************************************
|
|
+ *
|
|
+ * Create a registration, save our reg data, register table.
|
|
+ */
|
|
+ DEBUGMSGTL(("etherStatsTable:init_etherStatsTable",
|
|
+ "Registering etherStatsTable as a mibs-for-dummies table.\n"));
|
|
+ handler =
|
|
+ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
|
|
+ reginfo =
|
|
+ netsnmp_handler_registration_create("etherStatsTable", handler,
|
|
+ etherStatsTable_oid,
|
|
+ etherStatsTable_oid_size,
|
|
+ HANDLER_CAN_BABY_STEP |
|
|
+ HANDLER_CAN_RWRITE);
|
|
+ if (NULL == reginfo) {
|
|
+ snmp_log(LOG_ERR, "error registering table etherStatsTable\n");
|
|
+ return;
|
|
+ }
|
|
+ reginfo->my_reg_void = ðerStatsTable_if_ctx;
|
|
+
|
|
+ /*************************************************
|
|
+ *
|
|
+ * set up baby steps handler, create it and inject it
|
|
+ */
|
|
+ if (access_multiplexer->object_lookup)
|
|
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
|
|
+ if (access_multiplexer->set_values)
|
|
+ mfd_modes |= BABY_STEP_SET_VALUES;
|
|
+ if (access_multiplexer->irreversible_commit)
|
|
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
|
|
+ if (access_multiplexer->object_syntax_checks)
|
|
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
|
|
+
|
|
+ if (access_multiplexer->pre_request)
|
|
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
|
|
+ if (access_multiplexer->post_request)
|
|
+ mfd_modes |= BABY_STEP_POST_REQUEST;
|
|
+
|
|
+ if (access_multiplexer->undo_setup)
|
|
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
|
|
+ if (access_multiplexer->undo_cleanup)
|
|
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
|
|
+ if (access_multiplexer->undo_sets)
|
|
+ mfd_modes |= BABY_STEP_UNDO_SETS;
|
|
+
|
|
+ if (access_multiplexer->row_creation)
|
|
+ mfd_modes |= BABY_STEP_ROW_CREATE;
|
|
+ if (access_multiplexer->consistency_checks)
|
|
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
|
|
+ if (access_multiplexer->commit)
|
|
+ mfd_modes |= BABY_STEP_COMMIT;
|
|
+ if (access_multiplexer->undo_commit)
|
|
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
|
|
+
|
|
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
|
|
+ netsnmp_inject_handler(reginfo, handler);
|
|
+
|
|
+ /*************************************************
|
|
+ *
|
|
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
|
|
+ */
|
|
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
|
|
+ netsnmp_inject_handler(reginfo, handler);
|
|
+
|
|
+ /*************************************************
|
|
+ *
|
|
+ * inject container_table helper
|
|
+ */
|
|
+ handler =
|
|
+ netsnmp_container_table_handler_get(tbl_info,
|
|
+ etherStatsTable_if_ctx.
|
|
+ container,
|
|
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
|
|
+ netsnmp_inject_handler(reginfo, handler);
|
|
+
|
|
+ /*************************************************
|
|
+ *
|
|
+ * inject cache helper
|
|
+ */
|
|
+ if (NULL != etherStatsTable_if_ctx.cache) {
|
|
+ handler = netsnmp_cache_handler_get(etherStatsTable_if_ctx.cache);
|
|
+ netsnmp_inject_handler(reginfo, handler);
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * register table
|
|
+ */
|
|
+ netsnmp_register_table(reginfo, tbl_info);
|
|
+
|
|
+} /* _etherStatsTable_initialize_interface */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ * Shutdown the table etherStatsTable
|
|
+ */
|
|
+void
|
|
+_etherStatsTable_shutdown_interface(etherStatsTable_registration * reg_ptr)
|
|
+{
|
|
+ /*
|
|
+ * shutdown the container
|
|
+ */
|
|
+ _etherStatsTable_container_shutdown(ðerStatsTable_if_ctx);
|
|
+}
|
|
+
|
|
+void
|
|
+etherStatsTable_valid_columns_set(netsnmp_column_info *vc)
|
|
+{
|
|
+ etherStatsTable_if_ctx.tbl_info.valid_columns = vc;
|
|
+} /* etherStatsTable_valid_columns_set */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ * convert the index component stored in the context to an oid
|
|
+ */
|
|
+int
|
|
+etherStatsTable_index_to_oid(netsnmp_index * oid_idx,
|
|
+ etherStatsTable_mib_index * mib_idx)
|
|
+{
|
|
+ int err = SNMP_ERR_NOERROR;
|
|
+
|
|
+ /*
|
|
+ * temp storage for parsing indexes
|
|
+ */
|
|
+ /*
|
|
+ * etherStatsIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
|
|
+ */
|
|
+ netsnmp_variable_list var_etherStatsIndex;
|
|
+
|
|
+ /*
|
|
+ * set up varbinds
|
|
+ */
|
|
+ memset(&var_etherStatsIndex, 0x00, sizeof(var_etherStatsIndex));
|
|
+ var_etherStatsIndex.type = ASN_INTEGER;
|
|
+
|
|
+ /*
|
|
+ * chain temp index varbinds together
|
|
+ */
|
|
+ var_etherStatsIndex.next_variable = NULL;
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_index_to_oid",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * etherStatsIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
|
|
+ */
|
|
+ snmp_set_var_value(&var_etherStatsIndex,
|
|
+ (u_char *) & mib_idx->etherStatsIndex,
|
|
+ sizeof(mib_idx->etherStatsIndex));
|
|
+
|
|
+
|
|
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
|
|
+ NULL, 0, &var_etherStatsIndex);
|
|
+ if (err)
|
|
+ snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
|
|
+
|
|
+ /*
|
|
+ * parsing may have allocated memory. free it.
|
|
+ */
|
|
+ snmp_reset_var_buffers(&var_etherStatsIndex);
|
|
+
|
|
+ return err;
|
|
+} /* etherStatsTable_index_to_oid */
|
|
+
|
|
+/**
|
|
+ * extract etherStatsTable indexes from a netsnmp_index
|
|
+ *
|
|
+ * @retval SNMP_ERR_NOERROR : no error
|
|
+ * @retval SNMP_ERR_GENERR : error
|
|
+ */
|
|
+int
|
|
+etherStatsTable_index_from_oid(netsnmp_index * oid_idx,
|
|
+ etherStatsTable_mib_index * mib_idx)
|
|
+{
|
|
+ int err = SNMP_ERR_NOERROR;
|
|
+
|
|
+ /*
|
|
+ * temp storage for parsing indexes
|
|
+ */
|
|
+ /*
|
|
+ * etherStatsIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
|
|
+ */
|
|
+ netsnmp_variable_list var_etherStatsIndex;
|
|
+
|
|
+ /*
|
|
+ * set up varbinds
|
|
+ */
|
|
+ memset(&var_etherStatsIndex, 0x00, sizeof(var_etherStatsIndex));
|
|
+ var_etherStatsIndex.type = ASN_INTEGER;
|
|
+
|
|
+ /*
|
|
+ * chain temp index varbinds together
|
|
+ */
|
|
+ var_etherStatsIndex.next_variable = NULL;
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_index_from_oid",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * parse the oid into the individual index components
|
|
+ */
|
|
+ err = parse_oid_indexes(oid_idx->oids, oid_idx->len,
|
|
+ &var_etherStatsIndex);
|
|
+ if (err == SNMP_ERR_NOERROR) {
|
|
+ /*
|
|
+ * copy out values
|
|
+ */
|
|
+ mib_idx->etherStatsIndex =
|
|
+ *((long *) var_etherStatsIndex.val.string);
|
|
+
|
|
+
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * parsing may have allocated memory. free it.
|
|
+ */
|
|
+ snmp_reset_var_buffers(&var_etherStatsIndex);
|
|
+
|
|
+ return err;
|
|
+} /* etherStatsTable_index_from_oid */
|
|
+
|
|
+
|
|
+/*
|
|
+ * etherStatsTable_allocate_data
|
|
+ *
|
|
+ * Purpose: create new etherStatsTable_data.
|
|
+ */
|
|
+etherStatsTable_data *
|
|
+etherStatsTable_allocate_data(void)
|
|
+{
|
|
+ etherStatsTable_data *rtn = SNMP_MALLOC_TYPEDEF(etherStatsTable_data);
|
|
+
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_allocate_data",
|
|
+ "called\n"));
|
|
+
|
|
+ if (NULL == rtn) {
|
|
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
|
|
+ "etherStatsTable_data.\n");
|
|
+ }
|
|
+
|
|
+ return rtn;
|
|
+} /* etherStatsTable_allocate_data */
|
|
+
|
|
+/*
|
|
+ * etherStatsTable_release_data
|
|
+ *
|
|
+ * Purpose: release etherStatsTable data.
|
|
+ */
|
|
+void
|
|
+etherStatsTable_release_data(etherStatsTable_data * data)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:etherStatsTable:etherStatsTable_release_data",
|
|
+ "called\n"));
|
|
+
|
|
+ free(data);
|
|
+} /* etherStatsTable_release_data */
|
|
+
|
|
+/*
|
|
+ *********************************************************************
|
|
+ * @internal
|
|
+ * allocate resources for a etherStatsTable_rowreq_ctx
|
|
+ */
|
|
+etherStatsTable_rowreq_ctx *
|
|
+etherStatsTable_allocate_rowreq_ctx(void *user_init_ctx)
|
|
+{
|
|
+ etherStatsTable_rowreq_ctx *rowreq_ctx =
|
|
+ SNMP_MALLOC_TYPEDEF(etherStatsTable_rowreq_ctx);
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:etherStatsTable_allocate_rowreq_ctx", "called\n"));
|
|
+
|
|
+ if (NULL == rowreq_ctx) {
|
|
+ snmp_log(LOG_ERR, "Couldn't allocate memory for a "
|
|
+ "etherStatsTable_rowreq_ctx.\n");
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
|
|
+
|
|
+ rowreq_ctx->etherStatsTable_data_list = NULL;
|
|
+
|
|
+ /*
|
|
+ * if we allocated data, call init routine
|
|
+ */
|
|
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
|
|
+ if (SNMPERR_SUCCESS !=
|
|
+ etherStatsTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
|
|
+ etherStatsTable_release_rowreq_ctx(rowreq_ctx);
|
|
+ rowreq_ctx = NULL;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return rowreq_ctx;
|
|
+} /* etherStatsTable_allocate_rowreq_ctx */
|
|
+
|
|
+/*
|
|
+ * @internal
|
|
+ * release resources for a etherStatsTable_rowreq_ctx
|
|
+ */
|
|
+void
|
|
+etherStatsTable_release_rowreq_ctx(etherStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:etherStatsTable_release_rowreq_ctx", "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ etherStatsTable_rowreq_ctx_cleanup(rowreq_ctx);
|
|
+
|
|
+ if (rowreq_ctx->undo)
|
|
+ etherStatsTable_release_data(rowreq_ctx->undo);
|
|
+
|
|
+ /*
|
|
+ * free index oid pointer
|
|
+ */
|
|
+ if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
|
|
+ free(rowreq_ctx->oid_idx.oids);
|
|
+
|
|
+ SNMP_FREE(rowreq_ctx);
|
|
+} /* etherStatsTable_release_rowreq_ctx */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ * wrapper
|
|
+ */
|
|
+static int
|
|
+_mfd_etherStatsTable_pre_request(netsnmp_mib_handler *handler,
|
|
+ netsnmp_handler_registration *reginfo,
|
|
+ netsnmp_agent_request_info *agtreq_info,
|
|
+ netsnmp_request_info *requests)
|
|
+{
|
|
+ int rc;
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_pre_request", "called\n"));
|
|
+
|
|
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable",
|
|
+ "skipping additional pre_request\n"));
|
|
+ return SNMP_ERR_NOERROR;
|
|
+ }
|
|
+
|
|
+ rc = etherStatsTable_pre_request(etherStatsTable_if_ctx.user_ctx);
|
|
+ if (MFD_SUCCESS != rc) {
|
|
+ /*
|
|
+ * nothing we can do about it but log it
|
|
+ */
|
|
+ DEBUGMSGTL(("etherStatsTable", "error %d from "
|
|
+ "etherStatsTable_pre_request\n", rc));
|
|
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
|
|
+ }
|
|
+
|
|
+ return SNMP_ERR_NOERROR;
|
|
+} /* _mfd_etherStatsTable_pre_request */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ * wrapper
|
|
+ */
|
|
+static int
|
|
+_mfd_etherStatsTable_post_request(netsnmp_mib_handler *handler,
|
|
+ netsnmp_handler_registration *reginfo,
|
|
+ netsnmp_agent_request_info *agtreq_info,
|
|
+ netsnmp_request_info *requests)
|
|
+{
|
|
+ etherStatsTable_rowreq_ctx *rowreq_ctx =
|
|
+ netsnmp_container_table_row_extract(requests);
|
|
+ int rc, packet_rc;
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_post_request", "called\n"));
|
|
+
|
|
+ /*
|
|
+ * release row context, if deleted
|
|
+ */
|
|
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
|
|
+ etherStatsTable_release_rowreq_ctx(rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * wait for last call before calling user
|
|
+ */
|
|
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable",
|
|
+ "waiting for last post_request\n"));
|
|
+ return SNMP_ERR_NOERROR;
|
|
+ }
|
|
+
|
|
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
|
|
+ if ((MFD_SUCCESS != packet_rc) && etherStatsTable_dirty_get()) {
|
|
+ /*
|
|
+ * we shouldn't get here. the undo steps should also clear
|
|
+ * the dirty flags.
|
|
+ */
|
|
+ snmp_log(LOG_WARNING,
|
|
+ "etherStatsTable dirty flag set in post_request "
|
|
+ "but status != SUCCESS.\n");
|
|
+ }
|
|
+
|
|
+ rc = etherStatsTable_post_request(etherStatsTable_if_ctx.user_ctx,
|
|
+ packet_rc);
|
|
+ if (MFD_SUCCESS != rc) {
|
|
+ /*
|
|
+ * nothing we can do about it but log it
|
|
+ */
|
|
+ DEBUGMSGTL(("etherStatsTable", "error %d from "
|
|
+ "etherStatsTable_post_request\n", rc));
|
|
+ }
|
|
+
|
|
+ return SNMP_ERR_NOERROR;
|
|
+} /* _mfd_etherStatsTable_post_request */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ * wrapper
|
|
+ */
|
|
+static etherStatsTable_rowreq_ctx *
|
|
+_mfd_etherStatsTable_rowreq_from_index(netsnmp_index * oid_idx,
|
|
+ int *rc_ptr)
|
|
+{
|
|
+ etherStatsTable_rowreq_ctx *rowreq_ctx;
|
|
+ etherStatsTable_mib_index mib_idx;
|
|
+ int rc;
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_rowreq_from_index", "called\n"));
|
|
+
|
|
+ if (NULL == rc_ptr)
|
|
+ rc_ptr = &rc;
|
|
+ *rc_ptr = MFD_SUCCESS;
|
|
+
|
|
+ memset(&mib_idx, 0x0, sizeof(mib_idx));
|
|
+
|
|
+ /*
|
|
+ * try to parse oid
|
|
+ */
|
|
+ *rc_ptr = etherStatsTable_index_from_oid(oid_idx, &mib_idx);
|
|
+ if (MFD_SUCCESS != *rc_ptr) {
|
|
+ DEBUGMSGT(("etherStatsTable", "error parsing index\n"));
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * allocate new context
|
|
+ */
|
|
+ rowreq_ctx = etherStatsTable_allocate_rowreq_ctx(NULL);
|
|
+ if (NULL == rowreq_ctx) {
|
|
+ *rc_ptr = MFD_ERROR;
|
|
+ return NULL; /* msg already logged */
|
|
+ }
|
|
+
|
|
+ memcpy(&rowreq_ctx->tbl_idx, &mib_idx, sizeof(mib_idx));
|
|
+
|
|
+ /*
|
|
+ * check indexes
|
|
+ */
|
|
+ *rc_ptr = _etherStatsTable_check_indexes(rowreq_ctx);
|
|
+ if (MFD_SUCCESS != *rc_ptr) {
|
|
+ netsnmp_assert((*rc_ptr == SNMP_ERR_NOCREATION) ||
|
|
+ (*rc_ptr == SNMP_ERR_INCONSISTENTNAME));
|
|
+ etherStatsTable_release_rowreq_ctx(rowreq_ctx);
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * copy indexes
|
|
+ */
|
|
+ rowreq_ctx->oid_idx.len = oid_idx->len;
|
|
+ memcpy(rowreq_ctx->oid_idx.oids, oid_idx->oids,
|
|
+ oid_idx->len * sizeof(oid));
|
|
+
|
|
+ return rowreq_ctx;
|
|
+} /* _mfd_etherStatsTable_rowreq_from_index */
|
|
+
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ * wrapper
|
|
+ */
|
|
+static int
|
|
+_mfd_etherStatsTable_object_lookup(netsnmp_mib_handler *handler,
|
|
+ netsnmp_handler_registration *reginfo,
|
|
+ netsnmp_agent_request_info *agtreq_info,
|
|
+ netsnmp_request_info *requests)
|
|
+{
|
|
+ int rc = SNMP_ERR_NOERROR;
|
|
+ etherStatsTable_rowreq_ctx *rowreq_ctx =
|
|
+ netsnmp_container_table_row_extract(requests);
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_object_lookup", "called\n"));
|
|
+
|
|
+ /*
|
|
+ * get our context from mfd
|
|
+ * etherStatsTable_interface_ctx *if_ctx =
|
|
+ * (etherStatsTable_interface_ctx *)reginfo->my_reg_void;
|
|
+ */
|
|
+
|
|
+ if (NULL == rowreq_ctx) {
|
|
+ netsnmp_table_request_info *tblreq_info;
|
|
+ netsnmp_index oid_idx;
|
|
+
|
|
+ tblreq_info = netsnmp_extract_table_info(requests);
|
|
+ if (NULL == tblreq_info) {
|
|
+ snmp_log(LOG_ERR, "request had no table info\n");
|
|
+ return MFD_ERROR;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * try create rowreq
|
|
+ */
|
|
+ oid_idx.oids = tblreq_info->index_oid;
|
|
+ oid_idx.len = tblreq_info->index_oid_len;
|
|
+
|
|
+ rowreq_ctx = _mfd_etherStatsTable_rowreq_from_index(&oid_idx, &rc);
|
|
+ if (MFD_SUCCESS == rc) {
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+ rowreq_ctx->rowreq_flags |= MFD_ROW_CREATED;
|
|
+ /*
|
|
+ * add rowreq_ctx to request data lists
|
|
+ */
|
|
+ netsnmp_container_table_row_insert(requests,
|
|
+ (netsnmp_index *)
|
|
+ rowreq_ctx);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (MFD_SUCCESS != rc)
|
|
+ netsnmp_request_set_error_all(requests, rc);
|
|
+ else
|
|
+ etherStatsTable_row_prep(rowreq_ctx);
|
|
+
|
|
+ return SNMP_VALIDATE_ERR(rc);
|
|
+} /* _mfd_etherStatsTable_object_lookup */
|
|
+
|
|
+/***********************************************************************
|
|
+ *
|
|
+ * GET processing
|
|
+ *
|
|
+ ***********************************************************************/
|
|
+/*
|
|
+ * @internal
|
|
+ * Retrieve the value for a particular column
|
|
+ */
|
|
+NETSNMP_STATIC_INLINE int
|
|
+_etherStatsTable_get_column(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ netsnmp_variable_list * var, int column)
|
|
+{
|
|
+ int rc = SNMPERR_SUCCESS;
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column",
|
|
+ "called for %d\n", column));
|
|
+
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ switch (column) {
|
|
+
|
|
+ /*
|
|
+ * (INDEX) etherStatsIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSINDEX:
|
|
+ var->type = ASN_INTEGER;
|
|
+ var->val_len = sizeof(long);
|
|
+ (*var->val.integer) = rowreq_ctx->tbl_idx.etherStatsIndex;
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsDataSource(2)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/A/W/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSDATASOURCE:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSDATASOURCE_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsDataSource) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->type = ASN_OBJECT_ID;
|
|
+ rc = etherStatsDataSource_get(rowreq_ctx,
|
|
+ (oid **) & var->val.string,
|
|
+ &var->val_len);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsDropEvents(3)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSDROPEVENTS:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSDROPEVENTS_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsDropEvents) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = etherStatsDropEvents_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsOctets(4)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSOCTETS:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSOCTETS_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsOctets) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = etherStatsOctets_get(rowreq_ctx, (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts(5)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSPKTS:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSPKTS_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsPkts) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = etherStatsPkts_get(rowreq_ctx, (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsBroadcastPkts(6)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSBROADCASTPKTS:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSBROADCASTPKTS_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsBroadcastPkts) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = etherStatsBroadcastPkts_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsMulticastPkts(7)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSMULTICASTPKTS:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSMULTICASTPKTS_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsMulticastPkts) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = etherStatsMulticastPkts_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsCRCAlignErrors(8)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSCRCALIGNERRORS:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSCRCALIGNERRORS_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsCRCAlignErrors) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = etherStatsCRCAlignErrors_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsUndersizePkts(9)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSUNDERSIZEPKTS:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSUNDERSIZEPKTS_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsUndersizePkts) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = etherStatsUndersizePkts_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsOversizePkts(10)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSOVERSIZEPKTS:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSOVERSIZEPKTS_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsOversizePkts) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = etherStatsOversizePkts_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsFragments(11)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSFRAGMENTS:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSFRAGMENTS_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsFragments) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = etherStatsFragments_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsJabbers(12)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSJABBERS:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSJABBERS_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ snmp_log (LOG_ERR, "internal:etherStatsTable:_mfd_etherStatsTable_get_column, column %d (etherStatsJabbers) doesn't exist for the interface with index %ld\n", column, rowreq_ctx->tbl_idx.etherStatsIndex);
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsJabbers) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = etherStatsJabbers_get(rowreq_ctx, (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsCollisions(13)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSCOLLISIONS:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSCOLLISIONS_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsCollisions) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = etherStatsCollisions_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts64Octets(14)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSPKTS64OCTETS:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSPKTS64OCTETS_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsPkts64Octets) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = etherStatsPkts64Octets_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts65to127Octets(15)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSPKTS65TO127OCTETS:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSPKTS65TO127OCTETS_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsPkts65to127Octets) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = etherStatsPkts65to127Octets_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts128to255Octets(16)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSPKTS128TO255OCTETS:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSPKTS128TO255OCTETS_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsPkts128to255Octets) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = etherStatsPkts128to255Octets_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts256to511Octets(17)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSPKTS256TO511OCTETS:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSPKTS256TO511OCTETS_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsPkts256to511Octets) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = etherStatsPkts256to511Octets_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts512to1023Octets(18)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSPKTS512TO1023OCTETS:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSPKTS512TO1023OCTETS_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsPkts512to1023Octets) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = etherStatsPkts512to1023Octets_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts1024to1518Octets(19)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSPKTS1024TO1518OCTETS:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSPKTS1024TO1518OCTETS_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsPkts1024to1518Octets) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = etherStatsPkts1024to1518Octets_get(rowreq_ctx,
|
|
+ (u_long *) var->val.
|
|
+ string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsOwner(20)/OwnerString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSOWNER:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSOWNER_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsOwner) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->type = ASN_OCTET_STR;
|
|
+ rc = etherStatsOwner_get(rowreq_ctx, (char **) &var->val.string,
|
|
+ &var->val_len);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsStatus(21)/EntryStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSSTATUS:
|
|
+ if (!
|
|
+ (COLUMN_ETHERSTATSSTATUS_FLAG & rowreq_ctx->
|
|
+ column_exists_flags)) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "column %d (etherStatsStatus) doesn't exist\n", column));
|
|
+ return MFD_SKIP;
|
|
+ }
|
|
+
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_INTEGER;
|
|
+ rc = etherStatsStatus_get(rowreq_ctx, (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ default:
|
|
+ if (ETHERSTATSTABLE_MIN_COL <= column
|
|
+ && column <= ETHERSTATSTABLE_MAX_COL) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_column", "assume column %d is reserved\n", column));
|
|
+ rc = MFD_SKIP;
|
|
+ } else {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "unknown column %d in _etherStatsTable_get_column.\n",
|
|
+ column);
|
|
+ }
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ return rc;
|
|
+} /* _etherStatsTable_get_column */
|
|
+
|
|
+int
|
|
+_mfd_etherStatsTable_get_values(netsnmp_mib_handler *handler,
|
|
+ netsnmp_handler_registration *reginfo,
|
|
+ netsnmp_agent_request_info *agtreq_info,
|
|
+ netsnmp_request_info *requests)
|
|
+{
|
|
+ etherStatsTable_rowreq_ctx *rowreq_ctx =
|
|
+ netsnmp_container_table_row_extract(requests);
|
|
+ netsnmp_table_request_info *tri;
|
|
+ u_char *old_string;
|
|
+ void (*dataFreeHook) (void *);
|
|
+ int rc;
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_get_values",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ DEBUGMSGTL(("9:etherStatsTable:_mfd_etherStatsTable_get_values",
|
|
+ "exists %u\n", rowreq_ctx->column_exists_flags));
|
|
+
|
|
+ for (; requests; requests = requests->next) {
|
|
+ /*
|
|
+ * save old pointer, so we can free it if replaced
|
|
+ */
|
|
+ old_string = requests->requestvb->val.string;
|
|
+ dataFreeHook = requests->requestvb->dataFreeHook;
|
|
+ if (NULL == requests->requestvb->val.string) {
|
|
+ requests->requestvb->val.string = requests->requestvb->buf;
|
|
+ requests->requestvb->val_len =
|
|
+ sizeof(requests->requestvb->buf);
|
|
+ } else if (requests->requestvb->buf ==
|
|
+ requests->requestvb->val.string) {
|
|
+ if (requests->requestvb->val_len !=
|
|
+ sizeof(requests->requestvb->buf))
|
|
+ requests->requestvb->val_len =
|
|
+ sizeof(requests->requestvb->buf);
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * get column data
|
|
+ */
|
|
+ tri = netsnmp_extract_table_info(requests);
|
|
+ if (NULL == tri)
|
|
+ continue;
|
|
+
|
|
+ rc = _etherStatsTable_get_column(rowreq_ctx, requests->requestvb,
|
|
+ tri->colnum);
|
|
+ if (rc) {
|
|
+ if (MFD_SKIP == rc) {
|
|
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
|
|
+ rc = SNMP_ERR_NOERROR;
|
|
+ }
|
|
+ } else if (NULL == requests->requestvb->val.string) {
|
|
+ snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
|
|
+ rc = SNMP_ERR_GENERR;
|
|
+ }
|
|
+ if (rc)
|
|
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
|
|
+
|
|
+ /*
|
|
+ * if the buffer wasn't used previously for the old data (i.e. it
|
|
+ * was allcoated memory) and the get routine replaced the pointer,
|
|
+ * we need to free the previous pointer.
|
|
+ */
|
|
+ if (old_string && (old_string != requests->requestvb->buf) &&
|
|
+ (requests->requestvb->val.string != old_string)) {
|
|
+ if (dataFreeHook)
|
|
+ (*dataFreeHook) (old_string);
|
|
+ else
|
|
+ free(old_string);
|
|
+ }
|
|
+ } /* for results */
|
|
+
|
|
+ return SNMP_ERR_NOERROR;
|
|
+} /* _mfd_etherStatsTable_get_values */
|
|
+
|
|
+NETSNMP_STATIC_INLINE int
|
|
+_etherStatsTable_check_indexes(etherStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+ int rc = SNMPERR_SUCCESS;
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_etherStatsTable_check_indexes",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+
|
|
+ /*
|
|
+ * (INDEX) etherStatsIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
|
|
+ */
|
|
+ /*
|
|
+ * check defined range(s).
|
|
+ */
|
|
+ if ((SNMPERR_SUCCESS == rc)
|
|
+ && ((rowreq_ctx->tbl_idx.etherStatsIndex < 1)
|
|
+ || (rowreq_ctx->tbl_idx.etherStatsIndex > 65535))
|
|
+ ) {
|
|
+ rc = SNMP_ERR_WRONGVALUE;
|
|
+ }
|
|
+ if (MFD_SUCCESS != rc)
|
|
+ return rc;
|
|
+ rc = etherStatsIndex_check_index(rowreq_ctx);
|
|
+ if (MFD_SUCCESS != rc)
|
|
+ return SNMP_ERR_NOCREATION;
|
|
+
|
|
+ /*
|
|
+ * if individual parts look ok, check them as a whole
|
|
+ */
|
|
+ return etherStatsTable_validate_index(etherStatsTable_if_ctx.user_ctx,
|
|
+ rowreq_ctx);
|
|
+} /* _etherStatsTable_check_indexes */
|
|
+
|
|
+/***********************************************************************
|
|
+ *
|
|
+ * SET processing
|
|
+ *
|
|
+ ***********************************************************************/
|
|
+
|
|
+/*----------------------------------------------------------------------
|
|
+ *
|
|
+ * SET: Syntax checks
|
|
+ *
|
|
+ *---------------------------------------------------------------------*/
|
|
+/*
|
|
+ * @internal
|
|
+ * Check the syntax for a particular column
|
|
+ */
|
|
+NETSNMP_STATIC_INLINE int
|
|
+_etherStatsTable_check_column(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ netsnmp_variable_list * var, int column)
|
|
+{
|
|
+ int rc = SNMPERR_SUCCESS;
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_etherStatsTable_check_column",
|
|
+ "called for %d\n", column));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ switch (column) {
|
|
+ /*
|
|
+ * (INDEX) etherStatsIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSINDEX:
|
|
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsDataSource(2)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/A/W/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSDATASOURCE:
|
|
+ rc = netsnmp_check_vb_type_and_max_size(var, ASN_OBJECT_ID,
|
|
+ sizeof(rowreq_ctx->data.
|
|
+ etherStatsDataSource));
|
|
+ if (SNMPERR_SUCCESS != rc) {
|
|
+ DEBUGMSGTL(("etherStatsTable:_etherStatsTable_check_column:etherStatsDataSource", "varbind validation failed (eg bad type or size)\n"));
|
|
+ } else {
|
|
+ rc = etherStatsDataSource_check_value(rowreq_ctx,
|
|
+ (oid *) var->val.string,
|
|
+ var->val_len);
|
|
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
|
|
+ && (MFD_NOT_VALID_NOW != rc)) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "bad rc %d from etherStatsDataSource_check_value\n",
|
|
+ rc);
|
|
+ rc = SNMP_ERR_GENERR;
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsDropEvents(3)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSDROPEVENTS:
|
|
+ rc = SNMP_ERR_NOTWRITABLE;
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsOctets(4)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSOCTETS:
|
|
+ rc = SNMP_ERR_NOTWRITABLE;
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts(5)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSPKTS:
|
|
+ rc = SNMP_ERR_NOTWRITABLE;
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsBroadcastPkts(6)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSBROADCASTPKTS:
|
|
+ rc = SNMP_ERR_NOTWRITABLE;
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsMulticastPkts(7)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSMULTICASTPKTS:
|
|
+ rc = SNMP_ERR_NOTWRITABLE;
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsCRCAlignErrors(8)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSCRCALIGNERRORS:
|
|
+ rc = SNMP_ERR_NOTWRITABLE;
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsUndersizePkts(9)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSUNDERSIZEPKTS:
|
|
+ rc = SNMP_ERR_NOTWRITABLE;
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsOversizePkts(10)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSOVERSIZEPKTS:
|
|
+ rc = SNMP_ERR_NOTWRITABLE;
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsFragments(11)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSFRAGMENTS:
|
|
+ rc = SNMP_ERR_NOTWRITABLE;
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsJabbers(12)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSJABBERS:
|
|
+ rc = SNMP_ERR_NOTWRITABLE;
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsCollisions(13)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSCOLLISIONS:
|
|
+ rc = SNMP_ERR_NOTWRITABLE;
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts64Octets(14)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSPKTS64OCTETS:
|
|
+ rc = SNMP_ERR_NOTWRITABLE;
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts65to127Octets(15)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSPKTS65TO127OCTETS:
|
|
+ rc = SNMP_ERR_NOTWRITABLE;
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts128to255Octets(16)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSPKTS128TO255OCTETS:
|
|
+ rc = SNMP_ERR_NOTWRITABLE;
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts256to511Octets(17)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSPKTS256TO511OCTETS:
|
|
+ rc = SNMP_ERR_NOTWRITABLE;
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts512to1023Octets(18)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSPKTS512TO1023OCTETS:
|
|
+ rc = SNMP_ERR_NOTWRITABLE;
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsPkts1024to1518Octets(19)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSPKTS1024TO1518OCTETS:
|
|
+ rc = SNMP_ERR_NOTWRITABLE;
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsOwner(20)/OwnerString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSOWNER:
|
|
+ rc = netsnmp_check_vb_type_and_max_size(var, ASN_OCTET_STR,
|
|
+ sizeof(rowreq_ctx->data.
|
|
+ etherStatsOwner));
|
|
+ /*
|
|
+ * check defined range(s).
|
|
+ */
|
|
+ if ((SNMPERR_SUCCESS == rc)
|
|
+ && ((var->val_len < 0) || (var->val_len > 127))
|
|
+ ) {
|
|
+ rc = SNMP_ERR_WRONGLENGTH;
|
|
+ }
|
|
+ if (SNMPERR_SUCCESS != rc) {
|
|
+ DEBUGMSGTL(("etherStatsTable:_etherStatsTable_check_column:etherStatsOwner", "varbind validation failed (eg bad type or size)\n"));
|
|
+ } else {
|
|
+ rc = etherStatsOwner_check_value(rowreq_ctx,
|
|
+ (char *) var->val.string,
|
|
+ var->val_len);
|
|
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
|
|
+ && (MFD_NOT_VALID_NOW != rc)) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "bad rc %d from etherStatsOwner_check_value\n",
|
|
+ rc);
|
|
+ rc = SNMP_ERR_GENERR;
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsStatus(21)/EntryStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSSTATUS:
|
|
+ rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER,
|
|
+ sizeof(rowreq_ctx->data.
|
|
+ etherStatsStatus));
|
|
+ /*
|
|
+ * check that the value is one of defined enums
|
|
+ */
|
|
+ if ((SNMPERR_SUCCESS == rc)
|
|
+ && (*var->val.integer != ENTRYSTATUS_VALID)
|
|
+ && (*var->val.integer != ENTRYSTATUS_CREATEREQUEST)
|
|
+ && (*var->val.integer != ENTRYSTATUS_UNDERCREATION)
|
|
+ && (*var->val.integer != ENTRYSTATUS_INVALID)
|
|
+ ) {
|
|
+ rc = SNMP_ERR_WRONGVALUE;
|
|
+ }
|
|
+ if (SNMPERR_SUCCESS != rc) {
|
|
+ DEBUGMSGTL(("etherStatsTable:_etherStatsTable_check_column:etherStatsStatus", "varbind validation failed (eg bad type or size)\n"));
|
|
+ } else {
|
|
+ rc = etherStatsStatus_check_value(rowreq_ctx,
|
|
+ *((u_long *) var->val.
|
|
+ string));
|
|
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
|
|
+ && (MFD_NOT_VALID_NOW != rc)) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "bad rc %d from etherStatsStatus_check_value\n",
|
|
+ rc);
|
|
+ rc = SNMP_ERR_GENERR;
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default: /** We shouldn't get here */
|
|
+ rc = SNMP_ERR_GENERR;
|
|
+ snmp_log(LOG_ERR,
|
|
+ "unknown column %d in _etherStatsTable_check_column\n",
|
|
+ column);
|
|
+ }
|
|
+
|
|
+ return rc;
|
|
+} /* _etherStatsTable_check_column */
|
|
+
|
|
+int
|
|
+_mfd_etherStatsTable_check_objects(netsnmp_mib_handler *handler,
|
|
+ netsnmp_handler_registration *reginfo,
|
|
+ netsnmp_agent_request_info *agtreq_info,
|
|
+ netsnmp_request_info *requests)
|
|
+{
|
|
+ etherStatsTable_rowreq_ctx *rowreq_ctx =
|
|
+ netsnmp_container_table_row_extract(requests);
|
|
+ netsnmp_table_request_info *tri;
|
|
+ int rc;
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_check_objects", "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ for (; requests; requests = requests->next) {
|
|
+
|
|
+ /*
|
|
+ * get column number from table request info, and check that column
|
|
+ */
|
|
+ tri = netsnmp_extract_table_info(requests);
|
|
+ if (NULL == tri)
|
|
+ continue;
|
|
+
|
|
+ rc = _etherStatsTable_check_column(rowreq_ctx, requests->requestvb,
|
|
+ tri->colnum);
|
|
+ if (rc) {
|
|
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ } /* for results */
|
|
+
|
|
+ return SNMP_ERR_NOERROR;
|
|
+} /* _mfd_etherStatsTable_check_objects */
|
|
+
|
|
+
|
|
+/*----------------------------------------------------------------------
|
|
+ *
|
|
+ * SET: Undo setup
|
|
+ *
|
|
+ *---------------------------------------------------------------------*/
|
|
+/*
|
|
+ * @internal
|
|
+ * Set the value for a particular column
|
|
+ */
|
|
+NETSNMP_STATIC_INLINE int
|
|
+_etherStatsTable_undo_setup_column(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ int column)
|
|
+{
|
|
+ int rc = SNMPERR_SUCCESS;
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_etherStatsTable_undo_setup_column", "called for %d\n", column));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ switch (column) {
|
|
+
|
|
+ /*
|
|
+ * etherStatsDataSource(2)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/A/W/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSDATASOURCE:
|
|
+ rowreq_ctx->column_set_flags |= COLUMN_ETHERSTATSDATASOURCE_FLAG;
|
|
+ rc = etherStatsDataSource_undo_setup(rowreq_ctx);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsOwner(20)/OwnerString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSOWNER:
|
|
+ rowreq_ctx->column_set_flags |= COLUMN_ETHERSTATSOWNER_FLAG;
|
|
+ rc = etherStatsOwner_undo_setup(rowreq_ctx);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsStatus(21)/EntryStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSSTATUS:
|
|
+ rowreq_ctx->column_set_flags |= COLUMN_ETHERSTATSSTATUS_FLAG;
|
|
+ rc = etherStatsStatus_undo_setup(rowreq_ctx);
|
|
+ break;
|
|
+
|
|
+ default:
|
|
+ snmp_log(LOG_ERR,
|
|
+ "unknown column %d in _etherStatsTable_undo_setup_column\n",
|
|
+ column);
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ return rc;
|
|
+} /* _etherStatsTable_undo_setup_column */
|
|
+
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ * undo setup
|
|
+ */
|
|
+int
|
|
+_mfd_etherStatsTable_undo_setup(netsnmp_mib_handler *handler,
|
|
+ netsnmp_handler_registration *reginfo,
|
|
+ netsnmp_agent_request_info *agtreq_info,
|
|
+ netsnmp_request_info *requests)
|
|
+{
|
|
+ int rc;
|
|
+ etherStatsTable_rowreq_ctx *rowreq_ctx =
|
|
+ netsnmp_container_table_row_extract(requests);
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_undo_setup",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * allocate undo context
|
|
+ */
|
|
+ rowreq_ctx->undo = etherStatsTable_allocate_data();
|
|
+ if (NULL == rowreq_ctx->undo) {
|
|
+ /** msg already logged */
|
|
+ netsnmp_request_set_error_all(requests,
|
|
+ SNMP_ERR_RESOURCEUNAVAILABLE);
|
|
+ return SNMP_ERR_NOERROR;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * row undo setup
|
|
+ */
|
|
+ rowreq_ctx->column_set_flags = 0;
|
|
+ rc = etherStatsTable_undo_setup(rowreq_ctx);
|
|
+ if (MFD_SUCCESS != rc) {
|
|
+ DEBUGMSGTL(("etherStatsTable:mfd", "error %d from "
|
|
+ "etherStatsTable_undo_setup\n", rc));
|
|
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
|
|
+ } else {
|
|
+ /*
|
|
+ * column undo setup
|
|
+ */
|
|
+ netsnmp_table_request_info *tri;
|
|
+ for (; requests; requests = requests->next) {
|
|
+ /*
|
|
+ * set column data
|
|
+ */
|
|
+ tri = netsnmp_extract_table_info(requests);
|
|
+ if (NULL == tri)
|
|
+ continue;
|
|
+
|
|
+ rc = _etherStatsTable_undo_setup_column(rowreq_ctx,
|
|
+ tri->colnum);
|
|
+ if (MFD_SUCCESS != rc) {
|
|
+ DEBUGMSGTL(("etherStatsTable:mfd", "error %d from "
|
|
+ "etherStatsTable_undo_setup_column\n", rc));
|
|
+ netsnmp_set_request_error(agtreq_info, requests,
|
|
+ SNMP_VALIDATE_ERR(rc));
|
|
+ }
|
|
+ } /* for results */
|
|
+ }
|
|
+
|
|
+ return SNMP_ERR_NOERROR;
|
|
+} /* _mfd_etherStatsTable_undo_setup */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ * undo setup
|
|
+ */
|
|
+int
|
|
+_mfd_etherStatsTable_undo_cleanup(netsnmp_mib_handler *handler,
|
|
+ netsnmp_handler_registration *reginfo,
|
|
+ netsnmp_agent_request_info *agtreq_info,
|
|
+ netsnmp_request_info *requests)
|
|
+{
|
|
+ etherStatsTable_rowreq_ctx *rowreq_ctx =
|
|
+ netsnmp_container_table_row_extract(requests);
|
|
+ int rc;
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_undo_cleanup", "called\n"));
|
|
+
|
|
+ /*
|
|
+ * failed row create in early stages has no rowreq_ctx
|
|
+ */
|
|
+ if (NULL == rowreq_ctx)
|
|
+ return MFD_SUCCESS;
|
|
+
|
|
+ /*
|
|
+ * call user cleanup
|
|
+ */
|
|
+ rc = etherStatsTable_undo_cleanup(rowreq_ctx);
|
|
+ if (MFD_SUCCESS != rc) {
|
|
+ /*
|
|
+ * nothing we can do about it but log it
|
|
+ */
|
|
+ DEBUGMSGTL(("etherStatsTable:mfd", "error %d from "
|
|
+ "etherStatsTable_undo_cleanup\n", rc));
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * release undo context, if needed
|
|
+ */
|
|
+ if (rowreq_ctx->undo) {
|
|
+ etherStatsTable_release_data(rowreq_ctx->undo);
|
|
+ rowreq_ctx->undo = NULL;
|
|
+ }
|
|
+
|
|
+
|
|
+ return SNMP_ERR_NOERROR;
|
|
+} /* _mfd_etherStatsTable_undo_cleanup */
|
|
+
|
|
+/*----------------------------------------------------------------------
|
|
+ *
|
|
+ * SET: Set values
|
|
+ *
|
|
+ *---------------------------------------------------------------------*/
|
|
+/*
|
|
+ * @internal
|
|
+ * Set the value for a particular column
|
|
+ */
|
|
+NETSNMP_STATIC_INLINE int
|
|
+_etherStatsTable_set_column(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ netsnmp_variable_list * var, int column)
|
|
+{
|
|
+ int rc = SNMPERR_SUCCESS;
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_etherStatsTable_set_column",
|
|
+ "called for %d\n", column));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ switch (column) {
|
|
+
|
|
+ /*
|
|
+ * etherStatsDataSource(2)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/A/W/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSDATASOURCE:
|
|
+ rowreq_ctx->column_set_flags |= COLUMN_ETHERSTATSDATASOURCE_FLAG;
|
|
+ rc = etherStatsDataSource_set(rowreq_ctx, (oid *) var->val.string,
|
|
+ var->val_len);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsOwner(20)/OwnerString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSOWNER:
|
|
+ rowreq_ctx->column_set_flags |= COLUMN_ETHERSTATSOWNER_FLAG;
|
|
+ rc = etherStatsOwner_set(rowreq_ctx, (char *) var->val.string,
|
|
+ var->val_len);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsStatus(21)/EntryStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSSTATUS:
|
|
+ rowreq_ctx->column_set_flags |= COLUMN_ETHERSTATSSTATUS_FLAG;
|
|
+ rc = etherStatsStatus_set(rowreq_ctx,
|
|
+ *((u_long *) var->val.string));
|
|
+ break;
|
|
+
|
|
+ default:
|
|
+ snmp_log(LOG_ERR,
|
|
+ "unknown column %d in _etherStatsTable_set_column\n",
|
|
+ column);
|
|
+ rc = SNMP_ERR_GENERR;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ return rc;
|
|
+} /* _etherStatsTable_set_column */
|
|
+
|
|
+int
|
|
+_mfd_etherStatsTable_set_values(netsnmp_mib_handler *handler,
|
|
+ netsnmp_handler_registration *reginfo,
|
|
+ netsnmp_agent_request_info *agtreq_info,
|
|
+ netsnmp_request_info *requests)
|
|
+{
|
|
+ etherStatsTable_rowreq_ctx *rowreq_ctx =
|
|
+ netsnmp_container_table_row_extract(requests);
|
|
+ netsnmp_table_request_info *tri;
|
|
+ int rc = SNMP_ERR_NOERROR;
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_set_values",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ rowreq_ctx->column_set_flags = 0;
|
|
+ for (; requests; requests = requests->next) {
|
|
+ /*
|
|
+ * set column data
|
|
+ */
|
|
+ tri = netsnmp_extract_table_info(requests);
|
|
+ if (NULL == tri)
|
|
+ continue;
|
|
+
|
|
+ rc = _etherStatsTable_set_column(rowreq_ctx,
|
|
+ requests->requestvb, tri->colnum);
|
|
+ if (MFD_SUCCESS != rc) {
|
|
+ DEBUGMSGTL(("etherStatsTable:mfd", "error %d from "
|
|
+ "etherStatsTable_set_column\n", rc));
|
|
+ netsnmp_set_request_error(agtreq_info, requests,
|
|
+ SNMP_VALIDATE_ERR(rc));
|
|
+ }
|
|
+ } /* for results */
|
|
+
|
|
+ return SNMP_ERR_NOERROR;
|
|
+} /* _mfd_etherStatsTable_set_values */
|
|
+
|
|
+/*----------------------------------------------------------------------
|
|
+ *
|
|
+ * SET: commit
|
|
+ *
|
|
+ *---------------------------------------------------------------------*/
|
|
+/**
|
|
+ * @internal
|
|
+ * commit the values
|
|
+ */
|
|
+int
|
|
+_mfd_etherStatsTable_commit(netsnmp_mib_handler *handler,
|
|
+ netsnmp_handler_registration *reginfo,
|
|
+ netsnmp_agent_request_info *agtreq_info,
|
|
+ netsnmp_request_info *requests)
|
|
+{
|
|
+ int rc;
|
|
+ etherStatsTable_rowreq_ctx *rowreq_ctx =
|
|
+ netsnmp_container_table_row_extract(requests);
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_commit",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ rc = etherStatsTable_commit(rowreq_ctx);
|
|
+ if (MFD_SUCCESS != rc) {
|
|
+ DEBUGMSGTL(("etherStatsTable:mfd", "error %d from "
|
|
+ "etherStatsTable_commit\n", rc));
|
|
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
|
|
+ }
|
|
+
|
|
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
|
|
+ /*
|
|
+ * if we successfully commited this row, set the dirty flag. Use the
|
|
+ * current value + 1 (i.e. dirty = # rows changed).
|
|
+ * this is checked in post_request...
|
|
+ */
|
|
+ etherStatsTable_dirty_set(etherStatsTable_dirty_get() + 1); /* set table dirty flag */
|
|
+ }
|
|
+
|
|
+ return SNMP_ERR_NOERROR;
|
|
+}
|
|
+
|
|
+int
|
|
+_mfd_etherStatsTable_undo_commit(netsnmp_mib_handler *handler,
|
|
+ netsnmp_handler_registration *reginfo,
|
|
+ netsnmp_agent_request_info *agtreq_info,
|
|
+ netsnmp_request_info *requests)
|
|
+{
|
|
+ int rc;
|
|
+ etherStatsTable_rowreq_ctx *rowreq_ctx =
|
|
+ netsnmp_container_table_row_extract(requests);
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_undo_commit", "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
|
|
+ u_int d = etherStatsTable_dirty_get();
|
|
+
|
|
+ netsnmp_assert(d != 0);
|
|
+ if (d)
|
|
+ etherStatsTable_dirty_set(d - 1);
|
|
+ }
|
|
+
|
|
+ rc = etherStatsTable_undo_commit(rowreq_ctx);
|
|
+ if (MFD_SUCCESS != rc) {
|
|
+ /*
|
|
+ * nothing we can do about it but log it
|
|
+ */
|
|
+ DEBUGMSGTL(("etherStatsTable:mfd", "error %d from "
|
|
+ "etherStatsTable_undo_commit\n", rc));
|
|
+ }
|
|
+
|
|
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
|
|
+ snmp_log(LOG_WARNING,
|
|
+ "etherStatsTable row dirty flag still set after undo_commit\n");
|
|
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
|
|
+ }
|
|
+
|
|
+ return SNMP_ERR_NOERROR;
|
|
+} /* _mfd_etherStatsTable_commit */
|
|
+
|
|
+/*----------------------------------------------------------------------
|
|
+ *
|
|
+ * SET: Undo
|
|
+ *
|
|
+ *---------------------------------------------------------------------*/
|
|
+/**
|
|
+ * @internal
|
|
+ * undo the value for a particular column
|
|
+ */
|
|
+NETSNMP_STATIC_INLINE int
|
|
+_etherStatsTable_undo_column(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ netsnmp_variable_list * var, int column)
|
|
+{
|
|
+ int rc = SNMPERR_SUCCESS;
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_etherStatsTable_undo_column",
|
|
+ "called for %d\n", column));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ switch (column) {
|
|
+
|
|
+ /*
|
|
+ * etherStatsDataSource(2)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/A/W/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSDATASOURCE:
|
|
+ rc = etherStatsDataSource_undo(rowreq_ctx);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsOwner(20)/OwnerString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSOWNER:
|
|
+ rc = etherStatsOwner_undo(rowreq_ctx);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * etherStatsStatus(21)/EntryStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
|
|
+ */
|
|
+ case COLUMN_ETHERSTATSSTATUS:
|
|
+ rc = etherStatsStatus_undo(rowreq_ctx);
|
|
+ break;
|
|
+
|
|
+ default:
|
|
+ snmp_log(LOG_ERR,
|
|
+ "unknown column %d in _etherStatsTable_undo_column\n",
|
|
+ column);
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ return rc;
|
|
+} /* _etherStatsTable_undo_column */
|
|
+
|
|
+int
|
|
+_mfd_etherStatsTable_undo_values(netsnmp_mib_handler *handler,
|
|
+ netsnmp_handler_registration *reginfo,
|
|
+ netsnmp_agent_request_info *agtreq_info,
|
|
+ netsnmp_request_info *requests)
|
|
+{
|
|
+ int rc;
|
|
+ etherStatsTable_rowreq_ctx *rowreq_ctx =
|
|
+ netsnmp_container_table_row_extract(requests);
|
|
+ netsnmp_table_request_info *tri;
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_undo_values", "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ rc = etherStatsTable_undo(rowreq_ctx);
|
|
+ if (MFD_SUCCESS != rc) {
|
|
+ /*
|
|
+ * nothing we can do about it but log it
|
|
+ */
|
|
+ DEBUGMSGTL(("etherStatsTable:mfd", "error %d from "
|
|
+ "etherStatsTable_undo\n", rc));
|
|
+ }
|
|
+
|
|
+ for (; requests; requests = requests->next) {
|
|
+ /*
|
|
+ * set column data
|
|
+ */
|
|
+ tri = netsnmp_extract_table_info(requests);
|
|
+ if (NULL == tri)
|
|
+ continue;
|
|
+
|
|
+ rc = _etherStatsTable_undo_column(rowreq_ctx, requests->requestvb,
|
|
+ tri->colnum);
|
|
+ if (MFD_SUCCESS != rc) {
|
|
+ /*
|
|
+ * nothing we can do about it but log it
|
|
+ */
|
|
+ DEBUGMSGTL(("etherStatsTable:mfd", "error %d from "
|
|
+ "etherStatsTable_undo_column\n", rc));
|
|
+ }
|
|
+ } /* for results */
|
|
+
|
|
+ return SNMP_ERR_NOERROR;
|
|
+} /* _mfd_etherStatsTable_undo_values */
|
|
+
|
|
+/*----------------------------------------------------------------------
|
|
+ *
|
|
+ * SET: irreversible commit
|
|
+ *
|
|
+ *---------------------------------------------------------------------*/
|
|
+/**
|
|
+ * @internal
|
|
+ * commit irreversible actions
|
|
+ */
|
|
+int
|
|
+_mfd_etherStatsTable_irreversible_commit(netsnmp_mib_handler *handler,
|
|
+ netsnmp_handler_registration
|
|
+ *reginfo,
|
|
+ netsnmp_agent_request_info
|
|
+ *agtreq_info,
|
|
+ netsnmp_request_info *requests)
|
|
+{
|
|
+ etherStatsTable_rowreq_ctx *rowreq_ctx =
|
|
+ netsnmp_container_table_row_extract(requests);
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_etherStatsTable_irreversible:commit", "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * check for and handle row creation/deletion
|
|
+ * and update column exist flags...
|
|
+ */
|
|
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
|
|
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
|
|
+ CONTAINER_REMOVE(etherStatsTable_if_ctx.container, rowreq_ctx);
|
|
+ } else {
|
|
+ if (rowreq_ctx->column_set_flags) {
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_mfd_irreversible_commit", "updating exists (%p) w/set (%p) = %p\n", rowreq_ctx->column_exists_flags, rowreq_ctx->column_set_flags, (rowreq_ctx->column_exists_flags | rowreq_ctx->column_set_flags)));
|
|
+ rowreq_ctx->column_exists_flags |=
|
|
+ rowreq_ctx->column_set_flags;
|
|
+ rowreq_ctx->column_set_flags = 0;
|
|
+ }
|
|
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
|
|
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_CREATED;
|
|
+ CONTAINER_INSERT(etherStatsTable_if_ctx.container, rowreq_ctx);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return SNMP_ERR_NOERROR;
|
|
+} /* _mfd_etherStatsTable_irreversible_commit */
|
|
+
|
|
+/***********************************************************************
|
|
+ *
|
|
+ * DATA ACCESS
|
|
+ *
|
|
+ ***********************************************************************/
|
|
+static void _container_free(netsnmp_container * container);
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ */
|
|
+static int
|
|
+_cache_load(netsnmp_cache * cache, void *vmagic)
|
|
+{
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_cache_load", "called\n"));
|
|
+
|
|
+ if ((NULL == cache) || (NULL == cache->magic)) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "invalid cache for etherStatsTable_cache_load\n");
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ /** should only be called for an invalid or expired cache */
|
|
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
|
|
+
|
|
+ /*
|
|
+ * call user code
|
|
+ */
|
|
+ return etherStatsTable_container_load((netsnmp_container *) cache->
|
|
+ magic);
|
|
+} /* _cache_load */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ */
|
|
+static void
|
|
+_cache_free(netsnmp_cache * cache, void *magic)
|
|
+{
|
|
+ netsnmp_container *container;
|
|
+
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_cache_free", "called\n"));
|
|
+
|
|
+ if ((NULL == cache) || (NULL == cache->magic)) {
|
|
+ snmp_log(LOG_ERR, "invalid cache in etherStatsTable_cache_free\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ container = (netsnmp_container *) cache->magic;
|
|
+
|
|
+ _container_free(container);
|
|
+} /* _cache_free */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ */
|
|
+static void
|
|
+_container_item_free(etherStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ void *context)
|
|
+{
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_container_item_free",
|
|
+ "called\n"));
|
|
+
|
|
+ if (NULL == rowreq_ctx)
|
|
+ return;
|
|
+
|
|
+ etherStatsTable_release_rowreq_ctx(rowreq_ctx);
|
|
+} /* _container_item_free */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ */
|
|
+static void
|
|
+_container_free(netsnmp_container * container)
|
|
+{
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_container_free", "called\n"));
|
|
+
|
|
+ if (NULL == container) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "invalid container in etherStatsTable_container_free\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * call user code
|
|
+ */
|
|
+ etherStatsTable_container_free(container);
|
|
+
|
|
+ /*
|
|
+ * free all items. inefficient, but easy.
|
|
+ */
|
|
+ CONTAINER_CLEAR(container,
|
|
+ (netsnmp_container_obj_func *) _container_item_free,
|
|
+ NULL);
|
|
+} /* _container_free */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ * initialize the container with functions or wrappers
|
|
+ */
|
|
+void
|
|
+_etherStatsTable_container_init(etherStatsTable_interface_ctx * if_ctx)
|
|
+{
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_etherStatsTable_container_init",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * cache init
|
|
+ */
|
|
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
|
|
+ _cache_load, _cache_free,
|
|
+ etherStatsTable_oid,
|
|
+ etherStatsTable_oid_size);
|
|
+
|
|
+ if (NULL == if_ctx->cache) {
|
|
+ snmp_log(LOG_ERR, "error creating cache for etherStatsTable\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
|
|
+
|
|
+ etherStatsTable_container_init(&if_ctx->container, if_ctx->cache);
|
|
+ if (NULL == if_ctx->container)
|
|
+ if_ctx->container =
|
|
+ netsnmp_container_find("etherStatsTable:table_container");
|
|
+ if (NULL == if_ctx->container) {
|
|
+ snmp_log(LOG_ERR, "error creating container in "
|
|
+ "etherStatsTable_container_init\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ if (NULL != if_ctx->cache)
|
|
+ if_ctx->cache->magic = (void *) if_ctx->container;
|
|
+} /* _etherStatsTable_container_init */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ * shutdown the container with functions or wrappers
|
|
+ */
|
|
+void
|
|
+_etherStatsTable_container_shutdown(etherStatsTable_interface_ctx * if_ctx)
|
|
+{
|
|
+ DEBUGMSGTL(("internal:etherStatsTable:_etherStatsTable_container_shutdown", "called\n"));
|
|
+
|
|
+ etherStatsTable_container_shutdown(if_ctx->container);
|
|
+
|
|
+ _container_free(if_ctx->container);
|
|
+
|
|
+} /* _etherStatsTable_container_shutdown */
|
|
+
|
|
+
|
|
+etherStatsTable_rowreq_ctx *
|
|
+etherStatsTable_row_find_by_mib_index(etherStatsTable_mib_index * mib_idx)
|
|
+{
|
|
+ etherStatsTable_rowreq_ctx *rowreq_ctx;
|
|
+ oid oid_tmp[MAX_OID_LEN];
|
|
+ netsnmp_index oid_idx;
|
|
+ int rc;
|
|
+
|
|
+ /*
|
|
+ * set up storage for OID
|
|
+ */
|
|
+ oid_idx.oids = oid_tmp;
|
|
+ oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
|
|
+
|
|
+ /*
|
|
+ * convert
|
|
+ */
|
|
+ rc = etherStatsTable_index_to_oid(&oid_idx, mib_idx);
|
|
+ if (MFD_SUCCESS != rc)
|
|
+ return NULL;
|
|
+
|
|
+ rowreq_ctx =
|
|
+ CONTAINER_FIND(etherStatsTable_if_ctx.container, &oid_idx);
|
|
+
|
|
+ return rowreq_ctx;
|
|
+}
|
|
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_interface.h net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_interface.h
|
|
--- net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_interface.h 1969-12-31 19:00:00.000000000 -0500
|
|
+++ net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_interface.h 2008-08-25 02:37:27.000000000 -0400
|
|
@@ -0,0 +1,98 @@
|
|
+/*
|
|
+ * Note: this file originally auto-generated by mib2c using
|
|
+ * version : 15899 $ of $
|
|
+ *
|
|
+ * $Id:$
|
|
+ */
|
|
+/** @ingroup interface: Routines to interface to Net-SNMP
|
|
+ *
|
|
+ * \warning This code should not be modified, called directly,
|
|
+ * or used to interpret functionality. It is subject to
|
|
+ * change at any time.
|
|
+ *
|
|
+ * @{
|
|
+ */
|
|
+/*
|
|
+ * *********************************************************************
|
|
+ * *********************************************************************
|
|
+ * *********************************************************************
|
|
+ * *** ***
|
|
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
|
|
+ * *** ***
|
|
+ * *** ***
|
|
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
|
|
+ * *** ***
|
|
+ * *** ***
|
|
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
|
|
+ * *** ***
|
|
+ * *** ***
|
|
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
|
|
+ * *** ***
|
|
+ * *** ***
|
|
+ * *********************************************************************
|
|
+ * *********************************************************************
|
|
+ * *********************************************************************
|
|
+ */
|
|
+#ifndef ETHERSTATSTABLE_INTERFACE_H
|
|
+#define ETHERSTATSTABLE_INTERFACE_H
|
|
+
|
|
+#ifdef __cplusplus
|
|
+extern "C" {
|
|
+#endif
|
|
+
|
|
+
|
|
+#include "etherStatsTable.h"
|
|
+
|
|
+
|
|
+ /*
|
|
+ ********************************************************************
|
|
+ * Table declarations
|
|
+ */
|
|
+
|
|
+ /*
|
|
+ * PUBLIC interface initialization routine
|
|
+ */
|
|
+ void
|
|
+ _etherStatsTable_initialize_interface(etherStatsTable_registration
|
|
+ * user_ctx, u_long flags);
|
|
+ void
|
|
+ _etherStatsTable_shutdown_interface(etherStatsTable_registration *
|
|
+ user_ctx);
|
|
+
|
|
+ etherStatsTable_registration *etherStatsTable_registration_get(void);
|
|
+
|
|
+ etherStatsTable_registration
|
|
+ *etherStatsTable_registration_set(etherStatsTable_registration *
|
|
+ newreg);
|
|
+
|
|
+ netsnmp_container *etherStatsTable_container_get(void);
|
|
+ int etherStatsTable_container_size(void);
|
|
+
|
|
+ u_int etherStatsTable_dirty_get(void);
|
|
+ void etherStatsTable_dirty_set(u_int status);
|
|
+
|
|
+ etherStatsTable_rowreq_ctx *etherStatsTable_allocate_rowreq_ctx(void
|
|
+ *);
|
|
+ void
|
|
+ etherStatsTable_release_rowreq_ctx(etherStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ int etherStatsTable_index_to_oid(netsnmp_index * oid_idx,
|
|
+ etherStatsTable_mib_index
|
|
+ * mib_idx);
|
|
+ int etherStatsTable_index_from_oid(netsnmp_index * oid_idx,
|
|
+ etherStatsTable_mib_index
|
|
+ * mib_idx);
|
|
+
|
|
+ /*
|
|
+ * access to certain internals. use with caution!
|
|
+ */
|
|
+ void etherStatsTable_valid_columns_set(netsnmp_column_info
|
|
+ *vc);
|
|
+
|
|
+
|
|
+#ifdef __cplusplus
|
|
+}
|
|
+#endif
|
|
+#endif /* ETHERSTATSTABLE_INTERFACE_H */
|
|
+/** @} */
|
|
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_oids.h net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_oids.h
|
|
--- net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_oids.h 1969-12-31 19:00:00.000000000 -0500
|
|
+++ net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_oids.h 2008-08-25 02:37:27.000000000 -0400
|
|
@@ -0,0 +1,107 @@
|
|
+/*
|
|
+ * Note: this file originally auto-generated by mib2c using
|
|
+ * : generic-table-oids.m2c 12855 2005-09-27 15:56:08Z rstory $
|
|
+ *
|
|
+ * $Id:$
|
|
+ */
|
|
+#ifndef ETHERSTATSTABLE_OIDS_H
|
|
+#define ETHERSTATSTABLE_OIDS_H
|
|
+
|
|
+#ifdef __cplusplus
|
|
+extern "C" {
|
|
+#endif
|
|
+
|
|
+
|
|
+ /*
|
|
+ * column number definitions for table etherStatsTable
|
|
+ */
|
|
+#define ETHERSTATSTABLE_OID 1,3,6,1,2,1,16,1,1
|
|
+
|
|
+#define COLUMN_ETHERSTATSINDEX 1
|
|
+#define COLUMN_ETHERSTATSINDEX_FLAG (0x1 << 0)
|
|
+
|
|
+#define COLUMN_ETHERSTATSDATASOURCE 2
|
|
+#define COLUMN_ETHERSTATSDATASOURCE_FLAG (0x1 << 1)
|
|
+
|
|
+#define COLUMN_ETHERSTATSDROPEVENTS 3
|
|
+#define COLUMN_ETHERSTATSDROPEVENTS_FLAG (0x1 << 2)
|
|
+
|
|
+#define COLUMN_ETHERSTATSOCTETS 4
|
|
+#define COLUMN_ETHERSTATSOCTETS_FLAG (0x1 << 3)
|
|
+
|
|
+#define COLUMN_ETHERSTATSPKTS 5
|
|
+#define COLUMN_ETHERSTATSPKTS_FLAG (0x1 << 4)
|
|
+
|
|
+#define COLUMN_ETHERSTATSBROADCASTPKTS 6
|
|
+#define COLUMN_ETHERSTATSBROADCASTPKTS_FLAG (0x1 << 5)
|
|
+
|
|
+#define COLUMN_ETHERSTATSMULTICASTPKTS 7
|
|
+#define COLUMN_ETHERSTATSMULTICASTPKTS_FLAG (0x1 << 6)
|
|
+
|
|
+#define COLUMN_ETHERSTATSCRCALIGNERRORS 8
|
|
+#define COLUMN_ETHERSTATSCRCALIGNERRORS_FLAG (0x1 << 7)
|
|
+
|
|
+#define COLUMN_ETHERSTATSUNDERSIZEPKTS 9
|
|
+#define COLUMN_ETHERSTATSUNDERSIZEPKTS_FLAG (0x1 << 8)
|
|
+
|
|
+#define COLUMN_ETHERSTATSOVERSIZEPKTS 10
|
|
+#define COLUMN_ETHERSTATSOVERSIZEPKTS_FLAG (0x1 << 9)
|
|
+
|
|
+#define COLUMN_ETHERSTATSFRAGMENTS 11
|
|
+#define COLUMN_ETHERSTATSFRAGMENTS_FLAG (0x1 << 10)
|
|
+
|
|
+#define COLUMN_ETHERSTATSJABBERS 12
|
|
+#define COLUMN_ETHERSTATSJABBERS_FLAG (0x1 << 11)
|
|
+
|
|
+#define COLUMN_ETHERSTATSCOLLISIONS 13
|
|
+#define COLUMN_ETHERSTATSCOLLISIONS_FLAG (0x1 << 12)
|
|
+
|
|
+#define COLUMN_ETHERSTATSPKTS64OCTETS 14
|
|
+#define COLUMN_ETHERSTATSPKTS64OCTETS_FLAG (0x1 << 13)
|
|
+
|
|
+#define COLUMN_ETHERSTATSPKTS65TO127OCTETS 15
|
|
+#define COLUMN_ETHERSTATSPKTS65TO127OCTETS_FLAG (0x1 << 14)
|
|
+
|
|
+#define COLUMN_ETHERSTATSPKTS128TO255OCTETS 16
|
|
+#define COLUMN_ETHERSTATSPKTS128TO255OCTETS_FLAG (0x1 << 15)
|
|
+
|
|
+#define COLUMN_ETHERSTATSPKTS256TO511OCTETS 17
|
|
+#define COLUMN_ETHERSTATSPKTS256TO511OCTETS_FLAG (0x1 << 16)
|
|
+
|
|
+#define COLUMN_ETHERSTATSPKTS512TO1023OCTETS 18
|
|
+#define COLUMN_ETHERSTATSPKTS512TO1023OCTETS_FLAG (0x1 << 17)
|
|
+
|
|
+#define COLUMN_ETHERSTATSPKTS1024TO1518OCTETS 19
|
|
+#define COLUMN_ETHERSTATSPKTS1024TO1518OCTETS_FLAG (0x1 << 18)
|
|
+
|
|
+#define COLUMN_ETHERSTATSOWNER 20
|
|
+#define COLUMN_ETHERSTATSOWNER_FLAG (0x1 << 19)
|
|
+
|
|
+#define COLUMN_ETHERSTATSSTATUS 21
|
|
+#define COLUMN_ETHERSTATSSTATUS_FLAG (0x1 << 20)
|
|
+
|
|
+
|
|
+#define ETHERSTATSTABLE_MIN_COL COLUMN_ETHERSTATSINDEX
|
|
+#define ETHERSTATSTABLE_MAX_COL COLUMN_ETHERSTATSSTATUS
|
|
+
|
|
+
|
|
+ /*
|
|
+ * TODO:405:r: Review ETHERSTATSTABLE_SETTABLE_COLS macro.
|
|
+ * OR together all the writable cols.
|
|
+ */
|
|
+#define ETHERSTATSTABLE_SETTABLE_COLS (COLUMN_ETHERSTATSINDEX_FLAG | COLUMN_ETHERSTATSDATASOURCE_FLAG | COLUMN_ETHERSTATSDROPEVENTS_FLAG | COLUMN_ETHERSTATSOCTETS_FLAG | COLUMN_ETHERSTATSPKTS_FLAG | COLUMN_ETHERSTATSBROADCASTPKTS_FLAG | COLUMN_ETHERSTATSMULTICASTPKTS_FLAG | COLUMN_ETHERSTATSCRCALIGNERRORS_FLAG | COLUMN_ETHERSTATSUNDERSIZEPKTS_FLAG | COLUMN_ETHERSTATSOVERSIZEPKTS_FLAG | COLUMN_ETHERSTATSFRAGMENTS_FLAG | COLUMN_ETHERSTATSJABBERS_FLAG | COLUMN_ETHERSTATSCOLLISIONS_FLAG | COLUMN_ETHERSTATSPKTS64OCTETS_FLAG | COLUMN_ETHERSTATSPKTS65TO127OCTETS_FLAG | COLUMN_ETHERSTATSPKTS128TO255OCTETS_FLAG | COLUMN_ETHERSTATSPKTS256TO511OCTETS_FLAG | COLUMN_ETHERSTATSPKTS512TO1023OCTETS_FLAG | COLUMN_ETHERSTATSPKTS1024TO1518OCTETS_FLAG | COLUMN_ETHERSTATSOWNER_FLAG | COLUMN_ETHERSTATSSTATUS_FLAG)
|
|
+ /*
|
|
+ * TODO:405:r: Review ETHERSTATSTABLE_REQUIRED_COLS macro.
|
|
+ * OR together all the required rows for row creation.
|
|
+ * default is writable cols w/out defaults.
|
|
+ */
|
|
+#define ETHERSTATSTABLE_REQUIRED_COLS (COLUMN_ETHERSTATSDATASOURCE_FLAG | COLUMN_ETHERSTATSOWNER_FLAG | COLUMN_ETHERSTATSSTATUS_FLAG)
|
|
+
|
|
+#define ETHERSTATSTABLE_VALID_COL COLUMN_ETHERSTATSJABBERS_FLAG
|
|
+
|
|
+
|
|
+
|
|
+#ifdef __cplusplus
|
|
+}
|
|
+#endif
|
|
+#endif /* ETHERSTATSTABLE_OIDS_H */
|
|
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/ioctl_imp_common.h net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/ioctl_imp_common.h
|
|
--- net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable/ioctl_imp_common.h 1969-12-31 19:00:00.000000000 -0500
|
|
+++ net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable/ioctl_imp_common.h 2008-12-21 05:55:16.000000000 -0500
|
|
@@ -0,0 +1,35 @@
|
|
+#include <sys/socket.h>
|
|
+#include <sys/types.h>
|
|
+#include <sys/ioctl.h>
|
|
+#include <net/if.h>
|
|
+#include <linux/sockios.h>
|
|
+#include <ifaddrs.h>
|
|
+
|
|
+/* use kernel's ethtool.h */
|
|
+
|
|
+#include <linux/types.h>
|
|
+typedef __u64 u64;
|
|
+typedef __u32 u32;
|
|
+typedef __u16 u16;
|
|
+typedef __u8 u8;
|
|
+#include <linux/ethtool.h>
|
|
+
|
|
+/* structure for storing the interface names in the system */
|
|
+
|
|
+struct ifname {
|
|
+ struct ifname *ifn_next;
|
|
+ char name [IF_NAMESIZE];
|
|
+};
|
|
+
|
|
+struct ifname *etherstats_interface_name_list_get (struct ifname *, int *);
|
|
+int etherstats_interface_name_list_free (struct ifname *list_head);
|
|
+int etherstats_interface_ioctl_ifindex_get (int fd, const char *name);
|
|
+int _etherStats_ioctl_get(int fd, int which, struct ifreq *ifrq, const char* name);
|
|
+int interface_ioctl_etherstats_get(etherStatsTable_rowreq_ctx *rowreq_ctx, int fd, const char* name);
|
|
+
|
|
+/* for maintainability */
|
|
+
|
|
+#define BROADCOM_RECEIVE_JABBERS "rx_jabbers"
|
|
+
|
|
+#define ETHERSTATSJABBERS(x) strstr(x, BROADCOM_RECEIVE_JABBERS)
|
|
+
|
|
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable.h net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable.h
|
|
--- net-snmp-5.4.1.2/agent/mibgroup/rmon-mib/etherStatsTable.h 1969-12-31 19:00:00.000000000 -0500
|
|
+++ net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib/etherStatsTable.h 2008-12-21 05:47:48.000000000 -0500
|
|
@@ -0,0 +1,11 @@
|
|
+/*
|
|
+ * module to include the modules
|
|
+ */
|
|
+
|
|
+config_require(rmon-mib/data_access/etherstats)
|
|
+config_require(rmon-mib/etherStatsTable/etherStatsTable)
|
|
+config_require(rmon-mib/etherStatsTable/etherStatsTable_data_get)
|
|
+config_require(rmon-mib/etherStatsTable/etherStatsTable_data_set)
|
|
+config_require(rmon-mib/etherStatsTable/etherStatsTable_data_access)
|
|
+config_require(rmon-mib/etherStatsTable/etherStatsTable_interface)
|
|
+
|
|
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/rmon-mib.h net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib.h
|
|
--- net-snmp-5.4.1.2/agent/mibgroup/rmon-mib.h 1969-12-31 19:00:00.000000000 -0500
|
|
+++ net-snmp-5.4.1.2-new/agent/mibgroup/rmon-mib.h 2008-12-21 05:41:57.000000000 -0500
|
|
@@ -0,0 +1,8 @@
|
|
+/*
|
|
+ * module to include the modules
|
|
+ */
|
|
+
|
|
+config_require(rmon-mib/etherStatsTable)
|
|
+config_add_mib(RMON-MIB)
|
|
+
|
|
+
|
|
|
|
|