Мне удалось преобразовать 95% выделенного MIB-кода в код C и заставить его работать в субагенте, как описано в последней части этого Руководство по Net-SNMP
Для этого я, естественно, использую mib2c.mfd.conf (я только что прочитал, что mfd расшифровывается как Mib For Dummies... все сказано...)
mib2c -I -c mib2c.mfd.conf my_mib_node
Он сгенерировал длинный файл .c почти со всеми oids, как показано ниже.
Почти не было создано строк для OID VideoInetAddr
//ABSTRACT OF SOURCE FILE GENERATED BY MIB2C
//...
long VideoFormat = 0; /* XXX: set default value */
// <<<=== NOTHING GENERATED HERE FOR VideoInetAddr OF TYPE INETADDRESS
// WHEREAS OTHER INTEGERS ARE NORMALLY PRESENT
long VideoInetPort = 0; /* XXX: set default value */
//...
void init_my_mib_node(void)
{
//...
const oid VideoFormat_oid[] = { 1,3,6,1,4,1,a,b,c,d,e };
static netsnmp_watcher_info VideoFormat_winfo;
// <<<=== NO OID GENERATED for VideoInetAddr OF TYPE INETADDRESS
// WHEREAS OTHER OIDs ARE NORMALLY GENERATED
static netsnmp_watcher_info VideoInetAddr_winfo; //We have the winfo after all
const oid VideoInetPort_oid[] = { 1,3,6,1,4,1,a,b,c,d,g };
static netsnmp_watcher_info VideoInetPort_winfo;
DEBUGMSGTL(("my_mib_node",
"Initializing VideoFormat scalar integer. Default value = %d\n",
VideoFormat));
reg = netsnmp_create_handler_registration(
"VideoFormat", NULL,
VideoFormat_oid, OID_LENGTH(VideoFormat_oid),
HANDLER_CAN_RWRITE);
netsnmp_init_watcher_info(&VideoFormat_winfo, &VideoFormat,
sizeof(long),ASN_INTEGER, WATCHER_FIXED_SIZE);
if (netsnmp_register_watched_scalar( reg, &VideoFormat_winfo ) < 0 ) {
snmp_log( LOG_ERR, "Failed to register watched VideoFormat" );
//...
}
Это сработало нормально и потребовало 5 минут (не нужно писать код, просто вызовите функцию init()), я смог ПОЛУЧИТЬ и УСТАНОВИТЬ все... целые числа...
Некоторые oids типа InetAddress не были сгенерированы, как и строки
Вопрос
- Есть ли файл mib conf, способный генерировать код для каждого типа
Я попробовал mib2c.old-api.conf, который генерирует код и для нецелочисленных oid, но я считаю его не таким удобным. Нужно написать больше шаблонного кода.