Динамическое увеличение OID в агенте SNMP

Я написал код агента SNMP, настроив два разных имени контекста в экземпляре класса SnmpContext. Он зарегистрирует дерево MIB под определенным contextName, как показано ниже:

class Test():
    def readVars (self , varBinds, acInfo=(None, None)):
            retItem = []
            for ov in varBinds:
                if str(ov[0]) == '1.3.6.1.4.1.26262.1.1.1.0':
                    retItem.extend([(ov[0], v2c.OctetString('%s' % 'value1'))])
                elif str(ov[0]) == '1.3.6.1.4.1.26262.1.1.2.0':
                    retItem.extend([(ov[0], v2c.OctetString('%s' % 'value2'))])
                . 
                .
                .
            return retItem

    def readNextVars (self , varBinds, acInfo=(None, None)):
            retItem = []
            for ov in varBinds:
                if str(ov[0]) == '1.3.6.1.4.1.26262.1.1.1.0':
                    retItem.extend([('1.3.6.1.4.1.26262.1.1.2.0', v2c.OctetString('%s' %  'value2'))])
                elif str(ov[0]) == '1.3.6.1.4.1.26262.1.1.2.0':
                    retItem.extend([('1.3.6.1.4.1.26262.1.1.3.1.1.0', v2c.OctetString('%s' % 'value3'))])
                .
                .
                .
                .
            else:
                    retItem.extend([('1.3.6.1.4.1.26262.1.1.1.0', v2c.OctetString('%s' % 'value1'))])
            return retItem


mibTreeA = Test()
snmpContext.registerContextName(v2c.OctetString('context-a'), mibTreeA)
snmpContext.registerContextName(v2c.OctetString('context-b'), mibTreeA)

Как в примере sample

Здесь следующий OID возвращается путем проверки условия с использованием оператора if. Но у меня есть несколько OID, и увеличение этого с помощью оператора if было бы болезненным.

Поэтому я хотел бы знать, есть ли способ динамически увеличивать OID? Любой пример сценария будет полезен.

Заранее спасибо.


person Shri    schedule 03.01.2020    source источник


Ответы (1)


Альтернативным подходом может быть использование dict пар OID-значение (где значение может быть вызываемым), то метод .nextKey будет выполнять часть увеличения?

Другими словами, возможно, все эти if условия можно было бы сложить в некую упорядоченную структуру данных, поддерживающую по существу две операции:

  • получить следующий элемент
  • получить значение, связанное с элементом
person Ilya Etingof    schedule 26.01.2020