Используя тип int64 для snmp v2c oid?

Я отлаживаю некоторый код snmp для целочисленной проблемы переполнения. В основном мы используем целое число для хранения емкости диска / рейда в килобайтах. Однако при использовании диска / рейда более 2 ТБ он переполнится.

Я читал на некоторых интернет-форумах, что snmp v2c поддерживает integer64 или unsigned64. В моем тесте он все равно просто отправит младшие 32 бита, хотя я установил тип integer64 или unsigned64.

Вот как я это сделал:

  1. отдельная программа получит емкость и запишет данные в файл. пример строки для рейдов

    my-sub-oid
    Counter64
    7813857280
    
  2. /etc/snmp/snmpd.conf содержит предложение для передачи через oids:

    pass_persist mymiboid /path/to/snmpagent
    
  3. в источнике mysnmpagent прочитайте oidmap в структуру oid/type/value из файла и напечатайте в stdout.

    printf("%s\n", it->first.c_str());
    printf("%s\n", it->second.type.c_str());
    printf("%s\n", it->second.value.c_str());
    fflush(stdout);
    
  4. используйте snmpget, чтобы получить подчиненный идентификатор, и он возвращает:

    mysuboid = Counter32: 3518889984
    
  5. Я использую tcpdump и последний сегмент части значения:

    41 0500 d1be 0000
    

41 должен быть тегом, 05 должен быть длиной, а значение переносится только на 32 младших бита емкости. (примечание 7813857280 - 0x1.d1.be.00.00)

Я считаю, что использование строкового типа будет отправлять правильное значение (в формате октетной строки). Но я хочу знать, есть ли способ использовать 64-разрядное целое число в snmp v2c.

Я использую NET-SNMP 5.4.2.1. большое спасибо.

Обновить:

Находя следующее из snmpd.conf относительно pass (и, вероятно, также pass_persist) на странице документации net-snmp. Я предполагаю, что это заставляет Counter64 к Counter32.

Note:
The SMIv2 type counter64 and SNMPv2 noSuchObject exception are not supported.

2 ответа

Вы должны использовать два Unsigned32 для младшего и старшего байтов вашего большого числа.

Counter64 не предназначен для использования таким образом для больших чисел.

Для справки: 17 распространенных ошибок проектирования MIB (последняя)

SNMP SMIv2 определяет новый тип Counter64,

http://tools.ietf.org/html/rfc2578

который на самом деле является 64-разрядным целым числом без знака. Так что, если ваши данные попадают в диапазон, использование Counter64 является правильным.

"В моем тесте он все равно будет просто отправлять младшие 32 бита, даже если я установил тип на integer64 или unsigned64", звучит как проблема, но если вы не покажете больше подробностей (например, показ кода), как вы его тестировали и Получив результат, никто не может помочь дальше.

Другие вопросы по тегам