Configurazione di un modem seriale sul WRT54GS

Questa configurazione non prevede l'uso del DTR.

Per la versione con il DTR, che richiede di avere il supporto hardware nell'interfaccia seriale, vedi ../ModemSerialeDtr. Per costruire l'interfaccia seriale necessaria, con o senza DTR, vedi OpenWrt/Hardware/Seriale.

Introduzione

Usare un modem seriale sul WRT e` possibile, ma e` un bel casino perche` mancano le linee di controllo dalle seriali (DCD, CTS, RTS, DTR, DSR). Questo provoca alcuni problemi anche gravi, se volete provare e poi vi trovate una bolletta di trenta milioni, non date la colpa a me. La mancanza del DCD richiede che il modem risponda "CONNECT" al momento della connessione, e se per caso cade la linea per colpa del modem, il pppd non se ne rendera` conto, e sara` convinto di essere ancora collegato. Al contrario, la mancanza del DTR impedisce al pppd di usare questa linea di controllo per dire al modem di riattaccare, quindi il ppp potrebbe essere convinto di avere riattaccato mentre il modem resta connesso all'infinito. Per cercare di ovviare al problema si puo` usare uno script di disconnessione che esegua la sequenza +++ATH, la quale pero` non e` accettata da tutti i modem allo stesso modo. Il mio TA ISDN, per esempio, quando e` in modo "PPP" ignora QUALSIASI carattere, quindi non riesco a farlo tornare al modo comandi con "+++". Spesso quando il link PPP termina, e` il remoto che riattacca, il che fa riattaccare istantaneamente anche il modem locale, ma questa non e` una certezza molto solida sulla quale appoggiarsi per salvare la propria bolletta.

Allo stato attuale delle cose (White Russian RC2) inoltre il pppd non e` compilato con il supporto per libpcap e i filtri, quindi di fatto il dial on demand non e` utilizzabile, perche` il rumore di fondo di internet terrebbe la linea sempre connessa.

Pacchetti necessari

Configurazione della seriale 1

Dal momento che tts/0 e` usata dalla console, noi userermo tts/1. Prima di tutto occorre usare setserial per assegnare un IRQ a tts/1, infatti di default questa ne e` priva. Inoltre, lo usiamo anche per dare la velocita` giusta alla seriale. Questa cosa va fatta al boot, per cui occorre inserire i comandi in /etc/init.d/Squalcosa. Abbiamo nel pacchetto di Setserial il comodo file /etc/init.d/S15serial, che va modificato per impostare velocita` e quant'altro. RTFM di seterial per i parametri.

/usr/sbin/setserial /dev/tts/1 irq 3 spd_hi

Configurazione dei moduli

Per usare il ppp, occorre caricare alcuni moduli. Modificare il file /etc/modules inserendo queste righe:

slhc
ppp_genric
ppp_deflate
ppp_async

Configurazione del kernel

Se si vuole usare il dial on demand, e si ha ip dinamico (come e` solitamente) occorre abilitare nel kernel la funzionalita` apposita, cosi`:

 echo 1 >  /proc/sys/net/ipv4/ip_dynaddr

Oppure, piu` pulito, modificando /etc/sysctl.conf, aggiungendo una riga cosi`:

net.ipv4.ip_dynaddr=1

Configurazione del PPP

Per configurare il PPP, ho adottato una logica minimalista, mettendo tutti i dati necessari in un file unico, sotto /etc/ppp/peers, che verra` poi richiamato dal comando ppp dial <nomefile>.

# username (in chap-secrets)
name kurgan
# server name (in chap-secrets)
remotename casa
# scripts per la connessione e la disconnessione
connect "/usr/sbin/chat -v -f /etc/ppp/chatscripts/dialup -T <numero di telefono del provider>"
disconnect "/usr/sbin/chat -v -f /etc/ppp/chatscripts/disconnect"
# siccome manca il DCD, mi serve un metodo per sapere se e` caduta la linea.
# per questo uso le funzioni di echo LCP (un ping ogni 5 secondi, se ne manco 2 cade la linea)
lcp-echo-interval 5
lcp-echo-failure  2
# dopo una caduta di linea, attendi 5 secondi prima di richiamare
holdoff 5
# Dopo 10 connessioni fallite di fila, termino il demone
maxfail 10
# Prendo i parametri di rete che mi passa il remoto
ipcp-accept-remote
usepeerdns
# seriale
tts/1
# velocita`
115200
# non ho le linee di controllo
local
nocrtscts
nocdtrcts
# sono il default GW
defaultroute
replacedefaultroute
# debug, per loggare di piu`
debug
# se voglio il dial on demand, con relativo timeout di disconnessione
demand
idle 20
# il remoto non deve autenticarsi su di me, ma viceversa
noauth
# se il remoto non capisce la compressione, la disabilito in vario modo
noaccomp
nopcomp
nobsdcomp
nodeflate
noccp

# Uncomment the following line to see the connect speed.
# It will be logged to stderr or to the file specified with the -r chat option.
#REPORT         CONNECT

ABORT           BUSY
ABORT           VOICE
ABORT           "NO CARRIER"
ABORT           "NO DIALTONE"
ABORT           "NO DIAL TONE"
""              ATZ
OK              AT&D0D\T
CONNECT         ""

TIMEOUT 6
ABORT "NO CARRIER"
'' \d\d\d\d\c
'' +++\c
'OK' 'ATH'

Configurazioni varie accessorie

case "$1" in
  start|restart)
   echo "Killing PPPD"
   /usr/bin/killall -TERM pppd 2> /dev/null
   echo "nameserver <indirizzo ip del dns del provider>" > /tmp/resolv.conf
   echo "Starting PPPD"
   /usr/sbin/pppd call <nome del provider>
  ;;
  stop)
   echo "Hanging up link and killing PPPD"
   /usr/bin/killall -HUP pppd
   /usr/bin/killall -TERM pppd
   /bin/echo "0x00" > /proc/sys/diag
  ;;
  hup)
   echo "Hanging up link, not killing PPPD"
   /usr/bin/killall -HUP pppd
  ;;

esac

OpenWrt/WhiteRussian/ModemSeriale (last edited 2009-04-12 17:33:24 by localhost)