MPL/GPL drivers for the Wavelan IEEE/Orinoco and others
Introduction
The Linux Wavelan IEEE driver and Linux Orinoco driver are Open
Source project that had many contributors through their
turbulent life. I did contribute to it since 1999 thanks to Hewlett
Packard sponsoring my work. My main contribution was the Wireless
Extensions support (of course), multi-firmware support and a few bug
fixes.
The Wavelan IEEE/Orinoco is the current generation of Wireless LAN
hardware offered by Lucent (and others). A more detailed description
is available in the
Wireless Howto. This page describe the state of the new Linux
MPL/GPL driver for this hardware.
There is still a page for the old Linux
GPL driver called wvlan_cs.c. For the good old Wavelan,
which was not IEEE compliant (a few generations back), go here. For other wireless LANs types (such as
the very common PrismII), please read the Linux Wireless Howto.
Wavelan IEEE/Orinoco hardware : One hardware, 3 drivers...
There are three drivers supporting the same Wavelan IEEE hardware. One
is the new MPL/GPL driver, called orinoco_cs. One is the
old GPL driver, called wvlan_cs. The last
one is based on a binary library and supported by Lucent, called wavelan2_cs.
For all problem related to wavelan2_cs, please contact Lucent
directly. The lack of source code make debugging in most case
impossible.
On the other hand, this page deals exclusively with orinoco_cs,
the new MPL/GPL driver, now part of the kernel 2.4. Various people
outside Lucent are active keeping this driver alive. I still have a
page for the old Linux GPL driver
called wvlan_cs.c.
We are in the process of phasing out gradually wvlan_cs in
favor of orinoco_cs, which has all the features of the former
without the bugs. We are recommending people doing a new installation
to start directly with orinoco_cs.
Why would you use orinoco_cs ? A few reasons :
- Full source code. Some people strongly beleive in the concept of
Free Software and Open Source, especially when it come to stuff that
reside in kernel space.
- Not only for i386 platforms. Can be made to work on PPC, Alpha,
StrongArm, ia64 and your favourite platform (doesn't mean that it will
work out of the box).
- Multi configuration, using Pcmcia schemes and wireless.opts (see below). This may be also
achieved using the specific networking scripts of some distributions.
- Much better Wireless Extension support.
- Signal strength in ad-hoc mode (see below).
- Multi-firmware (1.16 -> 6.16) and multi-vendor (Lucent, Enterasys
& ELSA) support.
- Some Prism2 and Symbol card support...
Of course, the wavelan2_cs driver does also have its advantages, but
Lucent can speak for it.
Orinoco driver : One driver, 3 hardwares...
The Orinoco driver support 3 hardware which are very closely related
but slightly different :
- Lucent/Agere Orinoco Pcmcia cards and Apple Airport (howto)
- Intersil PrismII Pcmcia/PLX/PCI cards (howto)
- Symbol Spectrum24 HR Pcmcia cards (howto)
If you look in the Wireless Howto, you
will find that each of these hardware have other drivers
available. For the Orinoco, we list those drivers in the previous section. For PrismII, there are the
famous linux-wlan-ng
and HostAP
drivers, which have advantages over this driver.
Because Orinoco support all those hardware, people think they are the
same hardware. However, all those other drivers support only
one of these hardware, and only the Orinoco driver support all
three of them. At boot, the Orinoco driver will print in the
message logs which of the three hardware it has detected, with the
firmware version number.
Related hardware and drivers.
These are other hardware that people often confuse with the Wavelan
IEEE/Orinoco, but which are totally different and incompatible :
- The Wavelan was
a non IEEE compliant hardware that Lucent made before the Wavelan
IEEE/Orinoco.
- Proxim is selling an Orinoco 802.11a and Orinoco 802.11g which are
based on the Atheros
chipset.
Those are hardware related to the Wavelan IEEE/Orinoco but which
require a modified version of the Orinoco driver :
Those driver are now merged into the main Orinoco driver (at least in
the CVS).
Latest version of the driver
Pavel is the new maintainer of the driver, the very latest version of the driver is available in recent Linux kernels :
Pavel also maintains a version of the driver that can be used
in many kernel, this is available in the CVS :
David was the main maintainer of the driver, old versions of his drivers are availableon his web site :
- Download old
versions of the Orinoco driver.
I have an old version of the Pcmcia configuration file :
- hermes.conf : Pcmcia configuration file
to put in /etc/pcmcia/.
The version in the latest Linux kernel tend to be up somewhat
to date (both 2.4.X and 2.6.X). The version in the latest Pcmcia
package is a bit older.
Patches for orinoco_cs and various web pages related to orinoco_cs
Other people are hacking like crazy on the driver :
- David
Gibson was the author and maintainer of the Orinoco Linux
driver.
- David has set up a SourceForge
Project for the driver, that mostly contains a Mailing List.
- Pavel has set up a Savannah
Project for the driver, that mostly contains the CVS for driver
development.
- Pavel Roskin
maintains the Symbol version of the Orinoco driver. This driver
is now part of the main Orinoco driver.
- Manuel Estrada
Sainz created the Orinoco-USB version of the Orinoco
driver. This driver can now be found in the Orinoco CVS.
- The Shmoo
group has been hacking the Orinoco driver to all 802.11 raw
frame access (monitor mode). This patch has now been integrated in
the latest release. They also have a bunch of Orinoco firmware
versions.
- Moustafa
A. Youssef is maintaining the patch to add Scanning
capability to the Orinoco driver (derived from my original version), and also is the
maintainer of the mwvlan
driver, a modified version of wvlan_cs with scanning support.
- Jim
Carter has sent me an version of the scanning patch for v0.13a (based on
the version of Moustafa).
- Jesus
Molina has a patch to include Scanning support in the
Symbol version of the Orinoco driver. This patch has now been
integrated in the latest release.
- Pavel Roskin has
sent me an version of the scanning
patch for v0.13d (based on the version of Moustafa). Also include
scanning support for Symbol firmwares (from Jesus Molina). This patch
has now been integrated in the latest release.
- Tobias
Hoffmann has a version of the Orinoco driver for the Nortel
PCI card.
- Hunz has created
HermesAP, a modified version of the orinoco driver that support
Access Point functionality (provided you have a tertiary firmware).
- Thomas 'Dent' Mirlacher wrote a couple of patches to move
the 802.11 decapsulation in the network layer, those are old
patches for the Orinoco v0.11 driver
and for the kernel.
- Stano Meduna wrote a patch to add driver based WEP encryption to
the Orinoco driver to support properly broken PrismII firmwares.
- Paul Stewart wrote a patch to add Fast-keying support to the Orinoco
driver, to support properly 802.1x and not drop the session
while changing the WEP key. This patch has now been integrated in the
latest release.
- Robert J. Moore updated the patch to add authentication
support for Orinoco firmwares.
- Andreas
Neuhaus was the original maintainer of the Wavelan IEEE
Linux driver (wvlan_cs).
- Harald
Roelle did the original PPC specific patch (now outdated) and has
a page on how to set up a Wavelan IEEE under Linux-PPC and how
to connect it to the "UFO" (the Apple Airport base station).
- Anton Blanchard is the did some work on the the Wavelan
IEEE Linux driver (wvlan_cs), including PPC support.
- Benjamin
Herrenschmidt has modified the Wavelan IEEE driver to make it work
with the Apple Airport card. This is an incredible hack. He
has now done with the new Orinoco driver...
Help, Howto and other hacks :
- Dan Smith has
a page on how to set up orinoco_cs (with driver binding and
wireless.opts).
- Ian
Goldberg has a pretty complete web page on how to set up the
Symbol CF card on the Sharp Zaurus.
- Brad
Allison has a page to workaround some Red-Hat 7.2 quirks with
orinoco_cs, and how to use Red-Hat 7.3 specific wireless
configuration.
- Martin Pot
has a page on how to set up the Orinoco driver with Red-Hat 7.3
(with many quirks) and build a Wireless Router.
- Paul
Lucas has a page on how to set up a Wavelan IEEE under
Linux-PPC with an updated PPC specific patch.
- Anonymous has a page
on how to set up a Orinoco USB and various other useful info on
these cards.
- Rich
Bowen and Dino Lachiusa explain how to setup a Wavelan IEEE card
with the RG-1000. Note that the same procedure work with
orinoco_cs and you can also use Wireless Extensions ;-)
- There was a
thread on the Pcmcia Forums about the RG-1000 and Linux,
including setting up the RG-1000 from Linux and the Linux clients.
-
Schuyler Erle explain how to set up a Linux Wireless Home
Gateway, including the wireless setup, SSH, firewalling, NAT and
DHCPD.
- NexTechWireless
details how to change a Orinoco silver card into an Orinoco gold (by
forcing a firmware upgrade). Of course, this might void your
waranty...
- Jon Sevy has
developped a Java-based AirPort Base Station configurator, that
should please some people not owning a Mac...
- Mad Science Research
labs explain you how to upgrade the Airport UFO to RC4
128 bits (this should apply to the RG-1000 as well).
- Constantin Von
Wentzel explain you how to put an external antenna on the
Airport UFO (this should apply to the RG-1000 as well).
- Mark C. Langston has
written some Perl script to check the status of the Airport Base
Station.
- Tom
Z. Meinlschmidt has developped an impressive package allowing to
monitor a Wavelan Access Point using SNMP.
- Greg Hankins
is porting the above software to work with RoamAbout Access
Points.
- Ross
Finlayson explain in details how to use Linux as a Wireless
router for their wireless ISP (LIVE.COM).
Issues and release notes
Too many for my taste ;-(
- Maintenance : David is maintaining the
orinoco_cs driver (I'm helping him as well). wvlan_cs is no longer maintained.
- It doesn't work : Yeah, that's a detailed bug
report ! From experience, 95% of the problem are not due to the
driver but a generic Pcmcia configuration issues. Make sure
that your Pcmcia socket and setup is functional, and try another
Pcmcia card before blaming the driver.
- Lucent card support : fully functional. All the
features of the various firmware revisions work properly.
- Lucent Firmware revisions : The latest driver should
work across all firmware revisions, it has been tested with 1.16,
4.08, 4.52, 6.04, 6.06, 6.16 and 7.28. However, some feature might not
work well in all firmwares (promiscuous in 6.04) or are even not
available at all (fragmentation for 6.X, Microwave Oven for
4.X). Ad-Hoc mode is also different in firmware 4.X and 6.X (see
below). It seems that with firmware 7.52 the power management setting
is ineffective.
- Lucent Firmware updater : available on Lucent web site, not available for
Linux. Note that most firmware updaters require a specific version of
the Windows driver to work (always messy for me).
- Airport card support : only in driver version 5 and
above (kernel 2.4.5). Exact same support as for Lucent cards.
- Symbol card support : fairly complete in v6. Works
perfectly for me on an Intel card in Managed mode and Ad-Hoc demo
mode, up to 11 Mb/s with 128 bit encryption. IBSS works fine
as well with my Wavelan card ;-). Version 8 recognise the
firmware properly and disable Power Management in firmware v2.20 and
later.
- PrismII card support : Not yet fully functional. Most
PrismII cards should work in some form or fashion. Ad-Hoc demo mode,
IBSS Ad-Hoc mode and bit rate setting have been seen to work on a
D-Link card. Encryption is quite broken, sometime a tcpdump manages to
make it work. Note that PrismII firmwares seems to be not as good in
general, for example they don't support Multicast and WEP is broken in
most releases...
- Driver versions : Most up to date is in Kernel 2.4.12.
- Kernel 2.4.X : Works fine with in-kernel Pcmcia driver
(kernel 2.4.3 and later). Enable Pcmcia support in kernel,
recompile and configure normally. You can also use the external Pcmcia
support 3.1.29 and later.
- Kernel 2.2.X : Use Pcmcia package 3.1.29 or
later.
- PCI adapter : may be the cause of configuration
troubles, and does not work on most older PCs. Not really orinoco_cs
related. Use the ISA adapter if possible.
- PLX adapter : supported in v8 (kernel 2.4.12 and
later). Use as a regular PCI network driver.
- Prism2.5 PCI cards : not supported, please use
linux-wlan-ng.
- USB adapters : for Lucent/Agere, use the Orinoco-USB
driver, for PrismII adapters, use linux-wlan-ng.
- MiniPCI cards : there is various kind of MiniPCI cards
in various laptops. Some are based on a PCI-Pcmcia bridge (Dell -
confirmed working), some are based on a USB adapter (HP - working with
Orinoco-USB) and some are based on a PCI Prism2.5 card (IBM/HP -
confirmed working).
- Multi-setup (profiles) : use the Pcmcia scheme
mechanism (see Pcmcia
Howto) with network.opts and wireless.opts. Better than in Windows, because
both IP config and Wireless config are changed synchronously. This may
be also achieved using the specific networking scripts of some distributions.
- Multi-card : The driver supports it (2 cards in a box)
and it has been tested successfully. Radio link quality will be
impacted.
- SMP : The driver is fully SMP safe and has been
successfully tested on a SMP box, including Wireless Extensions.
- Configuration : The only way to configure the
orinoco_cs driver is through the Wireless
Extensions, using the wireless init
files.
- Ad-hoc modes : for most cards, there is two Ad-Hoc
mode, the old proprietary Ad-hoc demo mode and the new 802.11
compliant IBSS Ad-Hoc mode. Those two Ad-Hoc mode are totally
incompatible and do not interoperate between each other.
For Orinoco cards, IBSS Ad-Hoc mode is available only in firmware 6.06
and later. For Symbol card, IBSS Ad-Hoc mode is available only in
firmware 2.00 and later. For PrismII cards, IBSS Ad-Hoc mode is
available only in firmware 0.08 and later.
The Ad-Hoc mode that the driver will select depend on a few
factor :
- by default : if IBSS is not available, the standard
Ad-Hoc mode is the old Ad-Hoc demo mode, if IBSS is available, the
standard Ad-Hoc mode is 802.11 compliant IBSS Ad-Hoc (same as Windows
driver).
- iwpriv ethX set_port3 1 : Force the standard Ad-Hoc
mode to be the old Ad-Hoc demo mode.
- iwpriv ethX set_port3 0 : Force the standard Ad-Hoc
mode to be the 802.11 compliant IBSS Ad-Hoc mode (if available).
Note that you can set those commands in the wireless init files. Then, to set the card
in the standard Ad-Hoc mode that you have selected, you just need to
do :
- MODE="Ad-Hoc" (in the wireless
init files) : set the standard Ad-Hoc mode.
- iwconfig ethX mode Ad-Hoc : set the standard Ad-Hoc mode.
- Debugging Ad-Hoc mode : the field "Access Point" or
"Cell" shown by iwconfig is usefull for
knowing what's happening. If it's all zeros, you are using Ad-Hoc demo
mode. In IBSS Ad-Hoc mode it indicates the cell the node has
joined. It should be the MAC address of the first node started and all
nodes should have the same value (apart if they are out of range).
- Encryption keys : Encryption setting is fully
functional and available in the wireless
init files. Note that the driver doesn't complain if you set a 128
bits key on a 40 bits only card (Silver), which won't work...
- Fragmentation setting : firmware 6.X and later removed
direct fragmentation threshold setting in favor of microwave oven
robustness (automatic fragmentation). For those firmware, the
fragmentation setting in the driver enable or disable MWO robustness.
- Signal strength in ad-hoc mode : set a MAC address in
the spy list using iwspy, first address in the list will appear
in /proc/net/wireless as well as with iwspy.
- Promiscuous mode : does work with firmware 4.X and
open network (no encryption). Doesn't seem to work with encryption
enabled and with firware 6.04. Likely to be firmware issues...
- Driver switching : If you want to switch between the 3
Wavelan-IEEE drivers, everything is controlled in
/etc/pcmcia. wvlan_cs is bound in config,
orinoco_cs is bound in hermes.conf, wavelan2_cs
is bound in wavelan2_cs.conf. Comment those files as needed.
- Driver not loading : if after installing the orinoco
driver the driver doesn't load or another driver loads, make sure you
added hermes.conf in /etc/pcmcia and check other files
for driver binding (see above).
- Ethernet Bridging : doesn't work due to 802.11
protocol restriction. You may want to try IP bridging (with ARP proxy)
or routing.
- Tx Timeout : various things can produce Tx Timeout. It
depends on when they happen and how frequent they are :
- As soon as the card is inserted : interrupts are not
delivered to the driver (not a driver problem, more a Pcmcia problem -
check /proc/interrupts). If you have a PCI adapter, try to play
with "PCIC_OPTS" setting. Also try to exclude the irq currently
used by the driver in /etc/pcmcia/config.opts.
- Under load : This has been fixed in orinoco_cs...
- GetNextTuple: No more items : You are using a PrismII
card in a 5V only Pcmcia slot. PrismII cards support both 3.3V and 5V
operation but forget to tell Pcmcia about 5V. Use the
ignore_cis_vcc module option to workaround this.
- Resetting the card : the card may get dead for various
reasons. The driver include two functionalities to reset the
card. iwpriv ethX force_reset will do a firmware reset, and
iwpriv ethX card_reset will do a hard Pcmcia reset of the card.
- 802.3 encapsualtion : various Access Points and
drivers interpret the 802.3 specification in different way. Older
driver would not work with specific Access Points (Linksys), and in
theory, the latest driver works around those gotchas. If you can
receive but not transmit with your Access Point, try playing
with the use_old_encaps module option.
- Short preamble : The Orinoco cards don't support short
preamble, so you need to disable it in your Access Point. The Symbol
cards support short preamble, and this may be enabled via iwpriv
ethX set_preamble 1.
- Symbol and Ad-Hoc interoperability : Because Symbol
card enable short preamble by default, you may have interoperability
problem in Ad-Hoc mode with other vendors, so just do iwpriv ethX
set_preamble 0 (you may also set that in the wireless init files using
IWPRIV="set_preamble 0").
- WEP and PrismII : Most PrismII firmwares are
completely broken when it come to WEP support, and only firmwares
1.4.9 and later support WEP properly and will work properly
with Orinoco. For broken firmwares, it is possible to use driver
based encryption, which is available in HostAP or as a
patch for Orinoco (and this will slow down operation).
Wireless LANs and
Wireless Tools -
jt@hpl.hp.com
Updated 26 May 04
Copyright © 1996-2004 Jean Tourrilhes
|
|
Project hosted and sponsored by :
|