summaryrefslogtreecommitdiff
path: root/examples/v3arch/asyncio/manager/cmdgen/getbulk-v2c.py
diff options
context:
space:
mode:
authorelie <elie>2014-11-04 20:21:48 +0000
committerelie <elie>2014-11-04 20:21:48 +0000
commit2badd13fbc5a16806170deb432a1aeee03b74905 (patch)
tree8ed445ae7de8572557c5d6997839723fe546d08c /examples/v3arch/asyncio/manager/cmdgen/getbulk-v2c.py
parentd947278e9747fc5d0c198f78b30132b13eb90760 (diff)
downloadpysnmp-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.py109
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()