7454 lines
274 KiB
Diff
7454 lines
274 KiB
Diff
From 32c13f8502b9520a49fb88a6737801d705fcbb9f Mon Sep 17 00:00:00 2001
|
|
From: Mitsuru Chinen <mitch@linux.vnet.ibm.com>
|
|
Date: Mon, 20 Oct 2008 17:57:27 +0900
|
|
Subject: [PATCH] Improve IP Statistics tables
|
|
|
|
This patch fixes the ipSystemStatsTable and adds ipIfStatsTable for IPv6.
|
|
|
|
From net-snmp patch tracker:
|
|
[ 1797111 ] Better support for ipIfStatsTable
|
|
http://sourceforge.net/tracker/index.php?func=detail&aid=1797111&group_id=12694&atid=312694
|
|
|
|
Signed-off-by: Mitsuru Chinen <mitch@linux.vnet.ibm.com>
|
|
---
|
|
README.agent-mibs | 2 +-
|
|
.../ip-mib/data_access/systemstats_common.c | 119 +-
|
|
.../ip-mib/data_access/systemstats_linux.c | 389 +++-
|
|
agent/mibgroup/ip-mib/ipIfStatsTable.h | 8 +
|
|
.../ip-mib/ipIfStatsTable/ipIfStatsTable.c | 216 ++
|
|
.../ip-mib/ipIfStatsTable/ipIfStatsTable.h | 200 ++
|
|
.../ipIfStatsTable/ipIfStatsTable_data_access.c | 408 +++
|
|
.../ipIfStatsTable/ipIfStatsTable_data_access.h | 70 +
|
|
.../ipIfStatsTable/ipIfStatsTable_data_get.c | 3015 ++++++++++++++++++++
|
|
.../ipIfStatsTable/ipIfStatsTable_data_get.h | 246 ++
|
|
.../ip-mib/ipIfStatsTable/ipIfStatsTable_enums.h | 56 +
|
|
.../ipIfStatsTable/ipIfStatsTable_interface.c | 1395 +++++++++
|
|
.../ipIfStatsTable/ipIfStatsTable_interface.h | 99 +
|
|
.../ip-mib/ipIfStatsTable/ipIfStatsTable_oids.h | 122 +
|
|
.../ip-mib/ipSystemStatsTable/ipSystemStatsTable.c | 154 +-
|
|
.../ipSystemStatsTable_data_access.c | 60 +-
|
|
include/net-snmp/data_access/ipstats.h | 66 +-
|
|
include/net-snmp/data_access/systemstats.h | 14 +-
|
|
18 files changed, 6494 insertions(+), 145 deletions(-)
|
|
create mode 100644 agent/mibgroup/ip-mib/ipIfStatsTable.h
|
|
create mode 100644 agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable.c
|
|
create mode 100644 agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable.h
|
|
create mode 100644 agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_access.c
|
|
create mode 100644 agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_access.h
|
|
create mode 100644 agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.c
|
|
create mode 100644 agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.h
|
|
create mode 100644 agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_enums.h
|
|
create mode 100644 agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_interface.c
|
|
create mode 100644 agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_interface.h
|
|
create mode 100644 agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_oids.h
|
|
|
|
diff --git a/README.agent-mibs b/README.agent-mibs
|
|
index 8716f8d..ff5ce6a 100644
|
|
--- a/README.agent-mibs
|
|
+++ b/README.agent-mibs
|
|
@@ -152,7 +152,7 @@ IP-MIB
|
|
|
|
ipSystemStatsTable L 5.2 M ip-mib/=/*
|
|
ipIfStatsTableLastChange.0 ---
|
|
- ipIfStatsTable ---
|
|
+ ipIfStatsTable L-- 5.5 M ip-mib/=/*
|
|
|
|
ipAddrTable (D) U $2 4.2 O mibII/ipAddr.c
|
|
ipAddressSpinLock.0 ---
|
|
diff --git a/agent/mibgroup/ip-mib/data_access/systemstats_common.c b/agent/mibgroup/ip-mib/data_access/systemstats_common.c
|
|
index 83e1867..a09cacf 100644
|
|
--- a/agent/mibgroup/ip-mib/data_access/systemstats_common.c
|
|
+++ b/agent/mibgroup/ip-mib/data_access/systemstats_common.c
|
|
@@ -1,5 +1,5 @@
|
|
/*
|
|
- * Systemstats MIB architecture support
|
|
+ * ipSystemStatsTable and ipIfStatsTable MIB architecture support
|
|
*
|
|
* $Id: systemstats_common.c 11913 2005-02-08 21:58:36Z nba $
|
|
*/
|
|
@@ -163,7 +163,7 @@ netsnmp_access_systemstats_entry_get_by_index(netsnmp_container *container, oid
|
|
/**
|
|
*/
|
|
netsnmp_systemstats_entry *
|
|
-netsnmp_access_systemstats_entry_create(int version)
|
|
+netsnmp_access_systemstats_entry_create(int version, int if_index)
|
|
{
|
|
netsnmp_systemstats_entry *entry =
|
|
SNMP_MALLOC_TYPEDEF(netsnmp_systemstats_entry);
|
|
@@ -173,10 +173,10 @@ netsnmp_access_systemstats_entry_create(int version)
|
|
if(NULL == entry)
|
|
return NULL;
|
|
|
|
- entry->ns_ip_version = version;
|
|
-
|
|
- entry->oid_index.len = 1;
|
|
- entry->oid_index.oids = (oid *) & entry->ns_ip_version;
|
|
+ entry->oid_index.len = 2;
|
|
+ entry->oid_index.oids = entry->index;
|
|
+ entry->index[0] = version;
|
|
+ entry->index[1] = if_index;
|
|
|
|
return entry;
|
|
}
|
|
@@ -217,6 +217,64 @@ _entry_release(netsnmp_systemstats_entry * entry, void *context)
|
|
netsnmp_access_systemstats_entry_free(entry);
|
|
}
|
|
|
|
+/*
|
|
+ * Calculates the entries, which are not provided by OS, but can be
|
|
+ * computed from the others.
|
|
+ */
|
|
+static void
|
|
+_calculate_entries(netsnmp_systemstats_entry * entry)
|
|
+{
|
|
+ U64 calc_val;
|
|
+
|
|
+ /*
|
|
+ * HCInForwDatagrams = HCInNoRoutes + HCOutForwDatagrams
|
|
+ */
|
|
+ if (!entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINFORWDATAGRAMS]
|
|
+ && entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFORWDATAGRAMS]
|
|
+ && entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINNOROUTES]) {
|
|
+
|
|
+ entry->stats.HCInForwDatagrams = entry->stats.HCInNoRoutes;
|
|
+ u64Incr(&entry->stats.HCInForwDatagrams, &entry->stats.HCOutForwDatagrams);
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINFORWDATAGRAMS] = 1;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * HCOutFragReqds = HCOutFragOKs + HCOutFragFails
|
|
+ */
|
|
+ if (!entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGREQDS]
|
|
+ && entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGOKS]
|
|
+ && entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGFAILS]) {
|
|
+
|
|
+ entry->stats.HCOutFragReqds = entry->stats.HCOutFragOKs;
|
|
+ u64Incr(&entry->stats.HCOutFragReqds, &entry->stats.HCOutFragFails);
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGREQDS] = 1;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * HCOutTransmits = HCOutRequests + HCOutForwDatagrams + HCOutFragCreates
|
|
+ * - HCOutFragReqds - HCOutNoRoutes - HCOutDiscards
|
|
+ */
|
|
+ if (!entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTTRANSMITS]
|
|
+ && entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTREQUESTS]
|
|
+ && entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFORWDATAGRAMS]
|
|
+ && entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGREQDS]
|
|
+ && entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTNOROUTES]
|
|
+ && entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGCREATES]
|
|
+ && entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTDISCARDS]) {
|
|
+
|
|
+ U64 tmp, tmp2, tmp3;
|
|
+ tmp = entry->stats.HCOutRequests;
|
|
+ u64Incr(&tmp, &entry->stats.HCOutForwDatagrams);
|
|
+ u64Incr(&tmp, &entry->stats.HCOutFragCreates);
|
|
+
|
|
+ u64Subtract(&tmp, &entry->stats.HCOutFragReqds, &tmp2);
|
|
+ u64Subtract(&tmp2, &entry->stats.HCOutNoRoutes, &tmp3);
|
|
+ u64Subtract(&tmp3, &entry->stats.HCOutDiscards, &entry->stats.HCOutTransmits);
|
|
+
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTTRANSMITS] = 1;
|
|
+ }
|
|
+}
|
|
+
|
|
/**
|
|
* update entry stats (checking for counter wrap)
|
|
*
|
|
@@ -233,7 +291,8 @@ netsnmp_access_systemstats_entry_update_stats(netsnmp_systemstats_entry * prev_v
|
|
* sanity checks
|
|
*/
|
|
if ((NULL == prev_vals) || (NULL == new_vals) ||
|
|
- (prev_vals->ns_ip_version != new_vals->ns_ip_version))
|
|
+ (prev_vals->index[0] != new_vals->index[0])
|
|
+ || (prev_vals->index[1] != new_vals->index[1]))
|
|
return -1;
|
|
|
|
/*
|
|
@@ -241,6 +300,7 @@ netsnmp_access_systemstats_entry_update_stats(netsnmp_systemstats_entry * prev_v
|
|
*/
|
|
if (0 == need_wrap_check) {
|
|
memcpy(&prev_vals->stats, &new_vals->stats, sizeof(new_vals->stats));
|
|
+ _calculate_entries(prev_vals);
|
|
return 0;
|
|
}
|
|
|
|
@@ -257,8 +317,8 @@ netsnmp_access_systemstats_entry_update_stats(netsnmp_systemstats_entry * prev_v
|
|
/*
|
|
* update straight 32 bit counters
|
|
*/
|
|
+ memcpy(&prev_vals->stats.columnAvail[0], &new_vals->stats.columnAvail[0], sizeof(new_vals->stats.columnAvail));
|
|
prev_vals->stats.InHdrErrors = new_vals->stats.InHdrErrors;
|
|
- prev_vals->stats.InNoRoutes = new_vals->stats.InNoRoutes;
|
|
prev_vals->stats.InAddrErrors = new_vals->stats.InAddrErrors;
|
|
prev_vals->stats.InUnknownProtos = new_vals->stats.InUnknownProtos;
|
|
prev_vals->stats.InTruncatedPkts = new_vals->stats.InTruncatedPkts;
|
|
@@ -266,16 +326,38 @@ netsnmp_access_systemstats_entry_update_stats(netsnmp_systemstats_entry * prev_v
|
|
prev_vals->stats.ReasmOKs = new_vals->stats.ReasmOKs;
|
|
prev_vals->stats.ReasmFails = new_vals->stats.ReasmFails;
|
|
prev_vals->stats.InDiscards = new_vals->stats.InDiscards;
|
|
- prev_vals->stats.OutNoRoutes = new_vals->stats.OutNoRoutes;
|
|
- prev_vals->stats.OutDiscards = new_vals->stats.OutDiscards;
|
|
- prev_vals->stats.OutFragReqds = new_vals->stats.OutFragReqds;
|
|
- prev_vals->stats.OutFragOKs = new_vals->stats.OutFragOKs;
|
|
- prev_vals->stats.OutFragFails = new_vals->stats.OutFragFails;
|
|
- prev_vals->stats.OutFragCreates = new_vals->stats.OutFragCreates;
|
|
|
|
/*
|
|
* update 64bit counters
|
|
*/
|
|
+ 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,
|
|
+ &new_vals->stats.HCOutNoRoutes,
|
|
+ &prev_vals->old_stats->HCOutNoRoutes,
|
|
+ &need_wrap_check);
|
|
+ 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,
|
|
+ &new_vals->stats.HCOutFragReqds,
|
|
+ &prev_vals->old_stats->HCOutFragReqds,
|
|
+ &need_wrap_check);
|
|
+ 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,
|
|
+ &new_vals->stats.HCOutFragFails,
|
|
+ &prev_vals->old_stats->HCOutFragFails,
|
|
+ &need_wrap_check);
|
|
+ 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,
|
|
&new_vals->stats.HCInReceives,
|
|
&prev_vals->old_stats->HCInReceives,
|
|
@@ -333,7 +415,7 @@ netsnmp_access_systemstats_entry_update_stats(netsnmp_systemstats_entry * prev_v
|
|
&prev_vals->old_stats->HCOutBcastPkts,
|
|
&need_wrap_check);
|
|
}
|
|
-
|
|
+
|
|
/*
|
|
* if we've decided we no longer need to check wraps, free old stats
|
|
*/
|
|
@@ -346,7 +428,9 @@ netsnmp_access_systemstats_entry_update_stats(netsnmp_systemstats_entry * prev_v
|
|
* careful - old_stats is a pointer to stats...
|
|
*/
|
|
memcpy(prev_vals->old_stats, &new_vals->stats, sizeof(new_vals->stats));
|
|
-
|
|
+
|
|
+ _calculate_entries(prev_vals);
|
|
+
|
|
return 0;
|
|
}
|
|
|
|
@@ -367,7 +451,8 @@ netsnmp_access_systemstats_entry_update(netsnmp_systemstats_entry * lhs,
|
|
DEBUGMSGTL(("access:systemstats", "copy\n"));
|
|
|
|
if ((NULL == lhs) || (NULL == rhs) ||
|
|
- (lhs->ns_ip_version != rhs->ns_ip_version))
|
|
+ (lhs->index[0] != rhs->index[0])
|
|
+ || (lhs->index[1] != rhs->index[1]))
|
|
return -1;
|
|
|
|
/*
|
|
diff --git a/agent/mibgroup/ip-mib/data_access/systemstats_linux.c b/agent/mibgroup/ip-mib/data_access/systemstats_linux.c
|
|
index 947afe8..552a745 100644
|
|
--- a/agent/mibgroup/ip-mib/data_access/systemstats_linux.c
|
|
+++ b/agent/mibgroup/ip-mib/data_access/systemstats_linux.c
|
|
@@ -1,5 +1,5 @@
|
|
/*
|
|
- * Interface MIB architecture support
|
|
+ * ipSystemStatsTable and ipIfStatsTable interface MIB architecture support
|
|
*
|
|
* $Id: systemstats_linux.c 15220 2006-09-15 00:48:50Z tanders $
|
|
*/
|
|
@@ -10,11 +10,22 @@
|
|
#include <net-snmp/data_access/ipstats.h>
|
|
#include <net-snmp/data_access/systemstats.h>
|
|
|
|
+#include "../ipSystemStatsTable/ipSystemStatsTable.h"
|
|
+
|
|
+#include <sys/types.h>
|
|
+#include <dirent.h>
|
|
+#include <ctype.h>
|
|
+
|
|
static int _systemstats_v4(netsnmp_container* container, u_int load_flags);
|
|
+static int _additional_systemstats_v4(netsnmp_systemstats_entry* entry,
|
|
+ u_int load_flags);
|
|
+
|
|
#if defined (NETSNMP_ENABLE_IPV6)
|
|
static int _systemstats_v6(netsnmp_container* container, u_int load_flags);
|
|
#endif
|
|
|
|
+static netsnmp_column_info valid_columns;
|
|
+static unsigned int my_columns[IPSYSTEMSTATSTABLE_MAX_COL];
|
|
|
|
void
|
|
netsnmp_access_systemstats_arch_init(void)
|
|
@@ -62,7 +73,7 @@ netsnmp_access_systemstats_container_arch_load(netsnmp_container* container,
|
|
snmp_log(LOG_ERR, "no container specified/found for access_systemstats_\n");
|
|
return -1;
|
|
}
|
|
-
|
|
+
|
|
/*
|
|
* load v4 and v6 stats. Even if one fails, try the other.
|
|
* If they have the same rc, return it. if the differ, return
|
|
@@ -81,6 +92,9 @@ netsnmp_access_systemstats_container_arch_load(netsnmp_container* container,
|
|
#endif
|
|
}
|
|
|
|
+/*
|
|
+ * Based on load_flags, load ipSystemStatsTable or ipIfStatsTable for ipv4 entries.
|
|
+ */
|
|
static int
|
|
_systemstats_v4(netsnmp_container* container, u_int load_flags)
|
|
{
|
|
@@ -97,6 +111,11 @@ _systemstats_v4(netsnmp_container* container, u_int load_flags)
|
|
|
|
netsnmp_assert(container != NULL); /* load function shoulda checked this */
|
|
|
|
+ if (load_flags & NETSNMP_ACCESS_SYSTEMSTATS_LOAD_IFTABLE) {
|
|
+ /* we do not support ipIfStatsTable for ipv4 */
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
if (!(devin = fopen("/proc/net/snmp", "r"))) {
|
|
DEBUGMSGTL(("access:systemstats",
|
|
"Failed to load Systemstats Table (linux1)\n"));
|
|
@@ -144,7 +163,7 @@ _systemstats_v4(netsnmp_container* container, u_int load_flags)
|
|
while (*stats == ' ') /* skip spaces before stats */
|
|
stats++;
|
|
|
|
- entry = netsnmp_access_systemstats_entry_create(1);
|
|
+ entry = netsnmp_access_systemstats_entry_create(1, 0);
|
|
if(NULL == entry) {
|
|
netsnmp_access_systemstats_container_free(container,
|
|
NETSNMP_ACCESS_SYSTEMSTATS_FREE_NOFLAGS);
|
|
@@ -185,23 +204,54 @@ _systemstats_v4(netsnmp_container* container, u_int load_flags)
|
|
entry->stats.HCInReceives.high = scan_vals[2] >> 32;
|
|
entry->stats.InHdrErrors = scan_vals[3];
|
|
entry->stats.InAddrErrors = scan_vals[4];
|
|
- entry->stats.HCInForwDatagrams.low = scan_vals[5] & 0xffffffff;
|
|
- entry->stats.HCInForwDatagrams.high = scan_vals[5] >> 32;
|
|
+ entry->stats.HCOutForwDatagrams.low = scan_vals[5] & 0xffffffff;
|
|
+ entry->stats.HCOutForwDatagrams.high = scan_vals[5] >> 32;
|
|
entry->stats.InUnknownProtos = scan_vals[6];
|
|
entry->stats.InDiscards = scan_vals[7];
|
|
entry->stats.HCInDelivers.low = scan_vals[8] & 0xffffffff;
|
|
entry->stats.HCInDelivers.high = scan_vals[8] >> 32;
|
|
entry->stats.HCOutRequests.low = scan_vals[9] & 0xffffffff;
|
|
entry->stats.HCOutRequests.high = scan_vals[9] >> 32;
|
|
- entry->stats.OutDiscards = scan_vals[10];
|
|
- entry->stats.OutNoRoutes = scan_vals[11];
|
|
+ entry->stats.HCOutDiscards.low = scan_vals[10] & 0xffffffff;;
|
|
+ entry->stats.HCOutDiscards.high = scan_vals[10] >> 32;
|
|
+ entry->stats.HCOutNoRoutes.low = scan_vals[11] & 0xffffffff;;
|
|
+ entry->stats.HCOutNoRoutes.high = scan_vals[11] >> 32;
|
|
/* entry->stats. = scan_vals[12]; / * ReasmTimeout */
|
|
entry->stats.ReasmReqds = scan_vals[13];
|
|
entry->stats.ReasmOKs = scan_vals[14];
|
|
entry->stats.ReasmFails = scan_vals[15];
|
|
- entry->stats.OutFragOKs = scan_vals[16];
|
|
- entry->stats.OutFragFails = scan_vals[17];
|
|
- entry->stats.OutFragCreates = scan_vals[18];
|
|
+ entry->stats.HCOutFragOKs.low = scan_vals[16] & 0xffffffff;;
|
|
+ entry->stats.HCOutFragOKs.high = scan_vals[16] >> 32;
|
|
+ entry->stats.HCOutFragFails.low = scan_vals[17] & 0xffffffff;;
|
|
+ entry->stats.HCOutFragFails.high = scan_vals[17] >> 32;
|
|
+ entry->stats.HCOutFragCreates.low = scan_vals[18] & 0xffffffff;;
|
|
+ entry->stats.HCOutFragCreates.high = scan_vals[18] >> 32;
|
|
+
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINRECEIVES] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_INHDRERRORS] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_INADDRERRORS] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFORWDATAGRAMS] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_INUNKNOWNPROTOS] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_INDISCARDS] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINDELIVERS] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTREQUESTS] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTDISCARDS] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTNOROUTES] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_REASMREQDS] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_REASMOKS] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_REASMFAILS] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGOKS] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGFAILS] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGCREATES] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_DISCONTINUITYTIME] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_REFRESHRATE] = 1;
|
|
+
|
|
+ /*
|
|
+ * load addtional statistics defined by RFC 4293
|
|
+ * As these are supported linux 2.6.22 or later, it is no problem
|
|
+ * if loading them are failed.
|
|
+ */
|
|
+ _additional_systemstats_v4(entry, load_flags);
|
|
|
|
/*
|
|
* add to container
|
|
@@ -211,49 +261,106 @@ _systemstats_v4(netsnmp_container* container, u_int load_flags)
|
|
return 0;
|
|
}
|
|
|
|
-#if defined (NETSNMP_ENABLE_IPV6)
|
|
+#define IP_EXT_HEAD "IpExt:"
|
|
static int
|
|
-_systemstats_v6(netsnmp_container* container, u_int load_flags)
|
|
+_additional_systemstats_v4(netsnmp_systemstats_entry* entry,
|
|
+ u_int load_flags)
|
|
{
|
|
FILE *devin;
|
|
char line[1024];
|
|
- netsnmp_systemstats_entry *entry = NULL;
|
|
- int scan_count = 0;
|
|
- char *stats, *start = line;
|
|
- int len, rc;
|
|
- uintmax_t scan_val;
|
|
- const char *filename = "/proc/net/snmp6";
|
|
- static int warned_open = 0;
|
|
+ int scan_count;
|
|
+ uintmax_t scan_vals[6];
|
|
+ int retval = 0;
|
|
|
|
- DEBUGMSGTL(("access:systemstats:container:arch", "load v6 (flags %p)\n",
|
|
- load_flags));
|
|
+ DEBUGMSGTL(("access:systemstats:container:arch",
|
|
+ "load addtional v4 (flags %p)\n", load_flags));
|
|
|
|
- netsnmp_assert(container != NULL); /* load function shoulda checked this */
|
|
+ if (!(devin = fopen("/proc/net/netstat", "r"))) {
|
|
+ DEBUGMSGTL(("access:systemstats",
|
|
+ "cannot open /proc/net/netstat\n"));
|
|
+ return -2;
|
|
+ }
|
|
|
|
- entry = netsnmp_access_systemstats_entry_create(2);
|
|
- if(NULL == entry)
|
|
- return -3;
|
|
-
|
|
/*
|
|
- * try to open file. If we can't, that's ok - maybe the module hasn't
|
|
- * been loaded yet.
|
|
+ * Get header and stat lines
|
|
*/
|
|
- 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);
|
|
- }
|
|
- free(entry);
|
|
- return 0;
|
|
+ while (fgets(line, sizeof(line), devin)) {
|
|
+ if (strncmp(IP_EXT_HEAD, line, sizeof(IP_EXT_HEAD) - 1) == 0) {
|
|
+ /* next line should includes IPv4 addtional statistics */
|
|
+ if ((fgets(line, sizeof(line), devin)) == NULL) {
|
|
+ retval = -4;
|
|
+ break;
|
|
+ }
|
|
+ if (strncmp(IP_EXT_HEAD, line, sizeof(IP_EXT_HEAD) - 1) != 0) {
|
|
+ retval = -4;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ memset(scan_vals, 0x0, sizeof(scan_vals));
|
|
+ scan_count = sscanf(line,
|
|
+ "%*s" /* ignore `IpExt:' */
|
|
+ "%llu %llu %llu %llu %llu %llu",
|
|
+ &scan_vals[0], &scan_vals[1], &scan_vals[2],
|
|
+ &scan_vals[3], &scan_vals[4], &scan_vals[5]);
|
|
+ if (scan_count < 6) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "error scanning addtional systemstats data"
|
|
+ "(minimum expected %d, got %d)\n",
|
|
+ 6, scan_count);
|
|
+ retval = -4;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ entry->stats.HCInNoRoutes.low = scan_vals[0] & 0xffffffff;
|
|
+ entry->stats.HCInNoRoutes.high = scan_vals[0] >> 32;
|
|
+ entry->stats.InTruncatedPkts = scan_vals[1];
|
|
+ entry->stats.HCInMcastPkts.low = scan_vals[2] & 0xffffffff;
|
|
+ entry->stats.HCInMcastPkts.high = scan_vals[2] >> 32;
|
|
+ entry->stats.HCOutMcastPkts.low = scan_vals[3] & 0xffffffff;
|
|
+ entry->stats.HCOutMcastPkts.high = scan_vals[3] >> 32;
|
|
+ entry->stats.HCInBcastPkts.low = scan_vals[4] & 0xffffffff;
|
|
+ entry->stats.HCInBcastPkts.high = scan_vals[4] >> 32;
|
|
+ entry->stats.HCOutBcastPkts.low = scan_vals[5] & 0xffffffff;
|
|
+ entry->stats.HCOutBcastPkts.high = scan_vals[5] >> 32;
|
|
+
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINNOROUTES] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_INTRUNCATEDPKTS] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINMCASTPKTS] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTMCASTPKTS] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINBCASTPKTS] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTBCASTPKTS] = 1;
|
|
+ }
|
|
}
|
|
|
|
+ fclose(devin);
|
|
+
|
|
+ if (retval < 0)
|
|
+ DEBUGMSGTL(("access:systemstats",
|
|
+ "/proc/net/netstat does not include addtional stats\n"));
|
|
+
|
|
+ return retval;
|
|
+}
|
|
+
|
|
+#if defined (NETSNMP_ENABLE_IPV6)
|
|
+
|
|
+/*
|
|
+ * Load one /proc/net/snmp6 - like file (e.g. /proc/net/dev_snmp6/*)
|
|
+ */
|
|
+ static int
|
|
+_systemstats_v6_load_file(netsnmp_systemstats_entry *entry, FILE *devin)
|
|
+{
|
|
+ char line[1024];
|
|
+ char *stats, *start = line;
|
|
+ int len, rc;
|
|
+ int scan_count;
|
|
+ uintmax_t scan_val;
|
|
+
|
|
/*
|
|
* This file provides the statistics for each systemstats.
|
|
* Read in each line in turn, isolate the systemstats name
|
|
* and retrieve (or create) the corresponding data structure.
|
|
*/
|
|
+ rc = 0;
|
|
while (1) {
|
|
start = fgets(line, sizeof(line), devin);
|
|
if (NULL == start)
|
|
@@ -283,77 +390,101 @@ _systemstats_v6(netsnmp_container* container, u_int load_flags)
|
|
* data structure accordingly.
|
|
*/
|
|
scan_val = atoll(stats);
|
|
- if (0 == scan_val)
|
|
- continue;
|
|
|
|
rc = 0;
|
|
if ('I' == line[3]) { /* In */
|
|
if ('A' == line[5]) {
|
|
entry->stats.InAddrErrors = scan_val;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_INADDRERRORS] = 1;
|
|
} else if ('D' == line[5]) {
|
|
if ('e' == line[6]) {
|
|
entry->stats.HCInDelivers.low = scan_val & 0xffffffff;
|
|
entry->stats.HCInDelivers.high = scan_val >> 32;
|
|
- } else if ('i' == line[6])
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINDELIVERS] = 1;
|
|
+ } else if ('i' == line[6]) {
|
|
entry->stats.InDiscards = scan_val;
|
|
- else
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_INDISCARDS] = 1;
|
|
+ } else
|
|
rc = 1;
|
|
} else if ('H' == line[5]) {
|
|
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;
|
|
} else if ('N' == line[5]) {
|
|
- entry->stats.InNoRoutes = scan_val;
|
|
+ entry->stats.HCInNoRoutes.low = scan_val & 0xffffffff;
|
|
+ entry->stats.HCInNoRoutes.high = scan_val >> 32;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINNOROUTES] = 1;
|
|
} else if ('R' == line[5]) {
|
|
entry->stats.HCInReceives.low = scan_val & 0xffffffff;
|
|
entry->stats.HCInReceives.high = scan_val >> 32;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINRECEIVES] = 1;
|
|
} else if ('T' == line[5]) {
|
|
if ('r' == line[6]) {
|
|
entry->stats.InTruncatedPkts = scan_val & 0xffffffff;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_INTRUNCATEDPKTS] = 1;
|
|
} else if ('o' == line[6])
|
|
; /* TooBig isn't in the MIB, so ignore it */
|
|
else
|
|
rc = 1;
|
|
} else if ('U' == line[5]) {
|
|
entry->stats.InUnknownProtos = scan_val;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_INUNKNOWNPROTOS] = 1;
|
|
} else
|
|
rc = 1;
|
|
} else if ('O' == line[3]) { /* Out */
|
|
if ('D' == line[6]) {
|
|
- entry->stats.OutDiscards = scan_val;
|
|
+ entry->stats.HCOutDiscards.low = scan_val & 0xffffffff;
|
|
+ entry->stats.HCOutDiscards.high = scan_val >> 32;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTDISCARDS] = 1;
|
|
} else if ('F' == line[6]) {
|
|
entry->stats.HCOutForwDatagrams.low = scan_val & 0xffffffff;
|
|
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;
|
|
} else if ('N' == line[6]) {
|
|
- entry->stats.OutNoRoutes = scan_val;
|
|
+ entry->stats.HCOutNoRoutes.low = scan_val & 0xffffffff;
|
|
+ entry->stats.HCOutNoRoutes.high = scan_val >> 32;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTNOROUTES] = 1;
|
|
} else if ('R' == line[6]) {
|
|
entry->stats.HCOutRequests.low = scan_val & 0xffffffff;
|
|
entry->stats.HCOutRequests.high = scan_val >> 32;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTREQUESTS] = 1;
|
|
} else
|
|
rc = 1;
|
|
} else if ('R' == line[3]) { /* Reasm */
|
|
if ('F' == line[8]) {
|
|
entry->stats.ReasmFails = scan_val;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_REASMFAILS] = 1;
|
|
} else if ('O' == line[8]) {
|
|
entry->stats.ReasmOKs = scan_val;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_REASMOKS] = 1;
|
|
} else if ('R' == line[8]) {
|
|
entry->stats.ReasmReqds = scan_val;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_REASMREQDS] = 1;
|
|
} else if ('T' == line[8]) {
|
|
; /* no mib entry for reasm timeout */
|
|
} else
|
|
rc = 1;
|
|
} else if ('F' == line[3]) { /* Frag */
|
|
- if ('C' == line[7])
|
|
- entry->stats.OutFragCreates = scan_val;
|
|
- else if ('O' == line[7])
|
|
- entry->stats.OutFragOKs = scan_val;
|
|
- else if ('F' == line[7])
|
|
- entry->stats.OutFragFails = scan_val;
|
|
- else
|
|
+ if ('C' == line[7]) {
|
|
+ entry->stats.HCOutFragCreates.low = scan_val & 0xffffffff;
|
|
+ entry->stats.HCOutFragCreates.high = scan_val >> 32;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGCREATES] = 1;
|
|
+ } else if ('O' == line[7]) {
|
|
+ entry->stats.HCOutFragOKs.low = scan_val & 0xffffffff;
|
|
+ entry->stats.HCOutFragOKs.high = scan_val >> 32;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGOKS] = 1;
|
|
+ } else if ('F' == line[7]) {
|
|
+ entry->stats.HCOutFragFails.low = scan_val & 0xffffffff;
|
|
+ entry->stats.HCOutFragFails.high = scan_val >> 32;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGFAILS] = 1;
|
|
+ } else
|
|
rc = 1;
|
|
} else
|
|
rc = 1;
|
|
@@ -363,6 +494,47 @@ _systemstats_v6(netsnmp_container* container, u_int load_flags)
|
|
else
|
|
++scan_count;
|
|
}
|
|
+ /*
|
|
+ * Let DiscontinuityTime and RefreshRate active
|
|
+ */
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_DISCONTINUITYTIME] = 1;
|
|
+ entry->stats.columnAvail[IPSYSTEMSTATSTABLE_REFRESHRATE] = 1;
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * load ipSystemStatsTable for ipv6 entries
|
|
+ */
|
|
+static int
|
|
+_systemstats_v6_load_systemstats(netsnmp_container* container, u_int load_flags)
|
|
+{
|
|
+ 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);
|
|
+ if(NULL == entry)
|
|
+ return -3;
|
|
+
|
|
+ /*
|
|
+ * try to open file. If we can't, that's ok - maybe the module hasn't
|
|
+ * been loaded yet.
|
|
+ */
|
|
+ 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);
|
|
+ }
|
|
+ free(entry);
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
+ rc = _systemstats_v6_load_file(entry, devin);
|
|
|
|
fclose(devin);
|
|
|
|
@@ -373,4 +545,119 @@ _systemstats_v6(netsnmp_container* container, u_int load_flags)
|
|
|
|
return rc;
|
|
}
|
|
+
|
|
+#define DEV_SNMP6_DIRNAME "/proc/net/dev_snmp6"
|
|
+#define IFINDEX_LINE "ifIndex"
|
|
+#define DEV_FILENAME_LEN 64
|
|
+
|
|
+/*
|
|
+ * load ipIfStatsTable for ipv6 entries
|
|
+ */
|
|
+static int
|
|
+_systemstats_v6_load_ifstats(netsnmp_container* container, u_int load_flags)
|
|
+{
|
|
+ DIR *dev_snmp6_dir;
|
|
+ struct dirent *dev_snmp6_entry;
|
|
+ char dev_filename[DEV_FILENAME_LEN];
|
|
+ FILE *devin;
|
|
+ char line[1024];
|
|
+ char *stats, *start = line;
|
|
+ int rc;
|
|
+ char *scan_str;
|
|
+ uintmax_t scan_val;
|
|
+ netsnmp_systemstats_entry *entry = NULL;
|
|
+
|
|
+ /*
|
|
+ * try to open /proc/net/dev_snmp6 directory. If we can't, that' ok -
|
|
+ * maybe it is not supported by the current running kernel.
|
|
+ */
|
|
+ if ((dev_snmp6_dir = opendir(DEV_SNMP6_DIRNAME)) == NULL) {
|
|
+ DEBUGMSGTL(("access:ifstats",
|
|
+ "Failed to load IPv6 IfStats Table (linux)\n"));
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * Read each per interface statistics proc file
|
|
+ */
|
|
+ rc = 0;
|
|
+ while ((dev_snmp6_entry = readdir(dev_snmp6_dir)) != NULL) {
|
|
+ if (dev_snmp6_entry->d_name[0] == '.')
|
|
+ continue;
|
|
+
|
|
+ if (snprintf(dev_filename, DEV_FILENAME_LEN, "%s/%s", DEV_SNMP6_DIRNAME,
|
|
+ dev_snmp6_entry->d_name) > DEV_FILENAME_LEN) {
|
|
+ snmp_log(LOG_ERR, "Interface name %s is too long\n",
|
|
+ dev_snmp6_entry->d_name);
|
|
+ continue;
|
|
+ }
|
|
+ if (NULL == (devin = fopen(dev_filename, "r"))) {
|
|
+ snmp_log(LOG_ERR, "Failed to open %s\n", dev_filename);
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * If a stat file name is made of digits, the name is interface index.
|
|
+ * If it is an interface name, the file includes a line labeled ifIndex.
|
|
+ */
|
|
+ if (isdigit(dev_snmp6_entry->d_name[0])) {
|
|
+ scan_val = strtoull(dev_snmp6_entry->d_name, NULL, 0);
|
|
+ } else {
|
|
+ if (NULL == (start = fgets(line, sizeof(line), devin))) {
|
|
+ snmp_log(LOG_ERR, "%s doesn't include any lines\n",
|
|
+ dev_filename);
|
|
+ fclose(devin);
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ if (0 != strncmp(start, IFINDEX_LINE, 7)) {
|
|
+ snmp_log(LOG_ERR, "%s doesn't include ifIndex line",
|
|
+ dev_filename);
|
|
+ fclose(devin);
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ scan_str = strrchr(line, ' ');
|
|
+ if (NULL == scan_str) {
|
|
+ snmp_log(LOG_ERR, "%s is wrong format", dev_filename);
|
|
+ fclose(devin);
|
|
+ continue;
|
|
+ }
|
|
+ scan_val = strtoull(scan_str, NULL, 0);
|
|
+ }
|
|
+
|
|
+ entry = netsnmp_access_systemstats_entry_create(2, scan_val);
|
|
+ if(NULL == entry) {
|
|
+ fclose(devin);
|
|
+ closedir(dev_snmp6_dir);
|
|
+ return -3;
|
|
+ }
|
|
+
|
|
+ _systemstats_v6_load_file(entry, devin);
|
|
+ CONTAINER_INSERT(container, entry);
|
|
+ fclose(devin);
|
|
+ }
|
|
+ closedir(dev_snmp6_dir);
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * Based on load_flags, load ipSystemStatsTable or ipIfStatsTable for ipv6 entries.
|
|
+ */
|
|
+static int
|
|
+_systemstats_v6(netsnmp_container* container, u_int load_flags)
|
|
+{
|
|
+ DEBUGMSGTL(("access:systemstats:container:arch", "load v6 (flags %p)\n",
|
|
+ load_flags));
|
|
+
|
|
+ netsnmp_assert(container != NULL); /* load function shoulda checked this */
|
|
+
|
|
+ if (load_flags & NETSNMP_ACCESS_SYSTEMSTATS_LOAD_IFTABLE) {
|
|
+ /* load ipIfStatsTable */
|
|
+ return _systemstats_v6_load_ifstats(container, load_flags);
|
|
+ } else {
|
|
+ /* load ipSystemStatsTable */
|
|
+ return _systemstats_v6_load_systemstats(container, load_flags);
|
|
+ }
|
|
+}
|
|
#endif /* NETSNMP_ENABLE_IPV6 */
|
|
diff --git a/agent/mibgroup/ip-mib/ipIfStatsTable.h b/agent/mibgroup/ip-mib/ipIfStatsTable.h
|
|
new file mode 100644
|
|
index 0000000..da1d85c
|
|
--- /dev/null
|
|
+++ b/agent/mibgroup/ip-mib/ipIfStatsTable.h
|
|
@@ -0,0 +1,8 @@
|
|
+/*
|
|
+ * module to include the modules
|
|
+ */
|
|
+
|
|
+config_require(ip-mib/data_access/systemstats)
|
|
+config_require(ip-mib/ipIfStatsTable/ipIfStatsTable)
|
|
+config_require(ip-mib/ipIfStatsTable/ipIfStatsTable_interface)
|
|
+config_require(ip-mib/ipIfStatsTable/ipIfStatsTable_data_access)
|
|
diff --git a/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable.c b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable.c
|
|
new file mode 100644
|
|
index 0000000..6af3529
|
|
--- /dev/null
|
|
+++ b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable.c
|
|
@@ -0,0 +1,216 @@
|
|
+/*
|
|
+ * Note: this file originally auto-generated by mib2c using
|
|
+ * version : 14170 $ of $
|
|
+ *
|
|
+ * $Id:$
|
|
+ */
|
|
+/** \page MFD helper for ipIfStatsTable
|
|
+ *
|
|
+ * \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 "ipIfStatsTable.h"
|
|
+
|
|
+#include <net-snmp/agent/mib_modules.h>
|
|
+
|
|
+#include "ipIfStatsTable_interface.h"
|
|
+
|
|
+oid ipIfStatsTable_oid[] = { IPIFSTATSTABLE_OID };
|
|
+int ipIfStatsTable_oid_size = OID_LENGTH(ipIfStatsTable_oid);
|
|
+
|
|
+ipIfStatsTable_registration ipIfStatsTable_user_context;
|
|
+
|
|
+void initialize_table_ipIfStatsTable(void);
|
|
+void shutdown_table_ipIfStatsTable(void);
|
|
+
|
|
+
|
|
+/**
|
|
+ * Initializes the ipIfStatsTable module
|
|
+ */
|
|
+void
|
|
+init_ipIfStatsTable(void)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:init_ipIfStatsTable", "called\n"));
|
|
+
|
|
+ /*
|
|
+ * TODO:300:o: Perform ipIfStatsTable one-time module initialization.
|
|
+ */
|
|
+
|
|
+ /*
|
|
+ * here we initialize all the tables we're planning on supporting
|
|
+ */
|
|
+ if (should_init("ipIfStatsTable"))
|
|
+ initialize_table_ipIfStatsTable();
|
|
+
|
|
+ /*
|
|
+ * last changed should be 0 at startup
|
|
+ */
|
|
+ ipIfStatsTable_lastChange_set(0);
|
|
+} /* init_ipIfStatsTable */
|
|
+
|
|
+/**
|
|
+ * Shut-down the ipIfStatsTable module (agent is exiting)
|
|
+ */
|
|
+void
|
|
+shutdown_ipIfStatsTable(void)
|
|
+{
|
|
+ if (should_init("ipIfStatsTable"))
|
|
+ shutdown_table_ipIfStatsTable();
|
|
+
|
|
+}
|
|
+
|
|
+/**
|
|
+ * Initialize the table ipIfStatsTable
|
|
+ * (Define its contents and how it's structured)
|
|
+ */
|
|
+void
|
|
+initialize_table_ipIfStatsTable(void)
|
|
+{
|
|
+ ipIfStatsTable_registration *user_context;
|
|
+ u_long flags;
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:initialize_table_ipIfStatsTable",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * TODO:301:o: Perform ipIfStatsTable one-time table initialization.
|
|
+ */
|
|
+
|
|
+ /*
|
|
+ * TODO:302:o: |->Initialize ipIfStatsTable 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("ipIfStatsTable", NULL, NULL);
|
|
+
|
|
+ /*
|
|
+ * No support for any flags yet, but in the future you would
|
|
+ * set any flags here.
|
|
+ */
|
|
+ flags = 0;
|
|
+
|
|
+ /*
|
|
+ * call interface initialization code
|
|
+ */
|
|
+ _ipIfStatsTable_initialize_interface(user_context, flags);
|
|
+} /* initialize_table_ipIfStatsTable */
|
|
+
|
|
+/**
|
|
+ * Shutdown the table ipIfStatsTable
|
|
+ */
|
|
+void
|
|
+shutdown_table_ipIfStatsTable(void)
|
|
+{
|
|
+ /*
|
|
+ * call interface shutdown code
|
|
+ */
|
|
+ _ipIfStatsTable_shutdown_interface(&ipIfStatsTable_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
|
|
+ipIfStatsTable_rowreq_ctx_init(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ void *user_init_ctx)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsTable_rowreq_ctx_init",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:210:o: |-> Perform extra ipIfStatsTable rowreq initialization. (eg DEFVALS)
|
|
+ */
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsTable_rowreq_ctx_init */
|
|
+
|
|
+/**
|
|
+ * extra context cleanup
|
|
+ *
|
|
+ */
|
|
+void
|
|
+ipIfStatsTable_rowreq_ctx_cleanup(ipIfStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsTable_rowreq_ctx_cleanup",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:211:o: |-> Perform extra ipIfStatsTable rowreq cleanup.
|
|
+ */
|
|
+} /* ipIfStatsTable_rowreq_ctx_cleanup */
|
|
+
|
|
+/**
|
|
+ * pre-request callback
|
|
+ *
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success.
|
|
+ * @retval MFD_ERROR : other error
|
|
+ */
|
|
+int
|
|
+ipIfStatsTable_pre_request(ipIfStatsTable_registration * user_context)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsTable_pre_request",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * TODO:510:o: Perform ipIfStatsTable pre-request actions.
|
|
+ */
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsTable_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
|
|
+ipIfStatsTable_post_request(ipIfStatsTable_registration * user_context,
|
|
+ int rc)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsTable_post_request",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * TODO:511:o: Perform ipIfStatsTable post-request actions.
|
|
+ */
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsTable_post_request */
|
|
+
|
|
+
|
|
+/** @{ */
|
|
diff --git a/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable.h b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable.h
|
|
new file mode 100644
|
|
index 0000000..8bf0a7a
|
|
--- /dev/null
|
|
+++ b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable.h
|
|
@@ -0,0 +1,200 @@
|
|
+/*
|
|
+ * Note: this file originally auto-generated by mib2c using
|
|
+ * version : 14170 $ of $
|
|
+ *
|
|
+ * $Id:$
|
|
+ */
|
|
+#ifndef IPIFSTATSTABLE_H
|
|
+#define IPIFSTATSTABLE_H
|
|
+
|
|
+#ifdef __cplusplus
|
|
+extern "C" {
|
|
+#endif
|
|
+
|
|
+
|
|
+/** @addtogroup misc misc: Miscellaneous routines
|
|
+ *
|
|
+ * @{
|
|
+ */
|
|
+#include <net-snmp/library/asn1.h>
|
|
+#include <net-snmp/data_access/ipstats.h>
|
|
+#include <net-snmp/data_access/systemstats.h>
|
|
+
|
|
+ /*
|
|
+ * other required module components
|
|
+ */
|
|
+ /* *INDENT-OFF* */
|
|
+config_require(ip-mib/ipIfStatsTable/ipIfStatsTable_interface)
|
|
+config_require(ip-mib/ipIfStatsTable/ipIfStatsTable_data_access)
|
|
+config_require(ip-mib/ipIfStatsTable/ipIfStatsTable_data_get)
|
|
+ /* *INDENT-ON* */
|
|
+
|
|
+ /*
|
|
+ * OID and column number definitions for ipIfStatsTable
|
|
+ */
|
|
+#include "ipIfStatsTable_oids.h"
|
|
+
|
|
+ /*
|
|
+ * enum definions
|
|
+ */
|
|
+#include "ipIfStatsTable_enums.h"
|
|
+
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * function declarations
|
|
+ */
|
|
+ void init_ipIfStatsTable(void);
|
|
+ void shutdown_ipIfStatsTable(void);
|
|
+
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * Table declarations
|
|
+ */
|
|
+/**********************************************************************
|
|
+ **********************************************************************
|
|
+ ***
|
|
+ *** Table ipIfStatsTable
|
|
+ ***
|
|
+ **********************************************************************
|
|
+ **********************************************************************/
|
|
+ /*
|
|
+ * IP-MIB::ipIfStatsTable is subid 3 of ipTrafficStats.
|
|
+ * Its status is Current.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3, 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 ipIfStatsTable registration context.
|
|
+ */
|
|
+ typedef netsnmp_data_list ipIfStatsTable_registration;
|
|
+
|
|
+/**********************************************************************/
|
|
+ /*
|
|
+ * TODO:110:r: |-> Review ipIfStatsTable data context structure.
|
|
+ * This structure is used to represent the data for ipIfStatsTable.
|
|
+ */
|
|
+ typedef netsnmp_systemstats_entry ipIfStatsTable_data;
|
|
+
|
|
+
|
|
+ /*
|
|
+ * TODO:120:r: |-> Review ipIfStatsTable mib index.
|
|
+ * This structure is used to represent the index for ipIfStatsTable.
|
|
+ */
|
|
+ typedef struct ipIfStatsTable_mib_index_s {
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsIPVersion(1)/InetVersion/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
|
|
+ */
|
|
+ u_long ipIfStatsIPVersion;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsIfIndex(2)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
|
|
+ */
|
|
+ long ipIfStatsIfIndex;
|
|
+
|
|
+
|
|
+ } ipIfStatsTable_mib_index;
|
|
+
|
|
+ /*
|
|
+ * TODO:121:r: | |-> Review ipIfStatsTable max index length.
|
|
+ * If you KNOW that your indexes will never exceed a certain
|
|
+ * length, update this macro to that length.
|
|
+ */
|
|
+#define MAX_ipIfStatsTable_IDX_LEN 2
|
|
+
|
|
+
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * TODO:130:o: |-> Review ipIfStatsTable Row request (rowreq) context.
|
|
+ * When your functions are called, you will be passed a
|
|
+ * ipIfStatsTable_rowreq_ctx pointer.
|
|
+ */
|
|
+ typedef struct ipIfStatsTable_rowreq_ctx_s {
|
|
+
|
|
+ /** this must be first for container compare to work */
|
|
+ netsnmp_index oid_idx;
|
|
+ oid oid_tmp[MAX_ipIfStatsTable_IDX_LEN];
|
|
+
|
|
+ ipIfStatsTable_mib_index tbl_idx;
|
|
+
|
|
+ ipIfStatsTable_data *data;
|
|
+
|
|
+ /*
|
|
+ * 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 ipIfStatsTable rowreq context.
|
|
+ */
|
|
+ char known_missing;
|
|
+ uint32_t ipIfStatsDiscontinuityTime;
|
|
+ uint32_t ipIfStatsRefreshRate;
|
|
+
|
|
+ /*
|
|
+ * storage for future expansion
|
|
+ */
|
|
+ netsnmp_data_list *ipIfStatsTable_data_list;
|
|
+
|
|
+ } ipIfStatsTable_rowreq_ctx;
|
|
+
|
|
+ typedef struct ipIfStatsTable_ref_rowreq_ctx_s {
|
|
+ ipIfStatsTable_rowreq_ctx *rowreq_ctx;
|
|
+ } ipIfStatsTable_ref_rowreq_ctx;
|
|
+
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * function prototypes
|
|
+ */
|
|
+ int ipIfStatsTable_pre_request(ipIfStatsTable_registration
|
|
+ * user_context);
|
|
+ int ipIfStatsTable_post_request(ipIfStatsTable_registration
|
|
+ * user_context, int rc);
|
|
+
|
|
+ int
|
|
+ ipIfStatsTable_rowreq_ctx_init(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx, void *user_init_ctx);
|
|
+ void
|
|
+ ipIfStatsTable_rowreq_ctx_cleanup(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ ipIfStatsTable_data *ipIfStatsTable_allocate_data(void);
|
|
+ void ipIfStatsTable_release_data(ipIfStatsTable_data *
|
|
+ data);
|
|
+
|
|
+
|
|
+ ipIfStatsTable_rowreq_ctx
|
|
+ *ipIfStatsTable_row_find_by_mib_index(ipIfStatsTable_mib_index *
|
|
+ mib_idx);
|
|
+
|
|
+ extern oid ipIfStatsTable_oid[];
|
|
+ extern int ipIfStatsTable_oid_size;
|
|
+
|
|
+
|
|
+#include "ipIfStatsTable_interface.h"
|
|
+#include "ipIfStatsTable_data_access.h"
|
|
+#include "ipIfStatsTable_data_get.h"
|
|
+
|
|
+ /*
|
|
+ * DUMMY markers, ignore
|
|
+ *
|
|
+ * TODO:099:x: *************************************************************
|
|
+ * TODO:199:x: *************************************************************
|
|
+ * TODO:299:x: *************************************************************
|
|
+ * TODO:399:x: *************************************************************
|
|
+ * TODO:499:x: *************************************************************
|
|
+ */
|
|
+
|
|
+#ifdef __cplusplus
|
|
+}
|
|
+#endif
|
|
+#endif /* IPIFSTATSTABLE_H */
|
|
+/** @} */
|
|
diff --git a/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_access.c b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_access.c
|
|
new file mode 100644
|
|
index 0000000..f2ec1a1
|
|
--- /dev/null
|
|
+++ b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_access.c
|
|
@@ -0,0 +1,408 @@
|
|
+/*
|
|
+ * 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 "ipIfStatsTable.h"
|
|
+
|
|
+
|
|
+#include "ipIfStatsTable_data_access.h"
|
|
+
|
|
+static int ipis_cache_refresh = IPIFSTATSTABLE_CACHE_TIMEOUT;
|
|
+
|
|
+/** @ingroup interface
|
|
+ * @addtogroup data_access data_access: Routines to access data
|
|
+ *
|
|
+ * These routines are used to locate the data used to satisfy
|
|
+ * requests.
|
|
+ *
|
|
+ * @{
|
|
+ */
|
|
+/**********************************************************************
|
|
+ **********************************************************************
|
|
+ ***
|
|
+ *** Table ipIfStatsTable
|
|
+ ***
|
|
+ **********************************************************************
|
|
+ **********************************************************************/
|
|
+/*
|
|
+ * IP-MIB::ipIfStatsTable is subid 3 of ipTrafficStats.
|
|
+ * Its status is Current.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3, length: 9
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * initialization for ipIfStatsTable data access
|
|
+ *
|
|
+ * This function is called during startup to allow you to
|
|
+ * allocate any resources you need for the data table.
|
|
+ *
|
|
+ * @param ipIfStatsTable_reg
|
|
+ * Pointer to ipIfStatsTable_registration
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success.
|
|
+ * @retval MFD_ERROR : unrecoverable error.
|
|
+ */
|
|
+int
|
|
+ipIfStatsTable_init_data(ipIfStatsTable_registration * ipIfStatsTable_reg)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsTable_init_data",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * TODO:303:o: Initialize ipIfStatsTable data.
|
|
+ */
|
|
+ netsnmp_access_systemstats_init();
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsTable_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
|
|
+ipIfStatsTable_container_init(netsnmp_container ** container_ptr_ptr,
|
|
+ netsnmp_cache * cache)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsTable_container_init",
|
|
+ "called\n"));
|
|
+
|
|
+ if (NULL == container_ptr_ptr) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "bad container param to ipIfStatsTable_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.
|
|
+ */
|
|
+ /*
|
|
+ * We create a custom container here so we can pre-load it, which
|
|
+ * will result in all new entries with last changed values. we need
|
|
+ * to clear those... We also need to make sure ifIndexes have been
|
|
+ * assigned...
|
|
+ */
|
|
+ *container_ptr_ptr =
|
|
+ netsnmp_container_find("ipIfStatsTable:table_container");
|
|
+ if (NULL != *container_ptr_ptr)
|
|
+ ipIfStatsTable_container_load(*container_ptr_ptr);
|
|
+ if (NULL == cache) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "bad cache param to ipIfStatsTable_container_init\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * TODO:345:A: Set up ipIfStatsTable 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 = IPIFSTATSTABLE_CACHE_TIMEOUT; /* seconds */
|
|
+
|
|
+ cache->flags |=
|
|
+ (NETSNMP_CACHE_DONT_AUTO_RELEASE | NETSNMP_CACHE_DONT_FREE_EXPIRED
|
|
+ | NETSNMP_CACHE_DONT_FREE_BEFORE_LOAD |
|
|
+ NETSNMP_CACHE_AUTO_RELOAD);
|
|
+} /* ipIfStatsTable_container_init */
|
|
+
|
|
+/**
|
|
+ * check entry for update
|
|
+ */
|
|
+static void
|
|
+_check_for_updates(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ netsnmp_container *stats)
|
|
+{
|
|
+ netsnmp_systemstats_entry *ifstats_entry;
|
|
+
|
|
+ /*
|
|
+ * check for matching entry. works because indexes are the same.
|
|
+ */
|
|
+ ifstats_entry = CONTAINER_FIND(stats, rowreq_ctx->data);
|
|
+ if (NULL == ifstats_entry) {
|
|
+ DEBUGMSGTL(("ipIfStatsTable:access",
|
|
+ "updating missing entry\n"));
|
|
+
|
|
+ /*
|
|
+ * mark row as missing, so we can set discontinuity
|
|
+ * when it comes back.
|
|
+ *
|
|
+ * what else should we do? set refresh to 0? that's not quite right...
|
|
+ */
|
|
+ rowreq_ctx->known_missing = 1;
|
|
+ } else {
|
|
+ DEBUGMSGTL(("ipIfStatsTable:access",
|
|
+ "updating existing entry\n"));
|
|
+
|
|
+ /*
|
|
+ * Check for changes & update
|
|
+ */
|
|
+ netsnmp_access_systemstats_entry_update(rowreq_ctx->data,
|
|
+ ifstats_entry);
|
|
+
|
|
+ /*
|
|
+ * set discontinuity if previously missing.
|
|
+ */
|
|
+ if (1 == rowreq_ctx->known_missing) {
|
|
+ rowreq_ctx->known_missing = 0;
|
|
+ rowreq_ctx->ipIfStatsDiscontinuityTime =
|
|
+ netsnmp_get_agent_uptime();
|
|
+ ipIfStatsTable_lastChange_set(netsnmp_get_agent_uptime());
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * remove entry from container
|
|
+ */
|
|
+ CONTAINER_REMOVE(stats, ifstats_entry);
|
|
+ netsnmp_access_systemstats_entry_free(ifstats_entry);
|
|
+ }
|
|
+}
|
|
+
|
|
+/**
|
|
+ * add new entry
|
|
+ */
|
|
+static void
|
|
+_add_new(netsnmp_systemstats_entry *ifstats_entry,
|
|
+ netsnmp_container *container)
|
|
+{
|
|
+ ipIfStatsTable_rowreq_ctx *rowreq_ctx;
|
|
+
|
|
+ DEBUGMSGTL(("ipIfStatsTable:access", "creating new entry\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != ifstats_entry);
|
|
+ netsnmp_assert(NULL != container);
|
|
+
|
|
+ /*
|
|
+ * allocate an row context and set the index(es)
|
|
+ */
|
|
+ rowreq_ctx =
|
|
+ ipIfStatsTable_allocate_rowreq_ctx(ifstats_entry, NULL);
|
|
+ if ((NULL != rowreq_ctx)
|
|
+ && (MFD_SUCCESS ==
|
|
+ ipIfStatsTable_indexes_set(rowreq_ctx,
|
|
+ ifstats_entry->index[0],
|
|
+ ifstats_entry->index[1]))) {
|
|
+ rowreq_ctx->ipIfStatsRefreshRate = ipis_cache_refresh * 1000; /* milli-seconds */
|
|
+ CONTAINER_INSERT(container, rowreq_ctx);
|
|
+ ipIfStatsTable_lastChange_set(netsnmp_get_agent_uptime());
|
|
+ } else {
|
|
+ if (NULL != rowreq_ctx) {
|
|
+ snmp_log(LOG_ERR, "error setting index while loading "
|
|
+ "ipIfStatsTable cache.\n");
|
|
+ ipIfStatsTable_release_rowreq_ctx(rowreq_ctx);
|
|
+ } else {
|
|
+ snmp_log(LOG_ERR, "memory allocation failed while loading "
|
|
+ "ipIfStatsTable cache.\n");
|
|
+ netsnmp_access_systemstats_entry_free(ifstats_entry);
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+/**
|
|
+ * 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 ipIfStatsTable_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
|
|
+ipIfStatsTable_container_shutdown(netsnmp_container * container_ptr)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsTable_container_shutdown",
|
|
+ "called\n"));
|
|
+
|
|
+ if (NULL == container_ptr) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "bad params to ipIfStatsTable_container_shutdown\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+} /* ipIfStatsTable_container_shutdown */
|
|
+
|
|
+/**
|
|
+ * load initial data
|
|
+ *
|
|
+ * TODO:350:M: Implement ipIfStatsTable 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
|
|
+ * ipIfStatsTable_row_prep() for populating data.
|
|
+ *
|
|
+ * @note
|
|
+ * If you need consistency between rows (like you want statistics
|
|
+ * for each row to be from the same time frame), you should set all
|
|
+ * data here.
|
|
+ *
|
|
+ */
|
|
+int
|
|
+ipIfStatsTable_container_load(netsnmp_container * container)
|
|
+{
|
|
+ netsnmp_container *stats;
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsTable_container_load",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != container);
|
|
+
|
|
+ stats = netsnmp_access_systemstats_container_load(NULL, NETSNMP_ACCESS_SYSTEMSTATS_LOAD_IFTABLE);
|
|
+ if (NULL == stats)
|
|
+ return MFD_RESOURCE_UNAVAILABLE; /* msg already logged */
|
|
+
|
|
+ /*
|
|
+ * TODO:351:M: |-> Load/update data in the ipIfStatsTable container.
|
|
+ * loop over your ipIfStatsTable data, allocate a rowreq context,
|
|
+ * set the index(es) [and data, optionally] and insert into
|
|
+ * the container.
|
|
+ */
|
|
+
|
|
+ /*
|
|
+ * we just got a fresh copy of data. compare it to
|
|
+ * what we've already got, and make any adjustements...
|
|
+ */
|
|
+ CONTAINER_FOR_EACH(container, (netsnmp_container_obj_func *)
|
|
+ _check_for_updates, stats);
|
|
+
|
|
+ /*
|
|
+ * now add any new entries
|
|
+ */
|
|
+ CONTAINER_FOR_EACH(stats, (netsnmp_container_obj_func *)
|
|
+ _add_new, container);
|
|
+
|
|
+
|
|
+ /*
|
|
+ * free the container. we've either claimed each ifentry, or released it,
|
|
+ * so the dal function doesn't need to clear the container.
|
|
+ */
|
|
+ netsnmp_access_systemstats_container_free(stats,
|
|
+ NETSNMP_ACCESS_SYSTEMSTATS_FREE_DONT_CLEAR);
|
|
+
|
|
+ DEBUGMSGT(("verbose:ipIfStatsTable:ipIfStatsTable_container_load",
|
|
+ "%d records\n", CONTAINER_SIZE(container)));
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsTable_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
|
|
+ipIfStatsTable_container_free(netsnmp_container * container)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsTable_container_free",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * TODO:380:M: Free ipIfStatsTable container data.
|
|
+ */
|
|
+} /* ipIfStatsTable_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
|
|
+ipIfStatsTable_row_prep(ipIfStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsTable_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;
|
|
+} /* ipIfStatsTable_row_prep */
|
|
+
|
|
+/** @} */
|
|
diff --git a/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_access.h b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_access.h
|
|
new file mode 100644
|
|
index 0000000..5ef7682
|
|
--- /dev/null
|
|
+++ b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_access.h
|
|
@@ -0,0 +1,70 @@
|
|
+/*
|
|
+ * Note: this file originally auto-generated by mib2c using
|
|
+ * version : 14170 $ of $
|
|
+ *
|
|
+ * $Id:$
|
|
+ */
|
|
+#ifndef IPIFSTATSTABLE_DATA_ACCESS_H
|
|
+#define IPIFSTATSTABLE_DATA_ACCESS_H
|
|
+
|
|
+#ifdef __cplusplus
|
|
+extern "C" {
|
|
+#endif
|
|
+
|
|
+
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * function declarations
|
|
+ */
|
|
+
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * Table declarations
|
|
+ */
|
|
+/**********************************************************************
|
|
+ **********************************************************************
|
|
+ ***
|
|
+ *** Table ipIfStatsTable
|
|
+ ***
|
|
+ **********************************************************************
|
|
+ **********************************************************************/
|
|
+ /*
|
|
+ * IP-MIB::ipIfStatsTable is subid 3 of ipTrafficStats.
|
|
+ * Its status is Current.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3, length: 9
|
|
+ */
|
|
+
|
|
+
|
|
+ int ipIfStatsTable_init_data(ipIfStatsTable_registration *
|
|
+ ipIfStatsTable_reg);
|
|
+
|
|
+
|
|
+ /*
|
|
+ * TODO:180:o: Review ipIfStatsTable cache timeout.
|
|
+ * The number of seconds before the cache times out
|
|
+ */
|
|
+#define IPIFSTATSTABLE_CACHE_TIMEOUT 60
|
|
+
|
|
+ void ipIfStatsTable_container_init(netsnmp_container **
|
|
+ container_ptr_ptr,
|
|
+ netsnmp_cache * cache);
|
|
+ void ipIfStatsTable_container_shutdown(netsnmp_container *
|
|
+ container_ptr);
|
|
+
|
|
+ int ipIfStatsTable_container_load(netsnmp_container *
|
|
+ container);
|
|
+ void ipIfStatsTable_container_free(netsnmp_container *
|
|
+ container);
|
|
+
|
|
+ int ipIfStatsTable_cache_load(netsnmp_container *
|
|
+ container);
|
|
+ void ipIfStatsTable_cache_free(netsnmp_container *
|
|
+ container);
|
|
+
|
|
+ int ipIfStatsTable_row_prep(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+#ifdef __cplusplus
|
|
+}
|
|
+#endif
|
|
+#endif /* IPIFSTATSTABLE_DATA_ACCESS_H */
|
|
diff --git a/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.c b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.c
|
|
new file mode 100644
|
|
index 0000000..db673dc
|
|
--- /dev/null
|
|
+++ b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.c
|
|
@@ -0,0 +1,3015 @@
|
|
+/*
|
|
+ * 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 "ipIfStatsTable.h"
|
|
+
|
|
+
|
|
+/** @defgroup data_get data_get: Routines to get data
|
|
+ *
|
|
+ * TODO:230:M: Implement ipIfStatsTable get routines.
|
|
+ * TODO:240:M: Implement ipIfStatsTable 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 ipIfStatsTable
|
|
+ ***
|
|
+ **********************************************************************
|
|
+ **********************************************************************/
|
|
+/*
|
|
+ * IP-MIB::ipIfStatsTable is subid 3 of ipTrafficStats.
|
|
+ * Its status is Current.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3, length: 9
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * ---------------------------------------------------------------------
|
|
+ * * TODO:200:r: Implement ipIfStatsTable data context functions.
|
|
+ */
|
|
+/*
|
|
+ * ipIfStatsTable_allocate_data
|
|
+ *
|
|
+ * Purpose: create new ipIfStatsTable_data.
|
|
+ */
|
|
+ipIfStatsTable_data *
|
|
+ipIfStatsTable_allocate_data(void)
|
|
+{
|
|
+ /*
|
|
+ * TODO:201:r: |-> allocate memory for the ipIfStatsTable data context.
|
|
+ */
|
|
+ ipIfStatsTable_data *rtn = SNMP_MALLOC_TYPEDEF(ipIfStatsTable_data);
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsTable_allocate_data",
|
|
+ "called\n"));
|
|
+
|
|
+ if (NULL == rtn) {
|
|
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
|
|
+ "ipIfStatsTable_data.\n");
|
|
+ }
|
|
+
|
|
+ return rtn;
|
|
+} /* ipIfStatsTable_allocate_data */
|
|
+
|
|
+/*
|
|
+ * ipIfStatsTable_release_data
|
|
+ *
|
|
+ * Purpose: release ipIfStatsTable data.
|
|
+ */
|
|
+void
|
|
+ipIfStatsTable_release_data(ipIfStatsTable_data * data)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsTable_release_data",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * TODO:202:r: |-> release memory for the ipIfStatsTable data context.
|
|
+ */
|
|
+ free(data);
|
|
+} /* ipIfStatsTable_release_data */
|
|
+
|
|
+
|
|
+
|
|
+/**
|
|
+ * set mib index(es)
|
|
+ *
|
|
+ * @param tbl_idx mib index structure
|
|
+ * @param ipIfStatsIPVersion_val
|
|
+ * @param ipIfStatsIfIndex_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
|
|
+ipIfStatsTable_indexes_set_tbl_idx(ipIfStatsTable_mib_index * tbl_idx,
|
|
+ u_long ipIfStatsIPVersion_val,
|
|
+ long ipIfStatsIfIndex_val)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsTable_indexes_set_tbl_idx", "called\n"));
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsIPVersion(1)/InetVersion/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
|
|
+ */
|
|
+ /** WARNING: this code might not work for netsnmp_ifstats_entry */
|
|
+ tbl_idx->ipIfStatsIPVersion = ipIfStatsIPVersion_val;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsIfIndex(2)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
|
|
+ */
|
|
+ /** WARNING: this code might not work for netsnmp_ifstats_entry */
|
|
+ tbl_idx->ipIfStatsIfIndex = ipIfStatsIfIndex_val;
|
|
+
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsTable_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
|
|
+ipIfStatsTable_indexes_set(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long ipIfStatsIPVersion_val,
|
|
+ long ipIfStatsIfIndex_val)
|
|
+{
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsTable_indexes_set",
|
|
+ "called\n"));
|
|
+
|
|
+ if (MFD_SUCCESS !=
|
|
+ ipIfStatsTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
|
|
+ ipIfStatsIPVersion_val,
|
|
+ ipIfStatsIfIndex_val))
|
|
+ return MFD_ERROR;
|
|
+
|
|
+ /*
|
|
+ * convert mib index to oid index
|
|
+ */
|
|
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
|
|
+ if (0 != ipIfStatsTable_index_to_oid(&rowreq_ctx->oid_idx,
|
|
+ &rowreq_ctx->tbl_idx)) {
|
|
+ return MFD_ERROR;
|
|
+ }
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsTable_indexes_set */
|
|
+
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsInReceives
|
|
+ * ipIfStatsInReceives is subid 3 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.3
|
|
+ * Description:
|
|
+The total number of input IP datagrams received, including
|
|
+ those received in error.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsInReceives data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsInReceives_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
|
|
+ipIfStatsInReceives_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsInReceives_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsInReceives_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsInReceives_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsInReceives data.
|
|
+ * copy (* ipIfStatsInReceives_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINRECEIVES])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsInReceives_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCInReceives.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsInReceives_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsHCInReceives
|
|
+ * ipIfStatsHCInReceives is subid 4 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.4
|
|
+ * Description:
|
|
+The total number of input IP datagrams received, including
|
|
+ those received in error. This object counts the same
|
|
+ datagrams as ipIfStatsInReceives, but allows for larger
|
|
+ values.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
|
|
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the ipIfStatsHCInReceives data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsHCInReceives_val_ptr
|
|
+ * Pointer to storage for a U64 variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+ipIfStatsHCInReceives_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ U64 * ipIfStatsHCInReceives_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsHCInReceives_val_ptr);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> copy ipIfStatsHCInReceives data.
|
|
+ * get (* ipIfStatsHCInReceives_val_ptr ).low and (* ipIfStatsHCInReceives_val_ptr ).high from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINRECEIVES])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsHCInReceives_val_ptr).low =
|
|
+ rowreq_ctx->data->stats.HCInReceives.low;
|
|
+ (*ipIfStatsHCInReceives_val_ptr).high =
|
|
+ rowreq_ctx->data->stats.HCInReceives.high;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsHCInReceives_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsInOctets
|
|
+ * ipIfStatsInOctets is subid 5 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.5
|
|
+ * Description:
|
|
+The total number of octets received in input IP datagrams,
|
|
+ including those received in error. Octets from datagrams
|
|
+ counted in ipIfStatsInReceives MUST be counted here.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsInOctets data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsInOctets_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
|
|
+ipIfStatsInOctets_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsInOctets_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsInOctets_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsInOctets_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsInOctets data.
|
|
+ * copy (* ipIfStatsInOctets_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINOCTETS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsInOctets_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCInOctets.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsInOctets_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsHCInOctets
|
|
+ * ipIfStatsHCInOctets is subid 6 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.6
|
|
+ * Description:
|
|
+The total number of octets received in input IP datagrams,
|
|
+ including those received in error. This object counts the
|
|
+ same octets as ipIfStatsInOctets, but allows for larger
|
|
+ values.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
|
|
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the ipIfStatsHCInOctets data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsHCInOctets_val_ptr
|
|
+ * Pointer to storage for a U64 variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+ipIfStatsHCInOctets_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ U64 * ipIfStatsHCInOctets_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsHCInOctets_val_ptr);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> copy ipIfStatsHCInOctets data.
|
|
+ * get (* ipIfStatsHCInOctets_val_ptr ).low and (* ipIfStatsHCInOctets_val_ptr ).high from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINOCTETS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsHCInOctets_val_ptr).low =
|
|
+ rowreq_ctx->data->stats.HCInOctets.low;
|
|
+ (*ipIfStatsHCInOctets_val_ptr).high =
|
|
+ rowreq_ctx->data->stats.HCInOctets.high;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsHCInOctets_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsInHdrErrors
|
|
+ * ipIfStatsInHdrErrors is subid 7 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.7
|
|
+ * Description:
|
|
+The number of input IP datagrams discarded due to errors in
|
|
+ their IP headers, including version number mismatch, other
|
|
+ format errors, hop count exceeded, errors discovered in
|
|
+ processing their IP options, etc.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsInHdrErrors data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsInHdrErrors_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
|
|
+ipIfStatsInHdrErrors_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsInHdrErrors_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsInHdrErrors_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsInHdrErrors_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsInHdrErrors data.
|
|
+ * copy (* ipIfStatsInHdrErrors_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_INHDRERRORS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsInHdrErrors_val_ptr) =
|
|
+ rowreq_ctx->data->stats.InHdrErrors;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsInHdrErrors_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsInNoRoutes
|
|
+ * ipIfStatsInNoRoutes is subid 8 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.8
|
|
+ * Description:
|
|
+The number of input IP datagrams discarded because no route
|
|
+ could be found to transmit them to their destination.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsInNoRoutes data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsInNoRoutes_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
|
|
+ipIfStatsInNoRoutes_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsInNoRoutes_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsInNoRoutes_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsInNoRoutes_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsInNoRoutes data.
|
|
+ * copy (* ipIfStatsInNoRoutes_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINNOROUTES])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsInNoRoutes_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCInNoRoutes.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsInNoRoutes_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsInAddrErrors
|
|
+ * ipIfStatsInAddrErrors is subid 9 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.9
|
|
+ * Description:
|
|
+The number of input IP datagrams discarded because the IP
|
|
+ address in their IP header's destination field was not a
|
|
+ valid address to be received at this entity. This count
|
|
+ includes invalid addresses (e.g., ::0). For entities that
|
|
+ are not IP routers and therefore do not forward datagrams,
|
|
+ this counter includes datagrams discarded because the
|
|
+ destination address was not a local address.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsInAddrErrors data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsInAddrErrors_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
|
|
+ipIfStatsInAddrErrors_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsInAddrErrors_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsInAddrErrors_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsInAddrErrors_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsInAddrErrors data.
|
|
+ * copy (* ipIfStatsInAddrErrors_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_INADDRERRORS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsInAddrErrors_val_ptr) =
|
|
+ rowreq_ctx->data->stats.InAddrErrors;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsInAddrErrors_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsInUnknownProtos
|
|
+ * ipIfStatsInUnknownProtos is subid 10 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.10
|
|
+ * Description:
|
|
+The number of locally-addressed IP datagrams received
|
|
+ successfully but discarded because of an unknown or
|
|
+ unsupported protocol.
|
|
+
|
|
+ When tracking interface statistics, the counter of the
|
|
+ interface to which these datagrams were addressed is
|
|
+ incremented. This interface might not be the same as the
|
|
+ input interface for some of the datagrams.
|
|
+
|
|
+ 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
|
|
+
|
|
+
|
|
+
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsInUnknownProtos data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsInUnknownProtos_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
|
|
+ipIfStatsInUnknownProtos_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsInUnknownProtos_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsInUnknownProtos_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsInUnknownProtos_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsInUnknownProtos data.
|
|
+ * copy (* ipIfStatsInUnknownProtos_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_INUNKNOWNPROTOS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsInUnknownProtos_val_ptr) =
|
|
+ rowreq_ctx->data->stats.InUnknownProtos;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsInUnknownProtos_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsInTruncatedPkts
|
|
+ * ipIfStatsInTruncatedPkts is subid 11 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.11
|
|
+ * Description:
|
|
+The number of input IP datagrams discarded because the
|
|
+ datagram frame didn't carry enough data.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsInTruncatedPkts data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsInTruncatedPkts_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
|
|
+ipIfStatsInTruncatedPkts_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsInTruncatedPkts_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsInTruncatedPkts_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsInTruncatedPkts_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsInTruncatedPkts data.
|
|
+ * copy (* ipIfStatsInTruncatedPkts_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_INTRUNCATEDPKTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsInTruncatedPkts_val_ptr) =
|
|
+ rowreq_ctx->data->stats.InTruncatedPkts;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsInTruncatedPkts_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsInForwDatagrams
|
|
+ * ipIfStatsInForwDatagrams is subid 12 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.12
|
|
+ * Description:
|
|
+The number of input datagrams for which this entity was not
|
|
+ their final IP destination and for which this entity
|
|
+ attempted to find a route to forward them to that final
|
|
+ destination. In entities that do not act as IP routers,
|
|
+ this counter will include only those datagrams that were
|
|
+ Source-Routed via this entity, and the Source-Route
|
|
+ processing was successful.
|
|
+
|
|
+ When tracking interface statistics, the counter of the
|
|
+ incoming interface is incremented for each datagram.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsInForwDatagrams data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsInForwDatagrams_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
|
|
+ipIfStatsInForwDatagrams_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsInForwDatagrams_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsInForwDatagrams_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsInForwDatagrams_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsInForwDatagrams data.
|
|
+ * copy (* ipIfStatsInForwDatagrams_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINFORWDATAGRAMS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsInForwDatagrams_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCInForwDatagrams.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsInForwDatagrams_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsHCInForwDatagrams
|
|
+ * ipIfStatsHCInForwDatagrams is subid 13 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.13
|
|
+ * Description:
|
|
+The number of input datagrams for which this entity was not
|
|
+ their final IP destination and for which this entity
|
|
+ attempted to find a route to forward them to that final
|
|
+ destination. This object counts the same packets as
|
|
+
|
|
+
|
|
+
|
|
+ ipIfStatsInForwDatagrams, but allows for larger values.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
|
|
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the ipIfStatsHCInForwDatagrams data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsHCInForwDatagrams_val_ptr
|
|
+ * Pointer to storage for a U64 variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+ipIfStatsHCInForwDatagrams_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ U64 * ipIfStatsHCInForwDatagrams_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsHCInForwDatagrams_val_ptr);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> copy ipIfStatsHCInForwDatagrams data.
|
|
+ * get (* ipIfStatsHCInForwDatagrams_val_ptr ).low and (* ipIfStatsHCInForwDatagrams_val_ptr ).high from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINFORWDATAGRAMS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsHCInForwDatagrams_val_ptr).low =
|
|
+ rowreq_ctx->data->stats.HCInForwDatagrams.low;
|
|
+ (*ipIfStatsHCInForwDatagrams_val_ptr).high =
|
|
+ rowreq_ctx->data->stats.HCInForwDatagrams.high;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsHCInForwDatagrams_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsReasmReqds
|
|
+ * ipIfStatsReasmReqds is subid 14 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.14
|
|
+ * Description:
|
|
+The number of IP fragments received that needed to be
|
|
+ reassembled at this interface.
|
|
+
|
|
+ When tracking interface statistics, the counter of the
|
|
+ interface to which these fragments were addressed is
|
|
+ incremented. This interface might not be the same as the
|
|
+ input interface for some of the fragments.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsReasmReqds data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsReasmReqds_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
|
|
+ipIfStatsReasmReqds_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsReasmReqds_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsReasmReqds_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsReasmReqds_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsReasmReqds data.
|
|
+ * copy (* ipIfStatsReasmReqds_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_REASMREQDS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsReasmReqds_val_ptr) =
|
|
+ rowreq_ctx->data->stats.ReasmReqds;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsReasmReqds_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsReasmOKs
|
|
+ * ipIfStatsReasmOKs is subid 15 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.15
|
|
+ * Description:
|
|
+The number of IP datagrams successfully reassembled.
|
|
+
|
|
+ When tracking interface statistics, the counter of the
|
|
+ interface to which these datagrams were addressed is
|
|
+ incremented. This interface might not be the same as the
|
|
+ input interface for some of the datagrams.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsReasmOKs data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsReasmOKs_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
|
|
+ipIfStatsReasmOKs_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsReasmOKs_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsReasmOKs_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsReasmOKs_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsReasmOKs data.
|
|
+ * copy (* ipIfStatsReasmOKs_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_REASMOKS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsReasmOKs_val_ptr) =
|
|
+ rowreq_ctx->data->stats.ReasmOKs;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsReasmOKs_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsReasmFails
|
|
+ * ipIfStatsReasmFails is subid 16 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.16
|
|
+ * Description:
|
|
+The number of failures detected by the IP re-assembly
|
|
+ algorithm (for whatever reason: timed out, errors, etc.).
|
|
+ Note that this is not necessarily a count of discarded IP
|
|
+ fragments since some algorithms (notably the algorithm in
|
|
+ RFC 815) can lose track of the number of fragments by
|
|
+ combining them as they are received.
|
|
+
|
|
+ When tracking interface statistics, the counter of the
|
|
+ interface to which these fragments were addressed is
|
|
+ incremented. This interface might not be the same as the
|
|
+ input interface for some of the fragments.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsReasmFails data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsReasmFails_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
|
|
+ipIfStatsReasmFails_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsReasmFails_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsReasmFails_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsReasmFails_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsReasmFails data.
|
|
+ * copy (* ipIfStatsReasmFails_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_REASMFAILS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsReasmFails_val_ptr) =
|
|
+ rowreq_ctx->data->stats.ReasmFails;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsReasmFails_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsInDiscards
|
|
+ * ipIfStatsInDiscards is subid 17 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.17
|
|
+ * Description:
|
|
+The number of input IP datagrams for which no problems were
|
|
+ encountered to prevent their continued processing, but
|
|
+ were discarded (e.g., for lack of buffer space). Note that
|
|
+ this counter does not include any datagrams discarded while
|
|
+ awaiting re-assembly.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsInDiscards data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsInDiscards_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
|
|
+ipIfStatsInDiscards_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsInDiscards_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsInDiscards_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsInDiscards_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsInDiscards data.
|
|
+ * copy (* ipIfStatsInDiscards_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_INDISCARDS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsInDiscards_val_ptr) =
|
|
+ rowreq_ctx->data->stats.InDiscards;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsInDiscards_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsInDelivers
|
|
+ * ipIfStatsInDelivers is subid 18 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.18
|
|
+ * Description:
|
|
+The total number of datagrams successfully delivered to IP
|
|
+ user-protocols (including ICMP).
|
|
+
|
|
+ When tracking interface statistics, the counter of the
|
|
+ interface to which these datagrams were addressed is
|
|
+ incremented. This interface might not be the same as the
|
|
+
|
|
+
|
|
+
|
|
+ input interface for some of the datagrams.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsInDelivers data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsInDelivers_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
|
|
+ipIfStatsInDelivers_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsInDelivers_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsInDelivers_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsInDelivers_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsInDelivers data.
|
|
+ * copy (* ipIfStatsInDelivers_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINDELIVERS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsInDelivers_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCInDelivers.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsInDelivers_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsHCInDelivers
|
|
+ * ipIfStatsHCInDelivers is subid 19 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.19
|
|
+ * Description:
|
|
+The total number of datagrams successfully delivered to IP
|
|
+ user-protocols (including ICMP). This object counts the
|
|
+ same packets as ipIfStatsInDelivers, but allows for larger
|
|
+ values.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
|
|
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the ipIfStatsHCInDelivers data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsHCInDelivers_val_ptr
|
|
+ * Pointer to storage for a U64 variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+ipIfStatsHCInDelivers_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ U64 * ipIfStatsHCInDelivers_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsHCInDelivers_val_ptr);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> copy ipIfStatsHCInDelivers data.
|
|
+ * get (* ipIfStatsHCInDelivers_val_ptr ).low and (* ipIfStatsHCInDelivers_val_ptr ).high from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINDELIVERS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsHCInDelivers_val_ptr).low =
|
|
+ rowreq_ctx->data->stats.HCInDelivers.low;
|
|
+ (*ipIfStatsHCInDelivers_val_ptr).high =
|
|
+ rowreq_ctx->data->stats.HCInDelivers.high;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsHCInDelivers_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsOutRequests
|
|
+ * ipIfStatsOutRequests is subid 20 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.20
|
|
+ * Description:
|
|
+The total number of IP datagrams that local IP user-
|
|
+ protocols (including ICMP) supplied to IP in requests for
|
|
+ transmission. Note that this counter does not include any
|
|
+ datagrams counted in ipIfStatsOutForwDatagrams.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsOutRequests data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsOutRequests_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
|
|
+ipIfStatsOutRequests_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsOutRequests_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsOutRequests_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsOutRequests_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsOutRequests data.
|
|
+ * copy (* ipIfStatsOutRequests_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTREQUESTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsOutRequests_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCOutRequests.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsOutRequests_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsHCOutRequests
|
|
+ * ipIfStatsHCOutRequests is subid 21 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.21
|
|
+ * Description:
|
|
+The total number of IP datagrams that local IP user-
|
|
+ protocols (including ICMP) supplied to IP in requests for
|
|
+ transmission. This object counts the same packets as
|
|
+
|
|
+
|
|
+
|
|
+ ipIfStatsOutRequests, but allows for larger values.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
|
|
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the ipIfStatsHCOutRequests data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsHCOutRequests_val_ptr
|
|
+ * Pointer to storage for a U64 variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+ipIfStatsHCOutRequests_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ U64 * ipIfStatsHCOutRequests_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsHCOutRequests_val_ptr);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> copy ipIfStatsHCOutRequests data.
|
|
+ * get (* ipIfStatsHCOutRequests_val_ptr ).low and (* ipIfStatsHCOutRequests_val_ptr ).high from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTREQUESTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsHCOutRequests_val_ptr).low =
|
|
+ rowreq_ctx->data->stats.HCOutRequests.low;
|
|
+ (*ipIfStatsHCOutRequests_val_ptr).high =
|
|
+ rowreq_ctx->data->stats.HCOutRequests.high;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsHCOutRequests_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsOutForwDatagrams
|
|
+ * ipIfStatsOutForwDatagrams is subid 23 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.23
|
|
+ * Description:
|
|
+The number of datagrams for which this entity was not their
|
|
+ final IP destination and for which it was successful in
|
|
+ finding a path to their final destination. In entities
|
|
+ that do not act as IP routers, this counter will include
|
|
+ only those datagrams that were Source-Routed via this
|
|
+ entity, and the Source-Route processing was successful.
|
|
+
|
|
+ When tracking interface statistics, the counter of the
|
|
+ outgoing interface is incremented for a successfully
|
|
+ forwarded datagram.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsOutForwDatagrams data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsOutForwDatagrams_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
|
|
+ipIfStatsOutForwDatagrams_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsOutForwDatagrams_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsOutForwDatagrams_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsOutForwDatagrams_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsOutForwDatagrams data.
|
|
+ * copy (* ipIfStatsOutForwDatagrams_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFORWDATAGRAMS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsOutForwDatagrams_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCOutForwDatagrams.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsOutForwDatagrams_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsHCOutForwDatagrams
|
|
+ * ipIfStatsHCOutForwDatagrams is subid 24 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.24
|
|
+ * Description:
|
|
+The number of datagrams for which this entity was not their
|
|
+ final IP destination and for which it was successful in
|
|
+ finding a path to their final destination. This object
|
|
+ counts the same packets as ipIfStatsOutForwDatagrams, but
|
|
+ allows for larger values.
|
|
+
|
|
+ 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
|
|
+
|
|
+
|
|
+
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
|
|
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the ipIfStatsHCOutForwDatagrams data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsHCOutForwDatagrams_val_ptr
|
|
+ * Pointer to storage for a U64 variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+ipIfStatsHCOutForwDatagrams_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ U64 * ipIfStatsHCOutForwDatagrams_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsHCOutForwDatagrams_val_ptr);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> copy ipIfStatsHCOutForwDatagrams data.
|
|
+ * get (* ipIfStatsHCOutForwDatagrams_val_ptr ).low and (* ipIfStatsHCOutForwDatagrams_val_ptr ).high from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFORWDATAGRAMS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsHCOutForwDatagrams_val_ptr).low =
|
|
+ rowreq_ctx->data->stats.HCOutForwDatagrams.low;
|
|
+ (*ipIfStatsHCOutForwDatagrams_val_ptr).high =
|
|
+ rowreq_ctx->data->stats.HCOutForwDatagrams.high;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsHCOutForwDatagrams_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsOutDiscards
|
|
+ * ipIfStatsOutDiscards is subid 25 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.25
|
|
+ * Description:
|
|
+The number of output IP datagrams for which no problem was
|
|
+ encountered to prevent their transmission to their
|
|
+ destination, but were discarded (e.g., for lack of
|
|
+ buffer space). Note that this counter would include
|
|
+ datagrams counted in ipIfStatsOutForwDatagrams if any such
|
|
+ datagrams met this (discretionary) discard criterion.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsOutDiscards data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsOutDiscards_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
|
|
+ipIfStatsOutDiscards_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsOutDiscards_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsOutDiscards_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsOutDiscards_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsOutDiscards data.
|
|
+ * copy (* ipIfStatsOutDiscards_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTDISCARDS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsOutDiscards_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCOutDiscards.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsOutDiscards_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsOutFragReqds
|
|
+ * ipIfStatsOutFragReqds is subid 26 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.26
|
|
+ * Description:
|
|
+The number of IP datagrams that would require fragmentation
|
|
+ in order to be transmitted.
|
|
+
|
|
+ When tracking interface statistics, the counter of the
|
|
+ outgoing interface is incremented for a successfully
|
|
+ fragmented datagram.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsOutFragReqds data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsOutFragReqds_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
|
|
+ipIfStatsOutFragReqds_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsOutFragReqds_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsOutFragReqds_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsOutFragReqds_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsOutFragReqds data.
|
|
+ * copy (* ipIfStatsOutFragReqds_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGREQDS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsOutFragReqds_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCOutFragReqds.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsOutFragReqds_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsOutFragOKs
|
|
+ * ipIfStatsOutFragOKs is subid 27 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.27
|
|
+ * Description:
|
|
+The number of IP datagrams that have been successfully
|
|
+ fragmented.
|
|
+
|
|
+ When tracking interface statistics, the counter of the
|
|
+
|
|
+
|
|
+
|
|
+ outgoing interface is incremented for a successfully
|
|
+ fragmented datagram.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsOutFragOKs data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsOutFragOKs_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
|
|
+ipIfStatsOutFragOKs_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsOutFragOKs_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsOutFragOKs_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsOutFragOKs_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsOutFragOKs data.
|
|
+ * copy (* ipIfStatsOutFragOKs_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGOKS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsOutFragOKs_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCOutFragOKs.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsOutFragOKs_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsOutFragFails
|
|
+ * ipIfStatsOutFragFails is subid 28 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.28
|
|
+ * Description:
|
|
+The number of IP datagrams that have been discarded because
|
|
+ they needed to be fragmented but could not be. This
|
|
+ includes IPv4 packets that have the DF bit set and IPv6
|
|
+ packets that are being forwarded and exceed the outgoing
|
|
+ link MTU.
|
|
+
|
|
+ When tracking interface statistics, the counter of the
|
|
+ outgoing interface is incremented for an unsuccessfully
|
|
+ fragmented datagram.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsOutFragFails data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsOutFragFails_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
|
|
+ipIfStatsOutFragFails_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsOutFragFails_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsOutFragFails_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsOutFragFails_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsOutFragFails data.
|
|
+ * copy (* ipIfStatsOutFragFails_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGFAILS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsOutFragFails_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCOutFragFails.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsOutFragFails_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsOutFragCreates
|
|
+ * ipIfStatsOutFragCreates is subid 29 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.29
|
|
+ * Description:
|
|
+The number of output datagram fragments that have been
|
|
+ generated as a result of IP fragmentation.
|
|
+
|
|
+ When tracking interface statistics, the counter of the
|
|
+ outgoing interface is incremented for a successfully
|
|
+ fragmented datagram.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsOutFragCreates data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsOutFragCreates_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
|
|
+ipIfStatsOutFragCreates_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsOutFragCreates_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsOutFragCreates_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsOutFragCreates_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsOutFragCreates data.
|
|
+ * copy (* ipIfStatsOutFragCreates_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGCREATES])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsOutFragCreates_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCOutFragCreates.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsOutFragCreates_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsOutTransmits
|
|
+ * ipIfStatsOutTransmits is subid 30 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.30
|
|
+ * Description:
|
|
+The total number of IP datagrams that this entity supplied
|
|
+ to the lower layers for transmission. This includes
|
|
+ datagrams generated locally and those forwarded by this
|
|
+ entity.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsOutTransmits data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsOutTransmits_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
|
|
+ipIfStatsOutTransmits_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsOutTransmits_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsOutTransmits_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsOutTransmits_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsOutTransmits data.
|
|
+ * copy (* ipIfStatsOutTransmits_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTTRANSMITS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsOutTransmits_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCOutTransmits.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsOutTransmits_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsHCOutTransmits
|
|
+ * ipIfStatsHCOutTransmits is subid 31 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.31
|
|
+ * Description:
|
|
+The total number of IP datagrams that this entity supplied
|
|
+ to the lower layers for transmission. This object counts
|
|
+ the same datagrams as ipIfStatsOutTransmits, but allows for
|
|
+ larger values.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
|
|
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the ipIfStatsHCOutTransmits data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsHCOutTransmits_val_ptr
|
|
+ * Pointer to storage for a U64 variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+ipIfStatsHCOutTransmits_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ U64 * ipIfStatsHCOutTransmits_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsHCOutTransmits_val_ptr);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> copy ipIfStatsHCOutTransmits data.
|
|
+ * get (* ipIfStatsHCOutTransmits_val_ptr ).low and (* ipIfStatsHCOutTransmits_val_ptr ).high from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTTRANSMITS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsHCOutTransmits_val_ptr).low =
|
|
+ rowreq_ctx->data->stats.HCOutTransmits.low;
|
|
+ (*ipIfStatsHCOutTransmits_val_ptr).high =
|
|
+ rowreq_ctx->data->stats.HCOutTransmits.high;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsHCOutTransmits_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsOutOctets
|
|
+ * ipIfStatsOutOctets is subid 32 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.32
|
|
+ * Description:
|
|
+The total number of octets in IP datagrams delivered to the
|
|
+ lower layers for transmission. Octets from datagrams
|
|
+ counted in ipIfStatsOutTransmits MUST be counted here.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsOutOctets data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsOutOctets_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
|
|
+ipIfStatsOutOctets_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsOutOctets_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsOutOctets_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsOutOctets_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsOutOctets data.
|
|
+ * copy (* ipIfStatsOutOctets_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTOCTETS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsOutOctets_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCOutOctets.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsOutOctets_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsHCOutOctets
|
|
+ * ipIfStatsHCOutOctets is subid 33 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.33
|
|
+ * Description:
|
|
+The total number of octets in IP datagrams delivered to the
|
|
+ lower layers for transmission. This objects counts the same
|
|
+ octets as ipIfStatsOutOctets, but allows for larger values.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
|
|
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the ipIfStatsHCOutOctets data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsHCOutOctets_val_ptr
|
|
+ * Pointer to storage for a U64 variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+ipIfStatsHCOutOctets_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ U64 * ipIfStatsHCOutOctets_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsHCOutOctets_val_ptr);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> copy ipIfStatsHCOutOctets data.
|
|
+ * get (* ipIfStatsHCOutOctets_val_ptr ).low and (* ipIfStatsHCOutOctets_val_ptr ).high from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTOCTETS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsHCOutOctets_val_ptr).low =
|
|
+ rowreq_ctx->data->stats.HCOutOctets.low;
|
|
+ (*ipIfStatsHCOutOctets_val_ptr).high =
|
|
+ rowreq_ctx->data->stats.HCOutOctets.high;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsHCOutOctets_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsInMcastPkts
|
|
+ * ipIfStatsInMcastPkts is subid 34 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.34
|
|
+ * Description:
|
|
+The number of IP multicast datagrams received.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsInMcastPkts data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsInMcastPkts_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
|
|
+ipIfStatsInMcastPkts_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsInMcastPkts_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsInMcastPkts_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsInMcastPkts_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsInMcastPkts data.
|
|
+ * copy (* ipIfStatsInMcastPkts_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINMCASTPKTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsInMcastPkts_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCInMcastPkts.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsInMcastPkts_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsHCInMcastPkts
|
|
+ * ipIfStatsHCInMcastPkts is subid 35 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.35
|
|
+ * Description:
|
|
+The number of IP multicast datagrams received. This object
|
|
+ counts the same datagrams as ipIfStatsInMcastPkts, but
|
|
+ allows for larger values.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
|
|
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the ipIfStatsHCInMcastPkts data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsHCInMcastPkts_val_ptr
|
|
+ * Pointer to storage for a U64 variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+ipIfStatsHCInMcastPkts_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ U64 * ipIfStatsHCInMcastPkts_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsHCInMcastPkts_val_ptr);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> copy ipIfStatsHCInMcastPkts data.
|
|
+ * get (* ipIfStatsHCInMcastPkts_val_ptr ).low and (* ipIfStatsHCInMcastPkts_val_ptr ).high from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINMCASTPKTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsHCInMcastPkts_val_ptr).low =
|
|
+ rowreq_ctx->data->stats.HCInMcastPkts.low;
|
|
+ (*ipIfStatsHCInMcastPkts_val_ptr).high =
|
|
+ rowreq_ctx->data->stats.HCInMcastPkts.high;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsHCInMcastPkts_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsInMcastOctets
|
|
+ * ipIfStatsInMcastOctets is subid 36 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.36
|
|
+ * Description:
|
|
+The total number of octets received in IP multicast
|
|
+
|
|
+
|
|
+
|
|
+ datagrams. Octets from datagrams counted in
|
|
+ ipIfStatsInMcastPkts MUST be counted here.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsInMcastOctets data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsInMcastOctets_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
|
|
+ipIfStatsInMcastOctets_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsInMcastOctets_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsInMcastOctets_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsInMcastOctets_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsInMcastOctets data.
|
|
+ * copy (* ipIfStatsInMcastOctets_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINMCASTOCTETS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsInMcastOctets_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCInMcastOctets.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsInMcastOctets_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsHCInMcastOctets
|
|
+ * ipIfStatsHCInMcastOctets is subid 37 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.37
|
|
+ * Description:
|
|
+The total number of octets received in IP multicast
|
|
+ datagrams. This object counts the same octets as
|
|
+ ipIfStatsInMcastOctets, but allows for larger values.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
|
|
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the ipIfStatsHCInMcastOctets data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsHCInMcastOctets_val_ptr
|
|
+ * Pointer to storage for a U64 variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+ipIfStatsHCInMcastOctets_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ U64 * ipIfStatsHCInMcastOctets_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsHCInMcastOctets_val_ptr);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> copy ipIfStatsHCInMcastOctets data.
|
|
+ * get (* ipIfStatsHCInMcastOctets_val_ptr ).low and (* ipIfStatsHCInMcastOctets_val_ptr ).high from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINMCASTOCTETS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsHCInMcastOctets_val_ptr).low =
|
|
+ rowreq_ctx->data->stats.HCInMcastOctets.low;
|
|
+ (*ipIfStatsHCInMcastOctets_val_ptr).high =
|
|
+ rowreq_ctx->data->stats.HCInMcastOctets.high;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsHCInMcastOctets_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsOutMcastPkts
|
|
+ * ipIfStatsOutMcastPkts is subid 38 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.38
|
|
+ * Description:
|
|
+The number of IP multicast datagrams transmitted.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsOutMcastPkts data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsOutMcastPkts_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
|
|
+ipIfStatsOutMcastPkts_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsOutMcastPkts_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsOutMcastPkts_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsOutMcastPkts_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsOutMcastPkts data.
|
|
+ * copy (* ipIfStatsOutMcastPkts_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTMCASTPKTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsOutMcastPkts_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCOutMcastPkts.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsOutMcastPkts_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsHCOutMcastPkts
|
|
+ * ipIfStatsHCOutMcastPkts is subid 39 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.39
|
|
+ * Description:
|
|
+The number of IP multicast datagrams transmitted. This
|
|
+ object counts the same datagrams as ipIfStatsOutMcastPkts,
|
|
+ but allows for larger values.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
|
|
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the ipIfStatsHCOutMcastPkts data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsHCOutMcastPkts_val_ptr
|
|
+ * Pointer to storage for a U64 variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+ipIfStatsHCOutMcastPkts_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ U64 * ipIfStatsHCOutMcastPkts_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsHCOutMcastPkts_val_ptr);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> copy ipIfStatsHCOutMcastPkts data.
|
|
+ * get (* ipIfStatsHCOutMcastPkts_val_ptr ).low and (* ipIfStatsHCOutMcastPkts_val_ptr ).high from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTMCASTPKTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsHCOutMcastPkts_val_ptr).low =
|
|
+ rowreq_ctx->data->stats.HCOutMcastPkts.low;
|
|
+ (*ipIfStatsHCOutMcastPkts_val_ptr).high =
|
|
+ rowreq_ctx->data->stats.HCOutMcastPkts.high;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsHCOutMcastPkts_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsOutMcastOctets
|
|
+ * ipIfStatsOutMcastOctets is subid 40 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.40
|
|
+ * Description:
|
|
+The total number of octets transmitted in IP multicast
|
|
+ datagrams. Octets from datagrams counted in
|
|
+ ipIfStatsOutMcastPkts MUST be counted here.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsOutMcastOctets data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsOutMcastOctets_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
|
|
+ipIfStatsOutMcastOctets_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsOutMcastOctets_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsOutMcastOctets_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsOutMcastOctets_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsOutMcastOctets data.
|
|
+ * copy (* ipIfStatsOutMcastOctets_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTMCASTOCTETS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsOutMcastOctets_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCOutMcastOctets.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsOutMcastOctets_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsHCOutMcastOctets
|
|
+ * ipIfStatsHCOutMcastOctets is subid 41 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.41
|
|
+ * Description:
|
|
+The total number of octets transmitted in IP multicast
|
|
+ datagrams. This object counts the same octets as
|
|
+ ipIfStatsOutMcastOctets, but allows for larger values.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
|
|
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the ipIfStatsHCOutMcastOctets data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsHCOutMcastOctets_val_ptr
|
|
+ * Pointer to storage for a U64 variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+ipIfStatsHCOutMcastOctets_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ U64 * ipIfStatsHCOutMcastOctets_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsHCOutMcastOctets_val_ptr);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> copy ipIfStatsHCOutMcastOctets data.
|
|
+ * get (* ipIfStatsHCOutMcastOctets_val_ptr ).low and (* ipIfStatsHCOutMcastOctets_val_ptr ).high from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTMCASTOCTETS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsHCOutMcastOctets_val_ptr).low =
|
|
+ rowreq_ctx->data->stats.HCOutMcastOctets.low;
|
|
+ (*ipIfStatsHCOutMcastOctets_val_ptr).high =
|
|
+ rowreq_ctx->data->stats.HCOutMcastOctets.high;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsHCOutMcastOctets_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsInBcastPkts
|
|
+ * ipIfStatsInBcastPkts is subid 42 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.42
|
|
+ * Description:
|
|
+The number of IP broadcast datagrams received.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsInBcastPkts data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsInBcastPkts_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
|
|
+ipIfStatsInBcastPkts_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsInBcastPkts_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsInBcastPkts_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsInBcastPkts_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsInBcastPkts data.
|
|
+ * copy (* ipIfStatsInBcastPkts_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINBCASTPKTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsInBcastPkts_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCInBcastPkts.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsInBcastPkts_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsHCInBcastPkts
|
|
+ * ipIfStatsHCInBcastPkts is subid 43 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.43
|
|
+ * Description:
|
|
+The number of IP broadcast datagrams received. This object
|
|
+ counts the same datagrams as ipIfStatsInBcastPkts, but
|
|
+ allows for larger values.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
|
|
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the ipIfStatsHCInBcastPkts data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsHCInBcastPkts_val_ptr
|
|
+ * Pointer to storage for a U64 variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+ipIfStatsHCInBcastPkts_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ U64 * ipIfStatsHCInBcastPkts_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsHCInBcastPkts_val_ptr);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> copy ipIfStatsHCInBcastPkts data.
|
|
+ * get (* ipIfStatsHCInBcastPkts_val_ptr ).low and (* ipIfStatsHCInBcastPkts_val_ptr ).high from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINBCASTPKTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsHCInBcastPkts_val_ptr).low =
|
|
+ rowreq_ctx->data->stats.HCInBcastPkts.low;
|
|
+ (*ipIfStatsHCInBcastPkts_val_ptr).high =
|
|
+ rowreq_ctx->data->stats.HCInBcastPkts.high;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsHCInBcastPkts_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsOutBcastPkts
|
|
+ * ipIfStatsOutBcastPkts is subid 44 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.44
|
|
+ * Description:
|
|
+The number of IP broadcast datagrams transmitted.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * 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 ipIfStatsOutBcastPkts data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsOutBcastPkts_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
|
|
+ipIfStatsOutBcastPkts_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsOutBcastPkts_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsOutBcastPkts_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsOutBcastPkts_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsOutBcastPkts data.
|
|
+ * copy (* ipIfStatsOutBcastPkts_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTBCASTPKTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsOutBcastPkts_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCOutBcastPkts.low;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsOutBcastPkts_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsHCOutBcastPkts
|
|
+ * ipIfStatsHCOutBcastPkts is subid 45 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.45
|
|
+ * Description:
|
|
+The number of IP broadcast datagrams transmitted. This
|
|
+ object counts the same datagrams as ipIfStatsOutBcastPkts,
|
|
+ but allows for larger values.
|
|
+
|
|
+ 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
|
|
+ ipIfStatsDiscontinuityTime.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
|
|
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the ipIfStatsHCOutBcastPkts data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsHCOutBcastPkts_val_ptr
|
|
+ * Pointer to storage for a U64 variable
|
|
+ *
|
|
+ * @retval MFD_SUCCESS : success
|
|
+ * @retval MFD_SKIP : skip this node (no value for now)
|
|
+ * @retval MFD_ERROR : Any other error
|
|
+ */
|
|
+int
|
|
+ipIfStatsHCOutBcastPkts_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ U64 * ipIfStatsHCOutBcastPkts_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsHCOutBcastPkts_val_ptr);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> copy ipIfStatsHCOutBcastPkts data.
|
|
+ * get (* ipIfStatsHCOutBcastPkts_val_ptr ).low and (* ipIfStatsHCOutBcastPkts_val_ptr ).high from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTBCASTPKTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsHCOutBcastPkts_val_ptr).low =
|
|
+ rowreq_ctx->data->stats.HCOutBcastPkts.low;
|
|
+ (*ipIfStatsHCOutBcastPkts_val_ptr).high =
|
|
+ rowreq_ctx->data->stats.HCOutBcastPkts.high;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsHCOutBcastPkts_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsDiscontinuityTime
|
|
+ * ipIfStatsDiscontinuityTime is subid 46 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.46
|
|
+ * Description:
|
|
+The value of sysUpTime on the most recent occasion at which
|
|
+
|
|
+
|
|
+
|
|
+ any one or more of this entry's counters suffered a
|
|
+ discontinuity.
|
|
+
|
|
+ If no such discontinuities have occurred since the last re-
|
|
+ initialization of the local management subsystem, then this
|
|
+ object contains a zero value.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is TimeStamp (based on perltype TICKS)
|
|
+ * The net-snmp type is ASN_TIMETICKS. The C type decl is u_long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the ipIfStatsDiscontinuityTime data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsDiscontinuityTime_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
|
|
+ipIfStatsDiscontinuityTime_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsDiscontinuityTime_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsDiscontinuityTime_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsDiscontinuityTime_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsDiscontinuityTime data.
|
|
+ * copy (* ipIfStatsDiscontinuityTime_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_DISCONTINUITYTIME])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsDiscontinuityTime_val_ptr) =
|
|
+ rowreq_ctx->ipIfStatsDiscontinuityTime;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsDiscontinuityTime_get */
|
|
+
|
|
+/*---------------------------------------------------------------------
|
|
+ * IP-MIB::ipIfStatsEntry.ipIfStatsRefreshRate
|
|
+ * ipIfStatsRefreshRate is subid 47 of ipIfStatsEntry.
|
|
+ * Its status is Current, and its access level is ReadOnly.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3.1.47
|
|
+ * Description:
|
|
+The minimum reasonable polling interval for this entry.
|
|
+ This object provides an indication of the minimum amount of
|
|
+ time required to update the counters in this entry.
|
|
+ *
|
|
+ * Attributes:
|
|
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
|
|
+ * readable 1 iscolumn 1 ranges 0 hashint 0
|
|
+ * settable 0
|
|
+ *
|
|
+ *
|
|
+ * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
|
|
+ * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
|
|
+ */
|
|
+/**
|
|
+ * Extract the current value of the ipIfStatsRefreshRate data.
|
|
+ *
|
|
+ * Set a value using the data context for the row.
|
|
+ *
|
|
+ * @param rowreq_ctx
|
|
+ * Pointer to the row request context.
|
|
+ * @param ipIfStatsRefreshRate_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
|
|
+ipIfStatsRefreshRate_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ u_long * ipIfStatsRefreshRate_val_ptr)
|
|
+{
|
|
+ /** we should have a non-NULL pointer */
|
|
+ netsnmp_assert(NULL != ipIfStatsRefreshRate_val_ptr);
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsRefreshRate_get",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * TODO:231:o: |-> Extract the current value of the ipIfStatsRefreshRate data.
|
|
+ * copy (* ipIfStatsRefreshRate_val_ptr ) from rowreq_ctx->data
|
|
+ */
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_REFRESHRATE])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipIfStatsRefreshRate_val_ptr) =
|
|
+ rowreq_ctx->ipIfStatsRefreshRate;
|
|
+
|
|
+ return MFD_SUCCESS;
|
|
+} /* ipIfStatsRefreshRate_get */
|
|
+
|
|
+
|
|
+
|
|
+/** @} */
|
|
diff --git a/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.h b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.h
|
|
new file mode 100644
|
|
index 0000000..0cc7e47
|
|
--- /dev/null
|
|
+++ b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.h
|
|
@@ -0,0 +1,246 @@
|
|
+/*
|
|
+ * Note: this file originally auto-generated by mib2c using
|
|
+ * version : 12088 $ of $
|
|
+ *
|
|
+ * $Id:$
|
|
+ *
|
|
+ * @file ipIfStatsTable_data_get.h
|
|
+ *
|
|
+ * @addtogroup get
|
|
+ *
|
|
+ * Prototypes for get functions
|
|
+ *
|
|
+ * @{
|
|
+ */
|
|
+#ifndef IPIFSTATSTABLE_DATA_GET_H
|
|
+#define IPIFSTATSTABLE_DATA_GET_H
|
|
+
|
|
+#ifdef __cplusplus
|
|
+extern "C" {
|
|
+#endif
|
|
+
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * GET function declarations
|
|
+ */
|
|
+
|
|
+ /*
|
|
+ *********************************************************************
|
|
+ * GET Table declarations
|
|
+ */
|
|
+/**********************************************************************
|
|
+ **********************************************************************
|
|
+ ***
|
|
+ *** Table ipIfStatsTable
|
|
+ ***
|
|
+ **********************************************************************
|
|
+ **********************************************************************/
|
|
+ /*
|
|
+ * IP-MIB::ipIfStatsTable is subid 3 of ipTrafficStats.
|
|
+ * Its status is Current.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3, length: 9
|
|
+ */
|
|
+ /*
|
|
+ * indexes
|
|
+ */
|
|
+
|
|
+ int ipIfStatsInReceives_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsInReceives_val_ptr);
|
|
+ int ipIfStatsHCInReceives_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ U64 *
|
|
+ ipIfStatsHCInReceives_val_ptr);
|
|
+ int ipIfStatsInOctets_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsInOctets_val_ptr);
|
|
+ int ipIfStatsHCInOctets_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ U64 *
|
|
+ ipIfStatsHCInOctets_val_ptr);
|
|
+ int ipIfStatsInHdrErrors_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsInHdrErrors_val_ptr);
|
|
+ int ipIfStatsInNoRoutes_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsInNoRoutes_val_ptr);
|
|
+ int ipIfStatsInAddrErrors_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsInAddrErrors_val_ptr);
|
|
+ int ipIfStatsInUnknownProtos_get(ipIfStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsInUnknownProtos_val_ptr);
|
|
+ int ipIfStatsInTruncatedPkts_get(ipIfStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsInTruncatedPkts_val_ptr);
|
|
+ int ipIfStatsInForwDatagrams_get(ipIfStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsInForwDatagrams_val_ptr);
|
|
+ int
|
|
+ ipIfStatsHCInForwDatagrams_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ U64 *
|
|
+ ipIfStatsHCInForwDatagrams_val_ptr);
|
|
+ int ipIfStatsReasmReqds_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsReasmReqds_val_ptr);
|
|
+ int ipIfStatsReasmOKs_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsReasmOKs_val_ptr);
|
|
+ int ipIfStatsReasmFails_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsReasmFails_val_ptr);
|
|
+ int ipIfStatsInDiscards_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsInDiscards_val_ptr);
|
|
+ int ipIfStatsInDelivers_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsInDelivers_val_ptr);
|
|
+ int ipIfStatsHCInDelivers_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ U64 *
|
|
+ ipIfStatsHCInDelivers_val_ptr);
|
|
+ int ipIfStatsOutRequests_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsOutRequests_val_ptr);
|
|
+ int ipIfStatsHCOutRequests_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ U64 *
|
|
+ ipIfStatsHCOutRequests_val_ptr);
|
|
+ int ipIfStatsOutForwDatagrams_get(ipIfStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsOutForwDatagrams_val_ptr);
|
|
+ int
|
|
+ ipIfStatsHCOutForwDatagrams_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ U64 *
|
|
+ ipIfStatsHCOutForwDatagrams_val_ptr);
|
|
+ int ipIfStatsOutDiscards_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsOutDiscards_val_ptr);
|
|
+ int ipIfStatsOutFragReqds_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsOutFragReqds_val_ptr);
|
|
+ int ipIfStatsOutFragOKs_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsOutFragOKs_val_ptr);
|
|
+ int ipIfStatsOutFragFails_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsOutFragFails_val_ptr);
|
|
+ int ipIfStatsOutFragCreates_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsOutFragCreates_val_ptr);
|
|
+ int ipIfStatsOutTransmits_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsOutTransmits_val_ptr);
|
|
+ int ipIfStatsHCOutTransmits_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ U64 *
|
|
+ ipIfStatsHCOutTransmits_val_ptr);
|
|
+ int ipIfStatsOutOctets_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsOutOctets_val_ptr);
|
|
+ int ipIfStatsHCOutOctets_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ U64 *
|
|
+ ipIfStatsHCOutOctets_val_ptr);
|
|
+ int ipIfStatsInMcastPkts_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsInMcastPkts_val_ptr);
|
|
+ int ipIfStatsHCInMcastPkts_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ U64 *
|
|
+ ipIfStatsHCInMcastPkts_val_ptr);
|
|
+ int ipIfStatsInMcastOctets_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsInMcastOctets_val_ptr);
|
|
+ int ipIfStatsHCInMcastOctets_get(ipIfStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ U64 *
|
|
+ ipIfStatsHCInMcastOctets_val_ptr);
|
|
+ int ipIfStatsOutMcastPkts_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsOutMcastPkts_val_ptr);
|
|
+ int ipIfStatsHCOutMcastPkts_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ U64 *
|
|
+ ipIfStatsHCOutMcastPkts_val_ptr);
|
|
+ int ipIfStatsOutMcastOctets_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsOutMcastOctets_val_ptr);
|
|
+ int ipIfStatsHCOutMcastOctets_get(ipIfStatsTable_rowreq_ctx
|
|
+ * rowreq_ctx,
|
|
+ U64 *
|
|
+ ipIfStatsHCOutMcastOctets_val_ptr);
|
|
+ int ipIfStatsInBcastPkts_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsInBcastPkts_val_ptr);
|
|
+ int ipIfStatsHCInBcastPkts_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ U64 *
|
|
+ ipIfStatsHCInBcastPkts_val_ptr);
|
|
+ int ipIfStatsOutBcastPkts_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsOutBcastPkts_val_ptr);
|
|
+ int ipIfStatsHCOutBcastPkts_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ U64 *
|
|
+ ipIfStatsHCOutBcastPkts_val_ptr);
|
|
+ int
|
|
+ ipIfStatsDiscontinuityTime_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsDiscontinuityTime_val_ptr);
|
|
+ int ipIfStatsRefreshRate_get(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long *
|
|
+ ipIfStatsRefreshRate_val_ptr);
|
|
+
|
|
+
|
|
+ int
|
|
+ ipIfStatsTable_indexes_set_tbl_idx(ipIfStatsTable_mib_index *
|
|
+ tbl_idx,
|
|
+ u_long ipIfStatsIPVersion_val,
|
|
+ long ipIfStatsIfIndex_val);
|
|
+ int ipIfStatsTable_indexes_set(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx,
|
|
+ u_long
|
|
+ ipIfStatsIPVersion_val,
|
|
+ long ipIfStatsIfIndex_val);
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+#ifdef __cplusplus
|
|
+}
|
|
+#endif
|
|
+#endif /* IPIFSTATSTABLE_DATA_GET_H */
|
|
+/** @} */
|
|
diff --git a/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_enums.h b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_enums.h
|
|
new file mode 100644
|
|
index 0000000..c3657d5
|
|
--- /dev/null
|
|
+++ b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_enums.h
|
|
@@ -0,0 +1,56 @@
|
|
+/*
|
|
+ * Note: this file originally auto-generated by mib2c using
|
|
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
|
|
+ *
|
|
+ * $Id:$
|
|
+ */
|
|
+#ifndef IPIFSTATSTABLE_ENUMS_H
|
|
+#define IPIFSTATSTABLE_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 ipIfStatsTable
|
|
+ *
|
|
+ *************************************************************************
|
|
+ *************************************************************************/
|
|
+
|
|
+/*************************************************************
|
|
+ * constants for enums for the MIB node
|
|
+ * ipIfStatsIPVersion (InetVersion / ASN_INTEGER)
|
|
+ *
|
|
+ * since a Textual Convention may be referenced more than once in a
|
|
+ * MIB, protect againt redefinitions of the enum values.
|
|
+ */
|
|
+#ifndef INETVERSION_ENUMS
|
|
+#define INETVERSION_ENUMS
|
|
+
|
|
+#define INETVERSION_UNKNOWN 0
|
|
+#define INETVERSION_IPV4 1
|
|
+#define INETVERSION_IPV6 2
|
|
+
|
|
+#endif /* INETVERSION_ENUMS */
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+#ifdef __cplusplus
|
|
+}
|
|
+#endif
|
|
+#endif /* IPIFSTATSTABLE_ENUMS_H */
|
|
diff --git a/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_interface.c b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_interface.c
|
|
new file mode 100644
|
|
index 0000000..d415a83
|
|
--- /dev/null
|
|
+++ b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_interface.c
|
|
@@ -0,0 +1,1395 @@
|
|
+/*
|
|
+ * 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 "ipIfStatsTable.h"
|
|
+
|
|
+
|
|
+#include <net-snmp/agent/table_container.h>
|
|
+#include <net-snmp/library/container.h>
|
|
+
|
|
+#include "ipIfStatsTable_interface.h"
|
|
+
|
|
+#include <ctype.h>
|
|
+
|
|
+/**********************************************************************
|
|
+ **********************************************************************
|
|
+ ***
|
|
+ *** Table ipIfStatsTable
|
|
+ ***
|
|
+ **********************************************************************
|
|
+ **********************************************************************/
|
|
+/*
|
|
+ * IP-MIB::ipIfStatsTable is subid 3 of ipTrafficStats.
|
|
+ * Its status is Current.
|
|
+ * OID: .1.3.6.1.2.1.4.31.3, length: 9
|
|
+ */
|
|
+typedef struct ipIfStatsTable_interface_ctx_s {
|
|
+
|
|
+ netsnmp_container *container;
|
|
+ netsnmp_cache *cache;
|
|
+
|
|
+ ipIfStatsTable_registration *user_ctx;
|
|
+
|
|
+ netsnmp_table_registration_info tbl_info;
|
|
+
|
|
+ netsnmp_baby_steps_access_methods access_multiplexer;
|
|
+
|
|
+ u_long last_changed;
|
|
+
|
|
+} ipIfStatsTable_interface_ctx;
|
|
+
|
|
+static ipIfStatsTable_interface_ctx ipIfStatsTable_if_ctx;
|
|
+
|
|
+static void _ipIfStatsTable_container_init(ipIfStatsTable_interface_ctx
|
|
+ * if_ctx);
|
|
+static void
|
|
+_ipIfStatsTable_container_shutdown(ipIfStatsTable_interface_ctx * if_ctx);
|
|
+
|
|
+
|
|
+netsnmp_container *
|
|
+ipIfStatsTable_container_get(void)
|
|
+{
|
|
+ return ipIfStatsTable_if_ctx.container;
|
|
+}
|
|
+
|
|
+ipIfStatsTable_registration *
|
|
+ipIfStatsTable_registration_get(void)
|
|
+{
|
|
+ return ipIfStatsTable_if_ctx.user_ctx;
|
|
+}
|
|
+
|
|
+ipIfStatsTable_registration *
|
|
+ipIfStatsTable_registration_set(ipIfStatsTable_registration * newreg)
|
|
+{
|
|
+ ipIfStatsTable_registration *old = ipIfStatsTable_if_ctx.user_ctx;
|
|
+ ipIfStatsTable_if_ctx.user_ctx = newreg;
|
|
+ return old;
|
|
+}
|
|
+
|
|
+int
|
|
+ipIfStatsTable_container_size(void)
|
|
+{
|
|
+ return CONTAINER_SIZE(ipIfStatsTable_if_ctx.container);
|
|
+}
|
|
+
|
|
+/*
|
|
+ * ipIfStatsTableLastChanged, which is the last time that a row in
|
|
+ * the table was changed or the last time a row was added/deleted from the
|
|
+ * table.
|
|
+ */
|
|
+void
|
|
+ipIfStatsTable_lastChange_set(u_long table_changed)
|
|
+{
|
|
+ DEBUGMSGTL(("ipIfStatsTable:lastChanged_set",
|
|
+ "called. was %ld, now %ld\n",
|
|
+ ipIfStatsTable_if_ctx.last_changed, table_changed));
|
|
+ ipIfStatsTable_if_ctx.last_changed = table_changed;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * mfd multiplexer modes
|
|
+ */
|
|
+static Netsnmp_Node_Handler _mfd_ipIfStatsTable_pre_request;
|
|
+static Netsnmp_Node_Handler _mfd_ipIfStatsTable_post_request;
|
|
+static Netsnmp_Node_Handler _mfd_ipIfStatsTable_object_lookup;
|
|
+static Netsnmp_Node_Handler _mfd_ipIfStatsTable_get_values;
|
|
+/**
|
|
+ * @internal
|
|
+ * Initialize the table ipIfStatsTable
|
|
+ * (Define its contents and how it's structured)
|
|
+ */
|
|
+void
|
|
+_ipIfStatsTable_initialize_interface(ipIfStatsTable_registration * reg_ptr,
|
|
+ u_long flags)
|
|
+{
|
|
+ netsnmp_baby_steps_access_methods *access_multiplexer =
|
|
+ &ipIfStatsTable_if_ctx.access_multiplexer;
|
|
+ netsnmp_table_registration_info *tbl_info =
|
|
+ &ipIfStatsTable_if_ctx.tbl_info;
|
|
+ netsnmp_handler_registration *reginfo;
|
|
+ netsnmp_mib_handler *handler;
|
|
+ int mfd_modes = 0;
|
|
+
|
|
+ DEBUGMSGTL(("internal:ipIfStatsTable:_ipIfStatsTable_initialize_interface", "called\n"));
|
|
+
|
|
+
|
|
+ /*************************************************
|
|
+ *
|
|
+ * save interface context for ipIfStatsTable
|
|
+ */
|
|
+ /*
|
|
+ * Setting up the table's definition
|
|
+ */
|
|
+ netsnmp_table_helper_add_indexes(tbl_info, ASN_INTEGER,
|
|
+ /** index: ipIfStatsIPVersion */
|
|
+ ASN_INTEGER,
|
|
+ /** index: ipIfStatsIfIndex */
|
|
+ 0);
|
|
+
|
|
+ /*
|
|
+ * Define the minimum and maximum accessible columns. This
|
|
+ * optimizes retrival.
|
|
+ */
|
|
+ tbl_info->min_column = IPIFSTATSTABLE_MIN_COL;
|
|
+ tbl_info->max_column = IPIFSTATSTABLE_MAX_COL;
|
|
+
|
|
+ /*
|
|
+ * save users context
|
|
+ */
|
|
+ ipIfStatsTable_if_ctx.user_ctx = reg_ptr;
|
|
+
|
|
+ /*
|
|
+ * call data access initialization code
|
|
+ */
|
|
+ ipIfStatsTable_init_data(reg_ptr);
|
|
+
|
|
+ /*
|
|
+ * set up the container
|
|
+ */
|
|
+ _ipIfStatsTable_container_init(&ipIfStatsTable_if_ctx);
|
|
+ if (NULL == ipIfStatsTable_if_ctx.container) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "could not initialize container for ipIfStatsTable\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * access_multiplexer: REQUIRED wrapper for get request handling
|
|
+ */
|
|
+ access_multiplexer->object_lookup = _mfd_ipIfStatsTable_object_lookup;
|
|
+ access_multiplexer->get_values = _mfd_ipIfStatsTable_get_values;
|
|
+
|
|
+ /*
|
|
+ * no wrappers yet
|
|
+ */
|
|
+ access_multiplexer->pre_request = _mfd_ipIfStatsTable_pre_request;
|
|
+ access_multiplexer->post_request = _mfd_ipIfStatsTable_post_request;
|
|
+
|
|
+
|
|
+ /*************************************************
|
|
+ *
|
|
+ * Create a registration, save our reg data, register table.
|
|
+ */
|
|
+ DEBUGMSGTL(("ipIfStatsTable:init_ipIfStatsTable",
|
|
+ "Registering ipIfStatsTable as a mibs-for-dummies table.\n"));
|
|
+ handler =
|
|
+ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
|
|
+ reginfo =
|
|
+ netsnmp_handler_registration_create("ipIfStatsTable", handler,
|
|
+ ipIfStatsTable_oid,
|
|
+ ipIfStatsTable_oid_size,
|
|
+ HANDLER_CAN_BABY_STEP |
|
|
+ HANDLER_CAN_RONLY);
|
|
+ if (NULL == reginfo) {
|
|
+ snmp_log(LOG_ERR, "error registering table ipIfStatsTable\n");
|
|
+ return;
|
|
+ }
|
|
+ reginfo->my_reg_void = &ipIfStatsTable_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,
|
|
+ ipIfStatsTable_if_ctx.
|
|
+ container,
|
|
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
|
|
+ netsnmp_inject_handler(reginfo, handler);
|
|
+
|
|
+ /*************************************************
|
|
+ *
|
|
+ * inject cache helper
|
|
+ */
|
|
+ if (NULL != ipIfStatsTable_if_ctx.cache) {
|
|
+ handler = netsnmp_cache_handler_get(ipIfStatsTable_if_ctx.cache);
|
|
+ netsnmp_inject_handler(reginfo, handler);
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * register table
|
|
+ */
|
|
+ netsnmp_register_table(reginfo, tbl_info);
|
|
+
|
|
+ /*
|
|
+ * register LastChanged
|
|
+ */
|
|
+ {
|
|
+ oid lc_oid[] = { IPIFSTATSTABLELASTCHANGE_OID };
|
|
+ netsnmp_register_watched_scalar(netsnmp_create_handler_registration
|
|
+ ("ipIfStatsTableLastChanged", NULL,
|
|
+ lc_oid, OID_LENGTH(lc_oid),
|
|
+ HANDLER_CAN_RONLY),
|
|
+ netsnmp_create_watcher_info((void
|
|
+ *)
|
|
+ &ipIfStatsTable_if_ctx.
|
|
+ last_changed,
|
|
+ sizeof
|
|
+ (u_long),
|
|
+ ASN_TIMETICKS,
|
|
+ WATCHER_FIXED_SIZE));
|
|
+ }
|
|
+} /* _ipIfStatsTable_initialize_interface */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ * Shutdown the table ipIfStatsTable
|
|
+ */
|
|
+void
|
|
+_ipIfStatsTable_shutdown_interface(ipIfStatsTable_registration * reg_ptr)
|
|
+{
|
|
+ /*
|
|
+ * shutdown the container
|
|
+ */
|
|
+ _ipIfStatsTable_container_shutdown(&ipIfStatsTable_if_ctx);
|
|
+}
|
|
+
|
|
+void
|
|
+ipIfStatsTable_valid_columns_set(netsnmp_column_info *vc)
|
|
+{
|
|
+ ipIfStatsTable_if_ctx.tbl_info.valid_columns = vc;
|
|
+} /* ipIfStatsTable_valid_columns_set */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ * convert the index component stored in the context to an oid
|
|
+ */
|
|
+int
|
|
+ipIfStatsTable_index_to_oid(netsnmp_index * oid_idx,
|
|
+ ipIfStatsTable_mib_index * mib_idx)
|
|
+{
|
|
+ int err = SNMP_ERR_NOERROR;
|
|
+
|
|
+ /*
|
|
+ * temp storage for parsing indexes
|
|
+ */
|
|
+ /*
|
|
+ * ipIfStatsIPVersion(1)/InetVersion/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
|
|
+ */
|
|
+ netsnmp_variable_list var_ipIfStatsIPVersion;
|
|
+ /*
|
|
+ * ipIfStatsIfIndex(2)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
|
|
+ */
|
|
+ netsnmp_variable_list var_ipIfStatsIfIndex;
|
|
+
|
|
+ /*
|
|
+ * set up varbinds
|
|
+ */
|
|
+ memset(&var_ipIfStatsIPVersion, 0x00, sizeof(var_ipIfStatsIPVersion));
|
|
+ var_ipIfStatsIPVersion.type = ASN_INTEGER;
|
|
+ memset(&var_ipIfStatsIfIndex, 0x00, sizeof(var_ipIfStatsIfIndex));
|
|
+ var_ipIfStatsIfIndex.type = ASN_INTEGER;
|
|
+
|
|
+ /*
|
|
+ * chain temp index varbinds together
|
|
+ */
|
|
+ var_ipIfStatsIPVersion.next_variable = &var_ipIfStatsIfIndex;
|
|
+ var_ipIfStatsIfIndex.next_variable = NULL;
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsTable_index_to_oid",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsIPVersion(1)/InetVersion/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
|
|
+ */
|
|
+ snmp_set_var_value(&var_ipIfStatsIPVersion,
|
|
+ (u_char *) & mib_idx->ipIfStatsIPVersion,
|
|
+ sizeof(mib_idx->ipIfStatsIPVersion));
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsIfIndex(2)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
|
|
+ */
|
|
+ snmp_set_var_value(&var_ipIfStatsIfIndex,
|
|
+ (u_char *) & mib_idx->ipIfStatsIfIndex,
|
|
+ sizeof(mib_idx->ipIfStatsIfIndex));
|
|
+
|
|
+
|
|
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
|
|
+ NULL, 0, &var_ipIfStatsIPVersion);
|
|
+ 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_ipIfStatsIPVersion);
|
|
+
|
|
+ return err;
|
|
+} /* ipIfStatsTable_index_to_oid */
|
|
+
|
|
+/**
|
|
+ * extract ipIfStatsTable indexes from a netsnmp_index
|
|
+ *
|
|
+ * @retval SNMP_ERR_NOERROR : no error
|
|
+ * @retval SNMP_ERR_GENERR : error
|
|
+ */
|
|
+int
|
|
+ipIfStatsTable_index_from_oid(netsnmp_index * oid_idx,
|
|
+ ipIfStatsTable_mib_index * mib_idx)
|
|
+{
|
|
+ int err = SNMP_ERR_NOERROR;
|
|
+
|
|
+ /*
|
|
+ * temp storage for parsing indexes
|
|
+ */
|
|
+ /*
|
|
+ * ipIfStatsIPVersion(1)/InetVersion/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
|
|
+ */
|
|
+ netsnmp_variable_list var_ipIfStatsIPVersion;
|
|
+ /*
|
|
+ * ipIfStatsIfIndex(2)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
|
|
+ */
|
|
+ netsnmp_variable_list var_ipIfStatsIfIndex;
|
|
+
|
|
+ /*
|
|
+ * set up varbinds
|
|
+ */
|
|
+ memset(&var_ipIfStatsIPVersion, 0x00, sizeof(var_ipIfStatsIPVersion));
|
|
+ var_ipIfStatsIPVersion.type = ASN_INTEGER;
|
|
+ memset(&var_ipIfStatsIfIndex, 0x00, sizeof(var_ipIfStatsIfIndex));
|
|
+ var_ipIfStatsIfIndex.type = ASN_INTEGER;
|
|
+
|
|
+ /*
|
|
+ * chain temp index varbinds together
|
|
+ */
|
|
+ var_ipIfStatsIPVersion.next_variable = &var_ipIfStatsIfIndex;
|
|
+ var_ipIfStatsIfIndex.next_variable = NULL;
|
|
+
|
|
+
|
|
+ DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsTable_index_from_oid",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * parse the oid into the individual index components
|
|
+ */
|
|
+ err = parse_oid_indexes(oid_idx->oids, oid_idx->len,
|
|
+ &var_ipIfStatsIPVersion);
|
|
+ if (err == SNMP_ERR_NOERROR) {
|
|
+ /*
|
|
+ * copy out values
|
|
+ */
|
|
+ mib_idx->ipIfStatsIPVersion =
|
|
+ *((u_long *) var_ipIfStatsIPVersion.val.string);
|
|
+ mib_idx->ipIfStatsIfIndex =
|
|
+ *((long *) var_ipIfStatsIfIndex.val.string);
|
|
+
|
|
+
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * parsing may have allocated memory. free it.
|
|
+ */
|
|
+ snmp_reset_var_buffers(&var_ipIfStatsIPVersion);
|
|
+
|
|
+ return err;
|
|
+} /* ipIfStatsTable_index_from_oid */
|
|
+
|
|
+
|
|
+/*
|
|
+ *********************************************************************
|
|
+ * @internal
|
|
+ * allocate resources for a ipIfStatsTable_rowreq_ctx
|
|
+ */
|
|
+ipIfStatsTable_rowreq_ctx *
|
|
+ipIfStatsTable_allocate_rowreq_ctx(ipIfStatsTable_data * data,
|
|
+ void *user_init_ctx)
|
|
+{
|
|
+ ipIfStatsTable_rowreq_ctx *rowreq_ctx =
|
|
+ SNMP_MALLOC_TYPEDEF(ipIfStatsTable_rowreq_ctx);
|
|
+
|
|
+ DEBUGMSGTL(("internal:ipIfStatsTable:ipIfStatsTable_allocate_rowreq_ctx", "called\n"));
|
|
+
|
|
+ if (NULL == rowreq_ctx) {
|
|
+ snmp_log(LOG_ERR, "Couldn't allocate memory for a "
|
|
+ "ipIfStatsTable_rowreq_ctx.\n");
|
|
+ return NULL;
|
|
+ } else {
|
|
+ if (NULL != data) {
|
|
+ /*
|
|
+ * track if we got data from user
|
|
+ */
|
|
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DATA_FROM_USER;
|
|
+ rowreq_ctx->data = data;
|
|
+ } else if (NULL ==
|
|
+ (rowreq_ctx->data = ipIfStatsTable_allocate_data())) {
|
|
+ SNMP_FREE(rowreq_ctx);
|
|
+ return NULL;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * undo context will be allocated when needed (in *_undo_setup)
|
|
+ */
|
|
+
|
|
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
|
|
+
|
|
+ rowreq_ctx->ipIfStatsTable_data_list = NULL;
|
|
+
|
|
+ /*
|
|
+ * if we allocated data, call init routine
|
|
+ */
|
|
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
|
|
+ if (SNMPERR_SUCCESS !=
|
|
+ ipIfStatsTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
|
|
+ ipIfStatsTable_release_rowreq_ctx(rowreq_ctx);
|
|
+ rowreq_ctx = NULL;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return rowreq_ctx;
|
|
+} /* ipIfStatsTable_allocate_rowreq_ctx */
|
|
+
|
|
+/*
|
|
+ * @internal
|
|
+ * release resources for a ipIfStatsTable_rowreq_ctx
|
|
+ */
|
|
+void
|
|
+ipIfStatsTable_release_rowreq_ctx(ipIfStatsTable_rowreq_ctx * rowreq_ctx)
|
|
+{
|
|
+ DEBUGMSGTL(("internal:ipIfStatsTable:ipIfStatsTable_release_rowreq_ctx", "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ ipIfStatsTable_rowreq_ctx_cleanup(rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * for non-transient data, don't free data we got from the user
|
|
+ */
|
|
+ if ((rowreq_ctx->data) &&
|
|
+ !(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER))
|
|
+ ipIfStatsTable_release_data(rowreq_ctx->data);
|
|
+
|
|
+ /*
|
|
+ * free index oid pointer
|
|
+ */
|
|
+ if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
|
|
+ free(rowreq_ctx->oid_idx.oids);
|
|
+
|
|
+ SNMP_FREE(rowreq_ctx);
|
|
+} /* ipIfStatsTable_release_rowreq_ctx */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ * wrapper
|
|
+ */
|
|
+static int
|
|
+_mfd_ipIfStatsTable_pre_request(netsnmp_mib_handler *handler,
|
|
+ netsnmp_handler_registration *reginfo,
|
|
+ netsnmp_agent_request_info *agtreq_info,
|
|
+ netsnmp_request_info *requests)
|
|
+{
|
|
+ int rc;
|
|
+
|
|
+ DEBUGMSGTL(("internal:ipIfStatsTable:_mfd_ipIfStatsTable_pre_request",
|
|
+ "called\n"));
|
|
+
|
|
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
|
|
+ DEBUGMSGTL(("internal:ipIfStatsTable",
|
|
+ "skipping additional pre_request\n"));
|
|
+ return SNMP_ERR_NOERROR;
|
|
+ }
|
|
+
|
|
+ rc = ipIfStatsTable_pre_request(ipIfStatsTable_if_ctx.user_ctx);
|
|
+ if (MFD_SUCCESS != rc) {
|
|
+ /*
|
|
+ * nothing we can do about it but log it
|
|
+ */
|
|
+ DEBUGMSGTL(("ipIfStatsTable", "error %d from "
|
|
+ "ipIfStatsTable_pre_request\n", rc));
|
|
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
|
|
+ }
|
|
+
|
|
+ return SNMP_ERR_NOERROR;
|
|
+} /* _mfd_ipIfStatsTable_pre_request */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ * wrapper
|
|
+ */
|
|
+static int
|
|
+_mfd_ipIfStatsTable_post_request(netsnmp_mib_handler *handler,
|
|
+ netsnmp_handler_registration *reginfo,
|
|
+ netsnmp_agent_request_info *agtreq_info,
|
|
+ netsnmp_request_info *requests)
|
|
+{
|
|
+ ipIfStatsTable_rowreq_ctx *rowreq_ctx =
|
|
+ netsnmp_container_table_row_extract(requests);
|
|
+ int rc, packet_rc;
|
|
+
|
|
+ DEBUGMSGTL(("internal:ipIfStatsTable:_mfd_ipIfStatsTable_post_request",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * release row context, if deleted
|
|
+ */
|
|
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
|
|
+ ipIfStatsTable_release_rowreq_ctx(rowreq_ctx);
|
|
+
|
|
+ /*
|
|
+ * wait for last call before calling user
|
|
+ */
|
|
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
|
|
+ DEBUGMSGTL(("internal:ipIfStatsTable",
|
|
+ "waiting for last post_request\n"));
|
|
+ return SNMP_ERR_NOERROR;
|
|
+ }
|
|
+
|
|
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
|
|
+ rc = ipIfStatsTable_post_request(ipIfStatsTable_if_ctx.user_ctx,
|
|
+ packet_rc);
|
|
+ if (MFD_SUCCESS != rc) {
|
|
+ /*
|
|
+ * nothing we can do about it but log it
|
|
+ */
|
|
+ DEBUGMSGTL(("ipIfStatsTable", "error %d from "
|
|
+ "ipIfStatsTable_post_request\n", rc));
|
|
+ }
|
|
+
|
|
+ return SNMP_ERR_NOERROR;
|
|
+} /* _mfd_ipIfStatsTable_post_request */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ * wrapper
|
|
+ */
|
|
+static int
|
|
+_mfd_ipIfStatsTable_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;
|
|
+ ipIfStatsTable_rowreq_ctx *rowreq_ctx =
|
|
+ netsnmp_container_table_row_extract(requests);
|
|
+
|
|
+ DEBUGMSGTL(("internal:ipIfStatsTable:_mfd_ipIfStatsTable_object_lookup", "called\n"));
|
|
+
|
|
+ /*
|
|
+ * get our context from mfd
|
|
+ * ipIfStatsTable_interface_ctx *if_ctx =
|
|
+ * (ipIfStatsTable_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
|
|
+ ipIfStatsTable_row_prep(rowreq_ctx);
|
|
+
|
|
+ return SNMP_VALIDATE_ERR(rc);
|
|
+} /* _mfd_ipIfStatsTable_object_lookup */
|
|
+
|
|
+/***********************************************************************
|
|
+ *
|
|
+ * GET processing
|
|
+ *
|
|
+ ***********************************************************************/
|
|
+/*
|
|
+ * @internal
|
|
+ * Retrieve the value for a particular column
|
|
+ */
|
|
+NETSNMP_STATIC_INLINE int
|
|
+_ipIfStatsTable_get_column(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
|
|
+ netsnmp_variable_list * var, int column)
|
|
+{
|
|
+ int rc = SNMPERR_SUCCESS;
|
|
+
|
|
+ DEBUGMSGTL(("internal:ipIfStatsTable:_mfd_ipIfStatsTable_get_column",
|
|
+ "called for %d\n", column));
|
|
+
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ switch (column) {
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsInReceives(3)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSINRECEIVES:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsInReceives_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsHCInReceives(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSHCINRECEIVES:
|
|
+ var->val_len = sizeof(U64);
|
|
+ var->type = ASN_COUNTER64;
|
|
+ rc = ipIfStatsHCInReceives_get(rowreq_ctx,
|
|
+ (U64 *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsInOctets(5)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSINOCTETS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsInOctets_get(rowreq_ctx, (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsHCInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSHCINOCTETS:
|
|
+ var->val_len = sizeof(U64);
|
|
+ var->type = ASN_COUNTER64;
|
|
+ rc = ipIfStatsHCInOctets_get(rowreq_ctx, (U64 *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsInHdrErrors(7)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSINHDRERRORS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsInHdrErrors_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsInNoRoutes(8)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSINNOROUTES:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsInNoRoutes_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsInAddrErrors(9)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSINADDRERRORS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsInAddrErrors_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsInUnknownProtos(10)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSINUNKNOWNPROTOS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsInUnknownProtos_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsInTruncatedPkts(11)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSINTRUNCATEDPKTS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsInTruncatedPkts_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsInForwDatagrams(12)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSINFORWDATAGRAMS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsInForwDatagrams_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsHCInForwDatagrams(13)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSHCINFORWDATAGRAMS:
|
|
+ var->val_len = sizeof(U64);
|
|
+ var->type = ASN_COUNTER64;
|
|
+ rc = ipIfStatsHCInForwDatagrams_get(rowreq_ctx,
|
|
+ (U64 *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsReasmReqds(14)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSREASMREQDS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsReasmReqds_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsReasmOKs(15)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSREASMOKS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsReasmOKs_get(rowreq_ctx, (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsReasmFails(16)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSREASMFAILS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsReasmFails_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsInDiscards(17)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSINDISCARDS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsInDiscards_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsInDelivers(18)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSINDELIVERS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsInDelivers_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsHCInDelivers(19)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSHCINDELIVERS:
|
|
+ var->val_len = sizeof(U64);
|
|
+ var->type = ASN_COUNTER64;
|
|
+ rc = ipIfStatsHCInDelivers_get(rowreq_ctx,
|
|
+ (U64 *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsOutRequests(20)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSOUTREQUESTS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsOutRequests_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsHCOutRequests(21)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSHCOUTREQUESTS:
|
|
+ var->val_len = sizeof(U64);
|
|
+ var->type = ASN_COUNTER64;
|
|
+ rc = ipIfStatsHCOutRequests_get(rowreq_ctx,
|
|
+ (U64 *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsOutForwDatagrams(23)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSOUTFORWDATAGRAMS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsOutForwDatagrams_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsHCOutForwDatagrams(24)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSHCOUTFORWDATAGRAMS:
|
|
+ var->val_len = sizeof(U64);
|
|
+ var->type = ASN_COUNTER64;
|
|
+ rc = ipIfStatsHCOutForwDatagrams_get(rowreq_ctx,
|
|
+ (U64 *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsOutDiscards(25)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSOUTDISCARDS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsOutDiscards_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsOutFragReqds(26)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSOUTFRAGREQDS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsOutFragReqds_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsOutFragOKs(27)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSOUTFRAGOKS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsOutFragOKs_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsOutFragFails(28)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSOUTFRAGFAILS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsOutFragFails_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsOutFragCreates(29)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSOUTFRAGCREATES:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsOutFragCreates_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsOutTransmits(30)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSOUTTRANSMITS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsOutTransmits_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsHCOutTransmits(31)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSHCOUTTRANSMITS:
|
|
+ var->val_len = sizeof(U64);
|
|
+ var->type = ASN_COUNTER64;
|
|
+ rc = ipIfStatsHCOutTransmits_get(rowreq_ctx,
|
|
+ (U64 *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsOutOctets(32)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSOUTOCTETS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsOutOctets_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsHCOutOctets(33)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSHCOUTOCTETS:
|
|
+ var->val_len = sizeof(U64);
|
|
+ var->type = ASN_COUNTER64;
|
|
+ rc = ipIfStatsHCOutOctets_get(rowreq_ctx, (U64 *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsInMcastPkts(34)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSINMCASTPKTS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsInMcastPkts_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsHCInMcastPkts(35)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSHCINMCASTPKTS:
|
|
+ var->val_len = sizeof(U64);
|
|
+ var->type = ASN_COUNTER64;
|
|
+ rc = ipIfStatsHCInMcastPkts_get(rowreq_ctx,
|
|
+ (U64 *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsInMcastOctets(36)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSINMCASTOCTETS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsInMcastOctets_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsHCInMcastOctets(37)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSHCINMCASTOCTETS:
|
|
+ var->val_len = sizeof(U64);
|
|
+ var->type = ASN_COUNTER64;
|
|
+ rc = ipIfStatsHCInMcastOctets_get(rowreq_ctx,
|
|
+ (U64 *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsOutMcastPkts(38)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSOUTMCASTPKTS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsOutMcastPkts_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsHCOutMcastPkts(39)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSHCOUTMCASTPKTS:
|
|
+ var->val_len = sizeof(U64);
|
|
+ var->type = ASN_COUNTER64;
|
|
+ rc = ipIfStatsHCOutMcastPkts_get(rowreq_ctx,
|
|
+ (U64 *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsOutMcastOctets(40)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSOUTMCASTOCTETS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsOutMcastOctets_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsHCOutMcastOctets(41)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSHCOUTMCASTOCTETS:
|
|
+ var->val_len = sizeof(U64);
|
|
+ var->type = ASN_COUNTER64;
|
|
+ rc = ipIfStatsHCOutMcastOctets_get(rowreq_ctx,
|
|
+ (U64 *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsInBcastPkts(42)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSINBCASTPKTS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsInBcastPkts_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsHCInBcastPkts(43)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSHCINBCASTPKTS:
|
|
+ var->val_len = sizeof(U64);
|
|
+ var->type = ASN_COUNTER64;
|
|
+ rc = ipIfStatsHCInBcastPkts_get(rowreq_ctx,
|
|
+ (U64 *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsOutBcastPkts(44)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSOUTBCASTPKTS:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_COUNTER;
|
|
+ rc = ipIfStatsOutBcastPkts_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsHCOutBcastPkts(45)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSHCOUTBCASTPKTS:
|
|
+ var->val_len = sizeof(U64);
|
|
+ var->type = ASN_COUNTER64;
|
|
+ rc = ipIfStatsHCOutBcastPkts_get(rowreq_ctx,
|
|
+ (U64 *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsDiscontinuityTime(46)/TimeStamp/ASN_TIMETICKS/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSDISCONTINUITYTIME:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_TIMETICKS;
|
|
+ rc = ipIfStatsDiscontinuityTime_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ /*
|
|
+ * ipIfStatsRefreshRate(47)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
|
|
+ */
|
|
+ case COLUMN_IPIFSTATSREFRESHRATE:
|
|
+ var->val_len = sizeof(u_long);
|
|
+ var->type = ASN_UNSIGNED;
|
|
+ rc = ipIfStatsRefreshRate_get(rowreq_ctx,
|
|
+ (u_long *) var->val.string);
|
|
+ break;
|
|
+
|
|
+ default:
|
|
+ if (IPIFSTATSTABLE_MIN_COL <= column
|
|
+ && column <= IPIFSTATSTABLE_MAX_COL) {
|
|
+ DEBUGMSGTL(("internal:ipIfStatsTable:_mfd_ipIfStatsTable_get_column", "assume column %d is reserved\n", column));
|
|
+ rc = MFD_SKIP;
|
|
+ } else {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "unknown column %d in _ipIfStatsTable_get_column\n",
|
|
+ column);
|
|
+ }
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ return rc;
|
|
+} /* _ipIfStatsTable_get_column */
|
|
+
|
|
+int
|
|
+_mfd_ipIfStatsTable_get_values(netsnmp_mib_handler *handler,
|
|
+ netsnmp_handler_registration *reginfo,
|
|
+ netsnmp_agent_request_info *agtreq_info,
|
|
+ netsnmp_request_info *requests)
|
|
+{
|
|
+ ipIfStatsTable_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:ipIfStatsTable:_mfd_ipIfStatsTable_get_values",
|
|
+ "called\n"));
|
|
+
|
|
+ netsnmp_assert(NULL != rowreq_ctx);
|
|
+
|
|
+ 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 = _ipIfStatsTable_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_ipIfStatsTable_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:ipIfStatsTable:_cache_load", "called\n"));
|
|
+
|
|
+ if ((NULL == cache) || (NULL == cache->magic)) {
|
|
+ snmp_log(LOG_ERR, "invalid cache for ipIfStatsTable_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 ipIfStatsTable_container_load((netsnmp_container *) cache->
|
|
+ magic);
|
|
+} /* _cache_load */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ */
|
|
+static void
|
|
+_cache_free(netsnmp_cache * cache, void *magic)
|
|
+{
|
|
+ netsnmp_container *container;
|
|
+
|
|
+ DEBUGMSGTL(("internal:ipIfStatsTable:_cache_free", "called\n"));
|
|
+
|
|
+ if ((NULL == cache) || (NULL == cache->magic)) {
|
|
+ snmp_log(LOG_ERR, "invalid cache in ipIfStatsTable_cache_free\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ container = (netsnmp_container *) cache->magic;
|
|
+
|
|
+ _container_free(container);
|
|
+} /* _cache_free */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ */
|
|
+static void
|
|
+_container_item_free(ipIfStatsTable_rowreq_ctx * rowreq_ctx, void *context)
|
|
+{
|
|
+ DEBUGMSGTL(("internal:ipIfStatsTable:_container_item_free",
|
|
+ "called\n"));
|
|
+
|
|
+ if (NULL == rowreq_ctx)
|
|
+ return;
|
|
+
|
|
+ ipIfStatsTable_release_rowreq_ctx(rowreq_ctx);
|
|
+} /* _container_item_free */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ */
|
|
+static void
|
|
+_container_free(netsnmp_container * container)
|
|
+{
|
|
+ DEBUGMSGTL(("internal:ipIfStatsTable:_container_free", "called\n"));
|
|
+
|
|
+ if (NULL == container) {
|
|
+ snmp_log(LOG_ERR,
|
|
+ "invalid container in ipIfStatsTable_container_free\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * call user code
|
|
+ */
|
|
+ ipIfStatsTable_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
|
|
+_ipIfStatsTable_container_init(ipIfStatsTable_interface_ctx * if_ctx)
|
|
+{
|
|
+ DEBUGMSGTL(("internal:ipIfStatsTable:_ipIfStatsTable_container_init",
|
|
+ "called\n"));
|
|
+
|
|
+ /*
|
|
+ * cache init
|
|
+ */
|
|
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
|
|
+ _cache_load, _cache_free,
|
|
+ ipIfStatsTable_oid,
|
|
+ ipIfStatsTable_oid_size);
|
|
+
|
|
+ if (NULL == if_ctx->cache) {
|
|
+ snmp_log(LOG_ERR, "error creating cache for ipIfStatsTable\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
|
|
+
|
|
+ ipIfStatsTable_container_init(&if_ctx->container, if_ctx->cache);
|
|
+ if (NULL == if_ctx->container)
|
|
+ if_ctx->container =
|
|
+ netsnmp_container_find("ipIfStatsTable:table_container");
|
|
+ if (NULL == if_ctx->container) {
|
|
+ snmp_log(LOG_ERR, "error creating container in "
|
|
+ "ipIfStatsTable_container_init\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ if (NULL != if_ctx->cache)
|
|
+ if_ctx->cache->magic = (void *) if_ctx->container;
|
|
+} /* _ipIfStatsTable_container_init */
|
|
+
|
|
+/**
|
|
+ * @internal
|
|
+ * shutdown the container with functions or wrappers
|
|
+ */
|
|
+void
|
|
+_ipIfStatsTable_container_shutdown(ipIfStatsTable_interface_ctx * if_ctx)
|
|
+{
|
|
+ DEBUGMSGTL(("internal:ipIfStatsTable:_ipIfStatsTable_container_shutdown", "called\n"));
|
|
+
|
|
+ ipIfStatsTable_container_shutdown(if_ctx->container);
|
|
+
|
|
+ _container_free(if_ctx->container);
|
|
+
|
|
+} /* _ipIfStatsTable_container_shutdown */
|
|
+
|
|
+
|
|
+ipIfStatsTable_rowreq_ctx *
|
|
+ipIfStatsTable_row_find_by_mib_index(ipIfStatsTable_mib_index * mib_idx)
|
|
+{
|
|
+ ipIfStatsTable_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 = ipIfStatsTable_index_to_oid(&oid_idx, mib_idx);
|
|
+ if (MFD_SUCCESS != rc)
|
|
+ return NULL;
|
|
+
|
|
+ rowreq_ctx = CONTAINER_FIND(ipIfStatsTable_if_ctx.container, &oid_idx);
|
|
+
|
|
+ return rowreq_ctx;
|
|
+}
|
|
diff --git a/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_interface.h b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_interface.h
|
|
new file mode 100644
|
|
index 0000000..c43de84
|
|
--- /dev/null
|
|
+++ b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_interface.h
|
|
@@ -0,0 +1,99 @@
|
|
+/*
|
|
+ * 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 IPIFSTATSTABLE_INTERFACE_H
|
|
+#define IPIFSTATSTABLE_INTERFACE_H
|
|
+
|
|
+#ifdef __cplusplus
|
|
+extern "C" {
|
|
+#endif
|
|
+
|
|
+
|
|
+#include "ipIfStatsTable.h"
|
|
+
|
|
+
|
|
+ /*
|
|
+ ********************************************************************
|
|
+ * Table declarations
|
|
+ */
|
|
+
|
|
+ /*
|
|
+ * PUBLIC interface initialization routine
|
|
+ */
|
|
+ void
|
|
+ _ipIfStatsTable_initialize_interface(ipIfStatsTable_registration *
|
|
+ user_ctx, u_long flags);
|
|
+ void
|
|
+ _ipIfStatsTable_shutdown_interface(ipIfStatsTable_registration *
|
|
+ user_ctx);
|
|
+
|
|
+ ipIfStatsTable_registration *ipIfStatsTable_registration_get(void);
|
|
+
|
|
+ ipIfStatsTable_registration
|
|
+ *ipIfStatsTable_registration_set(ipIfStatsTable_registration *
|
|
+ newreg);
|
|
+
|
|
+ netsnmp_container *ipIfStatsTable_container_get(void);
|
|
+ int ipIfStatsTable_container_size(void);
|
|
+
|
|
+ ipIfStatsTable_rowreq_ctx
|
|
+ *ipIfStatsTable_allocate_rowreq_ctx(ipIfStatsTable_data *, void *);
|
|
+ void
|
|
+ ipIfStatsTable_release_rowreq_ctx(ipIfStatsTable_rowreq_ctx *
|
|
+ rowreq_ctx);
|
|
+
|
|
+ int ipIfStatsTable_index_to_oid(netsnmp_index * oid_idx,
|
|
+ ipIfStatsTable_mib_index *
|
|
+ mib_idx);
|
|
+ int ipIfStatsTable_index_from_oid(netsnmp_index * oid_idx,
|
|
+ ipIfStatsTable_mib_index
|
|
+ * mib_idx);
|
|
+
|
|
+ /*
|
|
+ * access to certain internals. use with caution!
|
|
+ */
|
|
+ void ipIfStatsTable_valid_columns_set(netsnmp_column_info
|
|
+ *vc);
|
|
+
|
|
+ /*
|
|
+ */
|
|
+ void ipIfStatsTable_lastChange_set(u_long uptime);
|
|
+
|
|
+
|
|
+#ifdef __cplusplus
|
|
+}
|
|
+#endif
|
|
+#endif /* IPIFSTATSTABLE_INTERFACE_H */
|
|
+/** @} */
|
|
diff --git a/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_oids.h b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_oids.h
|
|
new file mode 100644
|
|
index 0000000..76607a9
|
|
--- /dev/null
|
|
+++ b/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_oids.h
|
|
@@ -0,0 +1,122 @@
|
|
+/*
|
|
+ * Note: this file originally auto-generated by mib2c using
|
|
+ * : generic-table-oids.m2c 12855 2005-09-27 15:56:08Z rstory $
|
|
+ *
|
|
+ * $Id:$
|
|
+ */
|
|
+#ifndef IPIFSTATSTABLE_OIDS_H
|
|
+#define IPIFSTATSTABLE_OIDS_H
|
|
+
|
|
+#ifdef __cplusplus
|
|
+extern "C" {
|
|
+#endif
|
|
+
|
|
+
|
|
+ /*
|
|
+ * column number definitions for table ipIfStatsTable
|
|
+ */
|
|
+#define IPIFSTATSTABLE_OID 1,3,6,1,2,1,4,31,3
|
|
+#define IPIFSTATSTABLELASTCHANGE_OID 1,3,6,1,2,1,4,31,2
|
|
+
|
|
+#define COLUMN_IPIFSTATSIPVERSION 1
|
|
+
|
|
+#define COLUMN_IPIFSTATSIFINDEX 2
|
|
+
|
|
+#define COLUMN_IPIFSTATSINRECEIVES 3
|
|
+
|
|
+#define COLUMN_IPIFSTATSHCINRECEIVES 4
|
|
+
|
|
+#define COLUMN_IPIFSTATSINOCTETS 5
|
|
+
|
|
+#define COLUMN_IPIFSTATSHCINOCTETS 6
|
|
+
|
|
+#define COLUMN_IPIFSTATSINHDRERRORS 7
|
|
+
|
|
+#define COLUMN_IPIFSTATSINNOROUTES 8
|
|
+
|
|
+#define COLUMN_IPIFSTATSINADDRERRORS 9
|
|
+
|
|
+#define COLUMN_IPIFSTATSINUNKNOWNPROTOS 10
|
|
+
|
|
+#define COLUMN_IPIFSTATSINTRUNCATEDPKTS 11
|
|
+
|
|
+#define COLUMN_IPIFSTATSINFORWDATAGRAMS 12
|
|
+
|
|
+#define COLUMN_IPIFSTATSHCINFORWDATAGRAMS 13
|
|
+
|
|
+#define COLUMN_IPIFSTATSREASMREQDS 14
|
|
+
|
|
+#define COLUMN_IPIFSTATSREASMOKS 15
|
|
+
|
|
+#define COLUMN_IPIFSTATSREASMFAILS 16
|
|
+
|
|
+#define COLUMN_IPIFSTATSINDISCARDS 17
|
|
+
|
|
+#define COLUMN_IPIFSTATSINDELIVERS 18
|
|
+
|
|
+#define COLUMN_IPIFSTATSHCINDELIVERS 19
|
|
+
|
|
+#define COLUMN_IPIFSTATSOUTREQUESTS 20
|
|
+
|
|
+#define COLUMN_IPIFSTATSHCOUTREQUESTS 21
|
|
+
|
|
+#define COLUMN_IPIFSTATSOUTFORWDATAGRAMS 23
|
|
+
|
|
+#define COLUMN_IPIFSTATSHCOUTFORWDATAGRAMS 24
|
|
+
|
|
+#define COLUMN_IPIFSTATSOUTDISCARDS 25
|
|
+
|
|
+#define COLUMN_IPIFSTATSOUTFRAGREQDS 26
|
|
+
|
|
+#define COLUMN_IPIFSTATSOUTFRAGOKS 27
|
|
+
|
|
+#define COLUMN_IPIFSTATSOUTFRAGFAILS 28
|
|
+
|
|
+#define COLUMN_IPIFSTATSOUTFRAGCREATES 29
|
|
+
|
|
+#define COLUMN_IPIFSTATSOUTTRANSMITS 30
|
|
+
|
|
+#define COLUMN_IPIFSTATSHCOUTTRANSMITS 31
|
|
+
|
|
+#define COLUMN_IPIFSTATSOUTOCTETS 32
|
|
+
|
|
+#define COLUMN_IPIFSTATSHCOUTOCTETS 33
|
|
+
|
|
+#define COLUMN_IPIFSTATSINMCASTPKTS 34
|
|
+
|
|
+#define COLUMN_IPIFSTATSHCINMCASTPKTS 35
|
|
+
|
|
+#define COLUMN_IPIFSTATSINMCASTOCTETS 36
|
|
+
|
|
+#define COLUMN_IPIFSTATSHCINMCASTOCTETS 37
|
|
+
|
|
+#define COLUMN_IPIFSTATSOUTMCASTPKTS 38
|
|
+
|
|
+#define COLUMN_IPIFSTATSHCOUTMCASTPKTS 39
|
|
+
|
|
+#define COLUMN_IPIFSTATSOUTMCASTOCTETS 40
|
|
+
|
|
+#define COLUMN_IPIFSTATSHCOUTMCASTOCTETS 41
|
|
+
|
|
+#define COLUMN_IPIFSTATSINBCASTPKTS 42
|
|
+
|
|
+#define COLUMN_IPIFSTATSHCINBCASTPKTS 43
|
|
+
|
|
+#define COLUMN_IPIFSTATSOUTBCASTPKTS 44
|
|
+
|
|
+#define COLUMN_IPIFSTATSHCOUTBCASTPKTS 45
|
|
+
|
|
+#define COLUMN_IPIFSTATSDISCONTINUITYTIME 46
|
|
+
|
|
+#define COLUMN_IPIFSTATSREFRESHRATE 47
|
|
+
|
|
+
|
|
+#define IPIFSTATSTABLE_MIN_COL COLUMN_IPIFSTATSINRECEIVES
|
|
+#define IPIFSTATSTABLE_MAX_COL COLUMN_IPIFSTATSREFRESHRATE
|
|
+
|
|
+
|
|
+
|
|
+#ifdef __cplusplus
|
|
+}
|
|
+#endif
|
|
+#endif /* IPIFSTATSTABLE_OIDS_H */
|
|
diff --git a/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c b/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c
|
|
index 4b1acb1..28e8538 100644
|
|
--- a/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c
|
|
+++ b/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c
|
|
@@ -387,11 +387,14 @@ ipSystemStatsInReceives_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
"called\n"));
|
|
|
|
netsnmp_assert(NULL != rowreq_ctx);
|
|
-
|
|
+
|
|
/*
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsInReceives data.
|
|
* copy (* ipSystemStatsInReceives_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINRECEIVES])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsInReceives_val_ptr) =
|
|
rowreq_ctx->data->stats.HCInReceives.low;
|
|
|
|
@@ -453,6 +456,9 @@ ipSystemStatsHCInReceives_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> copy ipSystemStatsHCInReceives data.
|
|
* get (* ipSystemStatsHCInReceives_val_ptr ).low and (* ipSystemStatsHCInReceives_val_ptr ).high from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINRECEIVES])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsHCInReceives_val_ptr).low =
|
|
rowreq_ctx->data->stats.HCInReceives.low;
|
|
(*ipSystemStatsHCInReceives_val_ptr).high =
|
|
@@ -517,6 +523,9 @@ ipSystemStatsInOctets_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsInOctets data.
|
|
* copy (* ipSystemStatsInOctets_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINOCTETS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsInOctets_val_ptr) =
|
|
rowreq_ctx->data->stats.HCInOctets.low;
|
|
|
|
@@ -574,6 +583,9 @@ ipSystemStatsHCInOctets_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> copy ipSystemStatsHCInOctets data.
|
|
* get (* ipSystemStatsHCInOctets_val_ptr ).low and (* ipSystemStatsHCInOctets_val_ptr ).high from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINOCTETS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsHCInOctets_val_ptr).low =
|
|
rowreq_ctx->data->stats.HCInOctets.low;
|
|
(*ipSystemStatsHCInOctets_val_ptr).high =
|
|
@@ -641,6 +653,9 @@ ipSystemStatsInHdrErrors_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsInHdrErrors data.
|
|
* copy (* ipSystemStatsInHdrErrors_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_INHDRERRORS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsInHdrErrors_val_ptr) =
|
|
rowreq_ctx->data->stats.InHdrErrors;
|
|
|
|
@@ -702,8 +717,11 @@ ipSystemStatsInNoRoutes_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsInNoRoutes data.
|
|
* copy (* ipSystemStatsInNoRoutes_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINNOROUTES])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsInNoRoutes_val_ptr) =
|
|
- rowreq_ctx->data->stats.InNoRoutes;
|
|
+ rowreq_ctx->data->stats.HCInNoRoutes.low;
|
|
|
|
return MFD_SUCCESS;
|
|
} /* ipSystemStatsInNoRoutes_get */
|
|
@@ -769,6 +787,9 @@ ipSystemStatsInAddrErrors_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsInAddrErrors data.
|
|
* copy (* ipSystemStatsInAddrErrors_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_INADDRERRORS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsInAddrErrors_val_ptr) =
|
|
rowreq_ctx->data->stats.InAddrErrors;
|
|
|
|
@@ -840,6 +861,9 @@ ipSystemStatsInUnknownProtos_get(ipSystemStatsTable_rowreq_ctx *
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsInUnknownProtos data.
|
|
* copy (* ipSystemStatsInUnknownProtos_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_INUNKNOWNPROTOS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsInUnknownProtos_val_ptr) =
|
|
rowreq_ctx->data->stats.InUnknownProtos;
|
|
|
|
@@ -902,6 +926,9 @@ ipSystemStatsInTruncatedPkts_get(ipSystemStatsTable_rowreq_ctx *
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsInTruncatedPkts data.
|
|
* copy (* ipSystemStatsInTruncatedPkts_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_INTRUNCATEDPKTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsInTruncatedPkts_val_ptr) =
|
|
rowreq_ctx->data->stats.InTruncatedPkts;
|
|
|
|
@@ -973,6 +1000,9 @@ ipSystemStatsInForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsInForwDatagrams data.
|
|
* copy (* ipSystemStatsInForwDatagrams_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINFORWDATAGRAMS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsInForwDatagrams_val_ptr) =
|
|
rowreq_ctx->data->stats.HCInForwDatagrams.low;
|
|
|
|
@@ -1033,6 +1063,9 @@ ipSystemStatsHCInForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
|
|
* TODO:231:o: |-> copy ipSystemStatsHCInForwDatagrams data.
|
|
* get (* ipSystemStatsHCInForwDatagrams_val_ptr ).low and (* ipSystemStatsHCInForwDatagrams_val_ptr ).high from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINFORWDATAGRAMS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsHCInForwDatagrams_val_ptr).low =
|
|
rowreq_ctx->data->stats.HCInForwDatagrams.low;
|
|
(*ipSystemStatsHCInForwDatagrams_val_ptr).high =
|
|
@@ -1102,6 +1135,9 @@ ipSystemStatsReasmReqds_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsReasmReqds data.
|
|
* copy (* ipSystemStatsReasmReqds_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_REASMREQDS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsReasmReqds_val_ptr) =
|
|
rowreq_ctx->data->stats.ReasmReqds;
|
|
|
|
@@ -1172,6 +1208,9 @@ ipSystemStatsReasmOKs_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsReasmOKs data.
|
|
* copy (* ipSystemStatsReasmOKs_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_REASMOKS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsReasmOKs_val_ptr) = rowreq_ctx->data->stats.ReasmOKs;
|
|
|
|
return MFD_SUCCESS;
|
|
@@ -1242,6 +1281,9 @@ ipSystemStatsReasmFails_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsReasmFails data.
|
|
* copy (* ipSystemStatsReasmFails_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_REASMFAILS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsReasmFails_val_ptr) =
|
|
rowreq_ctx->data->stats.ReasmFails;
|
|
|
|
@@ -1306,6 +1348,9 @@ ipSystemStatsInDiscards_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsInDiscards data.
|
|
* copy (* ipSystemStatsInDiscards_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_INDISCARDS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsInDiscards_val_ptr) =
|
|
rowreq_ctx->data->stats.InDiscards;
|
|
|
|
@@ -1373,6 +1418,9 @@ ipSystemStatsInDelivers_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsInDelivers data.
|
|
* copy (* ipSystemStatsInDelivers_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINDELIVERS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsInDelivers_val_ptr) =
|
|
rowreq_ctx->data->stats.HCInDelivers.low;
|
|
|
|
@@ -1430,6 +1478,9 @@ ipSystemStatsHCInDelivers_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> copy ipSystemStatsHCInDelivers data.
|
|
* get (* ipSystemStatsHCInDelivers_val_ptr ).low and (* ipSystemStatsHCInDelivers_val_ptr ).high from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINDELIVERS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsHCInDelivers_val_ptr).low =
|
|
rowreq_ctx->data->stats.HCInDelivers.low;
|
|
(*ipSystemStatsHCInDelivers_val_ptr).high =
|
|
@@ -1495,6 +1546,9 @@ ipSystemStatsOutRequests_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsOutRequests data.
|
|
* copy (* ipSystemStatsOutRequests_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTREQUESTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsOutRequests_val_ptr) =
|
|
rowreq_ctx->data->stats.HCOutRequests.low;
|
|
|
|
@@ -1552,6 +1606,9 @@ ipSystemStatsHCOutRequests_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> copy ipSystemStatsHCOutRequests data.
|
|
* get (* ipSystemStatsHCOutRequests_val_ptr ).low and (* ipSystemStatsHCOutRequests_val_ptr ).high from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTREQUESTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsHCOutRequests_val_ptr).low =
|
|
rowreq_ctx->data->stats.HCOutRequests.low;
|
|
(*ipSystemStatsHCOutRequests_val_ptr).high =
|
|
@@ -1616,8 +1673,11 @@ ipSystemStatsOutNoRoutes_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsOutNoRoutes data.
|
|
* copy (* ipSystemStatsOutNoRoutes_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTNOROUTES])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsOutNoRoutes_val_ptr) =
|
|
- rowreq_ctx->data->stats.OutNoRoutes;
|
|
+ rowreq_ctx->data->stats.HCOutNoRoutes.low;
|
|
|
|
return MFD_SUCCESS;
|
|
} /* ipSystemStatsOutNoRoutes_get */
|
|
@@ -1691,6 +1751,9 @@ ipSystemStatsOutForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsOutForwDatagrams data.
|
|
* copy (* ipSystemStatsOutForwDatagrams_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFORWDATAGRAMS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsOutForwDatagrams_val_ptr) =
|
|
rowreq_ctx->data->stats.HCOutForwDatagrams.low;
|
|
|
|
@@ -1751,6 +1814,9 @@ ipSystemStatsHCOutForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
|
|
* TODO:231:o: |-> copy ipSystemStatsHCOutForwDatagrams data.
|
|
* get (* ipSystemStatsHCOutForwDatagrams_val_ptr ).low and (* ipSystemStatsHCOutForwDatagrams_val_ptr ).high from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFORWDATAGRAMS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsHCOutForwDatagrams_val_ptr).low =
|
|
rowreq_ctx->data->stats.HCOutForwDatagrams.low;
|
|
(*ipSystemStatsHCOutForwDatagrams_val_ptr).high =
|
|
@@ -1818,8 +1884,11 @@ ipSystemStatsOutDiscards_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsOutDiscards data.
|
|
* copy (* ipSystemStatsOutDiscards_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTDISCARDS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsOutDiscards_val_ptr) =
|
|
- rowreq_ctx->data->stats.OutDiscards;
|
|
+ rowreq_ctx->data->stats.HCOutDiscards.low;
|
|
|
|
return MFD_SUCCESS;
|
|
} /* ipSystemStatsOutDiscards_get */
|
|
@@ -1887,8 +1956,11 @@ ipSystemStatsOutFragReqds_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsOutFragReqds data.
|
|
* copy (* ipSystemStatsOutFragReqds_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGREQDS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsOutFragReqds_val_ptr) =
|
|
- rowreq_ctx->data->stats.OutFragReqds;
|
|
+ rowreq_ctx->data->stats.HCOutFragReqds.low;
|
|
|
|
return MFD_SUCCESS;
|
|
} /* ipSystemStatsOutFragReqds_get */
|
|
@@ -1953,9 +2025,11 @@ ipSystemStatsOutFragOKs_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsOutFragOKs data.
|
|
* copy (* ipSystemStatsOutFragOKs_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
- snmp_log(LOG_ERR,
|
|
- "ipSystemStatsTable node ipSystemStatsOutFragOKs not implemented: skipping\n");
|
|
- return MFD_SKIP;
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGOKS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
+ (*ipSystemStatsOutFragOKs_val_ptr) =
|
|
+ rowreq_ctx->data->stats.HCOutFragOKs.low;
|
|
|
|
return MFD_SUCCESS;
|
|
} /* ipSystemStatsOutFragOKs_get */
|
|
@@ -2023,8 +2097,11 @@ ipSystemStatsOutFragFails_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsOutFragFails data.
|
|
* copy (* ipSystemStatsOutFragFails_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGFAILS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsOutFragFails_val_ptr) =
|
|
- rowreq_ctx->data->stats.OutFragFails;
|
|
+ rowreq_ctx->data->stats.HCOutFragFails.low;
|
|
|
|
return MFD_SUCCESS;
|
|
} /* ipSystemStatsOutFragFails_get */
|
|
@@ -2089,8 +2166,11 @@ ipSystemStatsOutFragCreates_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsOutFragCreates data.
|
|
* copy (* ipSystemStatsOutFragCreates_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGCREATES])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsOutFragCreates_val_ptr) =
|
|
- rowreq_ctx->data->stats.OutFragCreates;
|
|
+ rowreq_ctx->data->stats.HCOutFragCreates.low;
|
|
|
|
return MFD_SUCCESS;
|
|
} /* ipSystemStatsOutFragCreates_get */
|
|
@@ -2152,6 +2232,9 @@ ipSystemStatsOutTransmits_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsOutTransmits data.
|
|
* copy (* ipSystemStatsOutTransmits_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTTRANSMITS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsOutTransmits_val_ptr) =
|
|
rowreq_ctx->data->stats.HCOutTransmits.low;
|
|
|
|
@@ -2209,6 +2292,9 @@ ipSystemStatsHCOutTransmits_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> copy ipSystemStatsHCOutTransmits data.
|
|
* get (* ipSystemStatsHCOutTransmits_val_ptr ).low and (* ipSystemStatsHCOutTransmits_val_ptr ).high from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTTRANSMITS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsHCOutTransmits_val_ptr).low =
|
|
rowreq_ctx->data->stats.HCOutTransmits.low;
|
|
(*ipSystemStatsHCOutTransmits_val_ptr).high =
|
|
@@ -2273,6 +2359,9 @@ ipSystemStatsOutOctets_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsOutOctets data.
|
|
* copy (* ipSystemStatsOutOctets_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTOCTETS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsOutOctets_val_ptr) =
|
|
rowreq_ctx->data->stats.HCOutOctets.low;
|
|
|
|
@@ -2330,6 +2419,9 @@ ipSystemStatsHCOutOctets_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> copy ipSystemStatsHCOutOctets data.
|
|
* get (* ipSystemStatsHCOutOctets_val_ptr ).low and (* ipSystemStatsHCOutOctets_val_ptr ).high from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTOCTETS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsHCOutOctets_val_ptr).low =
|
|
rowreq_ctx->data->stats.HCOutOctets.low;
|
|
(*ipSystemStatsHCOutOctets_val_ptr).high =
|
|
@@ -2392,6 +2484,9 @@ ipSystemStatsInMcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsInMcastPkts data.
|
|
* copy (* ipSystemStatsInMcastPkts_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINMCASTPKTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsInMcastPkts_val_ptr) =
|
|
rowreq_ctx->data->stats.HCInMcastPkts.low;
|
|
|
|
@@ -2448,6 +2543,9 @@ ipSystemStatsHCInMcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> copy ipSystemStatsHCInMcastPkts data.
|
|
* get (* ipSystemStatsHCInMcastPkts_val_ptr ).low and (* ipSystemStatsHCInMcastPkts_val_ptr ).high from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINMCASTPKTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsHCInMcastPkts_val_ptr).low =
|
|
rowreq_ctx->data->stats.HCInMcastPkts.low;
|
|
(*ipSystemStatsHCInMcastPkts_val_ptr).high =
|
|
@@ -2511,6 +2609,9 @@ ipSystemStatsInMcastOctets_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsInMcastOctets data.
|
|
* copy (* ipSystemStatsInMcastOctets_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINMCASTOCTETS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsInMcastOctets_val_ptr) =
|
|
rowreq_ctx->data->stats.HCInMcastOctets.low;
|
|
|
|
@@ -2569,6 +2670,9 @@ ipSystemStatsHCInMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
|
|
* TODO:231:o: |-> copy ipSystemStatsHCInMcastOctets data.
|
|
* get (* ipSystemStatsHCInMcastOctets_val_ptr ).low and (* ipSystemStatsHCInMcastOctets_val_ptr ).high from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINMCASTOCTETS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsHCInMcastOctets_val_ptr).low =
|
|
rowreq_ctx->data->stats.HCInMcastOctets.low;
|
|
(*ipSystemStatsHCInMcastOctets_val_ptr).high =
|
|
@@ -2631,6 +2735,9 @@ ipSystemStatsOutMcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsOutMcastPkts data.
|
|
* copy (* ipSystemStatsOutMcastPkts_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTMCASTPKTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsOutMcastPkts_val_ptr) =
|
|
rowreq_ctx->data->stats.HCOutMcastPkts.low;
|
|
|
|
@@ -2687,6 +2794,9 @@ ipSystemStatsHCOutMcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> copy ipSystemStatsHCOutMcastPkts data.
|
|
* get (* ipSystemStatsHCOutMcastPkts_val_ptr ).low and (* ipSystemStatsHCOutMcastPkts_val_ptr ).high from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTMCASTPKTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsHCOutMcastPkts_val_ptr).low =
|
|
rowreq_ctx->data->stats.HCOutMcastPkts.low;
|
|
(*ipSystemStatsHCOutMcastPkts_val_ptr).high =
|
|
@@ -2751,6 +2861,9 @@ ipSystemStatsOutMcastOctets_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsOutMcastOctets data.
|
|
* copy (* ipSystemStatsOutMcastOctets_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTMCASTOCTETS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsOutMcastOctets_val_ptr) =
|
|
rowreq_ctx->data->stats.HCOutMcastOctets.low;
|
|
|
|
@@ -2813,6 +2926,9 @@ ipSystemStatsHCOutMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
|
|
* TODO:231:o: |-> copy ipSystemStatsHCOutMcastOctets data.
|
|
* get (* ipSystemStatsHCOutMcastOctets_val_ptr ).low and (* ipSystemStatsHCOutMcastOctets_val_ptr ).high from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTMCASTOCTETS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsHCOutMcastOctets_val_ptr).low =
|
|
rowreq_ctx->data->stats.HCOutMcastOctets.low;
|
|
(*ipSystemStatsHCOutMcastOctets_val_ptr).high =
|
|
@@ -2875,6 +2991,9 @@ ipSystemStatsInBcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsInBcastPkts data.
|
|
* copy (* ipSystemStatsInBcastPkts_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINBCASTPKTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsInBcastPkts_val_ptr) =
|
|
rowreq_ctx->data->stats.HCInBcastPkts.low;
|
|
|
|
@@ -2931,6 +3050,9 @@ ipSystemStatsHCInBcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> copy ipSystemStatsHCInBcastPkts data.
|
|
* get (* ipSystemStatsHCInBcastPkts_val_ptr ).low and (* ipSystemStatsHCInBcastPkts_val_ptr ).high from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCINBCASTPKTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsHCInBcastPkts_val_ptr).low =
|
|
rowreq_ctx->data->stats.HCInBcastPkts.low;
|
|
(*ipSystemStatsHCInBcastPkts_val_ptr).high =
|
|
@@ -2993,6 +3115,9 @@ ipSystemStatsOutBcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsOutBcastPkts data.
|
|
* copy (* ipSystemStatsOutBcastPkts_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTBCASTPKTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsOutBcastPkts_val_ptr) =
|
|
rowreq_ctx->data->stats.HCOutBcastPkts.low;
|
|
|
|
@@ -3049,6 +3174,9 @@ ipSystemStatsHCOutBcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> copy ipSystemStatsHCOutBcastPkts data.
|
|
* get (* ipSystemStatsHCOutBcastPkts_val_ptr ).low and (* ipSystemStatsHCOutBcastPkts_val_ptr ).high from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTBCASTPKTS])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsHCOutBcastPkts_val_ptr).low =
|
|
rowreq_ctx->data->stats.HCOutBcastPkts.low;
|
|
(*ipSystemStatsHCOutBcastPkts_val_ptr).high =
|
|
@@ -3113,6 +3241,9 @@ ipSystemStatsDiscontinuityTime_get(ipSystemStatsTable_rowreq_ctx *
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsDiscontinuityTime data.
|
|
* copy (* ipSystemStatsDiscontinuityTime_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_DISCONTINUITYTIME])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsDiscontinuityTime_val_ptr) =
|
|
rowreq_ctx->ipSystemStatsDiscontinuityTime;
|
|
|
|
@@ -3169,6 +3300,9 @@ ipSystemStatsRefreshRate_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
|
|
* TODO:231:o: |-> Extract the current value of the ipSystemStatsRefreshRate data.
|
|
* copy (* ipSystemStatsRefreshRate_val_ptr ) from rowreq_ctx->data
|
|
*/
|
|
+ if (!rowreq_ctx->data->stats.columnAvail[IPSYSTEMSTATSTABLE_REFRESHRATE])
|
|
+ return MFD_SKIP;
|
|
+
|
|
(*ipSystemStatsRefreshRate_val_ptr) =
|
|
rowreq_ctx->ipSystemStatsRefreshRate;
|
|
|
|
diff --git a/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.c b/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.c
|
|
index c1d257d..56d163d 100644
|
|
--- a/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.c
|
|
+++ b/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.c
|
|
@@ -19,7 +19,7 @@
|
|
|
|
#include "ipSystemStatsTable_data_access.h"
|
|
|
|
-static int ipss_cache_refresh = 30;
|
|
+static int ipss_cache_refresh = IPSYSTEMSTATSTABLE_CACHE_TIMEOUT;
|
|
|
|
/** @ingroup interface
|
|
* @addtogroup data_access data_access: Routines to access data
|
|
@@ -58,61 +58,10 @@ int
|
|
ipSystemStatsTable_init_data(ipSystemStatsTable_registration *
|
|
ipSystemStatsTable_reg)
|
|
{
|
|
- static unsigned int my_columns[] = {
|
|
- COLUMN_IPSYSTEMSTATSINRECEIVES, COLUMN_IPSYSTEMSTATSHCINRECEIVES,
|
|
- /** COLUMN_IPSYSTEMSTATSINOCTETS, */
|
|
- COLUMN_IPSYSTEMSTATSHCINOCTETS,
|
|
- COLUMN_IPSYSTEMSTATSINHDRERRORS,
|
|
- /** COLUMN_IPSYSTEMSTATSINNOROUTES, */
|
|
- COLUMN_IPSYSTEMSTATSINADDRERRORS,
|
|
- COLUMN_IPSYSTEMSTATSINUNKNOWNPROTOS,
|
|
- /** COLUMN_IPSYSTEMSTATSINTRUNCATEDPKTS, */
|
|
- COLUMN_IPSYSTEMSTATSINFORWDATAGRAMS,
|
|
- COLUMN_IPSYSTEMSTATSHCINFORWDATAGRAMS,
|
|
- COLUMN_IPSYSTEMSTATSREASMREQDS,
|
|
- COLUMN_IPSYSTEMSTATSREASMOKS, COLUMN_IPSYSTEMSTATSREASMFAILS,
|
|
- COLUMN_IPSYSTEMSTATSINDISCARDS, COLUMN_IPSYSTEMSTATSINDELIVERS,
|
|
- COLUMN_IPSYSTEMSTATSHCINDELIVERS, COLUMN_IPSYSTEMSTATSOUTREQUESTS,
|
|
- COLUMN_IPSYSTEMSTATSHCOUTREQUESTS, COLUMN_IPSYSTEMSTATSOUTNOROUTES,
|
|
- /** COLUMN_IPSYSTEMSTATSOUTFORWDATAGRAMS, */
|
|
- COLUMN_IPSYSTEMSTATSHCOUTFORWDATAGRAMS,
|
|
- COLUMN_IPSYSTEMSTATSOUTDISCARDS,
|
|
- /** COLUMN_IPSYSTEMSTATSOUTFRAGREQDS, */
|
|
- COLUMN_IPSYSTEMSTATSOUTFRAGOKS, COLUMN_IPSYSTEMSTATSOUTFRAGFAILS,
|
|
- COLUMN_IPSYSTEMSTATSOUTFRAGCREATES,
|
|
- /** COLUMN_IPSYSTEMSTATSOUTTRANSMITS, */
|
|
- /** COLUMN_IPSYSTEMSTATSHCOUTTRANSMITS, */
|
|
- /** COLUMN_IPSYSTEMSTATSOUTOCTETS, */
|
|
- /** COLUMN_IPSYSTEMSTATSHCOUTOCTETS, */
|
|
- /** COLUMN_IPSYSTEMSTATSINMCASTPKTS, */
|
|
- /** COLUMN_IPSYSTEMSTATSHCINMCASTPKTS, */
|
|
- /** COLUMN_IPSYSTEMSTATSINMCASTOCTETS, */
|
|
- /** COLUMN_IPSYSTEMSTATSHCINMCASTOCTETS, */
|
|
- /** COLUMN_IPSYSTEMSTATSOUTMCASTPKTS, */
|
|
- /** COLUMN_IPSYSTEMSTATSHCOUTMCASTPKTS, */
|
|
- /** COLUMN_IPSYSTEMSTATSOUTMCASTOCTETS, */
|
|
- /** COLUMN_IPSYSTEMSTATSHCOUTMCASTOCTETS, */
|
|
- /** COLUMN_IPSYSTEMSTATSINBCASTPKTS, */
|
|
- /** COLUMN_IPSYSTEMSTATSHCINBCASTPKTS, */
|
|
- /** COLUMN_IPSYSTEMSTATSOUTBCASTPKTS, */
|
|
- /** COLUMN_IPSYSTEMSTATSHCOUTBCASTPKTS, */
|
|
- COLUMN_IPSYSTEMSTATSDISCONTINUITYTIME,
|
|
- COLUMN_IPSYSTEMSTATSREFRESHRATE
|
|
- };
|
|
- static netsnmp_column_info valid_columns;
|
|
-
|
|
DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsTable_init_data",
|
|
"called\n"));
|
|
|
|
/*
|
|
- * we only want to process certain columns, and ignore
|
|
- * anything else.
|
|
- */
|
|
- valid_columns.isRange = 0;
|
|
- valid_columns.details.list = my_columns;
|
|
- valid_columns.list_count = sizeof(my_columns) / sizeof(unsigned int);
|
|
- ipSystemStatsTable_valid_columns_set(&valid_columns);
|
|
- /*
|
|
* TODO:303:o: Initialize ipSystemStatsTable data.
|
|
*/
|
|
|
|
@@ -166,7 +115,9 @@ ipSystemStatsTable_container_init(netsnmp_container **container_ptr_ptr,
|
|
* 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;
|
|
+
|
|
+
|
|
+ *container_ptr_ptr = netsnmp_container_find("ipSystemStatsTable:table_container");
|
|
|
|
if (NULL == cache) {
|
|
snmp_log(LOG_ERR,
|
|
@@ -191,6 +142,7 @@ ipSystemStatsTable_container_init(netsnmp_container **container_ptr_ptr,
|
|
(NETSNMP_CACHE_DONT_AUTO_RELEASE | NETSNMP_CACHE_DONT_FREE_EXPIRED
|
|
| NETSNMP_CACHE_DONT_FREE_BEFORE_LOAD |
|
|
NETSNMP_CACHE_AUTO_RELOAD);
|
|
+ ipSystemStatsTable_container_load(*container_ptr_ptr);
|
|
} /* ipSystemStatsTable_container_init */
|
|
|
|
/**
|
|
@@ -266,7 +218,7 @@ _add_new(netsnmp_systemstats_entry *systemstats_entry,
|
|
&& (MFD_SUCCESS ==
|
|
ipSystemStatsTable_indexes_set(rowreq_ctx,
|
|
systemstats_entry->
|
|
- ns_ip_version))) {
|
|
+ index[0]))) {
|
|
rowreq_ctx->ipSystemStatsRefreshRate = ipss_cache_refresh * 1000; /* milli-seconds */
|
|
CONTAINER_INSERT(container, rowreq_ctx);
|
|
} else {
|
|
diff --git a/include/net-snmp/data_access/ipstats.h b/include/net-snmp/data_access/ipstats.h
|
|
index 0e7aa1e..0e1bc21 100644
|
|
--- a/include/net-snmp/data_access/ipstats.h
|
|
+++ b/include/net-snmp/data_access/ipstats.h
|
|
@@ -10,6 +10,40 @@
|
|
extern "C" {
|
|
#endif
|
|
|
|
+#define IPSYSTEMSTATSTABLE_HCINRECEIVES 1
|
|
+#define IPSYSTEMSTATSTABLE_HCINOCTETS 2
|
|
+#define IPSYSTEMSTATSTABLE_INHDRERRORS 3
|
|
+#define IPSYSTEMSTATSTABLE_HCINNOROUTES 4
|
|
+#define IPSYSTEMSTATSTABLE_INADDRERRORS 5
|
|
+#define IPSYSTEMSTATSTABLE_INUNKNOWNPROTOS 6
|
|
+#define IPSYSTEMSTATSTABLE_INTRUNCATEDPKTS 7
|
|
+#define IPSYSTEMSTATSTABLE_HCINFORWDATAGRAMS 8
|
|
+#define IPSYSTEMSTATSTABLE_REASMREQDS 9
|
|
+#define IPSYSTEMSTATSTABLE_REASMOKS 10
|
|
+#define IPSYSTEMSTATSTABLE_REASMFAILS 11
|
|
+#define IPSYSTEMSTATSTABLE_INDISCARDS 12
|
|
+#define IPSYSTEMSTATSTABLE_HCINDELIVERS 13
|
|
+#define IPSYSTEMSTATSTABLE_HCOUTREQUESTS 14
|
|
+#define IPSYSTEMSTATSTABLE_HCOUTNOROUTES 15
|
|
+#define IPSYSTEMSTATSTABLE_HCOUTFORWDATAGRAMS 16
|
|
+#define IPSYSTEMSTATSTABLE_HCOUTDISCARDS 17
|
|
+#define IPSYSTEMSTATSTABLE_HCOUTFRAGREQDS 18
|
|
+#define IPSYSTEMSTATSTABLE_HCOUTFRAGOKS 19
|
|
+#define IPSYSTEMSTATSTABLE_HCOUTFRAGFAILS 20
|
|
+#define IPSYSTEMSTATSTABLE_HCOUTFRAGCREATES 21
|
|
+#define IPSYSTEMSTATSTABLE_HCOUTTRANSMITS 22
|
|
+#define IPSYSTEMSTATSTABLE_HCOUTOCTETS 23
|
|
+#define IPSYSTEMSTATSTABLE_HCINMCASTPKTS 24
|
|
+#define IPSYSTEMSTATSTABLE_HCINMCASTOCTETS 25
|
|
+#define IPSYSTEMSTATSTABLE_HCOUTMCASTPKTS 26
|
|
+#define IPSYSTEMSTATSTABLE_HCOUTMCASTOCTETS 27
|
|
+#define IPSYSTEMSTATSTABLE_HCINBCASTPKTS 28
|
|
+#define IPSYSTEMSTATSTABLE_HCOUTBCASTPKTS 29
|
|
+#define IPSYSTEMSTATSTABLE_DISCONTINUITYTIME 30
|
|
+#define IPSYSTEMSTATSTABLE_REFRESHRATE 31
|
|
+
|
|
+#define IPSYSTEMSTATSTABLE_LAST IPSYSTEMSTATSTABLE_REFRESHRATE
|
|
+
|
|
/**---------------------------------------------------------------------*/
|
|
/*
|
|
* structure definitions
|
|
@@ -20,28 +54,42 @@ extern "C" {
|
|
*/
|
|
typedef struct netsnmp_ipstats_s {
|
|
|
|
+ /* Columns of ipStatsTable. Some of them are HC for computation of the
|
|
+ * other columns, when underlying OS does not provide them.
|
|
+ * Always fill at least 32 bits, the table is periodically polled -> 32 bit
|
|
+ * overflow shall be detected and 64 bit value should be computed automatically. */
|
|
U64 HCInReceives;
|
|
U64 HCInOctets;
|
|
u_long InHdrErrors;
|
|
- u_long InNoRoutes;
|
|
+ U64 HCInNoRoutes;
|
|
u_long InAddrErrors;
|
|
u_long InUnknownProtos;
|
|
u_long InTruncatedPkts;
|
|
- U64 HCInForwDatagrams;
|
|
+
|
|
+ /* optional, can be computed from HCInNoRoutes and HCOutForwDatagrams */
|
|
+ U64 HCInForwDatagrams;
|
|
+
|
|
u_long ReasmReqds;
|
|
u_long ReasmOKs;
|
|
u_long ReasmFails;
|
|
u_long InDiscards;
|
|
U64 HCInDelivers;
|
|
U64 HCOutRequests;
|
|
- u_long OutNoRoutes;
|
|
+ U64 HCOutNoRoutes;
|
|
U64 HCOutForwDatagrams;
|
|
- u_long OutDiscards;
|
|
- u_long OutFragReqds;
|
|
- u_long OutFragOKs;
|
|
- u_long OutFragFails;
|
|
- u_long OutFragCreates;
|
|
+ U64 HCOutDiscards;
|
|
+
|
|
+ /* optional, can be computed from HCOutFragOKs + HCOutFragFails*/
|
|
+ U64 HCOutFragReqds;
|
|
+ U64 HCOutFragOKs;
|
|
+ U64 HCOutFragFails;
|
|
+ U64 HCOutFragCreates;
|
|
+
|
|
+ /* optional, can be computed from
|
|
+ * HCOutRequests +HCOutForwDatagrams + HCOutFragCreates
|
|
+ * - HCOutFragReqds - HCOutNoRoutes - HCOutDiscards */
|
|
U64 HCOutTransmits;
|
|
+
|
|
U64 HCOutOctets;
|
|
U64 HCInMcastPkts;
|
|
U64 HCInMcastOctets;
|
|
@@ -50,6 +98,8 @@ typedef struct netsnmp_ipstats_s {
|
|
U64 HCInBcastPkts;
|
|
U64 HCOutBcastPkts;
|
|
|
|
+ /* Array of available columns.*/
|
|
+ int columnAvail[IPSYSTEMSTATSTABLE_LAST+1];
|
|
} netsnmp_ipstats;
|
|
|
|
|
|
diff --git a/include/net-snmp/data_access/systemstats.h b/include/net-snmp/data_access/systemstats.h
|
|
index 53dfd51..47e1076 100644
|
|
--- a/include/net-snmp/data_access/systemstats.h
|
|
+++ b/include/net-snmp/data_access/systemstats.h
|
|
@@ -22,7 +22,11 @@ extern "C" {
|
|
typedef struct netsnmp_systemstats_s {
|
|
|
|
netsnmp_index oid_index; /* MUST BE FIRST!! for container use */
|
|
- oid ns_ip_version;
|
|
+ /*
|
|
+ * Index of the table
|
|
+ * First entry = ip version
|
|
+ * Second entry = interface index (0 for ipSystemStatsTable */
|
|
+ oid index[2];
|
|
|
|
int flags; /* for net-snmp use */
|
|
|
|
@@ -49,13 +53,15 @@ 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
|
|
|
|
-/*
|
|
- * load and free
|
|
+/**
|
|
+ * Load container. If the NETSNMP_ACCESS_SYSTEMSTATS_LOAD_IFTABLE is set
|
|
+ * the ipIfSystemStats table is loaded, else ipSystemStatsTable is loaded.
|
|
*/
|
|
netsnmp_container*
|
|
netsnmp_access_systemstats_container_load(netsnmp_container* container,
|
|
u_int load_flags);
|
|
#define NETSNMP_ACCESS_SYSTEMSTATS_LOAD_NOFLAGS 0x0000
|
|
+#define NETSNMP_ACCESS_SYSTEMSTATS_LOAD_IFTABLE 0x0001
|
|
|
|
void netsnmp_access_systemstats_container_free(netsnmp_container *container,
|
|
u_int free_flags);
|
|
@@ -68,7 +74,7 @@ void netsnmp_access_systemstats_container_free(netsnmp_container *container,
|
|
* create/free an entry
|
|
*/
|
|
netsnmp_systemstats_entry *
|
|
-netsnmp_access_systemstats_entry_create(int version);
|
|
+netsnmp_access_systemstats_entry_create(int version, int if_index);
|
|
|
|
void netsnmp_access_systemstats_entry_free(netsnmp_systemstats_entry * entry);
|
|
|
|
--
|
|
1.6.0.2
|
|
|