diff options
author | elie <elie> | 2015-01-20 16:57:59 +0000 |
---|---|---|
committer | elie <elie> | 2015-01-20 16:57:59 +0000 |
commit | c317a137113d4f39a60052c0ae59a9c48b0dd334 (patch) | |
tree | 19fbd1d94927e20894d140fd1a77ac439462167e /pysnmp/entity/rfc3413 | |
parent | 48fa5f20c6a341708db517dc6a78dbd84d057192 (diff) | |
download | pysnmp-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.py | 22 |
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, |