BULK WALK Operation#

async pysnmp.hlapi.v3arch.asyncio.bulkWalkCmd(snmpEngine: SnmpEngine, authData: CommunityData | UsmUserData, transportTarget: AbstractTransportTarget, contextData: ContextData, nonRepeaters: int, maxRepetitions: int, varBind: ObjectType, **options) AsyncGenerator[tuple[pysnmp.proto.errind.ErrorIndication | None, pysnmp.proto.rfc1902.Integer32 | str | int | None, pysnmp.proto.rfc1902.Integer32 | int | None, tuple[pysnmp.smi.rfc1902.ObjectType, ...]], None]#

Creates a generator to perform one or more SNMP GETBULK queries.

On each iteration, new SNMP GETBULK request is send (RFC 1905#section-4.2.3). The iterator blocks waiting for response to arrive or error to occur.

Parameters:
  • snmpEngine (SnmpEngine) – Class instance representing SNMP engine.

  • authData (CommunityData or UsmUserData) – Class instance representing SNMP credentials.

  • transportTarget (UdpTransportTarget or Udp6TransportTarget) – Class instance representing transport type along with SNMP peer address.

  • contextData (ContextData) – Class instance representing SNMP ContextEngineId and ContextName values.

  • nonRepeaters (int) – One MIB variable is requested in response for the first nonRepeaters MIB variables in request.

  • maxRepetitions (int) – maxRepetitions MIB variables are requested in response for each of the remaining MIB variables in the request (e.g. excluding nonRepeaters). Remote SNMP engine may choose lesser value than requested.

  • varBind (ObjectType) – One class instance representing MIB variables to place into SNMP request.

Other Parameters:

**options

Request options:

  • lookupMib - load MIB and resolve response MIB variables at the cost of slightly reduced performance. Default is True.

  • lexicographicMode - walk SNMP agent’s MIB till the end (if True), otherwise (if False) stop iteration when all response MIB variables leave the scope of initial MIB variables in varBinds. Default is True.

  • ignoreNonIncreasingOid - continue iteration even if response MIB variables (OIDs) are not greater then request MIB variables. Be aware that setting it to True may cause infinite loop between SNMP management and agent applications. Default is False.

  • maxRows - stop iteration once this generator instance processed maxRows of SNMP conceptual table. Default is 0 (no limit).

  • maxCalls - stop iteration once this generator instance processed maxCalls responses. Default is 0 (no limit).

Yields:
  • errorIndication (str) – True value indicates SNMP engine error.

  • errorStatus (str) – True value indicates SNMP PDU error.

  • errorIndex (int) – Non-zero value refers to *varBinds[errorIndex-1]

  • varBinds (tuple) – A sequence of ObjectType class instances representing MIB variables returned in SNMP response.

Raises:

PySnmpError – Or its derivative indicating that an error occurred while performing SNMP operation.

Notes

The bulkWalkCmd generator will be exhausted on any of the following conditions:

  • SNMP engine error occurs thus errorIndication is True

  • SNMP PDU errorStatus is reported as True

  • SNMP EndOfMibView values (also known as SNMP exception values) are reported for all MIB variables in varBinds

  • lexicographicMode option is True and SNMP agent reports end-of-mib or lexicographicMode is False and all response MIB variables leave the scope of varBinds

At any moment a new sequence of varBinds could be send back into running generator (supported since Python 2.6).

Setting maxRepetitions value to 15..50 might significantly improve system performance, as many MIB variables get packed into a single response message at once.

Examples

>>> from pysnmp.hlapi.v3arch.asyncio import *
>>> g = await bulkWalkCmd(SnmpEngine(),
...             CommunityData('public'),
...             await UdpTransportTarget.create(('demo.pysnmp.com', 161)),
...             ContextData(),
...             0, 25,
...             ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr')))
>>> next(g)
(None, 0, 0, [ObjectType(ObjectIdentity(ObjectName('1.3.6.1.2.1.1.1.0')), DisplayString('SunOS zeus.pysnmp.com 4.1.3_U1 1 sun4m'))])
>>> g.send( [ ObjectType(ObjectIdentity('IF-MIB', 'ifInOctets')) ] )
(None, 0, 0, [(ObjectName('1.3.6.1.2.1.2.2.1.10.1'), Counter32(284817787))])