Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Протокол SNMP в LwIP.
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Fast Ethernet/Gigabit Ethernet/FibreChannel
Whisper_84
Пытаюсь разобраться с работой SNMP в стеке LwIP. Нужно реализовать агент и посылать трапы.
Есть ли у кого-нибудь опыт реализации агента в LwIP?
ab1000
На сайте LwIP есть собрание примеров в файле contrib-1.4.1.zip. Там есть пример написания своего private_mib. Так же в дистрибутиве LwIP в папке doc есть файл snmp_agent.txt там кратенько описано как начать работать с SNMP.
Whisper_84
Цитата(ab1000 @ Aug 14 2015, 10:45) *
На сайте LwIP есть собрание примеров в файле contrib-1.4.1.zip. Там есть пример написания своего private_mib. Так же в дистрибутиве LwIP в папке doc есть файл snmp_agent.txt там кратенько описано как начать работать с SNMP.

Спасибо за отклик. Недавно смотрел реализацию private_mib в версии contrib-1.4.0, собственно, мало что понял. Сейчас гляну 1.4.1, может там есть изменения.
Я написал простенький MIB файл в txt и переконвертировал его с помощью python скрипта в с-файл. Скрипт специально написан для LwIP и рекомендован пользователями. В полученном исходнике необходимо написать реализацию функции lwip_privmib_init(). С этим возникли проблемы.
Прикрепил файлы текстового MIB и полученного исходника (исходник в txt, с - загрузить не могу).
ab1000
У меня этой функции нет, она не реализована, вернее закоментирована. Я так понял в ней реализовывается какой нибудь предврительный код перед работой с Вашими MIB.
Я си файл без утилиты питоновской создавал (вернее правил, содавал коллега rolleyes.gif так что основа у меня была).
А что, с полученными файлами проект не компилируется? Что то не работает?
Whisper_84
Цитата(ab1000 @ Aug 14 2015, 11:39) *
У меня этой функции нет, она не реализована, вернее закоментирована. Я так понял в ней реализовывается какой нибудь предврительный код перед работой с Вашими MIB.
Я си файл без утилиты питоновской создавал (вернее правил, содавал коллега rolleyes.gif так что основа у меня была).
А что, с полученными файлами проект не компилируется? Что то не работает?


Проект компилируется, но непонятно как подцепить мой объект из private_mib ко внутренностям snmp.

А как у вас проходит инициализация и работа самого snmp? В коротком описании сказано что необходимо вызывать функцию snmp_inc_sysuptime() каждые 10ms. Разве этого достаточно?

Извиняюсь за возможно глупые вопросы, но я пытаюсь разобраться.

Вы можете привести свой private_mib хотя бы частично?
ab1000
Да, функцию snmp_inc_sysuptime() нужно вызывать в приложении каждые 10 мс. Кроме того должны быть разрешены как минимум 2 UDP соединения это настройка MEMP_NUM_UDP_PCB. Ну и в настройках SNMP должно быть включено само SNMP и использование private _mib. Но судя по тому, что проект у Вас компилируется это все включено.

Моя функция для инициализации SNMP:
CODE
// подготовка к работе SNMP ---------------------------------------------------
void SnmpPrepareForWork(void)
{
struct ip_addr xIpAddr;
struct snmp_obj_id SnmpObjId;


// установка sysName
snmp_set_sysname((u8_t*)Sysname, (u8_t*)&Sysname_len);
// установка sysDescr
snmp_set_sysdesr((u8_t*)Sysdescr, (u8_t*)&Sysdescr_len);
// установка sysContact
snmp_set_syscontact((u8_t*)Syscontact, (u8_t*)&Syscontact_len);
// установка sysLocation
snmp_set_syslocation((u8_t*)Syslocation, (u8_t*)&Syslocation_len);

// задаем SNMP_SYSOBJID
SnmpObjId.len = 9;
SnmpObjId.id[0] = 1;
SnmpObjId.id[1] = 3;
SnmpObjId.id[2] = 6;
SnmpObjId.id[3] = 1;
SnmpObjId.id[4] = 4;
SnmpObjId.id[5] = 1;
SnmpObjId.id[6] = ENTERPRISE_ID;
SnmpObjId.id[7] = 2;
SnmpObjId.id[8] = 4;
snmp_set_sysobjid(&SnmpObjId);

// включение трапов
if ((gSNMP_IPaddr1[0] & gSNMP_IPaddr1[1] & gSNMP_IPaddr1[2] & gSNMP_IPaddr1[3]) != 0xFF &&
(gSNMP_IPaddr1[0] | gSNMP_IPaddr1[1] | gSNMP_IPaddr1[2] | gSNMP_IPaddr1[3]) != 0)
{
IP4_ADDR(&xIpAddr, gSNMP_IPaddr1[0], gSNMP_IPaddr1[1], gSNMP_IPaddr1[2], gSNMP_IPaddr1[3]);
snmp_trap_dst_enable(0, 1);
snmp_trap_dst_ip_set(0, &xIpAddr);
}
else
{
snmp_trap_dst_enable(0, 0);
}
if ((gSNMP_IPaddr2[0] & gSNMP_IPaddr2[1] & gSNMP_IPaddr2[2] & gSNMP_IPaddr2[3]) != 0xFF &&
(gSNMP_IPaddr2[0] | gSNMP_IPaddr2[1] | gSNMP_IPaddr2[2] | gSNMP_IPaddr2[3]) != 0)
{
IP4_ADDR(&xIpAddr, gSNMP_IPaddr2[0], gSNMP_IPaddr2[1], gSNMP_IPaddr2[2], gSNMP_IPaddr2[3]);
snmp_trap_dst_enable(1, 1);
snmp_trap_dst_ip_set(1, &xIpAddr);
}
else
{
snmp_trap_dst_enable(1, 0);
}
if ((gSNMP_IPaddr3[0] & gSNMP_IPaddr3[1] & gSNMP_IPaddr3[2] & gSNMP_IPaddr3[3]) != 0xFF &&
(gSNMP_IPaddr3[0] | gSNMP_IPaddr3[1] | gSNMP_IPaddr3[2] | gSNMP_IPaddr3[3]) != 0)
{
IP4_ADDR(&xIpAddr, gSNMP_IPaddr3[0], gSNMP_IPaddr3[1], gSNMP_IPaddr3[2], gSNMP_IPaddr3[3]);
snmp_trap_dst_enable(2, 1);
snmp_trap_dst_ip_set(2, &xIpAddr);
}
else
{
snmp_trap_dst_enable(2, 0);
}

// отправка трапа холодного старта
snmp_coldstart_trap();
}


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

У Вас сам прибор то в сети пингуется? Соединение UDP устанавливает? Какой программой Вы проверяете чтение или запись переменных?
Whisper_84
Я установил программу iReasoning MIB Browser, там возможна загрузка своего MIB, отправка GET SET запросов и прием трапов.
Поэтому и хотел оттолкнуться от текстового MIB, чтобы он был универсальным. Но чувствую придется вручную писать реализацию private_mib.c.
Сейчас разберусь с вашей инициализацией SNMP. Большое спасибо!

До чтения и установки переменных я пока не дошел. Тот сишник, что сгенерил мне скрипт мало походит на сишник из примера.
А в примере пока толком не разобрался. UDP работает.
Если будет возможность - скиньте private_mib - буду очень признателен. На чистку можете не тратить время, постараюсь разобраться.
ab1000
Прикрепил свой private_mib
Whisper_84
Большое спасибо! Буду разбираться.
Whisper_84
Цитата(ab1000 @ Aug 14 2015, 14:50) *
Прикрепил свой private_mib


Большое Вас спасибо за помощь, помогли разобраться.
К счастью проект почти закончен, а часть с snmp там давно и успешно работает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.