[faq] [coverage map] [support] [stats] [home]

Prism II Access Point Mini-Howto

(aka "The $40 802.11 Access Point")

by Robert Rose rose at@-- cafwap dot net
Version 0.1.8
Last Updated 1/14/2002

How to configure "PRISMII" chipset PCMCIA cards as IEEE 802.11b compliant Access Points

DISCLAIMER: Like everything else on the net, I, the author, take absolutely no responsibility for the repercussions or use of this document. USE ENTIRELY AT YOUR OWN RISK.

0.0 Prerequisites

0.1 Mental mindset

Setting up an 802.11b access point using PRISMII based cards isn't a simple process.. It's a painful process that requires some blood, sweat, tears, and determination to get it working. If you're not comfortable editing Makefiles or configuration files you probably should not attempt setting up an access point on linux. Save yourself the frustration and go out and buy a cheap hardware access point. :-)

Actually, setting up an access point might not be so difficult by the time you read this. At the time of this writing, the latest version of the PRISMII drivers for linux was 0.1.8, and very few people on the mailing lists had announced they had successfully set up an access point, and no one had yet documented the process. Maybe by the time I finish writing this the process will be much simpler! :-)

0.2 A PRISMII card (duh)

You will need a PRISMII PCMCIA 802.11b network card first of all, or this HOWTO won't be of much use to you, unless you're into that sorta 'thang. PRISMII is a 802.11b chipset manufactured by Intersil, formerly Harris. It is designed for compact PCMCIA applications under 50mW. Honestly speaking, the PRISMII chipset is pretty crappy as 802.11b chipsets go-- it is extremely low power relative to competing cards, and poorly supported. The lure of the PRISMII chipset is how cheap you can get these cards. Last time I checked eBay "LeArtery" brand cards (they use the PRISMII set) were going for around $40 a piece.

PRISMII cards come in many different flavors and vendors. At the time I'm writing this I am aware of the following manufacturers making 802.11b cards that work on the PRISMII chipset: Addtron, Bromax, Compaq, D-Link, GemTek, LeArtery, Linksys, SMC, Z-Com, and Zoom. There will probably be many more in the future.

0.3 A PCMCIA slot

Your linux box will need to have a properly configured PCMCIA slot. Test it out with some other PCMCIA card before you start this howto. It would suck to get 3/4 of the way through this and then find out your PCMCIA slot wasn't configured right.

For more information see the PCMCIA HOWTO.

0.4 Kernel sources

At the time of this writing, the only versions of the kernel that worked with the PRISMII drivers for linux were the 2.2.xx class kernels. This howto was written using kernel sources 2.2.16 and 2.2.19 running on RedHat Linux.

You will need to get the sources for the version of the kernel that you are running, *AND* the pcmcia-cs sources for the version of the kernel that you are running. Normally these are installed in /usr/src/linux and /usr/src/linux/pcmcia-cs.

0.5 Access point firmware

You will need to obtain the PRISMII firmware image, usually a .hex file, that allows your card to act as an Access Point. This firmware is also called the 'tertinary' firmware of the PRISMII chipset. Because this file is the intellectual property of Intersil, it can not be given away by the manufacturer of your card for legal reasons. You will need to obtain this firmware directly from Intersil.

At the time of this writing the latest version of this file was T10003c7.hex. Do *NOT* email me asking for copies of this file.

0.6 The linux-wlan-ng source

You will need to download the latest version of the linux-wlan source code. This howto is written for version 0.1.8-pre13.

You will also need to find the latest version of the prism2dl program that belongs in the linux-wlan tree, but may not be included in the version that you have downloaded. Apparently the authors of linux-wlan decided to take it out of the mainstream distribution due to the implications of what you can do with the program (e.g., overwrite your firmware with the access point firmware).

For your convience:

1.0 Compile linux-wlan-ng

Please note that newer versions will probably compile differently, please check the README files after you install the source!

1.1 Get prism2dl

As mentioned earlier, prism2dl hasn't been shipping with the linux-wlan-ng releases, so you'll need to find it yourself and work it into the source tree. For linux-wlan-ng version 0.1.8 prism2dl belonged in the directory src/prism2/download. Stick prism2dl.c and it's Makefile in that directory. You will probably also have to add "download" to the list of directories to compile in the file src/prism2/Makefile:
DIRS=driver ridlist download

1.2 Enable the access point code

I suppose in an effort to thwart newbies, the linux-wlan people decided to disable access point support by default. You will need to go into the Configure file and comment back in the lines for access points:
ask_str "Install drivers as station (sta) or access point (ap)?" WLAN_INSTALL_TYPE
This will allow you to choose "ap" (access point) when prompted.

1.3 Run Configure

Type ./Configure in the main linux-wlan-ng directory and answer the questions...
acabar:/private/wireless/linux-wlan-ng-0.1.8-pre13 33# ./Configure

-------------- Linux WLAN Configuration Script -------------
The default responses are correct for most users.
Linux source directory [/usr/src/linux]: 
The kernel source tree is version 2.2.19-7.0.1.
The current kernel build date is Tue Apr 10 00:55:03 2001.
pcmcia-cs source dir
[/usr/src/linux/pcmcia-cs-3.1.19]: /usr/src/linux/pcmcia-cs-3.1.24
Alternate target install root directory on host []: 
  Module install directory [/lib/modules/2.2.19-7.0.1]: 
PCMCIA script directory [/etc/pcmcia]: 
It looks like you have a System V init file setup.
Install drivers as station (sta) or access point (ap)? [ap]: 
Target Architecture? (i386, ppc, or alpha) [i386]: 
Prefix for build host compiler? (rarely needed) []: 
Compiling with a cross compiler? (y/n) [n]: 
Build for debugging (see doc/config.debug) (y/n) [n]: 
Build for Kernel PCMCIA? (y/n) [n]: 
Build PLX???? based PCI (_plx) adapter drivers? (y/n) [n]: 
Build PCMCIA Card Services (_cs) drivers? (y/n) [y]: 

1.4 Compile and install

It sounds simple enough :-)
acabar:/private/wireless/linux-wlan-ng-0.1.8-pre13 34# make all
[chop]
acabar:/private/wireless/linux-wlan-ng-0.1.8-pre13 35# make install
[chop]

2.0 Configuration

2.1 Configure linux-wlan-ng, restart pcmcia services

Add your card to /etc/pcmcia/wlan-ng.conf if it's not already in there. If you don't know how to do this refer to the PCMCIA howto. Here's an example for my LeArtery card:
card "LeArtery SYNCBYAIR 11Mbps Wireless LAN PC Card Version 01.02"
  manfid 0x0156, 0x0002
  bind "prism2_cs"
You also need to enable access pointing and diable User MIBS in the wlan-ng.opts file:
#USER_MIBS="p2CnfRoamingMode=1"
...

IS_AP=y
Now run /etc/init.d/pcmcia restart to restart card services. Your card will *NOT* work at this moment, and you'll hear some dissapointing beeps coming out of your computer. If you go into /var/log/messages you'll see why:
Jul 10 20:27:08 acabar cardmgr[437]: initializing socket 0
Jul 10 20:27:08 acabar cardmgr[437]: socket 0: LeArtery SYNCBYAIR 11Mbps Wireless LAN PC Card Version 01.02
Jul 10 20:27:08 acabar cardmgr[437]: executing: 'modprobe prism2_cs prism2_debug=5'
Jul 10 20:27:08 acabar kernel: init_module: prism2_cs.o: 0.1.8-pre12 Loaded
Jul 10 20:27:08 acabar kernel: init_module: dev_info is: prism2_cs
Jul 10 20:27:08 acabar kernel: prism2_cs: index 0x01: Vcc 5.0, irq 3, io 0x0100-0x013f
[...]
Jul 10 20:27:08 acabar cardmgr[437]: executing: './wlan-ng start wlan0'
Jul 10 20:27:09 acabar cardmgr[437]: + AP not started, resultcode=not_supported
Notice it says on the last line that your card does not support AP. This is because your firmware has not been properly configured yet, so your card rejects going into access point mode. We'll fix that next...

2.2 Make a pda file

Before you can load the access point firmware, you need to construct a pda file. The pda file is used to set run-time variables on your PRISMII card. Your card will most likely need a number of it's parameters changed in order for it to allow you to enable access pointing. The first step is to ouput your card's current pda configuration by using prism2dl. Your's will be slightly different but mostly the same as mine:
acabar:/sbin 86# prism2dl -s -g wlan0
0x0006, 0x0006, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 
0x0004, 0x0101, 0x9000, 0x07d1, 0x5132, 
0x0007, 0x0103, 0x0002, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 
0x0002, 0x0104, 0x07ff, 
0x0002, 0x0105, 0x0003, 
0x0002, 0x0107, 0x0001,
[...more hex values follow...]
This may look like garbage but you'll need to learn to read it to construct a pda file for your card. The first value on a line specifies the length of the data that is to follow on the line. The second value specifies the "id number" of the parameter for the line, and the data that follows is the value of the parameter. Here are a few of the interesting ones and what they mean:
  • ID 0x0001: PCB Part Number (5-9 byte string)
  • ID 0x0006: RF Modem Supplier (4-5 byte string)
  • ID 0x0101: MAC address (6 byte string)
  • ID 0x0103: Regulatory Domain List
  • ID 0x0104: Allowed Channel Set (either 0x07FF for US 1-11 or 0x1fff for ETSI)
Now here's the tricky part.. You'll need to take my pda file, available here and modify it so that the values for ID 0x0001, ID 0x0006, ID 0x0101, 0x0103, 0x0104, 0x0105, and 0x0107 reflect the values for your card that you got by running prism2dl above. Leave the rest of the values alone, as they are important for access point mode. This may take some experimentation.

To test your pda run prism2dl -v -p your-file. The "-v" option will give you some additional useful debugging information.

Important note: If you ever write a bad pda file it will most likely lock up your card. Don't panic: just eject your card and plug it back in and it will reset itself.

2.3 Configure linux-wlan-ng (again)

Now that you have a pda file and the ap firmware, you can setup linux-wlan to automatically load it right before it loads the access point software.

Open the file /etc/pcmcia/wlan-ng and add the following line somewhere right after the "===DOWNLOAD===" section:
/sbin/prism2dl -p /private/wireless/leartery.pda -r /private/wireless/T10003c7.hex wlan0
Of course, replace the pda and hex files with the locations for where you decided to store them on your system.

2.4 The moment of truth

Cross your fingers and restart pcmcia services:
acabar:/etc/pcmcia 46# /etc/init.d/pcmcia restart
Shutting down PCMCIA services: cardmgr modules.
Starting PCMCIA services: modules cardmgr.
If you heard the "bad" pcmcia beep, check your syslog for errors. If you had a firmware problem at this point (most likely), you'll need to go back and experiment with your pda file, firmware, or card configuration. If the problem is a networking error, we'll fix that in the next section..

2.5 Configure your network

At this point you should see an interface for 'wlan0' present when you run ifconfig:
acabar:/etc/pcmcia 48# ifconfig
[chop]
wlan0     Link encap:Ethernet  HWaddr 00:90:D1:07:32:51  
          inet addr:10.0.1.1  Bcast:10.0.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          Interrupt:3 Base address:0x100
If you don't, then something went wrong. Check your syslog.

If you're running RedHat, you'll need to create an ifcfg profile for the new wlan0 interface. Create a new file in the network-scripts directory for your wlan0 interface. Here's mine:
acabar:/etc/sysconfig/network-scripts 99# cat ifcfg-wlan0 
DEVICE="wlan0"
BOOTPROTO="static"
ONBOOT="no"
IPADDR="10.0.1.1"
NETMASK="255.255.255.0"

3.0 Configure your access point

At this point, you should be able to see your access point from other 802.11 systems looking for a hosting network. Next you'll need to configure your access point further so that it actually forwards IP traffic, but this is beyond the scope of this howto. From here, go on to the "regular" Wireless HOWTO or the IP Masquerade HOWTO.

Have fun!!!
-robert rose
copyright (c) 2001,2002 cafwap.net