Recently, Telstra Bigpond have changed the pricing on their NextG broadband that makes it (gasp!) actually competitive if you have your mobile and home phone already with them. So, interested in having a postpaid wireless broadband/redundant Internet link for an all-up price of a couple of takeaway coffees a month, I go ahead and sign up.
A few days later, Bigpond send me a shiny new ZTE MF633BP USB modem. After some initial dealing-with-a-telco-what’s-new dramas with the account not being set up correctly I manage to register the account for the first time and get online using the ugly Bigpond connection manager running on a Windows XP laptop machine. Now that’s all nice and fine but I want it to work on Linux…
Some Internet sleuthing informed me that these modems default to “Windows CD driver” mode. The idea being that instead of shipping the modem with a Windows driver CD (which inevitably gets lost), the modem first appears as just a USB drive with the Windows driver on it so you install that first. After the Windows driver is installed, it will “flip” the modem out of CD driver and into modem mode.
The equivalent flip function on Linux is provided by usb_modeswitch. Apparently, the option kernel driver for USB modems also tries to set these devices to modem mode based on their USB ID. The problem is, many different ONDA/ZTE modems report the same USB IDs even though they have completely different flip commands. Net result – nothing happens. Argh!
Eventually, the modem got put back into the Windows machine, and after trawling through Device Manager to find the modem’s diagnostics serial port, I follow these instructions and permanently flip the device into modem mode.
modprobe the option kernel driver, pop the modem back into the Linux box and I’m rewarded on the console with signs of success:
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
option 1-1:1.1: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
option 1-1:1.3: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
option 1-1:1.4: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB3
(The on-board MicroSD adapter is detected as a removable SCSI disk)
Which serial port?
The modem presents two ttyUSB devices that we’re interested in. Both respond to AT modem commands.
The first, the diagnostics port, is designed for applications like the Bigpond connection manager to continuously poll the device’s online/offline status, band, mode, etc. The second port is the data port – this is the main port and one we’ll use with ppp later.
After trying all the ports in minicom I discover ttyUSB1 and and ttyUSB2
Press CTRL-A Z for help on special keys
Manufacturer: ZTE CORPORATION
Revision: M01 BP
How do we find the data port? The trick lies in the main difference between the two ports – the diagnostics port will not let a data connection be made on it. Using minicom, I send the standard *99# GSM/3G modem dialup command to both ports and watch what happens:
Ah-ha! ttyUSB1 is my diagnostics port and ttyUSB2 is my data port.
From this point on, the modem can be set up like any other type of connection using a ppp dialer of choice. I prefer the command line and I use pppconfig. These are the basic details I used.
Dialup number: *99***4#
Username/password: Bigpond details as signed up
I called my connection Bigpond (A flair for originality, eh?) so I issue the command
and keep an eye on syslog:
pppd: using channel 12
pppd: Using interface ppp1
pppd: Connect: ppp1 <--> /dev/ttyUSB2
pppd: PAP authentication succeeded
pppd: Cannot determine ethernet address for proxy ARP
pppd: local IP address 121.221.x.x
pppd: remote IP address 10.64.64.65
In part 2, I’ll explain how I set up the new NextG connection to be a redundant Internet link with a bit of automatic fail-over and using the Linux Advanced Routing & Traffic Control HOWTO to make traffic go out via the same interface it came in through.