summaryrefslogtreecommitdiff
path: root/pysnmp/entity/rfc3413
diff options
context:
space:
mode:
authorelie <elie>2015-01-20 16:57:59 +0000
committerelie <elie>2015-01-20 16:57:59 +0000
commitc317a137113d4f39a60052c0ae59a9c48b0dd334 (patch)
tree19fbd1d94927e20894d140fd1a77ac439462167e /pysnmp/entity/rfc3413
parent48fa5f20c6a341708db517dc6a78dbd84d057192 (diff)
downloadpysnmp-git-c317a137113d4f39a60052c0ae59a9c48b0dd334.tar.gz
- The asyncore-based transport subsystem extended to support POSIX
sendmsg()/recvmsg() based socket communication what could be used, among other things, in the context of a transparent SNMP proxy application. Technically, the following features were brought into pysnmp with this update: * Sending SNMP packets from a non-local IP address * Receiving IP packets for non-local IP addresses * Responding to SNMP requests from exactly the same IP address the query was sent to. This proves to be useful when listening on both primary and secondary IP interfaces.
Diffstat (limited to 'pysnmp/entity/rfc3413')
-rw-r--r--pysnmp/entity/rfc3413/config.py22
1 files changed, 17 insertions, 5 deletions
diff --git a/pysnmp/entity/rfc3413/config.py b/pysnmp/entity/rfc3413/config.py
index 000faec8..1124600c 100644
--- a/pysnmp/entity/rfc3413/config.py
+++ b/pysnmp/entity/rfc3413/config.py
@@ -32,6 +32,11 @@ def getTargetAddr(snmpEngine, snmpTargetAddrName):
'snmpTargetAddrRetryCount',
'snmpTargetAddrParams'
)
+ ( snmpSourceAddrTAddress, ) = mibBuilder.importSymbols(
+ 'PYSNMP-SOURCE-MIB',
+ 'snmpSourceAddrTAddress'
+ )
+
tblIdx = snmpTargetAddrEntry.getInstIdFromIndices(snmpTargetAddrName)
try:
@@ -50,21 +55,28 @@ def getTargetAddr(snmpEngine, snmpTargetAddrName):
snmpTargetAddrParams = snmpTargetAddrParams.getNode(
snmpTargetAddrParams.name + tblIdx
).syntax
+ snmpSourceAddrTAddress = snmpSourceAddrTAddress.getNode(
+ snmpSourceAddrTAddress.name + tblIdx
+ ).syntax
except NoSuchInstanceError:
raise SmiError('Target %s not configured to LCD' % snmpTargetAddrName)
+ transport = snmpEngine.transportDispatcher.getTransport(snmpTargetAddrTDomain)
+
if snmpTargetAddrTDomain[:len(config.snmpUDPDomain)] == config.snmpUDPDomain:
SnmpUDPAddress, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('SNMPv2-TM', 'SnmpUDPAddress')
- snmpTargetAddrTAddress = tuple(
+ snmpTargetAddrTAddress = transport.addressType(
SnmpUDPAddress(snmpTargetAddrTAddress)
- )
+ ).setLocalAddress(SnmpUDPAddress(snmpSourceAddrTAddress))
elif snmpTargetAddrTDomain[:len(config.snmpUDP6Domain)] == config.snmpUDP6Domain:
TransportAddressIPv6, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('TRANSPORT-ADDRESS-MIB', 'TransportAddressIPv6')
- snmpTargetAddrTAddress = tuple(
+ snmpTargetAddrTAddress = transport.addressType(
TransportAddressIPv6(snmpTargetAddrTAddress)
- )
+ ).setLocalAddress(TransportAddressIPv6(snmpSourceAddrTAddress))
elif snmpTargetAddrTDomain[:len(config.snmpLocalDomain)] == config.snmpLocalDomain:
- snmpTargetAddrTAddress = str(snmpTargetAddrTAddress)
+ snmpTargetAddrTAddress = transport.addressType(
+ snmpTargetAddrTAddress
+ )
nameToTargetMap[snmpTargetAddrName] = (
snmpTargetAddrTDomain,