基于TCP/IP网络的管理结构和标记( 四 )


可以使用OBJECT-TYPE宏来处理MIB中的定义 。这个宏答应一个对象类型的主要访问采取统一的表示方式 。
OBJECT-TYPEMACRO::=
BEGIN
TYPENOTATION::="SYNTAX"type(TYPEObjectSyntax)
"ACCESS"Access
"STATUS"Status
VALUENOTATION::=value(VALUEObjectName)
Access::="read-only"
"read-write"
"write-only"
"not-accessible"
Status::="mandatory"
"optional"
"obsolete"
END
根据上面定义的对象类型,我们可以看到下面定义在MIB中的定义:
atIndexOBJECT-TYPE
SYNTAXINTEGER
ACCESSread-write
STATUSmandatory
::={atEntry1}
atPhysAddressOBJECT-TYPE
SYNTAXOCTETSTRING
ACCESSread-write
STATUSmandatory
::={atEntry2}
atNetAddressOBJECT-TYPE
SYNTAXNetworkAddress
ACCESSread-write
STATUSmandatory
::={atEntry3}
atEntryOBJECT-TYPE
SYNTAXAtEntry
ACCESSread-write
STATUSmandatory
::={atTable1}
atTableOBJECT-TYPE
SYNTAXSEQUENCEOFAtEntry
ACCESSread-write
STATUSmandatory
::={at1}
AtEntry::=SEQUENCE{
atIndex
INTEGER,
atPhysAddress
OCTETSTRING,
atNetAddress
NetworkAddress
}
5.MIB扩展
每个Internet标准MIB文档都将前面文档标记为过时的 。在下面标记处标记的名字是在改变版本时没有进行过改变的:
{mgmtversion-number}
新版本可以会
(1)公布老的对象类型过时,但不删除它们的名字;
(2)通过添加非集合对象类型到列表(list)中对象类型而扩展一个对象类型的定义;
(3)要么就索性定义新的对象 。
新版本不能在未改变对象名字的情况下改变对象的语义 。这样就保证了相同的名字在不同的版本下会有相同的语义,这样在实现起来就比较方便 。
但是,治理代表可能会返回一个对象,它是需要对象的一个超集 。考虑到健壮性,治理程序应该忽略掉这些附加信息 。但是我们要注重:假如一个实例没有和希望的对象类型相同的语法,控制将会失败 。在监视和控制的情况下,由一个操作返回的对象名必须和操作要求的对象名一致 。
6.定义
RFC1155-SMIDEFINITIONS::=BEGIN
EXPORTS--EVERYTHING
internet,directory,mgmt,
experimental,private,enterprises,
OBJECT-TYPE,ObjectName,ObjectSyntax,SimpleSyntax,
ApplicationSyntax,NetworkAddress,IpAddress,
Counter,Gauge,TimeTicks,Opaque;
--thepathtotheroot
internetOBJECTIDENTIFIER::={isoorg(3)dod(6)1}
directoryOBJECTIDENTIFIER::={internet1}
mgmtOBJECTIDENTIFIER::={internet2}
experimentalOBJECTIDENTIFIER::={internet3}
privateOBJECTIDENTIFIER::={internet4}
enterprisesOBJECTIDENTIFIER::={private1}
--definitionofobjecttypes
OBJECT-TYPEMACRO::=
BEGIN
TYPENOTATION::="SYNTAX"type(TYPEObjectSyntax)
"ACCESS"Access
"STATUS"Status
VALUENOTATION::=value(VALUEObjectName)
Access::="read-only"
"read-write"
"write-only"
"not-accessible"
Status::="mandatory"
"optional"
"obsolete"
END
--namesofobjectsintheMIB
ObjectName::=
OBJECTIDENTIFIER
--syntaxofobjectsintheMIB
ObjectSyntax::=
CHOICE{
simple
SimpleSyntax,
--notethatsimpleSEQUENCEsarenotdirectly
--mentionedheretokeepthingssimple(i.e.,
--preventmis-use).However,application-wide
--typeswhichareIMPLICITlyencodedsimple
--SEQUENCEsMayappearinthefollowingCHOICE
application-wide
ApplicationSyntax
}
SimpleSyntax::=
CHOICE{
number
INTEGER,
string
OCTETSTRING,
object
OBJECTIDENTIFIER,
empty
NULL
}
ApplicationSyntax::=
CHOICE{
address

推荐阅读