Whisper_84 0 14 августа, 2015 Опубликовано 14 августа, 2015 · Жалоба Пытаюсь разобраться с работой SNMP в стеке LwIP. Нужно реализовать агент и посылать трапы. Есть ли у кого-нибудь опыт реализации агента в LwIP? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ab1000 0 14 августа, 2015 Опубликовано 14 августа, 2015 · Жалоба На сайте LwIP есть собрание примеров в файле contrib-1.4.1.zip. Там есть пример написания своего private_mib. Так же в дистрибутиве LwIP в папке doc есть файл snmp_agent.txt там кратенько описано как начать работать с SNMP. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Whisper_84 0 14 августа, 2015 Опубликовано 14 августа, 2015 · Жалоба На сайте 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, с - загрузить не могу). TestMIB.txt private_mib.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ab1000 0 14 августа, 2015 Опубликовано 14 августа, 2015 · Жалоба У меня этой функции нет, она не реализована, вернее закоментирована. Я так понял в ней реализовывается какой нибудь предврительный код перед работой с Вашими MIB. Я си файл без утилиты питоновской создавал (вернее правил, содавал коллега :rolleyes: так что основа у меня была). А что, с полученными файлами проект не компилируется? Что то не работает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Whisper_84 0 14 августа, 2015 Опубликовано 14 августа, 2015 · Жалоба У меня этой функции нет, она не реализована, вернее закоментирована. Я так понял в ней реализовывается какой нибудь предврительный код перед работой с Вашими MIB. Я си файл без утилиты питоновской создавал (вернее правил, содавал коллега :rolleyes: так что основа у меня была). А что, с полученными файлами проект не компилируется? Что то не работает? Проект компилируется, но непонятно как подцепить мой объект из private_mib ко внутренностям snmp. А как у вас проходит инициализация и работа самого snmp? В коротком описании сказано что необходимо вызывать функцию snmp_inc_sysuptime() каждые 10ms. Разве этого достаточно? Извиняюсь за возможно глупые вопросы, но я пытаюсь разобраться. Вы можете привести свой private_mib хотя бы частично? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ab1000 0 14 августа, 2015 Опубликовано 14 августа, 2015 · Жалоба Да, функцию snmp_inc_sysuptime() нужно вызывать в приложении каждые 10 мс. Кроме того должны быть разрешены как минимум 2 UDP соединения это настройка MEMP_NUM_UDP_PCB. Ну и в настройках SNMP должно быть включено само SNMP и использование private _mib. Но судя по тому, что проект у Вас компилируется это все включено. Моя функция для инициализации SNMP: // подготовка к работе 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 0 14 августа, 2015 Опубликовано 14 августа, 2015 · Жалоба Я установил программу iReasoning MIB Browser, там возможна загрузка своего MIB, отправка GET SET запросов и прием трапов. Поэтому и хотел оттолкнуться от текстового MIB, чтобы он был универсальным. Но чувствую придется вручную писать реализацию private_mib.c. Сейчас разберусь с вашей инициализацией SNMP. Большое спасибо! До чтения и установки переменных я пока не дошел. Тот сишник, что сгенерил мне скрипт мало походит на сишник из примера. А в примере пока толком не разобрался. UDP работает. Если будет возможность - скиньте private_mib - буду очень признателен. На чистку можете не тратить время, постараюсь разобраться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ab1000 0 14 августа, 2015 Опубликовано 14 августа, 2015 · Жалоба Прикрепил свой private_mib private_mib.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Whisper_84 0 14 августа, 2015 Опубликовано 14 августа, 2015 · Жалоба Большое спасибо! Буду разбираться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Whisper_84 0 31 марта, 2016 Опубликовано 31 марта, 2016 · Жалоба Прикрепил свой private_mib Большое Вас спасибо за помощь, помогли разобраться. К счастью проект почти закончен, а часть с snmp там давно и успешно работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться