I wanted to explore the possibility of using Reliance Netconnect with my openSUSE 11.1. Finally, I managed to try this out today at two different outlets in Jayanagar.  I must say that I’m partially successful as I could get it working once and got a speed of 0.5Mbps.  Here is the summary.

Several new USB devices have their MS Windows drivers onboard; when plugged in for the first time they act like a flash storage and start installing the driver from there. After that (and on every consecutive plugging) this driver switches the mode internally, the storage device vanishes (in most cases), and a new device (like an USB modem) shows up. The WWAN gear maker Option calls that feature “ZeroCD (TM)”.  Reliance Netconnect modems are of type ZeroCD.

The first thing that you notice when you plug-in the modem is that, it mounts as a storage device.

Jul 11 17:07:34 jjaimon-ibm kernel: usb 1-2: new full speed USB device using uhci_hcd and address 7
Jul 11 17:07:34 jjaimon-ibm kernel: usb 1-2: configuration #1 chosen from 1 choice
Jul 11 17:07:34 jjaimon-ibm kernel: usbserial_generic 1-2:1.0: generic converter detected
Jul 11 17:07:34 jjaimon-ibm kernel: usb 1-2: New USB device found, idVendor=19d2, idProduct=fff6
Jul 11 17:07:34 jjaimon-ibm kernel: usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Jul 11 17:07:34 jjaimon-ibm kernel: usb 1-2: Product: USB Storage
Jul 11 17:07:34 jjaimon-ibm kernel: usb 1-2: Manufacturer: ZTE, Incorporated
Jul 11 17:07:34 jjaimon-ibm kernel: usb 1-2: SerialNumber: 000000000002
Jul 11 17:07:34 jjaimon-ibm kernel: Initializing USB Mass Storage driver...
Jul 11 17:07:34 jjaimon-ibm kernel: usbcore: registered new interface driver usb-storage
Jul 11 17:07:34 jjaimon-ibm kernel: USB Mass Storage support registered.

As you notice, the modem is not connected as a serial device and its registered to usb-storage.  One way of getting the serial device created is by unloading the usb-storage module and reloading the usbserial.  For eg.
modprobe -r usb-storage usbserial; modeprobe usbserial vendor=0x19d2 product=0xfff6

However, this alone will not be sufficient as the product id is still pointing to storage device.  This is where usb-modeswitch comes handy.

The device was listed as ZTE 8710 and there is an entry for this device already in my /etc/usb_modeswitch.conf.  All that I had to do was uncomment the following lines

# No. 2

DefaultVendor=  0x19d2
DefaultProduct= 0xfff6

TargetVendor=   0x19d2
TargetProduct=  0xfff1

You must run usb_modeswitch once the modem is connected.  You will see the following output if everything goes well.

jjaimon-ibm:/etc # usb_modeswitch -W

 * usb_modeswitch: tool for controlling "flip flop" mode USB devices
 * Version 1.0.2 (C) Josua Dietze 2009
 * Works with libusb 0.1.12 and probably other versions

Reading config file: /etc/usb_modeswitch.conf
DefaultVendor=  0x19d2
DefaultProduct= 0xfff6
TargetVendor=   0x19d2
TargetProduct=  0xfff1
TargetClass=    not set

DetachStorageOnly=0
HuaweiMode=0
SierraMode=0
SonyMode=0
MessageEndpoint= not set
MessageContent="5553424312345678c00000008000069f030000000000000000000000000000"
NeedResponse=0
ResponseEndpoint= not set
Interface=0x00

InquireDevice enabled (default)
Success check enabled, settle time 2 seconds

usb_set_debug: Setting debugging level to 15 (on)
usb_os_find_busses: Found 005
usb_os_find_busses: Found 002
usb_os_find_busses: Found 004
usb_os_find_busses: Found 001
usb_os_find_busses: Found 003
usb_os_find_devices: Found 001 on 005
usb_os_find_devices: Found 001 on 002
usb_os_find_devices: Found 003 on 004
usb_os_find_devices: Found 002 on 004
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 004
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 014 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 003

Looking for target devices ...
 No devices in target mode or class found
Looking for default devices ...
 Found default devices (1)
Accessing device 014 on bus 001 ...
Using endpoints 0x0a (out) and 0x89 (in)
Inquiring device details; driver will be detached ...
Looking for active driver ...
 OK, driver found ("usb-storage")
 OK, driver "usb-storage" detached

Received inquiry data (detailed identification)
-------------------------
 Vendor String: ZTE
 Product String: USB Storage FFF1
Revision String: 2.31
-------------------------

Device description data (identification)
-------------------------
Manufacturer: ZTE, Incorporated
 Product: USB Storage
 Serial No.: 000000000002
-------------------------
Setting up communication with interface 0 ...
Trying to send the message to endpoint 0x0a ...
 OK, message successfully sent
USB error: could not clear/halt ep 10: Protocol error
Device is gone, skipping further steps ...
Checking for mode switch after 2 seconds settling time ...
USB error: failed to open /dev/bus/usb/001/014: No such file or directory
USB error: could not claim interface 0: Bad file descriptor
 Original device can't be accessed anymore. Good.
usb_os_find_devices: Found 001 on 005
usb_os_find_devices: Found 001 on 002
usb_os_find_devices: Found 003 on 004
usb_os_find_devices: Found 002 on 004
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 004
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 015 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 003
 Found a new device in target mode or class

Mode switch succeeded. Bye.

After this, you must have a /dev/ttyUSB0 device created. You can verify this with lsusb command.  You should see the new product id now.  wvdialconf should also report the presence of new modem device.

And with the following entries in your /etc/wvdial.conf, you should be able to connect...

[Dialer zte]
Init2 = AT+CRM=1
Stupid Mode = 1
Modem Type = Analog Modem
ISDN = 0
SetVolume = 0
FlowControl = Hardware (CRTSCTS)
Phone = #777
Modem = /dev/ttyUSB0
Username = 93xxxxxxx
Password = 93xxxxxxx
Dial Command = ATDT
Baud = 460800

jjaimon-ibm:/etc # wvdial zte
--> WvDial: Internet dialer version 1.60
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: AT+CRM=1
AT+CRM=1
OK
--> Sending: ATM0
ATM0
OK
--> Modem initialized.
--> Sending: ATDT#777
--> Waiting for carrier.
ATDT#777
CONNECT
--> Carrier detected.  Starting PPP immediately.
--> Starting pppd at Sat Jul 11 18:04:31 2009
--> Pid of pppd: 14798
--> Using interface ppp0
--> local  IP address 115.240.5.100
--> remote IP address 220.224.141.129
--> primary   DNS address 202.138.97.193
--> secondary DNS address 202.138.96.2
--> Script /etc/ppp/ip-up run successful
--> Default route Ok.
--> Nameserver (DNS) Ok.
--> Connected... Press Ctrl-C to disconnect

This can be automated by using a udev rule.  More information is provided here. There are also some references in reliance usergroups.   Here is one post that helped me to look at usb_modeswitch

jjaimon-ibm:/etc # usb_modeswitch -W

* usb_modeswitch: tool for controlling "flip flop" mode USB devices
* Version 1.0.2 (C) Josua Dietze 2009
* Works with libusb 0.1.12 and probably other versions

Reading config file: /etc/usb_modeswitch.conf
DefaultVendor=  0x19d2
DefaultProduct= 0xfff6
TargetVendor=   0x19d2
TargetProduct=  0xfff1
TargetClass=    not set

DetachStorageOnly=0
HuaweiMode=0
SierraMode=0
SonyMode=0
MessageEndpoint= not set
MessageContent="5553424312345678c00000008000069f030000000000000000000000000000"
NeedResponse=0
ResponseEndpoint= not set
Interface=0x00

InquireDevice enabled (default)
Success check enabled, settle time 2 seconds

usb_set_debug: Setting debugging level to 15 (on)
usb_os_find_busses: Found 005
usb_os_find_busses: Found 002
usb_os_find_busses: Found 004
usb_os_find_busses: Found 001
usb_os_find_busses: Found 003
usb_os_find_devices: Found 001 on 005
usb_os_find_devices: Found 001 on 002
usb_os_find_devices: Found 003 on 004
usb_os_find_devices: Found 002 on 004
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 004
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 014 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 003

Looking for target devices ...
No devices in target mode or class found
Looking for default devices ...
Found default devices (1)
Accessing device 014 on bus 001 ...
Using endpoints 0x0a (out) and 0x89 (in)
Inquiring device details; driver will be detached ...
Looking for active driver ...
OK, driver found ("usb-storage")
OK, driver "usb-storage" detached

Received inquiry data (detailed identification)
-------------------------
Vendor String: ZTE
Product String: USB Storage FFF1
Revision String: 2.31
-------------------------

Device description data (identification)
-------------------------
Manufacturer: ZTE, Incorporated
Product: USB Storage
Serial No.: 000000000002
-------------------------
Setting up communication with interface 0 ...
Trying to send the message to endpoint 0x0a ...
OK, message successfully sent
USB error: could not clear/halt ep 10: Protocol error
Device is gone, skipping further steps ...
Checking for mode switch after 2 seconds settling time ...
USB error: failed to open /dev/bus/usb/001/014: No such file or directory
USB error: could not claim interface 0: Bad file descriptor
Original device can't be accessed anymore. Good.
usb_os_find_devices: Found 001 on 005
usb_os_find_devices: Found 001 on 002
usb_os_find_devices: Found 003 on 004
usb_os_find_devices: Found 002 on 004
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 004
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 015 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 003
Found a new device in target mode or class

Mode switch succeeded. Bye.