Я пишу субагент 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, но я получаю ту же ошибку.
Любые комментарии или предложения приветствуются.