示例#1
0
 def test_add_transport_successful(self):
     trap_receiver_inst = self._get_trap_receiver()
     trap_receiver_inst.snmp_engine = engine.SnmpEngine()
     trap_receiver_inst.trap_receiver_address = self.DEF_TRAP_RECV_ADDR
     trap_receiver_inst.trap_receiver_port = self.DEF_TRAP_RECV_PORT
     trap_receiver_inst._add_transport()
     get_transport = config.getTransport(trap_receiver_inst.snmp_engine,
                                         udp.domainName)
     # Verify that snmp engine transport config is set after _add_transport
     self.assertTrue(get_transport is not None)
示例#2
0
文件: lcd.py 项目: bbmorten/pysnmp
    def configure(self, snmpEngine, authData, transportTarget, *options):
        cache = self._getCache(snmpEngine)
        if isinstance(authData, CommunityData):
            if authData.communityIndex not in cache['auth']:
                config.addV1System(
                    snmpEngine,
                    authData.communityIndex,
                    authData.communityName,
                    authData.contextEngineId,
                    authData.contextName,
                    authData.tag,
                    authData.securityName
                )
                cache['auth'][authData.communityIndex] = authData
        elif isinstance(authData, UsmUserData):
            authDataKey = authData.userName, authData.securityEngineId
            if authDataKey not in cache['auth']:
                config.addV3User(
                    snmpEngine,
                    authData.userName,
                    authData.authProtocol, authData.authKey,
                    authData.privProtocol, authData.privKey,
                    authData.securityEngineId,
                    securityName=authData.securityName
                )
                cache['auth'][authDataKey] = authData
        else:
            raise error.PySnmpError('Unsupported authentication object')

        paramsKey = (authData.securityName,
                     authData.securityLevel,
                     authData.mpModel)
        if paramsKey in cache['parm']:
            paramsName, useCount = cache['parm'][paramsKey]
            cache['parm'][paramsKey] = paramsName, useCount + 1
        else:
            paramsName = 'p%s' % self.nextID()
            config.addTargetParams(
                snmpEngine, paramsName,
                authData.securityName, authData.securityLevel, authData.mpModel
            )
            cache['parm'][paramsKey] = paramsName, 1

        if transportTarget.transportDomain in cache['tran']:
            transport, useCount = cache['tran'][transportTarget.transportDomain]
            transportTarget.verifyDispatcherCompatibility(snmpEngine)
            cache['tran'][transportTarget.transportDomain] = transport, useCount + 1
        elif config.getTransport(snmpEngine, transportTarget.transportDomain):
            transportTarget.verifyDispatcherCompatibility(snmpEngine)
        else:
            transport = transportTarget.openClientMode()
            config.addTransport(
                snmpEngine,
                transportTarget.transportDomain,
                transport
            )
            cache['tran'][transportTarget.transportDomain] = transport, 1

        transportKey = (paramsName, transportTarget.transportDomain,
                        transportTarget.transportAddr,
                        transportTarget.tagList)

        if transportKey in cache['addr']:
            addrName, useCount = cache['addr'][transportKey]
            cache['addr'][transportKey] = addrName, useCount + 1
        else:
            addrName = 'a%s' % self.nextID()
            config.addTargetAddr(
                snmpEngine, addrName,
                transportTarget.transportDomain,
                transportTarget.transportAddr,
                paramsName,
                transportTarget.timeout * 100,
                transportTarget.retries,
                transportTarget.tagList
            )
            cache['addr'][transportKey] = addrName, 1

        return addrName, paramsName
示例#3
0
    def configure(self, snmpEngine, authData, transportTarget, contextName,
                  **options):
        cache = self._getCache(snmpEngine)

        if isinstance(authData, CommunityData):
            if authData.communityIndex not in cache['auth']:
                config.addV1System(snmpEngine, authData.communityIndex,
                                   authData.communityName,
                                   authData.contextEngineId,
                                   authData.contextName, authData.tag,
                                   authData.securityName)

                cache['auth'][authData.communityIndex] = authData

        elif isinstance(authData, UsmUserData):
            authDataKey = authData.userName, authData.securityEngineId

            if authDataKey not in cache['auth']:
                config.addV3User(snmpEngine,
                                 authData.userName,
                                 authData.authProtocol,
                                 authData.authKey,
                                 authData.privProtocol,
                                 authData.privKey,
                                 securityEngineId=authData.securityEngineId,
                                 securityName=authData.securityName,
                                 authKeyType=authData.authKeyType,
                                 privKeyType=authData.privKeyType)

                cache['auth'][authDataKey] = authData

        else:
            raise error.PySnmpError('Unsupported authentication object')

        paramsKey = (authData.securityName, authData.securityLevel,
                     authData.mpModel)

        if paramsKey in cache['parm']:
            paramsName, useCount = cache['parm'][paramsKey]

            cache['parm'][paramsKey] = paramsName, useCount + 1

        else:
            paramsName = 'p%s' % self.nextID()
            config.addTargetParams(snmpEngine, paramsName,
                                   authData.securityName,
                                   authData.securityLevel, authData.mpModel)

            cache['parm'][paramsKey] = paramsName, 1

        if transportTarget.TRANSPORT_DOMAIN in cache['tran']:
            transport, useCount = cache['tran'][
                transportTarget.TRANSPORT_DOMAIN]
            transportTarget.verifyDispatcherCompatibility(snmpEngine)

            cache['tran'][
                transportTarget.TRANSPORT_DOMAIN] = transport, useCount + 1

        elif config.getTransport(snmpEngine, transportTarget.TRANSPORT_DOMAIN):
            transportTarget.verifyDispatcherCompatibility(snmpEngine)

        else:
            transport = transportTarget.openClientMode()

            config.addTransport(snmpEngine, transportTarget.TRANSPORT_DOMAIN,
                                transport)

            cache['tran'][transportTarget.TRANSPORT_DOMAIN] = transport, 1

        transportKey = (paramsName, transportTarget.TRANSPORT_DOMAIN,
                        transportTarget.transportAddr, transportTarget.timeout,
                        transportTarget.retries, transportTarget.tagList,
                        transportTarget.iface)

        if transportKey in cache['addr']:
            addrName, useCount = cache['addr'][transportKey]
            cache['addr'][transportKey] = addrName, useCount + 1

        else:
            addrName = 'a%s' % self.nextID()

            config.addTargetAddr(snmpEngine, addrName,
                                 transportTarget.TRANSPORT_DOMAIN,
                                 transportTarget.transportAddr, paramsName,
                                 transportTarget.timeout * 100,
                                 transportTarget.retries,
                                 transportTarget.tagList)

            cache['addr'][transportKey] = addrName, 1

        return addrName, paramsName