В первый день отпуска стало скучно, и появилось куча свободного времени для всяких экспериментов. Вот вспомнил свой старенький дир-100, а так было мило, когда индикатор WAN при наличии интернет-соединения зажигался зелёненьким… на данный момент достаточно мало маршрутизаторов с двойными светодиодами, но есть и с дополнительными светодиодами да и вообще, это надо потому что, а почему бы и нет 🙂

Нам, как и обычно, понадобиться WnSCP, PUTTY уже в него встроено.

Сразу оговорюсь, разработчики OpenVRT настоятельно рекомендуют использовать встроенную функцию настройки светодиодов и они правы. По триггеру netdev можно перехватить подобные события для очень многих подключений, через дополнительный интерфейс, к примеру 3g-модем, DSL (он же pppoe), VPN (он же ppptp). Но если ваш кабель выдаёт вам интернет по маку через DHCP, тут «мы» уже бессильны. Но так хочется, чтоб зажёгся светодиодик, или поменял цвет 🙂

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

В Интернете встречались несколько моментов, как это реализовать, но для себя отметил, что ни одно из них «скопировать и вставить» не получится, по многим причинам. Постараемся максимально убрать все эти «подводные камни».

И так, поздравляю, вы дочитали до момента, когда всё произойдёт 🙂

План действий:

  1. Написать скрипт;
  2. Написать службу;
  3. заставить всё это работать.

Сразу оговорюсь, столкнулся с ужасным синтаксисом «sh». Я был такой не один, в интернете несколько человек чуть ли не покончили жизнь самоубийством из-за этого. Большое спасибо товарищу nixCraft, я закупорил мензурку с ядом, снял петлю с лампочки и положил молоток обратно в ящик с инструментами.

while [ condition ]; do commands; done
while control-command; do COMMANDS; done

После этого подключаемся по WinSCP к маршрутизатору и смотрим, какие светодиоды у нас есть, они живут в

/sys/class/leds

. Примечательно то, что если светодиод один, но умеет быть нескольких цветов, в этой папке будет 2 пункта, например

-green

или

-orange

.  В моём случае я зажигаю и гашу один светодиод, вам надо будет по условиям один погасить или зажечь. Понятно.

И так, оптимизированный и проверенный скрипт, в папке

/root

создаём «internet-check.sh» с таким содержимым (для примера):

#!/bin/bash
while :; do
Status=$(ping -q -c 5 -W 1 8.8.8.8 > /dev/null 2>&1 && echo "ok" || echo "FAIL")
#echo $Status
if [ $Status = "ok" ]; then echo 1 > /sys/class/leds/routerboard-750gr3:green:usr/brightness
else echo 0 > /sys/class/leds/routerboard-750gr3:green:usr/brightness;
fi
sleep 20;
done

В моём случае я зажигаю светодиод

echo 1 > /sys/class/leds/routerboard-750gr3:green:usr/brightness

когда есть подключение и точно так же по аналогии его тушу. по пингу 8.8.8.8 — это ДНС Гугла, самые стабильные и отказоустойчивые IP, второй такой же — 8.8.4.4. Вместо них можно указать свои ДНС, или вообще домен. Вместо светодиодов из примера, укажите свои!! (

/sys/class/leds/светодиод/

)

Было много споров, что гугл может отвергнуть пигн-запрос, очень частый и с одного места, это приведёт к неправильному показателю, я позволил себе из оригинального кода сделать 5 пакетов для общения и сократить интервал до 20 секунд.

Сохраняем файл, обязательно даём ему разрешение на запуск (0755)!

Проверяем в консоли:

/bin/sh /root/internet-check.sh

Если всё работает как надо, есть несколько возможностей, добавить скрипт в автоисполнение. Больше всего мне нравится сделать его службой. Для этого в папке «/etc/init.d» создаём файл «internet-check» со следующим содержимым:

#!/bin/sh /etc/rc.common
USE_PROCD=1
START=95
STOP=01
start_service() {
procd_open_instance
procd_set_param command /bin/sh "/root/internet-check.sh"
procd_close_instance
}

Обязательно пробуем его в путти:

/etc/init.d/internet-check enable

На этой стадии у меня выползла ошибка, мол »
root@OpenWrt:~# /etc/init.d/internet-check enable
‘: No such file or directory.common»

Выдрав пару клоков волос и замочив пару боссов в нфс, нашёл решение проблемы. Я не знаю почему, но это помогло:

root@OpenWrt:~#cat /etc/init.d/internet-check
root@OpenWrt:~#sed -i -e 's/\r//g' /etc/init.d/internet-check

После этого служба запустилась….

root@OpenWrt:~# /etc/init.d/internet-check enable
root@OpenWrt:~# /etc/init.d/internet-check start

Теперь «ненужный» светодиодик светиться пока пингуется днс гугла, то есть. есть интернет, и не светиться, пока днс гугла не начнут пинговаться и да. бонус!!!! Всё это появляется в интерфейсе Люси «Система-Загрузка»!

Благодарю за внимание

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

Включите изображения, чтобы увидеть вопрос *