SNMP SMI语法与书写MIB文件

摘要

本章讲述SNMP SMI的语法部分,如何编写MIB文件。参考RFC1902和RFC1903

一、SMI下的宏的类型

MODULE-IDENTITY
该宏用于提供每个MIB模块的信息,例如更新时间,开发组织信息联系等。
OBJECT-IDENTITY
该宏用于定义有关对象描述符分配的信息,即是OID(节点的唯一标识)
OBJECT-TYPE
该宏用于定义管理节点,实际管理的对象
NOTIFICATION-TYPE
该宏用于定义主动传输信息的节点,用于snmp trap(设备发生某些异常主动通知到管理站)或者InformRequest
上述宏的调用格式为:
<描述符号> <宏> <参数> ::= OID
例如

firstDescriptor OBJECT-IDENTITY
    STATUS  current
    DESCRIPTION
      “first OBJECT-IDENTITY”
   ::= {previousNode 1}

对号入座的话就是:
<描述符号> ------ firstDescriptor
<宏> ----------------OBJECT-IDENTITY
<参数>--------------STATUS DESCRIPTION
OID ------------------{previousNode 1}
TEXTUAL-CONVENTION
该宏用于自定义数据类型,在原有数据类型基础上,进行封装定义。
宏调用格式为:
<自定义类型> ::= <宏> <参数>
例如:

 myFirstType ::= TEXTUAL-CONVENTION
      STATUS    current
      DESCRIPTION 
                “my user-defined date type”
      SYNTAX   INTEGER(1-5)

这样就定义了一个数据类型myFirstType ,默认取值范围早1-5之间
具体的书写说明下面会介绍

二、SMI下的数据类型

Integer32
32位有符号整型数。
INTEGER
32位有符号整型数,与Integer32不同的是,该类型可以自定义范围和枚举类型。
对于枚举类型的标签不能含有下划线,以小写字符开头,最好不超过32个字符。
例如:

INTEGER(1-5)
INTEGER{
   one(1),
   two(2)
}

OCTET STRING
八进制字符串,用于表示任意文本数据或者二进制,不能超过256字节
Counter32
32位计数类型,非负整数。单调递增,对于该类型的节点的MAX-ACCESS访问权限只能是read-only或者accessible-for-notify,不能使用DEFVAL
Counter64
64位计数类型,非负整数。单调递增,对于该类型的节点的MAX-ACCESS访问权限只能是read-only或者accessible-for-notify,不能使用DEFVAL
Unsigned32
32位无符号整型数据。
OBJECT IDENIFIER
对象标识符,也就是OID
TimeTicks
时间戳类型,一般用于计算系统使用时间。
Gauge32
32位无符号整型,可增可减
IpAddress
IP地址类型,表示一个32位的4字节IP地址,网络字节序排序
Opaque
不透明类型,可以用于传递任意编码格式的字符串
The BITS construct
命名位枚举类型,非负整数。
Table
表格类型定义为SEQUENCE OF EntryType
列表类型定义为
SEQUENCE**,列表类型属于表
下面会进行举例。
上面是RFC1902定义的数据类型,在RFC1903中通过自定义定义了其他数据类型,也很常用,后面后补充。

三、宏类型的参数

MODULE-IDENTITY

LAST-UPDATED:最后更新时间,日期格式为UTC格式
ORGANIZATION:对开发组织的描述
CONTACT-INFO:组织的联系信息
DESCRIPTION:对该模块的高级描述
REVERSION:修订版本(不一定出现)
DESCRIPTION:对REVERSION的描述

OBJECT-IDENTITY

STATUS:表示状态,包括current(当前的即可使用的),obsolete(过时的),deprecated(废弃的,保留了与旧实现的互操作性)
DESCRIPTION:描述,对定义的描述符号进行说明

OBJECT-TYPE

== SYNTAX==:描述符号的数据类型,包括上述所描述的,外部导入和自定义的
UINTS:非必要参数,包含对该对象关联的单位说明
MAX-ACCESS:访问权限,包括read-write(可读可修改),read-create(可读可修改可创建),read-only(只读),not-accessible(用于辅助对象,例如表格),accessible-for-notify(用于通知访问的对象)
STATUS:状态,包括current(当前的即可使用的),obsolete(过时的,不再使用),deprecated(废弃的,保留了与旧实现的互操作性)
DESCRIPTION:对定义的描述符号进行说明
REFERENCE:非必要参数,包含对其他mib模块中定义的对象的文本交叉引用
INDEX:用于列表类型中,和AUGMENT互斥,在列表定义中只能使用一个参数。INDEX指定列表中的“主键”,可包含一个或多个,可以是整型,字符串类型,IP地址类型以及对象标识符(OID)
AUGMENT:与INDEX类似,但是有区别,只有一个“主键”时,应该使用AUGMENT参数等
DEFVAL:默认值,指定可接受的默认值。

NOTIFICATION-TYPE

OBJECTS:非必要参数,定义了包含在通知的每个实例中MIB对象类型的有序序列
STATUS:状态,包括current(当前的即可使用的),obsolete(过时的,不再使用),deprecated(废弃的,保留了与旧实现的互操作性)
*DESCRIPTION*:描述信息
REFERENCE:非必要参数,包含对其他mib模块中定义的对象的文本交叉引用

TEXTUAL-CONVENTION

DISPLAY-HINT:显示设置,存在使用INTEGER或OCTET STRING类型中。分为两部分,第一部分为显示的数据进制类型,x–十六进制,d–十进制,o–八进制,b–二进制,后面跟着“-”,在后面是十进制数据表示显示时隐含的小数点。例如:

Hundredths ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d-2"
    ...
    SYNTAX     INTEGER (0..10000)

表示如果是1234显示为12.34
STATUS:状态,包括current(当前的即可使用的),obsolete(过时的),deprecated(废弃的,保留了与旧实现的互操作性)
DESCRIPTION:描述信息
REFERENCE:非必要参数,包含对其他mib模块中定义的对象的文本交叉引用
SYNTAX:数据类型,只能值上述定义的类型

四、MIB文件的书写

说明:
1、MIB文件的开头 DEFINITIONS ::= BEGIN
MIB文件的结束END
2、IMPORTS,从别的MIB中导入其他类型
3、MIB文件的注释用–(两个“-”)
4、注意table的定义,一个table定义包括table节点,Entry节点以及其他的列表节点
5、各个参数的顺序要严格按照上面列举的顺序,非必要包括的可以不写,否则编译出错
6、并不是一个MIB文件要包括所有的宏,基本的要有MODULE-IDENTITY,OBJECT-IDENTITY,OBJECT-TYPE
6、测试和编译软件MG-SOFT Mib Browser
文件

TEST-MIB DEFINITIONS ::= BEGIN

IMPORTS 
   MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
   enterprises, IpAddress, Integer32, Unsigned32, TimeTicks   
                                                  FROM SNMPv2-SMI                                                                                              
   TEXTUAL-CONVENTION,RowStatus                  FROM SNMPv2-TC; 

--   start MODULE-IDENTITY
firstModuleIdentity  MODULE-IDENTITY
    LAST-UPDATED  "20200910154855Z"
    ORGANIZATION  "Kuaisen"
    CONTACT-INFO  "12345678901"
    DESCRIPTION  
               "The MIB Module for testing smi"
    REVISION  "20200910154855Z"
    DESCRIPTION 
              "lasted updated revision"
    ::= {enterprises 2}

-- end MODULE-IDENTITY

-- start TEXTUAL-CONVENTION
MyFirstType ::= TEXTUAL-CONVENTION
    STATUS    current
    DESCRIPTION 
              "my user-defined date type"
    SYNTAX   INTEGER(1..5)
-- end TEXTUAL-CONVENTION

-- start OBJECT-IDENTITY
firstObjectIdentity  OBJECT-IDENTITY
    STATUS  current
    DESCRIPTION
            "The object identity used to test"
    ::= {firstModuleIdentity  1}

firstObjectTypeForInteger  OBJECT-TYPE
    SYNTAX  INTEGER{
	           one(1),
			   two(2)
	        }
	MAX-ACCESS read-write
	STATUS  current
	DESCRIPTION 
	         "The object type used to test"
	DEFVAL  {one}
    ::= {firstObjectIdentity 1}

secondObjectTypeForOctetString  OBJECT-TYPE
    SYNTAX  OCTET STRING
	MAX-ACCESS read-write
	STATUS  current
	DESCRIPTION 
	         "The object type used to test"
    ::= {firstObjectIdentity 2}
-- start table
firstObjectTypeForTable  OBJECT-TYPE
    SYNTAX  SEQUENCE OF FirstObjectSettings
	MAX-ACCESS not-accessible
	STATUS  current
	DESCRIPTION 
	         "The object type used to test"
    ::= {firstObjectIdentity 3}

firstObjectTypeForEntry  OBJECT-TYPE
    SYNTAX  FirstObjectSettings
	MAX-ACCESS not-accessible
	STATUS  current
	DESCRIPTION
		         "The object type used to test"
    INDEX {firstTableIndex}
    ::= {firstObjectTypeForTable 1}

FirstObjectSettings ::= 
    SEQUENCE{
	    firstTableIndex  INTEGER,
		otherTableType  OCTET STRING,
		tableRowStatus  RowStatus
	}

firstTableIndex  OBJECT-TYPE
    SYNTAX  INTEGER
	MAX-ACCESS read-only
	STATUS  current
	DESCRIPTION 
	         "The object type used to test"
    ::= {firstObjectTypeForEntry 1}

otherTableType  OBJECT-TYPE
    SYNTAX  OCTET STRING
	MAX-ACCESS read-write
	STATUS  current
	DESCRIPTION
	         "The object type used to test"
    ::= {firstObjectTypeForEntry 2}

tableRowStatus  OBJECT-TYPE
    SYNTAX  RowStatus
	MAX-ACCESS read-write
	STATUS  current
	DESCRIPTION
	         "The object type used to test"
    ::= {firstObjectTypeForEntry 3}
-- end Table
-- end OBJECT-TYPE
-- start trap 
firstTrapType  NOTIFICATION-TYPE
    STATUS  current
    DESCRIPTION "first test snmp trap"
    ::= {firstObjectIdentity 4}
-- end trap
END

mib test
上图生成的MIB Tree中,各个节点OID如下:

firstModuleIdentity:1.3.6.1.4.1.2
firstObjectIdentity:1.3.6.1.4.1.2.1
firstObjectTypeForInteger:1.3.6.1.4.1.2.1.1
secondObjectTypeForOctetString:1.3.6.1.4.1.2.1.2
firstObjectTypeForTable:1.3.6.1.4.1.2.1.3
firstObjectTypeForEntry:1.3.6.1.4.1.2.1.3.1
firstTableIndex:1.3.6.1.4.1.2.1.3.1.1
otherTableType:1.3.6.1.4.1.2.1.3.1.2
tableRowStatus:1.3.6.1.4.1.2.1.3.1.3
firstTrapType:1.3.6.1.4.1.2.1.4
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值