User Tools

Site Tools


doc:appunti:linux:sa:wifi

Appunti su wireless

Wireless Extensions

Interfaccia offerta dal kernel Linux verso le periferiche wireless. Il parametro kernel da abilitare per avere le Wireless Extensions è CONFIG_NET_RADIO. Ogni versione di kernel ha le sue Wireless Extensions (look into linux/include/linux/wireless.h), esistono eventualmente le patch

http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/iw241_we16-6.diff:

Kernel Wireless Extensions
2.0.30 e 2.1.17 ?? 1
2.2.14 e 2.3.24 9
2.4.22 15

Wireless-tools

Set di programmi user-space che si interfacciano con le Wireless Extensions. La versione corrente è la 26. Dalla versione 20 in poi, questi tools richiedono le Wireless Extension 9 o successive. Il sito di riferimento è:

http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html

iwconfig

Qeusto è il comando principale utilizzato per impostare il funzionamento della scheda WiFi: canale, modalità, ESSID, crittografica, ecc. Lanciato senza parametri mostra le impostazioni correnti delle interfacce che hanno le wireless extension.

iwpriv

Con il comando iwpriv si impostano parametri specifici per ciascun driver wireless, al contrario di iwconfig che invece gestisce i parametri generici condivisi da tutti i driver. I parametri dipendono ovviamente dal driver wireless in questione, ad esempio alcuni utilizzano questi parametri privati per impostare la protezione WPA.

iwlist

Mostra i dettagli di una interfaccia wireless. Ad esempio può servire ad elencare i tipi di chiave supportati dalla scheda, i bit rate, elenca gli access point rilevati (scanning), ecc.

Tramite la funzione scanning è possibile ottenere informazioni sulla qualità di un segnale ricevuto. Le informazioni riportate sono Link quality, Signal level e Noise level, purtroppo non tutti i driver o hardware sono in grado di riportare queste informazioni, alcuni riportano un valore fittizio costante.

Link quality Questo valore riportato dai driver wireless Linux non è mai stato troppo affidabile, ma le cose stanno migliorando. Il driver calcola un valore compreso tra 0 e 100, che è il risultato di numerosi parametri tra cui forza del segnale, perdita di pacchetti, ritrasmissioni, bitrate in uso rispetto al bitrate massimo, ecc. Il valore viene riportato come rapporto tra valore calcolato e valore massimo, es. Quality=84/100
Signal level Livello del segnale riportato dall'hardware espresso in dBm (generalmente compreso tra -20 dBm e -80 dBm) oppure in RSSI (unità di misura arbitraria, generalmente compresa tra 0 e 255 oppure tra 0 e 100). Il modo di rappresentare il valore dipenda dall'hardware e dal driver, ad es. Signal level=-36 dBm oppure Signal level=52/100
Noise level Io c'ho ancora da vedere un hardware/driver che riporta correttamente il livello di rumore! Dovrebbe essere qualcosa del genere: Noise level:-90 dBm

In questa pagina abbiamo una spiegazione del termine signal quality etc.

Avaya Wireless PC-Card ETS (Gold)

U.S. Robotics 22 Mbps Wireless PC-Card (USR2210)

Sitecom Wireless Network USB Adapter 54g Turbo WL-172

Scheda PCI Intersil Corporation ISL3890 (Prism GT/Prism Duette)

Queste sono le informazioni ottenute con lspci da una di queste schede sul bus PCI.

Kernel 2.6.12

Il progetto originato da http://prism54.org/ è stato incorporato nei sorgenti ufficiali del kernel Linux. Basta abilitare l'opzione CONFIG_PRISM54=m per ottenere il modulo prism54.ko, è indispensabile però procurarsi il firmware da caricare sulla scheda, salvarlo nel file /usr/lib/hotplug/firmware/isl3890. Il modulo kernel provvede ad effettuare l'upload del firmware generalmente quando l'interfaccia viene attivata con ifconfig eth1 up oppure quando viene configurata con iwconfig. Se il firmware non è disponibile si ha questo messaggio in kern.log:

Dec 13 20:10:15 localhost kernel: prism54: request_firmware() failed for 'isl3890'
Dec 13 20:10:15 localhost kernel: eth0: could not upload firmware ('isl3890')

Kernel 2.4.x con driver ISL3890-0.1.0

Con un kernel precedente alla versione 2.4.22, l'unica possibilità di usare questa scheda wireless è quella di compilare gli appositi driver. A partire dalla versione 2.4.22 tale driver è diventato disponibile come patch da applicare al kernel, infine è stato incorporato nella versione ufficiale del kernel (vedi paragrafo precedente).

Sul sito http://prism54.org/ esistono i driver per le schede wireless PCI e Cardbus con chipset ISL3880, ISL3877 e ISL3890 (Prism GT, Indigo e Duette). Dopo aver compilato il tutto si ottiene il driver islpci.o che puo' essere caricato direttamente con insmod.

Per la compilazione del driver sono richieste anche delle patch al kernel, vedere le note sulla compilazione del driver ISL3890.

Dopo aver caricato il modulo si deve configurare i parametri di funzionamento della scheda utilizzando l'utility generica iwconfig (dai Wireless-tools) oppure l'utility specifica per il driver Intersil setoid.

One configuration that I was able to set: two cards in Ad-hoc Mode. This is the configuration script: IslpciAdHocConfig.

Another working config: one card in Client Mode (Managed), talking to an Access Point U.S.Robotics at 11 Mbps: IslpciClientConfig.

This driver can work in Access Point mode (but I was unable to do so), a more advanced mode than Ad-hoc. This means that the host can also work as an Access Point instead of only work as a single station. With older cards and drivers this was not so common. For older Intersil cards (Prism2/2.5/3) there was a specific driver for using them in Access Point Mode. This is the home page for the drivers http://hostap.epitest.fi/, and there is some tips on using Access Point Mode with Ethernet Bridge: http://trekweb.com/~jasonb/articles/hostap_20030727.shtml.

Con il kernel 3.0.0 la scheda non viene riconosciuta e attivata automaticamente, sebbene il modulo kernel rt2800usb sia compatibile. Bisogna comunque installare il firmware con il pacchetto firmware-ralink e quindi istruire il modulo kernel ad usare la periferica:

modprobe rt2800usb
echo 2001 3c1b > /sys/bus/usb/drivers/rt2800usb/new_id

L'ID usb della periferica si vede con lsusb:

lsusb
Bus 001 Device 010: ID 2001:3c1b D-Link Corp.

Modalità e parametri di funzionamento

Una scheda wireless può essere configurata per lavorare in diverse modalita'. Il tool iwconfig conosce i seguenti modi (tra parentesi il nome riportato dal driver Intersil):

Modo Auto (Promiscous)

Unico modo con il quale per ora ha funzionato il driver Intersil. Nota: con iwconfig sembra che si possa cambiar canale, però cambiandolo da una parte sola tutto continua a funzionare!

SSID       Non impostato, errore SET: Error in PIMFOR reply 3 10000002 36 0 34
Frequency  Impostato OK, 2.422GHz
Bit Rate   Impostato OK, 54Mb/s

Modo Managed (Client)

Network composed of many cells, with roaming or with an Access Point.

Modo Ad-hoc

Network composed of only one cell and without Access Point. This mode is sometimes referred as Independent BSS Mode, commonly referred to as IBSS Mode. In this mode, the wireless network acts more like a shared Ethernet cable: all traffic is peer-to-peer.

Ad-hoc network is the simplest form of Wireless LAN is a network composed of a few nodes without any bridging or forwarding capability. All nodes are equal and may join or leave at any time, and have equal right to the medium. In fact, it's very much like an Ethernet, where you may add or remove node at discretion. This is the kind of radio networks deployed in homes of small offices.

Of course, for this to work all nodes must be able to see all the other nodes of the network, to be able to establish communication with them. When a nodes goes out of range, he just loose connection with the rest of the ad-hoc network. Effectively, this is a single cell network.

One of the node of the ad-hoc network may provide routing or proxying to communicate to the rest of the work, but nodes are still confined to the area within that cell.

Modo Master (Access Point)

The node is the synchronisation master or act as an Access Point.

In fact, an Access Point is simply a bridge, connected on one side to the radio network and on the other side to Ethernet (usually), forwarding packets between the two networks. A bridge works at the MAC level, just looking through the MAC headers to make its decisions (filtering) and changing MAC headers according to the MAC protocol used. This means that NetBeui and IPX work across the access point, and that the nodes connected to the radio must use the same TCP/IP subnet as the Ethernet segment the access point is connected to.

When wireless clients (specifically 802.11b) talk to each other via an Access Point, we say that we are using Infrastructure BSS Mode. This is as oppossed to Ad-Hoc Mode where clients talk to each other directly. In this mode, the wireless network acts somewhat like an Ethernet hub: all traffic travels to or from the Access Point; clients do not communicate directly. The main advantage of BSS Mode is that two clients that can't directly see each other, but who can both see the central Access Point can still talk to each other.

Modo Repeater

The node forward packets on the air.

Modo Secondary

The node act as a backup master/repeater.

SSID

Frequency or channel

The frequency or channel parameter is the physical separation between networks (the keyword freq and channel are synonymous). For frequency hopping devices, it might be the hopping pattern.

NWID

Network id or domain, to distinguish different logical networks which might be on the same frequency.

Canali e frequenze assegnate

Da http://www.wlana.org/learn/tables.htm:

Ch      North American  European        Japanese
1       2.412 GHz       N/A             N/A
2       2.417 GHz       N/A             N/A
3       2.422 GHz       2.422 GHz       N/A
4       2.427 GHz       2.427 GHz       N/A
5       2.432 GHz       2.432 GHz       N/A
6       2.437 GHz       2.437 GHz       N/A
7       2.442 GHz       2.442 GHz       N/A
8       2.447 GHz       2.447 GHz       N/A
9       2.452 GHz       2.452 GHz       N/A
10 A    2.457 GHz       2.457 GHz       N/A
11 B    2.462 GHz       2.462 GHz       N/A
12 C    N/A             N/A             2.484 GHz

Undocumented channels
12 C    2.467 GHz
13 D    2.472 GHz
14 E    2.484 GHz

Antenna diversity

By having two antennas, even quite close (a few cm), the condition at each antenna is very often totally different. One antenna may give a poor signal and the other a good one, and a few ms later it might be the reverse. So, before receiving each packet, the receiver chooses the best antenna of the two by comparing the signal strengths, and so can avoid most of the fade out periods.

Ethernet bridging

Using a wireless interface as an Access Point on a Linux box, you can use the Linux kernel's 802.1d ethernet bridging option to perform the functions of a hardware bridge; you will use one existing Ethernet interface and the wireless one together. Devices on both interfaces will share the same subnet. You'll need the Linux Ethernet Bridging Utilities that work with the kernel bridging functionality.

You need to remove any existing IP addresses on your chosen interfaces, first (assuming wlan0 is the wireless interface and eth0 is the wired interface):

ifconfig wlan0 0.0.0.0
ifconfig eth0 0.0.0.0

Then, you'll need to enable bridging, with the brctl utility, by adding a bridged interface, br0, assigning physical interfaces wlan0 and eth0 to it, and finally using ifconfig to assign the new virtual bridged interface an IP address:

brctl addbr br0
brctl addif br0 eth0
brctl addif br0 wlan0
ifconfig br0 192.168.1.1 up

On Debian the bridge tools are in bridge-utils package. CONFIG_BRIDGE, bridge.o.

Sustained transfer rate

Room environment.

850 kb/s    54 Mbps Win2k SMC2802W - Win98 SMC2802W
590 kb/s    11 Mbps Win98 SMC2802W - AP U.S.Robotics 2249
690 kb/s    11 Mbps Linux SMC2802W - AP U.S.Robotics 2249

Troubleshooting

Anzitutto ci vuole uno strumento per analizzare i segnali WiFi presenti nell'aria.

Si utilizza l'opzione scanning di iwlist, ovviamente ci vuole una scheda WiFi supportata dalle Wireless Extensions di Linux. In questo esempio si usa l'hardware de La Fonera modificata installando il sistema operativo Linux OpenWrt 2.6.19.2:

root@OpenWrt:~# iwlist ath0 scanning
ath0      Scan completed :
          Cell 01 - Address: 00:40:05:30:CD:4E
                    ESSID:"wifilan"
                    Mode:Master
                    Frequency:2.437 GHz (Channel 6)
                    Quality=14/94  Signal level=-81 dBm  Noise level=-95 dBm
                    Encryption key:on
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 22 Mb/s
                    Extra:bcn_int=100
          Cell 02 - Address: 00:C0:49:A6:9C:14
                    ESSID:"texnet"
                    Mode:Master
                    Frequency:2.432 GHz (Channel 5)
                    Quality=45/94  Signal level=-50 dBm  Noise level=-95 dBm
                    Encryption key:on
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 22 Mb/s
                    Extra:bcn_int=100
          Cell 03 - Address: 00:18:0A:01:3E:66
                    ESSID:"TexWIFI"
                    Mode:Master
                    Frequency:2.432 GHz (Channel 5)
                    Quality=43/94  Signal level=-52 dBm  Noise level=-95 dBm
                    Encryption key:off
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 6 Mb/s; 9 Mb/s
                              11 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s
                              48 Mb/s; 54 Mb/s
                    Extra:bcn_int=100
                    Extra:wme_ie=dd180050f2020101850002a3400027a4000042435e0062322f00
                    Extra:ath_ie=dd0900037f01010020ff7f

NOTA: Pare che il Signal level venga riportato dall'hardware facendo una media su un certo periodo di tempo, quindi cambiando le condizioni (antenna, ecc.) si deve aspettare qualche secondo prima di ottenere un nuovo valore stabile.

Kismet drone

Un'altro ottimo strumento è kismet, in questo caso conviene utilizzare kismet_drone, cioè una versione ridotta del server che acquisisce i pacchetti e li rimanda ad un'altro host via TCP/IP. Su La Fonera si installa il pacchetto:

ipkg install kismet_drone

e si configura il file /etc/kismet/kismet_drone.conf impostando il parametro source:

source=madwifi_g,wifi0,wireless

Per avviare il drone si esegue /usr/bin/kismet_drone. Su un PC si installa kismet (kismet ha in realtà una architettura client/server, il pacchetto Debian include entrambe le componenti) e si configura /etc/kismet/kismet.conf impostando (10.0.1.46 è l'indirizzo IP de La Fonera):

source=kismet_drone,10.0.1.46:3501,drone

Primi passi in Kismet:

  1. Attendere che kismet acquisisca alcuni pacchetti: le varie network vengono mostrate a video.
  2. Ordinare le network ad esempio per signal level (tasti s, Q).
  3. Evidenziare una network con i tasti freccia, per ottenere maggiori informazioni premere i oppure Enter. Chiudere il popup con q.

Vedere anche questo semplice Kismet Main.

doc/appunti/linux/sa/wifi.txt · Last modified: 2012/07/23 10:23 by niccolo