summaryrefslogtreecommitdiff
path: root/agent/mibgroup/rmon-mib/etherStatsTable
diff options
context:
space:
mode:
Diffstat (limited to 'agent/mibgroup/rmon-mib/etherStatsTable')
-rw-r--r--agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable.c233
-rw-r--r--agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable.h303
-rw-r--r--agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_access.c525
-rw-r--r--agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_access.h80
-rw-r--r--agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_get.c1411
-rw-r--r--agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_get.h151
-rw-r--r--agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_set.c977
-rw-r--r--agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_set.h356
-rw-r--r--agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_enums.h57
-rw-r--r--agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_interface.c2232
-rw-r--r--agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_interface.h98
-rw-r--r--agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_oids.h107
-rw-r--r--agent/mibgroup/rmon-mib/etherStatsTable/ioctl_imp_common.h35
13 files changed, 6565 insertions, 0 deletions
diff --git a/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable.c b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable.c
new file mode 100644
index 0000000..05a6e22
--- /dev/null
+++ b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable.c
@@ -0,0 +1,233 @@
+/*
+ * 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;
+static etherStatsTable_registration *etherStatsTable_user_context_p;
+
+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)
+{
+ 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.
+ */
+ etherStatsTable_user_context_p
+ = 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
+ (etherStatsTable_user_context_p, flags);
+} /* initialize_table_etherStatsTable */
+
+/**
+ * Shutdown the table etherStatsTable
+ */
+void
+shutdown_table_etherStatsTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _etherStatsTable_shutdown_interface(etherStatsTable_user_context_p);
+ netsnmp_free_all_list_data(etherStatsTable_user_context_p);
+ etherStatsTable_user_context_p = NULL;
+}
+
+/**
+ * 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 --git a/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable.h b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable.h
new file mode 100644
index 0000000..9f7f03c
--- /dev/null
+++ b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable.h
@@ -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 --git a/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_access.c b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_access.c
new file mode 100644
index 0000000..974636a
--- /dev/null
+++ b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_access.c
@@ -0,0 +1,525 @@
+/*
+ * 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"));
+ close(fd);
+ 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) {
+ 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");
+ close(fd);
+ 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) {
+ 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
+ */
+ rc = CONTAINER_INSERT(container, rowreq_ctx);
+ if (rc < 0) {
+ DEBUGMSGTL(("access:etherStatsTable", "error inserting |%s| ", p->name));
+ etherStatsTable_release_rowreq_ctx(rowreq_ctx);
+ continue;
+ }
+
+ ++count;
+ }
+
+ close(fd);
+
+ /*
+ * 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 %" NETSNMP_PRIz "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 --git a/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_access.h b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_access.h
new file mode 100644
index 0000000..00700f4
--- /dev/null
+++ b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_access.h
@@ -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 --git a/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_get.c b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_get.c
new file mode 100644
index 0000000..3ba51d7
--- /dev/null
+++ b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_get.c
@@ -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 --git a/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_get.h b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_get.h
new file mode 100644
index 0000000..5775212
--- /dev/null
+++ b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_get.h
@@ -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 --git a/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_set.c b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_set.c
new file mode 100644
index 0000000..27f3a26
--- /dev/null
+++ b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_set.c
@@ -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 --git a/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_set.h b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_set.h
new file mode 100644
index 0000000..258e087
--- /dev/null
+++ b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_set.h
@@ -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 --git a/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_enums.h b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_enums.h
new file mode 100644
index 0000000..a13c0b7
--- /dev/null
+++ b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_enums.h
@@ -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 --git a/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_interface.c b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_interface.c
new file mode 100644
index 0000000..221c608
--- /dev/null
+++ b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_interface.c
@@ -0,0 +1,2232 @@
+/*
+ * 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-features.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>
+
+netsnmp_feature_require(row_merge)
+netsnmp_feature_require(baby_steps)
+netsnmp_feature_require(table_container_row_insert)
+netsnmp_feature_require(check_all_requests_error)
+#ifndef NETSNMP_NO_WRITE_SUPPORT
+netsnmp_feature_require(check_vb_type_and_max_size)
+#endif /* NETSNMP_NO_WRITE_SUPPORT */
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** 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 =
+ &etherStatsTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info =
+ &etherStatsTable_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 retrieval.
+ */
+ 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(&etherStatsTable_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 = &etherStatsTable_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(&etherStatsTable_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)) {
+ 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 (%#x) w/set (%#x) = %#x\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 --git a/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_interface.h b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_interface.h
new file mode 100644
index 0000000..4e1457b
--- /dev/null
+++ b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_interface.h
@@ -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 --git a/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_oids.h b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_oids.h
new file mode 100644
index 0000000..60f1da3
--- /dev/null
+++ b/agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_oids.h
@@ -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 --git a/agent/mibgroup/rmon-mib/etherStatsTable/ioctl_imp_common.h b/agent/mibgroup/rmon-mib/etherStatsTable/ioctl_imp_common.h
new file mode 100644
index 0000000..9819895
--- /dev/null
+++ b/agent/mibgroup/rmon-mib/etherStatsTable/ioctl_imp_common.h
@@ -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)
+