📄 snmp.c
字号:
mibNodeT *
getParameter(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;
if (hSnmp);
requestData = (RequestDataT * )buffer;
oidNext = requestData->pResultOid;
node = mibNode;
length=*pOffset;
if (pduType == pduGetNext)
{
while(!node->table )
{
oidNext->id[length]=1;
length++;
node = &node->children[0];
}
*error=checkNext;
*pOffset=length;
oidNext->length=length;
return node;
}
if (pduType == pduGetNextError)
{
node = node->parent;
while(node!=NULL)
{
subIdNext = oid->id[length-1]+1;
if (subIdNext <= (int)node->childNum)
{
oidNext->length=length;
oidNext->id[length-1]=subIdNext;
*error=checkNext;
*pOffset=length-1;
return node;
}
node = node->parent;
length--;
}
*error = outOfMib;
return node;
}
return node;
}
int makeIndex(int offset ,snmpObjectT *oid, RvUint8 * index,int *indexLength ,int *ifIndex);
mibNodeT *
getIndexTableParameter(IN h341AgentHandleT hSnmp,enumPduTypeT pduType,snmpObjectT * oid,int *pOffset,IN mibNodeT * mibNode,
INOUT void * buffer,int * error)
{
h341ParameterName name ;
mibNodeT * node;
int subIdNext=1,length,indexSize,res;
RvUint8 index[100];
int offset,ifIndex=0;
h341RegisterHandleT reg;
RequestDataT * requestData;
snmpObjectT * oidNext;
requestData = (RequestDataT * )buffer;
oidNext = requestData->pResultOid;
offset = *pOffset;
node=mibNode;
indexSize = 100;
if (pduType == pduGetNext)
{
length = offset+1;
if (offset < oid->length)
subIdNext = oid->id[offset]; /* ii is according to table node */
makeIndex(offset,oid,index,&indexSize,&ifIndex);
res = checkIfIndex(hSnmp,&ifIndex);
if (res ==invalidIfIndex)
{
subIdNext++;
indexSize=0;
}
if (res == nextIfIndex)
indexSize=0;
if (subIdNext <= (int)node->childNum)
{
oidNext->id[length-1] = subIdNext;
oidNext->length=length;
requestData->ifIndex = ifIndex;
requestData->instReqData.name = (h341ParameterName)(node->name + subIdNext);
requestData ->instReqData.indexSize=indexSize;
memcpy(requestData ->instReqData.index,index,indexSize);
requestData ->instReqData.reqType = retrieveNextIndex;
*error = 0;
return node;
}
length--;
while(node->parent!=NULL) /*end of table*/
{
length--;/* ii is accord to node*/
node = node->parent;
subIdNext = oid->id[length]+1;
if (subIdNext<= (int)node->childNum)
{
oidNext->length=length+1;
oidNext->id[length]=subIdNext;
*error = checkNext;
*pOffset = length;
return node;
}
}
*error = outOfMib;
return NULL;
}else
{
name = (h341ParameterName)(node->name + oid->id[offset]);
*error = noSuchField;
if( !makeIndex(offset,oid,index,&indexSize,&ifIndex))
{
reg=getSnmpInstance( hSnmp,ifIndex);
if (reg)
if (pduType == pduGetIfIndex)
{
RequestDataT * requestData = (RequestDataT *)buffer;
requestData ->ifIndex = ifIndex;
requestData ->instReqData.name = name;
requestData ->instReqData.indexSize=indexSize;
memcpy(requestData ->instReqData.index,index,30);
requestData ->instReqData.result = 0;
requestData ->instReqData.reqType = retrieveByIndex;
*error = 0;
}
}
return NULL;
}
}
int makeIndex(int pOffset ,snmpObjectT *oid, RvUint8 * index,int *indexLength,int *ifIndex )
{
int res=0;
int i;
int offset;
RvUint8 *ptr=index;
RvUint8 *pid;
offset = pOffset;
if ( offset>=oid->length-1)
{
*ifIndex = 0;
*indexLength = 0;
return noSuchIndex;
}
offset++;
*ifIndex=oid->id[offset];
*indexLength = (oid->length-offset) * SIZEOF_OID_NODE;
pid = (RvUint8 *)&oid->id[offset];
for(i=0; i<(*indexLength); i++)
{
ptr[i] = pid[i];
}
#ifndef __nodebug__
/* dPrintIndex(index,*indexLength,"index = ");*/
#endif
return res;
}
int checkRoot(snmpObjectT * oid)
{
int ii;
if (oid->length < (sizeof(mmRootId)/sizeof(int)) )
return RV_FALSE;
for (ii=0;ii<(sizeof(mmRootId)/sizeof(int));ii++)
{
if(mmRootId[ii] != oid->id[ii])
return RV_FALSE;
}
return RV_TRUE;
}
/*
int getNext(h341AgentHandleT hSnmp,snmpObjectT *oid,INOUT void * buffer)
{
mibNodeT * node;
mibNodeT * children;
snmpObjectT *pOid;
int subId,ii ,error;
if (!checkRoot(oid))
return noSuchRoot;
ii = (sizeof(mmRootId)/sizeof(int));
node= ((h341AgentT *)hSnmp)->root;
if (!((h341AgentT *)hSnmp)->instNum)
return noRegisterInstance;
pOid = (snmpObjectT*)buffer;
memcpy(pOid->id,oid->id,oid->length*sizeof(int));
pOid->length = oid->length;
error = checkNext+1;
while ( (error>=checkNext) && (node!=NULL))
{
if ((node->table)||(ii==pOid->length))
node = node->getH323Parameter(hSnmp,pduGetNext,pOid,&ii,node,buffer,&error );
else
{
subId = pOid->id[ii];
if ((subId == 0)||((int)node->childNum < subId)||(node->childNum==0))
node= node->getH323Parameter(hSnmp,pduGetNextError,pOid,&ii,node,buffer,&error);
else
{
children = node->children;
node = &children[subId-1];
}
}
if (error == checkNext)
error = checkNext+1;
else
ii++;
}
return error;
}
*/
int getNext(h341AgentHandleT hSnmp,INOUT void * buffer)
{
mibNodeT * node;
mibNodeT * children;
snmpObjectT *pOid;
RequestDataT * requestData;
int subId,ii ,error;
requestData = (RequestDataT *)buffer;
pOid = requestData->pResultOid;
if (!checkRoot(requestData->pSourceOid))
return noSuchRoot;
ii = (sizeof(mmRootId)/sizeof(int));
node= ((h341AgentT *)hSnmp)->root;
if (!((h341AgentT *)hSnmp)->instNum)
return noRegisterInstance;
memcpy(pOid->id,requestData->pSourceOid->id,requestData->pSourceOid->length*sizeof(int));
pOid->length = requestData->pSourceOid->length;
error = outOfMib;
while ( (error>=checkNext) && (node!=NULL))
{
if ((node->table)||(ii==pOid->length))
node = node->getH323Parameter(hSnmp,pduGetNext,pOid,&ii,node,buffer,&error );
else
{
subId = pOid->id[ii];
if ((subId == 0)||((int)node->childNum < subId)||(node->childNum==0))
node= node->getH323Parameter(hSnmp,pduGetNextError,pOid,&ii,node,buffer,&error);
else
{
children = node->children;
node = &children[subId-1];
}
}
if (error == checkNext)
error = outOfMib;
else
ii++;
}
return error;
}
int get(h341AgentHandleT hSnmp,snmpObjectT *oid,INOUT void * buffer)
{
mibNodeT * node;
mibNodeT * children;
int subId,ii,error;
if (!checkRoot(oid))
return noSuchRoot;
ii = (sizeof(mmRootId)/sizeof(int));
node= ((h341AgentT *)hSnmp)->root;
if (!((h341AgentT *)hSnmp)->instNum)
return noRegisterInstance;
for (;ii<oid->length;ii++)
{
subId = oid->id[ii];
if ((int)node->childNum < subId)
return noSuchField;
if (node->table)
{
if (node->getH323Parameter!=NULL)
{
node->getH323Parameter(hSnmp,pduGetIfIndex,oid,&ii,node,buffer,&error );
return error;
}
}
if(node->childNum==0)
return noSuchField;
children = node->children;
node = &children[subId-1];
}
if (node->getH323Parameter!=NULL)
{
node->getH323Parameter(hSnmp,pduGetIfIndex,oid,&ii,node,buffer,&error );
return error;
}
return 0;
}
int set(h341AgentHandleT hSnmp,snmpObjectT *oid,INOUT void * buffer)
{
mibNodeT * node;
mibNodeT * children;
int subId,ii,error;
if (!checkRoot(oid))
return noSuchRoot;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -