summaryrefslogtreecommitdiff
path: root/agent/mibgroup/if-mib/ifXTable/ifXTable.c
diff options
context:
space:
mode:
Diffstat (limited to 'agent/mibgroup/if-mib/ifXTable/ifXTable.c')
-rw-r--r--agent/mibgroup/if-mib/ifXTable/ifXTable.c2541
1 files changed, 2541 insertions, 0 deletions
diff --git a/agent/mibgroup/if-mib/ifXTable/ifXTable.c b/agent/mibgroup/if-mib/ifXTable/ifXTable.c
new file mode 100644
index 0000000..bb3e736
--- /dev/null
+++ b/agent/mibgroup/if-mib/ifXTable/ifXTable.c
@@ -0,0 +1,2541 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id$
+ */
+/** \page MFD helper for ifXTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-features.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <ctype.h>
+
+/*
+ * include our parent header
+ */
+#include "ifXTable.h"
+#include "if-mib/ifTable/ifTable_defs.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "ifXTable_interface.h"
+
+netsnmp_feature_require(ifTable_container_get)
+netsnmp_feature_require(ifTable_container_size)
+
+/*
+ * not sure if we want to support set for promiscuous mode, because
+ * 1) careful thought should go into any settable object that performs
+ * an action that requires root access
+ * 2) i don't want to write the code right now
+ *
+ */
+#undef NETSNMP_ENABLE_PROMISCUOUSMODE_SET
+
+const oid ifXTable_oid[] = { IFXTABLE_OID };
+const int ifXTable_oid_size = OID_LENGTH(ifXTable_oid);
+
+ifXTable_registration ifXTable_user_context;
+static ifXTable_registration *ifXTable_user_context_p;
+
+/**
+ * Initializes the ifXTable module
+ */
+void
+init_ifXTable(void)
+{
+ DEBUGMSGTL(("verbose:ifXTable:init_ifXTable", "called\n"));
+
+ /*
+ * TODO:300:o: Perform ifXTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ init_ifTable();
+
+} /* init_ifXTable */
+
+/**
+ * Initialize the table ifXTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_ifXTable(void)
+{
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:ifXTable:initialize_table_ifXTable", "called\n"));
+
+ /*
+ * TODO:301:o: Perform ifXTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize ifXTable 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.
+ */
+ ifXTable_user_context_p = netsnmp_create_data_list("ifXTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _ifXTable_initialize_interface(ifXTable_user_context_p, flags);
+
+ /*
+ * if there is no container, bail. otherwise, register the callbacks
+ * for persistent storage.
+ */
+ if (NULL == ifTable_container_get())
+ return; /* msg already logged */
+
+} /* initialize_table_ifXTable */
+
+void
+shutdown_ifXTable(void)
+{
+ netsnmp_free_all_list_data(ifXTable_user_context_p);
+ ifXTable_user_context_p = NULL;
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+ifXTable_rowreq_ctx_init(ifXTable_rowreq_ctx * rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_rowreq_ctx_init", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra ifXTable rowreq initialization. (eg DEFVALS)
+ * should never get here - ifTable should handle this
+ */
+ netsnmp_assert(0);
+
+ return MFD_ERROR;
+} /* ifXTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void
+ifXTable_rowreq_ctx_cleanup(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_rowreq_ctx_cleanup",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra ifXTable rowreq cleanup.
+ */
+ /*
+ * should never get here - ifTable should handle this
+ */
+ netsnmp_assert(0);
+} /* ifXTable_rowreq_ctx_cleanup */
+
+/**
+ * the *_should_save routine is called to determine if a row
+ * should be stored persistently.
+ *
+ * Note that this is not a 'dirty' check (i.e. if a row has changed),
+ * but a check for volatile rows that should not be saved between
+ * restarts.
+ *
+ * @param rowreq_ctx
+ *
+ * @return 1 if the row should be stored
+ * @return 0 if the row should not be stored
+ */
+int
+ifXTable_container_should_save(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+
+ return 1; /* save the row */
+}
+
+/**
+ * pre-request callback
+ *
+ * @param user_context
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+ifXTable_pre_request(ifXTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_pre_request", "called\n"));
+
+ /*
+ * TODO:510:o: Perform ifXTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* ifXTable_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
+ifXTable_post_request(ifXTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_post_request", "called\n"));
+
+ /*
+ * TODO:511:o: Perform ifXTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (ifXTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * notify library to save changed rows
+ */
+ snmp_store_needed(netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID,
+ NETSNMP_DS_LIB_APPTYPE));
+ }
+
+ ifXTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* ifXTable_post_request */
+
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ifXTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IF-MIB::ifXTable is subid 1 of ifMIBObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.31.1.1, length: 9
+ */
+
+/*
+ * ---------------------------------------------------------------------
+ * * TODO:200:r: Implement ifXTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param ifIndex_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
+ifXTable_indexes_set_tbl_idx(ifXTable_mib_index * tbl_idx,
+ long ifIndex_val)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_indexes_set_tbl_idx",
+ "called\n"));
+
+ /*
+ * ifIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H
+ */
+ tbl_idx->ifIndex = ifIndex_val;
+
+
+ return MFD_SUCCESS;
+} /* ifXTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ * @param ifIndex_val
+ *
+ * @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
+ifXTable_indexes_set(ifXTable_rowreq_ctx * rowreq_ctx, long ifIndex_val)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_indexes_set", "called\n"));
+
+ if (MFD_SUCCESS !=
+ ifXTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx, ifIndex_val))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if (0 != ifXTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* ifXTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifName
+ * ifName is subid 1 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.1
+ * Description:
+The textual name of the interface. The value of this
+ object should be the name of the interface as assigned by
+ the local device and should be suitable for use in commands
+ entered at the device's `console'. This might be a text
+ name, such as `le0' or a simple port number, such as `1',
+ depending on the interface naming syntax of the device. If
+ several entries in the ifTable together represent a single
+ interface as named by the device, then each will have the
+ same value of ifName. Note that for an agent which responds
+ to SNMP queries concerning an interface on some other
+ (proxied) device, then the value of ifName for such an
+ interface is the proxied device's local name for it.
+
+ If there is no local name, or this object is otherwise not
+ applicable, then this object contains a zero-length string.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 0
+ * hint: 255a
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Extract the current value of the ifName data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifName_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param ifName_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by ifName.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*ifName_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update ifName_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+ifName_get(ifXTable_rowreq_ctx * rowreq_ctx, char **ifName_val_ptr_ptr,
+ size_t * ifName_val_ptr_len_ptr)
+{
+ size_t tmp_len;
+
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert((NULL != ifName_val_ptr_ptr)
+ && (NULL != *ifName_val_ptr_ptr));
+ netsnmp_assert(NULL != ifName_val_ptr_len_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifName_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifName data.
+ * copy (* ifName_val_ptr_ptr ) data and (* ifName_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for ifName data
+ */
+ tmp_len = strlen(rowreq_ctx->data.ifName);
+ if ((NULL == (*ifName_val_ptr_ptr)) ||
+ ((*ifName_val_ptr_len_ptr) < tmp_len)) {
+ /*
+ * allocate space for ifName data
+ */
+ (*ifName_val_ptr_ptr) = (char*)malloc(tmp_len);
+ if (NULL == (*ifName_val_ptr_ptr)) {
+ snmp_log(LOG_ERR, "could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (*ifName_val_ptr_len_ptr) = tmp_len;
+ memcpy((*ifName_val_ptr_ptr), rowreq_ctx->data.ifName, tmp_len);
+
+ return MFD_SUCCESS;
+} /* ifName_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifInMulticastPkts
+ * ifInMulticastPkts is subid 2 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.2
+ * Description:
+The number of packets, delivered by this sub-layer to a
+ higher (sub-)layer, which were addressed to a multicast
+ address at this sub-layer. For a MAC layer protocol, this
+ includes both Group and Functional addresses.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifInMulticastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifInMulticastPkts_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
+ifInMulticastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifInMulticastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifInMulticastPkts_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifInMulticastPkts_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifInMulticastPkts data.
+ * copy (* ifInMulticastPkts_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifInMulticastPkts_val_ptr) = rowreq_ctx->data.ifInMulticastPkts;
+
+ return MFD_SUCCESS;
+} /* ifInMulticastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifInBroadcastPkts
+ * ifInBroadcastPkts is subid 3 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.3
+ * Description:
+The number of packets, delivered by this sub-layer to a
+ higher (sub-)layer, which were addressed to a broadcast
+ address at this sub-layer.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifInBroadcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifInBroadcastPkts_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
+ifInBroadcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifInBroadcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifInBroadcastPkts_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifInBroadcastPkts_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifInBroadcastPkts data.
+ * copy (* ifInBroadcastPkts_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifInBroadcastPkts_val_ptr) = rowreq_ctx->data.ifInBroadcastPkts;
+
+ return MFD_SUCCESS;
+} /* ifInBroadcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifOutMulticastPkts
+ * ifOutMulticastPkts is subid 4 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.4
+ * Description:
+The total number of packets that higher-level protocols
+ requested be transmitted, and which were addressed to a
+ multicast address at this sub-layer, including those that
+ were discarded or not sent. For a MAC layer protocol, this
+ includes both Group and Functional addresses.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifOutMulticastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifOutMulticastPkts_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
+ifOutMulticastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifOutMulticastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifOutMulticastPkts_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifOutMulticastPkts_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifOutMulticastPkts data.
+ * copy (* ifOutMulticastPkts_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifOutMulticastPkts_val_ptr) = rowreq_ctx->data.ifOutMulticastPkts;
+
+ return MFD_SUCCESS;
+} /* ifOutMulticastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifOutBroadcastPkts
+ * ifOutBroadcastPkts is subid 5 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.5
+ * Description:
+The total number of packets that higher-level protocols
+ requested be transmitted, and which were addressed to a
+ broadcast address at this sub-layer, including those that
+ were discarded or not sent.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifOutBroadcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifOutBroadcastPkts_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
+ifOutBroadcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifOutBroadcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifOutBroadcastPkts_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifOutBroadcastPkts_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifOutBroadcastPkts data.
+ * copy (* ifOutBroadcastPkts_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifOutBroadcastPkts_val_ptr) = rowreq_ctx->data.ifOutBroadcastPkts;
+
+ return MFD_SUCCESS;
+} /* ifOutBroadcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifHCInOctets
+ * ifHCInOctets is subid 6 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.6
+ * Description:
+The total number of octets received on the interface,
+ including framing characters. This object is a 64-bit
+ version of ifInOctets.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is 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 ifHCInOctets data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifHCInOctets_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
+ifHCInOctets_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCInOctets_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCInOctets_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ifHCInOctets data.
+ * get (* ifHCInOctets_val_ptr ).low and (* ifHCInOctets_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ifHCInOctets_val_ptr).high = rowreq_ctx->data.ifHCInOctets.high;
+ (*ifHCInOctets_val_ptr).low = rowreq_ctx->data.ifHCInOctets.low;
+
+
+ return MFD_SUCCESS;
+} /* ifHCInOctets_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifHCInUcastPkts
+ * ifHCInUcastPkts is subid 7 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.7
+ * Description:
+The number of packets, delivered by this sub-layer to a
+ higher (sub-)layer, which were not addressed to a multicast
+ or broadcast address at this sub-layer. This object is a
+ 64-bit version of ifInUcastPkts.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is 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 ifHCInUcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifHCInUcastPkts_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
+ifHCInUcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCInUcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCInUcastPkts_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ifHCInUcastPkts data.
+ * get (* ifHCInUcastPkts_val_ptr ).low and (* ifHCInUcastPkts_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ifHCInUcastPkts_val_ptr).high =
+ rowreq_ctx->data.ifHCInUcastPkts.high;
+ (*ifHCInUcastPkts_val_ptr).low = rowreq_ctx->data.ifHCInUcastPkts.low;
+
+
+ return MFD_SUCCESS;
+} /* ifHCInUcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifHCInMulticastPkts
+ * ifHCInMulticastPkts is subid 8 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.8
+ * Description:
+The number of packets, delivered by this sub-layer to a
+ higher (sub-)layer, which were addressed to a multicast
+ address at this sub-layer. For a MAC layer protocol, this
+ includes both Group and Functional addresses. This object
+ is a 64-bit version of ifInMulticastPkts.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is 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 ifHCInMulticastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifHCInMulticastPkts_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
+ifHCInMulticastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCInMulticastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCInMulticastPkts_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ifHCInMulticastPkts data.
+ * get (* ifHCInMulticastPkts_val_ptr ).low and (* ifHCInMulticastPkts_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ifHCInMulticastPkts_val_ptr).high =
+ rowreq_ctx->data.ifHCInMulticastPkts.high;
+ (*ifHCInMulticastPkts_val_ptr).low =
+ rowreq_ctx->data.ifHCInMulticastPkts.low;
+
+
+ return MFD_SUCCESS;
+} /* ifHCInMulticastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifHCInBroadcastPkts
+ * ifHCInBroadcastPkts is subid 9 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.9
+ * Description:
+The number of packets, delivered by this sub-layer to a
+ higher (sub-)layer, which were addressed to a broadcast
+ address at this sub-layer. This object is a 64-bit version
+ of ifInBroadcastPkts.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is 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 ifHCInBroadcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifHCInBroadcastPkts_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
+ifHCInBroadcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCInBroadcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCInBroadcastPkts_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ifHCInBroadcastPkts data.
+ * get (* ifHCInBroadcastPkts_val_ptr ).low and (* ifHCInBroadcastPkts_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ifHCInBroadcastPkts_val_ptr).high =
+ rowreq_ctx->data.ifHCInBroadcastPkts.high;
+ (*ifHCInBroadcastPkts_val_ptr).low =
+ rowreq_ctx->data.ifHCInBroadcastPkts.low;
+
+
+ return MFD_SUCCESS;
+} /* ifHCInBroadcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifHCOutOctets
+ * ifHCOutOctets is subid 10 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.10
+ * Description:
+The total number of octets transmitted out of the
+ interface, including framing characters. This object is a
+ 64-bit version of ifOutOctets.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is 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 ifHCOutOctets data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifHCOutOctets_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
+ifHCOutOctets_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCOutOctets_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCOutOctets_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ifHCOutOctets data.
+ * get (* ifHCOutOctets_val_ptr ).low and (* ifHCOutOctets_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ifHCOutOctets_val_ptr).high = rowreq_ctx->data.ifHCOutOctets.high;
+ (*ifHCOutOctets_val_ptr).low = rowreq_ctx->data.ifHCOutOctets.low;
+
+
+ return MFD_SUCCESS;
+} /* ifHCOutOctets_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifHCOutUcastPkts
+ * ifHCOutUcastPkts is subid 11 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.11
+ * Description:
+The total number of packets that higher-level protocols
+ requested be transmitted, and which were not addressed to a
+ multicast or broadcast address at this sub-layer, including
+ those that were discarded or not sent. This object is a
+ 64-bit version of ifOutUcastPkts.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is 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 ifHCOutUcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifHCOutUcastPkts_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
+ifHCOutUcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCOutUcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCOutUcastPkts_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ifHCOutUcastPkts data.
+ * get (* ifHCOutUcastPkts_val_ptr ).low and (* ifHCOutUcastPkts_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ifHCOutUcastPkts_val_ptr).high =
+ rowreq_ctx->data.ifHCOutUcastPkts.high;
+ (*ifHCOutUcastPkts_val_ptr).low =
+ rowreq_ctx->data.ifHCOutUcastPkts.low;
+
+
+ return MFD_SUCCESS;
+} /* ifHCOutUcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifHCOutMulticastPkts
+ * ifHCOutMulticastPkts is subid 12 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.12
+ * Description:
+The total number of packets that higher-level protocols
+ requested be transmitted, and which were addressed to a
+ multicast address at this sub-layer, including those that
+ were discarded or not sent. For a MAC layer protocol, this
+ includes both Group and Functional addresses. This object
+ is a 64-bit version of ifOutMulticastPkts.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is 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 ifHCOutMulticastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifHCOutMulticastPkts_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
+ifHCOutMulticastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCOutMulticastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCOutMulticastPkts_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ifHCOutMulticastPkts data.
+ * get (* ifHCOutMulticastPkts_val_ptr ).low and (* ifHCOutMulticastPkts_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ifHCOutMulticastPkts_val_ptr).high =
+ rowreq_ctx->data.ifHCOutMulticastPkts.high;
+ (*ifHCOutMulticastPkts_val_ptr).low =
+ rowreq_ctx->data.ifHCOutMulticastPkts.low;
+
+
+ return MFD_SUCCESS;
+} /* ifHCOutMulticastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifHCOutBroadcastPkts
+ * ifHCOutBroadcastPkts is subid 13 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.13
+ * Description:
+The total number of packets that higher-level protocols
+ requested be transmitted, and which were addressed to a
+ broadcast address at this sub-layer, including those that
+ were discarded or not sent. This object is a 64-bit version
+ of ifOutBroadcastPkts.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is 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 ifHCOutBroadcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifHCOutBroadcastPkts_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
+ifHCOutBroadcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCOutBroadcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCOutBroadcastPkts_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ifHCOutBroadcastPkts data.
+ * get (* ifHCOutBroadcastPkts_val_ptr ).low and (* ifHCOutBroadcastPkts_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ifHCOutBroadcastPkts_val_ptr).high =
+ rowreq_ctx->data.ifHCOutBroadcastPkts.high;
+ (*ifHCOutBroadcastPkts_val_ptr).low =
+ rowreq_ctx->data.ifHCOutBroadcastPkts.low;
+
+
+ return MFD_SUCCESS;
+} /* ifHCOutBroadcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifLinkUpDownTrapEnable
+ * ifLinkUpDownTrapEnable is subid 14 of ifXEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.31.1.1.1.14
+ * Description:
+Indicates whether linkUp/linkDown traps should be generated
+ for this interface.
+
+ By default, this object should have the value enabled(1) for
+ interfaces which do not operate on 'top' of any other
+ interface (as defined in the ifStackTable), and disabled(2)
+ otherwise.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: enabled(1), disabled(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ifLinkUpDownTrapEnable data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifLinkUpDownTrapEnable_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifLinkUpDownTrapEnable_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifLinkUpDownTrapEnable_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifLinkUpDownTrapEnable_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifLinkUpDownTrapEnable_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (0 == rowreq_ctx->data.ifLinkUpDownTrapEnable)
+ return MFD_SKIP;
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifLinkUpDownTrapEnable data.
+ * copy (* ifLinkUpDownTrapEnable_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifLinkUpDownTrapEnable_val_ptr) =
+ rowreq_ctx->data.ifLinkUpDownTrapEnable;
+
+ return MFD_SUCCESS;
+} /* ifLinkUpDownTrapEnable_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifHighSpeed
+ * ifHighSpeed is subid 15 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.15
+ * Description:
+An estimate of the interface's current bandwidth in units
+ of 1,000,000 bits per second. If this object reports a
+ value of `n' then the speed of the interface is somewhere in
+ the range of `n-500,000' to `n+499,999'. For interfaces
+ which do not vary in bandwidth or for those where no
+ accurate estimation can be made, this object should contain
+ the nominal bandwidth. For a sub-layer which has no concept
+ of bandwidth, this object should be zero.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is GAUGE (based on perltype GAUGE)
+ * The net-snmp type is ASN_GAUGE. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifHighSpeed data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifHighSpeed_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
+ifHighSpeed_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifHighSpeed_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHighSpeed_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifHighSpeed_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifHighSpeed data.
+ * copy (* ifHighSpeed_val_ptr ) from rowreq_ctx->data
+ */
+ if (0 == rowreq_ctx->data.ifHighSpeed)
+ (*ifHighSpeed_val_ptr) = rowreq_ctx->data.ifSpeed / 1000000;
+ else
+ (*ifHighSpeed_val_ptr) = rowreq_ctx->data.ifHighSpeed;
+
+ return MFD_SUCCESS;
+} /* ifHighSpeed_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifPromiscuousMode
+ * ifPromiscuousMode is subid 16 of ifXEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.31.1.1.1.16
+ * Description:
+This object has a value of false(2) if this interface only
+ accepts packets/frames that are addressed to this station.
+ This object has a value of true(1) when the station accepts
+ all packets/frames transmitted on the media. The value
+ true(1) is only legal on certain types of media. If legal,
+ setting this object to a value of true(1) may require the
+ interface to be reset before becoming effective.
+
+ The value of ifPromiscuousMode does not affect the reception
+ of broadcast and multicast packets/frames by the interface.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: true(1), false(2)
+ *
+ * Its syntax is TruthValue (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ifPromiscuousMode data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifPromiscuousMode_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifPromiscuousMode_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifPromiscuousMode_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifPromiscuousMode_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifPromiscuousMode_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifPromiscuousMode data.
+ * copy (* ifPromiscuousMode_val_ptr ) from rowreq_ctx->data
+ */
+ /** this is coming from the interface entry, which is a boolean */
+ if (rowreq_ctx->data.ifPromiscuousMode)
+ (*ifPromiscuousMode_val_ptr) = 1;
+ else
+ (*ifPromiscuousMode_val_ptr) = 2;
+
+ return MFD_SUCCESS;
+} /* ifPromiscuousMode_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifConnectorPresent
+ * ifConnectorPresent is subid 17 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.17
+ * Description:
+This object has the value 'true(1)' if the interface
+ sublayer has a physical connector and the value 'false(2)'
+ otherwise.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 2/8. Values: true(1), false(2)
+ *
+ * Its syntax is TruthValue (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ifConnectorPresent data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifConnectorPresent_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifConnectorPresent_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifConnectorPresent_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifConnectorPresent_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifConnectorPresent_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ (*ifConnectorPresent_val_ptr) = rowreq_ctx->data.ifConnectorPresent ?
+ TV_TRUE : TV_FALSE;
+
+ return MFD_SUCCESS;
+} /* ifConnectorPresent_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifAlias
+ * ifAlias is subid 18 of ifXEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.31.1.1.1.18
+ * Description:
+This object is an 'alias' name for the interface as
+ specified by a network manager, and provides a non-volatile
+ 'handle' for the interface.
+
+ On the first instantiation of an interface, the value of
+ ifAlias associated with that interface is the zero-length
+ string. As and when a value is written into an instance of
+ ifAlias through a network management set operation, then the
+ agent must retain the supplied value in the ifAlias instance
+ associated with the same interface for as long as that
+ interface remains instantiated, including across all re-
+ initializations/reboots of the network management system,
+ including those which result in a change of the interface's
+ ifIndex value.
+
+ An example of the value which a network manager might store
+ in this object for a WAN interface is the (Telco's) circuit
+ number/identifier of the interface.
+
+ Some agents may support write-access only for interfaces
+ having particular values of ifType. An agent which supports
+ write access to this object is required to keep the value in
+ non-volatile storage, but it may limit the length of new
+ values depending on how much storage is already occupied by
+ the current values for other interfaces.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 1
+ * hint: 255a
+ *
+ * Ranges: 0 - 64;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 64)
+ */
+/**
+ * Extract the current value of the ifAlias data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifAlias_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param ifAlias_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by ifAlias.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*ifAlias_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update ifAlias_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+ifAlias_get(ifXTable_rowreq_ctx * rowreq_ctx, char **ifAlias_val_ptr_ptr,
+ size_t * ifAlias_val_ptr_len_ptr)
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert((NULL != ifAlias_val_ptr_ptr)
+ && (NULL != *ifAlias_val_ptr_ptr));
+ netsnmp_assert(NULL != ifAlias_val_ptr_len_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifAlias_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifAlias data.
+ * copy (* ifAlias_val_ptr_ptr ) data and (* ifAlias_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for ifAlias data
+ */
+ if ((NULL == (*ifAlias_val_ptr_ptr)) ||
+ ((*ifAlias_val_ptr_len_ptr) <
+ (rowreq_ctx->data.ifAlias_len *
+ sizeof(rowreq_ctx->data.ifAlias[0])))) {
+ /*
+ * allocate space for ifAlias data
+ */
+ (*ifAlias_val_ptr_ptr) = (char*)
+ malloc(rowreq_ctx->data.ifAlias_len *
+ sizeof(rowreq_ctx->data.ifAlias[0]));
+ if (NULL == (*ifAlias_val_ptr_ptr)) {
+ snmp_log(LOG_ERR, "could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (*ifAlias_val_ptr_len_ptr) =
+ rowreq_ctx->data.ifAlias_len * sizeof(rowreq_ctx->data.ifAlias[0]);
+ memcpy((*ifAlias_val_ptr_ptr), rowreq_ctx->data.ifAlias,
+ rowreq_ctx->data.ifAlias_len *
+ sizeof(rowreq_ctx->data.ifAlias[0]));
+
+ return MFD_SUCCESS;
+} /* ifAlias_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifCounterDiscontinuityTime
+ * ifCounterDiscontinuityTime is subid 19 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.19
+ * Description:
+The value of sysUpTime on the most recent occasion at which
+ any one or more of this interface's counters suffered a
+ discontinuity. The relevant counters are the specific
+ instances associated with this interface of any Counter32 or
+
+ Counter64 object contained in the ifTable or ifXTable. 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 ifCounterDiscontinuityTime data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifCounterDiscontinuityTime_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
+ifCounterDiscontinuityTime_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifCounterDiscontinuityTime_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifCounterDiscontinuityTime_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifCounterDiscontinuityTime_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifCounterDiscontinuityTime data.
+ * copy (* ifCounterDiscontinuityTime_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifCounterDiscontinuityTime_val_ptr) =
+ rowreq_ctx->data.ifCounterDiscontinuityTime;
+
+ return MFD_SUCCESS;
+} /* ifCounterDiscontinuityTime_get */
+
+
+#ifndef NETSNMP_NO_WRITE_SUPPORT
+
+/** @} */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ifXTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IF-MIB::ifXTable is subid 1 of ifMIBObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.31.1.1, length: 9
+ */
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +==============+
+ * +----------------|| object ||
+ * | E || lookup ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * +--------------+
+ * | post |
+ * | request |
+ * +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * ifXTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * ifXTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ifXTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+ifXTable_undo_setup(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_undo_setup", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:451:M: |-> Setup ifXTable undo.
+ * set up ifXTable undo information, in preparation for a set.
+ * Undo storage is in (* ifCounterDiscontinuityTime_val_ptr )*
+ */
+
+ return rc;
+} /* ifXTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ifXTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+ifXTable_undo(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_undo", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:451:M: |-> ifXTable undo.
+ * ifXTable undo information, in response to a failed set.
+ * Undo storage is in (* ifCounterDiscontinuityTime_val_ptr )*
+ */
+
+ return rc;
+} /* ifXTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ifXTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ifXTable_undo_cleanup(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_undo_cleanup", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:452:M: |-> Cleanup ifXTable undo.
+ * Undo storage is in (* ifCounterDiscontinuityTime_val_ptr )*
+ */
+
+ return rc;
+} /* ifXTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * ifXTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ifXTable_commit(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_commit", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit ifXTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ *
+ * this is where one would usually commit data. In this case,
+ * ifLinkUpDownTrapEnable and ifAlias are purely internal, so
+ * nothing needs to be done. That leaves ifPromiscuosMode,
+ * which I'm leery about implementing. Thus, at this point,
+ * there is nothing to do except twiddle flag bits.
+ */
+ if (save_flags & COLUMN_IFLINKUPDOWNTRAPENABLE_FLAG) {
+ save_flags &= ~COLUMN_IFLINKUPDOWNTRAPENABLE_FLAG; /* clear ifLinkUpDownTrapEnable */
+ /*
+ * TODO:482:o: |-> commit column ifLinkUpDownTrapEnable.
+ */
+ /*
+ * set flag, in case we need to undo ifLinkUpDownTrapEnable
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_IFLINKUPDOWNTRAPENABLE_FLAG;
+ }
+#ifdef NETSNMP_ENABLE_PROMISCUOUSMODE_SET
+ if (save_flags & COLUMN_IFPROMISCUOUSMODE_FLAG) {
+ save_flags &= ~COLUMN_IFPROMISCUOUSMODE_FLAG; /* clear ifPromiscuousMode */
+ /*
+ * TODO:482:o: |-> commit column ifPromiscuousMode.
+ */
+ rc = -1;
+ if (-1 == rc) {
+ snmp_log(LOG_ERR,
+ "ifXTable column ifPromiscuousMode commit failed\n");
+ } else {
+ /*
+ * set flag, in case we need to undo ifPromiscuousMode
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_IFPROMISCUOUSMODE_FLAG;
+ }
+ }
+#endif /* NETSNMP_ENABLE_PROMISCUOUSMODE_SET */
+
+ if (save_flags & COLUMN_IFALIAS_FLAG) {
+ save_flags &= ~COLUMN_IFALIAS_FLAG; /* clear ifAlias */
+ /*
+ * set flag, in case we need to undo ifAlias
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_IFALIAS_FLAG;
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags) {
+ snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n",
+ save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* ifXTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * ifXTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ifXTable_undo_commit(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_undo_commit", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:485:M: |-> Undo ifXTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* ifXTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement ifXTable node value checks.
+ * TODO:450:M: Implement ifXTable undo functions.
+ * TODO:460:M: Implement ifXTable set functions.
+ * TODO:480:M: Implement ifXTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifLinkUpDownTrapEnable
+ * ifLinkUpDownTrapEnable is subid 14 of ifXEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.31.1.1.1.14
+ * Description:
+Indicates whether linkUp/linkDown traps should be generated
+ for this interface.
+
+ By default, this object should have the value enabled(1) for
+ interfaces which do not operate on 'top' of any other
+ interface (as defined in the ifStackTable), and disabled(2)
+ otherwise.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: enabled(1), disabled(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifLinkUpDownTrapEnable_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ifXTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of enabled(1), disabled(2)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ifLinkUpDownTrapEnable_check_value(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long ifLinkUpDownTrapEnable_val)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifLinkUpDownTrapEnable_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ifLinkUpDownTrapEnable value.
+ */
+
+ return MFD_SUCCESS; /* ifLinkUpDownTrapEnable value not illegal */
+} /* ifLinkUpDownTrapEnable_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ifXTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ifXTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ifLinkUpDownTrapEnable_undo_setup(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifLinkUpDownTrapEnable_undo_setup",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ifLinkUpDownTrapEnable undo.
+ */
+ /*
+ * copy ifLinkUpDownTrapEnable data
+ * set rowreq_ctx->undo->ifLinkUpDownTrapEnable from rowreq_ctx->data.ifLinkUpDownTrapEnable
+ */
+ rowreq_ctx->undo->ifLinkUpDownTrapEnable =
+ rowreq_ctx->data.ifLinkUpDownTrapEnable;
+
+
+ return MFD_SUCCESS;
+} /* ifLinkUpDownTrapEnable_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ifLinkUpDownTrapEnable_val
+ * A long containing the new value.
+ */
+int
+ifLinkUpDownTrapEnable_set(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long ifLinkUpDownTrapEnable_val)
+{
+
+ DEBUGMSGTL(("verbose:ifXTable:ifLinkUpDownTrapEnable_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ifLinkUpDownTrapEnable value.
+ * set ifLinkUpDownTrapEnable value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.ifLinkUpDownTrapEnable = ifLinkUpDownTrapEnable_val;
+
+ return MFD_SUCCESS;
+} /* ifLinkUpDownTrapEnable_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ifLinkUpDownTrapEnable_undo(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ifXTable:ifLinkUpDownTrapEnable_undo",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ifLinkUpDownTrapEnable undo.
+ */
+ /*
+ * copy ifLinkUpDownTrapEnable data
+ * set rowreq_ctx->data.ifLinkUpDownTrapEnable from rowreq_ctx->undo->ifLinkUpDownTrapEnable
+ */
+ rowreq_ctx->data.ifLinkUpDownTrapEnable =
+ rowreq_ctx->undo->ifLinkUpDownTrapEnable;
+
+
+ return MFD_SUCCESS;
+} /* ifLinkUpDownTrapEnable_undo */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifPromiscuousMode
+ * ifPromiscuousMode is subid 16 of ifXEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.31.1.1.1.16
+ * Description:
+This object has a value of false(2) if this interface only
+ accepts packets/frames that are addressed to this station.
+ This object has a value of true(1) when the station accepts
+ all packets/frames transmitted on the media. The value
+ true(1) is only legal on certain types of media. If legal,
+ setting this object to a value of true(1) may require the
+ interface to be reset before becoming effective.
+
+ The value of ifPromiscuousMode does not affect the reception
+ of broadcast and multicast packets/frames by the interface.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: true(1), false(2)
+ *
+ * Its syntax is TruthValue (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifPromiscuousMode_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ifXTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of true(1), false(2)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ifPromiscuousMode_check_value(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long ifPromiscuousMode_val)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifPromiscuousMode_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ifPromiscuousMode value.
+ */
+
+ return MFD_SUCCESS; /* ifPromiscuousMode value not illegal */
+} /* ifPromiscuousMode_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ifXTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ifXTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ifPromiscuousMode_undo_setup(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifPromiscuousMode_undo_setup",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ifPromiscuousMode undo.
+ */
+#ifdef NETSNMP_ENABLE_PROMISCUOUSMODE_SET
+ /*
+ * copy ifPromiscuousMode data
+ * set rowreq_ctx->undo->ifPromiscuousMode from rowreq_ctx->data.ifPromiscuousMode
+ */
+ rowreq_ctx->undo->ifPromiscuousMode =
+ rowreq_ctx->data.ifPromiscuousMode;
+
+
+ return MFD_SUCCESS;
+#else
+ return MFD_NOT_VALID_EVER;
+#endif
+} /* ifPromiscuousMode_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ifPromiscuousMode_val
+ * A long containing the new value.
+ */
+int
+ifPromiscuousMode_set(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long ifPromiscuousMode_val)
+{
+
+ DEBUGMSGTL(("verbose:ifXTable:ifPromiscuousMode_set", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ifPromiscuousMode value.
+ * set ifPromiscuousMode value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.ifPromiscuousMode = ifPromiscuousMode_val;
+
+ return MFD_SUCCESS;
+} /* ifPromiscuousMode_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ifPromiscuousMode_undo(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ifXTable:ifPromiscuousMode_undo", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ifPromiscuousMode undo.
+ */
+#ifdef NETSNMP_ENABLE_PROMISCUOUSMODE_SET
+ /*
+ * copy ifPromiscuousMode data
+ * set rowreq_ctx->data.ifPromiscuousMode from rowreq_ctx->undo->ifPromiscuousMode
+ */
+ rowreq_ctx->data.ifPromiscuousMode =
+ rowreq_ctx->undo->ifPromiscuousMode;
+#endif
+
+ return MFD_SUCCESS;
+} /* ifPromiscuousMode_undo */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifAlias
+ * ifAlias is subid 18 of ifXEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.31.1.1.1.18
+ * Description:
+This object is an 'alias' name for the interface as
+ specified by a network manager, and provides a non-volatile
+ 'handle' for the interface.
+
+ On the first instantiation of an interface, the value of
+ ifAlias associated with that interface is the zero-length
+ string. As and when a value is written into an instance of
+ ifAlias through a network management set operation, then the
+ agent must retain the supplied value in the ifAlias instance
+ associated with the same interface for as long as that
+ interface remains instantiated, including across all re-
+ initializations/reboots of the network management system,
+ including those which result in a change of the interface's
+ ifIndex value.
+
+ An example of the value which a network manager might store
+ in this object for a WAN interface is the (Telco's) circuit
+ number/identifier of the interface.
+
+ Some agents may support write-access only for interfaces
+ having particular values of ifType. An agent which supports
+ write access to this object is required to keep the value in
+ non-volatile storage, but it may limit the length of new
+ values depending on how much storage is already occupied by
+ the current values for other interfaces.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 1
+ * hint: 255a
+ *
+ * Ranges: 0 - 64;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 64)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifAlias_val_ptr
+ * A char containing the new value.
+ * @param ifAlias_val_ptr_len
+ * The size (in bytes) of the data pointed to by ifAlias_val_ptr
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ifXTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_OCTET_STR
+ * The length is < sizeof(rowreq_ctx->data.ifAlias).
+ * The length is in (one of) the range set(s): 0 - 64
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ifAlias_check_value(ifXTable_rowreq_ctx * rowreq_ctx,
+ char *ifAlias_val_ptr, size_t ifAlias_val_ptr_len)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifAlias_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != ifAlias_val_ptr);
+
+ /*
+ * TODO:441:o: |-> Check for valid ifAlias value.
+ */
+
+ return MFD_SUCCESS; /* ifAlias value not illegal */
+} /* ifAlias_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ifXTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ifXTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ifAlias_undo_setup(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifAlias_undo_setup", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ifAlias undo.
+ */
+ /*
+ * copy ifAlias and ifAlias_len data
+ * set rowreq_ctx->undo->ifAlias from rowreq_ctx->data.ifAlias
+ */
+ memcpy(rowreq_ctx->undo->ifAlias, rowreq_ctx->data.ifAlias,
+ (rowreq_ctx->data.ifAlias_len *
+ sizeof(rowreq_ctx->undo->ifAlias[0])));
+ rowreq_ctx->undo->ifAlias_len = rowreq_ctx->data.ifAlias_len;
+
+
+ return MFD_SUCCESS;
+} /* ifAlias_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ifAlias_val_ptr
+ * A char containing the new value.
+ * @param ifAlias_val_ptr_len
+ * The size (in bytes) of the data pointed to by ifAlias_val_ptr
+ */
+int
+ifAlias_set(ifXTable_rowreq_ctx * rowreq_ctx, char *ifAlias_val_ptr,
+ size_t ifAlias_val_ptr_len)
+{
+
+ DEBUGMSGTL(("verbose:ifXTable:ifAlias_set", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != ifAlias_val_ptr);
+
+ /*
+ * TODO:461:M: |-> Set ifAlias value.
+ * set ifAlias value in rowreq_ctx->data
+ */
+ memcpy(rowreq_ctx->data.ifAlias, ifAlias_val_ptr, ifAlias_val_ptr_len);
+ /** convert bytes to number of char */
+ rowreq_ctx->data.ifAlias_len =
+ ifAlias_val_ptr_len / sizeof(ifAlias_val_ptr[0]);
+
+ return MFD_SUCCESS;
+} /* ifAlias_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ifAlias_undo(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ifXTable:ifAlias_undo", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ifAlias undo.
+ */
+ /*
+ * copy ifAlias and ifAlias_len data
+ * set rowreq_ctx->data.ifAlias from rowreq_ctx->undo->ifAlias
+ */
+ memcpy(rowreq_ctx->data.ifAlias, rowreq_ctx->undo->ifAlias,
+ (rowreq_ctx->undo->ifAlias_len *
+ sizeof(rowreq_ctx->data.ifAlias[0])));
+ rowreq_ctx->data.ifAlias_len = rowreq_ctx->undo->ifAlias_len;
+
+
+ return MFD_SUCCESS;
+} /* ifAlias_undo */
+
+/**
+ * check dependencies
+ *
+ * This is useful for for tables which have dependencies between columns
+ * (or rows, or tables). For example, two columns allocating a percentage
+ * of something add up 100%.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * ifXTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @retval MFD_SUCCESS all the changes to the row are legal
+ * @retval MFD_ERROR one or more changes are not legal
+ *
+ * (see README-table-ifXTable if you don't have dependencies)
+ */
+int
+ifXTable_check_dependencies(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("internal:ifXTable:ifXTable_check_dependencies",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:470:o: Check ifXTable row dependencies.
+ * check that all new value are legal and consistent with each other
+ */
+ return rc;
+} /* ifXTable_check_dependencies */
+
+#endif /* !NETSNMP_NO_WRITE_SUPPORT */
+
+/** @} */
+/** @{ */