diff options
author | elie <elie> | 2009-12-03 11:47:45 +0000 |
---|---|---|
committer | elie <elie> | 2009-12-03 11:47:45 +0000 |
commit | d49440bff1641c3a8d2696ccdcdc1d8479fa1177 (patch) | |
tree | a4b78a24f96013f718dcd1e57692b215b8570e7f | |
parent | caadb063bde53a9db6b0685261fd564a8171351b (diff) | |
download | pysnmp-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-- | CHANGES | 3 | ||||
-rw-r--r-- | examples/v1arch/agent/ntforg.py | 2 | ||||
-rw-r--r-- | pysnmp/proto/api/v1.py | 13 | ||||
-rw-r--r-- | pysnmp/proto/api/v2c.py | 16 | ||||
-rw-r--r-- | pysnmp/proto/proxy/rfc2576.py | 36 |
5 files changed, 39 insertions, 31 deletions
@@ -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; |