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);