我想知道那些没有"RowStatus“字段的SNMP。如何删除具有给定索引的条目?
表项是由
self.snmp_context.getMibInstrum().writeVars()
但是我没有找到任何可以用来删除条目的方法吗?伊利亚·伊丁科夫能给点提示吗?
Br,-Dapeng Jiao
发布于 2016-10-25 09:48:09
如果您阅读SNMP,您会发现,只有当表定义了EntryStatus列(如果是SMIv1表)或定义了RowStatus列(如果是SMIv2表),才有可能添加或删除操作。
带有列的EntryStatus SMIv1表
EntryStatus列用于管理SMIv1表中概念性行的创建和删除。这表示表项的状态。status列可以具有以下内容。
valid(1)
--表示该行存在并可供使用。createRequest(2)
-由希望创建行的管理器提供。underCreation(3)
--指示正在创建行。invalid(4)
-由希望使相应条目无效的经理提供。如果管理器希望添加一行,则应将entryStatus列设置为createRequest(2)
。在创建之后,代理立即将此对象设置为underCreation(3)
。在配置好条目之前,该条目一直处于underCreation(3)
状态。然后将其值设置为valid(1)
。如果状态在异常长时间内保持为underCreation(3)
,则代理将状态设置为invalid(4)
。
带有列的RowStatus SMIv2表
在SMIv2表中,RowStatus列用于管理概念行的创建和删除。该列有6个定义的值,如下所示。
active(1)
--指示所有列的概念性行可供托管设备使用。notInService(2)
--表示代理中存在概念性行,但托管设备无法使用。notReady(3)
--表示代理中存在概念性行,行中的一个或多个必需列没有实例化。createAndGo(4)
--由希望创建概念行的新实例并使其可供使用的管理器提供。createAndWait(5)
--由希望创建概念行的新实例但不允许使用的管理器提供。destroy(6)
-由希望删除与现有概念行关联的所有实例的管理器提供。有些SNMP代理确实实现了添加/删除行的非标准机制。因此,在这种情况下,它是特定于实现的。但一般来说,如果没有EntryStatus/RowStatus,您就无法做到这一点。
发布于 2016-10-26 05:45:34
对于pysnmp,所有对SNMP代理的更改都是通过.writeVars()
调用完成的。它的设计方式是将代码重用到代理端和管理器启动的操作中。因此,修改的细节由传递给调用的OID-值对决定。
正如@andrew所说,删除SNMP表行的方法是将RowStatus
列的值设置为destroy(6)
(或destroy(6)
)。如果您的表不支持RowStatus
,我想最小的干扰方式就是将其添加到ASN.1或Python中。
https://stackoverflow.com/questions/40245764
复制相似问题