2013-07-15 7 views
1

Я работаю над агентом SNMP, использующим net-snmp и разрабатывая MIB для данных, хранящихся в таблицах.SNMP-индекс таблицы с использованием октетной строки

Я рассматриваю использование ключа таблицы на основе строки около 15 десятичных цифр.

Можно ли использовать это как индекс OCTET STRING?

Даже если я кодирую 2 цифры на октет, это будет около 8 октетов.

С индексом OCTET STRING каждый октет будет добавлен как узел к OID.

Я знаю, что могу преобразовать это в целое число (ы), но десятичные цифры могут иметь начальные нули.

Есть ли у вас какие-либо мнения или предложения?

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

ответ

2

Вы можете положить нули в OCTET STRINGS, так что да, вы можете сделать это таким образом. OCTET STRINGS могут содержать двоичные данные и кодируются как просто число в OID. API Net-SNMP принимает не только указатель на char *, но и длину возвращаемых данных. И это специально потому, что вполне законно иметь OCTET STRINGS с нулевыми значениями, закодированными внутри него.

На OID стороны, если вы имели строку, состоящую из символов A, B, D 0 это вообще будет закодировано как:

blah.blah.4.65.66.0.67

Где- длина строки. Если OCTET STRING отмечена как IMPLICIT, то 4 будет опущен.

Вы кодируете десятичные цифры в строку, поэтому ваши значения будут ближе к вещам типа 0x15, 0x04, 0x42 и т. Д. Это тоже хорошо (вы строите двоичную строку).

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

+0

Я m не уверен, что длина OCTET STRING (4 в приведенном выше примере) действительно необходима, так как даже если есть октеты нулевого значения (0x00) или даже если число октетов (или цифр) является переменной, OID и OCTET STRINGs имеют длины, связанные с фактическими значениями, т. е. они не совпадают с строками с нулевым символом. Кроме того, узлы индекса находятся в конце последовательности OID, поэтому, если вы знаете, что такое основа OID (blah.blah в приведенном выше примере), вы можете узнать, какие части OID составляют индекс. Я думаю, кто-то мог кодировать частичный индекс, но это было бы неправильно? – NetHead

+1

Как кодируется OID, очень стандартизирован. Если индекс указан как только OCTET STRING, длина (4) ДОЛЖНА быть в OID (и такие инструменты, как snmpwalk, ожидают этого). Если индекс указан как IMPLICIT OCTET STRING, то он должен быть последним индексом, а длина ДОЛЖНА быть опущена. –

+0

Есть ли загружаемые агенты SNMP, используя таблицу с индексом, который содержит более одного узла в OID, например, OCTET STRING? Я хотел бы протестировать SNMP get/sets и т. Д., Включая добавление и удаление строк (используя столбец rowStatus). В идеале, если есть агент, я могу просто загрузить и запустить ... с минимальным количеством конфигурации и работы. Я получаю «никаких данных» из моего браузера MIB, когда я отправляю запросы на snmpd (версия 5.7.2) Net-SNMP в моем ящике Linux для любой из таблиц RFC 1213 с индексами «нескольких узлов». Или, возможно, мне нужно настроить что-то для этого? – NetHead