NDISWrapper howto

Quando corri ed hai molta fretta e ti serve una scheda PCMCIA Wireless, finisci sempre per acquistare un oggetto che funziona (forse...) solo con Windoze. Nel nostro caso non è più un problema visto che da un po di tempo esiste il progetto NdisWrapper per GNU/Linux....

Copyright: Questo documento è stato realizzato da Stefano Tagliaferri e viene rilasciato sotto licenza GPL, la versione originale di questo documento puà essere prelevata alla URL http://www.irretito.it

Poche settimane fa ho acquistato per pochi euro una scheda 802.11g prodotta dalla BELKIN per la quale viene fornito solamente il driver per Windows, come spesso accade, molti produttori come la BELKIN, non rilasciano le specifiche relative all'hardware da loro prodotto, oppure non forniscono i drivers che consentano alle loro schede di rete Wireless di funzionare con GNU/Linux.

Il progetto NdisWrapper fornisce un modulo per il Kernel di Linux che è in grado di caricare ed eseguire i drivers Ndis (Windows network driver API) sostituendo di fatto il mancato rilascio dei drivers nativi. NdisWrapper lavora bene con molte schede miniPCI (builtin), PCI, PCMCIA (solo Cardbus) nonchè le schede USB. Per verificare il livello di compatibilità con la vostra scheda Wireless consultate il progetto Wiki di NdisWrapper (http://ndiswrapper.sourceforge.net/phpwiki/index.php/).

Nel caso che andrà a descrivere il portatile (hp ominibook xe4500) sul quale ho installato la versione 1.1 di NdisWrapper, è configurato con Fedora Core 3, Kernel 2.6.11-1.14_FC3.

Il sito web di riferimento per il progetto NdisWrapper è http://ndiswrapper.sourceforge.net/. Proprio dal sito del progetto ho provveduto a scaricare la distribuzione in formato tarball che contiene i codici sorgenti. La procedura di compilazione e di installazione dei sorgenti è piuttosto semplice

# tar zxvf ndiswrapper-1.1.tar.gz
# cd ndiswrapper-1.1
# make && make install

a questo punto possiamo avviare ndiswrapper

# ndiswrapper
Usage: ndiswrapper OPTION
Manage ndis drivers for ndiswrapper.
-i inffile        Install driver described by 'inffile'
-d devid driver   Use installed 'driver' for 'devid'
-e driver         Remove 'driver'
-l                List installed drivers
-m                Write configuration for modprobe
-hotplug          (Re)Generate hotplug information

la procedura di installazione del driver Ndis è piuttosto semplice, in genere lo stesso viene incluso nel supporto CDROM allegato alla confezione della scheda Wireless

# ndiswrapper -i /media/cdrecorder/drivers/bcmwl5.inf

il driver Ndis è stato installato, per verificare l'insieme dei drivers installati utilizziamo il comando ndiswrapper

# ndiswrapper -l
Installed ndis drivers:
bcmwl5  driver present, hardware present

a questo punto dobbiamo fare in modo di caricare in memoria il modulo ndiswrapper in modo che lo stesso possa finalmente gestire la nostra scheda Wireless PCMCIA prodotta dalla BELKIN

# modprobe ndiswrapper

la scheda Wireless viene finalmente inizializzata ed è pronta per lavorare, per verificare lo stato dell'interfaccia Wireless utilizziamo l'utility iwconfig(8) (Wireless Tools for Linux - http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html)

# iwconfig
lo        no wireless extensions.
eth0      no wireless extensions.
sit0      no wireless extensions.
wlan0     IEEE 802.11g  ESSID:off/any
          Mode:Managed  Frequency:2.462 GHz  Access Point: 00:00:00:00:00:00
          Bit Rate:54 Mb/s   Tx-Power:16 dBm
          RTS thr:2347 B   Fragment thr:2346 B
          Encryption key:off
          Power Management:off
          Link Quality:100/100  Signal level:-10 dBm  Noise level:-256 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

per consentire alla nostra macchina di caricare il modulo ndiswrapper con il boot del sistema operativo dobbiamo modificare il file /etc/modprobe.conf utilizzando sempre l'utilityndiswrapper

# ndiswrapper -m
Adding "alias wlan0 ndiswrapper" to /etc/modprobe.conf

trattandosi di una scheda PCMCIA è molto probabile che il modulo non venga inizializzato dal Kernel in quanto il sottosistema PCMCIA viene avviato durante il boot del sistema operativo successivamente al caricamento dei moduli del kernel. In questo caso possiamo quindi ricorrere alla modifica del file /etc/rc.local. Questo script viene eseguito al termine del processo di init(8) del sistema operativo

# vi /etc/rc.local
.
#!/bin/sh
#
touch /var/lock/subsys/local
/sbin/modprobe ndiswrapper

con questa modifica al file /etc/rc.local, il modulo verrà caricato in memoria solo alla fine del processo di init del sistema operativo e quindi, sicuramente dopo l'avviamento dei servizi PCMCIA.

Ora viene la fase più ostica, o meglio, tutte le operazioni da svolgere per utilizzare una connessione di rete Wireless che sono documentate in maniera pessima. Come solitamente accade con GNU/Linux, la documentazione è molto spesso carente e scritta con i piedi e tra forum dalle iconcine colorate, dalle domande e dalle risposte piuttosto evanescenti, dobbiamo comunque procedere con la configurazione della scheda di rete Wireless affinchè la stessa sia in grado di colloquiare con l'access point (AP).
Ora ricorriamo nuovamente all'utilizzo dell'utility iwconfig(8)

# iwconfig -h
Usage: iwconfig interface [essid {NN|on|off}]
                          [nwid {NN|on|off}]
                          [mode {managed|ad-hoc|...}
                          [freq N.NNNN[k|M|G]]
                          [channel N]
                          [ap {N|off|auto}]
                          [sens N]
                          [nick N]
                          [rate {N|auto|fixed}]
                          [rts {N|auto|fixed|off}]
                          [frag {N|auto|fixed|off}]
                          [enc {NNNN-NNNN|off}]
                          [power {period N|timeout N}]
                          [txpower N {mW|dBm}]
                          [commit]

in alto possiamo visualizzare alcune delle opzioni che utilizzeremo per configurare al meglio la nostra scheda di rete Wireless, in particolare utilizzeremo le seguenti impostazioni

# iwconfig wlan0 rate auto
# iwconfig wlan0 mode managed
# iwconfig wlan0 channel 11
# iwconfig wlan0 key s:WEP_KEY enc open
# iwconfig wlan0 essid nome_nodo

a questo punto dovremmo attivare l'interfaccia di rete wlan0 per collegarci con l'AP (access point)

# ifconfig wlan0 up

ora non ci resta che farci assegnare un indirizzo IP dall'AP utilizzando il nostro client dhcp (dinamic host configuration protocol)

# dhclient wlan0

a questo punto siamo collegati con l'AP e possiamo lavorare senza portarci dietro cavetti ma utilizzando una semplice scheda di rete Wireless.