summaryrefslogtreecommitdiff
path: root/examples/v1arch/asyncore/manager
diff options
context:
space:
mode:
authorelie <elie>2012-07-21 08:34:56 +0000
committerelie <elie>2012-07-21 08:34:56 +0000
commit8a21462859b8956a29801c11039c7e5590ae31ca (patch)
treee6d403efb26f520fd08bef61bf8372455ad9bd30 /examples/v1arch/asyncore/manager
parentba5d9c3d219bcb0ce9ffa0c2dbf064eee0a45c09 (diff)
downloadpysnmp-git-8a21462859b8956a29801c11039c7e5590ae31ca.tar.gz
more transports, text OIDs and general comments added
Diffstat (limited to 'examples/v1arch/asyncore/manager')
-rw-r--r--examples/v1arch/asyncore/manager/cmdgen/fetch-scalar-value.py49
-rw-r--r--examples/v1arch/asyncore/manager/cmdgen/getbulk-pull-whole-mib.py28
-rw-r--r--examples/v1arch/asyncore/manager/cmdgen/getnext-pull-whole-mib.py12
-rw-r--r--examples/v1arch/asyncore/manager/cmdgen/v2c-set.py27
-rw-r--r--examples/v1arch/asyncore/manager/ntfrcv/listen-on-ipv4-and-ipv6-interfaces.py30
5 files changed, 114 insertions, 32 deletions
diff --git a/examples/v1arch/asyncore/manager/cmdgen/fetch-scalar-value.py b/examples/v1arch/asyncore/manager/cmdgen/fetch-scalar-value.py
index 2ba0fea9..e5074c87 100644
--- a/examples/v1arch/asyncore/manager/cmdgen/fetch-scalar-value.py
+++ b/examples/v1arch/asyncore/manager/cmdgen/fetch-scalar-value.py
@@ -1,19 +1,20 @@
# GET Command Generator
from pysnmp.carrier.asynsock.dispatch import AsynsockDispatcher
-from pysnmp.carrier.asynsock.dgram import udp
+from pysnmp.carrier.asynsock.dgram import udp, udp6, unix
from pyasn1.codec.ber import encoder, decoder
from pysnmp.proto import api
from time import time
# Protocol version to use
pMod = api.protoModules[api.protoVersion1]
+#pMod = api.protoModules[api.protoVersion2c]
# Build PDU
reqPDU = pMod.GetRequestPDU()
pMod.apiPDU.setDefaults(reqPDU)
pMod.apiPDU.setVarBinds(
- reqPDU, (((1,3,6,1,2,1,1,1,0), pMod.Null('')),
- ((1,3,6,1,2,1,1,3,0), pMod.Null('')))
+ reqPDU, ( ('1.3.6.1.2.1.1.1.0', pMod.Null('')),
+ ('1.3.6.1.2.1.1.3.0', pMod.Null('')) )
)
# Build message
@@ -22,7 +23,9 @@ pMod.apiMessage.setDefaults(reqMsg)
pMod.apiMessage.setCommunity(reqMsg, 'public')
pMod.apiMessage.setPDU(reqMsg, reqPDU)
-def cbTimerFun(timeNow, startedAt=time()):
+startedAt = time()
+
+def cbTimerFun(timeNow):
if timeNow - startedAt > 3:
raise Exception("Request timed out")
@@ -44,14 +47,44 @@ def cbRecvFun(transportDispatcher, transportDomain, transportAddress,
return wholeMsg
transportDispatcher = AsynsockDispatcher()
-transportDispatcher.registerTransport(
- udp.domainName, udp.UdpSocketTransport().openClientMode()
- )
+
transportDispatcher.registerRecvCbFun(cbRecvFun)
transportDispatcher.registerTimerCbFun(cbTimerFun)
+
+# UDP/IPv4
+transportDispatcher.registerTransport(
+ udp.domainName, udp.UdpSocketTransport().openClientMode()
+)
+
+# Pass message to dispatcher
transportDispatcher.sendMessage(
encoder.encode(reqMsg), udp.domainName, ('localhost', 161)
- )
+)
transportDispatcher.jobStarted(1)
+
+## UDP/IPv6 (second copy of the same PDU will be sent)
+transportDispatcher.registerTransport(
+ udp6.domainName, udp6.Udp6SocketTransport().openClientMode()
+)
+
+# Pass message to dispatcher
+transportDispatcher.sendMessage(
+ encoder.encode(reqMsg), udp6.domainName, ('::1', 161)
+)
+transportDispatcher.jobStarted(1)
+
+## Local domain socket
+#transportDispatcher.registerTransport(
+# unix.domainName, unix.UnixSocketTransport().openClientMode()
+#)
+#
+# Pass message to dispatcher
+#transportDispatcher.sendMessage(
+# encoder.encode(reqMsg), unix.domainName, '/tmp/snmp-agent'
+#)
+#transportDispatcher.jobStarted(1)
+
+# Dispatcher will finish as job#1 counter reaches zero
transportDispatcher.runDispatcher()
+
transportDispatcher.closeDispatcher()
diff --git a/examples/v1arch/asyncore/manager/cmdgen/getbulk-pull-whole-mib.py b/examples/v1arch/asyncore/manager/cmdgen/getbulk-pull-whole-mib.py
index 1e708213..5c0ea759 100644
--- a/examples/v1arch/asyncore/manager/cmdgen/getbulk-pull-whole-mib.py
+++ b/examples/v1arch/asyncore/manager/cmdgen/getbulk-pull-whole-mib.py
@@ -31,15 +31,23 @@ def cbRecvFun(transportDispatcher, transportDomain, transportAddress,
wholeMsg, reqPDU=reqPDU, headVars=headVars):
while wholeMsg:
rspMsg, wholeMsg = decoder.decode(wholeMsg, asn1Spec=v2c.Message())
+
rspPDU = v2c.apiMessage.getPDU(rspMsg)
+
# Match response to request
if v2c.apiBulkPDU.getRequestID(reqPDU)==v2c.apiBulkPDU.getRequestID(rspPDU):
+ # Format var-binds table
+ varBindTable = v2c.apiBulkPDU.getVarBindTable(reqPDU, rspPDU)
+
# Check for SNMP errors reported
errorStatus = v2c.apiBulkPDU.getErrorStatus(rspPDU)
if errorStatus and errorStatus != 2:
- raise Exception(errorStatus)
- # Format var-binds table
- varBindTable = v2c.apiBulkPDU.getVarBindTable(reqPDU, rspPDU)
+ errorIndex = v2c.apiBulkPDU.getErrorIndex(rspPDU)
+ print('%s at %s' % (errorStatus.prettyPrint(),
+ errorIndex and varBindTable[int(errorIndex)-1] or '?'))
+ transportDispatcher.jobFinished(1)
+ break
+
# Report SNMP table
for tableRow in varBindTable:
for name, val in tableRow:
@@ -47,6 +55,7 @@ def cbRecvFun(transportDispatcher, transportDomain, transportAddress,
transportAddress, name.prettyPrint(), val.prettyPrint()
)
)
+
# Stop on EOM
for oid, val in varBindTable[-1]:
if not isinstance(val, v2c.Null):
@@ -69,14 +78,19 @@ def cbRecvFun(transportDispatcher, transportDomain, transportAddress,
return wholeMsg
transportDispatcher = AsynsockDispatcher()
-transportDispatcher.registerTransport(
- udp.domainName, udp.UdpSocketTransport().openClientMode()
- )
+
transportDispatcher.registerRecvCbFun(cbRecvFun)
transportDispatcher.registerTimerCbFun(cbTimerFun)
+
+transportDispatcher.registerTransport(
+ udp.domainName, udp.UdpSocketTransport().openClientMode()
+)
transportDispatcher.sendMessage(
encoder.encode(reqMsg), udp.domainName, ('localhost', 161)
- )
+)
transportDispatcher.jobStarted(1)
+
+# Dispatcher will finish as job#1 counter reaches zero
transportDispatcher.runDispatcher()
+
transportDispatcher.closeDispatcher()
diff --git a/examples/v1arch/asyncore/manager/cmdgen/getnext-pull-whole-mib.py b/examples/v1arch/asyncore/manager/cmdgen/getnext-pull-whole-mib.py
index 27e1493c..0b360392 100644
--- a/examples/v1arch/asyncore/manager/cmdgen/getnext-pull-whole-mib.py
+++ b/examples/v1arch/asyncore/manager/cmdgen/getnext-pull-whole-mib.py
@@ -71,14 +71,18 @@ def cbRecvFun(transportDispatcher, transportDomain, transportAddress,
return wholeMsg
transportDispatcher = AsynsockDispatcher()
-transportDispatcher.registerTransport(
- udp.domainName, udp.UdpSocketTransport().openClientMode()
- )
+
transportDispatcher.registerRecvCbFun(cbRecvFun)
transportDispatcher.registerTimerCbFun(cbTimerFun)
+
+transportDispatcher.registerTransport(
+ udp.domainName, udp.UdpSocketTransport().openClientMode()
+)
transportDispatcher.sendMessage(
encoder.encode(reqMsg), udp.domainName, ('localhost', 161)
- )
+)
transportDispatcher.jobStarted(1)
+
transportDispatcher.runDispatcher()
+
transportDispatcher.closeDispatcher()
diff --git a/examples/v1arch/asyncore/manager/cmdgen/v2c-set.py b/examples/v1arch/asyncore/manager/cmdgen/v2c-set.py
index eec3731a..247a6346 100644
--- a/examples/v1arch/asyncore/manager/cmdgen/v2c-set.py
+++ b/examples/v1arch/asyncore/manager/cmdgen/v2c-set.py
@@ -6,7 +6,8 @@ from pysnmp.proto import api
from time import time
# Protocol version to use
-pMod = api.protoModules[api.protoVersion1]
+#pMod = api.protoModules[api.protoVersion1]
+pMod = api.protoModules[api.protoVersion2c]
# Build PDU
reqPDU = pMod.SetRequestPDU()
@@ -14,8 +15,8 @@ pMod.apiPDU.setDefaults(reqPDU)
pMod.apiPDU.setVarBinds(
reqPDU,
# A list of Var-Binds to SET
- (((1,3,6,1,2,1,1,1,0), pMod.OctetString('New system description')),
- ((1,3,6,1,2,1,1,3,0), pMod.TimeTicks(12)))
+ ( ('1.3.6.1.2.1.1.1.0', pMod.OctetString('New system description')),
+ ('1.3.6.1.2.1.1.3.0', pMod.TimeTicks(12)) )
)
# Build message
@@ -24,7 +25,9 @@ pMod.apiMessage.setDefaults(reqMsg)
pMod.apiMessage.setCommunity(reqMsg, 'public')
pMod.apiMessage.setPDU(reqMsg, reqPDU)
-def cbTimerFun(timeNow, startedAt=time()):
+startedAt = time()
+
+def cbTimerFun(timeNow):
if timeNow - startedAt > 3:
raise Exception("Request timed out")
@@ -46,14 +49,22 @@ def cbRecvFun(transportDispatcher, transportDomain, transportAddress,
return wholeMsg
transportDispatcher = AsynsockDispatcher()
-transportDispatcher.registerTransport(
- udp.domainName, udp.UdpSocketTransport().openClientMode()
- )
+
transportDispatcher.registerRecvCbFun(cbRecvFun)
transportDispatcher.registerTimerCbFun(cbTimerFun)
+
+# UDP/IPv4
+transportDispatcher.registerTransport(
+ udp.domainName, udp.UdpSocketTransport().openClientMode()
+)
+
+# Pass message to dispatcher
transportDispatcher.sendMessage(
encoder.encode(reqMsg), udp.domainName, ('localhost', 161)
- )
+)
transportDispatcher.jobStarted(1)
+
+# Dispatcher will finish as job#1 counter reaches zero
transportDispatcher.runDispatcher()
+
transportDispatcher.closeDispatcher()
diff --git a/examples/v1arch/asyncore/manager/ntfrcv/listen-on-ipv4-and-ipv6-interfaces.py b/examples/v1arch/asyncore/manager/ntfrcv/listen-on-ipv4-and-ipv6-interfaces.py
index 62f81474..cda81a66 100644
--- a/examples/v1arch/asyncore/manager/ntfrcv/listen-on-ipv4-and-ipv6-interfaces.py
+++ b/examples/v1arch/asyncore/manager/ntfrcv/listen-on-ipv4-and-ipv6-interfaces.py
@@ -1,6 +1,6 @@
# Notification Receiver (TRAP PDU)
from pysnmp.carrier.asynsock.dispatch import AsynsockDispatcher
-from pysnmp.carrier.asynsock.dgram import udp
+from pysnmp.carrier.asynsock.dgram import udp, udp6, unix
from pyasn1.codec.ber import decoder
from pysnmp.proto import api
@@ -51,9 +51,29 @@ def cbFun(transportDispatcher, transportDomain, transportAddress, wholeMsg):
return wholeMsg
transportDispatcher = AsynsockDispatcher()
+
+transportDispatcher.registerRecvCbFun(cbFun)
+
+# UDP/IPv4
transportDispatcher.registerTransport(
udp.domainName, udp.UdpSocketTransport().openServerMode(('localhost', 162))
- )
-transportDispatcher.registerRecvCbFun(cbFun)
-transportDispatcher.jobStarted(1) # this job would never finish
-transportDispatcher.runDispatcher()
+)
+
+# UDP/IPv6
+transportDispatcher.registerTransport(
+ udp6.domainName, udp6.Udp6SocketTransport().openServerMode(('::1', 162))
+)
+
+## Local domain socket
+#transportDispatcher.registerTransport(
+# unix.domainName, unix.UnixSocketTransport().openServerMode('/tmp/snmp-manager')
+#)
+
+transportDispatcher.jobStarted(1)
+
+try:
+ # Dispatcher will never finish as job#1 never reaches zero
+ transportDispatcher.runDispatcher()
+except:
+ transportDispatcher.closeDispatcher()
+ raise