Pagina 1 di 1

[Slackware]Hostapd a velocità massima

Inviato: mer 3 dic 2014, 9:58
da rik70
Noto che da queste parti molti usano hostapd.

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
Poi serve hostapd versione 2.3
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 
)
Compilate e installate.

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
Adesso passiamo al file di configurazione di hostapd. Come sopra, ci soffermiamo sulle opzioni importanti, aggiungendo qualche commento chiarificatore - spero.
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
In sostanza:
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
Questo è il risultato:
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
Che dite, va? Asscociato a 150MBit/s.

Bene, facciamo alcuni test con iperf per verificare la velocità reale.
Sulla macchina con hostapd:

Codice: Seleziona tutto

iperf -s -i 1 -u
sul client:

Codice: Seleziona tutto

iperf -c indirizzo_lan_access_point -i 1 -u -t 10 -b 150M
Risultato:

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
107 Megabit al secondo: non male!

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
Anche in questo caso il responso sembra più che soddisfacente: siamo sempre sopra i 100MBits/s

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.