Linux Aironet driver Last update: 9/9/99 This driver is for Aironet 4500 and 4800 ISA/PCI/PCMCIA cards and 2.0 or 2.2 kernels. Just for fun, I tested a 3500 for a total of 2 minutes and it seemed to work more or less. (The configuration information displayed in the Config file seemed a bit messed up.) Changes 10/26/99- Added support for shared IRQs. (Hopefully this will help with some of the PCI problems...) Put in the mod versions include. Made auto_wep off by default. 9/9/99 - Added support for WEP. Changed the formatting of the Status and Config files in the proc file system. 6/15/99 - Added support for ISA and PCI cards. This means that to use PCMCIA you need airo.o and airo_cs.o. Some /proc bugs for 2.0 kernels were also fixed. 5/1/99 - Fixed the crashing when the card is removed while in the /proc/aironet directory. THE FIX ONLY WORKS FOR 2.2 KERNELS. The old kernels don't have the right callbacks. I also made a slight optimization by only initializing the transmit structures once. 4/27/99 - Fixed the rate update bug that prevented updates to the rates using the /proc/aironet/ethx/Config file. (The prize goes to Christian Schreier for finding the problem. It's amazing the difference a letter makes!) Also fixed a hanging problem on old cards. (What a difference a couple of zeros make!) 4/13/99 - Added insmod parameters for rates and SSIDs 3/12/99 - Added support for 2.2 kernels. Installation 0. If you are only interested in the PCI and ISA drivers, you simply need to run airo.c using "gcc -O -c airo.c" (add "-DMODVERSIONS" if you have symbol versioning in the kernel) and copy it the /lib/modules/XXXX/net subdirectory and insmod it. Note: if you get a bunch of unresolved symbols when you try to insmod, you probably need to add (or remove) -DMODVERSIONS with gcc. 1. First off you must have PCMCIA services for Linux version 3.0.9. RedHat 6.0 has it, so you can skip this step if you are running the latest RedHat. Download, compile, and install it from ftp://csb.stanford.edu/pub/pcmcia/. (After untarring, do a make config, make all, and make install.) 2. Now you have to fix /etc/pcmcia/config (unless you have 3.0.10 of the PCMCIA services. Append the following lines to the end of /etc/pcmcia/config (if they are not already there). device "airo_cs" class "network" module "airo_cs" card "Aironet PC4500" manfid 0x015f, 0x0005 bind "airo_cs" card "Aironet PC4800" manfid 0x015f, 0x0007 bind "airo_cs" If for some reason you run "make install" in the PCMCIA source directory, the config file will get overwritten and you will have to do this step again. 3. Untar the airo_cs.tar.gz in the PCMCIA source directory and run "make -f airo_cs.mk install'". Note, airo.o belongs in the net modules subdirectory not pcmcia, but it will work either place... 4. Now reboot and enjoy the wonders of wireless networking! (Actually you can remake the modules dependencies and restart pcmcia instead of rebooting, if your into that kind of stuff...) Extra Credit Vipul Gupta tells me that they have MOBILE-IP working with this driver. More details at http://playground.sun.com/pub/mobile-ip/. (I haven't tried it out, so I can't really be of much help here...) /proc/aironet In the /proc/aironet partition there will be a subdirectory for each aironet interface. In that subdirectory are four files: Status, Config, WepKey, and SSID. Status Most of the fields in the Status file are self describing. The Mode: field is a bitmask. Here is the description from the programmer's manual: Bit Meaning 0x0001 Configured 0x0002 MAC Enabled 0x0004 Receive Enabled 0x0010 In Sync 0x0020 Associated 0x8000 Error I'm not sure what the units are in the Signal: field. Config The Config file is mode up of fields separated by newlines. When setting the fields, they can occur in any order. If the values are in error, a sane default will be used. Note, there must be exactly one space between the colon and the value. Mode: can be "adhoc" or "ESS". Defaults to ESS. NodeName: Can be up to 16 characters in length PowerMode: Can be CAM (Constantly Awake Mode), PSP (Power Saving something...), PSPCAM (you guess...). CAM is default. DataRates: Must be separated by exactly 1 space. The units are 500 kps. So 2 is 1 mbs. There can be up to 8 rates specified. The basic rate set by setting the high bit (bit 7). Channel: Don't know anything about this except that you can set it... XmitPower: Transmit power in milliwatts. WEP: Can be open, encrypt, and shared, meaning no authentication, encrypted data only, shared key authentication and encryption. Note that when WEP is enabled the current cards (as of 9/9/99) do not allow data rates above 2 mbs. WepKey This file allows the WepKey to be set. I don't use Wep, so I can't really test it. The key is set by writing the key as a string to the file. Each octet must be written in hexadecimal with leading zeros and separated by colons. For security reasons the key cannot be read from the card. Writing to this file sets both the permanent and temporary key. (Anyone have a need for being able to write them separately?) For example: echo 12:04:78:9a:bc > /proc/aironet/eth0/WepKey SSID The SSID file has the list of usable SSIDs. If the list is empty, it will associate with any access point that it can find. The SSIDs are separated by line feeds. This file may also be written to to change the list. Module parameters These parameters are for the airo.o module: rates - a comma separated list of rates. There can be up to 8. They are specified in 512 kps units. basic_rate - a single integer setting the basic rate. Same units as rates. ssids - a comma separated list of ssids. There can be up to 3. They are a maximum of 32 characters. putting the following line in /etc/conf.modules: options airo basic_rate=11 rates=2,4,11,22 ssids=foo,doo sets the basic rate to 5.5 mbs, the rates to 1,2,5.5, and 11 mbs, and the ssids to "foo" and "doo". catting the /proc/aironet/eth0/Config reveals: Mode: ESS NodeName: PowerMode: CAM DataRates: 2 4 139 22 0 0 0 0 Channel: 0 XmitPower: 100 WEP: open note that 139 is 0x80 + 0xb. Setting the high bit sets the basic rate. Bugs * SMP isn't supported. * Let me (breed@almaden.ibm.com) know of anything else. Note, even though I work for IBM this driver is done in my spare time, and is no way associated with IBM. Feel free to fix something :) Missing features * Statistics: I will be putting these in a /proc subdirectory * Wireless extensions: I really know very little about wireless networking. It may just be a lack of understanding, but the configuration for the aironet and the wireless extensions didn't seem to match well... Input Please let me know of anything I am missing or any features that should be added. (I am not saying I will do it though...)