我想知道那些没有“RowStatus”字段的SNMP表。 如何删除具有给定索引的条目?
表条目由
添加self.snmp_context.getMibInstrum().writeVars()
但我找不到任何可用于删除条目的方法? @Ilya Etingof可以提供一些暗示吗?
BR, -Dapeng Jiao
答案 0 :(得分:0)
如果您阅读了SNMP RFC,那么只有在表中定义了EntryStatus列(如果它是SMIv1表)或定义了RowStatus列(如果是)时,您才会发现添加或删除操作是可能的。一个SMIv2表)。
带有EntryStatus列的SMIv1表
EntryStatus列用于管理SMIv1表中概念行的创建和删除。这表示表条目的状态。状态列可以包含以下内容。
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列用于管理概念行的创建和删除。此列有六个定义的值,如下所示。
active(1)
- 表示包含所有列的概念行
可供受管理设备使用。notInService(2)
- 表示代理中存在概念行,但受管设备无法使用该概念行。notReady(3)
- 表示代理中存在概念行,行中的一个或多个必需列未实例化。createAndGo(4)
- 由希望创建概念行的新实例并使其可供使用的经理提供。createAndWait(5)
- 由希望创建概念行的新实例但未提供使用的经理提供。destroy(6)
- 由希望删除与现有概念行关联的所有实例的经理提供。有些SNMP代理确实实现了添加/删除行的非标准机制。所以在这种情况下它是特定于实现的。但一般来说,如果没有EntryStatus / RowStatus,你就无法做到这一点。
答案 1 :(得分:0)
使用pysnmp,所有对SNMP代理的更改都是通过.writeVars()
调用完成的。它的设计方式是为代理端和管理器启动的操作重用代码。因此,修改的细节由传递给调用的OID值对决定。
正如@ andrew-komiagin所说,删除SNMP表行的方法是将SNMP {({1}}}的.writeVars
列值设置为RowStatus
。如果你的表不支持destroy(6)
,我想最简单的方法就是将它添加到ASN.1或Python MIB中。