sexta-feira, 12 de abril de 2013

Compilação do OpenWRT Barrier Breaker para o TP-Link WR1043nd com suporte ao OpenFlow 1.3

O pessoal do CPQD lançou a versão de um softswitch user-space com suporte ao OpenFlow 1.3 em https://github.com/CPqD/ofsoftswitch13/wiki/OpenFlow-1.3-for-OpenWRT. As instruções de compilação apresentadas são para a versão antiga do OpenWrt, então tentei compilar uma imagem mais atual. As imagens compiladas, que devem funcionar com o TP-Link WR-1043:
- para a versão de hardware até a 1.11 (só testei com a 1.8): Openflow 1.3
- para a versão de hardware 2.0 e 2.1 (não testei): Openflow 1.3
Fiz a compilação com a versão "trunk" do OpenWRT (Barrier Breaker) e tudo funcionou muito bem.
Alternativamente, tenho estas versões compiladas com o branch estável (Attitude Adjustment 12.09) para a versão de hardware até 1.11 ( a versão 2 não é suportada):
- Firmware Openflow 1.3 e o OpenFlow 1.0 (Pantou)
Para compilá-las, utilizei uma imagem padrão do Ubuntu 12.04 para o Virtualbox, com 1,5 G de memória e 20 GB de disco, em um laptop I3 com 4 Gb de RAM, Win7 64 bits.
É imprescindível ter acesso Internet de dentro da máquina virtual. Pingue o www.google.com antes de tudo.
A "receita de bolo" exata é a seguinte:

sudo su -
Digite o seguinte  na mesma linha:
apt-get install git quilt build-essential binutils flex bison autoconf gettext   texinfo sharutils subversion libncurses5-dev ncurses-term zlib1g-dev gawk 
exit
mkdir ~/openwrt
cd ~/openwrt
svn co svn://svn.openwrt.org/openwrt/trunk/
cd trunk
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
Select Target Profile (TP-LINK TL-WR1043N/ND)
make prereq
make
cd ~/openwrt
git clone https://github.com/CPqD/openflow-openwrt.git
cd ~/openwrt/trunk/package/
ln -s ~/openwrt/openflow-openwrt/openflow-1.3/
cd ~/openwrt/trunk/
ln -s ~/openwrt/openflow-openwrt/openflow-1.3/files make menuconfig Select (*) OpenFlow package under network Select (*) tc package under network Select kmod-tun under Kernel Modules->Network Support Save and Exit make kernel_menuconfig Under Networking Support->Networking options->QoS and/or fair queueing select Hierarchical Token Bucket (HTB) Save and Exit
Dica opcional: se quiser gravar os arquivos de configuração para que eles fiquem na imagem compilada, os grave em  ~/openwrt/trunk/files/etc/config 
Agora faça a compilação final:

make
      E voilá, a sua imagem estará em ~/openwrt/trunk/bin/ar71xx/openwrt-ar71xx-generic-tl-wr1043nd-v1-jffs2-factory.bin, após a longa compilação. A copie para o seu Windows utilizando o WinSCP ou similar. Faça o upgrade do firmware pela tela de gerência web do TP-link.
Caso o roteador já esteja com o OpenWRT instalado, copie com o WinSCP (modo SCP) o arquivo para o /tmp do TP-Link e utilize o seguinte comando para fazer o upgrade:
mtd -r write /tmp/openwrt-ar71xx-generic-tl-wr1043nd-v1-jffs2-factory.bin firmware
Depois do upgrade feito, conecte o seu micro em uma das portas LAN do roteador e acesse por telnet (ou Putty) o endereço 192.168.1.1.
Primeiramente crie o seguinte vínculo estático. Sem ele, os processos do openflow não "sobem":

cd /etc 
ln -s /lib/functions.sh
cd /sbin
ln -s /usr/sbin/tc
Faça uma cópia dos arquivos originais e edite os seguintes arquivos, para que fiquem exatamente como o modelo a seguir. O endereço de gerência será alterado para 192.168.1.111, agora na porta WAN, com o endereço do controlador definido para 192.168.1.130, mas podem ser modificados (e devem ser para os demais roteadores) com a alteração dos valores em vermelho. Para ficar mais divertido, habilitei dois SSID, um WAN na a rede ligada ao plano de controle e outro na rede do plano de dados.
Altere todos os arquivos abaixo para não se incomodar.
cp /etc/config/network  /etc/config/network.ori
cp /etc/config/firewall  /etc/config/firewall.ori
cp /etc/config/wireless  /etc/config/wireless.ori
cp /etc/config/openflow  /etc/config/openflow.ori

Utilizo o "cat" para sobrescrever os arquivos originais, mas podem ser editados com o "vi".
cat > /etc/config/network
config switch
        option name 'rtl8366rb'
        option reset '1'
        option enable_vlan '1'
        option enable_learning '0'

config switch_vlan
        option device 'rtl8366rb'
        option vlan '1'
        option ports '1 5t'

config switch_vlan
        option device 'rtl8366rb'
        option vlan '2'
        option ports '2 5t'

config switch_vlan
        option device 'rtl8366rb'
        option vlan '3'
        option ports '3 5t'

config switch_vlan
        option device 'rtl8366rb'
        option vlan '4'
        option ports '4 5t'

config switch_vlan
        option device 'rtl8366rb'
        option vlan '5'
        option ports '0 5t'

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config interface
        option ifname 'eth0.1'
        option proto 'static'

config interface
        option ifname 'eth0.2'
        option proto 'static'

config interface
        option ifname 'eth0.3'
        option proto 'static'

config interface
        option ifname 'eth0.4'
        option proto 'static'

config interface 'wan'
        option ifname 'eth0.5'
        option proto 'static'
        option ipaddr '192.168.1.111'
        option netmask '255.255.255.0'
        option type 'bridge'

tecle <ctrl-d>

cat > /etc/config/wireless
config wifi-device  radio0
        option type     mac80211
        option channel  11
        option hwmode   11ng
        option path     'platform/ath9k'
        option htmode   HT20
        list ht_capab   SHORT-GI-40
        list ht_capab   DSSS_CCK-40
        # REMOVE THIS LINE TO ENABLE WIFI:
        #option disabled 1

config wifi-iface wlan0
        option device   radio0
        # option network  lan
        option mode     ap
        option ssid     OpenFlow-111-lan
        option encryption none

config wifi-iface wlan1
        option device   radio0
        option network  wan
        option mode     ap
        option ssid     OpenFlow-111-wan
        option encryption none


cat > /etc/config/openflow
config 'ofswitch'
        option 'dp' 'dp0'
        option 'dpid' '000000000111'
        option 'ofports' 'eth0.1 eth0.2 eth0.3 eth0.4 wlan0'
        option 'ofctl' 'tcp:192.168.1.130'
        option 'mode'  'outofband'


<ctrl-d>


cat > /etc/config/firewall
config defaults
        option syn_flood        1
        option input            ACCEPT
        option output           ACCEPT
        option forward          ACCEPT

<ctrl-d>

cat > /etc/config/system

config system
        option hostname 'OpenWrt'
        option timezone 'UTC'

config timeserver 'ntp'
        list server '0.openwrt.pool.ntp.org'
        list server '1.openwrt.pool.ntp.org'
        list server '2.openwrt.pool.ntp.org'
        list server '3.openwrt.pool.ntp.org'
        option enable_server '0'

config led 'led_usb'
        option name 'USB'
        option sysfs 'tp-link:green:usb'
        option trigger 'usbdev'
        option dev '1-1'
        option interval '50'

config led 'led_wlan'
        option name 'WLAN'
        option sysfs 'tp-link:green:wlan'
        option trigger 'phy0tpt'



<ctrl-d>

Depois de  terminar a edição dos arquivos, reinicialize com o "reboot" o TP-link. Não esqueça que agora deve ser utilizada a porta WAN para o acesso telnet ao endereço de gerência.
O comando "ps" deve mostrar duas linhas similares a estas:

ofdatapath ptcp:6634 -i eth0.1 eth0.2 eth0.3 eth0.4 wlan0 --no-slicing --no-local-port --pidfile -d 000000000011
ofprotocol tcp:127.0.0.1:6634 tcp:192.168.1.130 --fail=closed -D --pidfile=/var/run/ofprotocol.pid --out-of-band



Se algo der errado, há a possibilidade do System Rescue, como explicado em http://wiki.openwrt.org/doc/howto/generic.failsafe#in.failsafe.mode . A pagina do Wiki do OpenWRT para o TP-link WR-1043nd é muito útil, no caso de problemas.
Update:
O desempenho medido com o Iperf, entre dois micros ligados em dois switches separados está abaixo:





Nenhum comentário:

Postar um comentário