Vodafone's Top Up and Go
product is a pay-as-you-go 3G
Internet service.
As I write (August 2010), you pay £15 for each chunk of credit, which
lasts a month, and gives you three gigabytes of data, through a NAT
setup with (for some reason) a transparent HTTP proxy.
The latency is pretty awful — SSH is just about usable — but
if you've got no other option it certainly works.
Before you read any further: the way I did it is not the easiest way of setting this up. In theory, NetworkManager (the desktop networking daemon that most Linux distributions ship with my default) should be able to configure it automatically. Failing that, Vodafone's R&D group provide Betavine Connection Manager, an open-source tool for driving the various cards they support, which exposes the right D-Bus interfaces for NetworkManager to be able to talk to it. (This is why I went for Vodafone rather than one of the other suppliers — much of the information below came from peering at the source for BCM.)
What I'm describing here is how to use Vodafone's service without NetworkManager. This is useful if (like me) you think NM is the spawn of the devil, or (also like me) NM completely fails to work for you in its usual undiagnosable way. Sakis3G is another way of avoiding NM, but I didn't discover it until after I'd figured out the below.
Make it a modem
(Before you fit the SIM to the modem, you may like to go through the registration dance described below.)
The modem that I got with the package is a ZTE K3570-Z, a USB stick with a SIM slot and a single LED for diagnostics (read the manual provided). As with lots of these modems, when it's first plugged in it appears to be a CD drive with the Windows drivers on. You have to send it a magic command to make it appear as a modem. On Linux, all you need to do is install usb_modeswitch, which uses a udev hook to spot the device being plugged in and flip it into the right mode.
Once it's in modem mode (for the K3570-Z, using the option
kernel module), you'll see some serial ports showing up.
I'd assumed that my 1990s modem-wrangling skills were long obsolete, but
no, these devices still accept the Hayes command set: you can open a
terminal and type AT
commands at them, and they'll respond
quite happily.
Why do you get multiple ports showing up?
It's so you can do several things with it at once: you'll use one of the
ports to dial up a PPP connection to the ISP (yes, really), and you can
use the others to send and receive text messages and the like at the
same time.
The caveat is that only one of the ports will let you make dialup
connections; the others will either hang or give an error in response to
the ATD
dialling command.
For me, ttyUSB3
works (and it turned out this was what was
tripping up NetworkManager — it was using the wrong port to dial);
if you get errors, try the others.
A useful command to feed to the modem at this point is
AT+ZCDRUN=8
, which will make it appear as a modem
immediately rather than needing to be mode-switched.
Configure PPP
If you've configured PPP for a landline modem before, this is much the
same, just with some extra setup commands to tell the modem which
wireless service to use.
The important thing to know is the APN for your service, which you
specify using an AT+CGDCONT=
command.
If you don't get this right, you'll get a ConfNak
error
from the PPP connection as it refuses to give you an IP address.
For Top Up and Go, the APN is PPBUNDLE.INTERNET
; for
Vodafone's contract bundle it's different (look at the BCM source for
more details).
The pppd config (in /etc/ppp/peers/vodafone
) looks like
this:
# pppd config for Vodafone Top Up and Go with a K3570-Z USB stick # ATD only works on ttyUSB3 for me (others hang or give NO CARRIER) /dev/ttyUSB3 460800 crtscts defaultroute noipdefault usepeerdns noauth connect "/usr/sbin/chat -v -f /etc/chatscripts/vodafone" # Authentication is required user web password web # Using CCP causes "Protocol-Reject for 'Compression Control Protocol'" noccp # Using VJ compression gives a ConfNak novj
And the corresponding chatscript (in
/etc/chatscripts/vodafone
) is:
ABORT BUSY ABORT ERROR REPORT CONNECT TIMEOUT 20 # This is the initialisation sequence from the Windows driver. "" "AT" "OK" "ATV1" "OK" "ATE0" "OK" "AT&F&D2&C1S0=0" # This is the APN for Top Up and Go ("internet" for contract). "OK" 'AT+CGDCONT=1,"IP","PPBUNDLE.INTERNET"' "OK" "ATDT*99#" TIMEOUT 30 CONNECT \\d\\c
Once those are set up, and assuming the serial port is correct, you
should be able to bring up the link using pppd debug dump nodetach
call vodafone
.
It'll produce copious debug output on the terminal and syslog, which'll
be useful if anything goes wrong.
If it's given you an IP address then you're probably OK.
Registering the SIM
The Windows software will tell you how much credit you've got, but that's not much help if you're using pppd. However, if you register the SIM on Vodafone's web site, it'll tell you how much of your package you've used, and let you top it up online.
The only problem is that to do this, you have to know the phone
number.
This isn't printed on the packaging anywhere, nor does it appear to be
stored in the usual location on the SIM.
I resorted to putting the SIM in a normal phone and dialling
*#100#
, which'll ask the network for the number.
Feed that into Vodafone's web site, and it'll send you a text message
with a confirmation code.
Once it's registered, put the SIM back in the modem.
(If you want to receive the text message using the modem, open a
terminal on one of the non-PPP ports.
It'll say something like +CMTI: "ME",1
when the message is
received, meaning it's received a message and stored it in area
ME
, slot 1.
To retrieve the message, select the area with AT+CPMS="ME"
,
read it with AT+CMGR=1
, then delete it with
AT+CMGD=1
.)