1362 lines
38 KiB
C
1362 lines
38 KiB
C
/*
|
||
* smint.c v0.12 Mar 12 1996
|
||
*
|
||
****************************************************************************
|
||
* *
|
||
* (C) Copyright 1995, 1996 DIGITAL EQUIPMENT CORPORATION *
|
||
* *
|
||
* This software is an unpublished work protected under the *
|
||
* the copyright laws of the United States of America, all *
|
||
* rights reserved. *
|
||
* *
|
||
* In the event this software is licensed for use by the United *
|
||
* States Government, all use, duplication or disclosure by the *
|
||
* United States Government is subject to restrictions as set *
|
||
* forth in either subparagraph (c)(1)(ii) of the Rights in *
|
||
* Technical Data And Computer Software Clause at DFARS *
|
||
* 252.227-7013, or the Commercial Computer Software Restricted *
|
||
* Rights Clause at FAR 52.221-19, whichever is applicable. *
|
||
* *
|
||
****************************************************************************
|
||
*
|
||
* Facility:
|
||
*
|
||
* SNMP Extension Agent
|
||
*
|
||
* Abstract:
|
||
*
|
||
* This module contains the SMI envelopes around the callout to the user's
|
||
* get and set routines.
|
||
*
|
||
* SMIGetInteger
|
||
* SMIGetNSMBoolean
|
||
* SMIGetBIDTEnum
|
||
* SMIGetOctetString
|
||
* SMIGetObjectId
|
||
* SMIGetCounter
|
||
* SMIGetGauge
|
||
* SMIGetTimeTicks
|
||
* SMIGetIpAddress
|
||
* SMIGetDispString
|
||
* SMISetInteger
|
||
* SMISetNSMBoolean
|
||
* SMISetBIDTEnum
|
||
* SMISetOctetString
|
||
* SMISetObjectId
|
||
* SMISetCounter
|
||
* SMISetGauge
|
||
* SMISetTimeTicks
|
||
* SMISetIpAddress
|
||
* SMISetDispString
|
||
* SMIBuildInteger
|
||
* SMIBuildDIDTEnum
|
||
* SMIBuildOctetString
|
||
* SMIBuildObjectId
|
||
* SMIBuildCounter
|
||
* SMIBuildGauge
|
||
* SMIBuildTimeTicks
|
||
* SMIBuildIpAddress
|
||
* SMIBuildDispString
|
||
* SMIFree
|
||
*
|
||
* Author:
|
||
* Wayne Duso, Miriam Amos Nihart, Kathy Faust
|
||
*
|
||
* Date:
|
||
* 2/17/95
|
||
*
|
||
* Revision History:
|
||
* v0.1 Jul 20 95 AGS Added SMIGet/SetBoolean
|
||
* v0.11 Feb 14 1996 AGS changed SMIGet/SetBoolean to SMIGet/SetNSMBoolean
|
||
* v0.12 Mar 12, 1996 KKF set outvalue.length to 256 for SMISetOctetString,
|
||
* SMISetDispString so that instrumentation code knows
|
||
* max length of buffer.
|
||
* v0.13 May 15, 1997 DDB To Microsoft: 6 changes of "malloc" to
|
||
* "SNMP_malloc"
|
||
*/
|
||
|
||
|
||
// Necessary includes.
|
||
|
||
#include <snmp.h>
|
||
#include <stdlib.h>
|
||
#include <malloc.h>
|
||
#include <memory.h>
|
||
#include <string.h>
|
||
|
||
#include "mib.h"
|
||
#include "mib_xtrn.h"
|
||
#include "smint.h" // Wayne's type def file
|
||
|
||
|
||
|
||
/*
|
||
* SMIGetInteger
|
||
*
|
||
* Encompasses the callouts to variables of the data type INTEGER.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMIGetInteger( IN OUT RFC1157VarBind *VarBind , // Variable Binding for get
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
Integer outvalue ;
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarGet )( &outvalue ,
|
||
&access ,
|
||
instance ) ;
|
||
|
||
if ( result == SNMP_ERRORSTATUS_NOERROR )
|
||
{
|
||
VarBind->value.asnType = ASN_INTEGER ;
|
||
VarBind->value.asnValue.number = (AsnInteger)outvalue ;
|
||
}
|
||
return result ;
|
||
|
||
} /* end of SMIGetInteger() */
|
||
|
||
|
||
|
||
/*
|
||
* SMIGetNSMBoolean
|
||
*
|
||
* Encompasses the callouts to variables of the data type Boolean.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
*
|
||
* In SNMPv1 true = 1 AND false = 2
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMIGetNSMBoolean( IN OUT RFC1157VarBind *VarBind , // Variable Binding for get
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
NSM_Boolean outvalue ; // nsm_true = 1, nsm_false = 2
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarGet )( &outvalue ,
|
||
&access ,
|
||
instance ) ;
|
||
|
||
if ( result == SNMP_ERRORSTATUS_NOERROR )
|
||
{
|
||
VarBind->value.asnType = ASN_INTEGER ;
|
||
VarBind->value.asnValue.number = (AsnInteger)outvalue ;
|
||
}
|
||
return result ;
|
||
|
||
} /* end of SMIGetNSMBoolean() */
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMIGetBIDTEnum
|
||
*
|
||
* Encompasses the callouts to variables of the data type INTEGER that
|
||
* are enumerated.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMIGetBIDTEnum( IN OUT RFC1157VarBind *VarBind , // Variable Binding for get
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
BIDT_ENUMERATION outvalue ;
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarGet )( &outvalue ,
|
||
&access ,
|
||
instance ) ;
|
||
|
||
if ( result == SNMP_ERRORSTATUS_NOERROR )
|
||
{
|
||
VarBind->value.asnType = ASN_INTEGER ;
|
||
VarBind->value.asnValue.number = (AsnInteger)outvalue ;
|
||
}
|
||
return result ;
|
||
|
||
} /* end of SMIGetBIDTEnum() */
|
||
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMIGetOctetString
|
||
*
|
||
* Encompasses the callouts to variables of the data type OCTET STRING.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMIGetOctetString( IN OUT RFC1157VarBind *VarBind , // Variable Binding for get
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
OctetString outvalue ;
|
||
char stream[ MAX_OCTET_STRING ] ;
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
outvalue.string = stream ;
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarGet )( &outvalue ,
|
||
&access ,
|
||
instance ) ;
|
||
|
||
if ( result == SNMP_ERRORSTATUS_NOERROR )
|
||
{
|
||
VarBind->value.asnValue.string.length = outvalue.length ;
|
||
VarBind->value.asnValue.string.stream =
|
||
// malloc( outvalue.length * sizeof( char ) ) ;
|
||
// Changed 5/15/97 DDB
|
||
SNMP_malloc( outvalue.length * sizeof( char ) ) ;
|
||
if ( VarBind->value.asnValue.string.stream == NULL )
|
||
result = SNMP_ERRORSTATUS_GENERR ;
|
||
else
|
||
{
|
||
memcpy( VarBind->value.asnValue.string.stream ,
|
||
outvalue.string ,
|
||
outvalue.length ) ;
|
||
VarBind->value.asnType = ASN_OCTETSTRING ;
|
||
VarBind->value.asnValue.string.dynamic = TRUE ;
|
||
}
|
||
}
|
||
return result ;
|
||
|
||
} /* end of SMIGetOctetString() */
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMIGetObjectId
|
||
*
|
||
* Encompasses the callouts to variables of the data type OBJECT IDENTIFIER.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMIGetObjectId( IN OUT RFC1157VarBind *VarBind , // Variable Binding for get
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
UINT status ;
|
||
ObjectIdentifier outvalue ;
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
memset( &outvalue, '\0', sizeof( ObjectIdentifier ) ) ;
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarGet )( &outvalue ,
|
||
&access ,
|
||
instance ) ;
|
||
if ( result == SNMP_ERRORSTATUS_NOERROR )
|
||
{
|
||
status = SNMP_oidcpy( &VarBind->value.asnValue.object, &outvalue ) ;
|
||
if ( !status )
|
||
result = SNMP_ERRORSTATUS_GENERR ;
|
||
else
|
||
{
|
||
if ( outvalue.idLength != 0 )
|
||
SNMP_free( outvalue.ids ) ;
|
||
VarBind->value.asnType = ASN_OBJECTIDENTIFIER ;
|
||
}
|
||
}
|
||
return result ;
|
||
|
||
} /* end of SMIGetObjectId() */
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMIGetCounter
|
||
*
|
||
* Encompasses the callouts to variables of the data type COUNTER.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMIGetCounter( IN OUT RFC1157VarBind *VarBind , // Variable Binding for get
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
Counter outvalue ;
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarGet )( &outvalue ,
|
||
&access ,
|
||
instance ) ;
|
||
if ( result == SNMP_ERRORSTATUS_NOERROR )
|
||
{
|
||
VarBind->value.asnType = ASN_RFC1155_COUNTER ;
|
||
VarBind->value.asnValue.counter = outvalue ;
|
||
}
|
||
return result ;
|
||
|
||
} /* end of SMIGetCounter() */
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMIGetGauge
|
||
*
|
||
* Encompasses the callouts to variables of the data type GAUGE.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMIGetGauge( IN OUT RFC1157VarBind *VarBind , // Variable Binding for get
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
Gauge outvalue ;
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarGet )( &outvalue ,
|
||
&access ,
|
||
instance ) ;
|
||
if ( result == SNMP_ERRORSTATUS_NOERROR )
|
||
{
|
||
VarBind->value.asnType = ASN_RFC1155_GAUGE ;
|
||
VarBind->value.asnValue.gauge = outvalue ;
|
||
}
|
||
return result ;
|
||
|
||
} /* end of SMIGetGauge() */
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMIGetTimeTicks
|
||
*
|
||
* Encompasses the callouts to variables of the data type TIMETICKS.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMIGetTimeTicks( IN OUT RFC1157VarBind *VarBind , // Variable Binding for get
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
TimeTicks outvalue ;
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarGet )( &outvalue ,
|
||
&access ,
|
||
instance ) ;
|
||
if ( result == SNMP_ERRORSTATUS_NOERROR )
|
||
{
|
||
VarBind->value.asnType = ASN_RFC1155_TIMETICKS ;
|
||
VarBind->value.asnValue.ticks = outvalue ;
|
||
}
|
||
return result ;
|
||
|
||
} /* end of SMIGetTimeTicks() */
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMIGetIpAddress
|
||
*
|
||
* Encompasses the callouts to variables of the data type IP ADDRESS.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMIGetIpAddress( IN OUT RFC1157VarBind *VarBind , // Variable Binding for get
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
IpAddress outvalue ;
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarGet )( &outvalue ,
|
||
&access ,
|
||
instance ) ;
|
||
if ( result == SNMP_ERRORSTATUS_NOERROR )
|
||
{
|
||
VarBind->value.asnValue.address.length = 4 ;
|
||
// VarBind->value.asnValue.address.stream = malloc( 4 * sizeof( char ) ) ;
|
||
// Changed 5/15/97 DDB
|
||
VarBind->value.asnValue.address.stream = SNMP_malloc( 4 * sizeof( char ) ) ;
|
||
if ( VarBind->value.asnValue.address.stream == NULL )
|
||
result = SNMP_ERRORSTATUS_GENERR ;
|
||
else
|
||
{
|
||
memcpy( VarBind->value.asnValue.address.stream ,
|
||
(BYTE *)(&outvalue),
|
||
4 ) ;
|
||
VarBind->value.asnType = ASN_RFC1155_IPADDRESS ;
|
||
VarBind->value.asnValue.address.dynamic = TRUE ;
|
||
}
|
||
}
|
||
return result ;
|
||
|
||
} /* end of SMIGetIpAddress() */
|
||
|
||
|
||
|
||
/*
|
||
* SMIGetDispString
|
||
*
|
||
* Encompasses the callouts to variables of the data type DISPLAY STRING.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMIGetDispString( IN OUT RFC1157VarBind *VarBind , // Variable Binding for get
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
Simple_DisplayString outvalue ;
|
||
char stream[ MAX_OCTET_STRING ] ;
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
outvalue.string = stream ;
|
||
outvalue.length = 0 ;
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarGet )( &outvalue ,
|
||
&access ,
|
||
instance ) ;
|
||
if ( result == SNMP_ERRORSTATUS_NOERROR )
|
||
{
|
||
VarBind->value.asnValue.string.length = outvalue.length ;
|
||
VarBind->value.asnValue.string.stream =
|
||
// malloc( outvalue.length * sizeof( char ) ) ;
|
||
// Changed 5/15/97 DDB
|
||
SNMP_malloc( outvalue.length * sizeof( char ) ) ;
|
||
if ( VarBind->value.asnValue.string.stream == NULL )
|
||
result = SNMP_ERRORSTATUS_GENERR ;
|
||
else
|
||
{
|
||
memcpy( VarBind->value.asnValue.string.stream ,
|
||
outvalue.string ,
|
||
VarBind->value.asnValue.string.length ) ;
|
||
VarBind->value.asnType = ASN_RFC1213_DISPSTRING ;
|
||
VarBind->value.asnValue.string.dynamic = TRUE ;
|
||
}
|
||
}
|
||
return result ;
|
||
|
||
} /* end of SMIGetDispString() */
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMISetInteger
|
||
*
|
||
* Encompasses the callouts to variables of the data type INTEGER.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMISetInteger( IN OUT RFC1157VarBind *VarBind , // Variable Binding for set
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
Integer *invalue ;
|
||
Integer outvalue ;
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
invalue = (Integer *)( &VarBind->value.asnValue.number ) ;
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarSet )
|
||
( invalue, &outvalue, &access, instance ) ;
|
||
return result ;
|
||
|
||
} /* end of SMISetInteger() */
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMISetNSMBoolean
|
||
*
|
||
* Encompasses the callouts to variables of the data type Boolean
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
* In SNMPv1 true = 1 AND false = 2
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMISetNSMBoolean( IN OUT RFC1157VarBind *VarBind , // Variable Binding for set
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
NSM_Boolean *invalue ; // nsm_true = 1, nsm_false = 2
|
||
NSM_Boolean outvalue ;
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
invalue = (NSM_Boolean *)( &VarBind->value.asnValue.number ) ;
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarSet )
|
||
( invalue, &outvalue, &access, instance ) ;
|
||
return result ;
|
||
|
||
} /* end of SMISetNSMBoolean() */
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMISetBIDTEmun
|
||
*
|
||
* Encompasses the callouts to variables of the data type INTEGER that
|
||
* is enumerated.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMISetBIDTEnum( IN OUT RFC1157VarBind *VarBind , // Variable Binding for set
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
BIDT_ENUMERATION *invalue ;
|
||
BIDT_ENUMERATION outvalue ;
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
invalue = (BIDT_ENUMERATION *)( &VarBind->value.asnValue.number ) ;
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarSet )
|
||
( invalue, &outvalue, &access, instance ) ;
|
||
return result ;
|
||
|
||
} /* end of SMISetBIDTEnum() */
|
||
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMISetOctetString
|
||
*
|
||
* Encompasses the callouts to variables of the data type OCTET STRING.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMISetOctetString( IN OUT RFC1157VarBind *VarBind , // Variable Binding for set
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
OctetString invalue ;
|
||
OctetString outvalue ;
|
||
char out_stream[ MAX_OCTET_STRING ] ;
|
||
AsnOctetString *tmp ;
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
tmp = &VarBind->value.asnValue.string ;
|
||
invalue.length = tmp->length ;
|
||
invalue.string = tmp->stream ;
|
||
outvalue.string = out_stream ;
|
||
outvalue.length = 256 ;
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarSet )
|
||
( &invalue, &outvalue, &access, instance ) ;
|
||
return result ;
|
||
|
||
} /* end of SMISetOctetString() */
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMISetObjectId
|
||
*
|
||
* Encompasses the callouts to variables of the data type OBJECT IDENTIFIER.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMISetObjectId( IN OUT RFC1157VarBind *VarBind , // Variable Binding for set
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
ObjectIdentifier *invalue ;
|
||
ObjectIdentifier outvalue ;
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
invalue = &VarBind->value.asnValue.object ;
|
||
memset( &outvalue, '\0', sizeof ( ObjectIdentifier ) ) ;
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarSet )
|
||
( invalue, &outvalue, &access, instance ) ;
|
||
if ( outvalue.idLength != 0 )
|
||
SNMP_free( outvalue.ids ) ;
|
||
|
||
return result ;
|
||
|
||
} /* end of SMISetObjectId() */
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMISetCounter
|
||
*
|
||
* Encompasses the callouts to variables of the data type COUNTER.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMISetCounter( IN OUT RFC1157VarBind *VarBind , // Variable Binding for set
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
Counter *invalue ;
|
||
Counter outvalue ;
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
invalue = (Counter *)( &VarBind->value.asnValue.counter ) ;
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarSet )
|
||
( invalue, &outvalue, &access, instance ) ;
|
||
return result ;
|
||
|
||
} /* end of SMISetCounter() */
|
||
|
||
|
||
|
||
/*
|
||
* SMISetGauge
|
||
*
|
||
* Encompasses the callouts to variables of the data type GAUGE.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMISetGauge( IN OUT RFC1157VarBind *VarBind , // Variable Binding for set
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
Gauge *invalue ;
|
||
Gauge outvalue ;
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
invalue = (Gauge *)( &VarBind->value.asnValue.gauge ) ;
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarSet )
|
||
( invalue, &outvalue, &access, instance ) ;
|
||
return result ;
|
||
|
||
} /* end of SMISetGauge() */
|
||
|
||
|
||
|
||
/*
|
||
* SMISetTimeTicks
|
||
*
|
||
* Encompasses the callouts to variables of the data type TIMETICKS.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMISetTimeTicks( IN OUT RFC1157VarBind *VarBind , // Variable Binding for set
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
TimeTicks *invalue ;
|
||
TimeTicks outvalue ;
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
invalue = (TimeTicks *)( &VarBind->value.asnValue.ticks ) ;
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarSet )
|
||
( invalue , &outvalue, &access, instance ) ;
|
||
return result ;
|
||
|
||
} /* end of SMISetTimeTicks() */
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMISetIpAddress
|
||
*
|
||
* Encompasses the callouts to variables of the data type IP ADDRESS.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMISetIpAddress( IN OUT RFC1157VarBind *VarBind , // Variable Binding for set
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
IpAddress invalue ;
|
||
IpAddress outvalue ;
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
memcpy( &invalue, VarBind->value.asnValue.address.stream , 4 ) ;
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarSet )
|
||
( &invalue, &outvalue, &access, instance ) ;
|
||
return result ;
|
||
|
||
} /* end of SMISetIpAddress() */
|
||
|
||
|
||
|
||
/*
|
||
* SMISetDispString
|
||
*
|
||
* Encompasses the callouts to variables of the data type DISPLAY STRING.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* cindex index to the class of the request
|
||
* vindex index to the variable of the request
|
||
* instance address of the instance specification in the
|
||
* form of ordered native datatypes
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMISetDispString( IN OUT RFC1157VarBind *VarBind , // Variable Binding for set
|
||
IN unsigned long int cindex ,
|
||
IN unsigned long int vindex ,
|
||
IN InstanceName *instance )
|
||
{
|
||
UINT result = SNMP_ERRORSTATUS_NOERROR ;
|
||
Simple_DisplayString invalue ;
|
||
Simple_DisplayString outvalue ;
|
||
char out_stream[ MAX_OCTET_STRING ] ;
|
||
AsnOctetString *tmp ;
|
||
Access_Credential access ; // dummy holder for future use
|
||
|
||
tmp = &VarBind->value.asnValue.string ;
|
||
invalue.length = tmp->length ;
|
||
invalue.string = tmp->stream ;
|
||
outvalue.string = out_stream ;
|
||
outvalue.length = 256 ;
|
||
result = ( *class_info[ cindex ].variable[ vindex ].VarSet )
|
||
( &invalue, &outvalue, &access, instance ) ;
|
||
return result ;
|
||
|
||
} /* end of SMISetDispString() */
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMIBuildInteger
|
||
*
|
||
* Places the variable of datatype INTEGER into a Variable Binding.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* invalue address of the data
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMIBuildInteger( IN OUT RFC1157VarBind *VarBind ,
|
||
IN char *invalue )
|
||
|
||
{
|
||
Integer *svalue = (Integer *)invalue ;
|
||
VarBind->value.asnType = ASN_INTEGER ;
|
||
VarBind->value.asnValue.number = *svalue ;
|
||
|
||
return SNMP_ERRORSTATUS_NOERROR ;
|
||
|
||
} /* end of SMIBuildInteger() */
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMIBuildOctetString
|
||
*
|
||
* Places the variable of datatype OCTET STRING into a Variable Binding.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* invalue address of the data
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMIBuildOctetString( IN OUT RFC1157VarBind *VarBind ,
|
||
IN char *invalue )
|
||
|
||
{
|
||
OctetString *svalue = (OctetString *)invalue ;
|
||
|
||
UINT status = SNMP_ERRORSTATUS_NOERROR ;
|
||
|
||
VarBind->value.asnValue.string.length = svalue->length ;
|
||
VarBind->value.asnValue.string.stream =
|
||
// malloc( svalue->length * sizeof( char ) ) ;
|
||
// Changed 5/15/97 DDB
|
||
SNMP_malloc( svalue->length * sizeof( char ) ) ;
|
||
if ( VarBind->value.asnValue.string.stream == NULL )
|
||
status = SNMP_ERRORSTATUS_GENERR ;
|
||
else
|
||
{
|
||
memcpy( VarBind->value.asnValue.string.stream ,
|
||
svalue->string ,
|
||
svalue->length ) ;
|
||
VarBind->value.asnType = ASN_OCTETSTRING ;
|
||
VarBind->value.asnValue.string.dynamic = TRUE ;
|
||
}
|
||
return status ;
|
||
|
||
} /* end of SMIBuildOctetString() */
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMIBuildObjectId
|
||
*
|
||
* Places the variable of datatype OBJECT IDENTIFIER into a Variable Binding.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* invalue address of the data
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMIBuildObjectId( IN OUT RFC1157VarBind *VarBind ,
|
||
IN char *invalue )
|
||
|
||
|
||
{
|
||
ObjectIdentifier *svalue = (ObjectIdentifier *)invalue ;
|
||
UINT status = SNMP_ERRORSTATUS_NOERROR ;
|
||
UINT sts = TRUE ;
|
||
|
||
sts = SNMP_oidcpy( &VarBind->value.asnValue.object ,
|
||
(AsnObjectIdentifier *)svalue ) ;
|
||
if ( !sts )
|
||
status = SNMP_ERRORSTATUS_GENERR ;
|
||
else
|
||
VarBind->value.asnType = ASN_OBJECTIDENTIFIER ;
|
||
|
||
return status ;
|
||
|
||
} /* end of SMIBuildObjectId() */
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMIBuildCounter
|
||
*
|
||
* Places the variable of datatype COUNTER into a Variable Binding.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* invalue address of the data
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMIBuildCounter( IN OUT RFC1157VarBind *VarBind ,
|
||
IN char *invalue )
|
||
|
||
{
|
||
Counter *svalue = (Counter *)invalue ;
|
||
VarBind->value.asnType = ASN_RFC1155_COUNTER ;
|
||
VarBind->value.asnValue.counter = *svalue ;
|
||
|
||
return SNMP_ERRORSTATUS_NOERROR ;
|
||
|
||
} /* end of SMIBuildCounter() */
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMIBuildGauge
|
||
*
|
||
* Places the variable of datatype GAUGE into a Variable Binding.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* svalue address of the data
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMIBuildGauge( IN OUT RFC1157VarBind *VarBind ,
|
||
IN char *invalue )
|
||
|
||
{
|
||
Gauge *svalue = (Gauge *)invalue ;
|
||
VarBind->value.asnType = ASN_RFC1155_GAUGE ;
|
||
VarBind->value.asnValue.gauge = *svalue ;
|
||
|
||
return SNMP_ERRORSTATUS_NOERROR ;
|
||
|
||
} /* end of SMIBuildGauge() */
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMIBuildTimeTicks
|
||
*
|
||
* Places the variable of datatype TIME TICKS into a Variable Binding.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* invalue address of the data
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMIBuildTimeTicks( IN OUT RFC1157VarBind *VarBind ,
|
||
IN char *invalue )
|
||
|
||
{
|
||
TimeTicks *svalue = (TimeTicks *)invalue ;
|
||
VarBind->value.asnType = ASN_RFC1155_TIMETICKS ;
|
||
VarBind->value.asnValue.ticks = *svalue ;
|
||
|
||
return SNMP_ERRORSTATUS_NOERROR ;
|
||
|
||
} /* end of SMIBuildTimeTicks() */
|
||
|
||
|
||
|
||
|
||
/*
|
||
* SMIBuildIpAddress
|
||
*
|
||
* Places the variable of datatype IpAddress into a Variable Binding.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* invalue address of the data
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMIBuildIpAddress( IN OUT RFC1157VarBind *VarBind ,
|
||
IN char *invalue )
|
||
|
||
{
|
||
IpAddress *svalue = (IpAddress *)invalue;
|
||
UINT status = SNMP_ERRORSTATUS_NOERROR ;
|
||
|
||
VarBind->value.asnValue.address.length = 4 ;
|
||
// VarBind->value.asnValue.address.stream = malloc( 4 * sizeof( char ) ) ;
|
||
// Changed 5/15/97 DDB
|
||
VarBind->value.asnValue.address.stream = SNMP_malloc( 4 * sizeof( char ) ) ;
|
||
if ( VarBind->value.asnValue.address.stream == NULL )
|
||
status = SNMP_ERRORSTATUS_GENERR ;
|
||
else
|
||
{
|
||
memcpy( VarBind->value.asnValue.address.stream, (BYTE *)svalue, 4 ) ;
|
||
VarBind->value.asnType = ASN_RFC1155_IPADDRESS ;
|
||
VarBind->value.asnValue.address.dynamic = TRUE ;
|
||
}
|
||
return status ;
|
||
|
||
} /* end of SMIBuildIpAddress() */
|
||
|
||
|
||
|
||
/*
|
||
* SMIBuildDispString
|
||
*
|
||
* Places the variable of datatype DISPLAY STRING into a Variable Binding.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* VarBind pointer to the variable value pair
|
||
* invalue address of the data
|
||
*
|
||
* Return Codes:
|
||
*
|
||
* Standard PDU error codes.
|
||
*
|
||
*/
|
||
|
||
UINT
|
||
SMIBuildDispString( IN OUT RFC1157VarBind *VarBind ,
|
||
IN char *invalue )
|
||
|
||
{
|
||
Simple_DisplayString *svalue = (Simple_DisplayString *)invalue;
|
||
UINT status = SNMP_ERRORSTATUS_NOERROR ;
|
||
|
||
VarBind->value.asnValue.string.length = svalue->length ;
|
||
VarBind->value.asnValue.string.stream =
|
||
// malloc( VarBind->value.asnValue.string.length * sizeof( char ) ) ;
|
||
// Changed 5/15/97 DDB
|
||
SNMP_malloc( VarBind->value.asnValue.string.length * sizeof( char ) ) ;
|
||
if ( VarBind->value.asnValue.string.stream == NULL )
|
||
status = SNMP_ERRORSTATUS_GENERR ;
|
||
else
|
||
{
|
||
memcpy( VarBind->value.asnValue.string.stream ,
|
||
svalue->string ,
|
||
VarBind->value.asnValue.string.length ) ;
|
||
VarBind->value.asnType = ASN_RFC1213_DISPSTRING ;
|
||
VarBind->value.asnValue.string.dynamic = TRUE ;
|
||
}
|
||
return status ;
|
||
|
||
} /* end of SMIBuildDispString() */
|
||
|
||
/* end of smi.c */
|
||
|
||
|
||
/* SMIFree
|
||
*
|
||
* Free the variable
|
||
*
|
||
* Arguments:
|
||
*
|
||
* invalue address of data
|
||
*
|
||
* Return Codes:
|
||
*
|
||
*
|
||
*/
|
||
|
||
void
|
||
SMIFree( IN AsnAny *invalue )
|
||
|
||
{
|
||
switch (invalue->asnType) {
|
||
|
||
case ASN_OCTETSTRING:
|
||
case ASN_RFC1155_IPADDRESS:
|
||
if (invalue->asnValue.string.length != 0) {
|
||
invalue->asnValue.string.length = 0 ;
|
||
free(invalue->asnValue.string.stream) ;
|
||
}
|
||
break;
|
||
|
||
case ASN_OBJECTIDENTIFIER:
|
||
if (invalue->asnValue.object.idLength != 0)
|
||
SNMP_free(invalue->asnValue.object.ids) ;
|
||
break ;
|
||
|
||
default:
|
||
break ;
|
||
}
|
||
} /* end of SMIFree */
|
||
|
||
/* end of smi.c */
|
||
|