Il firmware originale del wrt54gl implementa il cosiddetto SecureEasySetup, ovvero la possibilità di switchare in un security mode più o meno restrittivo, e dandone indicazione per mezzo del led con il logo Cisco System (immagine qui accanto).
La cosa interessante è che con il firmware dd-wrt è possibile fare accendere o spengere tale led a piacimento in quanto collegato ad una interfaccia gpio (general purpose input output).
In realtà non è un solo led ma bensì due che quando accesi rispettivamente sono di colore bianco e arancio.
Come descrivevo in altri post, uso un Linksys wrt54gl con firmware dd-wrt v.24 come repeater per collegarmi ad internet per mezzo di un router wifi che stà dietro una rete wireless.
Utilizzando questo tipo di modalità può capitare, molto raramente, che cada la connessione wirless e che quindi internet non sia più raggiungibile. Altri problemi di connettività, che per la verità di verificano più spesso, sono legati a disfunzioni del provider con “guasti” sulla linea.
Per distinguere questi due casi a colpo d’occhio ho deciso di pilotare i led sopra indicati e di accenderli/spengerli in base al caso verificato.
Ecco qui di seguito i diversi casi che si possono verificare:
L’interfaccia gpio presente sul wrt54gl pilota anche altri led (output) e pulsanti (input), per un approfondimento su questo aspetto rimando alla pagina del wiki di dd-wrt Useful_Scripts – GPIO_Info_for_Linksys_WRT.
Per quanto ci interessa basta sapere che il led arancione si accende con
gpio disable 3
e si spenge con
gpio enable 3
mentre il led bianco si accende con
gpio disable 2
e si spenge con
gpio enable 2
Per implementare la funzione descritta sopra ho realizzato un semplice script che richiamo ogni minuto dal crontab.
Lo script è il seguente:
#!/bin/sh # ambra_on="gpio disable 3" ambra_off="gpio enable 3" bianco_on="gpio disable 2" bianco_off="gpio enable 2" date > /tmp/upline.log # Check connessione internet ping -c 5 google.com >> /tmp/upline.log if [ $? == 0 ]; then # accende luce ambra echo "ambra on" $bianco_off $ambra_on else # controllo connessione default gateway ping -c 5 `findgw -1` >> /tmp/upline.log if [ $? == 0 ]; then # accende luce bianca echo "bianco on" $ambra_off $bianco_on else # spenge tutto echo "tutto off" $bianco_off $ambra_off fi fi
Come è possibile vedere la verifica sul funzionamento di internet viene eseguita impartendo un ping ad un host pubblico sicuramente funzionante, in questo caso google.com, mentre sempre con un ping viene testata la connessione con il gateway il cui indirizzo viene ricavato con lo script findgw il cui codice è il seguente
#!/bin/sh # # Mostra il default gateway SCRIPT=`basename $0` if [ "$1" == "-h" ] || [ "$1" == "--help" ]; then echo -e "n$SCRIPT v 0.2 01/01/2009n" echo -e "Parametri:" echo -e " -h, --helptQuesto messaggio" echo -e " -1ttSe ci sono piu' default gateway ne restituisce soltanto il primo" echo -e "" exit 0 fi ONLYFIRST="" if [ "$1" == "-1" ]; then ONLYFIRST="-m 1" fi route -n |grep $ONLYFIRST ^0.0.0.0 | tr -s ' ' | cut -d' ' -f2 exit 0
L’inserimento del comando upline nel crontab avviene inserendo questa linea
* * * * * root /jffs/usr/bin/upline
direttamente dall’interfaccia web di dd-wrt posizionandosi sul menu “Amministrazione/Gestione/Cron”:
Gli script sopra menzionati sono stati posizionati nel path /jffs/usr/bin/ dopo che è stato abilitato il supporto al filesystem jffs2 sempre da interfaccia grafica nel menu “Amministrazione/Gestione/Jffs2”:
David Bigagli
vorrei implementare questa procedura sul mio linksys, ma come faccio a mandare gli script nel router ?
grazie e complimenti
@Daniele
Abilita ssh o telnet sul router dal menu services.
Accedi al router con un client ssh / telnet (putty va benissimo).
Quando sei al prompt crea la directory /jffs/usr/bin con i seguenti comendi:
mkdir /jffs/usr
mkdir /jffs/usr/bin
Posizionati sotto /jffs/usr/bin e scarica gli script sul router con i seguenti comandi:
cd /jffs/usr/bin
wget http://lejubila.net/files/upline
wget http://lejubila.net/files/findgw
Rendi eseguibili i due script:
chmod u+x /jffs/usr/bin/upline
chmod u+x /jffs/usr/bin/findgw
A questo punto dovresti avere gli script come sono riportati nell’articolo.
Prerequisito fondamentale: jffs deve essere abilitato (come descritto nell’articolo)
Spero di essere stato chiaro.
Se hai bisogno sono a disposizione.
Fammi sapere come è andata,
ciao.
gentilissimo lejubila
innanzitutto grazie per la fulminea risposta 🙂
ti spiego brevemente
i comandi wget …. si collegano ma non scaricano (facendoli da ie invece tutto ok), li ho passati comunque con WINSCP (sai, mi sono ingegnato un pò)
il comando da cron non sembra partire, il led resta sempre ambra anche senza adsl ma se invece nella sessione
Amministrazione -> comandi
lancio: /jffs/usr/bin/upline
lo script funziona benissimo.
una domanda … ma il cron ogni quando lancia lo script ?
e se si volesse fare una volta al minuto o ogni 10 secondi ?
si avrebbe una risposta quasi in tempo reale
grazie di nuovo
Daniele
ah, per i prossimi lettori … il firmware da usare è il
DD-WRT v24-sp2 (10/10/09) mini perchè altrimenti non ci sta abbastanza spazio da utilizzare per il JFFS
@Daniele
ho sistemato le istruzioni per il wget nel primo commento e ora i files vengono scaricati anche con wget direttamente da dd-wrt
lo script upline inserito nel crontab viene eseguito ogni minuto. Per maggiori approfondimenti sul crontab puoi consultare http://www.lejubila.net/2008/07/crontab/
per verificare se upline vine eseguito dal cron puoi eseguire il seguente comando da Amministrazione -> comandi
cat /tmp/upline.log
Ti verranno restituite diverse righe, quella che ti interessa è la prima che contiene la data e l’ora dell’ultima esecuzione di upline e in base a questa dedurrai se il cron esegue lo script.
Se effettivamente non viene eseguito lo script prova a spengere e riaccendere il router.
Fammi sapere,
ciao.
funziona perfettamente !!
l’unica perplessità che ho è che lo script caricato da me con winscp non funzia da cron, scaricandoli con qget con le tue giuste istruzioni invece .. va alla grande
grazie e complimenti vivissimi.
ciao.
@Daniele
Non ho mai usato winscp ma presumo che riconoscendoli come file di testo ci abbia infilato dentro dei caratteri di fine riga che linux digerisce male e quindi causavano problemi nel crontab.
Per il resto sono contento che funzioni tutto.
Ciao.
grazie infinite !