summaryrefslogtreecommitdiff
path: root/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_access.c
diff options
context:
space:
mode:
Diffstat (limited to 'cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_access.c')
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_access.c446
1 files changed, 446 insertions, 0 deletions
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_access.c
new file mode 100644
index 0000000000..208b499ef2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_access.c
@@ -0,0 +1,446 @@
+/*
+ * 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 "eocCNUPortTable.h"
+
+
+#include "eocCNUPortTable_data_access.h"
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUPortTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUPortTable is subid 3 of eocCNUPort.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.4.3, length: 12
+*/
+
+/**
+ * initialization for eocCNUPortTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param eocCNUPortTable_reg
+ * Pointer to eocCNUPortTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+eocCNUPortTable_init_data(eocCNUPortTable_registration * eocCNUPortTable_reg)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_init_data","called\n"));
+
+ /*
+ * TODO:303:o: Initialize eocCNUPortTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUPortTable_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
+eocCNUPortTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_container_init","called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,"bad container param to eocCNUPortTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"bad cache param to eocCNUPortTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up eocCNUPortTable 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 = EOCCNUPORTTABLE_CACHE_TIMEOUT; /* seconds */
+} /* eocCNUPortTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before eocCNUPortTable_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
+eocCNUPortTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_container_shutdown","called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,"bad params to eocCNUPortTable_container_shutdown\n");
+ return;
+ }
+
+} /* eocCNUPortTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement eocCNUPortTable 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
+ * eocCNUPortTable_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
+eocCNUPortTable_container_load(netsnmp_container *container)
+{
+ eocCNUPortTable_rowreq_ctx *rowreq_ctx;
+ size_t count = 0;
+ int rc = MFD_SUCCESS;
+
+ /*
+ * temporary storage for index values
+ */
+ /*
+ * eocCNUPortCBATCardIndex(1)/
+ * INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUPortCBATCardIndex = 0;
+ /*
+ * eocCNUPortCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUPortCNUIndex;
+ /*
+ * eocCNUPortIndex(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUPortIndex;
+
+ u_long eocCNUPortEN = 0;
+ long eocCNUPortService = 0;
+
+ int i, j;
+ int port_count;
+
+ /* declarations for calls to libspid */
+ char mac_str[LIBSPID_MAC_STR_LEN];
+ char *index_str;
+ libspid_eoc_wl_entry_t eoc_wl_entry;
+ int tei;
+ int ret;
+
+ /* port entries read from config file */
+ libspid_eoc_port_entry_t port_entries[LIBSPID_PORT_TOTAL_MAX];
+
+ /*
+ * TODO:351:M: |-> Load/update data in the eocCNUPortTable container.
+ * loop over your eocCNUPortTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ memset (port_entries, 0x0, sizeof (port_entries));
+ /* check errors in contents of port list prior to
+ * reading and log message if errors are found */
+ if (LIBSPID_SUCCESS != libspid_eoc_port_check ())
+ {
+ snmp_log (LOG_ERR,
+ "errors detected in port config file, refer to syslog\n");
+ }
+ /* get current contents of port config file */
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_port_get_list (port_entries, &port_count))
+ {
+ snmp_log (LOG_ERR, "port config file not read correctly\n");
+ return MFD_ERROR;
+ }
+
+ if (0 == port_count)
+ {
+ rc = MFD_END_OF_DATA;
+ }
+
+ DEBUGMSGTL (("verbose:eocCNUPortTable:eocCNUPortTable_container_load",
+ "port_count = %d\n", port_count));
+
+ for (i = 0; i < port_count; i++)
+ {
+
+ /* parse port index from port entry */
+ if (1 != sscanf (port_entries[i].port_index, "%d", &eocCNUPortIndex))
+ {
+ snmp_log (LOG_ERR,
+ "parsing failed, setting port index to invalid\n");
+ eocCNUPortIndex = INVALID_EOCCNUPORTINDEX;
+ }
+
+ /* copy MAC address from port entry to avoid
+ * being corrupted by call to read_line in wl_get */
+ strncpy (mac_str, port_entries[i].mac_addr, LIBSPID_MAC_STR_LEN);
+
+
+ memset (&eoc_wl_entry, 0, sizeof (eoc_wl_entry));
+
+ /* get white list entry for current MAC address */
+ ret = libspid_eoc_wl_get (mac_str, &eoc_wl_entry);
+
+ if (LIBSPID_SUCCESS == ret)
+ {
+ /* parse current TEI from white list entry */
+ if (1 != sscanf (eoc_wl_entry.tei, "%d", &tei))
+ {
+ snmp_log (LOG_ERR,
+ "error parsing TEI from white list entry, "
+ "setting CNUIndex value to invalid\n");
+ eocCNUPortCNUIndex = INVALID_EOCCNUPORTCNUINDEX;
+ }
+ else
+ {
+ /* convert current TEI to slave index */
+ eocCNUPortCNUIndex = tei - 2;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR,
+ "PortTable_container_load: "
+ "cannot find White list entry with current MAC, "
+ "setting CNUIndex value to invalid\n");
+ eocCNUPortCNUIndex = INVALID_EOCCNUPORTCNUINDEX;
+ }
+
+ /*
+ * TODO:352:M: | |-> set indexes in new eocCNUPortTable rowreq
+ * context.
+ * data context will be set from the param (unless NULL,
+ * in which case a new data context will be allocated)
+ */
+ rowreq_ctx = eocCNUPortTable_allocate_rowreq_ctx (NULL);
+ if (NULL == rowreq_ctx)
+ {
+ snmp_log (LOG_ERR, "memory allocation failed\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+ if (MFD_SUCCESS !=
+ eocCNUPortTable_indexes_set (rowreq_ctx,
+ eocCNUPortCBATCardIndex,
+ eocCNUPortCNUIndex,
+ eocCNUPortIndex))
+ {
+ snmp_log (LOG_ERR,
+ "error setting index while loading "
+ "eocCNUPortTable data.\n");
+ eocCNUPortTable_release_rowreq_ctx (rowreq_ctx);
+ continue;
+ }
+
+ /* copy slave MAC address to row request context */
+ strcpy (rowreq_ctx->data.eocCNUPortMACAddress,
+ port_entries[i].mac_addr);
+
+ /*
+ * TODO:352:r: | |-> populate eocCNUPortTable data context.
+ * Populate data context here. (optionally, delay until row prep)
+ */
+ /*
+ * TRANSIENT or semi-TRANSIENT data:
+ * copy data or save any info needed to do it in row_prep.
+ */
+ /*
+ * setup/save data for eocCNUPortEN
+ * eocCNUPortEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ if (1 != sscanf (port_entries[i].port_en, "%u", &eocCNUPortEN))
+ {
+ snmp_log (LOG_ERR,
+ "parsing failed, setting port enable to invalid\n");
+ eocCNUPortEN = INVALID_EOCCNUPORTEN;
+ }
+
+ /*
+ * TODO:246:r: |-> Define eocCNUPortEN mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * enums usually need mapping.
+ */
+ /* mapping unnecessary here */
+ rowreq_ctx->data.eocCNUPortEN = eocCNUPortEN;
+
+ /*
+ * setup/save data for eocCNUPortService
+ * eocCNUPortService(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ if (1 != sscanf (port_entries[i].service_index, "%d",
+ &eocCNUPortService))
+ {
+ snmp_log (LOG_ERR,
+ "parsing failed, setting port service to invalid\n");
+ eocCNUPortService = INVALID_EOCCNUPORTSERVICE;
+ }
+
+ /*
+ * TODO:246:r: |-> Define eocCNUPortService mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * Integer based value can usually just do a direct copy.
+ */
+ rowreq_ctx->data.eocCNUPortService = eocCNUPortService;
+
+ /*
+ * insert into table container
+ */
+ CONTAINER_INSERT (container, rowreq_ctx);
+ ++count;
+ }
+
+
+ DEBUGMSGT (("verbose:eocCNUPortTable:eocCNUPortTable_container_load",
+ "inserted %d records\n", count));
+
+ return MFD_SUCCESS;
+}
+
+/**
+ * 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
+eocCNUPortTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_container_free","called\n"));
+
+ /*
+ * TODO:380:M: Free eocCNUPortTable container data.
+ */
+} /* eocCNUPortTable_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
+eocCNUPortTable_row_prep( eocCNUPortTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_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;
+} /* eocCNUPortTable_row_prep */
+
+/** @} */