Konfiguracja diod w routerze pod OpenWRT (LED)

Spis treści

Praktycznie każdy router posiada szereg diod LED, które wizualizują stan pracy takiego urządzenia. W taki sposób jesteśmy w stanie stwierdzić czy sieć WiFi jest aktualnie włączona albo czy odbywa się wymiana danych za jej pomocą. Podobnie możemy ocenić aktywność mechanizmu WPS oraz czy połączenie przewodowe zostało ustanowione. Routery TP-LINK'a mają także w standardzie diodę system , która informuje nas czy router działa prawidłowo i nie uległ powieszeniu. W OpenWRT wszystkie te wyżej opisane właściwości można skonfigurować, tak by dioda LED reagowała w określony sposób na pewne zaistniałe zdarzenie. W tym wpisie przyjrzymy się bliżej konfiguracji diod routera.

Wsparcie dla diod LED w OpenWRT

Ilość jak i rodzaj diod LED zaimplementowanych na routerach jest różna i zależy głównie od samego modelu, który przewinie nam się przez nasze łapki. Dlatego też wszystkie poniższe informacje dotyczą routera TP-LINK TL-WR1043N/ND v2 , by mieć jakiś punkt odniesienia. Niemniej jednak, szereg cech będzie wspólny dla większości routerów pracujących pod kontrolą OpenWRT. To jakie diody zostały wykryte przez system możemy ustalić zaglądając do katalogu /sys/class/leds/ . Dla tego modelu routera, ten katalog prezentuje się następująco:

dioda-led-openwrt-router

W przypadku tego routera wszystkie diody zostały wykryte poprawnie. Niemniej jednak, OpenWRT nie zawsze zapewnia wsparcie dla wszystkich diod. Część z nich może w ogóle nie działać. Choć tego typu sytuacje zdarzają się bardzo rzadko. Zwykle też wystarczy zgłosić tego typu informację do developerów OpenWRT i być może w niedługim czasie ten problem zostanie wyeliminowany.

Jak widzimy wyżej, OpenWRT wykrył w tym routerze 9 diod. Pozycje tp-link:green:lan1 , tp-link:green:lan2 , tp-link:green:lan3 tp-link:green:lan4 oraz tp-link:green:wan reprezentują 5 portów switch'a (4 porty LAN i 1 WAN). Mamy także tp-link:green:wps odpowiedzialny za diodę WPS. Nie zabrakło też wpisu tp-link:green:wlan odpowiedzialnego za WiFi. Ten router dysponuje także portem USB, zatem ma też tp-link:green:usb . No i oczywiście nie mogło zabraknąć pozycji tp-link:green:system odpowiedzialnej za diodę system .

Powyższe nazwy dowiązań symbolicznych nie są przypadkowe i wynikają z następującego wzoru. Najpierw mamy nazwę producenta urządzenia ( tp-link ) . Następnie mamy kolor diody ( green ). Kolejny człon nazwy to etykieta takiej diody ( wlan ). W tym przypadku wszystkie diody LED są zielone. Dlatego też nie da się tutaj zrobić wymyślnych kombinacji, które by reagowały na pewne określone zdarzenia. Gdyby były dostępne tutaj inne kolory, można by przypisać, np. portowi WAN, reagowanie na pakiet inicjujący połączenie SSH. W taki sposób standardowo świeciłaby się dioda zielona ale przy próbie nawiązania połączenia SSH zapalałaby się dioda, dajmy na to, czerwona.

Dioda LED w routerze jest zapalana i gaszona w oparciu o pewien określony moduł sterujący. Informację na temat aktywnego modułu możemy uzyskać w poniższy sposób:

# cat /sys/class/leds/tp-link\:green\:system/trigger
[none] switch0 timer default-on netdev usbdev phy0rx phy0tx phy0assoc phy0radio phy0tpt

W przypadku powyższej diody, nie jest wybrany żaden moduł. Nawiasy [ ] oznaczają aktywną pozycję. Mamy tam tylko kilka modułów ale nie są to wszystkie możliwe. Możemy doinstalować szereg pakietów, które udostępniają własne moduły. Pełną listę modułów możemy uzyskać wpisując w terminalu to poniższe polecenie:

# opkg list | grep ledtrig

Sterowanie zachowaniem diody LED

Każda dioda LED ma osobny moduł sterujący, który możemy dowolnie zaprogramować. By dioda LED korzystała z pewnego określonego modułu, musimy ją skonfigurować za pomocą pliku /etc/config/system . Poniżej jest standardowa konfiguracja diod dla tego routera:

...
config led 'led_usb'
    option name 'USB'
    option sysfs 'tp-link:green:usb'
    option trigger 'usbdev'
    option dev '1-1'
    option interval '50'

config led 'led_wlan'
    option name 'WLAN'
    option sysfs 'tp-link:green:wlan'
    option trigger 'phy0tpt'

Każda dioda LED ma swój własny blok config led . Dioda, której on dotyczy jest określona przez plik w katalogu /sys/class/leds/ . Dla przykładu, mając tam plik tp-link:green:wlan , tworzymy nazwę led_wlan . Następnie mamy szereg opcji, z tym, że zależą one od wykorzystywanego modułu. Niemniej jednak, każdy blok musi posiadać minimum trzy opcje. W name określamy nazwę, może być dowolna. W sysfs podajemy nazwę pliku odnoszącego się do diody LED. Zaś w trigger wybieramy moduł. Dalej już są opcje charakterystyczne dla określonego modułu.

Konfiguracja diody system

W routerze TL-WR1043ND nie ma zbytniego pola manewru jeśli chodzi o diody LED. Niemniej jednak, jest jedna dioda, która w sumie nic nie robi, tylko ciągle się świeci. Chodzi o diodę system . Można ją jednak zaprogramować tak, by migała w tempie zależnym od obciążenia routera (do wglądu w /proc/loadavg ). Jeśli router jest w spoczynku, to ma niski loadavg . Natomiast jeśli pracuje pod solidnym obciążeniem, to loadavg mu wzrasta. Dzięki takiej zależności, im bardziej obciążony jest router, tym szybciej miga dioda na jego obudowie. W ten sposób jesteśmy w stanie ustalić czy coś niepokojącego się dzieje na routerze. By wdrożyć u siebie taką funkcjonalność, musimy doinstalować poniższy pakiet:

# opkg update
# opkg install kmod-ledtrig-heartbeat

Następnie edytujemy plik /etc/config/system i dopisujemy do niego tę poniższą sekcję:

config led 'led_system'
    option name 'SYSTEM'
    option sysfs 'tp-link:green:system'
    option trigger 'heartbeat'

Opcja trigger musi zostać ustawiona na heartbeat . Teraz wystarczy zresetować już router. Po jego załadowaniu, dioda powinna dość szybko migać ale po chwili zwykle się uspokaja.

Konfiguracja diody w oparciu o pakiety sieciowe

Wyżej wspomniałem o konfiguracji diody w taki sposób, by migała przy próbie połączenia się do routera przez SSH na porcie WAN. Może i nie ten router nie ma kolorowych diod ale jego dioda USB jest na przednim panelu, w przeciwieństwie do innych modelów. W dużej mierze ta dioda jest niewykorzystywana i możemy zmienić jej przeznaczenie, tak by była sterowana w oparciu o pakiety sieciowe. Jeśli interesuje nas ta kwestia, to musimy doinstalować poniższy pakiet:

# opkg update
# opkg install iptables-mod-led

By skonfigurować ten cały mechanizm powiadamiania o pakietach sieciowych za pomocą diody LED, potrzebne nam są dwie rzeczy. Pierwszą z nich jest odpowiednia reguła firewall'a, którą trzeba umieścić w pliku /etc/firewall.user . Ta poniższa reguła sprawi, że za każdym razem, gdy nastąpi nowe połączenia na port SSH z interfejsu WAN, dioda zapali się na 1 sekundę:

iptables -A input_wan_rule -p tcp --dport 22 -j LED --led-trigger-id ssh --led-delay 1000

Po dodaniu tej regułki, restartujemy firewall:

# /etc/init.d/firewall restart

Druga potrzebna nam rzecz, to konfiguracja w pliku /etc/config/system . Musimy tam określić odpowiedni trigger w oparciu o tę powyższą regułę. Format trigger'a jest następujący: netfilter-ssh , czyli do netfilter- dodajemy ssh , który został określony w parametrze --led-trigger-id w powyższej regule firewall'a. Niemniej jednak, z jakiegoś powodu nie da rady ustawić tego trigger'a. W przypadku, gdy byśmy przepisali sekcję dotyczącą diody USB do tej poniższej postaci:

config led 'led_usb'
    option name 'USB'
    option sysfs 'tp-link:green:usb'
    option trigger 'netfilter-ssh'
    option dev '1-1'

To system podczas startu zaloguje taki oto komunikat:

syslog: Skipping trigger 'netfilter-ssh' for led 'USB' due to missing kernel module

Nie wiem czemu tak się dzieje, bo zresetowanie skryptu /etc/init.d/led po uruchomieniu routera już tego komunikatu nie generuje. No i też trigger jest ustawiany poprawnie. Można to obejść przez wykomentowanie całej powyższej zawartości z pliku /etc/config/system oraz przez dodanie do pliku /etc/rc.local tej poniższej linijki:

echo "netfilter-ssh" > /sys/class/leds/tp-link\:green\:usb/trigger
Mikhail Morfikov avatar
Mikhail Morfikov
Po ponad 10 latach spędzonych z różnej maści linux'ami (Debian/Ubuntu, OpenWRT, Android) mogę śmiało powiedzieć, że nie ma rzeczy niemożliwych i problemów, których nie da się rozwiązać. Jedną umiejętność, którą ludzki umysł musi posiąść, by wybrnąć nawet z tej najbardziej nieprzyjemniej sytuacji, to zdolność logicznego rozumowania.