Linksys wrt54gl e dd-wrt: utilizzare i led SecureEasySetup come indicatore di connettività

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:

Led arancione (ambra) accesso: connessione internet funzionante
Led bianco acceso: connessione internet non funzionate ma gateway raggiungibile (molto probabilmente il malfunzionamento è dovuto da un "guasto" del provider)
Nessun led accesso: connessione ad internet non funzionante a causa connessione con il gateway interrotta

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:

upline

#!/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”:

8 pensieri su “Linksys wrt54gl e dd-wrt: utilizzare i led SecureEasySetup come indicatore di connettività

  1. vorrei implementare questa procedura sul mio linksys, ma come faccio a mandare gli script nel router ?
    grazie e complimenti

  2. @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.

  3. 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

  4. 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

  5. @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.

  6. 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.

  7. @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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *