
Il DWL-900+ si presta ad alcune modifiche interessanti.
Passiamo subito al dunque, le possibili modifiche che conosco sono le seguenti.
NOTA: tutte le modifiche proposte qui potrebbero danneggiare il vostro Access Point. Anche se fino ad ora non sono mai venuto a conoscenza di un caso di danneggiamento irreversibile dell'AP, è bene partire col questo ordine di idee: che l'AP da modificare è “sacrificabile” (in nome della curiosità :) ).
Questo firmware modificato (versione 3.06) permette di impostare la potenza di uscita a 18dB e risolve un bug che rendeva i firmware superiori alla versione 3.02 inutilizzabili per i link a lunga distanza! Infatti dolo la versione 3.02 la selezione dell'antenna non funziona più, o meglio funziona a metà: l'antenna ricevente, infatti, rimane sempre quella interna, a prescindere dall'impostazione effettuata! Senza eliminare dunque lo switch del diversity i nuovi firmware non si possono utilizzare per link superiori ai 100m!
Dopo aver sostituito la versione 3.02 con questo firmware la maggior parte delle persone hanno riscontrato maggiori prestazioni, anche installandolo su uno solo degli endpoint! Le prestazioni in molti casi sono aumentate del 10-20%, mentre nel mio caso sono piu' che raddoppiate!
Il firmware hack 0.6 ha le seguenti caratteristiche:
Scaricabile qui: http://www.acinonyx.tk/
Oppure dal nostro mirror: 3.06_mod_0.6_acinonyx.zip
Questa modifica è stata effettuata, che io sappia, per la prima volta da Napoliwireless.net (cioè noi) con l'ausilio di Nabuk.org (Nabuk ha gentilmente deciso di immolare uno dei suoi AP).
L'access point US Robotics a 22 Mbit (USR842249) è praticamente identico al DWL-900+ rev B, c'e' solo una piccola differenza nella disposizione dei componenti sul PCB.
La grossa differenza sta nel firmware: la D-Link infatti sta facendo uscire una nuova versione ogni uno o due mesi, mentre US Robotics ne ha rilasciate pochissime (io ne conosco solo una); il firmware USR sembra inoltre essere molto più stabile e performante di quello D-Link (tutto questo nonostante il firmware sia prodotto comunque da una terza società, la Global Sun Technologies).
Detto questo, il mio pallino è stato di capire se si potesse installare il firmware US Robotics sul DWL-900+ rev B. La Global Sun Technologies ha previsto una mossa del genere ed ha incluso nel firmware un identificativo di versione che comprende anche identificativo del produttore dell'hardware (il Vendor ID). Il vendor ID entra a far parte del checksum del firmware, e se si tenta di caricare un firmware di un produttore diverso si ottiene il classico “Checksum Error”.
Per fortuna, il checksum viene fatto proprio facendo una sorta di somma dei byte che compongono il firmware (l'algritmo in ogni caso non ci è noto, ma ci piacerebbe saperlo). Siccome il vendor ID è costituito da un solo Byte, anche il checksum cambia di poco, anzi per fortuna di pochissimo: in pratica se la differenza tra due vendor ID è pari a X, basta sommare X al checksum (considerato come un numero little endian a 32 bit) per ottenere un checksum valido per la modifica del vendor ID.
Il vendor ID si trova alla fine del file .bin del firmware, insieme all'ID di versione del firmware; l'ID di versione è costituito da 24 caratteri ed è in genere simile alla stringa che segue (è quello del DWL900+ rev B):
GL2422AP-00-0M0 T1.0 -04
L'ultimo carattere, '4', è il vendor ID che è stato assegnato a D-Link. Quello di US Robotics è '6':
GL2422AP-00-0M0 T1.0 -06
Il checksum del'ultima versione del firmware US Robotics 2249 è:
87 AE 29 26
per trasformare il firmware in qualcosa che il D-Link DWL-900+ rev B accetti come buono si deve cambiare il vendor ID da 6 a 4, sottraendo due, dunque, al vendor ID di US Robotics. Il checksum va dunque aggiornato allo stesso modo, basta sottrarvi 2:
87 AE 29 24
Le modifiche vanno fatte con un editor esadecimale ovviamente (ricordate che il carattere ASCII '4' corisponde a 34 in esadecimale e '6' a 36).
Le istruzioni che ho riportato sono valide per trasformare un Access Point di qualsiasi altra marca che sia basato sullo stesso Hardware del DWL-900+. Tuttavia è stato appurato che tale sistema funziona solo quando il checksum del firmware è “fatto in un certo modo”; in pratica ci sono versioni del firmware con le quali questo giochetto non funziona. Sfortunatamente non ci è noto l'algoritmo per calcolare il checksum.
Cmq, ecco dei firmware già modificati, uno per trasfromare il DWL-900+ rev B in USR2249
Firmware per trasfromare il DWL-900+ rev B in USR2249
Questo firmware dovrebbe servire per tornare indietro, ad un firmware versione 2.2 (è stata usata con successo da tutti coloro che ci hanno provato)
Firmware per ritrasformare DWL-900+ trasformato in USR2249 di nuovo in un vero DWL-900+ DLink
Dopo essere tornati indietro, non dimenticate di aggiornare il firmware ad una versione più recente.
Ecco il programma standalone per amministrare l'AP:
Programma di gestione dell'Access Point per l'USR2249
NOTA: dopo l'update l'Access Point potrebbe essere configurato per ottenere l'IP tramite DHCP. Se non avete un server DHCP dovete usare per forza il programma di gestione di US Robotics. Per default l'AP US Robotics ha Username e Password non settate, se ve le chiede dovreste lasciarle vuote
Il link che segue punta ad un file che ho trovato sulla rete, contenente molti firmware già modificati, che servono per trasformare Access Point di vari produttori in un DWL-900+ rev B.
Firmware vari per trasformare Access Point di varie marche in D-Link DWL900+
Ecco una foto fatta da Nabuk che dimostra l'avvenuta trasformazione di un DWL-900+ rev B in USR2249 (click per ingrandire)
NOTA: questa modifica ha funzionato per noi, ma non c'è nessuna garanzia che non possa rendere inutilizzabile il vostro Access Point. Inoltre con buona probabilità la garanzia viene invalidata.
E' possibile portare la potenza di uscita dell'Access Point da un massimo di 17dB a 20dB. Per farlo è stato necessario modificare il firmware. Il firmware modificato funziona sia sul DWL900+ rev B che Rev C1 e lo trovate qui:
http://home.earthlink.net/~mlampie/PowerHackDWL-900+.html
Se non dovesse funzionare piu' questa pagina, usate le mie copie:
NOTA: per la Rev C2 il power hack non funziona ancora
Purtroppo il sistema per calcolare il checksum è noto solo ai ragazzi che hanno fatto queste versioni del firmware modificate, e quindi non possiamo provare nessun hack fatto da noi fino a quando non ci riveleranno l'algoritmo (o lo scopriamo noi da soli).
Ecco un'immagine di Netstumbler che evidenzia la differenza trà i 17 dB del firmware standard ed i 20 dB del firmware modificato:
{{:hack:20db_dwl900plus_power_hack.gif?nolink}
Una curiosità. Anche senza modificare il firmware, con la versione 3.05b2 è possibile effettuare una sorta di hack, semplicemente forzando il valore della potenza di uscita a 20 nella pagina di configurazione dell'access point.
Per farlo è necessario conoscere un po' di HTML (salvare e modificare la pagina dove si cambia la potenza di uscita) oppure procurarsi Mozilla ed usare il suo DOM-Inspector per modificare al volo il valore della combo-box.
Il risultato che si ottiene è un segnale molto più stabile, anche se non c'e' un vero e propio scalino come nel caso del firmware modificato:
{{:hack:20db_dwl900plus_power_hack_no_firmware.gif?nolink}
Per realizzare questo hack usando il DOM inspector di Mozilla:
Modifica hardware per portare al massimo la potenza di uscita del dwl900ap+ rev C2 e B, di Francesco Berti (http://www.selit.it)
Dopo le piccole modifiche riguardanti lo switch del diversity finalmente si è giunti ad hackerare seriamente la parte radio del dwl900ap+
Guardando a fondo nella sezione radio del dwl900ap+ rev C2 è facile notare la presenza di un trasceiver della Maxim MAX2820 e di un finale RF sempre della Maxim MAX2242 capace di erogare 22 dBm.
Naturalmente entrambi questi componenti sono controllati opportunamente dal dsp che impone quindi la potenza massima di uscita al valore stabilito nel firmware.
Leggendo il datasheet del MAX2820 si può notare che il pin 12 va a controllare il guadagno dell' ultimo stadio, infatti variando questa tensione da 0 a 2 Volts è possibile modificare il guadagno in un range di ben 35 dB.
Dal datasheet del MAX 2242 si evince la possibilità di avere in uscita 22 dBm se si fornisce l'opportuna corrente di Bias.
Quindi ponendo a massa il pin 12 del Max 2820 si porta il driver alla massima potenza di uscita e ponendo una resistenza da 6800 ohm verso massa dal pin Bias del Max 2242 si otterrà in uscita la massima potenza di circa 22 dBm.
Nella foto qui sotto sono evidenziati i chip sopra menzionati:
Il pin Bias è connesso al DAC tramite una pista posta sulla parte sottostante dello stampato, per modificare il valore di questa corrente sarà necessario sostituire una resistenza da 0 ohm ( un corto ) posta vicino al Max 2820 con una da 8.2 Kohm ed aggiungerne una da 6.8 Kohm fra il pin bias e la massa; così facendo avremo sempre il 22 dBm in uscita con 3.3 V di alimentazione.
Ovviamente viste le dimensione della scheda dovrete necessariamente utilizzare resistenze smd.
Per maggior chiarezza vi riporto qui sotto una foto della modifica:
La stessa modifica è applicabile alla rev B; il trasceiver in questo caso non è un Maxim, ma un RFMD 2948 ed il pin del controllo guadagno è li numero 8, questo andrà posto a 2.8 V a differenza di quello del Maxim che dovevamo porre a 0 V.
La modifica quindi può riassumersi semplicemente nel cortocircuitare il pin 7 ed il pin 8 assieme, visto che sul pin 7 abbiamo i 2.8 V a disposizione.
Da prove effettuate nella rev B questa modifica è quasi inutile se si utilizza il firmware hackerato, visto che il pin 8 viene posto a 2.1 V direttamente settando maxpower nel menù di configurazione.
Invece ritengo interessante nella rev B applicare comunque la modifica al controllo bias del finale RF.
Vi allego per comodità i datasheet dei componenti riportati in questo articolo così che possiate farvi un idea migliore del funzionamento della parte Rf di questi access point.
Questa modifica è discussa sul sito di Ralph Fowler insieme, nella pagina dedicata interamente all'Access Point D-Link:
http://www.ralphfowler.com/links/dwl900.html
Una modifica per la rev C dovrebbe essere del tutto analoga, ma non mi sono mai applicato a studiarla.
Sempre sul sito di Ralph Fowler viene dimostrato che è possibile alimentare il DWL-900+ con un voltaggio superiore ai 5v (fino ad una trentina!)
Al suo interno c'è infatti un convertitore switching DC/DC, in grado di accettare in input tensioni da 5 a 30 volt e di dare in output sempre 5 volt.
Perchè usare una tensione maggiore?
I motivi che conosco io sono tre: è possibile usare un solo alimentatore da più di 5 volt per più apparecchiature; è posibile usare delle batterie da 6 o 12 volt senza alcun convertitore aggiuntivo; si possono usare cavi per il passaggio della tensione in continue anche mooooolto lunghi e sottili.
Ci sono moltissimi apparecchi alimentati a 12 o 9 volt, che vengono forniti spesso con alimentatori sovradimensionati (in genere dal doppio al quadruplo); è quindi possibile usare uno slo di questi alimentatori per alimentare ad esempio 2 DWL900+ ed uno switch.
Nel caso dell'alimentazione a batteria, la presenza del convertitore switching integrato è una manna: si evita infatti di dover convertire esternamente la tensione della batteria da 12 (o 6) a 5 volt (cosa che se non viene fatta appunto con un convertitore switching comporta un enorme spreco di energia ed una durata molto inferiore delle batterie).
Quando poi si devono far percorrere decine di metri alla corrente continua, magari su un doppino sottilissimo come quello dell'ethernet, è facile che all'altro capo la tensione che arriva è decisamente inferiore ed insufficiente ad alimentare gli apparecchi. Mentre mettendo un bel alimentatore da 12, si possono percorrere decine o centinaia di metri di cavo prima che la tensione scenda a meno di 5.
This site is not in English, but because this hack has ben implemented by NapoliWireless.net I think that is difficult to find this information in a language other than Italian.
So, there are just the essential informations to transform an Access Point D-Link DWL-900+ rev B to an US Robotics USR 2249 (842249), just loading the USR firmware to the D-Link device. The USR Firmware has ben modified to let the D-Link one think that we are flashing an original D-Link Firmware.
We supply a firmware to transform the D-Link to an USR:
Firmware to transform DWL-900+ rev B to USR2249
And also a firmware to roll back to the D-Link firmware, back to version 2.2.
Firmware to roll back a DWL-900+ transformed in USR2249 again to a real DLink DWL-900+
Don't forget to upgrade to a newer version: 2.2 is very buggy.
The following file contains some firmware found on the Internet that let you transform some AP from varius vendor to a DLink DWL-900+ rev B.
Firmware files that let you transform Access Points from various vendors to a D-Link DWL900+
NOTE: After you trasnform the DWL-900+ to USR2249 the AP may be configured to be a DHCP client. If you don't have a DHCP server you should use the USR2249 configuration utility to set a static IP. Default username and password are blank.
USR2249 configuration utility
Why you should do the change? Because US Robotic's firmware looks like to be more stable and performat than the D-Link one. And also think about that: D-Link is releasing almost a firmware revision every 1 or 2 month, while US Robotics just released 1 or 2 upgrades.
A picture from Nabuk that show the DWL-900+ rev B transformed to a USR2249 (click to enlarge)
NOTE: this firmware files are ONLY for DWL-900+ hardware revision B and US Robotics USR2249. There is no warranty that flashing your AP with a firmware coming from another vendor would not destroy you device. The warranty may also be lost.
MIRROR DI:
http://acinonyx.silverton.gr/dwl_checksum/README
http://acinonyx.silverton.gr/dwl_checksum/dwl_checksum.c
DWL-900AP+/800AP+/810 Modification Instructions
#include <stdio.h> #include <stdint.h> #define SIZE 0xe0000 #define MAGIC 0xaabbbbaa int main (void) { int data; uint32_t checksum = 0; uint32_t cnt; for (cnt = 0; (data = getchar ()) != EOF; cnt++) { checksum ^= ((uint32_t) data) << ((cnt % sizeof checksum) * 8); } checksum ^= MAGIC; if (cnt != SIZE) fprintf (stderr, "WARNING: Firmware size incorrect! Should be exactly %d bytes.\n", SIZE); else printf ("Checksum: 0x%x\nFile Size: %d bytes\n", checksum, cnt); return 0; }