Partendo da alcuni esperimenti con openwrt + raspberry, ho deciso che era il caso di provare a "portare" i risultati ottenuti anche su slackware e metterli a disposizione.
L'obiettivo è raggiungere la velocità teorica dello standard 80211n. A questo scopo ho messo a punto una patch per hostapd, prendendo il materiale dai sorgenti di openwrt e correggendo gli errori. La patch funziona, però è da considerare sperimentale, dato che abbiamo proceduto a occhio cercando di capire cosa serviva e cosa no. Quindi attenzione, a vostro rischio e pericolo. Se vedete che qualcosa non torna, modificatela.
Di fatto viene aggiunta la possibilità di forzare l'attivazione del canale secondario a 40MHZ presente in molti adattatori wireless in commercio.
Ma andiamo con ordine, innanzitutto la patch:
Codice: Seleziona tutto
http://pastebin.com/GdPksBk1
Scaricatelo da SBO e aggiungete nello slackbuild la stringa per applicare la patch. Io ho messo una cosa del genere, subito dopo il comando che estrae il tarball:
Codice: Seleziona tutto
# HT 80211n patch
( cd $PRGNAM-$VERSION
cat $CWD/80211n.noscan.patch | patch -p1 --verbose || exit 1
)
Ora veniamo all'adattatore wireless: nel mio caso si tratta di un netgear wna1100 - driver ath9k_htc: è un 150n. L'hardware deve supportare alcune caratteristiche che si possono individuare col comando 'iw'. Incollo quelle che interessano:
Codice: Seleziona tutto
$ iw list
Wiphy phy0
Band 1:
Capabilities: 0x116e
HT20/HT40
SM Power Save disabled
RX HT20 SGI
RX HT40 SGI
RX STBC 1-stream
Max AMSDU length: 3839 bytes
DSSS/CCK HT40
hostapd.conf
Codice: Seleziona tutto
hw_mode=g
# attivazione supporto al codice di localizzazione
ieee80211d=1
country_code=IT
# canale di trasmissione
channel=5
#abilitazione modalità 80211n
ieee80211n=1
wmm_enabled=1
# forse la parte più importante: modalità HT con canale secondario a 40Mhz
ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40][RX-STBC1][DSSS_CCK-40]
#forza l'attivazione del canale a 40Mhz anche se lo scan da esito negativo
noscan=1
interface=ath9k0
ctrl_interface=/var/run/hostapd
disassoc_low_ack=1
preamble=1
ignore_broadcast_ssid=0
wpa_passphrase=passphrasewpa2
auth_algs=1
wpa=2
wpa_pairwise=CCMP
ssid=Il_vostro_ssid
okc=0
disable_pmksa_caching=1
bssid=indirizzo_mac_del_vostro_adattatore_wireless
hostapd lavora sul canale 5, poi aggiunge il secondo canale a 40MHZ (vedi la parte ht_capab= della configurazione), il numero 9 (5+4=9), e forza l'attivazione grazie all'opzione noscan=1. Diversamente il risultato sarebbe stato negativo nel 99% dei casi, per via dello standard 80211n. Autenticazione: solo WPA2.
Ora avviate hostapd e provate a collegarvi da un altro pc con una periferica wireless che supporti lo standard in questione - nel mio caso un'altra chiavetta 150N.
Date questo comando sull'host dove è in esecuzione hostapd:
Codice: Seleziona tutto
iw nome_interfaccia_wirless station dump
Che dite, va? Asscociato a 150MBit/s.Station ******9 (on ath9k0)
inactive time: 18 ms
rx bytes: 88419
rx packets: 749
tx bytes: 51699
tx packets: 270
tx retries: 0
tx failed: 0
signal: -43 dBm
signal avg: 83 dBm
tx bitrate: 15.0 MBit/s MCS 0 40MHz short GI
rx bitrate: 150.0 MBit/s MCS 7 40MHz short GI
authorized: yes
authenticated: yes
preamble: short
WMM/WME: yes
MFP: no
TDLS peer: no
Bene, facciamo alcuni test con iperf per verificare la velocità reale.
Sulla macchina con hostapd:
Codice: Seleziona tutto
iperf -s -i 1 -u
Codice: Seleziona tutto
iperf -c indirizzo_lan_access_point -i 1 -u -t 10 -b 150M
Codice: Seleziona tutto
Sending 1470 byte datagrams
UDP buffer size: 176 KByte (default)
------------------------------------------------------------
[ 3] local 10.0.0.101 port 40322 connected with 10.0.0.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 11.7 MBytes 98.0 Mbits/sec
[ 3] 1.0- 2.0 sec 12.5 MBytes 104 Mbits/sec
[ 3] 2.0- 3.0 sec 12.8 MBytes 107 Mbits/sec
[ 3] 3.0- 4.0 sec 12.9 MBytes 108 Mbits/sec
[ 3] 4.0- 5.0 sec 12.9 MBytes 108 Mbits/sec
[ 3] 5.0- 6.0 sec 12.9 MBytes 108 Mbits/sec
[ 3] 6.0- 7.0 sec 12.9 MBytes 109 Mbits/sec
[ 3] 7.0- 8.0 sec 13.0 MBytes 109 Mbits/sec
[ 3] 8.0- 9.0 sec 12.7 MBytes 106 Mbits/sec
[ 3] 9.0-10.0 sec 13.0 MBytes 109 Mbits/sec
[ 3] 0.0-10.0 sec 127 MBytes 107 Mbits/sec
[ 3] Sent 90782 datagrams
[ 3] Server Report:
[ 3] 0.0-10.0 sec 127 MBytes 107 Mbits/sec 0.341 ms 0/90781 (0%)
[ 3] 0.0-10.0 sec 1 datagrams received out-of-order
Ora l'inverso - iperf in modalità server sul client:
Codice: Seleziona tutto
Sending 1470 byte datagrams
UDP buffer size: 160 KByte (default)
------------------------------------------------------------
[ 3] local 10.0.0.1 port 5001 connected with 10.0.0.101 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 12.7 MBytes 107 Mbits/sec
[ 3] 1.0- 2.0 sec 12.6 MBytes 106 Mbits/sec
[ 3] 2.0- 3.0 sec 12.3 MBytes 103 Mbits/sec
[ 3] 3.0- 4.0 sec 12.7 MBytes 106 Mbits/sec
[ 3] 4.0- 5.0 sec 12.7 MBytes 107 Mbits/sec
[ 3] 5.0- 6.0 sec 12.3 MBytes 103 Mbits/sec
[ 3] 6.0- 7.0 sec 12.5 MBytes 105 Mbits/sec
[ 3] 7.0- 8.0 sec 12.5 MBytes 105 Mbits/sec
[ 3] 8.0- 9.0 sec 12.5 MBytes 105 Mbits/sec
[ 3] 9.0-10.0 sec 12.6 MBytes 106 Mbits/sec
[ 3] 0.0-10.0 sec 125 MBytes 105 Mbits/sec
[ 3] Sent 89504 datagrams
[ 3] Server Report:
[ 3] 0.0-10.0 sec 125 MBytes 105 Mbits/sec 0.293 ms 0/89503 (0%)
[ 3] 0.0-10.0 sec 1 datagrams received out-of-order
Non vi rimane che testare il tutto, se è di vostro interesse.
Alcune notazioni:
il comando iw presente nei pacchetti ufficiali di slackware riporta velocità non corrette. La versione è abbastanza datata. Scaricate e compilate l'ultima versione, nel mio caso è la 3.17.
Attenzione poi al canale che scegliete: 1-7 dovrebbero andare tutti bene. Sicuramente se andate oltre hostapd non parte.
Edit:
aggiungete alla lista software haveged.
E' tutto per ora.
Alla prossima.
Ciao.