I’ll be attending the acm regional intercollegiate programming contest next weekend and one of the things we have traditionally done on the way up there is to find geeky ways to pass the time in the van. In the past year, I convinced my parents to let me subscribe to the unlimited T-Mobile GPRS plan. This has obvious practical applications, including the ability to have network connectivity even when in a moving vehicle.

One of the past limitations of this was that the cable I purchased occupied the entire slot on the base of the phone due to the fact that the phone needs a resistor across the first and second pins in order to tell that a cable was plugged into it. Unfortunately, that means that there’s no charging of the phone while using it for data. But thanks to Tristan’s excellent soldering job, I now have a cable that allow my phone to be plugged in to a car charger and connected to GPRS simultaneously.

A few weeks ago, I picked up an Xbox and installed Xebian/Xbox GNU/Linux onto it. It occurred to me that this would be the perfect platform to serve up the network access and perform some additional tasks, such as uploading the coordinates from a GPS unit to a web server tracking our progress. (Alternatives include plugging the device into mine or the other passenger’s laptops the whole time)

So how does one go about setting this up? For starters, I need to be able to have the Xbox establish a GPRS connection on its own. This requires that the Xbox load the usbserial module on boot:

# /etc/modules.xbox: kernel modules to load at boot time.
#
# This file should contain the names of kernel modules that are
# to be loaded at boot time, one per line. Comments begin with
# a “#", and everything on the line after them are ignored.

loop
input
keybdev
mousedev
joydev
sunrpc
lockd
nfs
scsi_mod
sd_mod
lirc_dev
lirc_xir
usbserial

The next step is to set up pppd for the T-Mobile GPRS service. I have the “VPN” service, but most users with unlimited access will have the regular one. The main difference is that the “VPN” service gets you a public IP address and must be specifically requested. In places where internet3.voicestream.com is used, internet2.voicestream.com should be replaced if this is the case. While I was writing it, I used Brad Midgley’s T-Mobile GPRS page and the Eridani Linux pages as references.

The /etc/ppp/peers/tmobile file:

# File: /etc/ppp/peers/tmobile
#
connect “/usr/sbin/chat -v -f /etc/chatscripts/tmobile”
/dev/usb/acm/0 # Motorola Phone Cable
115200 # speed
nodetach # don’t fork
debug # show debugging info
defaultroute # set the default route
replacedefaultroute # yes, override the default route
usepeerdns # get the dns servers from the tunnel
crtscts # do flow control
noauth # no authentication required
deflate 0 # don’t compress
asyncmap 0
mtu 1500
mru 1500
noipdefault
idle 600

The /etc/ppp/chatscripts/tmobile file:

ABORT ERROR
‘’ AT&F
OK AT+CGDCONT=1,"IP","internet3.voicestream.com”
OK ATDT*99#
CONNECT ‘’

The /etc/ppp/pap-secrets file:

(none) * password
‘’ tmobile

With that configured, pon tmobile activates the GPRS connection and poff tmobile deactivates it.