diff options
author | elie <elie> | 2014-11-04 20:21:48 +0000 |
---|---|---|
committer | elie <elie> | 2014-11-04 20:21:48 +0000 |
commit | 2badd13fbc5a16806170deb432a1aeee03b74905 (patch) | |
tree | 8ed445ae7de8572557c5d6997839723fe546d08c /examples/v3arch/asyncio/manager/cmdgen/getbulk-v2c.py | |
parent | d947278e9747fc5d0c198f78b30132b13eb90760 (diff) | |
download | pysnmp-2badd13fbc5a16806170deb432a1aeee03b74905.tar.gz |
initial support for asyncio network transport added
Diffstat (limited to 'examples/v3arch/asyncio/manager/cmdgen/getbulk-v2c.py')
-rw-r--r-- | examples/v3arch/asyncio/manager/cmdgen/getbulk-v2c.py | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/examples/v3arch/asyncio/manager/cmdgen/getbulk-v2c.py b/examples/v3arch/asyncio/manager/cmdgen/getbulk-v2c.py new file mode 100644 index 0000000..0b40bd0 --- /dev/null +++ b/examples/v3arch/asyncio/manager/cmdgen/getbulk-v2c.py @@ -0,0 +1,109 @@ +# +# GETBULK Command Generator +# +# Send a series of SNMP GETBULK requests +# with SNMPv2c, community 'public' +# using Asyncio framework for network transport +# over IPv4/UDP +# to an Agent at 195.218.195.228:161 +# with values non-repeaters = 0, max-repetitions = 25 +# for two OIDs in tuple form +# stop on end-of-mib condition for both OIDs +# +# This script performs similar to the following Net-SNMP command: +# +# $ snmpbulkwalk -v2c -c public -C n0 -C r25 -ObentU 195.218.195.228 1.3.6.1.2.1.1 1.3.6.1.4.1.1 +# +from pysnmp.entity import engine, config +from pysnmp.proto import rfc1905 +from pysnmp.entity.rfc3413.asyncio import cmdgen +from pysnmp.carrier.asyncio.dgram import udp +import asyncio + +# Get the event loop for this thread +loop = asyncio.get_event_loop() + +# Create SNMP engine instance +snmpEngine = engine.SnmpEngine() + +# +# SNMPv2c setup +# + +# SecurityName <-> CommunityName mapping +config.addV1System(snmpEngine, 'my-area', 'public') + +# Specify security settings per SecurityName (SNMPv1 - 0, SNMPv2c - 1) +config.addTargetParams(snmpEngine, 'my-creds', 'my-area', 'noAuthNoPriv', 1) + +# +# Setup transport endpoint and bind it with security settings yielding +# a target name +# + +# UDP/IPv4 +config.addTransport( + snmpEngine, + udp.domainName, + udp.UdpTransport().openClientMode() +) +config.addTargetAddr( + snmpEngine, 'my-router', + udp.domainName, ('195.218.195.228', 161), + 'my-creds' +) + +# Error/response receiver +def cbFun(cbCtx): + (snmpEngine, errorIndication, + errorStatus, errorIndex, varBindTable, status) = cbCtx.result() + if errorIndication: + print(errorIndication) + elif errorStatus: + print('%s at %s' % ( + errorStatus.prettyPrint(), + errorIndex and varBindTable[-1][int(errorIndex)-1][0] or '?' + ) + ) + else: + for varBindRow in varBindTable: + for oid, val in varBindRow: + print('%s = %s' % (oid.prettyPrint(), val.prettyPrint())) + + # Stop mainloop when we are done walking (optional) + for oid, val in varBindRow: + if not val.isSameTypeWith(rfc1905.endOfMibView): + # Re-create future for next GETNEXT iteration + future = asyncio.Future() + future.add_done_callback(cbFun) + + # This also indicates that we wish to continue walking + status['future'] = future + return + + # This also terminates internal timer + config.delTransport( + snmpEngine, + udp.domainName + ) + + # Stop mainloop on SNMP error (optional) + loop.stop() + +# Prepare request to be sent, receive an asyncio future object +future = cmdgen.BulkCommandGenerator().sendVarBinds( + snmpEngine, + 'my-router', + None, '', # contextEngineId, contextName + 0, 25, # non-repeaters, max-repetitions + ( ('1.3.6.1.2.1.1', None), ('1.3.6.1.4.1.1', None) ) +) + +# Register error/response receiver function on future +future.add_done_callback(cbFun) + +# Run asyncio main loop +loop.run_forever() + +# Clear the event loop +loop.close() |