diff -uNr net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/data_access/dot3stats.h net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/data_access/dot3stats.h
--- net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/data_access/dot3stats.h	1969-12-31 19:00:00.000000000 -0500
+++ net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/data_access/dot3stats.h	2008-12-21 05:19:52.000000000 -0500
@@ -0,0 +1,7 @@
+/*
+ * module to include the modules
+ */
+
+#if defined(linux)
+config_require(etherlike-mib/data_access/dot3stats_linux)
+#endif
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/data_access/dot3stats_linux.c net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/data_access/dot3stats_linux.c
--- net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/data_access/dot3stats_linux.c	1969-12-31 19:00:00.000000000 -0500
+++ net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/data_access/dot3stats_linux.c	2008-12-21 05:35:33.000000000 -0500
@@ -0,0 +1,397 @@
+/*
+ * 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 "etherlike-mib/dot3StatsTable/dot3StatsTable.h"
+#include "etherlike-mib/dot3StatsTable/dot3StatsTable_data_access.h"
+#include "etherlike-mib/dot3StatsTable/ioctl_imp_common.h"
+
+/*
+ * @retval  0 success
+ * @retval -1 getifaddrs failed 
+ * @retval -2 memory allocation failed
+ */
+
+struct ifname *
+dot3stats_interface_name_list_get (struct ifname *list_head, int *retval)
+{
+    struct ifaddrs *addrs = NULL, *p = NULL;
+    struct ifname *nameptr1=NULL, *nameptr2 = NULL;
+
+    DEBUGMSGTL(("access:dot3StatsTable:interface_name_list_get",
+                "called\n"));
+
+    if ((getifaddrs(&addrs)) < 0) {
+        DEBUGMSGTL(("access:dot3StatsTable:interface_name_list_get",
+                    "getifaddrs failed\n"));
+        snmp_log (LOG_ERR, "access:dot3StatsTable,interface_name_list_get, getifaddrs failed\n");
+        *retval = -1;
+        return NULL;
+    }
+
+    for (p = addrs; p; p = p->ifa_next) {
+
+        if (!list_head) {
+            if ( (list_head = (struct ifname *) malloc (sizeof(struct ifname))) < 0) {
+                DEBUGMSGTL(("access:dot3StatsTable:interface_name_list_get",
+                            "memory allocation failed\n"));
+                snmp_log (LOG_ERR, "access:dot3StatsTable,interface_name_list_get, memory allocation failed\n");
+                freeifaddrs(addrs);
+                *retval = -2;
+                return NULL;
+            }
+            memset (list_head, 0, sizeof (struct ifname));
+            strncpy (list_head->name, p->ifa_name, IF_NAMESIZE);
+            continue;
+        }
+
+         for (nameptr1 = list_head; nameptr1; nameptr2 = nameptr1, nameptr1 = nameptr1->ifn_next)
+            if (!strncmp(p->ifa_name, nameptr1->name, IF_NAMESIZE))
+                break;
+
+        if (nameptr1)
+            continue;
+
+        if ( (nameptr2->ifn_next = (struct ifname *) malloc (sizeof(struct ifname))) < 0) {
+            DEBUGMSGTL(("access:dot3StatsTable:interface_name_list_get",
+                        "memory allocation failed\n"));
+            snmp_log (LOG_ERR, "access:dot3StatsTable,interface_name_list_get, memory allocation failed\n");
+            interface_name_list_free (list_head);
+            freeifaddrs(addrs);
+            *retval = -2;
+            return NULL;
+        }
+        nameptr2 = nameptr2->ifn_next;
+        memset (nameptr2, 0, sizeof (struct ifname));
+        strncpy (nameptr2->name, p->ifa_name, IF_NAMESIZE);
+        continue;
+
+    }
+
+    freeifaddrs(addrs);
+    return list_head;
+}
+
+/*
+ * @retval 0 success
+ * @retval -1 invalid pointer
+ */
+
+int
+dot3stats_interface_name_list_free (struct ifname *list_head)
+{
+    struct ifname *nameptr1 = NULL, *nameptr2 = NULL;
+
+    DEBUGMSGTL(("access:dot3StatsTable:interface_name_list_free",
+                "called\n"));
+
+    if (!list_head) {
+        snmp_log (LOG_ERR, "access:dot3StatsTable:interface_name_list_free: invalid pointer list_head");
+        DEBUGMSGTL(("access:dot3StatsTable:interface_name_list_free",
+                    "invalid pointer list_head\n"));
+        return -1;
+    }
+
+    for (nameptr1 = list_head; nameptr1; nameptr1 = nameptr2) {
+            nameptr2 = nameptr1->ifn_next;
+            free (nameptr1);
+    }
+
+    return 0;
+}
+
+/*
+ * @retval  0 : not found
+ * @retval !0 : ifIndex
+ */
+
+int 
+dot3stats_interface_ioctl_ifindex_get (int fd, const char *name) {
+#ifndef SIOCGIFINDEX
+    return 0;
+#else
+    struct ifreq    ifrq;
+    int rc = 0;
+
+    DEBUGMSGTL(("access:dot3StatsTable:interface_ioctl_ifindex_get", "called\n"));
+                 
+    rc = _dot3Stats_ioctl_get(fd, SIOCGIFINDEX, &ifrq, name);
+    if (rc < 0) {
+        DEBUGMSGTL(("access:dot3StatsTable:interface_ioctl_ifindex_get",
+                    "error on interface '%s'\n", name));
+        snmp_log (LOG_ERR, "access:dot3StatsTable:interface_ioctl_ifindex_get, error on interface '%s'\n", name);
+        return 0;
+
+    }
+
+    return ifrq.ifr_ifindex;
+#endif /* SIOCGIFINDEX */
+}
+
+/*
+ * @retval  0 success
+ * @retval -1 cannot get ETHTOOL_DRVINFO failed 
+ * @retval -2 nstats zero - no statistcs available
+ * @retval -3 memory allocation for holding the statistics failed
+ * @retval -4 cannot get ETHTOOL_GSTRINGS information
+ * @retval -5 cannot get ETHTOOL_GSTATS information
+ * @retval -6 function not supported if HAVE_LINUX_ETHTOOL_H not defined
+ */
+
+
+int 
+interface_ioctl_dot3stats_get (dot3StatsTable_rowreq_ctx *rowreq_ctx, int fd, const char *name) {
+
+#ifdef HAVE_LINUX_ETHTOOL_H
+    dot3StatsTable_data *data = &rowreq_ctx->data;
+    struct ethtool_drvinfo driver_info;
+    struct ethtool_gstrings *eth_strings;
+    struct ethtool_stats *eth_stats;
+    struct ifreq ifr; 
+    unsigned int nstats, size_str, size_stats, i;
+    int err;
+
+    DEBUGMSGTL(("access:dot3StatsTable:interface_ioctl_dot3Stats_get",
+                "called\n"));
+
+    memset(&ifr, 0, sizeof(ifr));
+    strcpy(ifr.ifr_name, name);
+
+    memset(&driver_info, 0, sizeof (driver_info));
+    driver_info.cmd = ETHTOOL_GDRVINFO;
+    ifr.ifr_data = (char *)&driver_info;
+
+    err = _dot3Stats_ioctl_get(fd, SIOCETHTOOL, &ifr, name);
+    if (err < 0) {
+        DEBUGMSGTL(("access:dot3StatsTable:interface_ioctl_dot3Stats_get",
+                    "ETHTOOL_GETDRVINFO failed for interface |%s| \n", name));
+        return -1;
+    }
+
+    nstats = driver_info.n_stats;
+    if (nstats < 1) {
+        DEBUGMSGTL(("access:dot3StatsTable:interface_ioctl_dot3Stats_get",
+                    "no stats available for interface |%s| \n", name));
+        snmp_log (LOG_ERR, "access:dot3StatsTable,interface_ioctl_dot3Stats_get, no stats available for interface |%s| \n", name);
+        return -2;
+    }
+
+    size_str = nstats * ETH_GSTRING_LEN;
+    size_stats = nstats * sizeof(u64);
+
+    eth_strings = malloc(size_str + sizeof (struct ethtool_gstrings));
+    if (!eth_strings) {
+        DEBUGMSGTL(("access:dot3StatsTable:interface_ioctl_dot3Stats_get",
+                    "no memory available\n"));
+        snmp_log (LOG_ERR, "access:dot3StatsTable,interface_ioctl_dot3Stats_get, no memory available\n");
+
+        return -3;
+    }
+    memset (eth_strings, 0, (size_str + sizeof (struct ethtool_gstrings)));
+
+    eth_stats = malloc (size_str + sizeof (struct ethtool_stats));
+    if (!eth_stats) {
+        free (eth_strings);
+        DEBUGMSGTL(("access:dot3StatsTable:interface_ioctl_dot3Stats_get",
+                    "no memory available\n"));
+        snmp_log (LOG_ERR, "access:dot3StatsTable,interface_ioctl_dot3Stats_get, no memory available\n");
+
+        return -3;
+    }
+     memset (eth_stats, 0, (size_str + sizeof (struct ethtool_stats)));
+
+    eth_strings->cmd = ETHTOOL_GSTRINGS;
+    eth_strings->string_set = ETH_SS_STATS;
+    eth_strings->len = nstats;
+    ifr.ifr_data = (char *) eth_strings;
+    err = _dot3Stats_ioctl_get(fd, SIOCETHTOOL, &ifr, name);
+    if (err < 0) {
+        DEBUGMSGTL(("access:dot3StatsTable:interface_ioctl_dot3Stats_get",
+                    "cannot get stats strings information for interface |%s| \n", name));
+        snmp_log (LOG_ERR, "access:dot3StatsTable,interface_ioctl_dot3Stats_get, cannot get stats strings information for interface |%s| \n", name);
+
+        free(eth_strings);
+        free(eth_stats);
+        return -4;
+    }
+
+    eth_stats->cmd = ETHTOOL_GSTATS;
+    eth_stats->n_stats = nstats;
+    ifr.ifr_data = (char *) eth_stats;
+    err = _dot3Stats_ioctl_get(fd, SIOCETHTOOL, &ifr, name);
+    if (err < 0) {
+        DEBUGMSGTL(("access:dot3StatsTable:interface_ioctl_dot3Stats_get",
+                    "cannot get stats strings information for interface |%s| \n", name));
+        snmp_log (LOG_ERR, "access:dot3StatsTable,interface_ioctl_dot3Stats_get, cannot get stats information for interface |%s| \n", name);
+
+        free(eth_strings);
+        free(eth_stats);
+        return -5;
+    }
+
+    for (i = 0; i < nstats; i++) {
+        char s[ETH_GSTRING_LEN];
+
+        strncpy(s, (const char *) &eth_strings->data[i * ETH_GSTRING_LEN],
+            ETH_GSTRING_LEN);
+    
+        if (DOT3STATSALIGNMENTERRORS(s)) {
+            data->dot3StatsAlignmentErrors = (u_long)eth_stats->data[i];
+            rowreq_ctx->column_exists_flags |= COLUMN_DOT3STATSALIGNMENTERRORS_FLAG;
+        }
+
+        if (DOT3STATSMULTIPLECOLLISIONFRAMES(s)) {
+            data->dot3StatsMultipleCollisionFrames = (u_long)eth_stats->data[i];
+            rowreq_ctx->column_exists_flags |= COLUMN_DOT3STATSMULTIPLECOLLISIONFRAMES_FLAG;
+        }
+            
+        if (DOT3STATSLATECOLLISIONS(s)) {
+            data->dot3StatsLateCollisions = (u_long)eth_stats->data[i];
+            rowreq_ctx->column_exists_flags |= COLUMN_DOT3STATSLATECOLLISIONS_FLAG;
+        }
+
+        if (DOT3STATSSINGLECOLLISIONFRAMES(s)) {
+            data->dot3StatsSingleCollisionFrames = (u_long)eth_stats->data[i];
+            rowreq_ctx->column_exists_flags |= COLUMN_DOT3STATSSINGLECOLLISIONFRAMES_FLAG;
+        }
+
+        if (DOT3STATSEXCESSIVECOLLISIONS(s)) {
+            data->dot3StatsExcessiveCollisions = (u_long)eth_stats->data[i];
+            rowreq_ctx->column_exists_flags |= COLUMN_DOT3STATSEXCESSIVECOLLISIONS_FLAG;
+        }
+    }
+
+    free(eth_strings);
+    free(eth_stats);
+
+    return 0;
+#else
+    return -6;
+#endif
+}
+
+
+/*
+ * @retval  0 success
+ * @retval -1 ETHTOOL_GSET failed
+ * @retval -2 function not supported if HAVE_LINUX_ETHTOOL_H not defined
+ */
+
+int
+interface_ioctl_dot3stats_duplex_get(dot3StatsTable_rowreq_ctx *rowreq_ctx, int fd, const char* name) {
+
+#ifdef HAVE_LINUX_ETHTOOL_H
+    dot3StatsTable_data *data = &rowreq_ctx->data;
+    struct ethtool_cmd edata;
+    struct ifreq ifr;
+    int err;
+
+    DEBUGMSGTL(("access:dot3StatsTable:interface_ioctl_dot3Stats_duplex_get",
+                "called\n"));
+
+    memset(&edata, 0, sizeof (edata));
+    memset(&ifr, 0, sizeof (ifr));
+    edata.cmd = ETHTOOL_GSET;
+    ifr.ifr_data = (char *)&edata;
+
+    err = _dot3Stats_ioctl_get (fd, SIOCETHTOOL, &ifr, name);
+    if (err < 0) {
+        DEBUGMSGTL(("access:dot3StatsTable:interface_ioctl_dot3Stats_duplex_get",
+                    "ETHTOOL_GSET failed\n"));
+        snmp_log (LOG_ERR, "access:dot3StatsTable,interface_ioctl_dot3Stats_duplex_get, ETHTOOL_GSET failed\n");
+
+        return -1;
+    }
+    
+    if (err == 0) {
+        rowreq_ctx->column_exists_flags |= COLUMN_DOT3STATSDUPLEXSTATUS_FLAG;
+        switch (edata.duplex) {
+        case DUPLEX_HALF:
+            data->dot3StatsDuplexStatus = (u_long) DOT3STATSDUPLEXSTATUS_HALFDUPLEX;
+            break;
+        case DUPLEX_FULL:
+            data->dot3StatsDuplexStatus = (u_long) DOT3STATSDUPLEXSTATUS_FULLDUPLEX;
+            break;
+        default:
+            data->dot3StatsDuplexStatus = (u_long) DOT3STATSDUPLEXSTATUS_UNKNOWN;
+            break;
+        };
+    }
+
+    DEBUGMSGTL(("access:dot3StatsTable:interface_ioctl_dot3Stats_duplex_get",
+                "ETHTOOL_GSET processed\n"));
+    return err;
+#else
+    return -2;
+#endif
+}
+
+
+
+/* ioctl wrapper
+ *
+ * @param      fd : socket fd to use w/ioctl, or -1 to open/close one
+ * @param  which
+ * @param ifrq
+ * param ifentry : ifentry to update
+ * @param name
+ *
+ * @retval  0 : success
+ * @retval -1 : invalid parameters
+ * @retval -2 : couldn't create socket
+ * @retval -3 : ioctl call failed
+ */
+int
+_dot3Stats_ioctl_get(int fd, int which, struct ifreq *ifrq, const char* name)
+{
+    int ourfd = -1, rc = 0;
+
+    DEBUGMSGTL(("access:dot3StatsTable:ioctl", "_dot3Stats_ioctl_get\n"));
+
+    /*
+     * sanity checks
+     */
+    if(NULL == name) {
+        DEBUGMSGTL(("access:dot3StatsTable:ioctl",
+                    "_dot3Stats_ioctl_get invalid ifname '%s'\n", name));
+        snmp_log (LOG_ERR, "access:dot3StatsTable:ioctl, _dot3Stats_ioctl_get error on interface '%s'\n", name);
+        return -1;
+    }
+
+    /*
+     * create socket for ioctls
+     */
+    if(fd < 0) {
+        fd = ourfd = socket(AF_INET, SOCK_DGRAM, 0);
+        if(ourfd < 0) {
+            DEBUGMSGTL(("access:dot3StatsTable:ioctl",
+                        "dot3Stats_ioctl_get couldn't create a socket\n", name));
+            snmp_log (LOG_ERR, "access:dot3StatsTable:ioctl, _dot3Stats_ioctl_get error on interface '%s'\n", name);
+
+            return -2;
+        }
+    }
+
+    strncpy(ifrq->ifr_name, name, sizeof(ifrq->ifr_name));
+    ifrq->ifr_name[ sizeof(ifrq->ifr_name)-1 ] = 0;
+    rc = ioctl(fd, which, ifrq);
+    if (rc < 0) {
+        DEBUGMSGTL(("access:dot3StatsTable:ioctl",
+                    "dot3Stats_ioctl_get ioctl %d returned %d\n", which, rc));
+        rc = -3;
+    }
+
+    if(ourfd >= 0)
+        close(ourfd);
+
+    return rc;
+}
+
+
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable.c net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable.c
--- net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable.c	1969-12-31 19:00:00.000000000 -0500
+++ net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable.c	2008-08-08 05:58:09.000000000 -0400
@@ -0,0 +1,212 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ *       version : 14170 $ of $ 
+ *
+ * $Id:$
+ */
+/** \page MFD helper for dot3StatsTable
+ *
+ * \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 "dot3StatsTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "dot3StatsTable_interface.h"
+
+oid             dot3StatsTable_oid[] = { DOT3STATSTABLE_OID };
+int             dot3StatsTable_oid_size = OID_LENGTH(dot3StatsTable_oid);
+
+dot3StatsTable_registration dot3StatsTable_user_context;
+
+void            initialize_table_dot3StatsTable(void);
+void            shutdown_table_dot3StatsTable(void);
+
+
+/**
+ * Initializes the dot3StatsTable module
+ */
+void
+init_dot3StatsTable(void)
+{
+    DEBUGMSGTL(("verbose:dot3StatsTable:init_dot3StatsTable", "called\n"));
+
+    /*
+     * TODO:300:o: Perform dot3StatsTable one-time module initialization.
+     */
+
+    /*
+     * here we initialize all the tables we're planning on supporting
+     */
+    if (should_init("dot3StatsTable"))
+        initialize_table_dot3StatsTable();
+
+}                               /* init_dot3StatsTable */
+
+/**
+ * Shut-down the dot3StatsTable module (agent is exiting)
+ */
+void
+shutdown_dot3StatsTable(void)
+{
+    if (should_init("dot3StatsTable"))
+        shutdown_table_dot3StatsTable();
+
+}
+
+/**
+ * Initialize the table dot3StatsTable 
+ *    (Define its contents and how it's structured)
+ */
+void
+initialize_table_dot3StatsTable(void)
+{
+    dot3StatsTable_registration *user_context;
+    u_long          flags;
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:initialize_table_dot3StatsTable",
+                "called\n"));
+
+    /*
+     * TODO:301:o: Perform dot3StatsTable one-time table initialization.
+     */
+
+    /*
+     * TODO:302:o: |->Initialize dot3StatsTable user context
+     * if you'd like to pass in a pointer to some data for this
+     * table, allocate or set it up here.
+     */
+    /*
+     * a netsnmp_data_list is a simple way to store void pointers. A simple
+     * string token is used to add, find or remove pointers.
+     */
+    user_context = netsnmp_create_data_list("dot3StatsTable", NULL, NULL);
+
+    /*
+     * No support for any flags yet, but in the future you would
+     * set any flags here.
+     */
+    flags = 0;
+
+    /*
+     * call interface initialization code
+     */
+    _dot3StatsTable_initialize_interface(user_context, flags);
+}                               /* initialize_table_dot3StatsTable */
+
+/**
+ * Shutdown the table dot3StatsTable 
+ */
+void
+shutdown_table_dot3StatsTable(void)
+{
+    /*
+     * call interface shutdown code
+     */
+    _dot3StatsTable_shutdown_interface(&dot3StatsTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx    : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS  : no errors
+ * @retval MFD_ERROR    : error (context allocate will fail)
+ */
+int
+dot3StatsTable_rowreq_ctx_init(dot3StatsTable_rowreq_ctx * rowreq_ctx,
+                               void *user_init_ctx)
+{
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsTable_rowreq_ctx_init",
+                "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    /*
+     * TODO:210:o: |-> Perform extra dot3StatsTable rowreq initialization. (eg DEFVALS)
+     */
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void
+dot3StatsTable_rowreq_ctx_cleanup(dot3StatsTable_rowreq_ctx * rowreq_ctx)
+{
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsTable_rowreq_ctx_cleanup",
+                "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    /*
+     * TODO:211:o: |-> Perform extra dot3StatsTable rowreq cleanup.
+     */
+}                               /* dot3StatsTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS              : success.
+ * @retval MFD_ERROR                : other error
+ */
+int
+dot3StatsTable_pre_request(dot3StatsTable_registration * user_context)
+{
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsTable_pre_request",
+                "called\n"));
+
+    /*
+     * TODO:510:o: Perform dot3StatsTable pre-request actions.
+     */
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsTable_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
+dot3StatsTable_post_request(dot3StatsTable_registration * user_context,
+                            int rc)
+{
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsTable_post_request",
+                "called\n"));
+
+    /*
+     * TODO:511:o: Perform dot3StatsTable post-request actions.
+     */
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsTable_post_request */
+
+
+/** @{ */
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_access.c net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_access.c
--- net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_access.c	1969-12-31 19:00:00.000000000 -0500
+++ net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_access.c	2009-01-12 03:38:21.000000000 -0500
@@ -0,0 +1,413 @@
+/*
+ * 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 "dot3StatsTable.h"
+#include "dot3StatsTable_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 dot3StatsTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * EtherLike-MIB::dot3StatsTable is subid 2 of dot3.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.10.7.2, length: 9
+ */
+
+/**
+ * initialization for dot3StatsTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param dot3StatsTable_reg
+ *        Pointer to dot3StatsTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR   : unrecoverable error.
+ */
+int
+dot3StatsTable_init_data(dot3StatsTable_registration * dot3StatsTable_reg)
+{
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsTable_init_data",
+                "called\n"));
+
+    /*
+     * TODO:303:o: Initialize dot3StatsTable data.
+     */
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsTable_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
+dot3StatsTable_container_init(netsnmp_container ** container_ptr_ptr,
+                              netsnmp_cache * cache)
+{
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsTable_container_init",
+                "called\n"));
+
+    if (NULL == container_ptr_ptr) {
+        snmp_log(LOG_ERR,
+                 "bad container param to dot3StatsTable_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 dot3StatsTable_container_init\n");
+        return;
+    }
+
+    /*
+     * TODO:345:A: Set up dot3StatsTable 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 = DOT3STATSTABLE_CACHE_TIMEOUT;      /* seconds */
+}                               /* dot3StatsTable_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 dot3StatsTable_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
+dot3StatsTable_container_shutdown(netsnmp_container * container_ptr)
+{
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsTable_container_shutdown",
+                "called\n"));
+
+    if (NULL == container_ptr) {
+        snmp_log(LOG_ERR,
+                 "bad params to dot3StatsTable_container_shutdown\n");
+        return;
+    }
+
+}                               /* dot3StatsTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement dot3StatsTable 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
+ *  dot3StatsTable_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.
+ *
+ */
+
+/*
+ *
+ * @retval  MFD_SUCCESS success
+ * @retval  MFD_ERROR could not get the interface names 
+ * @retval  MFD_RESOURCE_UNAVAILABLE failed to allocate memory
+ * @retval  -2 could not open a socket
+ */
+
+
+int
+dot3StatsTable_container_load(netsnmp_container * container)
+{
+    dot3StatsTable_rowreq_ctx *rowreq_ctx;
+    size_t          count = 0;
+    
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsTable_container_load",
+                "called\n"));
+      
+    /*
+     * TODO:352:M: |   |-> set indexes in new dot3StatsTable 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
+     */
+
+    /*
+     * dot3StatsIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H
+     */
+
+    long            dot3StatsIndex;
+    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 = dot3stats_interface_name_list_get (list_head, &retval);
+
+    if (!list_head) {
+        snmp_log (LOG_ERR, "access:dot3StatsTable, error getting the interface names present in the system\n");
+        DEBUGMSGTL(("access:dot3StatsTable", "error getting the interface names present in the system"));
+        return MFD_ERROR;
+    }
+    
+    /*
+     * Walk over the list of interface names present in the system and retreive the statistics 
+     */
+
+    for (p = list_head; p; p = p->ifn_next) {
+        u_int           flags;
+
+        flags = 0;
+
+        DEBUGMSGTL(("access:dot3StatsTable", "processing '%s'\n", p->name));
+
+        /*
+         * get index via ioctl.
+         */
+
+        dot3StatsIndex = (long) dot3stats_interface_ioctl_ifindex_get(-1, p->name);
+
+        /* 
+         *    get the dot3stats 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 = dot3StatsTable_allocate_rowreq_ctx(NULL);
+        if (NULL == rowreq_ctx) {
+            snmp_log(LOG_ERR, "memory allocation for dot3StatsTable failed\n");
+            return MFD_RESOURCE_UNAVAILABLE;
+        }
+        
+        if (MFD_SUCCESS !=
+            dot3StatsTable_indexes_set(rowreq_ctx, dot3StatsIndex)) {
+            snmp_log(LOG_ERR,
+                     "error setting index while loading "
+                     "dot3StatsTable data.\n");
+            dot3StatsTable_release_rowreq_ctx(rowreq_ctx);
+            continue;
+        }
+
+        /*
+         * TODO:352:r: |   |-> populate dot3StatsTable 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_dot3stats_get (rowreq_ctx, fd, p->name);
+
+        if (rc < 0) {
+            snmp_log(LOG_ERR,
+                     "error getting the statistics for interface |%s| "
+                     "dot3StatsTable data, operation might not be supported\n", p->name);
+            DEBUGMSGTL(("access:dot3StatsTable", "error getting the statistics for interface |%s| "
+                        "dot3StatsTable data, operation might not be supported\n", p->name));
+            dot3StatsTable_release_rowreq_ctx(rowreq_ctx);
+            continue;
+        }
+        
+        rc = interface_ioctl_dot3stats_duplex_get(rowreq_ctx, fd, p->name);
+        if (rc < 0) {
+            snmp_log(LOG_ERR,
+                     "error getting the duplex status for |%s| "
+                     "dot3StatsTable data, operation might not be supported\n", p->name);
+            DEBUGMSGTL(("access:dot3StatsTable", "error getting the duplex status for |%s| "
+                        "dot3StatsTable data, operation might not be supported\n", p->name));
+            dot3StatsTable_release_rowreq_ctx(rowreq_ctx);
+            continue;
+        }
+
+        /*
+         * insert into table container
+         */
+        CONTAINER_INSERT(container, rowreq_ctx);
+        ++count;
+    }
+
+    /*
+     * free the interface names list 
+     */
+
+    if ( (dot3stats_interface_name_list_free(list_head)) < 0) {
+        snmp_log(LOG_ERR, "access:dot3StatsTable, error freeing the interface name list \n");
+        DEBUGMSGTL(("access:dot3StatsTable", "error freeing the interface name list\n"));
+        return MFD_ERROR;
+    }
+#endif
+
+    DEBUGMSGT(("verbose:dot3StatsTable:dot3StatsTable_container_load",
+               "inserted %d records\n", count));
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsTable_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
+dot3StatsTable_container_free(netsnmp_container * container)
+{
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsTable_container_free",
+                "called\n"));
+
+    /*
+     * TODO:380:M: Free dot3StatsTable container data.
+     */
+}                               /* dot3StatsTable_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
+dot3StatsTable_row_prep(dot3StatsTable_rowreq_ctx * rowreq_ctx)
+{
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsTable_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;
+}                               /* dot3StatsTable_row_prep */
+
+/** @} */
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_access.h net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_access.h
--- net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_access.h	1969-12-31 19:00:00.000000000 -0500
+++ net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_access.h	2008-08-31 10:26:33.000000000 -0400
@@ -0,0 +1,74 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ *       version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef DOT3STATSTABLE_DATA_ACCESS_H
+#define DOT3STATSTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern          "C" {
+#endif
+
+
+    /*
+     *********************************************************************
+     * function declarations
+     */
+
+    /*
+     *********************************************************************
+     * Table declarations
+     */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table dot3StatsTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+    /*
+     * EtherLike-MIB::dot3StatsTable is subid 2 of dot3.
+     * Its status is Current.
+     * OID: .1.3.6.1.2.1.10.7.2, length: 9
+     */
+
+
+    int             dot3StatsTable_init_data(dot3StatsTable_registration *
+                                             dot3StatsTable_reg);
+
+
+    /*
+     * TODO:180:o: Review dot3StatsTable cache timeout.
+     * The number of seconds before the cache times out
+     */
+#define DOT3STATSTABLE_CACHE_TIMEOUT   60
+
+    void            dot3StatsTable_container_init(netsnmp_container **
+                                                  container_ptr_ptr,
+                                                  netsnmp_cache * cache);
+    void            dot3StatsTable_container_shutdown(netsnmp_container *
+                                                      container_ptr);
+
+    int             dot3StatsTable_container_load(netsnmp_container *
+                                                  container);
+    void            dot3StatsTable_container_free(netsnmp_container *
+                                                  container);
+
+    int             dot3StatsTable_cache_load(netsnmp_container *
+                                              container);
+    void            dot3StatsTable_cache_free(netsnmp_container *
+                                              container);
+
+#define MAX_LINE_SIZE 256
+
+    int             dot3StatsTable_row_prep(dot3StatsTable_rowreq_ctx *
+                                            rowreq_ctx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif                          /* DOT3STATSTABLE_DATA_ACCESS_H */
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_get.c net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_get.c
--- net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_get.c	1969-12-31 19:00:00.000000000 -0500
+++ net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_get.c	2008-08-11 13:28:29.000000000 -0400
@@ -0,0 +1,1450 @@
+/*
+ * 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 "dot3StatsTable.h"
+
+
+/** @defgroup data_get data_get: Routines to get data
+ *
+ * TODO:230:M: Implement dot3StatsTable get routines.
+ * TODO:240:M: Implement dot3StatsTable 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 dot3StatsTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * EtherLike-MIB::dot3StatsTable is subid 2 of dot3.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.10.7.2, length: 9
+ */
+
+/*
+ * ---------------------------------------------------------------------
+ * * TODO:200:r: Implement dot3StatsTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param dot3StatsIndex_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
+dot3StatsTable_indexes_set_tbl_idx(dot3StatsTable_mib_index * tbl_idx,
+                                   long dot3StatsIndex_val)
+{
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsTable_indexes_set_tbl_idx", "called\n"));
+
+    /*
+     * dot3StatsIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H 
+     */
+    tbl_idx->dot3StatsIndex = dot3StatsIndex_val;
+
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsTable_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
+dot3StatsTable_indexes_set(dot3StatsTable_rowreq_ctx * rowreq_ctx,
+                           long dot3StatsIndex_val)
+{
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsTable_indexes_set",
+                "called\n"));
+
+    if (MFD_SUCCESS !=
+        dot3StatsTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
+                                           dot3StatsIndex_val))
+        return MFD_ERROR;
+
+    /*
+     * convert mib index to oid index
+     */
+    rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+    if (0 != dot3StatsTable_index_to_oid(&rowreq_ctx->oid_idx,
+                                         &rowreq_ctx->tbl_idx)) {
+        return MFD_ERROR;
+    }
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * EtherLike-MIB::dot3StatsEntry.dot3StatsAlignmentErrors
+ * dot3StatsAlignmentErrors is subid 2 of dot3StatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.10.7.2.1.2
+ * Description:
+A count of frames received on a particular
+                    interface that are not an integral number of
+                    octets in length and do not pass the FCS check.
+
+                    The count represented by an instance of this
+                    object is incremented when the alignmentError
+                    status is returned by the MAC service to the
+                    LLC (or other MAC user). Received frames for
+                    which multiple error conditions pertain are,
+                    according to the conventions of IEEE 802.3
+                    Layer Management, counted exclusively according
+
+                    to the error status presented to the LLC.
+
+                    This counter does not increment for group
+                    encoding schemes greater than 4 bits per group.
+
+                    For interfaces operating at 10 Gb/s, this
+                    counter can roll over in less than 5 minutes if
+                    it is incrementing at its maximum rate.  Since
+                    that amount of time could be less than a
+                    management station's poll cycle time, in order
+                    to avoid a loss of information, a management
+                    station is advised to poll the
+                    dot3HCStatsAlignmentErrors object for 10 Gb/s
+                    or faster interfaces.
+
+                    Discontinuities in the value of this counter can
+                    occur at re-initialization of the management
+                    system, and at other times as indicated by the
+                    value of ifCounterDiscontinuityTime.
+ *
+ * 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 dot3StatsAlignmentErrors data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ *        Pointer to the row request context.
+ * @param dot3StatsAlignmentErrors_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
+dot3StatsAlignmentErrors_get(dot3StatsTable_rowreq_ctx * rowreq_ctx,
+                             u_long * dot3StatsAlignmentErrors_val_ptr)
+{
+   /** we should have a non-NULL pointer */
+    netsnmp_assert(NULL != dot3StatsAlignmentErrors_val_ptr);
+
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsAlignmentErrors_get",
+                "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    /*
+     * TODO:231:o: |-> Extract the current value of the dot3StatsAlignmentErrors data.
+     * copy (* dot3StatsAlignmentErrors_val_ptr ) from rowreq_ctx->data
+     */
+    (*dot3StatsAlignmentErrors_val_ptr) =
+        rowreq_ctx->data.dot3StatsAlignmentErrors;
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsAlignmentErrors_get */
+
+/*---------------------------------------------------------------------
+ * EtherLike-MIB::dot3StatsEntry.dot3StatsFCSErrors
+ * dot3StatsFCSErrors is subid 3 of dot3StatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.10.7.2.1.3
+ * Description:
+A count of frames received on a particular
+                    interface that are an integral number of octets
+                    in length but do not pass the FCS check.  This
+                    count does not include frames received with
+                    frame-too-long or frame-too-short error.
+
+                    The count represented by an instance of this
+                    object is incremented when the frameCheckError
+                    status is returned by the MAC service to the
+                    LLC (or other MAC user). Received frames for
+                    which multiple error conditions pertain are,
+                    according to the conventions of IEEE 802.3
+                    Layer Management, counted exclusively according
+                    to the error status presented to the LLC.
+
+                    Note:  Coding errors detected by the physical
+                    layer for speeds above 10 Mb/s will cause the
+                    frame to fail the FCS check.
+
+                    For interfaces operating at 10 Gb/s, this
+                    counter can roll over in less than 5 minutes if
+
+                    it is incrementing at its maximum rate.  Since
+                    that amount of time could be less than a
+                    management station's poll cycle time, in order
+                    to avoid a loss of information, a management
+                    station is advised to poll the
+                    dot3HCStatsFCSErrors object for 10 Gb/s or
+                    faster interfaces.
+
+                    Discontinuities in the value of this counter can
+                    occur at re-initialization of the management
+                    system, and at other times as indicated by the
+                    value of ifCounterDiscontinuityTime.
+ *
+ * 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 dot3StatsFCSErrors data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ *        Pointer to the row request context.
+ * @param dot3StatsFCSErrors_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
+dot3StatsFCSErrors_get(dot3StatsTable_rowreq_ctx * rowreq_ctx,
+                       u_long * dot3StatsFCSErrors_val_ptr)
+{
+   /** we should have a non-NULL pointer */
+    netsnmp_assert(NULL != dot3StatsFCSErrors_val_ptr);
+
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsFCSErrors_get",
+                "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    /*
+     * TODO:231:o: |-> Extract the current value of the dot3StatsFCSErrors data.
+     * copy (* dot3StatsFCSErrors_val_ptr ) from rowreq_ctx->data
+     */
+    (*dot3StatsFCSErrors_val_ptr) = rowreq_ctx->data.dot3StatsFCSErrors;
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsFCSErrors_get */
+
+/*---------------------------------------------------------------------
+ * EtherLike-MIB::dot3StatsEntry.dot3StatsSingleCollisionFrames
+ * dot3StatsSingleCollisionFrames is subid 4 of dot3StatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.10.7.2.1.4
+ * Description:
+A count of frames that are involved in a single
+                    collision, and are subsequently transmitted
+                    successfully.
+
+                    A frame that is counted by an instance of this
+                    object is also counted by the corresponding
+                    instance of either the ifOutUcastPkts,
+                    ifOutMulticastPkts, or ifOutBroadcastPkts,
+                    and is not counted by the corresponding
+                    instance of the dot3StatsMultipleCollisionFrames
+                    object.
+
+                    This counter does not increment when the
+                    interface is operating in full-duplex mode.
+
+                    Discontinuities in the value of this counter can
+                    occur at re-initialization of the management
+                    system, and at other times as indicated by the
+                    value of ifCounterDiscontinuityTime.
+ *
+ * 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 dot3StatsSingleCollisionFrames data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ *        Pointer to the row request context.
+ * @param dot3StatsSingleCollisionFrames_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
+dot3StatsSingleCollisionFrames_get(dot3StatsTable_rowreq_ctx * rowreq_ctx,
+                                   u_long *
+                                   dot3StatsSingleCollisionFrames_val_ptr)
+{
+   /** we should have a non-NULL pointer */
+    netsnmp_assert(NULL != dot3StatsSingleCollisionFrames_val_ptr);
+
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsSingleCollisionFrames_get", "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    /*
+     * TODO:231:o: |-> Extract the current value of the dot3StatsSingleCollisionFrames data.
+     * copy (* dot3StatsSingleCollisionFrames_val_ptr ) from rowreq_ctx->data
+     */
+    (*dot3StatsSingleCollisionFrames_val_ptr) =
+        rowreq_ctx->data.dot3StatsSingleCollisionFrames;
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsSingleCollisionFrames_get */
+
+/*---------------------------------------------------------------------
+ * EtherLike-MIB::dot3StatsEntry.dot3StatsMultipleCollisionFrames
+ * dot3StatsMultipleCollisionFrames is subid 5 of dot3StatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.10.7.2.1.5
+ * Description:
+A count of frames that are involved in more
+
+                    than one collision and are subsequently
+                    transmitted successfully.
+
+                    A frame that is counted by an instance of this
+                    object is also counted by the corresponding
+                    instance of either the ifOutUcastPkts,
+                    ifOutMulticastPkts, or ifOutBroadcastPkts,
+                    and is not counted by the corresponding
+                    instance of the dot3StatsSingleCollisionFrames
+                    object.
+
+                    This counter does not increment when the
+                    interface is operating in full-duplex mode.
+
+                    Discontinuities in the value of this counter can
+                    occur at re-initialization of the management
+                    system, and at other times as indicated by the
+                    value of ifCounterDiscontinuityTime.
+ *
+ * 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 dot3StatsMultipleCollisionFrames data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ *        Pointer to the row request context.
+ * @param dot3StatsMultipleCollisionFrames_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
+dot3StatsMultipleCollisionFrames_get(dot3StatsTable_rowreq_ctx *
+                                     rowreq_ctx,
+                                     u_long *
+                                     dot3StatsMultipleCollisionFrames_val_ptr)
+{
+   /** we should have a non-NULL pointer */
+    netsnmp_assert(NULL != dot3StatsMultipleCollisionFrames_val_ptr);
+
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsMultipleCollisionFrames_get", "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    /*
+     * TODO:231:o: |-> Extract the current value of the dot3StatsMultipleCollisionFrames data.
+     * copy (* dot3StatsMultipleCollisionFrames_val_ptr ) from rowreq_ctx->data
+     */
+    (*dot3StatsMultipleCollisionFrames_val_ptr) =
+        rowreq_ctx->data.dot3StatsMultipleCollisionFrames;
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsMultipleCollisionFrames_get */
+
+/*---------------------------------------------------------------------
+ * EtherLike-MIB::dot3StatsEntry.dot3StatsSQETestErrors
+ * dot3StatsSQETestErrors is subid 6 of dot3StatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.10.7.2.1.6
+ * Description:
+A count of times that the SQE TEST ERROR
+                    is received on a particular interface. The
+                    SQE TEST ERROR is set in accordance with the
+                    rules for verification of the SQE detection
+                    mechanism in the PLS Carrier Sense Function as
+                    described in IEEE Std. 802.3, 2000 Edition,
+                    section 7.2.4.6.
+
+                    This counter does not increment on interfaces
+                    operating at speeds greater than 10 Mb/s, or on
+                    interfaces operating in full-duplex mode.
+
+                    Discontinuities in the value of this counter can
+                    occur at re-initialization of the management
+                    system, and at other times as indicated by the
+                    value of ifCounterDiscontinuityTime.
+ *
+ * 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 dot3StatsSQETestErrors data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ *        Pointer to the row request context.
+ * @param dot3StatsSQETestErrors_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
+dot3StatsSQETestErrors_get(dot3StatsTable_rowreq_ctx * rowreq_ctx,
+                           u_long * dot3StatsSQETestErrors_val_ptr)
+{
+   /** we should have a non-NULL pointer */
+    netsnmp_assert(NULL != dot3StatsSQETestErrors_val_ptr);
+
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsSQETestErrors_get",
+                "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    /*
+     * TODO:231:o: |-> Extract the current value of the dot3StatsSQETestErrors data.
+     * copy (* dot3StatsSQETestErrors_val_ptr ) from rowreq_ctx->data
+     */
+    (*dot3StatsSQETestErrors_val_ptr) =
+        rowreq_ctx->data.dot3StatsSQETestErrors;
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsSQETestErrors_get */
+
+/*---------------------------------------------------------------------
+ * EtherLike-MIB::dot3StatsEntry.dot3StatsDeferredTransmissions
+ * dot3StatsDeferredTransmissions is subid 7 of dot3StatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.10.7.2.1.7
+ * Description:
+A count of frames for which the first
+                    transmission attempt on a particular interface
+                    is delayed because the medium is busy.
+
+                    The count represented by an instance of this
+                    object does not include frames involved in
+                    collisions.
+
+                    This counter does not increment when the
+                    interface is operating in full-duplex mode.
+
+                    Discontinuities in the value of this counter can
+                    occur at re-initialization of the management
+                    system, and at other times as indicated by the
+                    value of ifCounterDiscontinuityTime.
+ *
+ * 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 dot3StatsDeferredTransmissions data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ *        Pointer to the row request context.
+ * @param dot3StatsDeferredTransmissions_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
+dot3StatsDeferredTransmissions_get(dot3StatsTable_rowreq_ctx * rowreq_ctx,
+                                   u_long *
+                                   dot3StatsDeferredTransmissions_val_ptr)
+{
+   /** we should have a non-NULL pointer */
+    netsnmp_assert(NULL != dot3StatsDeferredTransmissions_val_ptr);
+
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsDeferredTransmissions_get", "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    /*
+     * TODO:231:o: |-> Extract the current value of the dot3StatsDeferredTransmissions data.
+     * copy (* dot3StatsDeferredTransmissions_val_ptr ) from rowreq_ctx->data
+     */
+    (*dot3StatsDeferredTransmissions_val_ptr) =
+        rowreq_ctx->data.dot3StatsDeferredTransmissions;
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsDeferredTransmissions_get */
+
+/*---------------------------------------------------------------------
+ * EtherLike-MIB::dot3StatsEntry.dot3StatsLateCollisions
+ * dot3StatsLateCollisions is subid 8 of dot3StatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.10.7.2.1.8
+ * Description:
+The number of times that a collision is
+                    detected on a particular interface later than
+                    one slotTime into the transmission of a packet.
+
+                    A (late) collision included in a count
+                    represented by an instance of this object is
+                    also considered as a (generic) collision for
+                    purposes of other collision-related
+                    statistics.
+
+                    This counter does not increment when the
+                    interface is operating in full-duplex mode.
+
+                    Discontinuities in the value of this counter can
+                    occur at re-initialization of the management
+                    system, and at other times as indicated by the
+                    value of ifCounterDiscontinuityTime.
+ *
+ * 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 dot3StatsLateCollisions data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ *        Pointer to the row request context.
+ * @param dot3StatsLateCollisions_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
+dot3StatsLateCollisions_get(dot3StatsTable_rowreq_ctx * rowreq_ctx,
+                            u_long * dot3StatsLateCollisions_val_ptr)
+{
+   /** we should have a non-NULL pointer */
+    netsnmp_assert(NULL != dot3StatsLateCollisions_val_ptr);
+
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsLateCollisions_get",
+                "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    /*
+     * TODO:231:o: |-> Extract the current value of the dot3StatsLateCollisions data.
+     * copy (* dot3StatsLateCollisions_val_ptr ) from rowreq_ctx->data
+     */
+    (*dot3StatsLateCollisions_val_ptr) =
+        rowreq_ctx->data.dot3StatsLateCollisions;
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsLateCollisions_get */
+
+/*---------------------------------------------------------------------
+ * EtherLike-MIB::dot3StatsEntry.dot3StatsExcessiveCollisions
+ * dot3StatsExcessiveCollisions is subid 9 of dot3StatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.10.7.2.1.9
+ * Description:
+A count of frames for which transmission on a
+                    particular interface fails due to excessive
+                    collisions.
+
+                    This counter does not increment when the
+                    interface is operating in full-duplex mode.
+
+                    Discontinuities in the value of this counter can
+                    occur at re-initialization of the management
+                    system, and at other times as indicated by the
+                    value of ifCounterDiscontinuityTime.
+ *
+ * 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 dot3StatsExcessiveCollisions data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ *        Pointer to the row request context.
+ * @param dot3StatsExcessiveCollisions_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
+dot3StatsExcessiveCollisions_get(dot3StatsTable_rowreq_ctx * rowreq_ctx,
+                                 u_long *
+                                 dot3StatsExcessiveCollisions_val_ptr)
+{
+   /** we should have a non-NULL pointer */
+    netsnmp_assert(NULL != dot3StatsExcessiveCollisions_val_ptr);
+
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsExcessiveCollisions_get",
+                "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    /*
+     * TODO:231:o: |-> Extract the current value of the dot3StatsExcessiveCollisions data.
+     * copy (* dot3StatsExcessiveCollisions_val_ptr ) from rowreq_ctx->data
+     */
+    (*dot3StatsExcessiveCollisions_val_ptr) =
+        rowreq_ctx->data.dot3StatsExcessiveCollisions;
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsExcessiveCollisions_get */
+
+/*---------------------------------------------------------------------
+ * EtherLike-MIB::dot3StatsEntry.dot3StatsInternalMacTransmitErrors
+ * dot3StatsInternalMacTransmitErrors is subid 10 of dot3StatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.10.7.2.1.10
+ * Description:
+A count of frames for which transmission on a
+                    particular interface fails due to an internal
+                    MAC sublayer transmit error. A frame is only
+                    counted by an instance of this object if it is
+                    not counted by the corresponding instance of
+                    either the dot3StatsLateCollisions object, the
+                    dot3StatsExcessiveCollisions object, or the
+                    dot3StatsCarrierSenseErrors object.
+
+                    The precise meaning of the count represented by
+                    an instance of this object is implementation-
+                    specific.  In particular, an instance of this
+                    object may represent a count of transmission
+                    errors on a particular interface that are not
+                    otherwise counted.
+
+                    For interfaces operating at 10 Gb/s, this
+                    counter can roll over in less than 5 minutes if
+                    it is incrementing at its maximum rate.  Since
+                    that amount of time could be less than a
+                    management station's poll cycle time, in order
+                    to avoid a loss of information, a management
+                    station is advised to poll the
+                    dot3HCStatsInternalMacTransmitErrors object for
+                    10 Gb/s or faster interfaces.
+
+                    Discontinuities in the value of this counter can
+
+                    occur at re-initialization of the management
+                    system, and at other times as indicated by the
+                    value of ifCounterDiscontinuityTime.
+ *
+ * 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 dot3StatsInternalMacTransmitErrors data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ *        Pointer to the row request context.
+ * @param dot3StatsInternalMacTransmitErrors_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
+dot3StatsInternalMacTransmitErrors_get(dot3StatsTable_rowreq_ctx *
+                                       rowreq_ctx,
+                                       u_long *
+                                       dot3StatsInternalMacTransmitErrors_val_ptr)
+{
+   /** we should have a non-NULL pointer */
+    netsnmp_assert(NULL != dot3StatsInternalMacTransmitErrors_val_ptr);
+
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsInternalMacTransmitErrors_get", "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    /*
+     * TODO:231:o: |-> Extract the current value of the dot3StatsInternalMacTransmitErrors data.
+     * copy (* dot3StatsInternalMacTransmitErrors_val_ptr ) from rowreq_ctx->data
+     */
+    (*dot3StatsInternalMacTransmitErrors_val_ptr) =
+        rowreq_ctx->data.dot3StatsInternalMacTransmitErrors;
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsInternalMacTransmitErrors_get */
+
+/*---------------------------------------------------------------------
+ * EtherLike-MIB::dot3StatsEntry.dot3StatsCarrierSenseErrors
+ * dot3StatsCarrierSenseErrors is subid 11 of dot3StatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.10.7.2.1.11
+ * Description:
+The number of times that the carrier sense
+                    condition was lost or never asserted when
+                    attempting to transmit a frame on a particular
+                    interface.
+
+                    The count represented by an instance of this
+                    object is incremented at most once per
+                    transmission attempt, even if the carrier sense
+                    condition fluctuates during a transmission
+                    attempt.
+
+                    This counter does not increment when the
+                    interface is operating in full-duplex mode.
+
+                    Discontinuities in the value of this counter can
+                    occur at re-initialization of the management
+                    system, and at other times as indicated by the
+                    value of ifCounterDiscontinuityTime.
+ *
+ * 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 dot3StatsCarrierSenseErrors data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ *        Pointer to the row request context.
+ * @param dot3StatsCarrierSenseErrors_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
+dot3StatsCarrierSenseErrors_get(dot3StatsTable_rowreq_ctx * rowreq_ctx,
+                                u_long *
+                                dot3StatsCarrierSenseErrors_val_ptr)
+{
+   /** we should have a non-NULL pointer */
+    netsnmp_assert(NULL != dot3StatsCarrierSenseErrors_val_ptr);
+
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsCarrierSenseErrors_get",
+                "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    /*
+     * TODO:231:o: |-> Extract the current value of the dot3StatsCarrierSenseErrors data.
+     * copy (* dot3StatsCarrierSenseErrors_val_ptr ) from rowreq_ctx->data
+     */
+    (*dot3StatsCarrierSenseErrors_val_ptr) =
+        rowreq_ctx->data.dot3StatsCarrierSenseErrors;
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsCarrierSenseErrors_get */
+
+/*---------------------------------------------------------------------
+ * EtherLike-MIB::dot3StatsEntry.dot3StatsFrameTooLongs
+ * dot3StatsFrameTooLongs is subid 13 of dot3StatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.10.7.2.1.13
+ * Description:
+A count of frames received on a particular
+                    interface that exceed the maximum permitted
+                    frame size.
+
+                    The count represented by an instance of this
+                    object is incremented when the frameTooLong
+                    status is returned by the MAC service to the
+                    LLC (or other MAC user). Received frames for
+                    which multiple error conditions pertain are,
+                    according to the conventions of IEEE 802.3
+                    Layer Management, counted exclusively according
+                    to the error status presented to the LLC.
+
+                    For interfaces operating at 10 Gb/s, this
+                    counter can roll over in less than 80 minutes if
+                    it is incrementing at its maximum rate.  Since
+                    that amount of time could be less than a
+                    management station's poll cycle time, in order
+                    to avoid a loss of information, a management
+                    station is advised to poll the
+                    dot3HCStatsFrameTooLongs object for 10 Gb/s
+                    or faster interfaces.
+
+                    Discontinuities in the value of this counter can
+                    occur at re-initialization of the management
+                    system, and at other times as indicated by the
+                    value of ifCounterDiscontinuityTime.
+ *
+ * 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 dot3StatsFrameTooLongs data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ *        Pointer to the row request context.
+ * @param dot3StatsFrameTooLongs_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
+dot3StatsFrameTooLongs_get(dot3StatsTable_rowreq_ctx * rowreq_ctx,
+                           u_long * dot3StatsFrameTooLongs_val_ptr)
+{
+   /** we should have a non-NULL pointer */
+    netsnmp_assert(NULL != dot3StatsFrameTooLongs_val_ptr);
+
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsFrameTooLongs_get",
+                "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    /*
+     * TODO:231:o: |-> Extract the current value of the dot3StatsFrameTooLongs data.
+     * copy (* dot3StatsFrameTooLongs_val_ptr ) from rowreq_ctx->data
+     */
+    (*dot3StatsFrameTooLongs_val_ptr) =
+        rowreq_ctx->data.dot3StatsFrameTooLongs;
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsFrameTooLongs_get */
+
+/*---------------------------------------------------------------------
+ * EtherLike-MIB::dot3StatsEntry.dot3StatsInternalMacReceiveErrors
+ * dot3StatsInternalMacReceiveErrors is subid 16 of dot3StatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.10.7.2.1.16
+ * Description:
+A count of frames for which reception on a
+                    particular interface fails due to an internal
+                    MAC sublayer receive error. A frame is only
+                    counted by an instance of this object if it is
+                    not counted by the corresponding instance of
+                    either the dot3StatsFrameTooLongs object, the
+                    dot3StatsAlignmentErrors object, or the
+                    dot3StatsFCSErrors object.
+
+                    The precise meaning of the count represented by
+                    an instance of this object is implementation-
+                    specific.  In particular, an instance of this
+                    object may represent a count of receive errors
+                    on a particular interface that are not
+                    otherwise counted.
+
+                    For interfaces operating at 10 Gb/s, this
+                    counter can roll over in less than 5 minutes if
+
+                    it is incrementing at its maximum rate.  Since
+                    that amount of time could be less than a
+                    management station's poll cycle time, in order
+                    to avoid a loss of information, a management
+                    station is advised to poll the
+                    dot3HCStatsInternalMacReceiveErrors object for
+                    10 Gb/s or faster interfaces.
+
+                    Discontinuities in the value of this counter can
+                    occur at re-initialization of the management
+                    system, and at other times as indicated by the
+                    value of ifCounterDiscontinuityTime.
+ *
+ * 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 dot3StatsInternalMacReceiveErrors data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ *        Pointer to the row request context.
+ * @param dot3StatsInternalMacReceiveErrors_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
+dot3StatsInternalMacReceiveErrors_get(dot3StatsTable_rowreq_ctx *
+                                      rowreq_ctx,
+                                      u_long *
+                                      dot3StatsInternalMacReceiveErrors_val_ptr)
+{
+   /** we should have a non-NULL pointer */
+    netsnmp_assert(NULL != dot3StatsInternalMacReceiveErrors_val_ptr);
+
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsInternalMacReceiveErrors_get", "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    /*
+     * TODO:231:o: |-> Extract the current value of the dot3StatsInternalMacReceiveErrors data.
+     * copy (* dot3StatsInternalMacReceiveErrors_val_ptr ) from rowreq_ctx->data
+     */
+    (*dot3StatsInternalMacReceiveErrors_val_ptr) =
+        rowreq_ctx->data.dot3StatsInternalMacReceiveErrors;
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsInternalMacReceiveErrors_get */
+
+/*---------------------------------------------------------------------
+ * EtherLike-MIB::dot3StatsEntry.dot3StatsEtherChipSet
+ * dot3StatsEtherChipSet is subid 17 of dot3StatsEntry.
+ * Its status is Deprecated, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.10.7.2.1.17
+ * Description:
+******** THIS OBJECT IS DEPRECATED ********
+
+                    This object contains an OBJECT IDENTIFIER
+                    which identifies the chipset used to
+                    realize the interface. Ethernet-like
+                    interfaces are typically built out of
+                    several different chips. The MIB implementor
+                    is presented with a decision of which chip
+                    to identify via this object. The implementor
+                    should identify the chip which is usually
+                    called the Medium Access Control chip.
+                    If no such chip is easily identifiable,
+                    the implementor should identify the chip
+                    which actually gathers the transmit
+                    and receive statistics and error
+                    indications. This would allow a
+                    manager station to correlate the
+                    statistics and the chip generating
+                    them, giving it the ability to take
+                    into account any known anomalies
+                    in the chip.
+
+                    This object has been deprecated.  Implementation
+                    feedback indicates that it is of limited use for
+                    debugging network problems in the field, and
+                    the administrative overhead involved in
+                    maintaining a registry of chipset OIDs is not
+                    justified.
+ *
+ * Attributes:
+ *   accessible 1     isscalar 0     enums  0      hasdefval 0
+ *   readable   1     iscolumn 1     ranges 0      hashint   0
+ *   settable   0
+ *
+ *
+ * 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 dot3StatsEtherChipSet data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ *        Pointer to the row request context.
+ * @param dot3StatsEtherChipSet_val_ptr_ptr
+ *        Pointer to storage for a oid variable
+ * @param dot3StatsEtherChipSet_val_ptr_len_ptr
+ *        Pointer to a size_t. On entry, it will contain the size (in bytes)
+ *        pointed to by dot3StatsEtherChipSet.
+ *        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 (*dot3StatsEtherChipSet_val_ptr_len_ptr) bytes of memory,
+ *       allocate it using malloc() and update dot3StatsEtherChipSet_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
+dot3StatsEtherChipSet_get(dot3StatsTable_rowreq_ctx * rowreq_ctx,
+                          oid ** dot3StatsEtherChipSet_val_ptr_ptr,
+                          size_t *dot3StatsEtherChipSet_val_ptr_len_ptr)
+{
+   /** we should have a non-NULL pointer and enough storage */
+    netsnmp_assert((NULL != dot3StatsEtherChipSet_val_ptr_ptr)
+                   && (NULL != *dot3StatsEtherChipSet_val_ptr_ptr));
+    netsnmp_assert(NULL != dot3StatsEtherChipSet_val_ptr_len_ptr);
+
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsEtherChipSet_get",
+                "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    /*
+     * TODO:231:o: |-> Extract the current value of the dot3StatsEtherChipSet data.
+     * copy (* dot3StatsEtherChipSet_val_ptr_ptr ) data and (* dot3StatsEtherChipSet_val_ptr_len_ptr ) from rowreq_ctx->data
+     */
+    /*
+     * make sure there is enough space for dot3StatsEtherChipSet data
+     */
+    if ((NULL == (*dot3StatsEtherChipSet_val_ptr_ptr)) ||
+        ((*dot3StatsEtherChipSet_val_ptr_len_ptr) <
+         (rowreq_ctx->data.dot3StatsEtherChipSet_len *
+          sizeof(rowreq_ctx->data.dot3StatsEtherChipSet[0])))) {
+        /*
+         * allocate space for dot3StatsEtherChipSet data
+         */
+        (*dot3StatsEtherChipSet_val_ptr_ptr) =
+            malloc(rowreq_ctx->data.dot3StatsEtherChipSet_len *
+                   sizeof(rowreq_ctx->data.dot3StatsEtherChipSet[0]));
+        if (NULL == (*dot3StatsEtherChipSet_val_ptr_ptr)) {
+            snmp_log(LOG_ERR, "could not allocate memory\n");
+            return MFD_ERROR;
+        }
+    }
+    (*dot3StatsEtherChipSet_val_ptr_len_ptr) =
+        rowreq_ctx->data.dot3StatsEtherChipSet_len *
+        sizeof(rowreq_ctx->data.dot3StatsEtherChipSet[0]);
+    memcpy((*dot3StatsEtherChipSet_val_ptr_ptr),
+           rowreq_ctx->data.dot3StatsEtherChipSet,
+           rowreq_ctx->data.dot3StatsEtherChipSet_len *
+           sizeof(rowreq_ctx->data.dot3StatsEtherChipSet[0]));
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsEtherChipSet_get */
+
+/*---------------------------------------------------------------------
+ * EtherLike-MIB::dot3StatsEntry.dot3StatsSymbolErrors
+ * dot3StatsSymbolErrors is subid 18 of dot3StatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.10.7.2.1.18
+ * Description:
+For an interface operating at 100 Mb/s, the
+                    number of times there was an invalid data symbol
+                    when a valid carrier was present.
+
+                    For an interface operating in half-duplex mode
+                    at 1000 Mb/s, the number of times the receiving
+                    media is non-idle (a carrier event) for a period
+                    of time equal to or greater than slotTime, and
+                    during which there was at least one occurrence
+                    of an event that causes the PHY to indicate
+                    'Data reception error' or 'carrier extend error'
+                    on the GMII.
+
+                    For an interface operating in full-duplex mode
+                    at 1000 Mb/s, the number of times the receiving
+                    media is non-idle (a carrier event) for a period
+                    of time equal to or greater than minFrameSize,
+                    and during which there was at least one
+                    occurrence of an event that causes the PHY to
+                    indicate 'Data reception error' on the GMII.
+
+                    For an interface operating at 10 Gb/s, the
+                    number of times the receiving media is non-idle
+                    (a carrier event) for a period of time equal to
+                    or greater than minFrameSize, and during which
+                    there was at least one occurrence of an event
+                    that causes the PHY to indicate 'Receive Error'
+                    on the XGMII.
+
+                    The count represented by an instance of this
+                    object is incremented at most once per carrier
+                    event, even if multiple symbol errors occur
+                    during the carrier event.  This count does
+                    not increment if a collision is present.
+
+                    This counter does not increment when the
+                    interface is operating at 10 Mb/s.
+
+                    For interfaces operating at 10 Gb/s, this
+                    counter can roll over in less than 5 minutes if
+                    it is incrementing at its maximum rate.  Since
+                    that amount of time could be less than a
+
+                    management station's poll cycle time, in order
+                    to avoid a loss of information, a management
+                    station is advised to poll the
+                    dot3HCStatsSymbolErrors object for 10 Gb/s
+                    or faster interfaces.
+
+                    Discontinuities in the value of this counter can
+                    occur at re-initialization of the management
+                    system, and at other times as indicated by the
+                    value of ifCounterDiscontinuityTime.
+ *
+ * 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 dot3StatsSymbolErrors data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ *        Pointer to the row request context.
+ * @param dot3StatsSymbolErrors_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
+dot3StatsSymbolErrors_get(dot3StatsTable_rowreq_ctx * rowreq_ctx,
+                          u_long * dot3StatsSymbolErrors_val_ptr)
+{
+   /** we should have a non-NULL pointer */
+    netsnmp_assert(NULL != dot3StatsSymbolErrors_val_ptr);
+
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsSymbolErrors_get",
+                "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    /*
+     * TODO:231:o: |-> Extract the current value of the dot3StatsSymbolErrors data.
+     * copy (* dot3StatsSymbolErrors_val_ptr ) from rowreq_ctx->data
+     */
+    (*dot3StatsSymbolErrors_val_ptr) =
+        rowreq_ctx->data.dot3StatsSymbolErrors;
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsSymbolErrors_get */
+
+/*---------------------------------------------------------------------
+ * EtherLike-MIB::dot3StatsEntry.dot3StatsDuplexStatus
+ * dot3StatsDuplexStatus is subid 19 of dot3StatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.10.7.2.1.19
+ * Description:
+The current mode of operation of the MAC
+                    entity.  'unknown' indicates that the current
+                    duplex mode could not be determined.
+
+                    Management control of the duplex mode is
+                    accomplished through the MAU MIB.  When
+                    an interface does not support autonegotiation,
+                    or when autonegotiation is not enabled, the
+                    duplex mode is controlled using
+                    ifMauDefaultType.  When autonegotiation is
+                    supported and enabled, duplex mode is controlled
+                    using ifMauAutoNegAdvertisedBits.  In either
+                    case, the currently operating duplex mode is
+                    reflected both in this object and in ifMauType.
+
+                    Note that this object provides redundant
+                    information with ifMauType.  Normally, redundant
+                    objects are discouraged.  However, in this
+                    instance, it allows a management application to
+                    determine the duplex status of an interface
+                    without having to know every possible value of
+                    ifMauType.  This was felt to be sufficiently
+                    valuable to justify the redundancy.
+ *
+ * Attributes:
+ *   accessible 1     isscalar 0     enums  1      hasdefval 0
+ *   readable   1     iscolumn 1     ranges 0      hashint   0
+ *   settable   0
+ *
+ * Enum range: 3/8. Values:  unknown(1), halfDuplex(2), fullDuplex(3)
+ *
+ * Its syntax is INTEGER (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 dot3StatsDuplexStatus data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ *        Pointer to the row request context.
+ * @param dot3StatsDuplexStatus_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
+dot3StatsDuplexStatus_get(dot3StatsTable_rowreq_ctx * rowreq_ctx,
+                          u_long * dot3StatsDuplexStatus_val_ptr)
+{
+   /** we should have a non-NULL pointer */
+    netsnmp_assert(NULL != dot3StatsDuplexStatus_val_ptr);
+
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsDuplexStatus_get",
+                "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    /*
+     * TODO:231:o: |-> Extract the current value of the dot3StatsDuplexStatus data.
+     * copy (* dot3StatsDuplexStatus_val_ptr ) from rowreq_ctx->data
+     */
+    (*dot3StatsDuplexStatus_val_ptr) =
+        rowreq_ctx->data.dot3StatsDuplexStatus;
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsDuplexStatus_get */
+
+/*---------------------------------------------------------------------
+ * EtherLike-MIB::dot3StatsEntry.dot3StatsRateControlAbility
+ * dot3StatsRateControlAbility is subid 20 of dot3StatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.10.7.2.1.20
+ * Description:
+'true' for interfaces operating at speeds above
+                    1000 Mb/s that support Rate Control through
+                    lowering the average data rate of the MAC
+                    sublayer, with frame granularity, and 'false'
+                    otherwise.
+ *
+ * Attributes:
+ *   accessible 1     isscalar 0     enums  1      hasdefval 0
+ *   readable   1     iscolumn 1     ranges 0      hashint   0
+ *   settable   0
+ *
+ * Enum range: 2/8. Values:  true(1), false(2)
+ *
+ * Its syntax is TruthValue (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 dot3StatsRateControlAbility data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ *        Pointer to the row request context.
+ * @param dot3StatsRateControlAbility_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
+dot3StatsRateControlAbility_get(dot3StatsTable_rowreq_ctx * rowreq_ctx,
+                                u_long *
+                                dot3StatsRateControlAbility_val_ptr)
+{
+   /** we should have a non-NULL pointer */
+    netsnmp_assert(NULL != dot3StatsRateControlAbility_val_ptr);
+
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsRateControlAbility_get",
+                "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    /*
+     * TODO:231:o: |-> Extract the current value of the dot3StatsRateControlAbility data.
+     * copy (* dot3StatsRateControlAbility_val_ptr ) from rowreq_ctx->data
+     */
+    (*dot3StatsRateControlAbility_val_ptr) =
+        rowreq_ctx->data.dot3StatsRateControlAbility;
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsRateControlAbility_get */
+
+/*---------------------------------------------------------------------
+ * EtherLike-MIB::dot3StatsEntry.dot3StatsRateControlStatus
+ * dot3StatsRateControlStatus is subid 21 of dot3StatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.10.7.2.1.21
+ * Description:
+The current Rate Control mode of operation of
+                    the MAC sublayer of this interface.
+ *
+ * Attributes:
+ *   accessible 1     isscalar 0     enums  1      hasdefval 0
+ *   readable   1     iscolumn 1     ranges 0      hashint   0
+ *   settable   0
+ *
+ * Enum range: 3/8. Values:  rateControlOff(1), rateControlOn(2), unknown(3)
+ *
+ * Its syntax is INTEGER (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 dot3StatsRateControlStatus data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ *        Pointer to the row request context.
+ * @param dot3StatsRateControlStatus_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
+dot3StatsRateControlStatus_get(dot3StatsTable_rowreq_ctx * rowreq_ctx,
+                               u_long * dot3StatsRateControlStatus_val_ptr)
+{
+   /** we should have a non-NULL pointer */
+    netsnmp_assert(NULL != dot3StatsRateControlStatus_val_ptr);
+
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsRateControlStatus_get",
+                "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    /*
+     * TODO:231:o: |-> Extract the current value of the dot3StatsRateControlStatus data.
+     * copy (* dot3StatsRateControlStatus_val_ptr ) from rowreq_ctx->data
+     */
+    (*dot3StatsRateControlStatus_val_ptr) =
+        rowreq_ctx->data.dot3StatsRateControlStatus;
+
+    return MFD_SUCCESS;
+}                               /* dot3StatsRateControlStatus_get */
+
+
+
+/** @} */
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_get.h net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_get.h
--- net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_get.h	1969-12-31 19:00:00.000000000 -0500
+++ net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_get.h	2008-08-08 05:58:09.000000000 -0400
@@ -0,0 +1,143 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ *       version : 12088 $ of $
+ *
+ * $Id:$
+ *
+ * @file dot3StatsTable_data_get.h
+ *
+ * @addtogroup get
+ *
+ * Prototypes for get functions
+ *
+ * @{
+ */
+#ifndef DOT3STATSTABLE_DATA_GET_H
+#define DOT3STATSTABLE_DATA_GET_H
+
+#ifdef __cplusplus
+extern          "C" {
+#endif
+
+    /*
+     *********************************************************************
+     * GET function declarations
+     */
+
+    /*
+     *********************************************************************
+     * GET Table declarations
+     */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table dot3StatsTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+    /*
+     * EtherLike-MIB::dot3StatsTable is subid 2 of dot3.
+     * Its status is Current.
+     * OID: .1.3.6.1.2.1.10.7.2, length: 9
+     */
+    /*
+     * indexes
+     */
+
+    int             dot3StatsAlignmentErrors_get(dot3StatsTable_rowreq_ctx
+                                                 * rowreq_ctx,
+                                                 u_long *
+                                                 dot3StatsAlignmentErrors_val_ptr);
+    int             dot3StatsFCSErrors_get(dot3StatsTable_rowreq_ctx *
+                                           rowreq_ctx,
+                                           u_long *
+                                           dot3StatsFCSErrors_val_ptr);
+    int            
+        dot3StatsSingleCollisionFrames_get(dot3StatsTable_rowreq_ctx *
+                                           rowreq_ctx,
+                                           u_long *
+                                           dot3StatsSingleCollisionFrames_val_ptr);
+    int            
+        dot3StatsMultipleCollisionFrames_get(dot3StatsTable_rowreq_ctx *
+                                             rowreq_ctx,
+                                             u_long *
+                                             dot3StatsMultipleCollisionFrames_val_ptr);
+    int             dot3StatsSQETestErrors_get(dot3StatsTable_rowreq_ctx *
+                                               rowreq_ctx,
+                                               u_long *
+                                               dot3StatsSQETestErrors_val_ptr);
+    int            
+        dot3StatsDeferredTransmissions_get(dot3StatsTable_rowreq_ctx *
+                                           rowreq_ctx,
+                                           u_long *
+                                           dot3StatsDeferredTransmissions_val_ptr);
+    int             dot3StatsLateCollisions_get(dot3StatsTable_rowreq_ctx *
+                                                rowreq_ctx,
+                                                u_long *
+                                                dot3StatsLateCollisions_val_ptr);
+    int            
+        dot3StatsExcessiveCollisions_get(dot3StatsTable_rowreq_ctx *
+                                         rowreq_ctx,
+                                         u_long *
+                                         dot3StatsExcessiveCollisions_val_ptr);
+    int            
+        dot3StatsInternalMacTransmitErrors_get(dot3StatsTable_rowreq_ctx *
+                                               rowreq_ctx,
+                                               u_long *
+                                               dot3StatsInternalMacTransmitErrors_val_ptr);
+    int            
+        dot3StatsCarrierSenseErrors_get(dot3StatsTable_rowreq_ctx *
+                                        rowreq_ctx,
+                                        u_long *
+                                        dot3StatsCarrierSenseErrors_val_ptr);
+    int             dot3StatsFrameTooLongs_get(dot3StatsTable_rowreq_ctx *
+                                               rowreq_ctx,
+                                               u_long *
+                                               dot3StatsFrameTooLongs_val_ptr);
+    int            
+        dot3StatsInternalMacReceiveErrors_get(dot3StatsTable_rowreq_ctx *
+                                              rowreq_ctx,
+                                              u_long *
+                                              dot3StatsInternalMacReceiveErrors_val_ptr);
+    int             dot3StatsEtherChipSet_get(dot3StatsTable_rowreq_ctx *
+                                              rowreq_ctx,
+                                              oid **
+                                              dot3StatsEtherChipSet_val_ptr_ptr,
+                                              size_t
+                                              *dot3StatsEtherChipSet_val_ptr_len_ptr);
+    int             dot3StatsSymbolErrors_get(dot3StatsTable_rowreq_ctx *
+                                              rowreq_ctx,
+                                              u_long *
+                                              dot3StatsSymbolErrors_val_ptr);
+    int             dot3StatsDuplexStatus_get(dot3StatsTable_rowreq_ctx *
+                                              rowreq_ctx,
+                                              u_long *
+                                              dot3StatsDuplexStatus_val_ptr);
+    int            
+        dot3StatsRateControlAbility_get(dot3StatsTable_rowreq_ctx *
+                                        rowreq_ctx,
+                                        u_long *
+                                        dot3StatsRateControlAbility_val_ptr);
+    int            
+        dot3StatsRateControlStatus_get(dot3StatsTable_rowreq_ctx *
+                                       rowreq_ctx,
+                                       u_long *
+                                       dot3StatsRateControlStatus_val_ptr);
+
+
+    int            
+        dot3StatsTable_indexes_set_tbl_idx(dot3StatsTable_mib_index *
+                                           tbl_idx,
+                                           long dot3StatsIndex_val);
+    int             dot3StatsTable_indexes_set(dot3StatsTable_rowreq_ctx *
+                                               rowreq_ctx,
+                                               long dot3StatsIndex_val);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif                          /* DOT3STATSTABLE_DATA_GET_H */
+/** @} */
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_set.c net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_set.c
--- net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_set.c	1969-12-31 19:00:00.000000000 -0500
+++ net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_set.c	2008-08-08 05:58:09.000000000 -0400
@@ -0,0 +1,28 @@
+/*
+ * 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 "dot3StatsTable.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.
+ * 
+ * @{
+ */
+/** @} */
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_set.h net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_set.h
--- net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_set.h	1969-12-31 19:00:00.000000000 -0500
+++ net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_set.h	2008-08-08 05:58:09.000000000 -0400
@@ -0,0 +1,28 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ *       version : 12077 $ of $ 
+ *
+ * $Id:$
+ */
+#ifndef DOT3STATSTABLE_DATA_SET_H
+#define DOT3STATSTABLE_DATA_SET_H
+
+#ifdef __cplusplus
+extern          "C" {
+#endif
+
+    /*
+     *********************************************************************
+     * SET function declarations
+     */
+
+    /*
+     *********************************************************************
+     * SET Table declarations
+     */
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif                          /* DOT3STATSTABLE_DATA_SET_H */
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_enums.h net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_enums.h
--- net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_enums.h	1969-12-31 19:00:00.000000000 -0500
+++ net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_enums.h	2008-08-08 05:58:09.000000000 -0400
@@ -0,0 +1,89 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ *  : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef DOT3STATSTABLE_ENUMS_H
+#define DOT3STATSTABLE_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 dot3StatsTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * dot3StatsDuplexStatus (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef DOT3STATSDUPLEXSTATUS_ENUMS
+#define DOT3STATSDUPLEXSTATUS_ENUMS
+
+#define DOT3STATSDUPLEXSTATUS_UNKNOWN  1
+#define DOT3STATSDUPLEXSTATUS_HALFDUPLEX  2
+#define DOT3STATSDUPLEXSTATUS_FULLDUPLEX  3
+
+#endif                          /* DOT3STATSDUPLEXSTATUS_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * dot3StatsRateControlAbility (TruthValue / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef TRUTHVALUE_ENUMS
+#define TRUTHVALUE_ENUMS
+
+#define TRUTHVALUE_TRUE  1
+#define TRUTHVALUE_FALSE  2
+
+#endif                          /* TRUTHVALUE_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * dot3StatsRateControlStatus (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef DOT3STATSRATECONTROLSTATUS_ENUMS
+#define DOT3STATSRATECONTROLSTATUS_ENUMS
+
+#define DOT3STATSRATECONTROLSTATUS_RATECONTROLOFF  1
+#define DOT3STATSRATECONTROLSTATUS_RATECONTROLON  2
+#define DOT3STATSRATECONTROLSTATUS_UNKNOWN  3
+
+#endif                          /* DOT3STATSRATECONTROLSTATUS_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif                          /* DOT3STATSTABLE_ENUMS_H */
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable.h net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable.h
--- net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable.h	1969-12-31 19:00:00.000000000 -0500
+++ net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable.h	2008-09-09 12:09:11.000000000 -0400
@@ -0,0 +1,271 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ *       version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef DOT3STATSTABLE_H
+#define DOT3STATSTABLE_H
+
+#ifdef __cplusplus
+extern          "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+
+    /*
+     * OID and column number definitions for dot3StatsTable 
+     */
+#include "dot3StatsTable_oids.h"
+
+    /*
+     * enum definions 
+     */
+#include "dot3StatsTable_enums.h"
+
+    /*
+     *********************************************************************
+     * function declarations
+     */
+    void            init_dot3StatsTable(void);
+    void            shutdown_dot3StatsTable(void);
+
+    /*
+     *********************************************************************
+     * Table declarations
+     */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table dot3StatsTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+    /*
+     * EtherLike-MIB::dot3StatsTable is subid 2 of dot3.
+     * Its status is Current.
+     * OID: .1.3.6.1.2.1.10.7.2, 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 dot3StatsTable registration context.
+     */
+    typedef netsnmp_data_list dot3StatsTable_registration;
+
+/**********************************************************************/
+    /*
+     * TODO:110:r: |-> Review dot3StatsTable data context structure.
+     * This structure is used to represent the data for dot3StatsTable.
+     */
+    /*
+     * This structure contains storage for all the columns defined in the
+     * dot3StatsTable.
+     */
+    typedef struct dot3StatsTable_data_s {
+
+        /*
+         * dot3StatsAlignmentErrors(2)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+         */
+        u_long          dot3StatsAlignmentErrors;
+
+        /*
+         * dot3StatsFCSErrors(3)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+         */
+        u_long          dot3StatsFCSErrors;
+
+        /*
+         * dot3StatsSingleCollisionFrames(4)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+         */
+        u_long          dot3StatsSingleCollisionFrames;
+
+        /*
+         * dot3StatsMultipleCollisionFrames(5)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+         */
+        u_long          dot3StatsMultipleCollisionFrames;
+
+        /*
+         * dot3StatsSQETestErrors(6)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+         */
+        u_long          dot3StatsSQETestErrors;
+
+        /*
+         * dot3StatsDeferredTransmissions(7)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+         */
+        u_long          dot3StatsDeferredTransmissions;
+
+        /*
+         * dot3StatsLateCollisions(8)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+         */
+        u_long          dot3StatsLateCollisions;
+
+        /*
+         * dot3StatsExcessiveCollisions(9)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+         */
+        u_long          dot3StatsExcessiveCollisions;
+
+        /*
+         * dot3StatsInternalMacTransmitErrors(10)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+         */
+        u_long          dot3StatsInternalMacTransmitErrors;
+
+        /*
+         * dot3StatsCarrierSenseErrors(11)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+         */
+        u_long          dot3StatsCarrierSenseErrors;
+
+        /*
+         * dot3StatsFrameTooLongs(13)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+         */
+        u_long          dot3StatsFrameTooLongs;
+
+        /*
+         * dot3StatsInternalMacReceiveErrors(16)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+         */
+        u_long          dot3StatsInternalMacReceiveErrors;
+
+        /*
+         * dot3StatsEtherChipSet(17)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/A/w/e/r/d/h
+         */
+        oid             dot3StatsEtherChipSet[128];
+        size_t          dot3StatsEtherChipSet_len;      /* # of oid elements, not bytes */
+
+        /*
+         * dot3StatsSymbolErrors(18)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+         */
+        u_long          dot3StatsSymbolErrors;
+
+        /*
+         * dot3StatsDuplexStatus(19)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+         */
+        u_long          dot3StatsDuplexStatus;
+
+        /*
+         * dot3StatsRateControlAbility(20)/TruthValue/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+         */
+        u_long          dot3StatsRateControlAbility;
+
+        /*
+         * dot3StatsRateControlStatus(21)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+         */
+        u_long          dot3StatsRateControlStatus;
+
+    } dot3StatsTable_data;
+
+
+    /*
+     * TODO:120:r: |-> Review dot3StatsTable mib index.
+     * This structure is used to represent the index for dot3StatsTable.
+     */
+    typedef struct dot3StatsTable_mib_index_s {
+
+        /*
+         * dot3StatsIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H
+         */
+        long            dot3StatsIndex;
+
+
+    } dot3StatsTable_mib_index;
+
+    /*
+     * TODO:121:r: |   |-> Review dot3StatsTable max index length.
+     * If you KNOW that your indexes will never exceed a certain
+     * length, update this macro to that length.
+     */
+#define MAX_dot3StatsTable_IDX_LEN     255
+
+
+    /*
+     *********************************************************************
+     * TODO:130:o: |-> Review dot3StatsTable Row request (rowreq) context.
+     * When your functions are called, you will be passed a
+     * dot3StatsTable_rowreq_ctx pointer.
+     */
+    typedef struct dot3StatsTable_rowreq_ctx_s {
+
+    /** this must be first for container compare to work */
+        netsnmp_index   oid_idx;
+        oid             oid_tmp[MAX_dot3StatsTable_IDX_LEN];
+
+        dot3StatsTable_mib_index tbl_idx;
+
+        dot3StatsTable_data data;
+        unsigned int    column_exists_flags;    /* flags for existence */
+
+        /*
+         * 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 dot3StatsTable rowreq context.
+         */
+
+        /*
+         * storage for future expansion
+         */
+        netsnmp_data_list *dot3StatsTable_data_list;
+
+    } dot3StatsTable_rowreq_ctx;
+
+    typedef struct dot3StatsTable_ref_rowreq_ctx_s {
+        dot3StatsTable_rowreq_ctx *rowreq_ctx;
+    } dot3StatsTable_ref_rowreq_ctx;
+
+    /*
+     *********************************************************************
+     * function prototypes
+     */
+    int             dot3StatsTable_pre_request(dot3StatsTable_registration
+                                               * user_context);
+    int             dot3StatsTable_post_request(dot3StatsTable_registration
+                                                * user_context, int rc);
+
+    int            
+        dot3StatsTable_rowreq_ctx_init(dot3StatsTable_rowreq_ctx *
+                                       rowreq_ctx, void *user_init_ctx);
+    void           
+        dot3StatsTable_rowreq_ctx_cleanup(dot3StatsTable_rowreq_ctx *
+                                          rowreq_ctx);
+
+
+    dot3StatsTable_rowreq_ctx
+        *dot3StatsTable_row_find_by_mib_index(dot3StatsTable_mib_index *
+                                              mib_idx);
+
+    extern oid      dot3StatsTable_oid[];
+    extern int      dot3StatsTable_oid_size;
+
+
+#include "dot3StatsTable_interface.h"
+#include "dot3StatsTable_data_access.h"
+#include "dot3StatsTable_data_get.h"
+#include "dot3StatsTable_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                          /* DOT3STATSTABLE_H */
+/** @} */
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_interface.c net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_interface.c
--- net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_interface.c	1969-12-31 19:00:00.000000000 -0500
+++ net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_interface.c	2008-09-12 14:18:46.000000000 -0400
@@ -0,0 +1,1188 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ *       version : 15899 $ of $ 
+ *
+ * $Id:$
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * ***                                                               ***
+ * ***  NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE  ***
+ * ***                                                               ***
+ * ***                                                               ***
+ * ***       THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE.      ***
+ * ***                                                               ***
+ * ***                                                               ***
+ * ***       THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND      ***
+ * ***                                                               ***
+ * ***                                                               ***
+ * ***    IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES.   ***
+ * ***                                                               ***
+ * ***                                                               ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/*
+ * standard Net-SNMP includes 
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header 
+ */
+#include "dot3StatsTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "dot3StatsTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table dot3StatsTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * EtherLike-MIB::dot3StatsTable is subid 2 of dot3.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.10.7.2, length: 9
+ */
+typedef struct dot3StatsTable_interface_ctx_s {
+
+    netsnmp_container *container;
+    netsnmp_cache  *cache;
+
+    dot3StatsTable_registration *user_ctx;
+
+    netsnmp_table_registration_info tbl_info;
+
+    netsnmp_baby_steps_access_methods access_multiplexer;
+
+} dot3StatsTable_interface_ctx;
+
+static dot3StatsTable_interface_ctx dot3StatsTable_if_ctx;
+
+static void     _dot3StatsTable_container_init(dot3StatsTable_interface_ctx
+                                               * if_ctx);
+static void    
+_dot3StatsTable_container_shutdown(dot3StatsTable_interface_ctx * if_ctx);
+
+
+netsnmp_container *
+dot3StatsTable_container_get(void)
+{
+    return dot3StatsTable_if_ctx.container;
+}
+
+dot3StatsTable_registration *
+dot3StatsTable_registration_get(void)
+{
+    return dot3StatsTable_if_ctx.user_ctx;
+}
+
+dot3StatsTable_registration *
+dot3StatsTable_registration_set(dot3StatsTable_registration * newreg)
+{
+    dot3StatsTable_registration *old = dot3StatsTable_if_ctx.user_ctx;
+    dot3StatsTable_if_ctx.user_ctx = newreg;
+    return old;
+}
+
+int
+dot3StatsTable_container_size(void)
+{
+    return CONTAINER_SIZE(dot3StatsTable_if_ctx.container);
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_dot3StatsTable_pre_request;
+static Netsnmp_Node_Handler _mfd_dot3StatsTable_post_request;
+static Netsnmp_Node_Handler _mfd_dot3StatsTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_dot3StatsTable_get_values;
+/**
+ * @internal
+ * Initialize the table dot3StatsTable 
+ *    (Define its contents and how it's structured)
+ */
+void
+_dot3StatsTable_initialize_interface(dot3StatsTable_registration * reg_ptr,
+                                     u_long flags)
+{
+    netsnmp_baby_steps_access_methods *access_multiplexer =
+        &dot3StatsTable_if_ctx.access_multiplexer;
+    netsnmp_table_registration_info *tbl_info =
+        &dot3StatsTable_if_ctx.tbl_info;
+    netsnmp_handler_registration *reginfo;
+    netsnmp_mib_handler *handler;
+    int             mfd_modes = 0;
+
+    DEBUGMSGTL(("internal:dot3StatsTable:_dot3StatsTable_initialize_interface", "called\n"));
+
+
+    /*************************************************
+     *
+     * save interface context for dot3StatsTable
+     */
+    /*
+     * Setting up the table's definition
+     */
+    netsnmp_table_helper_add_indexes(tbl_info, ASN_INTEGER,
+                                               /** index: dot3StatsIndex */
+                                     0);
+
+    /*
+     * Define the minimum and maximum accessible columns.  This
+     * optimizes retrival. 
+     */
+    tbl_info->min_column = DOT3STATSTABLE_MIN_COL;
+    tbl_info->max_column = DOT3STATSTABLE_MAX_COL;
+
+    /*
+     * save users context
+     */
+    dot3StatsTable_if_ctx.user_ctx = reg_ptr;
+
+    /*
+     * call data access initialization code
+     */
+    dot3StatsTable_init_data(reg_ptr);
+
+    /*
+     * set up the container
+     */
+    _dot3StatsTable_container_init(&dot3StatsTable_if_ctx);
+    if (NULL == dot3StatsTable_if_ctx.container) {
+        snmp_log(LOG_ERR,
+                 "could not initialize container for dot3StatsTable\n");
+        return;
+    }
+
+    /*
+     * access_multiplexer: REQUIRED wrapper for get request handling
+     */
+    access_multiplexer->object_lookup = _mfd_dot3StatsTable_object_lookup;
+    access_multiplexer->get_values = _mfd_dot3StatsTable_get_values;
+
+    /*
+     * no wrappers yet
+     */
+    access_multiplexer->pre_request = _mfd_dot3StatsTable_pre_request;
+    access_multiplexer->post_request = _mfd_dot3StatsTable_post_request;
+
+
+    /*************************************************
+     *
+     * Create a registration, save our reg data, register table.
+     */
+    DEBUGMSGTL(("dot3StatsTable:init_dot3StatsTable",
+                "Registering dot3StatsTable as a mibs-for-dummies table.\n"));
+    handler =
+        netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+    reginfo =
+        netsnmp_handler_registration_create("dot3StatsTable", handler,
+                                            dot3StatsTable_oid,
+                                            dot3StatsTable_oid_size,
+                                            HANDLER_CAN_BABY_STEP |
+                                            HANDLER_CAN_RONLY);
+    if (NULL == reginfo) {
+        snmp_log(LOG_ERR, "error registering table dot3StatsTable\n");
+        return;
+    }
+    reginfo->my_reg_void = &dot3StatsTable_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,
+                                            dot3StatsTable_if_ctx.
+                                            container,
+                                            TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+    netsnmp_inject_handler(reginfo, handler);
+
+    /*************************************************
+     *
+     * inject cache helper
+     */
+    if (NULL != dot3StatsTable_if_ctx.cache) {
+        handler = netsnmp_cache_handler_get(dot3StatsTable_if_ctx.cache);
+        netsnmp_inject_handler(reginfo, handler);
+    }
+
+    /*
+     * register table
+     */
+    netsnmp_register_table(reginfo, tbl_info);
+
+}                               /* _dot3StatsTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table dot3StatsTable
+ */
+void
+_dot3StatsTable_shutdown_interface(dot3StatsTable_registration * reg_ptr)
+{
+    /*
+     * shutdown the container
+     */
+    _dot3StatsTable_container_shutdown(&dot3StatsTable_if_ctx);
+}
+
+void
+dot3StatsTable_valid_columns_set(netsnmp_column_info *vc)
+{
+    dot3StatsTable_if_ctx.tbl_info.valid_columns = vc;
+}                               /* dot3StatsTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+dot3StatsTable_index_to_oid(netsnmp_index * oid_idx,
+                            dot3StatsTable_mib_index * mib_idx)
+{
+    int             err = SNMP_ERR_NOERROR;
+
+    /*
+     * temp storage for parsing indexes
+     */
+    /*
+     * dot3StatsIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H
+     */
+    netsnmp_variable_list var_dot3StatsIndex;
+
+    /*
+     * set up varbinds
+     */
+    memset(&var_dot3StatsIndex, 0x00, sizeof(var_dot3StatsIndex));
+    var_dot3StatsIndex.type = ASN_INTEGER;
+
+    /*
+     * chain temp index varbinds together
+     */
+    var_dot3StatsIndex.next_variable = NULL;
+
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsTable_index_to_oid",
+                "called\n"));
+
+    /*
+     * dot3StatsIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H 
+     */
+    snmp_set_var_value(&var_dot3StatsIndex,
+                       (u_char *) & mib_idx->dot3StatsIndex,
+                       sizeof(mib_idx->dot3StatsIndex));
+
+
+    err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+                            NULL, 0, &var_dot3StatsIndex);
+    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_dot3StatsIndex);
+
+    return err;
+}                               /* dot3StatsTable_index_to_oid */
+
+/**
+ * extract dot3StatsTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR  : no error
+ * @retval SNMP_ERR_GENERR   : error
+ */
+int
+dot3StatsTable_index_from_oid(netsnmp_index * oid_idx,
+                              dot3StatsTable_mib_index * mib_idx)
+{
+    int             err = SNMP_ERR_NOERROR;
+
+    /*
+     * temp storage for parsing indexes
+     */
+    /*
+     * dot3StatsIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H
+     */
+    netsnmp_variable_list var_dot3StatsIndex;
+
+    /*
+     * set up varbinds
+     */
+    memset(&var_dot3StatsIndex, 0x00, sizeof(var_dot3StatsIndex));
+    var_dot3StatsIndex.type = ASN_INTEGER;
+
+    /*
+     * chain temp index varbinds together
+     */
+    var_dot3StatsIndex.next_variable = NULL;
+
+
+    DEBUGMSGTL(("verbose:dot3StatsTable:dot3StatsTable_index_from_oid",
+                "called\n"));
+
+    /*
+     * parse the oid into the individual index components
+     */
+    err = parse_oid_indexes(oid_idx->oids, oid_idx->len,
+                            &var_dot3StatsIndex);
+    if (err == SNMP_ERR_NOERROR) {
+        /*
+         * copy out values
+         */
+        mib_idx->dot3StatsIndex =
+            *((long *) var_dot3StatsIndex.val.string);
+
+
+    }
+
+    /*
+     * parsing may have allocated memory. free it.
+     */
+    snmp_reset_var_buffers(&var_dot3StatsIndex);
+
+    return err;
+}                               /* dot3StatsTable_index_from_oid */
+
+
+/*
+ *********************************************************************
+ * @internal
+ * allocate resources for a dot3StatsTable_rowreq_ctx
+ */
+dot3StatsTable_rowreq_ctx *
+dot3StatsTable_allocate_rowreq_ctx(void *user_init_ctx)
+{
+    dot3StatsTable_rowreq_ctx *rowreq_ctx =
+        SNMP_MALLOC_TYPEDEF(dot3StatsTable_rowreq_ctx);
+
+    DEBUGMSGTL(("internal:dot3StatsTable:dot3StatsTable_allocate_rowreq_ctx", "called\n"));
+
+    if (NULL == rowreq_ctx) {
+        snmp_log(LOG_ERR, "Couldn't allocate memory for a "
+                 "dot3StatsTable_rowreq_ctx.\n");
+        return NULL;
+    }
+
+    rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+    rowreq_ctx->dot3StatsTable_data_list = NULL;
+
+    /*
+     * if we allocated data, call init routine
+     */
+    if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+        if (SNMPERR_SUCCESS !=
+            dot3StatsTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+            dot3StatsTable_release_rowreq_ctx(rowreq_ctx);
+            rowreq_ctx = NULL;
+        }
+    }
+
+    return rowreq_ctx;
+}                               /* dot3StatsTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a dot3StatsTable_rowreq_ctx
+ */
+void
+dot3StatsTable_release_rowreq_ctx(dot3StatsTable_rowreq_ctx * rowreq_ctx)
+{
+    DEBUGMSGTL(("internal:dot3StatsTable:dot3StatsTable_release_rowreq_ctx", "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    dot3StatsTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+    /*
+     * free index oid pointer
+     */
+    if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+        free(rowreq_ctx->oid_idx.oids);
+
+    SNMP_FREE(rowreq_ctx);
+}                               /* dot3StatsTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_dot3StatsTable_pre_request(netsnmp_mib_handler *handler,
+                                netsnmp_handler_registration *reginfo,
+                                netsnmp_agent_request_info *agtreq_info,
+                                netsnmp_request_info *requests)
+{
+    int             rc;
+
+    DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_pre_request",
+                "called\n"));
+
+    if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+        DEBUGMSGTL(("internal:dot3StatsTable",
+                    "skipping additional pre_request\n"));
+        return SNMP_ERR_NOERROR;
+    }
+
+    rc = dot3StatsTable_pre_request(dot3StatsTable_if_ctx.user_ctx);
+    if (MFD_SUCCESS != rc) {
+        /*
+         * nothing we can do about it but log it
+         */
+        DEBUGMSGTL(("dot3StatsTable", "error %d from "
+                    "dot3StatsTable_pre_request\n", rc));
+        netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+    }
+
+    return SNMP_ERR_NOERROR;
+}                               /* _mfd_dot3StatsTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_dot3StatsTable_post_request(netsnmp_mib_handler *handler,
+                                 netsnmp_handler_registration *reginfo,
+                                 netsnmp_agent_request_info *agtreq_info,
+                                 netsnmp_request_info *requests)
+{
+    dot3StatsTable_rowreq_ctx *rowreq_ctx =
+        netsnmp_container_table_row_extract(requests);
+    int             rc, packet_rc;
+
+    DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_post_request",
+                "called\n"));
+
+    /*
+     * release row context, if deleted
+     */
+    if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+        dot3StatsTable_release_rowreq_ctx(rowreq_ctx);
+
+    /*
+     * wait for last call before calling user
+     */
+    if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+        DEBUGMSGTL(("internal:dot3StatsTable",
+                    "waiting for last post_request\n"));
+        return SNMP_ERR_NOERROR;
+    }
+
+    packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+    rc = dot3StatsTable_post_request(dot3StatsTable_if_ctx.user_ctx,
+                                     packet_rc);
+    if (MFD_SUCCESS != rc) {
+        /*
+         * nothing we can do about it but log it
+         */
+        DEBUGMSGTL(("dot3StatsTable", "error %d from "
+                    "dot3StatsTable_post_request\n", rc));
+    }
+
+    return SNMP_ERR_NOERROR;
+}                               /* _mfd_dot3StatsTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_dot3StatsTable_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;
+    dot3StatsTable_rowreq_ctx *rowreq_ctx =
+        netsnmp_container_table_row_extract(requests);
+
+    DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_object_lookup", "called\n"));
+
+    /*
+     * get our context from mfd
+     * dot3StatsTable_interface_ctx *if_ctx =
+     *             (dot3StatsTable_interface_ctx *)reginfo->my_reg_void;
+     */
+
+    if (NULL == rowreq_ctx) {
+        rc = SNMP_ERR_NOCREATION;
+    }
+
+    if (MFD_SUCCESS != rc)
+        netsnmp_request_set_error_all(requests, rc);
+    else
+        dot3StatsTable_row_prep(rowreq_ctx);
+
+    return SNMP_VALIDATE_ERR(rc);
+}                               /* _mfd_dot3StatsTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_dot3StatsTable_get_column(dot3StatsTable_rowreq_ctx * rowreq_ctx,
+                           netsnmp_variable_list * var, int column)
+{
+    int             rc = SNMPERR_SUCCESS;
+
+    DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_get_column",
+                "called for %d\n", column));
+
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    switch (column) {
+
+        /*
+         * (INDEX) dot3StatsIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H 
+         */
+    case COLUMN_DOT3STATSINDEX:
+        var->type = ASN_INTEGER;
+        var->val_len = sizeof(long);
+        (*var->val.integer) = rowreq_ctx->tbl_idx.dot3StatsIndex;
+        break;
+
+        /*
+         * dot3StatsAlignmentErrors(2)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h 
+         */
+    case COLUMN_DOT3STATSALIGNMENTERRORS:
+        if (!
+            (COLUMN_DOT3STATSALIGNMENTERRORS_FLAG & rowreq_ctx->
+             column_exists_flags)) {
+            snmp_log (LOG_ERR, "internal:dot3StatsTable:_mfd_dot3StatsTable_get_column, column %d (dot3StatsAlignmentErrors) doesn't exist for interface with index %ld\n", column, rowreq_ctx->tbl_idx.dot3StatsIndex);
+            DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_get_column", "column %d (dot3StatsAlignmentErrors) doesn't exist\n", column));
+            return MFD_SKIP;
+        }
+
+        var->val_len = sizeof(u_long);
+        var->type = ASN_COUNTER;
+        rc = dot3StatsAlignmentErrors_get(rowreq_ctx,
+                                          (u_long *) var->val.string);
+        break;
+
+        /*
+         * dot3StatsFCSErrors(3)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h 
+         */
+    case COLUMN_DOT3STATSFCSERRORS:
+        if (!
+            (COLUMN_DOT3STATSFCSERRORS_FLAG & rowreq_ctx->
+             column_exists_flags)) {
+            DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_get_column", "column %d (dot3StatsFCSErrors) doesn't exist\n", column));
+            return MFD_SKIP;
+        }
+
+        var->val_len = sizeof(u_long);
+        var->type = ASN_COUNTER;
+        rc = dot3StatsFCSErrors_get(rowreq_ctx,
+                                    (u_long *) var->val.string);
+        break;
+
+        /*
+         * dot3StatsSingleCollisionFrames(4)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h 
+         */
+    case COLUMN_DOT3STATSSINGLECOLLISIONFRAMES:
+        if (!
+            (COLUMN_DOT3STATSSINGLECOLLISIONFRAMES_FLAG & rowreq_ctx->
+             column_exists_flags)) {
+            snmp_log (LOG_ERR, "internal:dot3StatsTable:_mfd_dot3StatsTable_get_column, column %d (dot3StatsSingleCollisionFrames) doesn't exist for the interface with index %ld\n", column, rowreq_ctx->tbl_idx.dot3StatsIndex);
+            DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_get_column", "column %d (dot3StatsSingleCollisionFrames) doesn't exist\n", column));
+            return MFD_SKIP;
+        }
+
+        var->val_len = sizeof(u_long);
+        var->type = ASN_COUNTER;
+        rc = dot3StatsSingleCollisionFrames_get(rowreq_ctx,
+                                                (u_long *) var->val.
+                                                string);
+        break;
+
+        /*
+         * dot3StatsMultipleCollisionFrames(5)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h 
+         */
+    case COLUMN_DOT3STATSMULTIPLECOLLISIONFRAMES:
+        if (!
+            (COLUMN_DOT3STATSMULTIPLECOLLISIONFRAMES_FLAG & rowreq_ctx->
+             column_exists_flags)) {
+            snmp_log (LOG_ERR, "internal:dot3StatsTable:_mfd_dot3StatsTable_get_column, column %d (dot3StatsMultipleCollisionFrames) doesn't exist for the interface with index %ld\n", column, rowreq_ctx->tbl_idx.dot3StatsIndex);
+            DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_get_column", "column %d (dot3StatsMultipleCollisionFrames) doesn't exist\n", column));
+            return MFD_SKIP;
+        }
+
+        var->val_len = sizeof(u_long);
+        var->type = ASN_COUNTER;
+        rc = dot3StatsMultipleCollisionFrames_get(rowreq_ctx,
+                                                  (u_long *) var->val.
+                                                  string);
+        break;
+
+        /*
+         * dot3StatsSQETestErrors(6)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h 
+         */
+    case COLUMN_DOT3STATSSQETESTERRORS:
+        if (!
+            (COLUMN_DOT3STATSSQETESTERRORS_FLAG & rowreq_ctx->
+             column_exists_flags)) {
+            DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_get_column", "column %d (dot3StatsSQETestErrors) doesn't exist\n", column));
+            return MFD_SKIP;
+        }
+
+        var->val_len = sizeof(u_long);
+        var->type = ASN_COUNTER;
+        rc = dot3StatsSQETestErrors_get(rowreq_ctx,
+                                        (u_long *) var->val.string);
+        break;
+
+        /*
+         * dot3StatsDeferredTransmissions(7)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h 
+         */
+    case COLUMN_DOT3STATSDEFERREDTRANSMISSIONS:
+        if (!
+            (COLUMN_DOT3STATSDEFERREDTRANSMISSIONS_FLAG & rowreq_ctx->
+             column_exists_flags)) {
+            DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_get_column", "column %d (dot3StatsDeferredTransmissions) doesn't exist\n", column));
+            return MFD_SKIP;
+        }
+
+        var->val_len = sizeof(u_long);
+        var->type = ASN_COUNTER;
+        rc = dot3StatsDeferredTransmissions_get(rowreq_ctx,
+                                                (u_long *) var->val.
+                                                string);
+        break;
+
+        /*
+         * dot3StatsLateCollisions(8)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h 
+         */
+    case COLUMN_DOT3STATSLATECOLLISIONS:
+        if (!
+            (COLUMN_DOT3STATSLATECOLLISIONS_FLAG & rowreq_ctx->
+             column_exists_flags)) {
+            snmp_log (LOG_ERR, "internal:dot3StatsTable:_mfd_dot3StatsTable_get_column, column %d (dot3StatsLateCollisions) doesn't exist for the interface with index %ld\n", column, rowreq_ctx->tbl_idx.dot3StatsIndex);
+            DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_get_column", "column %d (dot3StatsLateCollisions) doesn't exist\n", column));
+            return MFD_SKIP;
+        }
+
+        var->val_len = sizeof(u_long);
+        var->type = ASN_COUNTER;
+        rc = dot3StatsLateCollisions_get(rowreq_ctx,
+                                         (u_long *) var->val.string);
+        break;
+
+        /*
+         * dot3StatsExcessiveCollisions(9)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h 
+         */
+    case COLUMN_DOT3STATSEXCESSIVECOLLISIONS:
+        if (!
+            (COLUMN_DOT3STATSEXCESSIVECOLLISIONS_FLAG & rowreq_ctx->
+             column_exists_flags)) {
+            snmp_log (LOG_ERR, "internal:dot3StatsTable:_mfd_dot3StatsTable_get_column, column %d (dot3StatsExcessiveCollisions) doesn't exist for the interface with index %ld\n", column, rowreq_ctx->tbl_idx.dot3StatsIndex); 
+            DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_get_column", "column %d (dot3StatsExcessiveCollisions) doesn't exist\n", column));
+            return MFD_SKIP;
+        }
+
+        var->val_len = sizeof(u_long);
+        var->type = ASN_COUNTER;
+        rc = dot3StatsExcessiveCollisions_get(rowreq_ctx,
+                                              (u_long *) var->val.string);
+        break;
+
+        /*
+         * dot3StatsInternalMacTransmitErrors(10)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h 
+         */
+    case COLUMN_DOT3STATSINTERNALMACTRANSMITERRORS:
+        if (!
+            (COLUMN_DOT3STATSINTERNALMACTRANSMITERRORS_FLAG & rowreq_ctx->
+             column_exists_flags)) {
+            DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_get_column", "column %d (dot3StatsInternalMacTransmitErrors) doesn't exist\n", column));
+            return MFD_SKIP;
+        }
+
+        var->val_len = sizeof(u_long);
+        var->type = ASN_COUNTER;
+        rc = dot3StatsInternalMacTransmitErrors_get(rowreq_ctx,
+                                                    (u_long *) var->val.
+                                                    string);
+        break;
+
+        /*
+         * dot3StatsCarrierSenseErrors(11)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h 
+         */
+    case COLUMN_DOT3STATSCARRIERSENSEERRORS:
+        if (!
+            (COLUMN_DOT3STATSCARRIERSENSEERRORS_FLAG & rowreq_ctx->
+             column_exists_flags)) {
+            DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_get_column", "column %d (dot3StatsCarrierSenseErrors) doesn't exist\n", column));
+            return MFD_SKIP;
+        }
+
+        var->val_len = sizeof(u_long);
+        var->type = ASN_COUNTER;
+        rc = dot3StatsCarrierSenseErrors_get(rowreq_ctx,
+                                             (u_long *) var->val.string);
+        break;
+
+        /*
+         * dot3StatsFrameTooLongs(13)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h 
+         */
+    case COLUMN_DOT3STATSFRAMETOOLONGS:
+        if (!
+            (COLUMN_DOT3STATSFRAMETOOLONGS_FLAG & rowreq_ctx->
+             column_exists_flags)) {
+            DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_get_column", "column %d (dot3StatsFrameTooLongs) doesn't exist\n", column));
+            return MFD_SKIP;
+        }
+
+        var->val_len = sizeof(u_long);
+        var->type = ASN_COUNTER;
+        rc = dot3StatsFrameTooLongs_get(rowreq_ctx,
+                                        (u_long *) var->val.string);
+        break;
+
+        /*
+         * dot3StatsInternalMacReceiveErrors(16)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h 
+         */
+    case COLUMN_DOT3STATSINTERNALMACRECEIVEERRORS:
+        if (!
+            (COLUMN_DOT3STATSINTERNALMACRECEIVEERRORS_FLAG & rowreq_ctx->
+             column_exists_flags)) {
+            DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_get_column", "column %d (dot3StatsInternalMacReceiveErrors) doesn't exist\n", column));
+            return MFD_SKIP;
+        }
+
+        var->val_len = sizeof(u_long);
+        var->type = ASN_COUNTER;
+        rc = dot3StatsInternalMacReceiveErrors_get(rowreq_ctx,
+                                                   (u_long *) var->val.
+                                                   string);
+        break;
+
+        /*
+         * dot3StatsEtherChipSet(17)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/A/w/e/r/d/h 
+         */
+    case COLUMN_DOT3STATSETHERCHIPSET:
+        if (!
+            (COLUMN_DOT3STATSETHERCHIPSET_FLAG & rowreq_ctx->
+             column_exists_flags)) {
+            DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_get_column", "column %d (dot3StatsEtherChipSet) doesn't exist\n", column));
+            return MFD_SKIP;
+        }
+
+        var->type = ASN_OBJECT_ID;
+        rc = dot3StatsEtherChipSet_get(rowreq_ctx,
+                                       (oid **) & var->val.string,
+                                       &var->val_len);
+        break;
+
+        /*
+         * dot3StatsSymbolErrors(18)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h 
+         */
+    case COLUMN_DOT3STATSSYMBOLERRORS:
+        if (!
+            (COLUMN_DOT3STATSSYMBOLERRORS_FLAG & rowreq_ctx->
+             column_exists_flags)) {
+            DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_get_column", "column %d (dot3StatsSymbolErrors) doesn't exist\n", column));
+            return MFD_SKIP;
+        }
+
+        var->val_len = sizeof(u_long);
+        var->type = ASN_COUNTER;
+        rc = dot3StatsSymbolErrors_get(rowreq_ctx,
+                                       (u_long *) var->val.string);
+        break;
+
+        /*
+         * dot3StatsDuplexStatus(19)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h 
+         */
+    case COLUMN_DOT3STATSDUPLEXSTATUS:
+        if (!
+            (COLUMN_DOT3STATSDUPLEXSTATUS_FLAG & rowreq_ctx->
+             column_exists_flags)) {
+            snmp_log (LOG_ERR, "internal:dot3StatsTable:_mfd_dot3StatsTable_get_column, column %d (dot3StatsDuplexStatus) doesn't exist for the interface with index %ld\n", column, rowreq_ctx->tbl_idx.dot3StatsIndex);
+            DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_get_column", "column %d (dot3StatsDuplexStatus) doesn't exist\n", column));
+            return MFD_SKIP;
+        }
+
+        var->val_len = sizeof(u_long);
+        var->type = ASN_INTEGER;
+        rc = dot3StatsDuplexStatus_get(rowreq_ctx,
+                                       (u_long *) var->val.string);
+        break;
+
+        /*
+         * dot3StatsRateControlAbility(20)/TruthValue/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h 
+         */
+    case COLUMN_DOT3STATSRATECONTROLABILITY:
+        if (!
+            (COLUMN_DOT3STATSRATECONTROLABILITY_FLAG & rowreq_ctx->
+             column_exists_flags)) {
+            DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_get_column", "column %d (dot3StatsRateControlAbility) doesn't exist\n", column));
+            return MFD_SKIP;
+        }
+
+        var->val_len = sizeof(u_long);
+        var->type = ASN_INTEGER;
+        rc = dot3StatsRateControlAbility_get(rowreq_ctx,
+                                             (u_long *) var->val.string);
+        break;
+
+        /*
+         * dot3StatsRateControlStatus(21)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h 
+         */
+    case COLUMN_DOT3STATSRATECONTROLSTATUS:
+        if (!
+            (COLUMN_DOT3STATSRATECONTROLSTATUS_FLAG & rowreq_ctx->
+             column_exists_flags)) {
+            DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_get_column", "column %d (dot3StatsRateControlStatus) doesn't exist\n", column));
+            return MFD_SKIP;
+        }
+
+        var->val_len = sizeof(u_long);
+        var->type = ASN_INTEGER;
+        rc = dot3StatsRateControlStatus_get(rowreq_ctx,
+                                            (u_long *) var->val.string);
+        break;
+
+    default:
+        if (DOT3STATSTABLE_MIN_COL <= column
+            && column <= DOT3STATSTABLE_MAX_COL) {
+            DEBUGMSGTL(("internal:dot3StatsTable:_mfd_dot3StatsTable_get_column", "assume column %d is reserved\n", column));
+            rc = MFD_SKIP;
+        } else {
+            snmp_log(LOG_ERR,
+                     "unknown column %d in _dot3StatsTable_get_column\n",
+                     column);
+        }
+        break;
+    }
+
+    return rc;
+}                               /* _dot3StatsTable_get_column */
+
+int
+_mfd_dot3StatsTable_get_values(netsnmp_mib_handler *handler,
+                               netsnmp_handler_registration *reginfo,
+                               netsnmp_agent_request_info *agtreq_info,
+                               netsnmp_request_info *requests)
+{
+    dot3StatsTable_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:dot3StatsTable:_mfd_dot3StatsTable_get_values",
+                "called\n"));
+
+    netsnmp_assert(NULL != rowreq_ctx);
+
+    DEBUGMSGTL(("9:dot3StatsTable:_mfd_dot3StatsTable_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 = _dot3StatsTable_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_dot3StatsTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*
+ * SET PROCESSING NOT APPLICABLE (per MIB or user setting)
+ */
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void     _container_free(netsnmp_container * container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache * cache, void *vmagic)
+{
+    DEBUGMSGTL(("internal:dot3StatsTable:_cache_load", "called\n"));
+
+    if ((NULL == cache) || (NULL == cache->magic)) {
+        snmp_log(LOG_ERR, "invalid cache for dot3StatsTable_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 dot3StatsTable_container_load((netsnmp_container *) cache->
+                                         magic);
+}                               /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache * cache, void *magic)
+{
+    netsnmp_container *container;
+
+    DEBUGMSGTL(("internal:dot3StatsTable:_cache_free", "called\n"));
+
+    if ((NULL == cache) || (NULL == cache->magic)) {
+        snmp_log(LOG_ERR, "invalid cache in dot3StatsTable_cache_free\n");
+        return;
+    }
+
+    container = (netsnmp_container *) cache->magic;
+
+    _container_free(container);
+}                               /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(dot3StatsTable_rowreq_ctx * rowreq_ctx, void *context)
+{
+    DEBUGMSGTL(("internal:dot3StatsTable:_container_item_free",
+                "called\n"));
+
+    if (NULL == rowreq_ctx)
+        return;
+
+    dot3StatsTable_release_rowreq_ctx(rowreq_ctx);
+}                               /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container * container)
+{
+    DEBUGMSGTL(("internal:dot3StatsTable:_container_free", "called\n"));
+
+    if (NULL == container) {
+        snmp_log(LOG_ERR,
+                 "invalid container in dot3StatsTable_container_free\n");
+        return;
+    }
+
+    /*
+     * call user code
+     */
+    dot3StatsTable_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
+_dot3StatsTable_container_init(dot3StatsTable_interface_ctx * if_ctx)
+{
+    DEBUGMSGTL(("internal:dot3StatsTable:_dot3StatsTable_container_init",
+                "called\n"));
+
+    /*
+     * cache init
+     */
+    if_ctx->cache = netsnmp_cache_create(30,    /* timeout in seconds */
+                                         _cache_load, _cache_free,
+                                         dot3StatsTable_oid,
+                                         dot3StatsTable_oid_size);
+
+    if (NULL == if_ctx->cache) {
+        snmp_log(LOG_ERR, "error creating cache for dot3StatsTable\n");
+        return;
+    }
+
+    if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+    dot3StatsTable_container_init(&if_ctx->container, if_ctx->cache);
+    if (NULL == if_ctx->container)
+        if_ctx->container =
+            netsnmp_container_find("dot3StatsTable:table_container");
+    if (NULL == if_ctx->container) {
+        snmp_log(LOG_ERR, "error creating container in "
+                 "dot3StatsTable_container_init\n");
+        return;
+    }
+
+    if (NULL != if_ctx->cache)
+        if_ctx->cache->magic = (void *) if_ctx->container;
+}                               /* _dot3StatsTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_dot3StatsTable_container_shutdown(dot3StatsTable_interface_ctx * if_ctx)
+{
+    DEBUGMSGTL(("internal:dot3StatsTable:_dot3StatsTable_container_shutdown", "called\n"));
+
+    dot3StatsTable_container_shutdown(if_ctx->container);
+
+    _container_free(if_ctx->container);
+
+}                               /* _dot3StatsTable_container_shutdown */
+
+
+dot3StatsTable_rowreq_ctx *
+dot3StatsTable_row_find_by_mib_index(dot3StatsTable_mib_index * mib_idx)
+{
+    dot3StatsTable_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 = dot3StatsTable_index_to_oid(&oid_idx, mib_idx);
+    if (MFD_SUCCESS != rc)
+        return NULL;
+
+    rowreq_ctx = CONTAINER_FIND(dot3StatsTable_if_ctx.container, &oid_idx);
+
+    return rowreq_ctx;
+}
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_interface.h net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_interface.h
--- net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_interface.h	1969-12-31 19:00:00.000000000 -0500
+++ net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_interface.h	2008-08-08 05:58:09.000000000 -0400
@@ -0,0 +1,94 @@
+/*
+ * 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 DOT3STATSTABLE_INTERFACE_H
+#define DOT3STATSTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern          "C" {
+#endif
+
+
+#include "dot3StatsTable.h"
+
+
+    /*
+     ********************************************************************
+     * Table declarations
+     */
+
+    /*
+     * PUBLIC interface initialization routine 
+     */
+    void           
+        _dot3StatsTable_initialize_interface(dot3StatsTable_registration *
+                                             user_ctx, u_long flags);
+    void           
+        _dot3StatsTable_shutdown_interface(dot3StatsTable_registration *
+                                           user_ctx);
+
+    dot3StatsTable_registration *dot3StatsTable_registration_get(void);
+
+    dot3StatsTable_registration
+        *dot3StatsTable_registration_set(dot3StatsTable_registration *
+                                         newreg);
+
+    netsnmp_container *dot3StatsTable_container_get(void);
+    int             dot3StatsTable_container_size(void);
+
+    dot3StatsTable_rowreq_ctx *dot3StatsTable_allocate_rowreq_ctx(void *);
+    void           
+        dot3StatsTable_release_rowreq_ctx(dot3StatsTable_rowreq_ctx *
+                                          rowreq_ctx);
+
+    int             dot3StatsTable_index_to_oid(netsnmp_index * oid_idx,
+                                                dot3StatsTable_mib_index *
+                                                mib_idx);
+    int             dot3StatsTable_index_from_oid(netsnmp_index * oid_idx,
+                                                  dot3StatsTable_mib_index
+                                                  * mib_idx);
+
+    /*
+     * access to certain internals. use with caution!
+     */
+    void            dot3StatsTable_valid_columns_set(netsnmp_column_info
+                                                     *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif                          /* DOT3STATSTABLE_INTERFACE_H */
+/** @} */
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_oids.h net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_oids.h
--- net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_oids.h	1969-12-31 19:00:00.000000000 -0500
+++ net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_oids.h	2008-08-23 11:43:41.000000000 -0400
@@ -0,0 +1,82 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ *  : generic-table-oids.m2c 12855 2005-09-27 15:56:08Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef DOT3STATSTABLE_OIDS_H
+#define DOT3STATSTABLE_OIDS_H
+
+#ifdef __cplusplus
+extern          "C" {
+#endif
+
+
+    /*
+     * column number definitions for table dot3StatsTable 
+     */
+#define DOT3STATSTABLE_OID              1,3,6,1,2,1,10,7,2
+
+#define COLUMN_DOT3STATSINDEX         1
+#define COLUMN_DOT3STATSINDEX_FLAG    (0x1 << 0)
+
+#define COLUMN_DOT3STATSALIGNMENTERRORS         2
+#define COLUMN_DOT3STATSALIGNMENTERRORS_FLAG    (0x1 << 1)
+
+#define COLUMN_DOT3STATSFCSERRORS         3
+#define COLUMN_DOT3STATSFCSERRORS_FLAG    (0x1 << 2)
+
+#define COLUMN_DOT3STATSSINGLECOLLISIONFRAMES         4
+#define COLUMN_DOT3STATSSINGLECOLLISIONFRAMES_FLAG    (0x1 << 3)
+
+#define COLUMN_DOT3STATSMULTIPLECOLLISIONFRAMES         5
+#define COLUMN_DOT3STATSMULTIPLECOLLISIONFRAMES_FLAG    (0x1 << 4)
+
+#define COLUMN_DOT3STATSSQETESTERRORS         6
+#define COLUMN_DOT3STATSSQETESTERRORS_FLAG    (0x1 << 5)
+
+#define COLUMN_DOT3STATSDEFERREDTRANSMISSIONS         7
+#define COLUMN_DOT3STATSDEFERREDTRANSMISSIONS_FLAG    (0x1 << 6)
+
+#define COLUMN_DOT3STATSLATECOLLISIONS         8
+#define COLUMN_DOT3STATSLATECOLLISIONS_FLAG    (0x1 << 7)
+
+#define COLUMN_DOT3STATSEXCESSIVECOLLISIONS         9
+#define COLUMN_DOT3STATSEXCESSIVECOLLISIONS_FLAG    (0x1 << 8)
+
+#define COLUMN_DOT3STATSINTERNALMACTRANSMITERRORS         10
+#define COLUMN_DOT3STATSINTERNALMACTRANSMITERRORS_FLAG    (0x1 << 9)
+
+#define COLUMN_DOT3STATSCARRIERSENSEERRORS         11
+#define COLUMN_DOT3STATSCARRIERSENSEERRORS_FLAG    (0x1 << 10)
+
+#define COLUMN_DOT3STATSFRAMETOOLONGS         13
+#define COLUMN_DOT3STATSFRAMETOOLONGS_FLAG    (0x1 << 12)
+
+#define COLUMN_DOT3STATSINTERNALMACRECEIVEERRORS         16
+#define COLUMN_DOT3STATSINTERNALMACRECEIVEERRORS_FLAG    (0x1 << 15)
+
+#define COLUMN_DOT3STATSETHERCHIPSET         17
+#define COLUMN_DOT3STATSETHERCHIPSET_FLAG    (0x1 << 16)
+
+#define COLUMN_DOT3STATSSYMBOLERRORS         18
+#define COLUMN_DOT3STATSSYMBOLERRORS_FLAG    (0x1 << 17)
+
+#define COLUMN_DOT3STATSDUPLEXSTATUS         19
+#define COLUMN_DOT3STATSDUPLEXSTATUS_FLAG    (0x1 << 18)
+
+#define COLUMN_DOT3STATSRATECONTROLABILITY         20
+#define COLUMN_DOT3STATSRATECONTROLABILITY_FLAG    (0x1 << 19)
+
+#define COLUMN_DOT3STATSRATECONTROLSTATUS         21
+#define COLUMN_DOT3STATSRATECONTROLSTATUS_FLAG    (0x1 << 20)
+
+
+#define DOT3STATSTABLE_MIN_COL   COLUMN_DOT3STATSINDEX
+#define DOT3STATSTABLE_MAX_COL   COLUMN_DOT3STATSRATECONTROLSTATUS
+
+	
+#ifdef __cplusplus
+}
+#endif
+#endif                          /* DOT3STATSTABLE_OIDS_H */
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/ioctl_imp_common.h net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/ioctl_imp_common.h
--- net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable/ioctl_imp_common.h	1969-12-31 19:00:00.000000000 -0500
+++ net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable/ioctl_imp_common.h	2009-01-05 01:41:44.000000000 -0500
@@ -0,0 +1,65 @@
+#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 *dot3stats_interface_name_list_get (struct ifname *, int *);
+int dot3stats_interface_name_list_free (struct ifname *list_head);
+int dot3stats_interface_ioctl_ifindex_get (int fd, const char *name);
+int _dot3Stats_ioctl_get(int fd, int which, struct ifreq *ifrq, const char* name);
+int interface_ioctl_dot3stats_get(dot3StatsTable_rowreq_ctx *rowreq_ctx, int fd, const char* name);
+int interface_ioctl_dot3stats_duplex_get(dot3StatsTable_rowreq_ctx *rowreq_ctx, int fd, const char* name);
+
+
+/* for maintainability */
+
+#define INTEL_RECEIVE_ALIGN_ERRORS                      "rx_align_errors"
+#define BROADCOM_RECEIVE_ALIGN_ERRORS                   INTEL_RECEIVE_ALIGN_ERRORS
+
+#define INTEL_TRANSMIT_MULTIPLE_COLLISIONS              "tx_multi_coll_ok"
+#define BROADCOM_TRANSMIT_MULTIPLE_COLLISIONS_BNX2      "tx_multi_collisions"
+#define BROADCOM_TRANSMIT_MULTIPLE_COLLISIONS_TG3       "tx_mult_collisions"
+
+#define INTEL_TRANSMIT_LATE_COLLISIONS                  "tx_abort_late_coll"
+#define BROADCOM_TRANSMIT_LATE_COLLISIONS               "tx_late_collisions"
+
+#define INTEL_TRANSMIT_SINGLE_COLLISIONS                "tx_single_coll_ok"
+#define BROADCOM_TRANSMIT_SINGLE_COLLISIONS             "tx_single_collisions"
+
+#define BROADCOM_TRANSMIT_EXCESS_COLLISIONS_BNX2        "tx_excess_collisions"
+#define BROADCOM_TRANSMIT_EXCESS_COLLISIONS_TG3         "tx_excessive_collisions"
+
+
+#define DOT3STATSALIGNMENTERRORS(x)            strstr(x, INTEL_RECEIVE_ALIGN_ERRORS)
+
+#define DOT3STATSMULTIPLECOLLISIONFRAMES(x)    (strstr(x, INTEL_TRANSMIT_MULTIPLE_COLLISIONS)) || \
+                                               (strstr(x, BROADCOM_TRANSMIT_MULTIPLE_COLLISIONS_BNX2)) || \
+                                               (strstr(x, BROADCOM_TRANSMIT_MULTIPLE_COLLISIONS_TG3))
+
+#define DOT3STATSLATECOLLISIONS(x)             (strstr(x, INTEL_TRANSMIT_LATE_COLLISIONS)) || \
+                                               (strstr(x, BROADCOM_TRANSMIT_LATE_COLLISIONS))
+
+#define DOT3STATSSINGLECOLLISIONFRAMES(x)      (strstr(x, INTEL_TRANSMIT_SINGLE_COLLISIONS)) || \
+                                               (strstr(x, BROADCOM_TRANSMIT_SINGLE_COLLISIONS))
+
+#define DOT3STATSEXCESSIVECOLLISIONS(x)        (strstr(x, BROADCOM_TRANSMIT_EXCESS_COLLISIONS_BNX2)) || \
+                                               (strstr(x, BROADCOM_TRANSMIT_EXCESS_COLLISIONS_TG3))
+
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable.h net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable.h
--- net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib/dot3StatsTable.h	1969-12-31 19:00:00.000000000 -0500
+++ net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib/dot3StatsTable.h	2008-12-21 05:19:51.000000000 -0500
@@ -0,0 +1,11 @@
+/*
+ * module to include the modules
+ */
+
+config_require(etherlike-mib/data_access/dot3stats)
+config_require(etherlike-mib/dot3StatsTable/dot3StatsTable)
+config_require(etherlike-mib/dot3StatsTable/dot3StatsTable_data_get)
+config_require(etherlike-mib/dot3StatsTable/dot3StatsTable_data_set)
+config_require(etherlike-mib/dot3StatsTable/dot3StatsTable_data_access)
+config_require(etherlike-mib/dot3StatsTable/dot3StatsTable_interface)
+
diff -uNr net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib.h net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib.h
--- net-snmp-5.4.1.2/agent/mibgroup/etherlike-mib.h	1969-12-31 19:00:00.000000000 -0500
+++ net-snmp-5.4.1.2-new/agent/mibgroup/etherlike-mib.h	2008-12-21 05:18:00.000000000 -0500
@@ -0,0 +1,6 @@
+/*
+ * module to include the modules
+ */
+
+config_require(etherlike-mib/dot3StatsTable)
+config_add_mib(EtherLike-MIB)

 	  	 
