📄 testmib.c
字号:
goto Exit;
}
// Setup var bind name of NEXT MIB variable
SnmpUtilOidFree( &VarBind->name );
SnmpUtilOidCpy( &VarBind->name, &MIB_OidPrefix );
SnmpUtilOidAppend( &VarBind->name, &MibPtr->MibNext->Oid );
// Call function to process request. Each MIB entry has a function
// pointer that knows how to process its MIB variable.
ErrStat = (*MibPtr->MibNext->MibFunc)( MIB_ACTION_GET,
MibPtr->MibNext, VarBind );
break;
case MIB_ACTION_GET:
// Make sure that this variable's ACCESS is GET'able
if ( MibPtr->Access != MIB_ACCESS_READ &&
MibPtr->Access != MIB_ACCESS_READWRITE )
{
ErrStat = SNMP_ERRORSTATUS_NOSUCHNAME;
goto Exit;
}
// Setup varbind's return value
VarBind->value.asnType = MibPtr->Type;
switch ( VarBind->value.asnType )
{
case ASN_RFC1155_COUNTER:
case ASN_RFC1155_GAUGE:
case ASN_INTEGER:
VarBind->value.asnValue.number = *(AsnInteger *)(MibPtr->Storage);
break;
case ASN_OCTETSTRING: // This entails ASN_RFC1213_DISPSTRING also
VarBind->value.asnValue.string.length =
strlen( (LPSTR)MibPtr->Storage );
if ( NULL ==
(VarBind->value.asnValue.string.stream =
SnmpUtilMemAlloc(VarBind->value.asnValue.string.length *
sizeof(char))) )
{
ErrStat = SNMP_ERRORSTATUS_GENERR;
goto Exit;
}
memcpy( VarBind->value.asnValue.string.stream,
(LPSTR)MibPtr->Storage,
VarBind->value.asnValue.string.length );
VarBind->value.asnValue.string.dynamic = TRUE;
break;
default:
ErrStat = SNMP_ERRORSTATUS_GENERR;
goto Exit;
}
break;
case MIB_ACTION_SET:
// Make sure that this variable's ACCESS is SET'able
if ( MibPtr->Access != MIB_ACCESS_READWRITE &&
MibPtr->Access != MIB_ACCESS_WRITE )
{
ErrStat = SNMP_ERRORSTATUS_NOSUCHNAME;
goto Exit;
}
// Check for proper type before setting
if ( MibPtr->Type != VarBind->value.asnType )
{
ErrStat = SNMP_ERRORSTATUS_BADVALUE;
goto Exit;
}
// Save value in MIB
switch ( VarBind->value.asnType )
{
case ASN_RFC1155_COUNTER:
case ASN_RFC1155_GAUGE:
case ASN_INTEGER:
*(AsnInteger *)(MibPtr->Storage) = VarBind->value.asnValue.number;
break;
case ASN_OCTETSTRING: // This entails ASN_RFC1213_DISPSTRING also
// The storage must be adequate to contain the new string
// including a NULL terminator.
memcpy( (LPSTR)MibPtr->Storage,
VarBind->value.asnValue.string.stream,
VarBind->value.asnValue.string.length );
((LPSTR)MibPtr->Storage)[VarBind->value.asnValue.string.length] =
'\0';
break;
default:
ErrStat = SNMP_ERRORSTATUS_GENERR;
goto Exit;
}
break;
default:
ErrStat = SNMP_ERRORSTATUS_GENERR;
goto Exit;
} // switch
// Signal no error occurred
ErrStat = SNMP_ERRORSTATUS_NOERROR;
Exit:
return ErrStat;
} // MIB_leaf_func
//
// MIB_control_func
// Performs specific actions on the toasterControl MIB variable
//
// Notes:
//
// Return Codes:
// Standard PDU error codes.
//
// Error Codes:
// None.
//
UINT MIB_control_func(
IN UINT Action,
IN MIB_ENTRY *MibPtr,
IN RFC1157VarBind *VarBind
)
{
UINT ErrStat;
switch ( Action )
{
case MIB_ACTION_SET:
// Make sure that this variable's ACCESS is SET'able
if ( MibPtr->Access != MIB_ACCESS_READWRITE &&
MibPtr->Access != MIB_ACCESS_WRITE )
{
ErrStat = SNMP_ERRORSTATUS_NOSUCHNAME;
goto Exit;
}
// Check for proper type before setting
if ( MibPtr->Type != VarBind->value.asnType )
{
ErrStat = SNMP_ERRORSTATUS_BADVALUE;
goto Exit;
}
// Make sure the value is valid
if ( MIB_TOASTER_UP > VarBind->value.asnValue.number ||
MIB_TOASTER_DOWN < VarBind->value.asnValue.number )
{
ErrStat = SNMP_ERRORSTATUS_BADVALUE;
goto Exit;
}
// Let fall through purposefully for further processing by
// generic leaf function.
case MIB_ACTION_GETNEXT:
case MIB_ACTION_GET:
// Call the more generic function to perform the action
ErrStat = MIB_leaf_func( Action, MibPtr, VarBind );
break;
default:
ErrStat = SNMP_ERRORSTATUS_GENERR;
goto Exit;
} // switch
Exit:
return ErrStat;
} // MIB_control_func
//
// MIB_doneness_func
// Performs specific actions on the toasterDoneness MIB variable
//
// Notes:
//
// Return Codes:
// Standard PDU error codes.
//
// Error Codes:
// None.
//
UINT MIB_doneness_func(
IN UINT Action,
IN MIB_ENTRY *MibPtr,
IN RFC1157VarBind *VarBind
)
{
UINT ErrStat;
switch ( Action )
{
case MIB_ACTION_SET:
// Make sure that this variable's ACCESS is SET'able
if ( MibPtr->Access != MIB_ACCESS_READWRITE &&
MibPtr->Access != MIB_ACCESS_WRITE )
{
ErrStat = SNMP_ERRORSTATUS_NOSUCHNAME;
goto Exit;
}
// Check for proper type before setting
if ( MibPtr->Type != VarBind->value.asnType )
{
ErrStat = SNMP_ERRORSTATUS_BADVALUE;
goto Exit;
}
// Make sure the value is valid
if ( MIB_TOASTER_LIGHTLYWARM > VarBind->value.asnValue.number ||
MIB_TOASTER_BURNT < VarBind->value.asnValue.number )
{
ErrStat = SNMP_ERRORSTATUS_BADVALUE;
goto Exit;
}
// Let fall through purposefully for further processing by
// generic leaf function.
case MIB_ACTION_GETNEXT:
case MIB_ACTION_GET:
// Call the more generic function to perform the action
ErrStat = MIB_leaf_func( Action, MibPtr, VarBind );
break;
default:
ErrStat = SNMP_ERRORSTATUS_GENERR;
goto Exit;
} // switch
Exit:
return ErrStat;
} // MIB_doneness_func
//
// MIB_toasttype_func
// Performs specific actions on the toasterToastType MIB variable
//
// Notes:
//
// Return Codes:
// Standard PDU error codes.
//
// Error Codes:
// None.
//
UINT MIB_toasttype_func(
IN UINT Action,
IN MIB_ENTRY *MibPtr,
IN RFC1157VarBind *VarBind
)
{
UINT ErrStat;
switch ( Action )
{
case MIB_ACTION_SET:
// Make sure that this variable's ACCESS is SET'able
if ( MibPtr->Access != MIB_ACCESS_READWRITE &&
MibPtr->Access != MIB_ACCESS_WRITE )
{
ErrStat = SNMP_ERRORSTATUS_NOSUCHNAME;
goto Exit;
}
// Check for proper type before setting
if ( MibPtr->Type != VarBind->value.asnType )
{
ErrStat = SNMP_ERRORSTATUS_BADVALUE;
goto Exit;
}
// Make sure the value is valid
if ( MIB_TOASTER_WHITEBREAD > VarBind->value.asnValue.number ||
MIB_TOASTER_OTHERBREAD < VarBind->value.asnValue.number )
{
ErrStat = SNMP_ERRORSTATUS_BADVALUE;
goto Exit;
}
// Let fall through purposefully for further processing by
// generic leaf function.
case MIB_ACTION_GETNEXT:
case MIB_ACTION_GET:
// Call the more generic function to perform the action
ErrStat = MIB_leaf_func( Action, MibPtr, VarBind );
break;
default:
ErrStat = SNMP_ERRORSTATUS_GENERR;
goto Exit;
} // switch
Exit:
return ErrStat;
} // MIB_toasttype_func
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -