
Intel(R) PRO/Wireless 2100 Network Connection Driver for Linux
Copyright (C) 2004, Intel Corporation
For additional information, contact James Ketrenos <jketreno@linux.intel.com>


NOTE ON UPGRADING FROM PRIOR VERSIONS
---------   ------     ----       ---    --       --       -          -

Whenever you upgrade your driver, you need to make sure that your system
no longer has older versions of the modules in various locations that 
could be found by modprobe instead of the new version.  If you see 
problems about unresolved symbols, chances are good you have an old 
module someplace.  You can typically find the offending modules via:

% for i in ieee80211 ipw2100; do \
	find /lib/modules/`uname -r` -iname ${i}*; done

And then you can go and remove whatever that finds.  

You should also check your kernel's configuration for any old 
declarations from old installs:

% for i in IEEE80211 IPW; do \
% grep CONFIG_${i} \
        /lib/modules/`uname -r`/build/include/linux/autoconf.h; done



KERNEL REQUIREMENTS - 2.6
---------   ------     ----       ---    --       --       -          -
As of 0.55, the ipw2100 only supports the 2.6 kernel series.  This is
primarily due to the lack of time to maintain backward compatible 
support to the 2.4 tree, most notably with sysfs support.  If you would 
like to take on the role of maintaining backward compatibility, please 
let us know.  We would be very willing to host 2.4 backports on the 
project site -- we just don't have the time to maintain them ourselves.


KERNEL REQUIREMENTS - Wireless Tools
---------   ------     ----       ---    --       --       -          -
	
If you are building the IPW2100 driver outside of the kernel build system then
you need to ensure that you have enabled wireless capabilities within your
kernel (CONFIG_NET_RADIO=y).  

Failure to do this will result in the Wireless Tools (iwconfig, iwlist, etc.) 
not functioning.

You can check if your kernel is configured with CONFIG_NET_RADIO by running:

% grep CONFIG_NET_RADIO \
	/lib/modules/`uname -r`/build/include/linux/autoconf.h

You should see the line:

#define CONFIG_NET_RADIO 1

If you have to turn on CONFIG_NET_RADIO in your kernel configuration, make sure
you also rebuild, install, and reboot to the new kernel image.  For help or
instructions on configuring and building the kernel please consult the 
documentation contained in your distribution.


KERNEL REQUIREMENTS - Crypto Library
---------- --------  ---------    -----     -----      ---      --        -
As of 0.47, IPW2100 uses the WEP encryption and decryption algorithms provided
by the Linux kernel.  As such, in order to use WEP you must enable the Crypto
library support (CONFIG_CRYPTO) and the following algorithms:

	ARC4 cipher algorithm (CONFIG_CRYPTO_ARC4)

You also need to enable the following from Library routines:

	CRC32 (CONFIG_CRC32)

If you are using the 2.4 kernel series, you may need to upgrade to 2.4.26 in 
order to get the crypto APIs (or look for a patch that enables the crypto 
libraries and the above algorithms in your specific kernel version)

OPTIONAL: WPA Support

If you wish to enable WPA support, you also need to enable the following Crypto
library modules (in addition to those required for WEP above):

	Michael MIC (CONFIG_CRYPTO_MICHAEL_MIC)
	AES (CONFIG_CRYPTO_AES_586)


INSTALLING THE BITS
------------ -----   -----       ----       ---       --         -     

There are two ways to build the IPW2100 driver--the easiest way is to build it
external to the kernel build system.  If you want to configure and build the
driver using the full kernel build and configuration system, then skip to the
section BUILDING INTERNAL.


BUILDING EXTERNAL
----------- -----   ----   ----      ---       --       -             -

First, you need to unpackage the source code:

% tar xzvf ipw2100-1.1.0.tgz
% cd ipw2100-1.1.0

The driver package contains a Makefile that can be used for building the
driver outside of the kernel tree.  To build it for the currently running
kernel, simply type:

% make

If you see any errors during the build process be sure to check the 
Issues section on the http://ipw2100.sf.net website as a patch may be 
available for your specific kernel configuration.  You can now install the 
ipw2100 module:

# make install  <--- You need to run this as root

To build it for a different kernel than the running one, use the KSRC
parameter:

% make KSRC=/path/to/kernel
# make install   <--- You need to run this as root


Thanks to Peter Johanson for the original Makefile, and several others on the
ipw2100-devel mailing list for helping to enhance it.

If you have previously tried to build the driver internal to the kernel build
system and now wish to use the external method described above, you need to 
remove any trace of IPW2100 from the kernel build system or options configured
there will override the Makefile.  

To do this, remove any lines containing the partial string CONFIG_IPW2100 from 
$KSRC/.config and $KSRC/include/linux/autoconf.h

In addition, you will need to remove the reference to ipw2100 from 
$KSRC/drivers/net/wireless/Makefile.

Now proceed to LOADING THE DRIVER


BUILDING IN KERNEL SOURCE TREE
----------- -----   ----   ----      ---       --       -             -

Building the driver in the kernel tree is not currently supported with 
the standalone tarball releases.  Please see the project web site at
http://ipw2100.sourceforge.net for information on how to build the 
driver within the kernel.


CONFIGURING THE KERNEL
------------ -----   -----       ----       ---       --         -     

Configure the kernel

% make menuconfig

Enable Intel PRO/Wireless 2100 under:
	Device Drivers =>
		 Networking support Devices => 
			Wireless LAN =>
				Intel PRO/Wireless 2100 802.11b

NOTE:  You must have EXPERIMENTAL turned on to see the Intel PRO/Wireless
       option.  You can set this in Code Maturity Setting Options.


BUILDING THE MODULE
------------ -----   -----       ----       ---       --         -     

Build the kernel module

% make modules modules_install

If you built as a module and didn't change any other kernel options, you are 
ready to go.  Proceed to LOADING THE DRIVER


LOADING THE FIRMWARE
------------ -----   -----       ----       ---       --         -     

Before you can load the driver, you need the firmware image.  You can find
instructions for obtaining the firmware by going to 
http://ipw2100.sf.net/firmware.php.

Once you have the firmware, unzip the archive.  You should find four
files within it:

	LICENSE			A copy of the firmware license
	ipw2100-1.3.fw		BSS mode
	ipw2100-1.3-i.fw	IBSS mode
	ipw2100-1.3-p.fw	Monitor mode

You need to place all of these files into the hotplug firmware directory
(typically /usr/lib/hotplug/firmware/ -- check the contents of the
/etc/hotplug/firmware.agent to determine the specific location for your
distribution)

NOTE:  Loading the firmware image will not affect the IPW2100 in any other
operating systems you may boot.  The firmware is loaded onto the hardware every
time the card is initialized--regardless of the operating system.

The IPW2100 supports loading of firmware via the Linux firmware hotplug 
capability.  In order to use this, you must enable CONFIG_FW_LOADER in your 
kernel configuration.  In 2.6.x this option is enabled via: 

	Device Drivers -> 
9		Generic Driver Options -> 
			Hotplug firmware loading support

In 2.4.x, it can be found here:
	Library Routines ->
		Hotplug firmware loading support

In addition, you will need the Linux hotplug scripts dated later than 
2003_10_07 (if you do not have /etc/hotplug/firmware.agent then you need to 
upgrade).  

You will also need to have sysfs mounted.  You can do this by adding an entry
to /etc/fstab similar to this:

none            /sys            sysfs   defaults                0       0

If the directory /sys does not already exist, you will need to create it:

% mkdir /sys

You can then mount the sysfs partition via:

% mount -a

You can obtain the latest hotplug scripts via the following link:

http://sourceforge.net/project/showfiles.php?group_id=17679



LOADING THE DRIVER
------------ -----   -----       ----       ---       --         -     

You need to configure the device for your particular distribution.  The steps
below will work on Red Hat, Fedora, and other similar distributions.  

First, create a file in /etc/sysconfig/network-scripts/ called ifcfg-eth1 
(or eth2, etc. as appropriate).  Place the following within it:

DEVICE=eth1
ONBOOT=yes
BOOTPROTO=dhcp
TYPE=Wireless

% modprobe ipw2100
% ifup eth1

If you have DHCP configured on your network, and you have a wireless access
point nearby, you should be up and running.

You can check and see if your interface is up by running 

% ifconfig eth1

To test the connection, you can ping a machine using the wireless interface:

% ping ipw2100.sf.net -I eth1

If you want to use the wireless interface for all traffic, set up the default
gateway to go through it.  I usually perform the following:

Disable eth0 completely

% ifdown eth0

Configure the routing table to go through the wireless NIC

% route add default gw 192.168.1.1 eth1

If you had brought down eth0 before you load the ipw2100 module, the system
should set up your routes for you.

