Finalmente tive a oportunidade de pegar uma das placas 3G, com chip da Claro. Uma das vantagens da migração do FreeBSD pro Linux é justamente a facilidade no reconhecimento de novos hardwares. A placa foi identificada de imediato pelo meu OpenSuse 11:
usb usb7: configuration #1 chosen from 1 choice hub 7-0:1.0: USB hub found hub 7-0:1.0: 1 port detected
usb usb7: New USB device found, idVendor=1d6b, idProduct=0001
usb usb7: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb7: Product: OHCI Host Controller
usb usb7: Manufacturer: Linux 2.6.25.20-0.4-default ohci_hcd
usb usb7: SerialNumber: 0000:03:00.1
usb 6-1: new full speed USB device using ohci_hcd and address 2
usb 6-1: configuration #2 chosen from 1 choice
usb 6-1: New USB device found, idVendor=0fce, idProduct=d0b2
usb 6-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 6-1: Product: Sony Ericsson PC300
usb 6-1: Manufacturer: Sony Ericsson
usb 6-1: SerialNumber: 3579310101884440
cdc_acm 6-1:2.1: ttyACM0: USB ACM device
cdc_acm 6-1:2.3: ttyACM1: USB ACM device
usbcore: registered new interface driver cdc_acm
drivers/usb/class/cdc-acm.c: v0.25:USB Abstract Control Model driver for USB modems and ISDN adapters
usb0: register 'cdc_ether' at usb-0000:03:00.0-1, CDC Ethernet Device, 02:80:37:0a:03:00
usbcore: registered new interface driver cdc_ether
usb0: no IPv6 routers present
O driver cdc_acm foi carregado automaticamente.
Para fazer a discagem, instalei o aplicativo wvdial, velho companheiro dos tempos de modem discado, à 14400 bps. Utilizando o wvdialconf, a placa 3G é automagicamente identificada:
Editing `/etc/wvdial.conf'.
Scanning your serial ports for a modem.
Modem Port Scan<*1>: S0 S1
ttyS2<*1>: ATQ0 V1 E1 -- failed with 2400 baud, next try: 9600 baud
ttyS2<*1>: ATQ0 V1 E1 -- failed with 9600 baud, next try: 115200 baud
ttyS2<*1>: ATQ0 V1 E1 -- and failed too at 115200, giving up.
Modem Port Scan<*1>: S3
ttyS4: No such device or address
Modem Port Scan<*1>: S4
ttyS5: No such device or address
Modem Port Scan<*1>: S5
ttyS6: No such device or address
Modem Port Scan<*1>: S6
ttyS7: No such device or address
Modem Port Scan<*1>: S7
WvModem<*1>: Cannot get information for serial port.
ttyACM0<*1>: ATQ0 V1 E1 -- OK
ttyACM0<*1>: ATQ0 V1 E1 Z -- OK
ttyACM0<*1>: ATQ0 V1 E1 S0=0 -- OK
ttyACM0<*1>: ATQ0 V1 E1 S0=0 &C1; -- OK
ttyACM0<*1>: ATQ0 V1 E1 S0=0 &C1; &D2; -- OK
ttyACM0<*1>: ATQ0 V1 E1 S0=0 &C1; &D2; +FCLASS=0 -- OK
ttyACM0<*1>: Modem Identifier: ATI -- PC300
ttyACM0<*1>: Speed 4800: AT -- OK
ttyACM0<*1>: Speed 9600: AT -- OK
ttyACM0<*1>: Speed 19200: AT -- OK
ttyACM0<*1>: Speed 38400: AT -- OK
ttyACM0<*1>: Speed 57600: AT -- OK
ttyACM0<*1>: Speed 115200: AT -- OK
ttyACM0<*1>: Speed 230400: AT -- OK
ttyACM0<*1>: Speed 460800: AT -- OK
ttyACM0<*1>: Max speed is 460800; that should be safe.
ttyACM0<*1>: ATQ0 V1 E1 S0=0 &C1; &D2; +FCLASS=0 -- OK
WvModem<*1>: Cannot get information for serial port.
ttyACM1<*1>: ATQ0 V1 E1 -- OK
ttyACM1<*1>: ATQ0 V1 E1 Z -- OK
ttyACM1<*1>: ATQ0 V1 E1 S0=0 -- OK
ttyACM1<*1>: ATQ0 V1 E1 S0=0 &C1; -- OK
ttyACM1<*1>: ATQ0 V1 E1 S0=0 &C1; &D2; -- OK
ttyACM1<*1>: ATQ0 V1 E1 S0=0 &C1; &D2; +FCLASS=0 -- OK
ttyACM1<*1>: Modem Identifier: ATI -- PC300
ttyACM1<*1>: Speed 4800: AT -- OK
ttyACM1<*1>: Speed 9600: AT -- OK
ttyACM1<*1>: Speed 19200: AT -- OK
ttyACM1<*1>: Speed 38400: AT -- OK
ttyACM1<*1>: Speed 57600: AT -- OK
ttyACM1<*1>: Speed 115200: AT -- OK
ttyACM1<*1>: Speed 230400: AT -- OK
ttyACM1<*1>: Speed 460800: AT -- OK
ttyACM1<*1>: Max speed is 460800; that should be safe.
ttyACM1<*1>: ATQ0 V1 E1 S0=0 &C1; &D2; +FCLASS=0 -- OK
Found an USB modem on /dev/ttyACM0.
Modem configuration written to /etc/wvdial.conf.
ttyACM0: Speed 460800; init "ATQ0 V1 E1 S0=0 &C1; &D2; +FCLASS=0"
ttyACM1: Speed 460800; init "ATQ0 V1 E1 S0=0 &C1; &D2; +FCLASS=0"
Esperava ver mais velocidade, mas 460k já é melhor que nada. Infelizmente a configuração padrão não funcionou de jeito nenhum. Vasculhando google afora, encontrei o link de configuração para outro tipo de modem, o E-226:
Adaptei a mesma para o PC300, como mostra meu /etc/wvdial.conf abaixo:
[Dialer Defaults]
Carrier Check = off
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1; &D2; +FCLASS=0
Password = claro
Ask Password = 0
Check Def Route = 1
Phone = *99***1#
Idle Seconds = 0
Modem Type = Analog Modem
Stupid Mode = 1
Compuserve = 0
Baud = 460800
Auto DNS = off
Dial Command = ATDT
Modem = /dev/ttyACM0
ISDN = 0
Username = claro
[Dialer claro3g]
Stupid Mode = on
Password = claro
Auto Reconnect = off
Username = claro
Phone = *99***1#
Também precisei editar o arquivo /etc/ppp/peers/wvdial para desabilitar as opções de compressão:
plugin passwordfd.so
noauth
name wvdial
debug
kdebug 9
record /tmp/pppd.dump
noccp
novj
novjccomp
Com isso consegui a conexão via 3G, bastando digitar wvdial.
--> WvDial: Internet dialer version 1.60
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1; &D2; +FCLASS=0
ATQ0 V1 E1 S0=0 &C1; &D2; +FCLASS=0
OK
--> Modem initialized.
--> Sending: ATDT*99***1#
--> Waiting for carrier.
ATDT*99***1#
~[7f]}#@!}!}!} }9}#}%B#}%}(}"}'}"}"}&} } } } }%}&n;>}/qzY~
CONNECT
--> Carrier detected. Starting PPP immediately.
--> Starting pppd at Fri Jul 31 21:34:15 2009
--> Pid of pppd: 14211
--> Using interface ppp0
--> Authentication (CHAP) started
--> Authentication (CHAP) successful
--> local IP address 189.94.168.217
--> remote IP address 10.64.64.64
--> Script /etc/ppp/ip-up run successful
--> Default route Ok.
--> Nameserver (DNS) Ok.
--> Connected... Press Ctrl-C to disconnect
Não é muito rápido, mas ajuda muito em locais sem opção de Internet, como quando estou dentro do site de clientes.