Заметка юзера virt2real

Девайс дискавери

видео virt2real Виртурилка железки

Многие из тех кто общается с Виртурилкой часто матерятся из-за того устройство фиг найдёшь в сетке. Когда ip статичный - всё понятно, адрес известен, вбил в браузере и готово, админка вот она. Когда устройств много - уже сложнее, надо помнить у кого какой адрес. А когда ip динамический - начинаются проблемы, т.к. неизвестно какой именно айпишник девайс получит. Можно, конечно, посмотреть в логах роутера, какой адрес был выделен, но это изврат полный.

Продолжение...


Давно собирался попробовать решить эту проблему да руки не доходили, а тут вот сам столкнулся с тем что консоль (которая через UART) отключена, адрес динамический и чёрт знает где девайс искать. Аж сканером хостов приходилось пользоваться. Короче, неприлично выругался и полез искать варианты.

Изначально была идея сделать обнаружение через обычные широковещательные запросы (в рцборде именно так обнаружение работает), тем более что кто-то на форуме именно так и делал. Но есть неудобство - для обнаружения необходимо отдельную софтину ставить, а лишний софт это не есть гут.

Тут очень вовремя вспомнилась технология UPnP (и SSDP - Simple Service Discovery Protocol), тем более что винда именно с помощью них девайсы в локалке и ищет. Про другие операционки не парюсь - у большинства всё-таки винда в качестве основной оси (у меня, кстати, тоже). Так что если сделать обнаружение виртурилки хотя бы для винды - уже красота будет.

В общем, стал искать примеры серверов UPnP и SSDP. Серверов UPnP нашлось вагон и маленькая тележка, но они все заточены под медиа, а, следовательно, довольно громоздки. А мне-то только обнаружение требуется. Проштудировал описание протокола SSDP, начал свой сервер писать (люблю я велосипеды). Сервер заработал, но винда его видеть отказывалась, видимо что-то неправильно сделал.

Но в процессе отладки, при просмотре сообщений от всех UPnP устройств в локалке, увидел нотификационный пакет от моего роутера породы "Зухель", где в служебных полях фигурировало что-то вроде miniupnpd. Вспомнил что у нас в файловой системе давно уже есть miniupnpc, клиент UPnP. А это, видимо, сервер.

Полез в/на гитхаб, к автору miniupnpc, и обнаружил там как раз этот самый miniupnpd. Дальше уже дело техники, теперь всё это у нас в составе SDK имеется.

Но есть одна проблемка - сервер этот (да и клиент) изначально предназначены для роутерных целей, т.е. видится он как устройство типа IGD (Internet Gateway Device) и поменять тип просто так не получится. Но это фигня, пока так оставлю. Но в будущем надо бы нормальным сервером обзавестись.

В общем, теперь лепота - железка загружается, в винде (проверял на семёрке, на восьмёрке тоже должно работать, а вот XP скорее всего в пролёте) открываем обычный проводник и видим



Название девайса берётся как обычно, из идентификатора (можно в админке редактировать на начальной странице) /etc/virt2real/deviceid

При щелчке правой кнопкой мыши, в контекстном меню есть ссылочка "Просмотр веб-страницы устройства". Если нажать - сразу откроется админка в браузере. Офигенно удобно, сам уж второй день не нарадуюсь.



Ну и в инфе об устройстве несколько полей, из которых самое важное это поле с ip адресом. Собссно, ради чего всё и делалось.



Но есть некоторые нюансы, как же без них. Сервер upnp умеет работать только на одном интерфейсе, т.е. если активны сразу два - обнаружение будет работать только на одном. Сейчас в прошивке по умолчанию сервер стартует на интерфейсе wlan0 (неважно, динамический там ip или статический). А затем, если какой-то интерфейс настроен на динамический адрес - сервер перезапустится уже на этом интерфейсе. Сложновато, но работает.

Новшество добавлено в прошивку virt2real-1.04.002

UPD> В принципе, можно и пакетом установить (но такой вариант не проверял)
opkg-cl update
opkg-cl install miniupnp --force-overwrite

Только не забыть скрипт S80upnp в активные скрипты автозапуска перенести.
virt2real      Суббота, 20 Декабря, 2014 07:25       1


Добавить комментарий
 

Footniko Суббота, 20 Декабря, 2014 19:23 цитировать ссылка на коммент

У меня динамический ip на виртурилке. Написал простой bash скрипт, который определяет свой ip с помощью wpa_cli и выводит espeak'ом или google воисом на динамик.

 

Сколько букв в слове Гол?

Вы вошли как Гость      

Сейчас на сайте: 0
и 1 гостей






Страница сгенерирована за 0.0027399063110352 мкс

cached