При попытке управлять объектом MIB TimeStamp из субагента net -snmp появляется ошибка «Неверный тип (должен быть Timeticks)» - PullRequest
0 голосов
/ 24 февраля 2020

Я пишу субагент snmp, который обрабатывает (получает и устанавливает) этот объект MIB:

myDateTime  OBJECT-TYPE
    SYNTAX      TimeStamp
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Field to store Date and Time"
    ::= { baseVars 9 }

Я использую mib2 c, чтобы получить файлы myDateTime.h и myDateTime. c

Учитывая, что метка времени представляет миллисекунды с 1 января 1970 года 01:00:00 по Гринвичу + 0100, я объявил переменную типа long в myDateTime. c и добавил следующий код:

long myDateTime = 0;

. . .

handle_systemDateTime(netsnmp_mib_handler *handler,
                      netsnmp_handler_registration *reginfo,
                      netsnmp_agent_request_info   *reqinfo,
                      netsnmp_request_info         *requests)
{
  switch(reqinfo->mode) {
    case MODE_GET:
      snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
                     (void*)&systemDateTime,
                     sizeof(systemDateTime));
      break;

. . .

Но это не работает должным образом, потому что когда я запускаю команду get, я получаю сообщение об ошибке:

$ snmpget -v 2c -c public localhost MY-MIB:myDateTime.0
    MY-MIB::myDateTime.0 = Wrong Type (should be Timeticks): INTEGER: 0

Поиск информации в Интернете об этой ошибке, которую я нашел:

TimeTicks: time value coded to a unsigned 32 bit value into 1/100 of second.

Затем я изменил код myDateTime. c, объявив myDateTime типа int вместо long, но я получаю ту же ошибку.

Любые комментарии или предложения приветствуются.

...