Wireless LAN und Linux

von Marcel Holtmann


1. Einführung

Diese Anleitung beschreibt die Benutzung einer AirLancer MC-11 von ELSA unter Linux. Die Karte ist eine OEM der WaveLAN ORiNOCO und somit ist diese Anleitung leicht auf Karten mit dem gleichen Chipsatz übertragbar. Folgende Karten sollten ohne Probleme als ORiNOCO oder PrismII Modelle funktionieren:

Als Kommunikationspartner wird ein AccessPoint angenommen der ein "Infrastruktur Netzwerk" aufbaut. Auf den "Ad-Hoc" Modus wird im Moment nicht eingegangen. Trotzdem sind viele Konfigurationsschritte ähnlich und diese Anleitung kann von Nutzen sein.


2. Der Linux Kernel und Wireless LAN

Der Linux Kernel unterstützte schon sehr früh Karten mit denen man drahtlose Netze aufbauen konnte. Dennoch gab es lange keine einheitliche API für solche Treiber. Erst mit den Wireless Extensions wurde so eine Schnittstelle zum Kernel geschaffen. Die Wireless Extensions wurden als Erweiterung der Netzwerk Schnittstellen (z.B. eth0) definiert. Über die Erweiterungen können nun die zusätzlichen Einstellungen, die für ein drahtloses Netzwerk notwendig sind vorgenommen werden. Alle zusätzlichen Einstellungen wurden aber nicht in das Programm ifconfig einbaut, sondern in ein extra Programm ausgelagert. Dieses Tool heißt iwconfig und ist Bestandteil der Wireless Tools.

Mit dem Linux Kernel 2.4.x sind die PCMCIA Treiber und Module fester Bestandteil des Kernel geworden. Es existiert zwar weiter das PCMCIA Card Services Paket, aber hieraus werden nur noch die User-Level Utilities benötigt. Weiterhin sollte bei PCI-to-CardBus Komponenten nur noch das yenta_socket Modul benutzt werden. Bei einer SuSE Linux Distribution kann man dieses durch folgende Einträge in der Datei /etc/rc.config erreichen:

#
# Should PCMCIA service be started at boottime? (yes/no)
#
START_PCMCIA="yes"

PCMCIA="yenta_socket"

Für die SuSE Linux Distribution 7.3 sollten folgende Einträge in der Datei /etc/rc.config.d/pcmcia.rc.config vorgenommen werden um den Orinoco Treiber mit dem yenta_socket Modul zu aktivieren. Beim SuSE Linux 8.0 sind diese Einstellungen in /etc/sysconfig/pcmcia zu finden.

PCMCIA_SYSTEM="kernel"

PCMCIA_PCIC="yenta_socket"

Natürlich muss der Kernel mit den Optionen für PCMCIA, Wireless LAN, Wireless Extensions und den Treiber für die ORiNOCO bzw. PrismII Karten kompiliert werden (die Kernel für SuSE 7.3 sind schon so vorbereitet). Folgende Optionen sind hierbei ausreichend:

#
# PCMCIA/CardBus support
#
CONFIG_PCMCIA=m
CONFIG_CARDBUS=y

#
# Wireless LAN (non-hamradio)
#
CONFIG_NET_RADIO=y
CONFIG_NET_WIRELESS=y
CONFIG_PCMCIA_HERMES=m
CONFIG_AIRO_CS=m

Für die Karten von Cisco/Aironet ist der Treiber airo_cs zuständig, der sich auch im Standard Kernel befindet. Eine genaue Beschreibung wird hier nicht gegeben, dennoch ist die Konfiguration und Einrichtung genauso einfach wie für die ORiNOCO Karten, da auch hier die Wireless Extensions unterstützt werden.


3. Konfiguration der PCMCIA Card Services

Seit dem Kernel 2.4.3 ist der Treiber orinoco_cs fester Bestandteil im Mainlinecode. Für die Ansteurung des "Hermes" Wireless MAC Controller wird das Modul hermes benutzt. Ab dem Kernel 2.4.5 sind alle Treiber für Wireless LAN unter dem Verzeichnis wireless zusammengefasst. Ausserdem wurde der PCMCIA unabhängige Teil von orinoco_cs in das Modul orinoco verschoben und macht somit die einfache Entwicklung von PCI und USB Wireless Adaptern möglich.

Mit dem Kernel 2.4.4 wurden die Wireless Extensions von der Version 10 auf die Version 11 erneuert. Es sollte somit mindestens ein Kernel ab der Version 2.4.4 benutzt werden. Am besten ist natürlich die Version 2.4.6 oder neuer.

Kernel   Treiber   Verzeichnis   Wireless Extensions
2.4.30.03 drivers/net/pcmcia/  Version 10
2.4.40.04c drivers/net/pcmcia/  Version 11
2.4.50.05d drivers/net/wireless/  Version 11
2.4.60.06c drivers/net/wireless/  Version 11
2.4.70.06c drivers/net/wireless/  Version 11
2.4.80.06c drivers/net/wireless/  Version 11
2.4.90.06f drivers/net/wireless/  Version 11
2.4.100.07 drivers/net/wireless/  Version 11
2.4.110.08a drivers/net/wireless/  Version 11
2.4.120.08a drivers/net/wireless/  Version 11
2.4.130.08a drivers/net/wireless/  Version 12
2.4.140.08a drivers/net/wireless/  Version 12
2.4.150.08a drivers/net/wireless/  Version 12
2.4.160.08a drivers/net/wireless/  Version 12
2.4.170.08a drivers/net/wireless/  Version 12
2.4.180.09b drivers/net/wireless/  Version 12
2.4.190.11b drivers/net/wireless/  Version 13
2.4.200.11b drivers/net/wireless/  Version 14
2.4.210.13b drivers/net/wireless/  Version 15
2.4.220.13d drivers/net/wireless/  Version 15
2.4.230.13d drivers/net/wireless/  Version 16
2.4.240.13d drivers/net/wireless/  Version 16
2.4.250.13d drivers/net/wireless/  Version 16
2.4.260.13d drivers/net/wireless/  Version 16

Der Orinoco Treiber soll den alten wvlan_cs Treiber vollständig ersetzen. Leider wird dieses von keiner Linux Distribution beachtet und die Linux PCMCIA Packages benutzen auch noch den veralteten Treiber. In der Datei /etc/pcmcia/config sollten folgende Einträge vorhanden sein. Der Eintrag für wvlan_cs ist Standard. Die Einstellungen für orinoco_cs müssen hinzugefügt werden.

device "wvlan_cs"
  class "network" module "wvlan_cs"

device "orinoco_cs"
  class "network" module "orinoco_cs"

Normalerweise sind alle Einträge für die Wireless LAN Karten in der Datei /etc/pcmcia/config vorhanden. Leider zeigen diese auf den alten wvlan_cs Treiber und dieses muss geändert werden. Für die AirLancer MC-11 sind das folgende Einträge:

card "ELSA AirLancer MC-11"
  version "ELSA", "AirLancer MC-11"
  bind "orinoco_cs"

card "ELSA Vianect WLAN MC-11"
  version "ELSA", "Vianect WLAN MC-11"
  bind "orinoco_cs"

card "Intersil PRISM2 11 Mbps Wireless Adapter"
  manfid 0x0156, 0x0002
  bind "orinoco_cs"

Der erste Eintrag sollte normalerweise ausreichen, aber leider besitzt die ELSA Karte die gleiche manfid wie die Intersil PRISM2. Die PCMCIA Utilities erkennen zwar die ELSA Karte, benutzen aber den Eintrag der Intersil PRISM2. Nach dem Neustarten der Card Services und dem Einstecken der Karte wird das orinoco_cs Modul und alle weiteren Module geladen. Konfigurationen für weitere Karten mit dem orinoco_cs Treiber sind als hermes.conf zusammengefasst und müssen nur nach /etc/pcmcia/ kopiert werden. Hier sind alle Einträge für die Karte von ELSA und den ORiNOCO Treiber bereits enthalten.

Module                  Size  Used by
orinoco_cs              4256   1
orinoco                26096   0 [orinoco_cs]
hermes                  3264   0 [orinoco_cs orinoco]
ds                      6122   1 [orinoco_cs]
yenta_socket            8048   1
pcmcia_core            36832   0 [orinoco_cs ds yenta_socket]

Mit dem Befehl dmesg kann kontroliert werden, ob der Ladevorgang erfolgreich verlaufen ist. Die Ausgabe sollte ähnlich der folgenden sein:

Linux Kernel Card Services 3.1.22
  options:  [pci] [cardbus] [pm]
Yenta IRQ list 04b8, PCI irq9
Socket status: 30000006
cs: IO port probe 0x0c00-0x0cff: clean.
cs: IO port probe 0x0800-0x08ff: clean.
cs: IO port probe 0x0100-0x04ff: excluding 0x170-0x177 0x370-0x377 0x4d0-0x4d7
cs: IO port probe 0x0a00-0x0aff: clean.
cs: memory probe 0xa0000000-0xa0ffffff: clean.
hermes.c: 12 Dec 2000 David Gibson <hermes@gibson.dropbear.id.au>
orinoco.c 0.06c (David Gibson <hermes@gibson.dropbear.id.au> and others)
dldwd: David's Less Dodgy WaveLAN/IEEE Driver
orinoco_cs.c 0.06 (David Gibson <hermes@gibson.dropbear.id.au> and others)
eth0: Firmware ID 1F vendor 0x1 (Lucent) version 7.28
eth0: Ad-hoc demo mode supported.
eth0: IEEE standard IBSS ad-hoc mode supported.
eth0: WEP supported, "128"-bit key.
eth0: MAC address 11:22:33:44:55:66
eth0: Station name "HERMES I"
eth0: ready
eth0: index 0x01: Vcc 5.0, irq 3, io 0x0100-0x013f


4. Konfiguration des Wireless LAN

Eine Wireless LAN Karte ist für den Linux Kernel das gleiche wie eine normale Netzwerkkarte und wird somit als Ethernet Device (z.B. eth0) im Kernel angemeldet. Mit Hilfe der Programme ifconfig und route kann die Wireless LAN Karte genauso konfiguriert werden wie jeder andere Netzwerkkarte unter Linux auch. Mit DHCP kann sogar die Adresse automatisch bezogen werden.

notebook# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 11:22:33:44:55:66  
          inet addr:192.168.0.100  Bcast:192.168.0.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

Bevor jedoch die Karte mit einer IP-Adresse versehen wird, sollte sie mit Hilfe der Wireless Extensions eingestellt werden. Hier kommt das Programm iwconfig zum Einsatz. iwconfig funktioniert genauso wie ifconfig und zeigt beim Aufruf ohne Parameter die aktuellen Einstellungen der Wireless Extensions an.

notebook# iwconfig
eth0      IEEE 802.11-DS  ESSID:"WIRELESS_LAN"  Nickname:"notebook"
          Mode:Managed  Frequency:2.422GHz  Access Point: 1F:2F:3F:4F:5F:6F
          Bit Rate:11Mb/s   Tx-Power=15 dBm   Sensitivity:1/3  
          Retry limit:4   RTS thr:off   Fragment thr:off
          Encryption key:1122-3344-5566-7788-99AA-BBCC-DD
          Power Management:off
          Link Quality:39/92  Signal level:-53 dBm  Noise level:-92 dBm
          Rx invalid nwid:0  invalid crypt:0  invalid misc:0

Die wichtigsten Einstellungen für ein Wireless LAN sind ESSID, Mode, Frequency (bzw. Channel) und Encryption key. Wenn man einen (oder mehrere) AccessPoints ohne Verschlüsselung betreibt ist es unter Linux nur notwendig den Netzwerknamen (ESSID) zusetzen und den Modus auf Managed umzustellen. Der entsprechende AccessPoint wird automatisch gefunden und auch benutzt. Im Beispiel wäre der Netzwerkname "WIRELESS_LAN".

notebook# iwconfig eth0 essid WIRELESS_LAN
notebook# iwconfig eth0 mode managed

Das setzen der Frequency (bzw. Channel) ist unter Linux im Managed Modus nicht erlaubt. Hier wird standardmäßig der Kanal 3 benutzt, was einer Frequenz von 2.422GHz entspricht.

Ein Wireless LAN sollte immer mit eine WEP128 Verschlüsselung betrieben werden und somit ist es natürlich notwendig dem Treiber den Schlüssel mitzuteilen. Standardmäßig können die Wireless LAN Karten vier verschiedene Schlüssel gleichzeitig speichern, wovon eine aber nur aktive sein kann. Karten mit WEP64 und WEP128 Verschlüsselung unterstützen sowohl 40-Bit (5 Zeichen) wie auch 104-Bit (13 Zeichen) lange Schlüssel. Man kann die Schlüssel als Hex-Wert oder auch als Zeichenkette angeben. Bei der Angabe als Zeichenkette ist ein "s:" voranzustellen. Ob es sich um einen WEP64 oder WEP128 Schlüssel handelt unterscheidet das Programm iwconfig automatisch an der Länge der Eingabe. Die Position im Kartenspeicher wird ein eckigen Klammern hinter dem Schlüssel angegeben. Nur die Positionsangabe aktiviert den Schlüssel.

notebook# iwconfig eth0 key s:abcde [1]
notebook# iwconfig eth0 key s:abcdefghijklm [2]
notebook# iwconfig eth0 key 6162636465666768696A6B6C6D [3]
notebook# iwconfig eth0 key [3]

Natürlich kann man sich auch die aktuell gespeicherten Schlüssel anzeigen lassen. Hierfür muss man das Programm iwlist benutzen. Der aktuell benutzte Schlüssel erscheint auch in der Auflistung von iwconfig.

notebook# iwlist eth0 key
eth0      2 key sizes : 40, 104bits
          4 keys available :
                [1]: 6162-6364-65 (40 bits)
                [2]: 6162-6364-6566-6768-696A-6B6C-6D (104 bits)
                [3]: 6162-6364-6566-6768-696A-6B6C-6D (104 bits)
                [4]: off
          Current Transmit Key: [3]

Nun kann das Interface mit ifconfig und route konfiguriert werden und man kann die Arbeit im Netzwerk beginnen. Mit Hilfe von dhcpcd oder dhcpclient kann ein DHCP Server zur Konfiguration herangezogen werden.

notebook# ifconfig eth0 192.168.0.100 netmask 255.255.255.0
notebook# route add default gw 192.168.0.1


5. Automatische Konfiguration durch die PCMCIA Card Services

Es ist sehr umständlich bei jedem einstecken der Karte die Wireless Extensions zu konfigurieren und dann die Netzwerk Einstellungen zu vergeben. Mit Hilfe der Card Services kann dieses aber automatisch bei jedem Einstecken der Karte erledigt und beim Entfernen der Karte wieder rückgängig gemacht werden. Als erstes wollen wir die Einstellungen für die Wireless Extensions eintragen. Dies geschieht in der Datei /etc/pcmcia/wireless.opts. Wichtig sind hier der Netzwerkname, der Modus und der WEP Schlüssel.

case "$ADDRESS" in
*,*,*,*)
    INFO="Wireless LAN Setup"
    ESSID="WIRELESS_LAN"
    MODE="managed"
    KEY="s:abcdefghijklm [1]"
    ;;
esac

Jetzt muss noch das Netzwerk konfiguriert werden. Hierfür werden die entsprechenden Einträge in der Datei /etc/pcmcia/network.opts vorgenommen.

case "$ADDRESS" in
*,*,*,*)
    INFO="Network Setup"
    IPADDR="192.168.0.100"
    NETMASK="255.255.255.0"
    BROADCAST="192.168.0.255"
    GATEWAY="192.168.0.1"
    ;;
esac

Die meisten Netzwerke sind mit DHCP Servern ausgestattet und jeder AccessPoint bringt die Funktionalität mit, DHCP Anfragen zu beantworten. Da die Datei network.opts nicht allein für Wireless LAN Karten zuständig ist, sondern auch bei kabelgebundenen PCMCIA Netwerkkarten verwendet wird, sollte man hier lieber die Einstellung wählen, das ein DHCP Server abgefragt werden soll.

case "$ADDRESS" in
*,*,*,*)
    INFO="DHCP Network Setup"
    DHCP="y"
    ;;
esac

Für die Card Services ist leider nicht zu erkennen ob es sich um eine Netzwerkkarte oder eine Wireless LAN Karte handelt und die Befehle für Wireless Extensions werden immer mit ausgeführt. Dies führt natürlich zu Fehlermeldungen, wenn eine normale Netzwerkkarte eingelegt wird. Um diese zu vermeiden sollten die Einstellungen in /etc/pcmcia/wireless.opts nur beachtet werden, wenn es eine Wireless LAN Karte ist. Alle Karten, die den ORiNOCO Treiber benutzen haben eine MAC Adresse aus zwei Bereichen. Zum ersten 00:60:1D:* und zum zweiten 00:02:2D:*. Die Karten von ELSA können sowohl zum ersten als auch zum zweiten Bereich gehören. Man muss also immer beide angeben.

case "$ADDRESS" in
# Lucent Wavelan IEEE (+ Orinoco, RoamAbout and ELSA)
*,*,*,00:60:1D:*|*,*,*,00:02:2D:*)
    INFO="Wireless LAN Setup"
    ESSID="WIRELESS_LAN"
    MODE="managed"
    KEY="s:abcdefghijklm [1]"
    ;;
esac


6. Auf der Arbeit und zu Hause

Für mobile Geräte wie Notebooks ist es absolut wichtig, das man sich schnell und unkompliziert in verschiedenen Netzwerken anmelden kann. Hierfür sind die Einstellungen wie IP-Addresse, Netzmaske und Gateway wichtig. Benutzt man darüber hinaus auch ein Wireless LAN, muss man noch den Netzwerknamen und den WEP Schlüssel kennen. Unter Windows muß man diese Daten für jedes Netzwerk von Hand neu eintragen und dann meistens den Rechner neu starten. Unter Linux gibt es für PCMCIA Karten eine einfache Methode diese Probleme in den Griff zu bekommen.

Mit den PCMCIA Card Services kann man die Konfiguration von Profilen abhängig machen. Diese Profile werden bei PCMCIA "Scheme" genannt und mit Hilfe von cardctl gewechselt. Als Parameter wird hier das Kommando scheme und dann der Name des neuen "Scheme" angegeben. Es kann immer nur genau ein "Scheme" aktiviert sein. Der aktuelle "Scheme" Name ist unter /var/lib/pcmcia/scheme abgespeichert.

notebook# cardctl scheme work
checking:
Changing scheme from 'home' to 'work'...

Die Standardsituation ist, das man sein Notebook auf der Arbeit benutzt und auch zu Hause weiter benutzen möchte. Desweiteren soll ein Profile existieren, welches einen DHCP Server abfragt und davon ausgeht, das das Wireless LAN keine Verschlüsselung erfordert und den speziellen Netzwerknamen any akzeptiert. Die drei Profile werden work, home und dhcp genannt.

Als erstes soll jetzt die Datei /etc/pcmcia/wirless.opts konfiguriert werden. Hierfür werden die Daten des Wireless LAN benötigt. In dem Beispiel sollen das folgende sein:

Scheme Name   workhomedhcp
ESSID FIRM_NETWORKHOME_NETWORKany
Mode managedmanagedmanaged
WEP Key s:Wireless_WORK [1]   s:Wireless_HOME [1]   off

case "$ADDRESS" in
work,*,*,00:60:1D:*|work,*,*,00:02:2D:*)
    INFO="Wireless LAN @ Work Setup"
    ESSID="FIRM_NETWORK"
    MODE="managed"
    KEY="s:Wireless_WORK [1]"
    ;;
home,*,*,00:60:1D:*|home,*,*,00:02:2D:*)
    INFO="Wireless LAN @ Home Setup"
    ESSID="HOME_NETWORK"
    MODE="managed"
    KEY="s:Wireless_HOME [1]"
    ;;
dhcp,*,*,00:60:1D:*|dhcp,*,*,00:02:2D:*)
    INFO="Generic Wireless LAN without Encryption"
    ESSID="any"
    MODE="managed"
    KEY="off"
    ;;
esac

Nun soll auch noch die Datei /etc/pcmcia/networks.opts mit den Profilen konfiguriert werden. Die Paramerter für die MAC-Addressen werden weggelassen, damit auch kabelgebundene Netzwerkkarten die Einstellungen nutzen können. Das Profil dhcp ist hierbei die Verallgemeinerung für alle modernen Netzwerke mit DHCP Unterstützung.

Scheme Name   workhomedhcp
IP-Adresse 10.123.70.100   192.168.0.100   dhcp
Netmask 255.255.255.0   255.255.255.0   dhcp
Broadcast 10.123.70.255   192.168.0.255   dhcp
Gateway 10.123.70.1   192.168.0.1   dhcp

case "$ADDRESS" in
work,*,*,*)
    INFO="Network @ Work Setup"
    IPADDR="10.70.123.100"
    NETMASK="255.255.255.0"
    BROADCAST="10.70.123.255"
    GATEWAY="10.70.123.1"
    ;;
home,*,*,*)
    INFO="Network @ Home Setup"
    IPADDR="192.168.0.100"
    NETMASK="255.255.255.0"
    BROADCAST="192.168.0.255"
    GATEWAY="192.168.0.1"
    ;;
dhcp,*,*,*)
    INFO="DHCP Network Setup"
    DHCP="y"
    ;;
esac


7. Links

Linux PCMCIA Card Services
Linux PCMCIA Howto von David Hinds
Wireless Tools for Linux für die "Wireless Extension" von Linux
The Linux Wireless LAN Howto von Jean Tourrilhes
Installing a Wireless PC Card with Linux von Michael Weber
PCMCIA Wireless cards (802.11b) and Linux
KOrinoco - A Manager for wireless LAN PC-Cards
MWavelan Driver for Lucent ORiNOCO Card under Linux
An API for Wireless Cards under Linux
Inside the Orinoco Range Extender Antenna
WLAN Ressources
Access Point SNMP Utils for Linux
Weitere Links zum Thema Wireless LAN
Host AP driver for Intersil Prism2/2.5/3 and WPA Supplicant
WAP11 Unix Configuration Utility
GNOME SNMP Manager for Linksys WAP11
Wireless Networking Stuff
Distributed Wireless Honeypot
Linux Driver for the 802.11g Prism GT / Prism Duette / Prism Indigo Chipsets
Intel PRO/Wireless 2100 Driver for Linux
Intel PRO/Wireless 2200BG Driver for Linux
Mandrake Linux Wireless HOWTO
Weitere Hilfestellungen zum Thema Linux, Netzwerke und Wireless LAN
Linux Forum mit weiteren HOWTO's

Linux and the Atheros wireless LAN card
Linux and the AVM FRITZ!WLAN USB sticks


Copyright © 2001-2004 Marcel Holtmann Erstellt am 26. Juli 2001
Letzte Änderung am 9. Mai 2004