Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 20db51d70e6b59a061db97ce9b89c771 > files > 86

net-snmp-5.3.2.2-14.el5.src.rpm

562376 - snmpd logs error messages
653780 - snmpd logs "looks like a 64bit wrap, but prev!=new" when reading system stats

Source: upstream, too many SVN revisions to list, I copied the files from
SVN rev. 19908 (+backporting + added LOGONCE macro)

diff -up net-snmp-5.3.2.2/agent/mibgroup/ip-mib/data_access/systemstats_common.c.test net-snmp-5.3.2.2/agent/mibgroup/ip-mib/data_access/systemstats_common.c
--- net-snmp-5.3.2.2/agent/mibgroup/ip-mib/data_access/systemstats_common.c.test	2011-02-01 12:31:57.563585032 +0100
+++ net-snmp-5.3.2.2/agent/mibgroup/ip-mib/data_access/systemstats_common.c	2011-02-01 13:51:30.000000000 +0100
@@ -163,7 +166,8 @@ netsnmp_access_systemstats_entry_get_by_
 /**
  */
 netsnmp_systemstats_entry *
-netsnmp_access_systemstats_entry_create(int version, int if_index)
+netsnmp_access_systemstats_entry_create(int version, int if_index,
+        const char *tableName)
 {
     netsnmp_systemstats_entry *entry =
         SNMP_MALLOC_TYPEDEF(netsnmp_systemstats_entry);
@@ -177,7 +181,7 @@ netsnmp_access_systemstats_entry_create(
     entry->oid_index.oids = entry->index;
     entry->index[0] = version;
     entry->index[1] = if_index;
-
+    entry->tableName = tableName;
     return entry;
 }
 
@@ -312,6 +314,7 @@ netsnmp_access_systemstats_entry_update_
         if (NULL == prev_vals->old_stats) {
             return -2;
         }
+        memcpy(&prev_vals->stats, &new_vals->stats, sizeof(new_vals->stats));
     }
     else {
         /*
@@ -330,90 +333,215 @@ netsnmp_access_systemstats_entry_update_
         /*
          * update 64bit counters
          */
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCInNoRoutes,
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINNOROUTES])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCInNoRoutes,
                                        &new_vals->stats.HCInNoRoutes,
                                        &prev_vals->old_stats->HCInNoRoutes,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutNoRoutes,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCInNoRoutes to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTNOROUTES])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCOutNoRoutes,
                                        &new_vals->stats.HCOutNoRoutes,
                                        &prev_vals->old_stats->HCOutNoRoutes,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutDiscards,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCOutNoRoutes to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTDISCARDS])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCOutDiscards,
                                        &new_vals->stats.HCOutDiscards,
                                        &prev_vals->old_stats->HCOutDiscards,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutFragReqds,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCOutDiscards to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGREQDS])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCOutFragReqds,
                                        &new_vals->stats.HCOutFragReqds,
                                        &prev_vals->old_stats->HCOutFragReqds,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutFragOKs,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCOutFragReqds to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGOKS])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCOutFragOKs,
                                        &new_vals->stats.HCOutFragOKs,
                                        &prev_vals->old_stats->HCOutFragOKs,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutFragFails,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCOutFragOKs to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGFAILS])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCOutFragFails,
                                        &new_vals->stats.HCOutFragFails,
                                        &prev_vals->old_stats->HCOutFragFails,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutFragCreates,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCOutFragFails to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGCREATES])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCOutFragCreates,
                                        &new_vals->stats.HCOutFragCreates,
                                        &prev_vals->old_stats->HCOutFragCreates,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCInReceives,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCOutFragCreates to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINRECEIVES])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCInReceives,
                                        &new_vals->stats.HCInReceives,
                                        &prev_vals->old_stats->HCInReceives,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCInOctets,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCInReceives to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINOCTETS])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCInOctets,
                                        &new_vals->stats.HCInOctets,
                                        &prev_vals->old_stats->HCInOctets,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCInForwDatagrams,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCInOctets to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINFORWDATAGRAMS])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCInForwDatagrams,
                                        &new_vals->stats.HCInForwDatagrams,
                                        &prev_vals->old_stats->HCInForwDatagrams,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCInDelivers,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCInForwDatagrams to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINDELIVERS])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCInDelivers,
                                        &new_vals->stats.HCInDelivers,
                                        &prev_vals->old_stats->HCInDelivers,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutRequests,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCInDelivers to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTREQUESTS])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCOutRequests,
                                        &new_vals->stats.HCOutRequests,
                                        &prev_vals->old_stats->HCOutRequests,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutForwDatagrams,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCOutRequests to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFORWDATAGRAMS])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCOutForwDatagrams,
                                        &new_vals->stats.HCOutForwDatagrams,
                                        &prev_vals->old_stats->HCOutForwDatagrams,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutTransmits,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCOutForwDatagrams to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTTRANSMITS])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCOutTransmits,
                                        &new_vals->stats.HCOutTransmits,
                                        &prev_vals->old_stats->HCOutTransmits,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutOctets,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCOutTransmits to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTOCTETS])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCOutOctets,
                                        &new_vals->stats.HCOutOctets,
                                        &prev_vals->old_stats->HCOutOctets,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCInMcastPkts,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCOutOctets to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINMCASTPKTS])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCInMcastPkts,
                                        &new_vals->stats.HCInMcastPkts,
                                        &prev_vals->old_stats->HCInMcastPkts,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCInMcastOctets,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCInMcastPkts to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINMCASTOCTETS])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCInMcastOctets,
                                        &new_vals->stats.HCInMcastOctets,
                                        &prev_vals->old_stats->HCInMcastOctets,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutMcastPkts,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCInMcastOctets to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTMCASTPKTS])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCOutMcastPkts,
                                        &new_vals->stats.HCOutMcastPkts,
                                        &prev_vals->old_stats->HCOutMcastPkts,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutMcastOctets,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCOutMcastPkts to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTMCASTOCTETS])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCOutMcastOctets,
                                        &new_vals->stats.HCOutMcastOctets,
                                        &prev_vals->old_stats->HCOutMcastOctets,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCInBcastPkts,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCOutMcastOctets to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINBCASTPKTS])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCInBcastPkts,
                                        &new_vals->stats.HCInBcastPkts,
                                        &prev_vals->old_stats->HCInBcastPkts,
-                                       &need_wrap_check);
-        netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutBcastPkts,
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCInBcastPkts to 64bits in %s\n",
+                        prev_vals->tableName));
+
+        if (new_vals->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTBCASTPKTS])
+            if (0 != netsnmp_c64_check32_and_update(
+                                       &prev_vals->stats.HCOutBcastPkts,
                                        &new_vals->stats.HCOutBcastPkts,
                                        &prev_vals->old_stats->HCOutBcastPkts,
-                                       &need_wrap_check);
+                                       &need_wrap_check))
+                NETSNMP_LOGONCE((LOG_ERR,
+                        "Error expanding HCOutBcastPkts to 64bits in %s\n",
+                        prev_vals->tableName));
     }
 
     /*
diff -up net-snmp-5.3.2.2/agent/mibgroup/ip-mib/data_access/systemstats_linux.c.test net-snmp-5.3.2.2/agent/mibgroup/ip-mib/data_access/systemstats_linux.c
--- net-snmp-5.3.2.2/agent/mibgroup/ip-mib/data_access/systemstats_linux.c.test	2011-02-01 12:31:57.034625167 +0100
+++ net-snmp-5.3.2.2/agent/mibgroup/ip-mib/data_access/systemstats_linux.c	2011-01-21 14:36:59.000000000 +0100
@@ -120,7 +116,7 @@ _systemstats_v4(netsnmp_container* conta
     if (!(devin = fopen("/proc/net/snmp", "r"))) {
         DEBUGMSGTL(("access:systemstats",
                     "Failed to load Systemstats Table (linux1)\n"));
-        snmp_log(LOG_ERR, "cannot open /proc/net/snmp ...\n");
+        NETSNMP_LOGONCE((LOG_ERR, "cannot open /proc/net/snmp ...\n"));
         return -2;
     }
 
@@ -164,7 +160,8 @@ _systemstats_v4(netsnmp_container* conta
         while (*stats == ' ') /* skip spaces before stats */
             stats++;
 
-        entry = netsnmp_access_systemstats_entry_create(1, 0);
+        entry = netsnmp_access_systemstats_entry_create(1, 0,
+                    "ipSystemStatsTable.ipv4");
         if(NULL == entry) {
             netsnmp_access_systemstats_container_free(container,
                                                       NETSNMP_ACCESS_SYSTEMSTATS_FREE_NOFLAGS);
@@ -257,8 +254,13 @@ _systemstats_v4(netsnmp_container* conta
         /*
          * add to container
          */
-        CONTAINER_INSERT(container, entry);
+        if (CONTAINER_INSERT(container, entry) < 0)
+        {
+            DEBUGMSGTL(("access:systemstats:container","error with systemstats_entry: insert into container failed.\n"));
+            netsnmp_access_systemstats_entry_free(entry);
+        }
     }
+
     return 0;
 }
     
@@ -270,15 +272,16 @@ _additional_systemstats_v4(netsnmp_syste
     FILE           *devin;
     char            line[1024];
     int             scan_count;
-    uintmax_t       scan_vals[6];
+    unsigned long long scan_vals[6];
     int             retval = 0;
 
     DEBUGMSGTL(("access:systemstats:container:arch",
-                "load addtional v4 (flags %p)\n", load_flags));
+                "load addtional v4 (flags %u)\n", load_flags));
 
     if (!(devin = fopen("/proc/net/netstat", "r"))) {
         DEBUGMSGTL(("access:systemstats",
                     "cannot open /proc/net/netstat\n"));
+        NETSNMP_LOGONCE((LOG_ERR,"cannot open /proc/net/netstat\n"));
         return -2;
     }
 
@@ -410,9 +413,16 @@ _systemstats_v6_load_file(netsnmp_system
                 entry->stats.InHdrErrors = scan_val;
                 entry->stats.columnAvail[IPSYSTEMSTATSTABLE_INHDRERRORS] = 1;
             } else if ('M' == line[5]) {
-                entry->stats.HCInMcastPkts.low = scan_val  & 0xffffffff;
-                entry->stats.HCInMcastPkts.high = scan_val >> 32;
-                entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINMCASTPKTS] = 1;
+                if ('P' == line[10]) {
+                    entry->stats.HCInMcastPkts.low = scan_val  & 0xffffffff;
+                    entry->stats.HCInMcastPkts.high = scan_val >> 32;
+                    entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINMCASTPKTS] = 1;
+                } else if ('O' == line[10]) {
+                    entry->stats.HCInMcastOctets.low = scan_val  & 0xffffffff;
+                    entry->stats.HCInMcastOctets.high = scan_val >> 32;
+                    entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINMCASTOCTETS] = 1;
+                } else
+                    rc = 1;
             } else if ('N' == line[5]) {
                 entry->stats.HCInNoRoutes.low = scan_val & 0xffffffff;
                 entry->stats.HCInNoRoutes.high = scan_val >> 32;
@@ -432,6 +442,10 @@ _systemstats_v6_load_file(netsnmp_system
             } else if ('U' == line[5]) {
                 entry->stats.InUnknownProtos = scan_val;
                 entry->stats.columnAvail[IPSYSTEMSTATSTABLE_INUNKNOWNPROTOS] = 1;
+            } else if ('O' == line[5]) {
+                entry->stats.HCInOctets.low = scan_val & 0xffffffff;
+                entry->stats.HCInOctets.high = scan_val  >> 32;
+                entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINOCTETS] = 1;
             } else
                 rc = 1;
         } else if ('O' == line[3]) { /* Out */
@@ -444,9 +458,16 @@ _systemstats_v6_load_file(netsnmp_system
                 entry->stats.HCOutForwDatagrams.high = scan_val >> 32;
                 entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFORWDATAGRAMS] = 1;
             } else if ('M' == line[6]) {
-                entry->stats.HCOutMcastPkts.low = scan_val & 0xffffffff;
-                entry->stats.HCOutMcastPkts.high = scan_val >> 32;
-                entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTMCASTPKTS] = 1;
+                if ('P' == line[11]) {
+                    entry->stats.HCOutMcastPkts.low = scan_val & 0xffffffff;
+                    entry->stats.HCOutMcastPkts.high = scan_val >> 32;
+                    entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTMCASTPKTS] = 1;
+                } else if ('O' == line[11]) {
+                    entry->stats.HCOutMcastOctets.low = scan_val & 0xffffffff;
+                    entry->stats.HCOutMcastOctets.high = scan_val >> 32;
+                    entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTMCASTOCTETS] = 1;
+                } else
+                    rc = -1;
             } else if ('N' == line[6]) {
                 entry->stats.HCOutNoRoutes.low = scan_val & 0xffffffff;
                 entry->stats.HCOutNoRoutes.high = scan_val >> 32;
@@ -455,6 +476,10 @@ _systemstats_v6_load_file(netsnmp_system
                 entry->stats.HCOutRequests.low = scan_val & 0xffffffff;
                 entry->stats.HCOutRequests.high = scan_val >> 32;
                 entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTREQUESTS] = 1;
+            } else if ('O' == line[6]) {
+                entry->stats.HCOutOctets.low = scan_val & 0xffffffff;
+                entry->stats.HCOutOctets.high = scan_val >> 32;
+                entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTOCTETS] = 1;
             } else
                 rc = 1;
         } else if ('R' == line[3]) { /* Reasm */
@@ -512,10 +537,10 @@ _systemstats_v6_load_systemstats(netsnmp
     FILE *devin;
     netsnmp_systemstats_entry *entry = NULL;
     const char     *filename = "/proc/net/snmp6";
-    static int      warned_open = 0;
     int rc = 0;
     
-    entry = netsnmp_access_systemstats_entry_create(2, 0);
+    entry = netsnmp_access_systemstats_entry_create(2, 0,
+            "ipSystemStatsTable.ipv6");
     if(NULL == entry)
         return -3;
     
@@ -526,10 +551,7 @@ _systemstats_v6_load_systemstats(netsnmp
     if (!(devin = fopen(filename, "r"))) {
         DEBUGMSGTL(("access:systemstats",
                     "Failed to load Systemstats Table (linux1)\n"));
-        if(!warned_open) {
-            ++warned_open;
-            snmp_log(LOG_ERR, "cannot open %s ...\n", filename);
-        }
+        NETSNMP_LOGONCE((LOG_ERR, "cannot open %s ...\n", filename));
         free(entry);
         return 0;
     }
@@ -541,7 +563,12 @@ _systemstats_v6_load_systemstats(netsnmp
     /*
      * add to container
      */
-    CONTAINER_INSERT(container, entry);
+        if (CONTAINER_INSERT(container, entry) < 0)
+        {
+            DEBUGMSGTL(("access:systemstats:container","error with systemstats_entry: insert into container failed.\n"));
+            netsnmp_access_systemstats_entry_free(entry);
+        }
+
 
     return rc;
 }
@@ -561,7 +588,7 @@ _systemstats_v6_load_ifstats(netsnmp_con
     char           dev_filename[DEV_FILENAME_LEN];
     FILE           *devin;
     char           line[1024];
-    char           *stats, *start = line;
+    char           *start = line;
     int            rc;
     char           *scan_str;
     uintmax_t       scan_val;
@@ -626,7 +653,8 @@ _systemstats_v6_load_ifstats(netsnmp_con
             scan_val = strtoull(scan_str, NULL, 0);
         }
         
-        entry = netsnmp_access_systemstats_entry_create(2, scan_val);
+        entry = netsnmp_access_systemstats_entry_create(2, scan_val,
+                "ipIfStatsTable.ipv6");
         if(NULL == entry) {
             fclose(devin);
             closedir(dev_snmp6_dir);
@@ -647,7 +675,7 @@ _systemstats_v6_load_ifstats(netsnmp_con
 static int
 _systemstats_v6(netsnmp_container* container, u_int load_flags)
 {
-    DEBUGMSGTL(("access:systemstats:container:arch", "load v6 (flags %p)\n",
+    DEBUGMSGTL(("access:systemstats:container:arch", "load v6 (flags %u)\n",
                 load_flags));
 
     netsnmp_assert(container != NULL); /* load function shoulda checked this */
@@ -660,4 +688,4 @@ _systemstats_v6(netsnmp_container* conta
         return _systemstats_v6_load_systemstats(container, load_flags);
     }
 }
-#endif /* INET6 */
+#endif /* NETSNMP_ENABLE_IPV6 */
diff -up net-snmp-5.3.2.2/include/net-snmp/data_access/systemstats.h.test net-snmp-5.3.2.2/include/net-snmp/data_access/systemstats.h
--- net-snmp-5.3.2.2/include/net-snmp/data_access/systemstats.h.test	2011-02-01 15:04:18.648674571 +0100
+++ net-snmp-5.3.2.2/include/net-snmp/data_access/systemstats.h	2011-01-21 14:36:59.000000000 +0100
@@ -36,6 +36,11 @@ typedef struct netsnmp_systemstats_s {
     */
    netsnmp_ipstats stats;
 
+   /*
+    * for logging
+    */
+   const char* tableName;
+   
    /** old_stats is used in netsnmp_access_interface_entry_update_stats */
    netsnmp_ipstats *old_stats;
 
@@ -49,6 +54,11 @@ typedef struct netsnmp_systemstats_s {
 /*
  * init
  */
+void netsnmp_access_systemstats_init(void);
+
+/*
+ * init
+ */
 netsnmp_container * netsnmp_access_systemstats_container_init(u_int init_flags);
 #define NETSNMP_ACCESS_SYSTEMSTATS_INIT_NOFLAGS               0x0000
 #define NETSNMP_ACCESS_SYSTEMSTATS_INIT_ADDL_IDX_BY_ADDR      0x0001
@@ -74,7 +84,8 @@ void netsnmp_access_systemstats_containe
  * create/free an entry
  */
 netsnmp_systemstats_entry *
-netsnmp_access_systemstats_entry_create(int version, int if_index);
+netsnmp_access_systemstats_entry_create(int version, int if_index,
+            const char* tableName);
 
 void netsnmp_access_systemstats_entry_free(netsnmp_systemstats_entry * entry);
 
diff -up net-snmp-5.3.2.2/include/net-snmp/library/snmp_logging.h.test2 net-snmp-5.3.2.2/include/net-snmp/library/snmp_logging.h
--- net-snmp-5.3.2.2/include/net-snmp/library/snmp_logging.h.test2	2006-10-18 04:15:37.000000000 +0200
+++ net-snmp-5.3.2.2/include/net-snmp/library/snmp_logging.h	2011-02-01 15:10:43.889601082 +0100
@@ -34,6 +34,15 @@ extern          "C" {
 #define DEFAULT_LOG_ID "net-snmp"
 #endif
 
+#define NETSNMP_LOGONCE(x) do { \
+        static char logged = 0; \
+        if (!logged) {          \
+            logged = 1;         \
+            snmp_log x ;        \
+        }                       \
+    } while(0)
+
+
     void            init_snmp_logging(void);
     int             snmp_get_do_logging(void);
     void            snmp_disable_syslog(void);