Esempio n. 1
0
    def makeVarBinds(self, snmpEngine, varBinds, oidOnly=False):
        cache = self._getCmdCache(snmpEngine)
        mibViewController = cache['mibViewController']
        __varBinds = []
        for varName, varVal in varBinds:
            if isinstance(varName, MibVariable):
                if oidOnly or isinstance(varVal, base.AbstractSimpleAsn1Item):
                    varName.resolveWithMib(mibViewController, oidOnly=True)
                else:
                    varName.resolveWithMib(mibViewController)
                    varVal = varName.getMibNode().getSyntax().clone(varVal)
            elif isinstance(varName[0], tuple):  # legacy
                varName = MibVariable(varName[0][0], varName[0][1], *varName[1:]).resolveWithMib(mibViewController)
                if not oidOnly and \
                        not isinstance(varVal, base.AbstractSimpleAsn1Item):
                    varVal = varName.getMibNode().getSyntax().clone(varVal)
            else:
                if oidOnly or isinstance(varVal, base.AbstractSimpleAsn1Item):
                    varName = MibVariable(varName).resolveWithMib(mibViewController, oidOnly=True)
                else:
                    varName = MibVariable(varName).resolveWithMib(mibViewController)
                    varVal = varName.getMibNode().getSyntax().clone(varVal)

            __varBinds.append((varName, varVal))

        return __varBinds
Esempio n. 2
0
    def setCmd(self, authData, transportTarget, varBinds, cbInfo):
        (cbFun, cbCtx) = cbInfo
        addrName, paramsName = self.cfgCmdGen(
            authData, transportTarget
            )
        __varBinds = []
        for varName, varVal in varBinds:
            if isinstance(varName, MibVariable):
                varName.resolveWithMib(self.mibViewController)
                if not isinstance(varVal, base.AbstractSimpleAsn1Item):
                    varVal = varName.getMibNode().getSyntax().clone(varVal)
            elif isinstance(varName[0], tuple):  # legacy
                varName = MibVariable(varName[0][0], varName[0][1], *varName[1:]).resolveWithMib(self.mibViewController)
                if not isinstance(varVal, base.AbstractSimpleAsn1Item):
                    varVal = varName.getMibNode().getSyntax().clone(varVal)
            else:
                if isinstance(varVal, base.AbstractSimpleAsn1Item):
                    varName = MibVariable(varName).resolveWithMib(self.mibViewController, oidOnly=True)
                else:
                    varName = MibVariable(varName).resolveWithMib(self.mibViewController)
                    varVal = varName.getMibNode().getSyntax().clone(varVal)

            __varBinds.append((varName, varVal))
        return cmdgen.SetCommandGenerator().sendReq(
            self.snmpEngine, addrName, __varBinds, cbFun, cbCtx,
            authData.contextEngineId, authData.contextName
            )
Esempio n. 3
0
    def sendNotification(
        self, authData, transportTarget, notifyType,
        notificationType=None, varBinds=None, cbInfo=(None, None)
        ):
        (cbFun, cbCtx) = cbInfo
        notifyName = self.cfgNtfOrg(authData, transportTarget, notifyType)
        if notificationType is not None:
            if isinstance(notificationType, MibVariable):
                notificationType = notificationType.resolveWithMib(self.mibViewController, oidOnly=True)
            elif isinstance(notificationType[0], tuple):  # legacy
                notificationType = MibVariable(notificationType[0][0], notificationType[0][1], *notificationType[1:]).resolveWithMib(self.mibViewController)
        if varBinds:
            __varBinds = []
            for varName, varVal in varBinds:
                if isinstance(varName, MibVariable):
                    varName.resolveWithMib(self.mibViewController)
                    if not isinstance(varVal, base.AbstractSimpleAsn1Item):
                        varVal = varName.getMibNode().getSyntax().clone(varVal)
                elif isinstance(varName[0], tuple):  # legacy
                    varName = MibVariable(varName[0][0], varName[0][1], *varName[1:]).resolveWithMib(self.mibViewController)
                    if not isinstance(varVal, base.AbstractSimpleAsn1Item):
                        varVal = varName.getMibNode().getSyntax().clone(varVal)
                else:
                    if isinstance(varVal, base.AbstractSimpleAsn1Item):
                        varName = MibVariable(varName).resolveWithMib(self.mibViewController, oidOnly=True)
                    else:
                        varName = MibVariable(varName).resolveWithMib(self.mibViewController)
                        varVal = varName.getMibNode().getSyntax().clone(varVal)
                        
                __varBinds.append((varName, varVal))
        else:
            __varBinds = None

        return ntforg.NotificationOriginator(self.snmpContext).sendNotification(self.snmpEngine, notifyName, notificationType, __varBinds, cbFun, cbCtx)
Esempio n. 4
0
    def makeVarBinds(self, varBinds, oidOnly=False):
        __varBinds = []
        for varName, varVal in varBinds:
            if isinstance(varName, MibVariable):
                if oidOnly or isinstance(varVal, base.AbstractSimpleAsn1Item):
                    varName.resolveWithMib(self.mibViewController,
                                           oidOnly=True)
                else:
                    varName.resolveWithMib(self.mibViewController)
                    varVal = varName.getMibNode().getSyntax().clone(varVal)
            elif isinstance(varName[0], tuple):  # legacy
                varName = MibVariable(varName[0][0], varName[0][1],
                                      *varName[1:]).resolveWithMib(
                                          self.mibViewController)
                if not oidOnly and \
                        not isinstance(varVal, base.AbstractSimpleAsn1Item):
                    varVal = varName.getMibNode().getSyntax().clone(varVal)
            else:
                if oidOnly or isinstance(varVal, base.AbstractSimpleAsn1Item):
                    varName = MibVariable(varName).resolveWithMib(
                        self.mibViewController, oidOnly=True)
                else:
                    varName = MibVariable(varName).resolveWithMib(
                        self.mibViewController)
                    varVal = varName.getMibNode().getSyntax().clone(varVal)

            __varBinds.append((varName, varVal))

        return __varBinds
Esempio n. 5
0
 def unmakeVarBinds(self, varBinds, lookupNames=True, lookupValues=True):
     _varBinds = []
     for name, value in varBinds:
         if lookupNames or lookupValues:
             varName = MibVariable(name).resolveWithMib(self.mibViewController)
         if lookupNames:
             name = varName
         if lookupValues:
             if value.tagSet not in (rfc1905.NoSuchObject.tagSet,
                                     rfc1905.NoSuchInstance.tagSet,
                                     rfc1905.EndOfMibView.tagSet):
                 value = varName.getMibNode().getSyntax().clone(value)
         _varBinds.append((name, value))
     return _varBinds
Esempio n. 6
0
    def setCmd(self, authData, transportTarget, varBinds, cbInfo):
        (cbFun, cbCtx) = cbInfo
        addrName, paramsName = self.cfgCmdGen(authData, transportTarget)
        __varBinds = []
        for varName, varVal in varBinds:
            if isinstance(varName, MibVariable):
                varName.resolveWithMib(self.mibViewController)
                if not isinstance(varVal, base.AbstractSimpleAsn1Item):
                    varVal = varName.getMibNode().getSyntax().clone(varVal)
            elif isinstance(varName[0], tuple):  # legacy
                varName = MibVariable(varName[0][0], varName[0][1],
                                      *varName[1:]).resolveWithMib(
                                          self.mibViewController)
                if not isinstance(varVal, base.AbstractSimpleAsn1Item):
                    varVal = varName.getMibNode().getSyntax().clone(varVal)
            else:
                if isinstance(varVal, base.AbstractSimpleAsn1Item):
                    varName = MibVariable(varName).resolveWithMib(
                        self.mibViewController, oidOnly=True)
                else:
                    varName = MibVariable(varName).resolveWithMib(
                        self.mibViewController)
                    varVal = varName.getMibNode().getSyntax().clone(varVal)

            __varBinds.append((varName, varVal))
        return cmdgen.SetCommandGenerator().sendReq(self.snmpEngine, addrName,
                                                    __varBinds, cbFun, cbCtx,
                                                    authData.contextEngineId,
                                                    authData.contextName)
Esempio n. 7
0
 def makeReadVarBinds(self, varNames):
     varBinds = []
     for varName in varNames:
         if isinstance(varName, MibVariable):
             varName.resolveWithMib(self.mibViewController, oidOnly=True)
         elif isinstance(varName[0], tuple):  # legacy
             varName = MibVariable(varName[0][0], varName[0][1],
                                   *varName[1:]).resolveWithMib(
                                       self.mibViewController)
         else:
             varName = MibVariable(varName).resolveWithMib(
                 self.mibViewController, oidOnly=True)
         varBinds.append((varName, self._null))
     return varBinds
Esempio n. 8
0
 def unmakeVarBinds(self, varBinds, lookupNames=True, lookupValues=True):
     _varBinds = []
     for name, value in varBinds:
         if lookupNames or lookupValues:
             varName = MibVariable(name).resolveWithMib(
                 self.mibViewController)
         if lookupNames:
             name = varName
         if lookupValues:
             if value.tagSet not in (rfc1905.NoSuchObject.tagSet,
                                     rfc1905.NoSuchInstance.tagSet,
                                     rfc1905.EndOfMibView.tagSet):
                 value = varName.getMibNode().getSyntax().clone(value)
         _varBinds.append((name, value))
     return _varBinds
Esempio n. 9
0
    def sendNotification(self,
                         authData,
                         transportTarget,
                         notifyType,
                         notificationType=None,
                         varBinds=None,
                         cbInfo=(None, None)):
        (cbFun, cbCtx) = cbInfo
        notifyName = self.cfgNtfOrg(authData, transportTarget, notifyType)
        if notificationType is not None:
            if isinstance(notificationType, MibVariable):
                notificationType = notificationType.resolveWithMib(
                    self.mibViewController, oidOnly=True)
            elif isinstance(notificationType[0], tuple):  # legacy
                notificationType = MibVariable(
                    notificationType[0][0], notificationType[0][1],
                    *notificationType[1:]).resolveWithMib(
                        self.mibViewController)
        if varBinds:
            __varBinds = []
            for varName, varVal in varBinds:
                if isinstance(varName, MibVariable):
                    varName.resolveWithMib(self.mibViewController)
                    if not isinstance(varVal, base.AbstractSimpleAsn1Item):
                        varVal = varName.getMibNode().getSyntax().clone(varVal)
                elif isinstance(varName[0], tuple):  # legacy
                    varName = MibVariable(varName[0][0], varName[0][1],
                                          *varName[1:]).resolveWithMib(
                                              self.mibViewController)
                    if not isinstance(varVal, base.AbstractSimpleAsn1Item):
                        varVal = varName.getMibNode().getSyntax().clone(varVal)
                else:
                    if isinstance(varVal, base.AbstractSimpleAsn1Item):
                        varName = MibVariable(varName).resolveWithMib(
                            self.mibViewController, oidOnly=True)
                    else:
                        varName = MibVariable(varName).resolveWithMib(
                            self.mibViewController)
                        varVal = varName.getMibNode().getSyntax().clone(varVal)

                __varBinds.append((varName, varVal))
        else:
            __varBinds = None

        return ntforg.NotificationOriginator(
            self.snmpContext).sendNotification(self.snmpEngine, notifyName,
                                               notificationType, __varBinds,
                                               cbFun, cbCtx)
Esempio n. 10
0
 def unmakeVarBinds(self, snmpEngine, varBinds, lookupNames, lookupValues):
     if lookupNames or lookupValues:
         cache = self._getCmdCache(snmpEngine)
         mibViewController = cache['mibViewController']            
         _varBinds = []
         for name, value in varBinds:
             varName = MibVariable(name).resolveWithMib(mibViewController)
             if lookupNames:
                 name = varName
             if lookupValues:
                 if value.tagSet not in (rfc1905.NoSuchObject.tagSet,
                                         rfc1905.NoSuchInstance.tagSet,
                                         rfc1905.EndOfMibView.tagSet):
                     if varName.isFullyResolved():
                         value = varName.getMibNode().getSyntax().clone(value)
             _varBinds.append((name, value))
         return _varBinds
     else:
         return varBinds
    def sendNotification(self,
                         authData,
                         transportTarget,
                         notifyType,
                         notificationType,
                         varBinds=(),
                         cbInfo=(None, None),
                         lookupNames=False,
                         lookupValues=False,
                         contextName=null):
        def __cbFun(sendRequestHandle, errorIndication, errorStatus,
                    errorIndex, varBinds, cbCtx):
            lookupNames, lookupValues, cbFun, cbCtx = cbCtx
            if cbFun is None:  # user callback not supplied
                return
            try:
                # we need to pass response PDU information to user for INFORMs
                return cbFun(
                    sendRequestHandle, errorIndication, errorStatus,
                    errorIndex,
                    self.unmakeVarBinds(varBinds, lookupNames,
                                        lookupValues), cbCtx)
            except TypeError:
                # a backward compatible way of calling user function
                return cbFun(sendRequestHandle, errorIndication, cbCtx)

        # for backward compatibility
        if contextName is null and authData.contextName:
            contextName = authData.contextName

        (cbFun, cbCtx) = cbInfo

        # Create matching transport tags if not given by user
        if not transportTarget.tagList:
            transportTarget.tagList = str(
                hash((authData.securityName, transportTarget.transportAddr)))
        if isinstance(authData, CommunityData) and not authData.tag:
            authData.tag = transportTarget.tagList.split()[0]

        notifyName = self.cfgNtfOrg(authData, transportTarget, notifyType)
        if isinstance(notificationType, MibVariable):
            notificationType = notificationType.resolveWithMib(
                self.mibViewController, oidOnly=True)
        elif isinstance(notificationType[0], tuple):  # legacy
            notificationType = MibVariable(
                notificationType[0][0], notificationType[0][1],
                *notificationType[1:]).resolveWithMib(self.mibViewController)

        return ntforg.NotificationOriginator(
            self.snmpContext).sendNotification(
                self.snmpEngine, notifyName, notificationType,
                self.makeVarBinds(varBinds), __cbFun,
                (lookupNames, lookupValues, cbFun, cbCtx), contextName)
Esempio n. 12
0
    def sendNotification(self,
                         authData,
                         transportTarget,
                         notifyType,
                         notificationType,
                         varBinds=(),
                         cbInfo=(None, None),
                         lookupNames=False,
                         lookupValues=False,
                         contextName=null):
        def __cbFun(sendRequestHandle, errorIndication, errorStatus,
                    errorIndex, varBinds, cbCtx):
            cbFun, cbCtx = cbCtx
            try:
                # we need to pass response PDU information to user for INFORMs
                return cbFun and cbFun(sendRequestHandle, errorIndication,
                                       errorStatus, errorIndex, varBinds,
                                       cbCtx)
            except TypeError:
                # a backward compatible way of calling user function
                return cbFun(sendRequestHandle, errorIndication, cbCtx)

        # for backward compatibility
        if contextName is null and authData.contextName:
            contextName = authData.contextName

        # legacy
        if not isinstance(notificationType, MibVariable) and \
                isinstance(notificationType[0], tuple):
            notificationType = MibVariable(
                notificationType[0][0], notificationType[0][1],
                *notificationType[1:]).resolveWithMib(self.mibViewController)

        return self.__asyncNtfOrg.sendNotification(
            self.snmpEngine, self.snmpContext, authData, transportTarget,
            notifyType, notificationType, varBinds, (__cbFun, cbInfo),
            lookupNames, lookupValues, contextName)