Files
m241Neelima/components/webcli-4.9/target/src/wrn/wm/backplane/wmbSNMPLib.c
T
2026-07-30 11:19:44 +05:30

210 lines
5.3 KiB
C

/* wmbSNMPLib.c - SNMP interface handler of WMB */
/* Copyright 2002-2007 Wind River Systems, Inc. */
#include "copyright_wrs.h"
/*
DESCRIPTION
This file includes support for registering SNMP objects with the backplane and managing
all aspects of the SNMP related functions, including portfolios
*/
/* includes */
#include "wm.h"
#include "wmb.h"
#include "wmbSNMPLib.h"
#ifdef ENVOY_STACK_K
#include "wmmMethodRoutine.h"
#endif
#if defined __ENABLE_SNMP_RESOURCE_REGISTER__
/* defines */
/* typedefs */
/* locals */
static WMB_SNMP_ENTRY_T wmbEntry[WMB_MAX_SNMP_ENTRIES];
static int numTables = 0;
/**************************************************************************
*
* wmbSNMPEntryLookup - Return the index of WMB_SNMP_ENTRY_T for a component
*
* RETURNS: index
*
*
* NOMANUAL
*/
LOCAL sbyte2 wmbSNMPEntryLookup
(
WMB_CID_T component /* [in] Component ID */
)
{
sbyte4 i;
for (i = 0; i < WMB_MAX_SNMP_ENTRIES; i++)
{
if (wmbEntry[i].component == component)
break;
}
return i;
}
/**************************************************************************
*
* wmbSNMPResourceRegister - Register SNMP object
*
* RETURNS: ERROR, OK
*
*
* NOMANUAL
*/
STATUS wmbSNMPResourceRegister
(
WMB_CID_T component, /* [in] Component ID */
sbyte *objName, /* [in] Object name */
ubyte4 *Id, /* [in] OID */
ubyte2 oidLen, /* [in] OID Len */
ubyte2 dataType, /* [in] Data Type */
ubyte2 accessRead, /* [in] Read access value */
ubyte2 accessWrite, /* [in] Write access value */
ubyte2 flags, /* [in] Flags */
WMB_HANDLER_T wmbHandler /* [in] Pointer to the WMB Handler function */
)
{
STATUS rc = OK;
WMB_ENTRY_T *pEntry;
sbyte4 i;
if (accessWrite == -1)
flags |= DB_FLAG_READONLY_K;
i = wmbSNMPEntryLookup(component);
if (i == WMB_MAX_SNMP_ENTRIES)
return ERROR;
if (wmbEntry[i].numEntry == wmbEntry[i].maxEntry)
return ERROR;
pEntry = &(wmbEntry[i].pEntryArray[wmbEntry[i].numEntry]);
pEntry->accessRead = 0;
pEntry->accessWrite = 0;
pEntry->flags = flags | DB_FLAG_INSTANCE;
pEntry->handler = wmbHandler;
pEntry->localId = 0;
pEntry->pData = Id;
pEntry->pName = objName;
pEntry->pValid = NULL;
pEntry->sibling = 0;
pEntry->size = oidLen;
pEntry->table = 0;
pEntry->type = dataType;
#ifdef ENVOY_STACK_K
rc = wmmRegisterSNMPObject(objName, Id, oidLen / sizeof (ubyte4),
dataType, accessRead, accessWrite, Id);
#endif
if ( rc == OK )
wmbEntry[i].numEntry++;
else
bzero( (char *)pEntry, sizeof(WMB_ENTRY_T) );
return rc;
}
/**************************************************************************
*
* wmbSNMPObjectEntryCreate - Allocate space for MIB Object entries
*
* RETURNS: ERROR, OK
*
*
* NOMANUAL
*/
STATUS wmbSNMPObjectEntryCreate
(
WMB_CID_T component, /* [in] Component ID */
sbyte2 maxMIBObjects /* [in] Number of Entries to allocate for */
)
{
sbyte4 i;
if (numTables == WMB_MAX_SNMP_ENTRIES)
return wmError(ERROR_MEMMGR_NO_MEMORY, "wmbSNMPObjectEntryCreate: Access beyond wmbEntry array");
for (i = 0; i < WMB_MAX_SNMP_ENTRIES; i++)
{
if (wmbEntry[i].maxEntry == 0)
break;
}
wmbEntry[i].component = component;
wmbEntry[i].numEntry = 0;
wmbEntry[i].maxEntry = maxMIBObjects;
/* Use Calloc to get zero'd memory */
wmbEntry[i].pEntryArray = wmCalloc(maxMIBObjects, sizeof(WMB_ENTRY_T));
if (wmbEntry[i].pEntryArray == NULL)
return wmError(ERROR_MEMMGR_NO_MEMORY, "wmbSNMPObjectEntryCreate");
return OK;
}
/**************************************************************************
*
* wmbSNMPObjectEntryDelete - Delete MIB Object entries for the component
*
* RETURNS: N/A
*
*
* NOMANUAL
*/
void wmbSNMPObjectEntryDelete
(
WMB_CID_T component /* [in] Component ID */
)
{
sbyte4 i;
i = wmbSNMPEntryLookup(component);
if (i == WMB_MAX_SNMP_ENTRIES)
return;
wmbEntry[i].maxEntry = 0;
wmbEntry[i].component = NULL;
wmbEntry[i].numEntry = 0;
wmFree(wmbEntry[i].pEntryArray);
}
/**************************************************************************
*
* wmbSNMPResourceArrayRegister - Registration of objects completed. WMB will be
* updated.
*
* RETURNS: ERROR, OK
*
*
* NOMANUAL
*/
STATUS wmbSNMPResourceArrayRegister
(
WMB_CID_T component, /* [in] Component ID */
sbyte *path, /* [in] Path of the component */
WMB_HANDLER_T wmbHandler /* [in] Pointer to the WMB Handler function */
)
{
sbyte4 i;
i = wmbSNMPEntryLookup(component);
if (i == WMB_MAX_SNMP_ENTRIES)
return ERROR;
return wmbResourceRegister(wmbComponentNameGet(component), path, wmbEntry[i].pEntryArray,
wmbEntry[i].numEntry, NULL, 0, wmbHandler);
}
#endif /* __ENABLE_SNMP_RESOURCE_REGISTER__ */