本章我们依然从如何定义MIB的视角来讲述SMI。SMI作为SNMP从ASN.1提取的子集,包含的内容有:定义MIB的数据类型和语法、为MIB中的管理对象分配OID空间。在SNMP中,为了方便对象的定义、模块的组织以及为了说明管理对象实现的特性,定义了很多宏、文本约定。这都是SNMP中特有的内容,都需要我们去掌握,并懂得如何使用。
由于SMI有两个版本,且在使用SMI时有很多需要注意的细节。本章尽量将两个版本的内容结合在一起讲述,并列出差异和注意细节,以方便读者快速理解。SMIv2是SMIv1的改进版本,两者在宏和数据类型方面还是有较多差异的,如SMIv2中的MAX-ACCESS和SMIv1中的ACCESS。
所以,如果考虑将原SMIv1版本的MIB升级到SMIv2版的MIB需要仔细地考虑转换细节。如果有这方面的需求,建议读者能进一步阅读SMI的RFC文档。SMIv1包括RFC1155(SMIv1、OBJECT-TYPE)、RFC1212(OBJECT-TYPE重定义)、RFC1215(TRAP-TYPE宏);SMIv2包括RFC2578(SMIv2)、RFC2579(文本约定)、RFC2580(一致性陈述)。各SNMP版本间的差异和转换规则可以参考RFC2576。
我们使用最多的宏莫过于OBJECT-TYPE,使用它定义管理对象时,可以添加很多额外的信息,正是因为这些信息,不仅使得该管理对象有个清晰的文档描述,也有助于NMS了解Agent中管理对象的详细信息,这些信息有助于指导NMS的具体软件实现。
如果是新定义MIB,建议直接使用SMIv2版本,同时禁止在SMIv2的信息模块中使用SMIv1中的宏。