MIB文件是什么呢?MIB是管理信息的集合,也是被管理对象的集合,是MIB开发人员根据业务的需求或者网络管理标准的要求,按照约定的组织规则,定义语法编写的文本文件。Agent与NMS通过SNMP协议进行信息互换,而MIB文件则是Agent与NMS进行沟通的桥梁,可以使网管软件与被管理设备进行标准对接,每个Agent都维护一个MIB库,NMS通过SNMP可以读取并设置MIB库中的对象。
每个MIB中的管理对象都应该清晰地描述该对象的属性,包括名字、描述、数据类型等内容。这些属性的内容能够通过对象的唯一标识OID,被通信双方识别。这也就应征了MIB是NMS与Agent相互沟通的桥梁,只有Agent实现了MIB,NMS认识该MIB,两者才能正确配合实现相应管理功能。
MIB文件常见宏定义描述:
实例:
IPC-SNMP-MIB DEFINITIONS ::= BEGIN
IMPORTS
TEXTUAL-CONVENTION, DisplayString, TruthValue, RowStatus
FROM SNMPv2-TC
OBJECT-TYPE, NOTIFICATION-TYPE, MODULE-IDENTITY, Integer32, Opaque, enterprises, TimeTicks, IpAddress
FROM SNMPv2-SMI;
IPC-SNMP-MIB:代表定义了一个名为IPC-SNMP-MIB的MIB。
DEFINITIONS ::= BEGIN à 指明了MIB文件的开始,它标志着从此处开始定义MIB的各种对象、数据类型和通知等信息。MIB文件中的每个MIB都必须以这个标记开始,它告诉MIB解析器在此处开始对MIB的内容进行解析和处理。通过定义的各种对象和数据类型,MIB文件可以提供对特定设备或系统的管理信息进行获取、监控和控制的功能。
IMPORTS关键字:在MIB文件中引入其他MIB模块中定义的对象、数据类型和通知等信息。通过使用IMPORTS关键字,可以将其他MIB模块中定义的对象和数据类型引入到当前MIB中,使得当前MIB可以使用这些引入的定义来描述和定义自己的管理信息。使用IMPORTS关键字时,需要指定被引入的MIB模块名和所引入的符号名称,从而在当前MIB中可以使用这些引入的符号。通过IMPORTS关键字,可以实现MIB模块之间的模块复用和信息共享。
TEXTUAL-CONVENTION:用于定义自定义的数据类型。它的作用是为常见的数据类型提供更具可读性和可理解性的标记,从而使管理信息更易于阅读和解释。通过定义TEXTUAL-CONVENTION,可以创建新的数据类型,并在MIB文件中引用和使用这些自定义类型。也可引用已经定义的其他数据类型,以便在新的数据类型中重用现有的定义。这种引用关系允许在新数据类型中包含其他数据类型的限制和语义,从而更灵活地定义新的数据类型。
FROM关键字:用于在MIB文件中指定引用的MIB模块。它确定了所引用的标识符(对象标识符、数据类型、通知等)所在的MIB模块,从而在当前MIB中可以使用该引用。通过使用FROM关键字,MIB文件可以在当前MIB之外使用已定义的标识符。
OBJECT-TYPE:用于描述和定义管理信息对象的关键字。通过定义对象的标识符、数据类型、访问权限等属性,来描述管理信息对象的各个方面。OBJECT-TYPE用于指定对象的属性和行为,使管理系统可以对这些对象进行有效的管理和操作。
MODULE-IDENTITY(模块标识符) à 该定义添加了一个公共的标示段来对整个信息描述块进行顶层的文字描述,声明MIB模块的一些基本信息,包括模块的名称、版本、描述、作者、联系方式等。这有助于用户和开发人员了解和理解该MIB模块的目的、功能和相关信息,以加强对管理MIB描述块的文档管理和控制,每个MIB定义中都会有该定义。
示例:
device MODULE-IDENTITY
LAST-UPDATED "201405101112Z"
ORGANIZATION "Organization"
CONTACT-INFO "
Author : NetWork Team
Phone :
Email :
Address :
Postalcode : "
DESCRIPTION "add OID: capabilityInfo, encodeCapability, location, deviceUpTime , systemStatus , systemTime, mainStreamCapabilityInfo, extraStreamCapabilityInfo"
REVISION "201501191112Z"
DESCRIPTION "add OID: evsEvent , netMonitorAbortEvent , volumeGroupFaultEvent, nasServerStatusEvent, serverName"
REVISION "201412041112Z"
DESCRIPTION "add OID: recordConfig , recordPlanInfo , recordMainStreamInfoTable, recordExtraStreamInfoTable, physicalVolumeTotal, physicalVolumeFree,
recordEvent, recordMainStreamEvent, recordExtraStreamEvent, snmpStatusEvent, snmpStatus, physicalVolumeThreshold"
REVISION "201404281112Z"
DESCRIPTION "add OID: cpuUsage, lastestEvent, storageInfo, physicalVolume, raidVolume, storageFailureEvent,
storageFailureEvent, storageLowSpaceEvent, storageInOutEvent, storageSMARTAbnormityEvent"
REVISION "201402141112Z"
DESCRIPTION " add OID : generalSnmpTrap, videoMotionEvent, videoBlindEvent, videoLossEvent, localAlarmEvent, action, currentTime"
REVISION "201401071427Z"
DESCRIPTION "This file defines the private IPC SNMP MIB extensions for all the device."
::= { common 2 }
OBJECT-IDENTIFIFIER(对象标识符) à 通过OBJECT-IDENTIFIER,可以为每个MIB对象分配一个唯一的标识符(OID),用于区分不同的MIB对象。这样,在管理系统中就能够准确识别和引用指定的MIB对象。
定义格式:objectname OBJECT IDENTIFIER ::= { parent number }
关键字 | 含义 | 备注 |
objectname | 被管理对象的名字 | 必须以小写字母开头 |
OBJECT IDENTIFIER | 每一个叶子对象所必须的关键字 | 固定格式 |
parent | 父节点 | 该节点的父节点 |
number | 数组OID | 该节点对应数字 |
示例:
common OBJECT IDENTIFIER ::= { 1 3 6 1 4 1 1004849}
systemInfo OBJECT IDENTIFIER ::= { device 1 }
versionInfo OBJECT IDENTIFIER ::= { systemInfo 1 }
productInfo OBJECT IDENTIFIER ::= { systemInfo 2 }
networkInfo OBJECT IDENTIFIER ::= { device 2 }
networkPort OBJECT IDENTIFIER ::= { networkInfo 1 }
tcpIpInfo OBJECT IDENTIFIER ::= { networkInfo 2 }
OBJECT-TYPE(对象类型) à 定义了对象的数据类型、访问权限、语义描述和引用关系,支持对象的状态和附加信息等。这些信息有助于管理系统正确处理和使用MIB数据,并构建和维护MIB模块的层次结构和关系。指定MIB对象的数据类型,可以是整数、字符串、布尔值等等。这有助于管理系统正确解释和处理MIB对象的值。指定MIB对象的访问权限,如只读、读写、创建、删除等。这限制了对MIB对象的访问方式,保护了MIB数据的完整性和安全性。提供关于MIB对象的语义描述,包括对象的含义、用途、取值范围等。这有助于用户和开发人员更好地理解和使用MIB数据。可以包含一些额外的信息,如对象的状态、最后修改时间、作者等。这有助于管理系统更好地跟踪和管理MIB对象的状态和变更历史。描述对象之间的关联和引用关系,即一个MIB对象可以引用或依赖其他的MIB对象。这有助于构建MIB模块的层次结构和关系。
定义的句法如下:
定义格式:
objectname OBJECT-TYPE
SYNTAX (syntax)
MAX-ACCESS (access)
STATUS (status)
DESCRIPTION (description)
::= { ( parent ) ( number )}
关键字 | 含义 | 备注 |
objectname | 被管理对象的名字 | 必须以小写字母开头 |
OBJECT-TYPE | 每一个叶子对象所必须的关键字 | 固定格式 |
SYNTAX | 被管理对象类型的关键字 | Counter(计数) Gauge(标准) DisplayString(显示字符串) Interger(整数) TimeTicks(时间戳) NetworkAddress(网络地址) IpAddress(Ipv4地址) |
MAX-ACCESS | 该节点支持的访问方式 | read-only(只读) read-write(读写) read-create(读和创建) no-accessible(不可访问) |
STATUS | 该节点的状态 | current (当前的) deprecated (反对的) obsolete(废弃的) |
DESCRIPTION | 对被管理对象的功能、特征等进行描述的关键字 | 一些关于节点的描述信息 |
示例:
softwareRevision OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION "The software version"
::= { versionInfo 1 }
hardwareRevision OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION "The hardware version"
::= { versionInfo 2 }
表类型:是一个特殊类型的声明,表内声明的对象称为列对象,表对象可以看作是一些标量对象的集合。利用SEQUENCE和SEQUENCE OF定义表格和表格中的行, 通常来说,表格对象的名字后面加有后缀Table,行对象的名字后面加有后缀Entry。
定义格式:
tablename OBJECT-TYPE
SYNTAX SEQUENCE OF Entrytype
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION (description)
:: ={ (parent) (number)}
entryname OBJECT-TYPE
SYNTAX Entrytype
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION description
INDEX { index list }
:: ={ (tablename) 1}
(Entrytype) :: = SEQUENCE {
(column1) (column1type),
(column2) (column1type),
( columnN) (columnNtype) }
关键字 | 含义 | 备注 |
tablename | 表格名 | xxxxTable首字母小写 |
OBJECT-TYPE | 每一个叶子对象所必须的关键字 | 固定格式 |
SYNTAX | 被管理对象类型的关键字 | Counter(计数) Gauge(标准) DisplayString(显示字符串) Interger(整数) TimeTicks(时间戳) NetworkAddress(网络地址) IpAddress(Ipv4地址) |
Entrytype | 表对象名 | XxxxEntry首字母大写 |
MAX-ACCESS | 该节点支持的访问方式 | read-only(只读) read-write(读写) read-create(读和创建) no-accessible(不可访问) |
not-accessible | 访问方式 | 此处必须是not-accessible |
STATUS | 该节点的状态 | current (当前的) deprecated (反对的) obsolete(废弃的) |
entryname | 行名 | 和XxxxEntry名相同,首字母小写xxxxEntry |
description | 描述信息 |
示例:
mdStreamInfoTable OBJECT-TYPE
SYNTAX SEQUENCE OF MdStreamInfoEntry
ACCESS not-accessible
STATUS current
DESCRIPTION "infomation of the main stream channel"
::= { mainStreamInfo 2 }
mdStreamInfoEntry OBJECT-TYPE
SYNTAX MdStreamInfoEntry
ACCESS not-accessible
STATUS current
DESCRIPTION "infomation of the main stream channel list"
INDEX { mdChannelNo }
::= { mdStreamInfoTable 1 }
MdStreamInfoEntry ::= SEQUENCE {
mdChannelNo INTEGER,
mdCompression DisplayString,
mdFPS INTEGER,
mdResolution DisplayString,
mdBitRate INTEGER
}
mdChannelNo OBJECT-TYPE
SYNTAX INTEGER
MAX-ACCESS read-only
STATUS current
DESCRIPTION "The number of main channel."
::= { mdStreamInfoEntry 1 }
mdCompression OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-write
STATUS current
DESCRIPTION "The compression mode of the main channel which stream-type is the move-detection(e. g.
MPEG4 MPEG2 MPEG1 MJPG H.263 H.264 H.265)."
::= { mdStreamInfoEntry 2 }
mdFPS OBJECT-TYPE
SYNTAX INTEGER
MAX-ACCESS read-write
STATUS current
DESCRIPTION "FPS of the main channel which stream-type is the move-detection."
::= { mdStreamInfoEntry 3 }
mdResolution OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-write
STATUS current
DESCRIPTION "resolution of the main channel which stream-type is the move-detection.
Resolution Name | Size in PAL | Size in NTSC
D1 704 x 576 704 x 480
HD1 352 x 576 352 x 480
BCIF 704 x 288 704 x 240
CIF 352 x 288 352 x 240
QCIF 176 x 144 176 x 120
NHD 640 x 360
VGA 640 x 480
QVGA 320 x 240
SVCD 480 x 480
QQVGA 160 x 128
SVGA 800 x 592
SVGA1 800 x 600
WVGA 800 x 480
FWVGA 854 x 480
DVGA 960 x 640
XVGA 1024 x 768
WXGA 1280 x 800
WXGA2 1280 x 768
WXGA3 1280 x 854
WXGA4 1366 x 768
SXGA 1280 x 1024
SXGA+ 1400 x 1050
WSXGA 1600 x 1024
UXGA 1600 x 1200
WUXGA 1920 x 1200
ND1 240 x 192
720P 1280 x 720
1080P 1920 x 1080
QFHD 3840 x 2160
1280x960 1280 x 960(1.3 Mega Pixels)
1872x1408 1872 x 1408(2.5 Mega Pixels)
3744x1408 3744 x 1408(5 Mega Pixels)
2048x1536 2048 x 1536(3 Mega Pixels)
2432x2048 2432 x 2048(5 Mega Pixels)
1216x1024 1216 x 1024(1.2 Mega Pixels)
1408x1024 1408 x 1024(1.5 Mega Pixels)
3296x2472 3296 x 2472(8 Mega Pixels)
2560x1920 2560 x 1920(5 Mega Pixels)
960H 960 x 576 960 x 480
DV720P 960 x 720
2560x1600 2560 x 1600(4 Mega Pixels)
2336x1752 2336 x 1752(4 Mega Pixels)
2592x2048 2592 x 2048
2448x2048 2448 x 2048
1920x1440 1920 x 1440
2752x2208 2752 x 2208
3840x2160 3840 x 2160
4096x2160 4096 x 2160
3072x2048 3072 x 2048 "
::= { mdStreamInfoEntry 4 }
mdBitRate OBJECT-TYPE
SYNTAX INTEGER
MAX-ACCESS read-write
STATUS current
DESCRIPTION "bit rate of the main channel which stream-type is the move-detection."
::= { mdStreamInfoEntry 5 }
事件类型:MIB文件不直接包含事件类型,而是主要用于描述和定义管理信息库(MIB)中的对象和属性。在某些应用程序和系统中,可能会创建自定义的事件类型,以便跟踪和处理特定的事件。这些事件类型可以根据具体需求进行定义,并与MIB文件中的对象和属性进行关联。
定义格式:
eventname NOTIFICATION-TYPE
OBJECTS { snmpStatus }
STATUS (status)
DESCRIPTION (description)
::= { ( parent ) ( number )}
关键字 | 含义 | 备注 |
eventname | 事件名字 | 必须以小写字母开头 |
NOTIFICATION-TYPE | 事件对象所必须的关键字 | 固定格式 |
OBJECTS | 指定该通知所引用的对象 | 表示当snmpStatus对象发生变化时,将触发该通知。 |
STATUS | 该节点的状态 | current (当前的) deprecated (反对的) obsolete(废弃的) |
DESCRIPTION | 事件的描述信息 | 用于描述该通知的含义和作用,即它是关于SNMP工作状态的事件。 |
示例:
snmpStatusEvent NOTIFICATION-TYPE
OBJECTS { snmpStatus }
STATUS current
DESCRIPTION
"A snmp work status Event."
::= { notification 2 }
Trap类型:Trap类型定义了SNMP陷阱(Trap)或通知(Notification)。陷阱是一种事件通知机制,当网络设备或应用程序发生特定事件时,会向管理系统发送一个陷阱通知。MIB文件中的Trap类型用于定义这些陷阱通知的结构和属性。
示例:
generalSnmpTrap OBJECT IDENTIFIER ::= { device 12 }
action OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS accessible-for-notify
STATUS current
DESCRIPTION "trap info "
::= { generalSnmpTrap 1 }
补充说明:
- MIB文件的注释用–(两个“-”)
- IMPORTS,从别的MIB中导入其他类型。
- table的定义,一个table定义包括table节点,Entry节点以及其他的列表节点。
- 各个参数的顺序要严格按照上面列举的顺序,防止出错。
- MIB文件并非要包括所有的宏,基本的要有MODULE-IDENTITY,OBJECT-IDENTITY,OBJECT-TYPE。
- 所有的MIB file的都以DEFINITIONS ::= BEGIN关键字开始,以END结束。我们所有添加的节点均应在此之间。
XXX-TEST-MIB DEFINITIONS ::= BEGIN
……
……
END