Dovendo passare qualche settimana lontano da casa, e avendo bisogno di lavorare con l'internet, ero tentato di comprare uno di quei modem HSDPA su porta USB.

Grazie alla segnalazione di un amico, ho invece comprato a prezzo veramente stracciato un telefonino Brionvega N7010 capace di connettersi in GPRS-EDGE-UMTS-HSDPA: quando non avrò più bisogno della connettività, potrò riciclarlo come telefonino regalandolo ai miei (che riescono a sfasciarne in continuazione).

In negozio si trova nuovo anche a 80 euro (luglio 2008), che è un prezzo decisamente inferiore alle sopracitate chiavette USB HSDPA, senza contare che mi è stato dato corredato da memoria MicroSD da 1Gb (con adattatore MicroSD-SecureDigital) e che di serie viene con auricolari stereo, alimentatore da parete, cavo USB (capace di ricaricare il telefonino mentre è collegato al computer).


Brionvega N7010

Il 7010 è veramente una ciofèca di telefonino, per molti aspetti:

Insomma, se confrontato al buon vecchio P900 o a qualsiasi altro telefonino costruito decentemente e dotato di interfaccia utente buona e veloce, questo 7010 fa una gran brutta figura.

Si potrebbe obiettare che costa poco. L'obiezione però è stupida, poiché il "costa poco" non giustifica la sciatteria. Per esempio, un firmware più semplice ma più veloce, renderebbe il telefonino più accattivante (e invece, chissà quanto saranno costate in fase di sviluppo quelle icone barocche).

In compenso è un modem HSDPA (mi dicono capace di 3.6 Mbit teorici). Vediamo come si comporta...


Brionvega N7010 e Linux

Premetto che ho usato la OpenSuse 10.3 col kernel distribuito di serie (che è un 2.6.17 con diverse patch).

Anzitutto collego il 7010 alla porta USB; chiedo dmesg e ottengo, nelle ultime righe, di vedere che è stato riconosciuto:
usb 1-1: new full speed USB device using uhci_hcd and address 2
usb 1-1: new device found, idVendor=05c6, idProduct=6000
usb 1-1: new device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-1: Product: Qualcomm CDMA Technologies MSM
usb 1-1: Manufacturer: Qualcomm, Incorporated
usb 1-1: configuration #1 chosen from 1 choice

Il Brionvega N7010 è dunque costruito dalla Qualcomm, ed utilizza il chipset Qualcomm 6000. Buono a sapersi, visto che nelle righe di cui sopra non è comparsa indicazione di quale porta USB seriale è associata al telefonino.

Infatti occorre caricare il modulo usbserial manualmente, specificandogli (da utente root) che deve andarselo a cercare come "Qualcomm 6000":
modprobe usbserial vendor=0x05C6 product=0x6000

Se il comando è giusto, chiamando dmesg vedremo al termine una serie di righe in più:
usbcore: registered new interface driver usbserial
drivers/usb/serial/usb-serial.c: USB Serial support registered for generic
usbcore: registered new interface driver usbserial_generic
drivers/usb/serial/usb-serial.c: USB Serial Driver core
usb 1-1: new full speed USB device using uhci_hcd and address 3
usb 1-1: new device found, idVendor=05c6, idProduct=6000
usb 1-1: new device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-1: Product: Qualcomm CDMA Technologies MSM
usb 1-1: Manufacturer: Qualcomm, Incorporated
usb 1-1: configuration #1 chosen from 1 choice
usbserial_generic 1-1:1.0: generic converter detected
usb 1-1: generic converter now attached to ttyUSB0
usbserial_generic 1-1:1.1: generic converter detected
usb 1-1: generic converter now attached to ttyUSB1
usbserial_generic 1-1:1.2: generic converter detected
usb 1-1: generic converter now attached to ttyUSB2

Dunque il telefonino presenta tre servizi seriali USB (ttyUSB0, ttyUSB1 e ttyUSB2). Il primo è la funzionalità modem; il secondo e il terzo serviranno per il backup dei dati sul computer (ma il protocollo purtroppo non è documentato, e probabilmente non lo sarà mai).

Se il comando dà errore, è probabilmente perché state usando non il kernel distribuito dalla OpenSuse, ma un altro kernel. Per esempio lo stock kernel 2.6.25.2 non permette di specificare vendor e product (idem il kernel della Xandros sull'EEE). Per assicurarsene, basta vedere quali opzioni da command-line vi si possono specificare oltre alla "debug", dando il comando:
modinfo usbserial

Se in tal caso il modulo usberial non supporta le opzioni "vendor" e "product", allora occorre compilarsi un altro kernel Linux (al momento non so specificare quale).



Col buon vecchio minicom lanciato da root ho potuto verificare l'IMEI (International Mobile Equipment Identifier: praticamente, il numero di serie del telefonino, su scala mondiale), la versione del firmware, e le capabilities:
ATZ
OK
ati
Manufacturer: QUALCOMM INCORPORATED
Model: N7010
Revision: N7010 1.3.0  1  [Apr 13 2007 15:00:00]
IMEI: 357333333333333
+GCAP: +CGSM,+FCLASS,+DS

OK

(ho riempito di "3" l'IMEI per motivi di privacy!!)

Una volta creato il link da /dev/ttyUSB0 a /dev/modem e configurato /etc/wvdial.conf si può lanciare wvdial (sempre da root) e vedere cosa dice sullo schermo:
--> Using interface ppp0
--> local  IP address 151.83.23.171
--> remote IP address 10.64.64.64
--> primary   DNS address 10.11.12.13
--> secondary DNS address 10.11.12.14
--> Script /etc/ppp/ip-up run successful
--> Default route Ok.
--> warning, can't find address for `www.suse.de`
--> warning, address lookup does not work
--> Nameserver (DNS) failure, the connection may not work.
--> Connected... Press Ctrl-C to disconnect

Ahi, ahi... spesso e volentieri, per qualche misterioso motivo che a me sfugge, i DNS ricevuti da Wind (quelli della rete interna 10.xx.yy.zz) non funzionano! Vediamo invece una sessione andata bene:
wvdial
--> WvDial: Internet dialer version 1.56 (abuild@balli)
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2
ATQ0 V1 E1 S0=0 &C1 &D2
OK
--> Modem initialized.
--> Idle Seconds = 300, disabling automatic reconnect.
--> Sending: ATDT*99#
--> Waiting for carrier.
ATDT*99#
CONNECT
--> Carrier detected.  Starting PPP immediately.
--> Starting pppd at Sat Jul  5 21:14:26 2008
--> Pid of pppd: 9182
--> Using interface ppp0
--> local  IP address 151.83.9.108
--> remote IP address 10.64.64.64
--> primary   DNS address 193.70.152.25
--> secondary DNS address 193.70.192.25
--> Script /etc/ppp/ip-up run successful
--> Default route Ok.
--> Nameserver (DNS) Ok.
--> Connected... Press Ctrl-C to disconnect

Dunque sono quelli i DNS che l'APN Wind si aspetta. Tanto vale inserirli direttamente in resolv.conf prima di connettersi, e non richiedere i DNS al momento della connessione (basta usare AutoDNS=0 nel wvdial.conf).

Premendo control-C la connessione ppp viene chiusa in modo pulito:
Caught signal 2:  Attempting to exit gracefully...
--> Terminating on signal 15
--> Connect time 2.7 minutes.
--> Disconnecting at Sat Jul  5 21:17:05 2008

Ora, il problema è come far navigare anche gli altri computer nella rete locale. Niente di più facile: subito dopo aver attivato la connessione ppp, basta richiedere il "masquerading" e abilitare il forwarding:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

In tal modo si può usare la macchina Linux come "gateway" per condividere la connessione del telefonino.


Il mio wvdial.conf

Nella configurazione di wvdial ho lasciato praticamente tutti i default tranne "modem" e "baud". Da notare che il setting di "baud" dovrebbe essere inutile. L'APN va configurato sul telefonino (deve essere "internet.wind" per la Wind, che non richiede username e password poiché identifica il chiamante a partire dal suo numero di telefono); il numero da chiamare, sia per GPRS che per UMTS/HSDPA è il solito "*99#". Dopo 300 secondi di mancato traffico (cioè "idle"), il wvdial abbatte la connessione.


[Dialer Defaults]
Modem = /dev/ttyUSB0
Baud = 921600
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2
Init3 =
Area Code =
Phone = *99#
Username = *
Password = *
Ask Password = 0
Dial Command = ATDT
Stupid Mode = 1
Compuserve = 0
Force Address =
Idle Seconds = 300
DialMessage1 =
DialMessage2 =
ISDN = 0
Auto DNS = 0


Mac OS X

Come prevedibile, sul Mac non si può usare... almeno finché non troviamo un comando equivalente a quel modprobe usbserial...

Per di più, nel dmesg del Mac non compare niente nel momento in cui viene collegato il telefonino. Da notare che avevo già installato il driver per una seriale USB (la FT232SIO), che non basta (occorrerà dunque un altro driver).

Dunque non mi rimane altro che usarlo con Linux, e da Linux esportare la connessione col "masquerading" (vedi sopra), e dal Mac usare la macchina Linux come gateway per accedere all'internet.


Eh... questa è una pagina di appunti che prima o poi dovrò decidermi a risistemare e completare!


Una ALn776 in transito in Umbria

send e-mail