Tito Dal Canton

Physics is reverse engineering

Libero ADSL sotto Linux, con modem USB

In questa pagina racconterò la travagliata vicenda che mi ha consentito di usare una connessione Libero adsl sotto Linux. Il setup non è difficile, ma richiede qualche modifica qua e la per sistemare qualche difetto. La macchina è un PC x86 con kernel 2.4.27 e Debian 3.0. Ciò che scrivo rappresenta solo quello che ho fatto personalmente sul mio computer (e qualche consiglio datomi da altre persone) ma non mi assumo responsabilità per eventuali problemi che potrebbero nascere seguendo questi passi. Detto questo...

Il Modem USB

Purtroppo, per una serie di ragioni ho ricevuto il modem adsl con connessione usb anziché ethernet. A sentire quelli di Libero, l'apparecchio è un Aethra StarModem (come del resto riportano confezione e case stesso del modem). In realtà quel nome non vuol dire niente, perché quel che mi serviva sapere era costruttore e modello dell'elettronica interna. Primo problema, dunque: capire cosa mi avessero portato. Con le utility usb di Linux si ricava che il VendorID e ProductID del modem sono rispettivamente 0x1110 e 0x9022; ho usato questi valori per fare una ricerca in rete, sperando di capitare sulla pagina di qualche driver che supportasse l'apparecchio. La ricerca è stata abbastanza lunga, ma alla fine ho trovato il progetto eagle-usb, che però è totalmente in francese e non supporta ufficialmente il nostro modem. Comunque nei sorgenti compariva la coppia VendorID/ProductID corretta, e quindi ho compilato e installato ugualmente il driver, che si è rivelato quello giusto. La configurazione richiede una modifica "ad hoc", perché lo script di configurazione eagleconfig non permette di scegliere i valori vpi e vci corretti. Perciò ho scelto i valori più simili e ho successivamente modificato /etc/eagle-usb/eagle-usb.conf, cambiando le righe interessate in

VPI=00000008
VCI=00000023

Non so in realtà cosa siano quei valori, ne quanto siano importanti: li ho presi dal programma di installazione del modem per Win, che li riporta in fase di installazione.

Davide mi dice che eagle-usb è già presente tra i pacchetti di Mandrake 10.1, per cui chi usa questa distribuzione può evitare di scaricarlo e compilarlo. Per la configurazione, consiglia di non usare il centro di controllo di mandrake, bensì eagleconfig.

MTU/MRU

Durante l'installazione il driver eagle-usb configura il ppp automaticamente, ma è necessaria una modifica manuale al file /etc/ppp/peers/adsl. Bisogna cambiare i valori mtu e mru ponendoli a 1500, altrimenti la connessione funziona malissimo (grazie ad Andrea Simion per la dritta ;-). Gia che c'ero ho tolto le opzioni che vietavano la compressione (come novj) ma non so quanto questo influisca e non ho provato a rimetterle. Alcuni mi hanno scritto che non cambia nulla.

Connessione/disconnessione

Ora la configurazione è completa. Per connettersi bisogna caricare il modulo eagle-usb (conviene farlo durante il boot), poi eseguire eaglectrl -d, aspettare che il led sul modem smetta di lampeggiare e quindi eseguire startadsl. Per disconnettersi, eseguire stopadsl. Ho fatto uno script che fa tutto questo automaticamente (il mio server si connette in fase di boot e resta sempre connesso). Il mio giudizio sulla connessione è positivo: veloce e stabile. Unico difetto: lasciando il modem collegato per diversi giorni può capitare che "muoia" facendo saltare la connessione (forse un problema di interferenze, o l'overflow di qualche timer interno); in tal caso l'unica possibilità è resettarlo, per esempio togliendo il modulo eagle-usb e il modulo del controller usb, rimetterli e rifare la procedura per la connessione.

Varie

A titolo di debugging riporto l'output di dmesg dopo le varie operazioni.

Connessione del modem alla porta usb (il modem non ha firmware, e si presenta come un device usb "fittizio"):

hub.c: new USB device 00:07.2-2, assigned address 2
usb.c: USB device 2 (vend/prod 0x1110/0x9022) is not claimed by any active driver.

Caricato il modulo eagle-usb (il modulo invia il firmware e resetta il modem, che poi si riconnette con i corretti VendorID/ProductID):

[eagle-usb] driver V1.9.9 loaded
usb.c: registered new driver eagle-usb
[eagle-usb] New pre-firmware modem detected
[eagle-usb] Uploading firmware..
[eagle-usb] Binding eu_instance_t to USB 001/002
usb.c: USB disconnect on device 00:07.2-2 address 2
[eagle-usb] Pre-firmware modem removed
hub.c: new USB device 00:07.2-2, assigned address 3
[eagle-usb] New USB ADSL device detected, waiting for DSP code...
[eagle-usb] created proc entry at : /proc/driver/eagle-usb/001-003

Eseguito eaglectrl -d (viene inviato il "dsp code", che non ho ben capito cosa sia; il modem inizia a prendere la linea):

[eagle-usb] ioctl EU_IO_OPTIONS received
[eagle-usb] ioctl EU_IO_DSP received
[eagle-usb] Loading DSP code to device...
[eagle-usb] DSP code successfully loaded to device

Il led della linea inizia a lampeggiare, segno che il modem sta allineandosi. Dopo qualche secondo smette di lampeggiare:

[eagle-usb] Modem operational !!
[eagle-usb]  Ethernet device eth1 created.

A questo punto si può eseguire startadsl.

I geek dovrebbero guardare in /proc/driver/eagle-usb/: c'è un file pieno di informazioni interessanti sullo stato del modem. Tramite questo file si può anche capire quando il modem ha completato l'allineamento ed è quindi pronto per la connessione (vedi lo script sopra).

Ultima modifica: 12/01/2006