如何使用pysnmp删除没有“RowStatus”字段的SNMP表条目?

时间:2016-10-25 17:06:38

标签: python snmp pysnmp

我想知道那些没有“RowStatus”字段的SNMP表。 如何删除具有给定索引的条目?

表条目由

添加
self.snmp_context.getMibInstrum().writeVars()

但我找不到任何可用于删除条目的方法? @Ilya Etingof可以提供一些暗示吗?

BR, -Dapeng Jiao

2 个答案:

答案 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中。