3Com 3CRSHPW796 in Linux

(spanish version)


Updated 01/02/2004


Eduardo Espina (eduardomx@gmail.com)

This paper is intended to be an installation guide for the 3Com PCMCIA 3CRSHPW796 (wireless) card in Linux, this card is compatible with the IEEE 802.11b (Wi-Fi) protocol.

This guide is focused on "infraestructure" (managed) mode., this means you should have an Access point, perhaps could be adapted to work as "ad-hoc" with slight modifications in configuration files.


Background

3Com offers a family of low-cost wireless cards known as "Officeconnect", the model names in this family are: 3CRSHPW196, 3CRSHEW696 and 3CRSHPW796. The 3CRSHPW196 and 3CRSHEW696 have extensive documentation over the Internet, they use the atmel driver. But the 3CRSHPW796 model doesn't use the same chipset, despite being sold under the same family.


The dissection

The first step was to try to identify the chipset used by this card, but the information returned by commands like "cardctl ident" or "lspci -v" doesn't help much.
After some weeks of useless efforts to find information about this card, and after asked technical support at 3Com and got no answer, i decided to open up the card and see the chipset, an adm8211 by ADMTek. Later i found great info at FCC, through the FCC ID number.


chipset         chipset

This chipset is used by many vendors (D-link, SMC and others that can be found on Jean Tourrilhes homepage) and has generic drivers for Linux, these drivers are offered by Admtek and can be downloaded from here, but doesn't work "out-of-the-box" for the 3Com 3CRSHPW796 card, so we need to apply a patch.


Software required
* Included in most recent linux distributions
** The patch i made is experimental and it works fine, but if your computer gets auto-destroyed, it's NOT my fault.


Configuration

Important: Eject the card before start the process.
Next we have to untar and patch the driver source code:


tar zxvf ADM8211_src_105.tar.gz
cp ADM8211_src_105.patch ADM8211
cd ADM8211
patch -p0 < ADM8211_src_105.patch
ln -s /usr/src/linux-2.4.18 /usr/src/linux-2.4
make


For the next steps we'll need root privileges to install the module.
Add the following lines to file /etc/pcmcia/config

device "8211"
   class "network" module "8211"

card "3Com Corporation"
  manfid 0x10b7,0x6000
  bind "8211"


Install the module:

cp 8211.o /lib/modules/2.4.19-4GB/pcmcia/
modprobe -r
depmod -a


* The path need to be the appropriate for your kernel version

Now we can insert the card and should see something like this in /var/log/messages:

Aug 12 23:30:57 linux kernel: cs: cb_alloc(bus 1): vendor 0x10b7, device 0x6000
Aug 12 23:30:57 linux kernel: PCI: Enabling device 01:00.0 (0000 -> 0003)
Aug 12 23:30:58 linux cardmgr[544]: socket 0: CardBus hotplug device
Aug 12 23:30:59 linux kernel: ADM8211 Linux driver version 1.05 (June 24, 2003)
Aug 12 23:30:59 linux kernel: PCI: Setting latency timer of device 01:00.0 to 64
Aug 12 23:30:59 linux kernel: 8211: Hardware Address 00:0B:XX:XX:XX:XX, IRQ 11.
Aug 12 23:30:59 linux kernel: eth0: ADMtek Wireless rev 17 at 0x4000
Aug 12 23:30:59 linux insmod: Using /lib/modules/2.4.19-4GB/pcmcia/8211.o
Aug 12 23:30:59 linux insmod: Symbol version prefix ''
Aug 12 23:30:59 linux insmod: Warning: loading /lib/modules/2.4.19-4GB/pcmcia/8211.o will taint the kernel: non-GPL license - Proprietary
Aug 12 23:30:59 linux insmod:   See http://www.tux.org/lkml/#export-tainted for information about tainted modules
Aug 12 23:30:59 linux insmod: Module 8211 loaded, with warnings

We're almost done, what we need to do next is check connectivity through ifconfig:

ifconfig -a

Output should look like this:

eth0      Link encap:Ethernet  HWaddr 00:0B:XX:XX:XX:XX
          inet6 addr: fe80::20b:acff:fee6:4533/10 Scope:Link
          UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5165 errors:0 dropped:0 overruns:0 frame:0
          TX packets:73 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:372876 (364.1 Kb)  TX bytes:21474 (20.9 Kb)
          Interrupt:11 Base address:0x4000

We assign a valid IP for our network, for instance:

ifconfig eth0 192.168.1.1 netmask 255.255.255.0

Next we'll define parameters for the wireless networking:

iwconfig eth0 essid mynet channel 8 nick mymachine key 9EO5IHR839TIOE39PT2SPEORS

Where:
essid:   SSID for our network
channel:   channel we use
nick:   host name
key:   in case we use WEP (recommended), this is the cipher key

* A basic security measure is to disable the SSID broadcast (at accesspoint), nevertheless, with this driver it's not possible to reach the accesspoint after disabling the SSID broadcast. :(


So far so good, we can now try some pings to the accesspoint (in case this is the gateway) and next ping some other machine on the Internet.


Automation

To enable the wireless networking at boot, it's necessary to modify the following files:

/etc/sysconfig/network/ifcfg-eth-pcmcia
in some linux distros: /etc/sysconfig/network-scripts/ifcfg-eth0

BOOTPROTO='dhcp'
DHCLIENT_SET_DOWN_LINK='yes'
REMOTE_IPADDR=''
STARTMODE='hotplug'
UNIQUE=''
WIRELESS='yes'


/etc/sysconfig/network/wireless

WIRELESS="yes"
WIRELESS_MODE="Managed"
WIRELESS_ESSID="mired"
WIRELESS_NICK="mimaquina"
WIRELESS_CHANNEL="8"
WIRELESS_KEY="9EO5IHR839TIOE39PT2SPEORS"



It's recommended to configure a firewall, wich can be implemented with IPTABLES, you can check the IP-TABLES HOWTO.


Final comments

I've received many questions about the driver being compiled with different distros, in fact i have compiled the driver successfully in SuSE, Debian and people have compiled in Redhat without problems.

[home] [papers] [weblog] [fotos]