summaryrefslogtreecommitdiff
path: root/pysnmp/entity
diff options
context:
space:
mode:
Diffstat (limited to 'pysnmp/entity')
-rw-r--r--pysnmp/entity/config.py19
-rw-r--r--pysnmp/entity/rfc3413/config.py22
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,