diff options
Diffstat (limited to 'pysnmp/entity')
-rw-r--r-- | pysnmp/entity/config.py | 19 | ||||
-rw-r--r-- | pysnmp/entity/rfc3413/config.py | 22 |
2 files changed, 31 insertions, 10 deletions
diff --git a/pysnmp/entity/config.py b/pysnmp/entity/config.py index 40f49e3..3df3b1f 100644 --- a/pysnmp/entity/config.py +++ b/pysnmp/entity/config.py @@ -261,8 +261,9 @@ def delTargetParams(snmpEngine, name): def __cookTargetAddrInfo(snmpEngine, addrName): snmpTargetAddrEntry, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('SNMP-TARGET-MIB', 'snmpTargetAddrEntry') + snmpSourceAddrEntry, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('PYSNMP-SOURCE-MIB', 'snmpSourceAddrEntry') tblIdx = snmpTargetAddrEntry.getInstIdFromIndices(addrName) - return snmpTargetAddrEntry, tblIdx + return snmpTargetAddrEntry, snmpSourceAddrEntry, tblIdx def addTargetAddr( snmpEngine, @@ -272,18 +273,25 @@ def addTargetAddr( params, timeout=None, retryCount=None, - tagList=null + tagList=null, + sourceAddress=None ): - snmpTargetAddrEntry, tblIdx = __cookTargetAddrInfo( + snmpTargetAddrEntry, snmpSourceAddrEntry, tblIdx = __cookTargetAddrInfo( snmpEngine, addrName ) if transportDomain[:len(snmpUDPDomain)] == snmpUDPDomain: SnmpUDPAddress, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('SNMPv2-TM', 'SnmpUDPAddress') transportAddress = SnmpUDPAddress(transportAddress) + if sourceAddress is None: + sourceAddress = ('0.0.0.0', 0) + sourceAddress = SnmpUDPAddress(sourceAddress) elif transportDomain[:len(snmpUDP6Domain)] == snmpUDP6Domain: TransportAddressIPv6, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('TRANSPORT-ADDRESS-MIB', 'TransportAddressIPv6') transportAddress = TransportAddressIPv6(transportAddress) + if sourceAddress is None: + sourceAddress = ('::', 0) + sourceAddress = TransportAddressIPv6(sourceAddress) snmpEngine.msgAndPduDsp.mibInstrumController.writeVars( ((snmpTargetAddrEntry.name + (9,) + tblIdx, 'destroy'),) @@ -296,11 +304,12 @@ def addTargetAddr( (snmpTargetAddrEntry.name + (4,) + tblIdx, timeout), (snmpTargetAddrEntry.name + (5,) + tblIdx, retryCount), (snmpTargetAddrEntry.name + (6,) + tblIdx, tagList), - (snmpTargetAddrEntry.name + (7,) + tblIdx, params),) + (snmpTargetAddrEntry.name + (7,) + tblIdx, params), + (snmpSourceAddrEntry.name + (1,) + tblIdx, sourceAddress),) ) def delTargetAddr(snmpEngine, addrName): - snmpTargetAddrEntry, tblIdx = __cookTargetAddrInfo( + snmpTargetAddrEntry, snmpSourceAddrEntry, tblIdx = __cookTargetAddrInfo( snmpEngine, addrName ) snmpEngine.msgAndPduDsp.mibInstrumController.writeVars( diff --git a/pysnmp/entity/rfc3413/config.py b/pysnmp/entity/rfc3413/config.py index 000faec..1124600 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, |