summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelie <elie>2009-12-03 11:47:45 +0000
committerelie <elie>2009-12-03 11:47:45 +0000
commitd49440bff1641c3a8d2696ccdcdc1d8479fa1177 (patch)
treea4b78a24f96013f718dcd1e57692b215b8570e7f
parentcaadb063bde53a9db6b0685261fd564a8171351b (diff)
downloadpysnmp-d49440bff1641c3a8d2696ccdcdc1d8479fa1177.tar.gz
* missing SNMPTrap PDU API implemented at proto.api.v2c, RFC2576 proxy
code reworked. * fix to sysUpTime OID at SNMPv2 TRAP PDU.
-rw-r--r--CHANGES3
-rw-r--r--examples/v1arch/agent/ntforg.py2
-rw-r--r--pysnmp/proto/api/v1.py13
-rw-r--r--pysnmp/proto/api/v2c.py16
-rw-r--r--pysnmp/proto/proxy/rfc2576.py36
5 files changed, 39 insertions, 31 deletions
diff --git a/CHANGES b/CHANGES
index d5333ce..8a7e5c9 100644
--- a/CHANGES
+++ b/CHANGES
@@ -7,6 +7,9 @@ Revision 4.1.12a
- Installer now uses setuptools for package management whenever available.
- The libsmi2pysnmp tool improved to build constraints of more than
256 items (Python has a limit on the number of function params).
+- Missing SNMPTrap PDU API implemented at proto.api.v2c, RFC2576 proxy
+ code reworked.
+- Fix to sysUpTime OID at SNMPv2 TRAP PDU.
Revision 4.1.11a
----------------
diff --git a/examples/v1arch/agent/ntforg.py b/examples/v1arch/agent/ntforg.py
index 06797a4..14cf9aa 100644
--- a/examples/v1arch/agent/ntforg.py
+++ b/examples/v1arch/agent/ntforg.py
@@ -5,7 +5,7 @@ from pyasn1.codec.ber import encoder
from pysnmp.proto import api
# Protocol version to use
-verID = api.protoVersion1
+verID = api.protoVersion2c
pMod = api.protoModules[verID]
# Build PDU
diff --git a/pysnmp/proto/api/v1.py b/pysnmp/proto/api/v1.py
index 3c1606a..149da74 100644
--- a/pysnmp/proto/api/v1.py
+++ b/pysnmp/proto/api/v1.py
@@ -105,16 +105,15 @@ class PDUAPI:
apiPDU = PDUAPI()
-try:
- import socket
- _agentAddress = socket.gethostbyname(socket.gethostname())
-except:
- _agentAddress = '0.0.0.0'
-
class TrapPDUAPI:
+ try:
+ from socket import gethostbyname
+ agentAddress = IpAddress(socket.gethostbyname(socket.gethostname()))
+ except:
+ agentAddress = IpAddress('0.0.0.0')
def setDefaults(self, pdu):
pdu.setComponentByPosition(0, (1,3,6,1,4,1,20408))
- pdu.setComponentByPosition(1).getComponentByPosition(1).setComponentByPosition(0, _agentAddress)
+ pdu.setComponentByPosition(1).getComponentByPosition(1).setComponentByPosition(0, self.agentAddress)
pdu.setComponentByPosition(2, 0)
pdu.setComponentByPosition(3, 0)
pdu.setComponentByPosition(4, 0)
diff --git a/pysnmp/proto/api/v2c.py b/pysnmp/proto/api/v2c.py
index 1c7a4db..c5b2df9 100644
--- a/pysnmp/proto/api/v2c.py
+++ b/pysnmp/proto/api/v2c.py
@@ -115,6 +115,22 @@ class BulkPDUAPI(PDUAPI):
apiBulkPDU = BulkPDUAPI()
+class TrapPDUAPI(v1.PDUAPI):
+ sysUpTime = (1,3,6,1,2,1,1,3,0)
+ snmpTrapAddress = (1,3,6,1,6,3,18,1,3,0)
+ snmpTrapOID = (1,3,6,1,6,3,1,1,4,1,0)
+ snmpTrapEnterprise = (1,3,6,1,6,3,1,1,4,3,0)
+ def setDefaults(self, pdu):
+ v1.PDUAPI.setDefaults(self, pdu)
+ varBinds = [
+ ( self.sysUpTime, TimeTicks(0)),
+ # generic trap
+ ( self.snmpTrapOID, ObjectIdentifier((1,3,6,1,6,3,1,1,5,1)))
+ ]
+ self.setVarBinds(pdu, varBinds)
+
+apiTrapPDU = TrapPDUAPI()
+
class MessageAPI(v1.MessageAPI):
def setDefaults(self, msg):
msg.setComponentByPosition(0, 1)
diff --git a/pysnmp/proto/proxy/rfc2576.py b/pysnmp/proto/proxy/rfc2576.py
index 364c531..ed34bcb 100644
--- a/pysnmp/proto/proxy/rfc2576.py
+++ b/pysnmp/proto/proxy/rfc2576.py
@@ -49,16 +49,6 @@ __v2ToV1PduMap = {
v2c.GetBulkRequestPDU.tagSet: v1.GetNextRequestPDU() # 4.1.1
}
-__sysUpTime = (1,3,6,1,2,1,1,3)
-__snmpTrapAddress = (1,3,6,1,6,3,18,1,3,0)
-__snmpTrapOID = (1,3,6,1,6,3,1,1,4,1,0)
-__snmpTrapEnterprise = (1,3,6,1,6,3,1,1,4,3,0)
-try:
- import socket
- __agentAddress = v1.IpAddress(socket.gethostbyname(socket.gethostname()))
-except:
- __agentAddress = v1.IpAddress('0.0.0.0')
-
# Trap map
__v1ToV2TrapMap = {
@@ -126,15 +116,14 @@ def v1ToV2(v1Pdu, origV2Pdu=None):
__v1ToV2TrapMap[genericTrap]
)
- v2VarBinds.append((__sysUpTime, sysUpTime))
- v2VarBinds.append((__snmpTrapOID, snmpTrapOIDParam))
- v2VarBinds.append(
- (__snmpTrapEnterprise, v1.apiTrapPDU.getEnterprise(v1Pdu))
- )
-
+ v2VarBinds.append((v2c.apiTrapPDU.sysUpTime, sysUpTime))
+ v2VarBinds.append((v2c.apiTrapPDU.snmpTrapOID, snmpTrapOIDParam))
+ v2VarBinds.append((v2c.apiTrapPDU.snmpTrapEnterprise,
+ v1.apiTrapPDU.getEnterprise(v1Pdu)))
+
# 3.1.4
v2VarBinds.append(
- (__snmpTrapAddress, v1.apiTrapPDU.getAgentAddr(v1Pdu))
+ (v2c.apiTrapPDU.snmpTrapAddress, v1.apiTrapPDU.getAgentAddr(v1Pdu))
)
varBinds = v1.apiTrapPDU.getVarBinds(v1Pdu)
@@ -197,12 +186,12 @@ def v2ToV1(v2Pdu, origV1Pdu=None):
if rfc3411.notificationClassPDUs.has_key(pduType):
# 3.2.1
(snmpTrapOID, snmpTrapOIDParam) = v2VarBinds[1]
- if snmpTrapOID != __snmpTrapOID:
+ if snmpTrapOID != v2c.apiTrapPDU.snmpTrapOID:
raise error.ProtocolError('Second OID not snmpTrapOID')
if __v2ToV1TrapMap.has_key(snmpTrapOIDParam):
for oid, val in v2VarBinds:
- if oid == __snmpTrapEnterprise:
+ if oid == v2c.apiTrapPDU.snmpTrapEnterprise:
v1.apiTrapPDU.setEnterprise(v1Pdu, val)
break
else:
@@ -217,11 +206,11 @@ def v2ToV1(v2Pdu, origV1Pdu=None):
# 3.2.2
for oid, val in v2VarBinds:
# snmpTrapAddress
- if oid == __snmpTrapAddress:
+ if oid == v2c.apiTrapPDU.snmpTrapAddress:
v1.apiTrapPDU.setAgentAddr(v1Pdu, val)
break
else:
- v1.apiTrapPDU.setAgentAddr(v1Pdu, __agentAddress)
+ v1.apiTrapPDU.setAgentAddr(v1Pdu, v1.apiTrapPDU.agentAddress)
# 3.2.3
if __v2ToV1TrapMap.has_key(snmpTrapOIDParam):
@@ -241,8 +230,9 @@ def v2ToV1(v2Pdu, origV1Pdu=None):
__v2VarBinds = []
for oid, val in v2VarBinds[2:]:
if __v2ToV1TrapMap.has_key(oid) or \
- oid in (__sysUpTime, __snmpTrapAddress,
- __snmpTrapEnterprise):
+ oid in (v2c.apiTrapPDU.sysUpTime,
+ v2c.apiTrapPDU.snmpTrapAddress,
+ v2c.apiTrapPDU.snmpTrapEnterprise):
continue
__v2VarBinds.append((oid, val))
v2VarBinds = __v2VarBinds;