读书频道 > 网站 > 网页设计 > 深入理解Net-SNMP
3.4.1 OBJECT-TYPE
15-09-06    下载编辑
收藏    我要投稿   

本文所属图书 > 深入理解Net-SNMP

本书是首部从实战的角度讲解Net-SNMP开发的书籍。本书从网络管理概念开始,到MIB的开发设计,最后到使用Net-SNMP开发网络管理应用,实现了由网络管理理论到实践的落地。它有以下几个特点:书中内容由项目而生,以立即去当当网订购
在2.7小节中已经介绍过SMIv1中的一个旧版本的OBJECT-TYPE。这里再简要地进行以下几点说明。
 
SMIv1:SYNTAX子句要求定义的管理对象的语法类型(数据类型)为3.3.1节中的四种简单数据类型。ACCESS子句定义管理对象所具有的最小的访问权限,也就是Get、Set等命令的访问权限。当ACCESS子句的值为“read-only”,那么Agent必须至少提供该权限,也可以根据实际的需要提供更大的访问权限,如提供“read-write”权限。当取值为“read-write”时表示该对象支持GET、GET-NEXT、SET命令。当取值为“not-accessible”则表示不能读和写。另外DescrPart、ReferPart、DefValPart主要是定义对象非必要的额外信息,可以省略;IndexPart则在定义表格时使用。
 
对象的名称必须以小写字母开头,并且不能使用连字符。由于SMIv1中允许在对象标识符中使用连字符。所以除了是从SMIv1中延续下来的模块,是不允许使用连字符的,其名称的长度也不能超过64个字符,实际上为了便于其他通用语言对这些字符的处理等考虑,使用时建议不超过32个字符。另外,对象标识符的名称必须唯一,以便于记忆和识别。
 
SMIv2:SMIv1中的ACCESS在SMIv2中则更新为MAX-ACCESS。指的是该对象最大的访问权限,这与ACCESS的定义刚好相反。可以这样理解,当某对象定义为“read-write”时,Agent可以根据实际需要,仅仅支持对该对象读的访问权限。如果需要实现类似“MIN-ACCESS”的功能需要额外的宏MODULE-COMPLIANCE。
 
SMIv2中OBJECT-TYPE的定义如下,请注意里面的中文注释。
 
OBJECT-TYPE MACRO ::=
BEGIN
 TYPE NOTATION ::=
     "SYNTAX" Syntax
      UnitsPart
     "MAX-ACCESS" Access
     "STATUS" Status
     "DESCRIPTION" Text –必须使用该子句
      ReferPart
     IndexPart
     DefValPart
    VALUE NOTATION ::= value(VALUE ObjectName)

-- 基础类型或其子类型、文本约定或其子类型、BITS伪类型
    Syntax ::= type | "BITS" "{" NamedBits "}"
    NamedBits ::= NamedBit| NamedBits "," NamedBit
    NamedBit ::=  identif?ier "(" number ")" -- number is nonnegative

–- 以文本描述该对象的类型单位,如,单位seconds
UnitsPart ::=  "UNITS" Text| empty 

-- 访问权限是由小到大排列的
    Access ::=  "not-accessible"| "accessible-for-notify"
| "read-only"| "read-write"| "read-create"

-- "current", "deprecated", "obsolete",分别表示:当前使用、不赞成使用、作废
-- 对于自定义的MIB,需要管理的对象,当然选择"current"状态(同SMIv1的mandatory)
    Status ::=  "current"| "deprecated"| "obsolete"

-- 当该对象已经在其他模块中定义,则在此说明原来的定义信息,一般企业和个人不使用
    ReferPart ::=  "REFERENCE" Text| empty

-- AUGMENTS用于扩展表格中的列
    IndexPart ::=  "INDEX"    "{" IndexTypes "}"| "AUGMENTS" "{" Entry "}"| empty
    IndexTypes ::=  IndexType| IndexTypes "," IndexType
    IndexType ::=  "IMPLIED" Index| Index
    Index ::=  value(ObjectName) -- ObjectName ::=  OBJECT IDENTIFIER
    Entry ::=  value(ObjectName)
    DefValPart ::= "DEFVAL" "{" Defvalue "}"| empty

-- 定义默认值,可选。一般只在支持动态创建表格对象时使用
    Defvalue ::= value(ObjectSyntax) --对象语法对应数据类型的值
                  | "{" BitsValue "}"

    BitsValue ::= BitNames| empty
    BitNames ::=  BitName| BitNames "," BitName
    BitName ::= identif?ier

-- 除双引号外的7位ASCII字符、制表符TAB、空格、\n或\n\r
    Text ::= value(IA5String)
END

 

 
宏定义中具有“empty”的部分都是可选项。上面IndexPart部分的定义使用了很多产生式,较为复杂。这里将其产生式的最终结果列出来:
 
INDEX{ myindex1} -- 单索引,最为常见
 
INDEX{ myindex1, myindex2} –- 多索引,一般较少见,代码实现起来比较复杂
 
AUGMENTS{ myEntry }
 
INDEX(索引)子句定义的对象作为唯一区分行实例的索引对象,决定了行实例如何标识。它具有以下特性:
 
索引对象可以为表格中的(列)对象,也可以是其表格中的对象,但不可以是标量对象(不在SEQUENCE子句里)。
 
整型对象作为索引时,索引值一般应该从1开始。
 
使用本表格中的列作为索引时,其访问权限应该为“not-accessible”(因为要获取表格内容,必须事先已经知道索引值,所以没有必要使用更高的访问权限),除非表格中所有的列都定义为索引,这时需要定义一个可访问的对象;另外当SMIv1的MIB转换为SMIv2版的MIB时,也可放松此要求。
 
索引对象的数据类型可以是整数、字符串、对象标识符、IpAddress。
点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站