FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD - Adicionando suporte a D-Link DWL-G650+ (todas elas) no FreeBSD.
Adicionando suporte a D-Link DWL-G650+ (todas elas) no FreeBSD.
Por P. Tracanelli (FreeBSD Brasil)   
14/12/2008

DLink G-650(+)Ao longo desse artigo vamos adicionar suporte no FreeBSD a placa wireless 802.11g D-Link DWL-G650+, conhecida como DLink Airplus Extreme G+, que usam algum chipset da Texas Instrument. Vamos observar que é uma loteria descobrir que placa você tem em mãos.

O artigo serve também como dica para se pensar bem antes de adquirir uma placa DLink. Não que seja ruim, nem boa. É que você não tem a menor garantia do que esta comprando.

Ao final do artigo teremos uma acx0 funcionam e sendo controlada.

Adicionando suporte a D-Link DWL-G650+ (todas elas) no FreeBSD

Durante o procedimento de colocar o PC-BSD como sistema Unix padrão no laboratório de mobilidade de uma Universidade em Belo Horizonte, observei que o FreeBSD não suporta adequadamente algumas placas wireless DLink Airplus Extreme G(+). O curioso é que antes da aquisicão desse hardware, foi feita uma análise de compatibilidade de hardware com um LiveCD da FreeBSD Brasil, e funcionava adequadamente.

O porém é que é DLink. Ahh, DLink! Adoro a DLink e essa mania de mudar completamente um hardware e continuar vendendo-o com mesmo nome, mesmo modelo, mesma aparência e até mesmo mesma caixa e mesma adesivagem. Enfim, tudo em prol do baixo custo (mesmo assim DLINK.BO não é um exemplo de ativo a se manter em carteira).

O fato é que você nunca sabe quando compra um equipamento DLink, o que está comprando. Já sugeri a clientes comprar algumas placas Wireless PCI, e ao comprar, o equipamento era completamente diferente do pretendido. Desde então digo: teste antes, compare número serial e lote de fabricacão. Parece exagero? Não é. 

Algumas vezes se damos sorte, existem algumas diferencas no modelo, o + pode fazer diferenca. Por exemplo, DWL-530 é chipset Intersil Prism 2, enquanto DWL-530+ as vezes é Texas Instruments e outras vezes é Crystal Semiconductor.Bom, mas o fato é, quando foi feita análise de hardware para estabelecer como padrão a placa PCMCIA padrão IEEE 802.11g, foram compradas 32 placas das que foram homologadas: DLink Airplus Extreme G.

Excelente, porque DLink Airplus Extreme G ou apenas a DWL-G650 é uma excelente placa, de chipset Atheros 5212. Sem dúvida uma escolha mais que aprovada. Acontece que foi pro departamento de compras e a aquisicão foi um mixto de DWL-G650 e DWL-G650+, também conhecida como DLink Airplus Extreme G+. Conclusão lógica do departamento de compras: mesmo preco e com um +, excelente, é melhor. Mais pelo mesmo! Aprovada a compra.

DLink G-650(+) 

Ai vem a surpresa. A DWL-G650 não tem, rigorosamente, nada a ver com a DWL-G650+. Enquanto a primeira é Atheros 5212, a segunda é algum chipset do fabricante Texas Instruments. Confuso? Não se preocupe, nada que não possa piorar. A DWL-G650+ por sua vez pode ser reconhecida como uma das seguintes:

  • Texas Instruments (TI) 802.11b+ 22Mbps Wireless Adapter
  • TNETW1130(ACX111) 802.11b/g Wireless Cardbus/PCI Adapter
  • Texas Instruments (TI) 802.11b+/g 54Mbps Wireless Adapter
  • Texas Instruments (TI) 802.11b/g 54Mbps Wireless Adapter

Não é ótimo? Não, não é! As diferencas são a Revisão da placa. Revisão 4 ou 5 podem ter 2 modelos distintos de chipset cada, totalizando 4 combinacões possíveis para exatamente o mesmo equipamento/modelo, sem nem contar o DWL-G650 (sem o +) que é Atheros.

Resultado, que driver controla? Para Windows, o mesmo driver! Por algum motivo os firmware binários no Windows, fornecidos pela DLink são capazes de reconhecer qual das placas é e controla-la. Na prática isso significa que a abordagem de usar o NDis para usar o driver do Windows no FreeBSD se torna uma loteria: as vezes funciona, as vezes não. De fato o if_ndis.ko gerado controla 1 dos 4 chips, e não controla os outros. Ou seja, usar NDis com os drivers fornecidos pelo fabricante, sem chance de sucesso certo, é outra loteria.

Mas tem algumas coisas curiosas que a DLink consegue. Por exemplo, temos aqui literalmente dezenas de clientes que adquirem a placa DWL-G520 para atuar como Ponto de Acesso Wireless. Excelente, chipset Atheros, sem dúvida para quem quer uma opcão PCI de baixo custo e acessível no mercado brasileiro, sem problemas. Junto com as mini-PCI CM9 e Engenius acredito que são os equipamentos mais populares para atuar como Access Point no Brasil. E a ANATEL homologa, então sem problema, certo? Não exatamente.

A DWL-G520 (e de fato algumas outras da DLink com chipset Atheros) usam um modelo do chip Atheros que atua em múltiplos domínios de regulacão (Regulatory Domains). A ANATEL homologa o modelo DWL-G520 nacional, também chamado de DWL-G520 BR. Todavia, o Regulatory Domain dessa placa é FCC, sem problemas, mesmas características em essência do que a ANATEL quer pro Brasil. Mas com um simples upgrade de firmware podemos colocar em ETSI Europe (1-13), isso permite que a placa atue em 802.11b até o canal 13.

Curioso? Bom, com o firmware europeu o limite entre a orgão regulador europeu e o japonês fica restrito ao nível do sistema operacional, que obedece aquele Regulatory Domain por padrão. Na prática para alternar do padrão Europeu para o Japonês e poder usar do canal 1 ao 16 a mesma placa, é complexo: uma variável sysctl(8) no FreeBSD (Atheros HAL).

Resultado? Ou uma fiscalizacão da ANATEL usa um analisador de espectro para avaliar a propagacão do sinal de RF da placa, ou temos em mãos uma placa DLink com selinho de homologacão da ANATEL, operando até o canal 16. Se baixar o driver de Windows da DLink União Européia a diferenca entre o padrão Europeu e Japonês é 1 valor em uma variável do Registro do Windows. Nada que um duplo-click em um arquivo .reg não resolva.

Obviamente ninguém vai fazer isso devido a ilegalidade, mas o fato é que outros fabricantes limitam a atualizacão de firmware para os seriais/modelos de hardware, evitando um firmware poder ser utilizado em um equipamento montado para outro Regulatory Domain. A maioria dos fabricantes faz isso, inclusive a própria Atheros e outros fabricantes populares de placas wireless. A DLink não! 

Mas voltando ao objetivo do artigo, fiquei feliz ao descobrir que na Colecão de Ports do FreeBSD temos um módulo de kernel, o /usr/ports/net/acx100:

# cat /usr/ports/net/acx100/pkg-descr
Texas Instruments (TI) ACX100 IEEE 802.11 driver.

The acx driver supports ACX100 based Cardbus or PCI network adapters.

The following cards are known to work with the acx driver:

Card                  Bus
Binatone WL-1000      CARDBUS
D-Link DWL-650+       CARDBUS
US Robotics USR2210   CARDBUS
US Robotics USR2216   PCI


Excelente, era o que eu precisava, certo? Apenas parcialmente. Primeiro, porque o módulo em questão não está na base do FreeBSD? Simples, ele usa um firmware proprietário da Dlink com termos de licenca ainda mais assustadores que a Intel e seus firmwares de placa wireless. Resultado, temos que sempre fazer download do firmware no site da DLink.

De acordo com a listagem, DWL-G650+ parece ser controlado. Excelente, o driver controla as placas ACX100 da Texas Instruments, e esse é o chipset da DWL-G650+! Errado! Nem sempre! As vezes o chipset é o ACX111. E as vezes é um mixto do ACX100 com o ACX111, algo único e exclusivo da DLink. Nenhum outro fabricante cliente OEM da Texas Instruments tem a capacidade de usar uma variacão que precisa do suporte mixto de ambos os chipsets. Só a DLink.

Texas Instruments acx100+acx111

Felizmente o mesmo autor (Darron Brod) do módulo utilizado no net/acx100 fez também uma versão para o uso mixto do acx100 e acx111. Para isso basta baixa-lo:

# fetch -o /tmp/ http://dev.kewl.org/acx100+111/acx-6.1.tgz

Depois descompacte e mande compilar:

# cd /tmp/
# tar xzf acx-6.1.tgz
# cd acx-6.1/
# make

Você vai observar que o próprio Makefile tem instrucões para baixar o firmware direto do site d D-Link. Vai desmontar o driver e usar partes deles para gerar três produtos finais, dois módulos com firmware (acx100fw.ko e acx111fw.ko) e o módulo da placa de rádio, if_acx.ko.

O make install irá instala-los em /boot/kernel/, que é completamente adequado para fontes de kernel parte da base, mas completamente inadequado quando obtido de terceiros, pois a recompilacão do seu kernel não vai incluir esse módulo no diretório em questão. Então depois de instalar mova para o /boot/modules/:

# make install
# mv -v /boot/kernel/*acx*.ko* /boot/modules/
/boot/kernel/acx100fw.ko -> /boot/modules/acx100fw.ko
/boot/kernel/acx111fw.ko -> /boot/modules/acx111fw.ko
/boot/kernel/if_acx.ko -> /boot/modules/if_acx.ko
/boot/kernel/if_acx.ko.symbols -> /boot/modules/if_acx.ko.symbols

 

No /boot/loader.conf adicione:

acx100fw_load="YES"
acx111fw_load="YES"
if_acx_load="YES"

Para não precisar reiniciar, carregue na mão:

# kldload acx100fw
# kldload acx111fw
# kldload if_acx

Pronto, agora você terá a interface acx0 disponível. Use o pciconf -lv se quiser saber qual foi sua sorte, na loteria que é adquirir essas placas (um dmesg também vai apresentar a informacão).

Não é possível configurar completamente com o ifconfig(8). Para configurar os recursos wireless da placa use o acxtool que foi instalado:

# rehash
# acxtool

Você verá o help:

acx100/111:

   -M str              Set operating mode to str (managed, ad-hoc, master)
   -S str              Set the SSID to str                                
   -C num              Set the Channel to num                             

   -P on/off           Set WEP privacy mode on or off
   -W num:str          Set WEP tx key num (0..3) to str

   -T num              Set Tx BROADCAST/MULTICAST RATE to num (1, 2, 5.5, 6 etc)
   -t num              Set Tx MANAGEMENT RATE to num                            

   -r num              Set RATE FALLBACK to num
   -s num              Set SHORT RETRY LIMIT to num
   -l num              Set LONG RETRY LIMIT to num (unsupported)
   -u on/off           Set RATE UP to on (FAST) or off (SLOW)
   -m num              Set MAX TX LIFETIME to num
   -p num              Set POWER LEVEL to num
   -a num              Set CURRENT ANTENNA to num (ant1:0x080a ant2:0x044a ?)

acx100:
   -c num              Set CLEAR CHANNEL ASSESSMENT MODE to num
   -e num              Set ENERGY DETECT THRESHOLD to num

acx111:
   -f num              Set FRAG THRESHOLD to num

debug args (one per option):
   -d on/off           Turn on all debugging options
   -d rateon/rateoff   Turn Tx RATE REPORTING on or off
   -d erron/erroff     Turn Tx ERROR REPORTING on or off
   -d nodeon/nodeoff   Turn NODE REPORTING on or off
   -d num              Set MGMT REPORTING mask to num (0=off, eg 0xfeef)

Eg: acxtool acx0 -M managed -S kewl5 -C 5 -P on -W 0:0xc0dedeadc0dedeadc0dedead69

    set the ssid to kewl5
    set the channel to 5
    set the WEP privacy mode on
    set the WEP tx key index to 0
    and set the WEP tx key to 0xc0dedeadc0dedeadc0dedead69


Em negrido as opcões que provavelmente você vai usar com mais frequência. Configure então sua placa, adicionando o endereco IP com ifconfig(8) e configurando a placa com acxtool:

# ifconfig acx0 inet 10.69.70.74 netmask 255.255.255.0

 

E então o acxtool com pelo menos os seguintes parâmetrod:

acxtool acx0 -S <ssid> -C <canal> -M managed -u on -d rateon

# acxtool acx0 -S freebsdap -C 1 -M managed -u on -d rateon

Com ifconfig(8) você observará: 
acx0: flags=843<UP,BROADCAST,RUNNING,SIMPLEX> mtu 1500
inet 10.69.70.74 netmask 0xffffff00 broadcast 10.69.70.255
ether 00:c0:49:ca:3f:b3
media: IEEE 802.11 Wireless Ethernet autoselect
status: associated
ssid freebsdap channel 1 (0) bssid 00:c0:49:c3:6c:f9
authmode OPEN privacy ON deftxkey 1 txpowmax 63 txpower 63

Como não é possível configurar tudo usando o ifconfig(8), não será possível tornar a configuracão permanente com rc.conf(5), então use um recurso (pouco conhecido, mas documentado) do startup do FreeBSD e crie o /etc/start_if.acx0:

# cat /etc/start_if.acx0
/usr/local/sbin/acxtool acx0 -S freebsdap
/usr/local/sbin/acxtool acx0 -M managed
/usr/local/sbin/acxtool acx0 -C 1
/usr/local/sbin/acxtool acx0 -u on -d rateon
/sbin/ifconfig acx0 10.69.70.74/24
# /sbin/dhclient acx0
/sbin/route flush
/sbin/route add default 10.69.70.1

Pronto. A placa funciona com WEP, e com WPA só com PSK de até 64bits na senha (8 bytes), sem EAP e sem PSK maior que 8 bytes. Ainda assim apenas em hexadecimal (nesse caso use o wpa_passhorase(8) para converter para hexa).

Espero que esse artigo seja útil pra poucas pessoas ;-) E aos que forem, tentem trocar de placa o quanto antes. A performance dessa placa é baixa e tem facilidade para erros de transmissão.

 

 

Comentrios
Por jose roberto gomes da cunha em 08/09/2010 12:44:08
tenho um DWL-G650+ e gostaria de saber se posso usar o mesmo no meu pc e outra pergunta qual o uso deste card bus o mesmo carto que se usa em alguns pcs poi no meu no tem entrada para carto tem como usar pela porta usb com algum adptador espero resposta. obrigado e que DEUS os abenoe
mRVCPPLM
Por Gatsy em 13/01/2012 23:38:11
Now I'm like, well duh! Truly tahnkful for your help.


Comente!*
Nome:
E-mail
Homepage
Ttulo:
Comentrio:

Cdigo:* Code

ltima Atualizao ( 14/12/2008 )