1. Hardware supported.
2. Source code provided.
3. Installing the driver.
4. Additional note.
5. Download code.

1. Hardware supported.

The FreeBSD driver supports the following hardware:

- Aironet PC4800 11Mbps PCMCIA adapter
- Aironet PCI4800 11Mbps PCI adapter
- Aironet ISA4800 11Mbps ISA adapter (supports ISA Plug and Play)

The following devices have not been tested (I don't have any) but
should work as well:

- Aironet PC4500 2Mbps PCMCIA adapter
- Aironet PCI4500 2Mbps PCI adapter
- Aironet ISA4500 2Mbps ISA adapter (supports ISA Plug and Play)

The ISA and PCI Aironet cards are actually a combination of an Aironet
PCMCIA module and an ISA or PCI bridge adapter. All devices have the
same programming interface and can be supported by the same driver. However
I don't know for certain that I have identified all possible PCI and
ISA Plug and Play IDs, therefore some devices (namely the 4500 series
adapters) may not be detected properly without some small modification.
If anybody has a 4500 series NIC and finds they need to add their PCI
or ISA Plug and Play ID to the list in the driver, please let me know
so I can update it

2. Source code provided.

The source is provided in a gzipped tar archive called aironet.tar.gz, which contains the following:

- if_an.c and if_anreg.h, the driver source
- if_an_p.c PCI probe and attach shim source
- if_aironet_ieee.h interface header
- an.4, driver man page
- ancontrol.c and ancontrol.8, the source and man page for the  ancontrol utility (Makefile for ancontrol is included)
- sample pccard.conf file with entries for the Aironet 4800 and 4500 PCMCIA cards added
 

3. Installing the driver.

To add the Aironet driver to an existing system, do the following:

- Download the 3.0/aironet.tar.gz archive and unpack it.
- Make sure you have the kernel source code for your system unpacked under /usr/src.
- Copy if_an.c and if_anreg.h to /sys/i386/isa
- Copy if_an_p.c to /sys/pci
- Copy if_aironet_ieee.h to /usr/include/machine
- Copy if_aironet_ieee.h to /sys/i386/include
- Copy an.4 to /usr/share/man/man4/man4.i386
- Copy ancontrol.8 to /usr/share/man/man8
- Compile ancontrol using the supplied Makefile and copy it to /usr/sbin. (Note: you must have if_aironet_ieee.h in place before you try to compile ancontrol.)
- Copy pccard.conf.sample to /etc/pccard.conf
- Edit /sys/i386/conf/files.i386 and add a line that says:

i386/isa/if_an.c                optional        an      device-driver

- Edit /sys/conf/files and add a line that says:

pci/if_an_p.c           optional an device-driver

- Edit your kernel config file and add the following lines:

# Include support for PCI busses
controller pci0

# Include support for PCMCIA (only required for PCMCIA Aironet cards) controller card0
device pcic0    at card?
device pcic1    at card?

# Include driver support for Aironet cards
device an0 at isa? port? net irq?

- Remove the lines for the ze0 and zp0 devices from your kernel config! These are drivers with standalone PCMCIA code used for some ethernet cards. These drivers were written before the general PCCARD support was added to FreeBSD and are not compatible with the PCCARD code. You can either have ze0/zp0 in the kernel *or* PCCARD support, but not both. The an driver is written to use the PCCARD support, therefore you can't use it with the ze0/zp0 drivers. Sorry.

- *IMPORTANT* If you are using an Aironet PCMCIA adapter, then you must also perform the following small change to the pccard code in the kernel.  Edit /sys/pccard/pccard.c and search for the string "vpp" which should  exist in the "inserted" function as follows:

  static void
  inserted(void *arg)
  {
          struct slot *slt = arg;

          slt->state = filled;
          /*
           *      Enable 5V to the card so that the CIS can be read.
           */
          slt->pwr.vcc = 50;
          slt->pwr.vpp = 0;

  You must change the "vpp" line so that it says this:

          slt->pwr.vpp = 50;

  This will cause the pccard code to properly apply +5 volts to the vpp1  and vpp2 pins on the PCMCIA card: without this change, the Aironet card  will not be activated in PCMCIA mode and it will not be possible to  configure it correctly. Note that certain PCMCIA management software  packages for Windows NT will also fail to enable the vpp voltage and  will exhibit the same problem. The PCMCIA support built into Windows NT will actually work correctly, however the card must be inserted when the  system is booted and if you remove the card while the OS is running, you  will need to reboot in order to have the card re-probed and re-enabled.

- Configure your kernel and compile.

To use PCMCIA devices in FreeBSD, you must enable pccardd by properly editing /etc/rc.conf or /etc/defaults/rc.conf. You should have lines like the following:

pccard_enable="YES"     # Set to YES if you want to configure PCCARD devices.
pccard_mem="DEFAULT"    # If pccard_enable=YES, this is card memory address.

Setting pccard_enable to "YES" will cause pccardd to be automatically started when the system is rebooted.

Note: you may beed to change the pccard_mem setting. This setting describes the base of a shared memory window used to read data (such as the CIS data for PCMCIA cards) from the PCMCIA controller. The
default address is 0xd0000, and this seems to work for most laptops. In some rare cases however, you may need to specify an alternate memory window. If pccardd reports an error to /var/log/messages address to 0xe0000. If pccardd reports an error to /var/log/messages about an unknown device with the name ""/"", then you will probably need to use another address. To test an alternate address, such as 0xe0000, you can do the following:

# pccardc pccardmem 0xe0000
# pccardc dumpcis

If the "pccardc dumpcis" command correctly displays the CIS information for the Aironet card, then you have found the correct memory window. If not, you will need to try other addresses until you locate the correct one.

Lastly, you must specify an unused IRQ in /etc/pccard.conf. Here is a sample pccard.conf entry:

# Aironet PC4800 11Mbps 802.11 wireless NIC
card "Aironet" "PC4800"
        config  0x5 "an0" 11
        insert  echo Aironet PC4800 inserted
        insert  /etc/pccard_ether an0
        remove  echo Aironet PC4800 removed
        remove  /sbin/ifconfig an0 delete

Here, 11 means IRQ 11. This assumes that there is no other device in the system configured to use IRQ 11. If the IRQ isn't available, pccardd will complain about a resource allocation failure when it tries to configure the card. If you have a system with a PCI bus, you may want to run the BIOS configuration utility for your system and try to mark your chosen IRQ as 'reserved for ISA device' so that it doesn't try to automatically assign it to a PCI device. If you are short on IRQs, you might want to try disabling one of your serial ports or the parallel printer port. Note: by "disable" I mean turn the port off in the BIOS config utility, *NOT* removing it from the kernel configuration! Just because the kernel doesn't probe and attach a device, that doesn't mean the device isn't still there

4. A few additional notes:
 

- Currently, this driver is only supported on the FreeBSD/i386 architecture however the ISA and PCI adapters will probably be supported on FreeBSD/alpha in the future.

- The ISA Aironet card is supported in both hard-wired (configured via switches) or ISA Plug and Play mode. In hard-wired mode, the card can be configured for one of four I/O addresses and a handful of IRQs; if you use this mode, then you must specify the I/O address and IRQ explicitly in the kernel configuration file. This may be necessary on older machines that do not support ISA Plug and Play.  If you do use ISA Plug and Play (which is the factory default switch setting) then the driver will probe the device automatically.

  Consult your Aironet owner's manual for more information.

- PCI and ISA Plug and Play devices may be probed as an1 instead of an0 in order to avoid a possible conflict. Although this may seem a little strange, it is expected. Do not be alarmed. Breathe normally.
  Hopefully all of this will be handled correctly in FreeBSD 4.0 and the unit numbers will be assigned in a more sensible manner.
 
- The driver defaults to ad-hoc mode. You can enable BSS mode with the ancontrol utility.

- The FreeBSD driver encapsulates and decapsulates 802.11 frames as normal Ethernet frames, so to the system, the Aironet device looks like just another ethernet interface. However, this means that packets read from the driver using BPF will have ordinary ethernet headers instead of 802.11 packet headers.

- Multicasting is supported, however the Aironet devices do not have  a programmable multicast filter: instead, they receive all multicast frames and rely on the OS to perform additional filtering. Promiuscuous mode is supported however it appears to only work when the NIC is operating in infrastructure mode, not in ad-hoc mode.

- Unlike the WaveLAN/IEEE devices, when the Aironet is set for  ad-hoc mode, all ad-hoc stations must be on the same SSID in order to communicate. This makes it possible for several ad-hoc networks to be formed in the same area without communications overlapping. he SSID can be set with the ancontrol  utility using the -n option
  (i.e. ancontrol -i an0 -n "MY_NETWORK").

- For those who are wondering, the actual data transfer speed with the 11Mbps cards seems to be on the order of 600KB/sec (kilobytes per second) between two stations in ad-hoc mode. I don't have an access   point so I can't test infrastructure mode, however I would expect it to be similar. No, I'm not sure how they measure the 11Mbps figure.

- Unlike the WaveLAN/IEEE ISA devices, the Aironet ISA and PCI cards do not require PCCARD support. That is, where the WaveLAN/IEEE cards are  actually a PCMCIA bus expander and a LAN/IEEE PCMCIA card slapped  together, the Aironet cards actually appear to the host as ordinary ISA or PCI devices. (Aironet uses PCMCIA modules with bus adapter cards too, but their bus adapter cards are much smarter than Lucent's. :)
  This means you don't need to add PCCARD support to a desktop FreeBSD installation in order to use the Aironet cards like you do with the WaveLANs. It further means that you can have multiple  Aironet cards in one host with fewer resource conflict problems.

If you have problems with the driver, please send a detailed description of the trouble, including any possible error messages, the version of FreeBSD you're running and the version of the driver
to wpaul@skynet.ctr.columbia.edu. Note: please restrict your queries to actual driver problems, not questions about how to set up PCCARD support in FreeBSD, requests for drivers for other cards, or help
setting up an Aironet card on some other OS like Linux
 

5. Download code.  

Please submit the following form, before downloading the source code
First Name
Last Name
Electronic  
Mail Address

 Form or 
 

Copyright© Comet Group in Columbia University 1999
maintained by Sanghyo