Fedora Core 6 and the IPW2200 Wireless Driver

Bill Moss
Updated August 25, 2007

kernel-2.6.22.2-42.fc6, ipw2200-1.2.2, ieee80211-1.2.18, firmware-3.0

Pre-installation kernel check, firmware install

If you have a fresh install of FC6 on i686 hardware, the installer may have installed the i586 kernel in error.

  Check: /boot/config-2.6.18-1.2798.fc6
  Check: /root/install.log
  
  Download kernel-2.6.18-1.2798.fc6.i686.rpm
  rpm -e kernel-devel-2.6.18-1.2798.fc6 (if installed)
  rpm -Uvh --replacefiles --replacepkgs kernel-2.6.18-1.2798.fc6.i686.rpm
  reboot

Next, do

  yum --enablerepo=updates update

to upgrade to the latest FC6 kernel.

The FC6 kernel 2.6.22.2-42.fc6 includes version 1.2.0 of the ipw2200 driver. Because the firmware is proprietary, you will have to install version 3.0 yourself if you have not already done so.

  Download ipw2200-fw-3.0.tgz from http://ipw2200.sourceforge.net/firmware.php
  unarchive in /lib/firmware
  
  or to install all firmware versions
  
  # rpm -ivh http://rpm.livna.org/livna-release-6.rpm
  # yum install ipw2200-firmware

Make sure you install the correct firmware version. The firmware web site links to the firmware by ipw2200 version. Make sure that the firmware files are installed in /lib/firmware and not in a subdirectory.

Most users will be satisfied with the performance of version 1.2.0 of the ipw2200 driver. It is not necessary to install the latest version of the driver. However, if you decide that you want to try it, the remainder of this section shows you how to manually install the latest versions of the ipw2200 driver and the ieee80211 subsystem.

Installation of the latest ipw2200 driver

Install firmware version 3.0 and then follow these steps. We will assume here that all install directories are subdirectories of /root.

Install kernel-devel from FC6 updates.

  # yum --enablerepo=updates install kernel-devel

If you previously installed the ipw2200-1.2.1 kernel module and the ieee80211-1.2.17 modules,

  # cd /root/ipw2200-1.2.1
  # make uninstall
  # cd /root/ieee80211-1.2.17
  # make uninstall

Make sure the header for the latest version of the wireless-tools is used.

  # cd /usr/include/linux
  # rm wireless.h
  # ln -s ../wireless.h .

Download and install the ieee80211 subsystem.

  Download ieee80211-1.2.18.tgz from http://ieee80211.sf.net and unarchive
  # cd /root/ieee80211-1.2.18
  # make (yes to removing files, commenting out definitions, and stripping symbols)
  # make install

The ieee80211 modules are installed in

  /lib/modules/2.6.22.2-42.fc6/net/ieee80211

Note that this is not the same directory that the original kernel modules were installed in.

The ieee80211 headers are installed in

  /lib/modules/2.6.22.2-42.fc6/include/net

Now install the ipw2200-1.2.2 module for kernel 2.6.22.2-42.fc6.

  Download ipw2200-1.2.2.tgz from http://ipw2200.sourceforge.net and unarchive
  # cd /root/ipw2200-1.2.2
  # ./remove-old (yes to commenting out definitions)
  # make
  # make install
  # chmod 744 /lib/modules/2.6.22.2-42.fc6/kernel/drivers/net/wireless/ipw2200.ko

Set module options.

  /etc/modprobe.conf 
  options ipw2200 hwcrypto=1 associate=0

The ipw2200 option hwcrypto=0 turns off hardware encryption. This is now the default. With previous versions of ipw2200, users have reported firmware restarts and slow transfer rates when using hardware encryption. Please test.

The ipw2200 option associate=0 turns off scanning when the driver is not associated. With the default setting associate=1, the driver scans and automatically associates with open and unencrypted access points. I recommend the option associate=0 for users of NetworkManager for several reasons. NetworkManager gives the user control over the access points the driver associates with. NetworkManager will request a scan when it needs one. When NetworkManager disables wireless, it doesn't make sense to keep scanning.

The command

  # modinfo ipw2200

displays all the options for the ipw2200 module. Some users have reported success using the led=1 option to enable led control on some systems.

Reboot and look for errors in dmesg as root:

  # dmesg | grep ipw2200
  
  Output:
  ipw2200: Intel(R) PRO/Wireless 2200/2915 Network Driver, 1.2.2
  ipw2200: Copyright(c) 2003-2006 Intel Corporation
  ipw2200: Detected Intel PRO/Wireless 2200BG Network Connection
  ipw2200: Detected geography ZZM (11 802.11bg channels, 0 802.11a channels)
  
  # dmesg | grep ieee80211
  
  output:
  ieee80211_crypt: registered algorithm 'NULL'
  ieee80211: 802.11 data/management/control stack, 1.2.18
  ieee80211: Copyright (C) 2004-2005 Intel Corporation <jketreno@linux.intel.com>
  ieee80211_crypt: registered algorithm 'WEP'

If you see the error

  "ipw2200: version magic '2.6.22.2-42.fc6 SMP mod_unload 686 REGPARM
  4KSTACKS gcc-4.1' should be '2.6.22.2-42.fc6 SMP mod_unload 586
  REGPARM 4KSTACKS gcc-4.1'.

you have the wrong kernel installed. Go back to the beginning of this article and start over. If you see an error in loading firmware, you forgot to install the firmware or else the firmware files are installed in a subdirectory of /lib/firmware instead of in /lib/firmware. If you see an error in accessing the ieee80211 subsystem, you did not correctly install the ieee80211 subsystem.

If your laptop has a Kill Switch, make sure that the wireless radio is on. You can check with the command

  cat /sys/bus/pci/drivers/ipw2200/*/rf_kill

If the wireless radio is on, the output should be 0.

Configure the wireless interface using the System -> Administration -> Network. Under the hardware tab, make sure that your wireless card is identified as 'Intel Corporation Pro/Wireless'. If something else appears, delete it, Save, and then use the New button to add the correct wireless interface.

Use the Devices tab and the Edit button to set ESSID, Mode, and WEP key. Under the Hardware Device tab, make sure that each device is bound to its Mac address.

Check to see if the following two files have been created.

  /etc/sysconfig/network-scripts/ifcfg-eth1
  IPV6INIT=no
  ONBOOT=no
  USERCTL=yes
  PEERDNS=yes
  GATEWAY=
  TYPE=Wireless
  DEVICE=eth1
  HWADDR=xx:xx:xx:xx:xx:xx
  BOOTPROTO=dhcp
  NETMASK=
  DHCP_HOSTNAME=
  IPADDR=
  DOMAIN=
  ESSID=XXXXXX
  CHANNEL=1
  MODE=Managed
  RATE=54Mb/s

and

  /etc/sysconfig/network-scripts/keys-eth1
  KEY=xxxxxxxxxxxxxxxxxxxxxxxxxx

Your MAC address, ESSID, and WEP key should appear in these files. Note that my wireless network uses a WEP key with 26 hex characters. If all else fails, edit these files by hand. FC6 sometimes misidentifies a wireless interface. If you see Type=Ethernet change it to Type=Wireless and then reboot.

Monitor and Activate the wireless interface using the Network Monitor panel applet or else use NetworkManager.

Check the configuration with iwconfig.

  # iwconfig eth1
  IEEE 802.11b  ESSID:"cuairnet"
  Mode:Managed  Frequency:2.437 GHz  Access Point: 00:0F:90:7B:32:D0
  Bit Rate:11 Mb/s   Tx-Power=20 dBm   Sensitivity=8/0
  Retry limit:7   RTS thr:off   Fragment thr:off
  Encryption key:xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xx   Security mode:open
  Link Quality=83/100  Signal level=-47 dBm  Noise level=-83 dBm
  Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
  Tx excessive retries:0  Invalid misc:0   Missed beacon:0

WEP Keys and Security Mode

There are several implementations of WEP and their different naming conventions do nothing but confuse people who are trying to implement WEP. Currently available wireless hardware uses the following WEP key names.

  WEP Encryption Name       Hexadecimal Characters
  
  64 bit (40 bits)          10
  128 bit (104 bits)        26
  (152 bits)                38
  256 bit (232 bits)        58

While the 64 bit implementation of WEP is part of the official standard, be aware that the 128 bit (and higher) implementations are not officially recognized and vary widely between manufacturers. If your wireless device claims to use a 128 bit WEP key, you may get a 'key too long' error if you try to enter 32 hexadecimal characters. In this case, enter 26 hexadecimal characters. The missing 6 hexadecimal characters (24 bits) are added by the encryption algorithm in the device.

There is also a great deal of confusion about the WEP key security modes: restricted and open. Apparently, the interpretation of security mode is dependent on the manufacturer. Early, versions of the ipw2200 driver used the restricted mode by default but the latest version uses the open mode. My advice is to go with the default open mode and only experiment with the restricted mode if all else fails. The mode can be set using the iwconfig command.

  iwconfig eth1 key restricted