Generalnie obsługa diod LED jest już
opisana. Jednakże wczorajsza
aktualizacja repozytorium OpenWrt przyniosła nowy moduł usbdev, postanowiłem więc opisać tą nowość, a i przy okazji dwie inne.
usbdev to moduł służący do informowania o aktywności portu USB. Występuje aktualnie tylko w trunku, więc wystarczyło to przeportować do Backfire, żeby można było tego używać. Pakiety dla ar71xx/backfire znajdziecie w
moich buildach, należy tylko pamiętać o instalacji modułów ode mnie, nie ze standardowego repo OpenWrt. Do tej pory wizualizację podłączenia urządzenia na USB tworzyliśmy w skryptach dla podsystemu hotplug, a wczoraj doczekaliśmy się odpowiedniego moduły (ps. w trunku ar71xx standardowo jest już przez ten moduł).
W prezentowanych przykładach posłużyłem się diodą USB routera TL-WR1043ND, znaczoną w sysfs jako "tl-wr1043nd:green:usb". Moduły MUSZĄ być zainstalowane
ode mnie, żeby nie zaciemniać kodu nie umieszczałem pełnych ścieżek przy nazwach pakietów. Z resztą - w oficjalnych pakietach jeszcze tego nie ma.
Instalacja:
opkg install kmod-ledtrig-usbdev
wget --no-check-certificate -q -O /etc/init.d/led "https://dev.openwrt.org/browser/trunk/package/base-files/files/etc/init.d/led?rev=24647&format=txt"
Ta druga linia służy do aktualizacji skryptu obsługującego diody led (domyślnie zawarty jest już zaktualizowany w moich obrazach). Zostaje tylko dopisać odpowiedni skrypt do obsługi diody USB:
uci set system.usb_led=led
uci set system.usb_led.name='USB'
uci set system.usb_led.sysfs='tl-wr1043nd:green:usb'
uci set system.usb_led.trigger='usbdev'
uci set system.usb_led.dev='1-1'
uci set system.usb_led.interval='50'
uci commit system
/etc/init.d/led start
Urządzenie "1-1" to "główny" kontroler USB; oznaczony jest tak w większości urządzeń. I teraz wystarczy podłączyć urządzenie na usb...
ledtrig-netfilter jest kolejnym modułem służącym do sygnalizacji pojawienia się pakietu sieciowego spełniającego odpowiednie założenia. Można definiować wszystkie reguły takie jak pozwala iptables, czyli od zaznaczania pakietów poprzez markowanie odpowiedniego ruchu a na wykrywaniu dostępu do określonych portów skończywszy.
Instalacja
opkg install kmod-ledtrig-netfilter iptables-mod-ipopt
I znów, należy pamiętać żeby moduły były ode mnie jeżeli ktoś używa moich obrazów.
Uruchomienie sprowadza się do dwóch poleceń
- stworzenia odpowiedniej reguły iptables (w przykładzie - interesuje nas ruch na porcie 23, czyli "dobijanie się" do telnetu)
iptables -I INPUT -p tcp --dport 23 -j LED --led-trigger-id telnet --led-delay 1000
- zaznaczyć że ta reguła ma być obsługiwana przez diodę
echo netfilter-telnet > /sys/class/leds/tl-wr1043nd:green:usb/trigger
nazwa triggera to słowo "netfilter-" + id podane przy iptables ("telnet" w tym przykładzie)
Jeżeli teraz zalogujemy się do routera przez telnet, to dioda zacznie migać. Można w ten sposób np. wykrywać ruch p2p (poprzez odpowiednie filtry Layer7).
morse. Routery nie mówią. Jeszcze. Ale sygnalizacja wizualna jest dobrze znana, a alfabet morse'a nie jest aż tak skompilowany żeby nie można było się go nauczyć. Nasz router może komunikować się z nami tym alfabetem.
Instalacja
opkg install kmod-ledtrig-morse
Uruchamiamy nowy trigger:
echo morse > /sys/class/leds/tl-wr1043nd:green:usb/trigger
I zostaje tylko wysłać odpowiednią wiadomość:
echo "To dziala!" > /sys/class/leds/tl-wr1043nd:green:usb/message
Lub echo "SOS" > /sys/class/leds/tl-wr1043nd:green:usb/message