做过snmp/mib开发的知道,常见的节点类型一般只有no-accessible,read-only,read-write三种访问类型。snmp V2中引入了一种新的访问类型:read-create。

最近在一个产品的snmp管理接口开发中,需要实现snmpTargetMIB(.1.3.6.1.6.3.12),其下面两个表snmpTargetAddrEntry和snmpTargetParamsTable的节点都是read-create类型。

read没什么好说的,关键是这个create。Create是指这个表的行可以通过“snmp途径”来操作(增加,删除)。这些行操作是通过表中的“RowStatus”节点来进行的,比如上图中的snmpTargetAddrRowStatus和snmpTargetParamsRowStatus。mib中这两个节点的类型定义如下:

        ROWSTATUS INTEGER {active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6) }

1.表中行的创建/删除操作 

如果把rowstauts节点值设成(SnmpSet)4,5则表示在表中建立一个新的行(索引值同rowstatus节点)。

而1,2,3则是用来标记这一行描述的对象的状态的(前提是已经建立)。即建立一行后,应根据对象的=状态来更新rowstatus节点值到1/2/3。

如果把RowStatus的值设成6,则表示要删除这行。

可能有点绕,总结一下,有管理软件(发起snmp命令的)和被管理方(MIB所在处),表的行的节点建立&删除指令由管理软件来发送,由被管理方来执行。

举个例子:

比如表中已经有两条记录:

snmpTargetAdrrRowStatus(1) --->Active

snmpTargetAddrRowStatus(2) ---->notReady

要增加一个索引为3的记录,管理方发起一条 snmpSet snmpTargetAddrRowStatus(3) --->createAndGo,被管理方收到这条消息后,在表中建立一条索引为3的记录,包括snmpTargetAddrRowStatus(3)节点。

2.表中行的节点值的维护/更新

表行中所有的节点的值,除了rowStatus的4,5,6只能由管理软件来写(snmp-set),其他节点的值和RowStatus的2,3,4可以由管理软件或被管理方来更新。这点mib定义是未做约束的,我觉得这样也是合理的,可以根据需要灵活处理。

比如要添加一个告警目标(IP地址),这个地址通过管理软件来设置(snmp-set snmpTargetAddrTAddress),也可以在被管理方上来设置(比如通过Console接口,配置文件等)。  而这个目标是否可以连通则由被管理方来检测(根据结果设置rowStatus的值到1/2/3)。其实每个节点在创建后被管理方都应给它个默认值。

关于read-create节点表的软件实现,提供点思路吧。

管理方软件:

其实就是snmp-get 和snmp-set的命令组合,和read-write节点操作一样。“create”是通过snmp-set RowStatus节点来实现的。

被管理方软件:

对于RowStatus节点,定义好对RowStatus节点操作的回调函数,回调函数中根据写入的值来创建/删除表中的记录行。对于其他节点的实现则和read-write节点一样。

SNMP MIB中的含read-create节点的表的实现的更多相关文章

  1. SNMP MIB库

    -- mib文件的开头指定文件名,并且使用BEGIN开始,文件的最后用END结束 -- IMPORTS就相当与c语言中的include,包含需要使用的一些数据类型 -- 通过FROM指定引用的来源 M ...

  2. es6 Object.assign ECMAScript 6 笔记(六) ECMAScript 6 笔记(一) react入门——慕课网笔记 jquery中动态新增的元素节点无法触发事件解决办法 响应式图像 弹窗细节 微信浏览器——返回操作 Float 的那些事 Flex布局 HTML5 data-* 自定义属性 参数传递的四种形式

    es6 Object.assign   目录 一.基本用法 二.用途 1. 为对象添加属性 2. 为对象添加方法 3. 克隆对象 4. 合并多个对象 5. 为属性指定默认值 三.浏览器支持 ES6 O ...

  3. lwip 2.0.2 snmp mib ipv6

    1.3.6.1.2.1 - SNMP MIB-2 Submitted by Harald.T.Alvestrand at uninett.no from host aun.uninett.no (12 ...

  4. 单链表 C++ 实现 - 含虚拟头节点

    本文例程下载链接:ListDemo 链表 vs 数组 链表和数组的最大区别在于链表不支持随机访问,不能像数组那样对任意一个(索引)位置的元素进行访问,而需要从头节点开始,一个一个往后访问直到查找到目标 ...

  5. LeetCode 剑指 Offer 22. 链表中倒数第k个节点

    剑指 Offer 22. 链表中倒数第k个节点 题意 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. ​ 例如,一个链表有 6 个 ...

  6. 【前端】js中new和Object.create()的区别

    js中new和Object.create()的区别 var Parent = function (id) { this.id = id this.classname = 'Parent' } Pare ...

  7. 剑指offer-第三章高质量的代码(输出该链表中倒数第K个节点)

    题目:输入一个链表,输出这个链表中倒数第K个节点.(代码的鲁棒性) 思路:用两个指针p1和p2,都指向头节点,开始的时候,p2不动,p1移动k-1次,指向第k个节点.此时,如果p1->next! ...

  8. 向CDH5集群中添加新的主机节点

    向CDH5集群中添加新的主机节点 步骤一:首先得在新的主机环境中安装JDK,关闭防火墙.修改selinux.NTP时钟与主机同步.修改hosts.与主机配置ssh免密码登录.保证安装好了perl和py ...

  9. lintcode:Remove Nth Node From End of Lis 删除链表中倒数第n个节点

    题目: 删除链表中倒数第n个节点 给定一个链表,删除链表中倒数第n个节点,返回链表的头节点.  样例 给出链表1->2->3->4->5->null和 n = 2. 删除 ...

随机推荐

  1. CI在CentOS中的部署与实践LNMP

    1. 平台:lnmp CentOS6.4 (64bit) nginx1.2.4+php5.5.7配置过程中遇到的问题与处理方式: 1. 404错误: 原因:nginx中的配置请求路径的问题 2. 40 ...

  2. click和onclick的区别

    onclick是绑定事件,click本身是方法作用是触发onclick事件,只要执行了元素的click()方法,下面有个示例,大家可以看看   Html代码 ? 1 2 3 4 5 6 7 8 9 1 ...

  3. RegEx正则表达式学习笔记

    一.实用的例子 public static void main(String[] args) { // 简单练习 System.out.println("-123".matches ...

  4. 【转】安装Django

    原文网址:http://www.crifan.com/record_install_django/ 1.参考Quick install guide,最终找到下载的地址: http://bitnami. ...

  5. Velocity+Java较全教程

    一.安装myEclipse 二.安装velocity的eclipse插件: http://www.oschina.net/p/veloeclipse(介绍) 方法1(现在基本上非常慢)http://p ...

  6. Android项目中单实例数据库类,解决database is locked

    一.数据库操作 package com.ping.db; import android.content.Context; import android.database.sqlite.SQLiteDa ...

  7. Drupal如何SQL查询传递参数?

    Drupal使用称之为“placeholder”的方式处理SQL查询参数: <?php // WRONG: $result = db_query("SELECT nid, title ...

  8. 获取 windows地址栏 网页地址栏 文件名

    int start=str.LastIndexOf("\\"); fileName=str.SubString(start+1,str.Length-start-1); int s ...

  9. 【LeetCode】165 - Compare Version Numbers

    Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...

  10. UDP模式与TCP模式的区别

    1.TCP有连接状态,而UDP没有. 2.TCP应用层使用无需考虑包的大小及发送情况,而UDP需要. 3.TCP中IP包大小的决定者是Socket,而UDP为应用层.