Mobile Broadband Cards and Linux: Cingular / UMTS on openSUSE 10.2

I finally decided that getting a mobile broadband card would be worthwhile. Watching some of my friends and colleagues use them in airports and at customer sites went a long way toward convincing me.

Since my employer uses the former and once again current AT&T Wireless, I looked into the two 3G cards they offer:

Both use the UMTS/HSDPA 3G network, as well as the GPRS/EDGE network as a fallback. Of course I was most interested in getting a card that works under Linux, so I found the PHARscape web site most helpful. This site covered getting the Option cards working, and I was not able to find much on the Sierra card, so that decision was easy. Also, the Option card has a nice retractable antenna, so it sticks out less:

Option card

As for getting the card to work, it was surprisingly painless.

Note: If you are using SUSE Linux Enterprise Desktop 10 SP1, openSUSE 10.3, or are using a really recent kernel on another distribution (2.6.20-ish or later), step 1 is not necessary, so skip right to step 2, which is configuring the dialup device.  Just point your modem to /dev/ttyUSB0 and off you go.

Step 1. Getting the usbserial driver to recognize the card

Simply modprobe usbserial with the idVendor and idProduct tags. The following are the right tags for the Option GT MAX 3.6 card. You can find the right valued by looking in syslog when you plug the card in. The line will look like this:

Feb 5 12:57:55 hillsuse kernel: usb 7-1: new device found, idVendor=0af0, idProduct=6701

Once you have the right info, modprobe the usbserial driver with them. You may have to unload usbserial if it’s already loaded (I did):

# modprobe -r usbserial

# modprobe usbserial vendor=0x0af0 product=0x6701

If this step is successful, you will see messages in syslog like this: Feb 5 12:57:55 hillsuse kernel: usbcore: registered new driver usbserial
Feb 5 12:57:55 hillsuse kernel: drivers/usb/serial/usb-serial.c: USB Serial support registered for generic
Feb 5 12:57:55 hillsuse kernel: usbserial_generic 7-1:1.0: generic converter detected
Feb 5 12:57:55 hillsuse kernel: usb 7-1: generic converter now attached to ttyUSB0
Feb 5 12:57:55 hillsuse kernel: usbserial_generic 7-1:1.1: generic converter detected
Feb 5 12:57:55 hillsuse kernel: usb 7-1: generic converter now attached to ttyUSB1
Feb 5 12:57:55 hillsuse kernel: usbserial_generic 7-1:1.2: generic converter detected
Feb 5 12:57:55 hillsuse kernel: usb 7-1: generic converter now attached to ttyUSB2

Step 1b. Automating the above with udev

To make the card “just work” when it is plugged in, we need to create a udev rule. To do that, create /etc/udev/rules.d/51-3g-datacards.rules containing the following:

# Rules for hotplugging Cardbus 3G datacards
SUBSYSTEM=="usb", SYSFS{idVendor}=="0af0", SYSFS{idProduct}=="6701", RUN="/etc/cingularcard.sh"
KERNEL=="ttyUSB0", SYMLINK="modem", GROUP="dialout", MODE="0660"
KERNEL=="ttyUSB2", GROUP="dialout" MODE="0660"

We also need to create /etc/cingularcard.sh, as follows:

#!/bin/bash
/sbin/modprobe -r usbserial
/sbin/modprobe usbserial vendor=0x0af0 product=0x6701

The two files above will automatically load the usbserial driver for the card, and create a symlink to the ttyUSB0 port on /dev/modem.

Step 2. Configuring the modem

The last thing to do is configure the card as a modem so you can actually connect with it. Load up YaST or other favorite tool, and add a new modem using device /dev/modem, as in the following screenshots.

yast-modem1.png

yast-modem2.png

The important thing in the image above is the second intitialization command. For Cingular, it needs to be as follows:

AT+CGDCONT=1,"IP","ISP.CINGULAR"

The next step is creating the ISP/provider entry that contains the phone number to dial:

yast-modem3.png

For Cingular, here are the correct details:

Phone number: *99***1#

User name: WAP@CINGULARGPRS.COM

Password: cingular1

Step 3. Dial!

I use NetworkManager, which works fine except it doesn’t give you any feedback on modem connection status. I also highly recommend the following tools to use with these cards:

  • umtsmon – graphical connection status (signal strength, radio type, etc)
  • comgt – command-line management of card (PIN management, network switch, etc)
Share

12 Responses to “Mobile Broadband Cards and Linux: Cingular / UMTS on openSUSE 10.2”


  • Thanks for the detailed description on how to get the Cingular network to work with OpenSUSE.

    I installed it with Suse Linux Enterprise 10, using an Aircard 875 by just changing the vendor and product IDs to match the one on my card.

    Miguel.

  • POR Q BORRARON MI COMENTARIO, SOLO QUERIA SABER COMO TENGO CONTACTO CON MIGUEL DE ICAZA GRAX O UN FORO EN ESPAÑOL

  • ME GUSTARIA INTERACTUAR CON EL GRACIAS POR SU ATENCION

  • Great info. I’m hoping to use this to setup an old PC of mine as a “gateway” to the Internet in my home. The only option I have for Internet service in my location is satellite, but I’ve heard horror stories about them, plus I’d have to sign up for a 1-2yr contract (depending on the deal). Since I’m only renting my house, and I hope to move somewhere that has high-speed Internet eventually, I don’t really want to sign a long-term deal with them. I bought the Sierra 875 card, and have it working now with an old WinXP box. But the connection drops approximately “whenever it feels like it” and the recovery process requires that I reboot the box (something about Cingular Communication Manager that won’t let it reconnect and re-establish a working Internet connection), so I was thinking that a Linux setup would be more reliable, more recoverable, and (best of all) less susceptable to virus/attacks from the ‘net.

    So I’m curious – what kind of performance do you get through this setup?

  • For what it’s worth, this works with any distro that’s running a 2.6 Kernel, with PPP, and KDE . . . kppp with the parameters you specify works great . . . .

    - Tim

  • Andy
    I’ve tweaked this since I use a verizon Sierra wireless card. When I run /etc/verizoncard.sh i get errors:FATAL: Module usbserial is in use.

    It also doesn’t work when called from 51-3g-datacards.rules:
    run_program: exec of program ‘/etc/verizoncard.sh’ failed

    Thoughts?

  • Try the specific driver “sierra.ko” instead of generic usbserial

  • Very useful tutorial. I will change things slightly to have work in debian.thanks a lot

Comments are currently closed.