summaryrefslogtreecommitdiff
path: root/pysnmp/entity/config.py
diff options
context:
space:
mode:
Diffstat (limited to 'pysnmp/entity/config.py')
-rw-r--r--pysnmp/entity/config.py126
1 files changed, 94 insertions, 32 deletions
diff --git a/pysnmp/entity/config.py b/pysnmp/entity/config.py
index f66b0b54..10acd25b 100644
--- a/pysnmp/entity/config.py
+++ b/pysnmp/entity/config.py
@@ -46,13 +46,16 @@ privServices = {des.Des.serviceID: des.Des(),
aes256.Aes256.serviceID: aes256.Aes256(),
nopriv.NoPriv.serviceID: nopriv.NoPriv()}
+
def __cookV1SystemInfo(snmpEngine, communityIndex):
- snmpEngineID, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('__SNMP-FRAMEWORK-MIB', 'snmpEngineID')
+ mibBuilder = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder
- snmpCommunityEntry, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('SNMP-COMMUNITY-MIB', 'snmpCommunityEntry')
+ snmpEngineID, = mibBuilder.importSymbols('__SNMP-FRAMEWORK-MIB', 'snmpEngineID')
+ snmpCommunityEntry, = mibBuilder.importSymbols('SNMP-COMMUNITY-MIB', 'snmpCommunityEntry')
tblIdx = snmpCommunityEntry.getInstIdFromIndices(communityIndex)
return snmpCommunityEntry, tblIdx, snmpEngineID
+
def addV1System(snmpEngine, communityIndex, communityName,
contextEngineId=None, contextName=None,
transportTag=None, securityName=None):
@@ -81,6 +84,7 @@ def addV1System(snmpEngine, communityIndex, communityName,
(snmpCommunityEntry.name + (8,) + tblIdx, 'createAndGo'))
)
+
def delV1System(snmpEngine, communityIndex):
(snmpCommunityEntry, tblIdx,
snmpEngineID) = __cookV1SystemInfo(snmpEngine, communityIndex)
@@ -88,21 +92,26 @@ def delV1System(snmpEngine, communityIndex):
((snmpCommunityEntry.name + (8,) + tblIdx, 'destroy'),)
)
+
def __cookV3UserInfo(snmpEngine, securityName, securityEngineId):
- snmpEngineID, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('__SNMP-FRAMEWORK-MIB', 'snmpEngineID')
+ mibBuilder = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder
+
+ snmpEngineID, = mibBuilder.importSymbols('__SNMP-FRAMEWORK-MIB', 'snmpEngineID')
+
if securityEngineId is None:
snmpEngineID = snmpEngineID.syntax
else:
snmpEngineID = snmpEngineID.syntax.clone(securityEngineId)
- usmUserEntry, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('SNMP-USER-BASED-SM-MIB', 'usmUserEntry')
+ usmUserEntry, = mibBuilder.importSymbols('SNMP-USER-BASED-SM-MIB', 'usmUserEntry')
tblIdx1 = usmUserEntry.getInstIdFromIndices(snmpEngineID, securityName)
- pysnmpUsmSecretEntry, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('PYSNMP-USM-MIB', 'pysnmpUsmSecretEntry')
+ pysnmpUsmSecretEntry, = mibBuilder.importSymbols('PYSNMP-USM-MIB', 'pysnmpUsmSecretEntry')
tblIdx2 = pysnmpUsmSecretEntry.getInstIdFromIndices(securityName)
return snmpEngineID, usmUserEntry, tblIdx1, pysnmpUsmSecretEntry, tblIdx2
+
def addV3User(snmpEngine, userName,
authProtocol=usmNoAuthProtocol, authKey=None,
privProtocol=usmNoPrivProtocol, privKey=None,
@@ -110,18 +119,20 @@ def addV3User(snmpEngine, userName,
securityName=None,
# deprecated parameters follow
contextEngineId=None):
+ mibBuilder = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder
+
if securityName is None:
securityName = userName
if securityEngineId is None: # backward compatibility
securityEngineId = contextEngineId
- (snmpEngineID, usmUserEntry, tblIdx1, pysnmpUsmSecretEntry,
- tblIdx2) = __cookV3UserInfo(snmpEngine, userName, securityEngineId)
+ (snmpEngineID, usmUserEntry, tblIdx1,
+ pysnmpUsmSecretEntry, tblIdx2) = __cookV3UserInfo(snmpEngine, userName, securityEngineId)
# Load augmenting table before creating new row in base one
- pysnmpUsmKeyEntry, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('PYSNMP-USM-MIB', 'pysnmpUsmKeyEntry')
+ pysnmpUsmKeyEntry, = mibBuilder.importSymbols('PYSNMP-USM-MIB', 'pysnmpUsmKeyEntry')
# Load clone-from (may not be needed)
- zeroDotZero, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('SNMPv2-SMI', 'zeroDotZero')
+ zeroDotZero, = mibBuilder.importSymbols('SNMPv2-SMI', 'zeroDotZero')
snmpEngine.msgAndPduDsp.mibInstrumController.writeVars(
((usmUserEntry.name + (13,) + tblIdx1, 'destroy'),)
@@ -176,6 +187,7 @@ def addV3User(snmpEngine, userName,
(pysnmpUsmSecretEntry.name + (4,) + tblIdx2, 'createAndGo'))
)
+
def delV3User(snmpEngine,
userName,
securityEngineId=None,
@@ -196,7 +208,7 @@ def delV3User(snmpEngine,
varBinds = initialVarBinds = (
(usmUserEntry.name + (1,), None), # usmUserEngineID
(usmUserEntry.name + (2,), None), # usmUserName
- (usmUserEntry.name + (4,), None) # usmUserCloneFrom
+ (usmUserEntry.name + (4,), None) # usmUserCloneFrom
)
while varBinds:
varBinds = snmpEngine.msgAndPduDsp.mibInstrumController.readNextVars(
@@ -210,11 +222,15 @@ def delV3User(snmpEngine,
delV3User(snmpEngine, varBinds[1][1], varBinds[0][1])
varBinds = initialVarBinds
+
def __cookTargetParamsInfo(snmpEngine, name):
- snmpTargetParamsEntry, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('SNMP-TARGET-MIB', 'snmpTargetParamsEntry')
+ mibBuilder = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder
+
+ snmpTargetParamsEntry, = mibBuilder.importSymbols('SNMP-TARGET-MIB', 'snmpTargetParamsEntry')
tblIdx = snmpTargetParamsEntry.getInstIdFromIndices(name)
return snmpTargetParamsEntry, tblIdx
+
# mpModel: 0 == SNMPv1, 1 == SNMPv2c, 3 == SNMPv3
def addTargetParams(snmpEngine, name, securityName, securityLevel, mpModel=3):
if mpModel == 0:
@@ -240,32 +256,39 @@ def addTargetParams(snmpEngine, name, securityName, securityLevel, mpModel=3):
(snmpTargetParamsEntry.name + (7,) + tblIdx, 'createAndGo'))
)
+
def delTargetParams(snmpEngine, name):
snmpTargetParamsEntry, tblIdx = __cookTargetParamsInfo(snmpEngine, name)
snmpEngine.msgAndPduDsp.mibInstrumController.writeVars(
((snmpTargetParamsEntry.name + (7,) + tblIdx, 'destroy'),)
)
+
def __cookTargetAddrInfo(snmpEngine, addrName):
- snmpTargetAddrEntry, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('SNMP-TARGET-MIB', 'snmpTargetAddrEntry')
- snmpSourceAddrEntry, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('PYSNMP-SOURCE-MIB', 'snmpSourceAddrEntry')
+ mibBuilder = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder
+
+ snmpTargetAddrEntry, = mibBuilder.importSymbols('SNMP-TARGET-MIB', 'snmpTargetAddrEntry')
+ snmpSourceAddrEntry, = mibBuilder.importSymbols('PYSNMP-SOURCE-MIB', 'snmpSourceAddrEntry')
tblIdx = snmpTargetAddrEntry.getInstIdFromIndices(addrName)
return snmpTargetAddrEntry, snmpSourceAddrEntry, tblIdx
+
def addTargetAddr(snmpEngine, addrName, transportDomain, transportAddress,
params, timeout=None, retryCount=None, tagList=null,
sourceAddress=None):
+ mibBuilder = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder
+
(snmpTargetAddrEntry, snmpSourceAddrEntry,
tblIdx) = __cookTargetAddrInfo(snmpEngine, addrName)
if transportDomain[:len(snmpUDPDomain)] == snmpUDPDomain:
- SnmpUDPAddress, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('SNMPv2-TM', 'SnmpUDPAddress')
+ SnmpUDPAddress, = 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')
+ TransportAddressIPv6, = mibBuilder.importSymbols('TRANSPORT-ADDRESS-MIB', 'TransportAddressIPv6')
transportAddress = TransportAddressIPv6(transportAddress)
if sourceAddress is None:
sourceAddress = ('::', 0)
@@ -286,6 +309,7 @@ def addTargetAddr(snmpEngine, addrName, transportDomain, transportAddress,
(snmpTargetAddrEntry.name + (9,) + tblIdx, 'createAndGo'))
)
+
def delTargetAddr(snmpEngine, addrName):
(snmpTargetAddrEntry, snmpSourceAddrEntry,
tblIdx) = __cookTargetAddrInfo(snmpEngine, addrName)
@@ -293,10 +317,12 @@ def delTargetAddr(snmpEngine, addrName):
((snmpTargetAddrEntry.name + (9,) + tblIdx, 'destroy'),)
)
+
def addTransport(snmpEngine, transportDomain, transport):
if snmpEngine.transportDispatcher:
if not transport.isCompatibleWithDispatcher(snmpEngine.transportDispatcher):
- raise error.PySnmpError('Transport %r is not compatible with dispatcher %r' % (transport, snmpEngine.transportDispatcher))
+ raise error.PySnmpError(
+ 'Transport %r is not compatible with dispatcher %r' % (transport, snmpEngine.transportDispatcher))
else:
snmpEngine.registerTransportDispatcher(
transport.protoTransportDispatcher()
@@ -304,16 +330,16 @@ def addTransport(snmpEngine, transportDomain, transport):
# here we note that we have created transportDispatcher automatically
snmpEngine.setUserContext(automaticTransportDispatcher=0)
- snmpEngine.transportDispatcher.registerTransport(transportDomain,
- transport)
+ snmpEngine.transportDispatcher.registerTransport(transportDomain, transport)
automaticTransportDispatcher = snmpEngine.getUserContext(
'automaticTransportDispatcher'
)
if automaticTransportDispatcher is not None:
snmpEngine.setUserContext(
- automaticTransportDispatcher=automaticTransportDispatcher+1
+ automaticTransportDispatcher=automaticTransportDispatcher + 1
)
+
def getTransport(snmpEngine, transportDomain):
if not snmpEngine.transportDispatcher:
return
@@ -322,6 +348,7 @@ def getTransport(snmpEngine, transportDomain):
except error.PySnmpError:
return
+
def delTransport(snmpEngine, transportDomain):
if not snmpEngine.transportDispatcher:
return
@@ -342,28 +369,33 @@ def delTransport(snmpEngine, transportDomain):
snmpEngine.delUserContext(automaticTransportDispatcher)
return transport
+
addSocketTransport = addTransport
delSocketTransport = delTransport
+
# VACM shortcuts
def addContext(snmpEngine, contextName):
- vacmContextEntry, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols(
- 'SNMP-VIEW-BASED-ACM-MIB', 'vacmContextEntry'
- )
+ mibBuilder = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder
+
+ vacmContextEntry, = mibBuilder.importSymbols('SNMP-VIEW-BASED-ACM-MIB', 'vacmContextEntry')
tblIdx = vacmContextEntry.getInstIdFromIndices(contextName)
snmpEngine.msgAndPduDsp.mibInstrumController.writeVars(
((vacmContextEntry.name + (1,) + tblIdx, contextName),)
)
+
def __cookVacmGroupInfo(snmpEngine, securityModel, securityName):
- vacmSecurityToGroupEntry, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols(
- 'SNMP-VIEW-BASED-ACM-MIB', 'vacmSecurityToGroupEntry'
- )
+ mibBuilder = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder
+
+ vacmSecurityToGroupEntry, = mibBuilder.importSymbols('SNMP-VIEW-BASED-ACM-MIB',
+ 'vacmSecurityToGroupEntry')
tblIdx = vacmSecurityToGroupEntry.getInstIdFromIndices(securityModel,
securityName)
return vacmSecurityToGroupEntry, tblIdx
+
def addVacmGroup(snmpEngine, groupName, securityModel, securityName):
(vacmSecurityToGroupEntry,
tblIdx) = __cookVacmGroupInfo(snmpEngine, securityModel, securityName)
@@ -377,6 +409,7 @@ def addVacmGroup(snmpEngine, groupName, securityModel, securityName):
(vacmSecurityToGroupEntry.name + (5,) + tblIdx, 'createAndGo'))
)
+
def delVacmGroup(snmpEngine, securityModel, securityName):
vacmSecurityToGroupEntry, tblIdx = __cookVacmGroupInfo(
snmpEngine, securityModel, securityName
@@ -385,20 +418,24 @@ def delVacmGroup(snmpEngine, securityModel, securityName):
((vacmSecurityToGroupEntry.name + (5,) + tblIdx, 'destroy'),)
)
+
def __cookVacmAccessInfo(snmpEngine, groupName, contextName, securityModel,
securityLevel):
- vacmAccessEntry, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('SNMP-VIEW-BASED-ACM-MIB', 'vacmAccessEntry')
+ mibBuilder = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder
+
+ vacmAccessEntry, = mibBuilder.importSymbols('SNMP-VIEW-BASED-ACM-MIB', 'vacmAccessEntry')
tblIdx = vacmAccessEntry.getInstIdFromIndices(groupName, contextName,
securityModel, securityLevel)
return vacmAccessEntry, tblIdx
+
def addVacmAccess(snmpEngine, groupName, contextName, securityModel,
securityLevel, prefix, readView, writeView, notifyView):
vacmAccessEntry, tblIdx = __cookVacmAccessInfo(snmpEngine, groupName,
contextName, securityModel,
securityLevel)
- addContext(snmpEngine, contextName) # this is leaky
+ addContext(snmpEngine, contextName) # this is leaky
snmpEngine.msgAndPduDsp.mibInstrumController.writeVars(
((vacmAccessEntry.name + (9,) + tblIdx, 'destroy'),)
@@ -414,6 +451,7 @@ def addVacmAccess(snmpEngine, groupName, contextName, securityModel,
(vacmAccessEntry.name + (9,) + tblIdx, 'createAndGo'))
)
+
def delVacmAccess(snmpEngine, groupName, contextName, securityModel,
securityLevel):
vacmAccessEntry, tblIdx = __cookVacmAccessInfo(snmpEngine, groupName,
@@ -423,13 +461,17 @@ def delVacmAccess(snmpEngine, groupName, contextName, securityModel,
((vacmAccessEntry.name + (9,) + tblIdx, 'destroy'),)
)
+
def __cookVacmViewInfo(snmpEngine, viewName, subTree):
- vacmViewTreeFamilyEntry, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols(
+ mibBuilder = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder
+
+ vacmViewTreeFamilyEntry, = mibBuilder.importSymbols(
'SNMP-VIEW-BASED-ACM-MIB', 'vacmViewTreeFamilyEntry'
)
tblIdx = vacmViewTreeFamilyEntry.getInstIdFromIndices(viewName, subTree)
return vacmViewTreeFamilyEntry, tblIdx
+
def addVacmView(snmpEngine, viewName, viewType, subTree, mask):
vacmViewTreeFamilyEntry, tblIdx = __cookVacmViewInfo(snmpEngine, viewName,
subTree)
@@ -444,6 +486,7 @@ def addVacmView(snmpEngine, viewName, viewType, subTree, mask):
(vacmViewTreeFamilyEntry.name + (6,) + tblIdx, 'createAndGo'))
)
+
def delVacmView(snmpEngine, viewName, subTree):
vacmViewTreeFamilyEntry, tblIdx = __cookVacmViewInfo(snmpEngine, viewName,
subTree)
@@ -451,15 +494,19 @@ def delVacmView(snmpEngine, viewName, subTree):
((vacmViewTreeFamilyEntry.name + (6,) + tblIdx, 'destroy'),)
)
+
# VACM simplicity wrappers
def __cookVacmUserInfo(snmpEngine, securityModel, securityName, securityLevel):
+ mibBuilder = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder
+
groupName = 'v-%s-%d' % (hash(securityName), securityModel)
- SnmpSecurityLevel, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('SNMP-FRAMEWORK-MIB', 'SnmpSecurityLevel')
+ SnmpSecurityLevel, = mibBuilder.importSymbols('SNMP-FRAMEWORK-MIB', 'SnmpSecurityLevel')
securityLevel = SnmpSecurityLevel(securityLevel)
return (groupName, securityLevel,
'r' + groupName, 'w' + groupName, 'n' + groupName)
+
def addVacmUser(snmpEngine, securityModel, securityName, securityLevel,
readSubTree=(), writeSubTree=(), notifySubTree=(),
contextName=null):
@@ -476,6 +523,7 @@ def addVacmUser(snmpEngine, securityModel, securityName, securityLevel,
if notifySubTree:
addVacmView(snmpEngine, notifyView, "included", notifySubTree, null)
+
def delVacmUser(snmpEngine, securityModel, securityName, securityLevel,
readSubTree=(), writeSubTree=(), notifySubTree=()):
(groupName, securityLevel, readView, writeView,
@@ -496,48 +544,59 @@ def delVacmUser(snmpEngine, securityModel, securityName, securityLevel,
snmpEngine, notifyView, notifySubTree
)
+
# Obsolete shortcuts for add/delVacmUser() wrappers
def addRoUser(snmpEngine, securityModel, securityName, securityLevel, subTree):
addVacmUser(snmpEngine, securityModel, securityName,
securityLevel, subTree)
+
def delRoUser(snmpEngine, securityModel, securityName, securityLevel, subTree):
delVacmUser(snmpEngine, securityModel, securityName, securityLevel,
subTree)
+
def addRwUser(snmpEngine, securityModel, securityName, securityLevel, subTree):
addVacmUser(snmpEngine, securityModel, securityName, securityLevel,
subTree, subTree)
+
def delRwUser(snmpEngine, securityModel, securityName, securityLevel, subTree):
delVacmUser(snmpEngine, securityModel, securityName, securityLevel,
subTree, subTree)
+
def addTrapUser(snmpEngine, securityModel, securityName,
securityLevel, subTree):
addVacmUser(snmpEngine, securityModel, securityName, securityLevel,
(), (), subTree)
+
def delTrapUser(snmpEngine, securityModel, securityName,
securityLevel, subTree):
delVacmUser(snmpEngine, securityModel, securityName, securityLevel,
(), (), subTree)
+
# Notification target setup
def __cookNotificationTargetInfo(snmpEngine, notificationName, paramsName,
filterSubtree=None):
- snmpNotifyEntry, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('SNMP-NOTIFICATION-MIB', 'snmpNotifyEntry')
+ mibBuilder = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder
+
+ snmpNotifyEntry, = mibBuilder.importSymbols('SNMP-NOTIFICATION-MIB', 'snmpNotifyEntry')
tblIdx1 = snmpNotifyEntry.getInstIdFromIndices(notificationName)
- snmpNotifyFilterProfileEntry, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('SNMP-NOTIFICATION-MIB', 'snmpNotifyFilterProfileEntry')
+ snmpNotifyFilterProfileEntry, = mibBuilder.importSymbols('SNMP-NOTIFICATION-MIB',
+ 'snmpNotifyFilterProfileEntry')
tblIdx2 = snmpNotifyFilterProfileEntry.getInstIdFromIndices(paramsName)
profileName = '%s-filter' % hash(notificationName)
if filterSubtree:
- snmpNotifyFilterEntry, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('SNMP-NOTIFICATION-MIB', 'snmpNotifyFilterEntry')
+ snmpNotifyFilterEntry, = mibBuilder.importSymbols('SNMP-NOTIFICATION-MIB',
+ 'snmpNotifyFilterEntry')
tblIdx3 = snmpNotifyFilterEntry.getInstIdFromIndices(profileName,
filterSubtree)
else:
@@ -547,6 +606,7 @@ def __cookNotificationTargetInfo(snmpEngine, notificationName, paramsName,
snmpNotifyFilterProfileEntry, tblIdx2, profileName,
snmpNotifyFilterEntry, tblIdx3)
+
def addNotificationTarget(snmpEngine, notificationName, paramsName,
transportTag, notifyType=None, filterSubtree=None,
filterMask=None, filterType=None):
@@ -585,6 +645,7 @@ def addNotificationTarget(snmpEngine, notificationName, paramsName,
(snmpNotifyFilterEntry.name + (5,) + tblIdx3, 'createAndGo'))
)
+
def delNotificationTarget(snmpEngine, notificationName, paramsName,
filterSubtree=None):
(snmpNotifyEntry, tblIdx1, snmpNotifyFilterProfileEntry,
@@ -607,6 +668,7 @@ def delNotificationTarget(snmpEngine, notificationName, paramsName,
((snmpNotifyFilterEntry.name + (5,) + tblIdx3, 'destroy'),)
)
+
# rfc3415: A.1
def setInitialVacmParameters(snmpEngine):
# rfc3415: A.1.1 --> initial-semi-security-configuration