GETBULK command

pysnmp.hlapi.v3arch.twisted.bulkCmd(snmpEngine, authData, transportTarget, contextData, nonRepeaters, maxRepetitions, *varBinds, **options)

Performs SNMP GETBULK query.

Based on passed parameters, prepares SNMP GETNEXT packet (RFC 1905#section-4.2.3) and schedules its transmission by twisted I/O framework at a later point of time.

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.
  • *varBinds (ObjectType) – One or more class instances 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.
  • 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.
Returns:

deferred (Deferred) – Twisted Deferred object representing work-in-progress. User is expected to attach his own success and error callback functions to the Deferred object though addCallbacks() method.

Raises:

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

Notes

User success callback is called with the following tuple as its first argument:

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

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

  • varBindTable (tuple): A sequence of sequences (e.g. 2-D array) of ObjectType class instances representing a table of MIB variables returned in SNMP response, with up to maxRepetitions rows, i.e. len(varBindTable) <= maxRepetitions.

    For 0 <= i < len(varBindTable) and 0 <= j < len(varBinds), varBindTable[i][j] represents:

    • For non-repeaters (j < nonRepeaters), the first lexicographic successor of varBinds[j], regardless the value of i, or an ObjectType instance with the endOfMibView value if no such successor exists;
    • For repeaters (j >= nonRepeaters), the i-th lexicographic successor of varBinds[j], or an ObjectType instance with the endOfMibView value if no such successor exists.

    See RFC 3416#section-4.2.3 for details on the underlying GetBulkRequest-PDU and the associated GetResponse-PDU, such as specific conditions under which the server may truncate the response, causing varBindTable to have less than maxRepetitions rows.

User error callback is called with errorIndication object wrapped in Failure object.

Examples

>>> from twisted.internet.task import react
>>> from pysnmp.hlapi.twisted import *
>>>
>>> def success(args):
...     (errorStatus, errorIndex, varBindTable) = args
...     print(errorStatus, errorIndex, varBindTable)
...
>>> def failure(errorIndication):
...     print(errorIndication)
...
>>> def run(reactor):
...     d = bulkCmd(SnmpEngine(),
...                 CommunityData('public'),
...                 UdpTransportTarget(('demo.snmplabs.com', 161)),
...                 ContextData(),
...                 0, 2,
...                 ObjectType(ObjectIdentity('SNMPv2-MIB', 'system'))
...     d.addCallback(success).addErrback(failure)
...     return d
...
>>> react(run)
(0, 0, [[ObjectType(ObjectIdentity(ObjectName('1.3.6.1.2.1.1.1.0')), DisplayString('SunOS zeus.snmplabs.com 4.1.3_U1 1 sun4m'))], [ObjectType(ObjectIdentity(ObjectName('1.3.6.1.2.1.1.2.0')), ObjectIdentifier('1.3.6.1.4.1.424242.1.1'))]])