如何使用 pysnmp 删除没有 "RowStatus" 字段的 SNMP Table 条目?
How to use pysnmp to delete a SNMP Table entry without "RowStatus" field?
我想知道那些没有 "RowStatus" 字段的 SNMP Table。
我如何删除具有给定索引的条目?
Table 条目由
添加
self.snmp_context.getMibInstrum().writeVars()
但是我没有找到任何可用于删除条目的方法?
@Ilya Etingof 可以给出一些提示吗?
Br,
-焦大鹏
如果您阅读 SNMP RFC,您会发现只有在 table 定义了 EntryStatus 列(如果它是 SMIv1 table)或使用定义的 RowStatus 列(如果它是 SMIv2 table)。
带有 EntryStatus 列的 SMIv1 表
EntryStatus 列用于管理 SMIv1 tables 中概念行的创建和删除。这表示 table 条目的状态。状态列可以有以下内容。
valid(1)
- 表示该行存在并且可以使用。
createRequest(2)
- 由希望创建行的经理提供。
underCreation(3)
- 表示正在创建该行。
invalid(4)
- 由希望使
相应条目。
如果经理希望添加一行,则应将 entryStatus 列设置为 createRequest(2)
。创建后,代理立即将此对象设置为 underCreation(3)
。该条目在配置之前保持 underCreation(3)
状态。然后它的值设置为valid(1)
。如果状态保持 underCreation(3)
的时间异常长,则代理将状态设置为 invalid(4)
.
具有 RowStatus 列的 SMIv2 表
在 SMIv2 tables 中,RowStatus 列用于管理概念行的创建和删除。此列有六个定义值,如下所示。
active(1)
- 表示具有所有列的概念行是
可供受管设备使用。
notInService(2)
- 表示代理中存在概念行,但受管设备无法使用。
notReady(3)
- 表示代理中存在概念行,行中的一个或多个必需列未实例化。
createAndGo(4)
- 由希望创建概念行的新实例并使其可供使用的经理提供。
createAndWait(5)
- 由希望创建概念行的新实例但不使其可供使用的经理提供。
destroy(6)
- 由希望删除与现有概念行关联的所有实例的经理提供。
有一些 SNMP 代理确实实现了 adding/deleting 行的非标准机制。所以在这种情况下,它是特定于实现的。但总的来说,如果没有 EntryStatus/RowStatus.
就无法做到这一点
使用 pysnmp,对 SNMP 代理的所有更改都是通过 .writeVars()
调用完成的。它的设计方式是为代理端和管理器启动的操作重用代码。所以修改的细节由传递给调用的 OID-value 对决定。
正如@andrew-komiagin 所说,删除 SNMP table 行的方法是将 SNMP SET(或 .writeVars
)RowStatus
列值设置为 destroy(6)
。如果你的 table 不支持 RowStatus
我想最不干扰的方法是将它添加到 ASN.1 或 Python MIB.
我想知道那些没有 "RowStatus" 字段的 SNMP Table。 我如何删除具有给定索引的条目?
Table 条目由
添加self.snmp_context.getMibInstrum().writeVars()
但是我没有找到任何可用于删除条目的方法? @Ilya Etingof 可以给出一些提示吗?
Br, -焦大鹏
如果您阅读 SNMP RFC,您会发现只有在 table 定义了 EntryStatus 列(如果它是 SMIv1 table)或使用定义的 RowStatus 列(如果它是 SMIv2 table)。
带有 EntryStatus 列的 SMIv1 表
EntryStatus 列用于管理 SMIv1 tables 中概念行的创建和删除。这表示 table 条目的状态。状态列可以有以下内容。
valid(1)
- 表示该行存在并且可以使用。createRequest(2)
- 由希望创建行的经理提供。underCreation(3)
- 表示正在创建该行。invalid(4)
- 由希望使 相应条目。
如果经理希望添加一行,则应将 entryStatus 列设置为 createRequest(2)
。创建后,代理立即将此对象设置为 underCreation(3)
。该条目在配置之前保持 underCreation(3)
状态。然后它的值设置为valid(1)
。如果状态保持 underCreation(3)
的时间异常长,则代理将状态设置为 invalid(4)
.
具有 RowStatus 列的 SMIv2 表
在 SMIv2 tables 中,RowStatus 列用于管理概念行的创建和删除。此列有六个定义值,如下所示。
active(1)
- 表示具有所有列的概念行是 可供受管设备使用。notInService(2)
- 表示代理中存在概念行,但受管设备无法使用。notReady(3)
- 表示代理中存在概念行,行中的一个或多个必需列未实例化。createAndGo(4)
- 由希望创建概念行的新实例并使其可供使用的经理提供。createAndWait(5)
- 由希望创建概念行的新实例但不使其可供使用的经理提供。destroy(6)
- 由希望删除与现有概念行关联的所有实例的经理提供。
有一些 SNMP 代理确实实现了 adding/deleting 行的非标准机制。所以在这种情况下,它是特定于实现的。但总的来说,如果没有 EntryStatus/RowStatus.
就无法做到这一点使用 pysnmp,对 SNMP 代理的所有更改都是通过 .writeVars()
调用完成的。它的设计方式是为代理端和管理器启动的操作重用代码。所以修改的细节由传递给调用的 OID-value 对决定。
正如@andrew-komiagin 所说,删除 SNMP table 行的方法是将 SNMP SET(或 .writeVars
)RowStatus
列值设置为 destroy(6)
。如果你的 table 不支持 RowStatus
我想最不干扰的方法是将它添加到 ASN.1 或 Python MIB.