📄 snmp.c
字号:
#ifdef __cplusplus
extern "C" {
#endif
/* snmp.cpp : Defines the entry point for the console application.*/
#include "rvinternal.h"
#include "rvstdio.h"
#include "rvmemory.h"
#include "mib.h"
#include "snmputil.h"
int mmRootId[]={0,0,8,341,1};
#define SIZEOF_OID_NODE sizeof(int)
extern tableT * cTable;
h341ErrorT h341RetrieveGlParameter (IN h341AgentHandleT hAgent,
IN h341ParameterName name,
OUT mibDataT *data);
tableT * getTable(h341InstanceHandle hSnmp,h341ParameterName name);
h341ErrorT h341InstGetMRParameter(h341InstanceHandle hSnmp,instanceRequestDataPtrT * requestsPtr,int reqNum)
{
int ii;
for (ii=0;ii<reqNum;ii++)
{
if (requestsPtr[ii]->reqType==retrieveByIndex)
{
requestsPtr[ii]->result=h341InstGetByIndex (hSnmp,requestsPtr[ii]->index,requestsPtr[ii]->indexSize,
requestsPtr[ii]->name,&requestsPtr[ii]->pData);
}
else if (requestsPtr[ii]->reqType==retrieveParam)
{
requestsPtr[ii]->result=h341InstGetParameter(hSnmp, requestsPtr[ii]->name,
&requestsPtr[ii]->pData);
}
else if (requestsPtr[ii]->reqType==retrieveNextIndex)
{
requestsPtr[ii]->result=h341InstGetNextIndex (hSnmp,requestsPtr[ii]->name,requestsPtr[ii]->index,
requestsPtr[ii]->indexSize,requestsPtr[ii]->nextIndex,&requestsPtr[ii]->nextIndexSize,
&requestsPtr[ii]->pData);
}
}
return (h341ErrorT)0;
}
h341ErrorT h341InstGetNextIndex(h341InstanceHandle hSnmp,h341ParameterName name,RvUint8 * index, int indexSize,RvUint8 *nextIndex,int *nextSize,
mibDataT *data)
{
tableT * table= getTable(hSnmp,name);
if (table==NULL)
return (h341ErrorT)noSuchField;
return (h341ErrorT)getNextIndex (table,name,index,indexSize,nextIndex,nextSize,data);
}
h341ErrorT h341InstGetByIndex (h341InstanceHandle hSnmp ,RvUint8 * index, int indexSize,
h341ParameterName name,mibDataT *data)
{
tableT * table= getTable(hSnmp,name);
if (table==NULL)
return (h341ErrorT)noSuchField;
return (h341ErrorT)getByIndex (table,index,indexSize,name,data);
}
int checkIfIndex(IN h341AgentHandleT hSnmp ,int *ifIndex)
{
int ii;
if(*ifIndex)
{
ii = *ifIndex -1;
if(((h341AgentT*)hSnmp)->info[ii].h341AgentRegs)
return 0;
}
else
ii = 0;
/* find next valid instance */
for (;ii<((h341AgentT*)hSnmp)->maxInstanceNumber;ii++)
{
if (((h341AgentT*)hSnmp)->info[ii].h341AgentRegs)
{
*ifIndex=ii+1;
return nextIfIndex;
}
}
/* find the first instance */
for (ii=0;ii<((h341AgentT*)hSnmp)->maxInstanceNumber;ii++)
{
if (((h341AgentT*)hSnmp)->info[ii].h341AgentRegs)
{
*ifIndex=ii+1;
break;
}
}
return invalidIfIndex;
}
tableT * getTable(h341InstanceHandle hSnmp,h341ParameterName name)
{
h341InstanceHandleT * hSnmpInst = (h341InstanceHandleT *)hSnmp;
if ((name>=connectionsTableEntry)&&(name<=connectionsReleaseCompleteReason))
return ((h341InstanceHandleT *)hSnmpInst)->H225ConnectionsTable;
if ((name>=h245ControlChannelMasterSlaveTable)&&(name<=h245ControlChannelIsTunneling))
return ((h341InstanceHandleT *)hSnmpInst)->ControlTable;
if ((name>=h245CapExchangeCapabilityTableEntry)&&(name<=h245CapExchangeCapabilityDescriptors))
return ((h341InstanceHandleT *)hSnmpInst)->CapTable;
if ((name>=h245LogChannelsChannelTableEntry)&&(name<=h245LogChannelsMediaTableType))
return ((h341InstanceHandleT *)hSnmpInst)->LCTable;
if ((name>=h245LogChannelsH225TableEntry)&&(name<=h245LogChannelsSrcTerminalLabel))
return ((h341InstanceHandleT *)hSnmpInst)->LCH225Table;
return NULL;
}
h341RegisterHandleT getSnmpInstance(IN h341AgentHandleT hSnmp,int ifIndex)
{
h341RegisterHandleT h341AgentReg;
h341AgentReg = (((h341AgentT *)hSnmp)->info[ifIndex-1].h341AgentRegs);
return h341AgentReg;
}
mibNodeT *
getEventParameter(IN h341AgentHandleT hSnmp,enumPduTypeT pduType,snmpObjectT * oid,int *pOffset,IN mibNodeT * mibNode,
INOUT void * buffer,int *error)
{
mibNodeT * node;
int subIdNext,length;
snmpObjectT * oidNext;
RequestDataT * requestData;
if (hSnmp);
requestData = (RequestDataT * )buffer;
oidNext = requestData->pResultOid;
node=mibNode;
length = *pOffset;
*error=0;
subIdNext = 10;
if (pduType == pduGetNext)
{
while (node!=NULL)
{
if (subIdNext <= (int)node->childNum)
{
oidNext->id[length]=subIdNext;
oidNext->length=length+1;
*pOffset = length;
return node;
}
node = node->parent; /*end of table */
length--;
subIdNext = oid->id[length]+1;
*error=checkNext;
}
}
*error = outOfMib;
return node;
}
mibNodeT *
getGlobalParameter(IN h341AgentHandleT hSnmp,enumPduTypeT pduType,snmpObjectT * oid,int *pOffset,IN mibNodeT * mibNode,
INOUT void * buffer,int *error)
{
mibNodeT * node;
int subIdNext,length;
RequestDataT * requestData;
snmpObjectT * oidNext;
requestData = (RequestDataT * )buffer;
oidNext = requestData->pResultOid;
node=mibNode;
length = *pOffset;
*error=0;
subIdNext=1;
if (pduType == pduGetNext)
{
if (length==oidNext->length)
{
oidNext->id[length]=0;
oidNext->length++;
*error = h341RetrieveGlParameter (hSnmp,node->name,&oidNext->data);
return node;
}
*error=checkNext;
while (node->parent!=NULL)
{
node = node->parent; /*end of table */
length--;
subIdNext = oid->id[length]+1;
if (subIdNext <= (int)node->childNum)
{
oidNext->id[length]=subIdNext;
oidNext->length=length+1;
*pOffset = length;
return node;
}
}
*error = outOfMib;
return NULL;
}else
{
RequestDataT * requestData = (RequestDataT *)buffer;
requestData ->ifIndex = 0;
*error = noSuchField;
if ((oid->length == length+1)&&(oid->id[length]==0))
*error = h341RetrieveGlParameter (hSnmp,node->name,&oid->data);
return node;
}
}
mibNodeT *
getTableParameter(IN h341AgentHandleT hSnmp,enumPduTypeT pduType,snmpObjectT * oid,int *pOffset,IN mibNodeT * mibNode,
INOUT void * buffer,int *error)
{
mibNodeT * node;
int subIdNext,length,ifIndex=0,res;
h341RegisterHandleT reg;
RequestDataT * requestData;
snmpObjectT * oidNext;
requestData = (RequestDataT * )buffer;
oidNext = requestData->pResultOid;
node=mibNode;
length = *pOffset;
*error=0;
if (pduType == pduGetNext)
{
if (length==oidNext->length)
subIdNext= (node->childNum!=0);
else
{
if ((length+1) == oidNext->length)
subIdNext = oid->id[length];
else
{
subIdNext = oid->id[length];
ifIndex=oid->id[length+1]+1;
}
}
res = checkIfIndex(hSnmp,&ifIndex);
if (res ==invalidIfIndex)
subIdNext++;
if (subIdNext <= (int)node->childNum)
{
oidNext->id[length] = subIdNext;
oidNext->length=length+2;
oidNext->id[length+1]=ifIndex;
requestData->ifIndex = ifIndex;
requestData->instReqData.name = (h341ParameterName)(node->name + subIdNext);
requestData ->instReqData.indexSize=0;
requestData ->instReqData.reqType = retrieveParam;
*error = 0;
return 0;
}
*error=checkNext;
while (node->parent!=NULL)
{
node = node->parent; /*end of table */
length--;
subIdNext = oid->id[length]+1;
if (subIdNext <= (int)node->childNum)
{
oidNext->id[length]=subIdNext;
oidNext->length=length+1;
*pOffset = length;
return node;
}
}
*error = outOfMib;
return NULL;
}
else
{
*error = noSuchField;
if (oid->length == length+2)
{
subIdNext = oid->id[length];
ifIndex=oid->id[length+1];
if (node->childNum >=subIdNext)
{
reg=getSnmpInstance( hSnmp,ifIndex);
if (reg)
{
if (pduType==pduSetParam)
{
mibDataT * data = (mibDataT *)buffer;
*error = ((h341AgentT *)hSnmp)->h341SetParameter (reg,(h341ParameterName)(node->name + subIdNext),data);
}
else
{
requestData ->ifIndex = ifIndex;
requestData ->instReqData.name = (h341ParameterName)(node->name + subIdNext);
requestData ->instReqData.indexSize=0;
requestData ->instReqData.reqType = retrieveParam;
*error = 0;
}
}
}
}
return node;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -