terça-feira, 10 de setembro de 2013

Web Semântica e Page-Rank

Mais um curso formidável do Coursera: Big Data e Web Intelligence.
Ontem entendi um pouco sobre web semântica e como o Google está prejudicando a eficiência do próprio Google ! Explico. O Page-Rank se baseia no número de outras páginas tem links para uma determinada página. Mas agora ninguém mais aponta para outras páginas, pois basta dar uma "Googlada" para se achar mais referências sobre o assunto. Assim o próprio Google está empobrecendo o seu próprio algorítimo. Curioso, não ?

quarta-feira, 28 de agosto de 2013

Node.js, MongoDB e Heroku

curl https://raw.github.com/startup-class/setup/master/setup.sh | bash
git clone https://github.com/startup-class/bitstarter-ssjs-db.git
cd bitstarter-ssjs-db
./setup-ssjs.sh
vi .env
foreman start

http://coenraets.org/blog/2012/10/creating-a-rest-api-using-node-js-express-and-mongodb/

git clone git://github.com/ccoenraets/nodecellar
cd nodecellar/
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.6.tgz
ls
tar -xvzf mongodb-linux-x86_64-2.4.6.tgz
sudo mv -n mongodb-linux-x86_64-2.4.6 /usr/local/mongodb
sudo mkdir -p /data/db
sudo chown `id -u` /data/db
cd /usr/local/mongodb
./bin/mongod
sudo npm install mongodb
sudo npm install express
nohup /usr/local/mongodb/bin/mongod &
cd ~/bitstarter/nodecellar/
node ./server.js

http://192.168.56.103:3000/#wines

heroku login
heroku account
heroku apps
heroku apps:destroy lit-bayou-1608
heroku apps:create
git push heroku master


terça-feira, 13 de agosto de 2013

Cursos de SDN e Startup Engineering no Coursera

Consegui terminar o curso do Nick Feamster no Coursera. Que experiência fantástica ! Escrever programas em cima do POX, Pyretic e Resonance é IMHO, a melhor forma de se entender realmente as diferenças dos conceitos envolvidos. Só se aprende fazendo.   
Me impressionou o nível altíssimo do curso. O interessante que pude utilizar o que aprendi nos outros cursos do Coursera, como o de Python e de Startup Engineering.
É curioso como uma coisa acaba levando à outra.

sábado, 15 de junho de 2013

Dicas de instalação de controladores Openflow


ofsoftswitch13

sudo apt-get install libpcap-dev libxerces-c2-dev libpcre3-dev flex bison libboost-all-dev
wget http://www.nbee.org/download/nbeesrc-12-11-12.php
mv nbeesrc-12-11-12.php nbeesrc-12-11-12.zip
unzip nbeesrc-12-11-12.zip
http://www.nbee.org/doku.php - biblioteca para processamento de pacotes. Usada pelo OFsoftswitch

git clone git://github.com/CPqD/ofsoftswitch13
cd nbeesrc-2012-11-12/src
cmake .
make
sudo cp ../bin/libn*.so /usr/local/lib


git clone git://github.com/CPqD/nox13oflib
To start the controller, run the following commands:

sudo apt-get install libboost-filesystem-dev
sudo apt-get install libboost-test-dev
cd /home/openflow/nox13oflib/
./boot.sh
./configure
make
~/openflow13/nox13oflib/src

cd /home/openflow/nox13oflib/build/src
    ./nox_core -i ptcp:<port> [applications]

Wireshark
 cp openflow.so /usr/lib/wireshark/libwireshark1/plugins

 cd /home/openflow/ofdissector/test


 self.cmd( 'ofdatapath -i ' + ','.join( intfs ) +
        ' punix:/tmp/' + self.name + mac_str + ' --no-slicing ' +
        ' 1> ' + ofdlog + ' 2> ' + ofdlog + ' &' )
self.cmd( 'ofprotocol unix:/tmp/' + self.name +
        ' tcp:%s:%d' % ( controller.IP(), controller.port ) +
        ' --fail=closed ' + self.opts +
        ' 1> ' + ofplog + ' 2>' + ofplog + ' &' )


self.cmd( 'ofdatapath -i ' + ','.join( intfs ) +
        ' punix:/var/run/' + self.name + '.sock --no-slicing '
        +' 1> ' + ofdlog + ' 2> ' + ofdlog + ' &' )
self.cmd( 'ofprotocol unix:/var/run/' + self.name +
        '.sock tcp:%s:%d' % ( controller.IP(), controller.port )+
        ' 1> ' + ofplog + ' 2>' + ofplog + ' &' )
     
     
Mininet
sudo mn -c
 sudo mn --topo single,2 --mac --switch user --controller remote

sudo dpctl  unix:/tmp/s1 stats-flow table=0

sudo dpctl  unix:/tmp/s1 flow-mod table=0,cmd=add in_port=2 apply:output=1
sudo dpctl  unix:/tmp/s1 flow-mod table=0,cmd=add in_port=1 apply:output=2
Meter para 5 Mbps
sudo dpctl unix:/tmp/s1 meter-mod cmd=add,flags=1,meter=1 drop:rate=5000
sudo dpctl unix:/tmp/s1 flow-mod table=0,cmd=add in_port=1 meter:1 apply:output=2
altera para 10 Mbps
sudo dpctl unix:/tmp/s1 meter-mod cmd=mod,flags=1,meter=1 drop:rate=10000

NOX
~/nox13oflib/build/src$ ./nox_core -v -i ptcp:6633 switch

POX
openflow@openflowvm:~/pox$ ./pox.py log.level --DEBUG forwarding.l2_learning  openflow.keepalive
./pox.py samples.pretty_log forwarding.l2_learning  openflow.keepalive
POX com Spanning Tree
./pox.py forwarding.l2_learning openflow.discovery openflow.spanning_tree

 POX com servidor DHCP
 ./pox.py log.level --DEBUG forwarding.l2_learning misc.dhcpd --network=172.31.1.0/24 --ip=172.31.1.1 --first=10 --last=None --router=None --dns=4.2.2.1
sudo mn --topo single,2 --switch user --controller remote

./pox.py forwarding.l2_learning web.webcore
curl -i -X POST -d '{"method":"get_flow_stats","params":{"dpid":"00-00-00-00-01-11"},"id":0}' http://127.0.0.1:8000/OF/
curl -i -X POST -d '{"method":"get_switches", "id":0}' http://127.0.0.1:8000/OF/
curl -i -X POST -d '{"method":"get_switch_desc","params":{"dpid":"00-00-00-00-01-11"},"id":0}' http://127.0.0.1:8000/OF/
curl -i -X POST -d '{"method":"set_table","params":{"dpid":"00-00-00-00-01-11","flows":[{"actions":[{"type":"OFPAT_OUTPUT","port":"OFPP_ALL"}],"match":{}}]},"id":0}' http://127.0.0.1:8000/OF/
curl -i -X POST -d '{"method":"set_table","params":{"dpid":"00-00-00-00-01-12","flows":[{"actions":[{"type":"OFPAT_OUTPUT","port":"OFPP_ALL"}],"match":{}}]},"id":0}' http://127.0.0.1:8000/OF/

SNAC
apt-get install openssl libboost-test1.34.1 libboost-filesystem1.34.1 libboost-serialization1.34.1 libxerces-c28 python2.5 python-twisted python-simplejson python-mako python-openssl tmpreaper python-sphinx libldap2-dev



POXDESK
git clone https://github.com/noxrepo/pox
cd pox
git checkout betta
cd ext
git clone https://github.com/MurphyMc/poxdesk
cd poxdesk
wget http://downloads.sourceforge.net/qooxdoo/qooxdoo-2.0.2-sdk.zip
unzip qooxdoo-2.0.2-sdk.zip
mv qooxdoo-2.0.2-sdk qx
cd poxdesk
./generate.py
cd ../../..
basico ./pox.py samples.pretty_log web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk
completo   ./pox.py samples.pretty_log web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk openflow.discovery poxdesk.tinytopo poxdesk.terminal
http://192.168.56.102:8000/poxdesk/


OPENVSWITCH
sudo  ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,manager_options --pidfile --detach


ROUTEFLOW
cd rftest
sudo ./create
sudo ./rftest1 --nox
sudo lxc-console -n b1     (sai com ctl-a-q)
ping 172.31.2.2
liga interface grafica cd rfweb/
python rfweb_server.py &
http://192.168.31.129:8080/index.html
entra na maquina virtual rfvm1  sudo lxc-console -n rfvm1

Config da interface de rede
/etc/network/interfaces
auto eth0
iface eth0 inet static
address 10.0.0.100
netmask 255.255.255.0
gateway 10.0.0.1

RYU
http://osrg.github.io/ryu/


FLOODLIGHT

sudo apt-get install build-essential default-jdk ant python-dev eclipse
git clone git://github.com/floodlight/floodlight.git
$ cd floodlight
$ git checkout fl-last-passed-build
$ ant



openflow@mininet-vm:~$ cd floodlight/
openflow@mininet-vm:~/floodlight$ java -jar target/floodlight.jar &

FLOODLIGHT
http://192.168.31.128:8080/wm/firewall/module/status/json
http://192.168.31.128:8080/ui/index.html

Criar um passa-tudo no switch
curl -d '{"switch": "00:00:00:00:00:00:01:11", "name":"normal-drain", "cookie":"0", "priority":"0", "active":"true", "actions":"output=normal"}' http://127.0.0.1:8080/wm/staticflowentrypusher/json
Limpar os flow (que não limpa !)
http://127.0.0.1:8080/wm/staticflowentrypusher/clear/00:00:00:00:00:00:01:11/json

openflow@mininet-vm:~/floodlight$ java -jar target/floodlight.jar

sudo mn --controller=remote
sudo mn --topo single,3 --mac --switch ovsk --controller remote
sudo mn -c


http://192.168.31.128:8080/wm/firewall/module/enable/json

Grafico
http://192.168.31.128:8080/ui/index.html
http://10.1.1.39:8080/ui/index.html

curl http://localhost:8080/wm/firewall/module/status/json
curl http://localhost:8080/wm/firewall/module/enable/json
curl -X POST -d '{"switchid": "00:00:00:00:00:00:00:11"}' http://localhost:8080/wm/firewall/rules/json


curl -X POST -d '{"src-ip": "10.0.0.3/32", "action":"DENY"}' http://localhost:8080/wm/firewall/rules/json
curl -X POST -d '{"src-ip": "10.0.0.3/32"}' http://localhost:8080/wm/firewall/rules/json
curl -X POST -d '{"dst-ip": "10.0.0.3/32"}' http://localhost:8080/wm/firewall/rules/json
curl -X POST -d '{"src-ip": "10.0.0.2/32"}' http://localhost:8080/wm/firewall/rules/json
curl -X POST -d '{"dst-ip": "10.0.0.2/32"}' http://localhost:8080/wm/firewall/rules/json

$ curl -d '{"switch": "00:00:5c:26:0a:5a:c8:b2", "name":"static-flow3", "cookie":"0", "priority":"32768", "dst-mac":"22:22:22:00:cc:10","active":"true", "actions":"output=7"}' http://192.168.1.208:8080/wm/staticflowentrypusher/json
curl -d '{"switch": "00:00:00:00:00:00:00:11", "name":"static-flow3", "cookie":"1", "priority":"32768","active":"true", "actions":"output=3"}' http://127.0.0.1:8080/wm/staticflowentrypusher/json
lista flows
curl http://127.0.0.1:8080/wm/staticflowentrypusher/list/00:00:00:00:00:00:00:11/json
$ curl http://192.168.1.208:8080/wm/staticflowentrypusher /list/00:00:5c:26:0a:5a:c8:b2/json
deleta flows
$ curl http://127.0.0.1:8080/wm/staticflowentrypusher/clear/00:00:00:00:00:00:00:11/json



POXDESK
./pox.py samples.pretty_log web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk openflow.discovery poxdesk.tinytopo &
./pox.py  forwarding.l2_learning web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk openflow.discovery poxdesk.tinytopo

OPENDAYLIGHT
cd ~/controller/opendaylight/distribution/opendaylight/target/distribution.opendaylight-0.1.0-SNAPSHOT-osgipackage/opendaylight
./run.sh

service openvswitch-switch start
sudo mn --controller=remote,ip=192.168.56.102 --topo tree,3

http://192.168.56.102:8080/   admin admin

 curl -X POST -d '{"src-mac": "00:00:00:00:00:0a", "dst-mac": "00:00:00:00:00:0b"}' http://localhost:8000/rest/v1/model/link
 curl 'http://localhost:8080/rest/v1/model/link?src-switch=00:00:00:1c:73:10:3e:24'
 curl 'http://localhost:8080/rest/v1/model/link?src-switch=00:00:00:1c:73:10:3e:24' | python -mjson.tool

 OPENDAYLIGHT SDN CONTROLLER
 sudo apt-get remove openjdk-6-jre-lib openjdk-6-jre-headless
 sudo apt-get install unzip python-dev python-virtualenv \
      git openjdk-7-jdk ant build-essential

 git clone http://git.opendaylight.org/gerrit/p/net-virt-platform.git
 ./setup.sh
 make
 sudo pip install Django

 Running:

 make start-cassandra
 make start-sdncon
 make stop-sdncon reset-cassandra start-sdncon
 make start-sdnplatform
 ./cli.py
 http://192.168.56.102:8000/
  sudo mn --controller=remote,ip=192.168.56.102 --topo tree,3
 https://wiki.opendaylight.org/view/OpenDaylight_SDN_Controller_Platform_(OSCP):Installation


domingo, 9 de junho de 2013

The quest for the right openflow controller

Neste fim de semana testei mais um controlador Openflow, o OpenDayLight. Muito interessante, em java, possui já uma interface gráfica, com possibilidade de configuração de flows, com a garantia de continuidade da Linux Foundation. Quantos outros controladores foram descontinuados, porque uma grande empresa contratou os desenvolvedores. O Floodlight está estagnado (sem OF 1.3) desde que a Bigswitch cresceu.
Problemas: não suporta o OF 1.3 (ainda), presente em meus roteadores. Os testes mostrados no tutorial funcionam, mas um flow criado na mão, nada de funcionar, mesmo na mininet.
E que complicação, como tudo desenvolvido em java ! Com o Maven, invés do ant, usado no Floodlight (também em Java.)
A compilação e os testes estão bem documentados no Wiki  e funcionou bem no Ubuntu 12.04. Só precisei instalar o Java e o maven antes: sudo apt-get install build-essential default-jdk ant python-dev eclipse maven, e um export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386
Tentarei utilizar os testes de ACL do Floodlight, já que com a REST API isto é muito fácil, via curl.
Para  OF 1.3, somente o antigo NOX, versão CPQD. Quem sabe volte a testar o Ryu.



sexta-feira, 3 de maio de 2013

Escócia

Último dia em Edinburgo, na Escócia. Levantamos cedo em um dia com 10 graus e chuva para pegarmos um tour pela heartofscotlandtours.co.uk. Não tínhamos reservado com antecedência, mas  havia lugares vagos na minivan. Nós, três alemães e mais 8 brasileiros ! Que azar, mas tudo bem, fora a chuva, muito pesada, a guia muito simpática e com um sotaque excelente, ao contrário das demais escocesas, que parecem que falam com duas batatas na boca.
Começamos pela Forth Rail Bridge, uma bela vista das pontes suspensas.
A viagem foi pelo castelo de Stirling, pelo Loch Lemond, pelo castelo Doune, onde o Monty Pyton gravou uma das cenas do Cálice Sagrado, almoço em uma pub muito legal, onde comemos um peixe assado com limão delicioso e uma IPA local. Deu para ver do lado as vaquinhas peludas Hamish.
Depois teve a visita à destilaria Glengoyne, tudo debaixo de chuva e frio. Muito legal também, experimentar os wiskys de 15 e 18 anos por 10 pounds. As destilarias ficavam escondidas para não pagarem impostos para a Inglaterra.



quinta-feira, 25 de abril de 2013

O inferno que é inovar.

Estou há dois dias tentando instalar alguns pacotes para rodar o Openflow 1.3 em um Ubuntu 12.04. Antes havia rodado os aplicativos em uma VM pré preparada e tudo bem. Mas agora a VM que utilizava uma versão anterior do Ubuntu foi "deprecated", me vi tendo de instalar do zero.
Tenho uma certa experiência em instalar pacotes e compilar programas no Linux, já o faço há 18 anos. mesmo assim é sempre uma "quebra de pedras". São bibliotecas que faltam, instruções parciais, scripts com bugs ou que se referem a outras versões dos pacotes. Um inferno.
Alguns funcionaram, mas o LXC nem por reza braba e muito trabalho nos scripts. Outros, como o ryu, até funcionaram depois de muitos módulos adicionais que foram instalados. O floodlight foi bem simples, mas ainda não tem suporte ao OF1.3. Como os OpenWRT que possuo somente funcionam com o OF1.3 e não existe backward compatibility com o OF1.0, ele não tem serventia. Uma pena, porque parece ser uma excelente escolha de controlador OF. Vou tentar usar o ryu mesmo, porque o NOX OF1.3 funciona, mas está sendo descontinuado.
E assim vou quebrando pedras neste inferno.

sexta-feira, 19 de abril de 2013

Modificando o SSID e a chave WPA2 padrão do OpenWrt de acordo com o endereço MAC do AP

Meu problema era criar uma versão de firmware OpenWrt padrão, para ser instalado em milhares de roteadores de um mesmo modelo, o TP-Link WR-841nd. O firmware deveria ser customizado de uma forma que o técnico de instalação tivesse o menor trabalho possível.
Uma forma de customizar a configuração é copiar o diretório /etc de um roteador já configurado para a o diretório trunk/package/files da árvore de compilação do OpenWrt ,antes da compilação final da imagem (make).
Porém eu queria que cada roteador tivesse um SSID diferente, tipo REDE-XX, onde o XX é o último byte em hexa do endereço MAC da placa Wireless do roteador. Também seria importante que a chave WPA2 fosse diferente para roteador e que ela fosse de fácil acesso para o cliente. Então optei por utilizar o MAC completo como chave (sem os ":"), já que ele está impresso em uma etiqueta embaixo do equipamento.
No OpenWrt, se não existir um arquivo padrão /etc/config/wireless, ele é criado no primeiro "boot" do equipamento pelo script /sbin/wifi, que por sua vez utiliza a biblioteca /lib/wifi/mac80211.sh.
O que fiz foi alterar o arquivo trunk/package/mac80211/files/lib/wifi/mac80211.sh na árvore de compilação, alterando as últimas linhas do para o seguinte:

...
                        new_ssid="      option ssid     REDE-$(cut -f6 -d: /sys/class/ieee80211/${dev}/macaddress)"
                        new_pass="      option key      $(cut -c1-2,4-5,7-8,10-11,13-14,16-17 /sys/class/ieee80211/${dev}/macaddress)"
                cat <<EOF
config wifi-device  radio$devidx
        option type     mac80211
        option channel  ${channel}
        option hwmode   11${mode_11n}${mode_band}
$dev_id
$ht_capab
        # REMOVE THIS LINE TO ENABLE WIFI:
        #option disabled 1

config wifi-iface
        option device   radio$devidx
        option network  lan
        option mode     ap
$new_ssid
        option encryption psk2
$new_pass
...


A ideia básica do que eu fiz está aí, mas somente edite o arquivo se conseguir entender o código. 




segunda-feira, 15 de abril de 2013

Coursera e SDN

Agora estou cursando Python na Coursera,org. Fantástico, até com legendas em português no vídeo.
Mês que vem inicia um curso de Software Definied Networks e Openflow. Parece ser de nível 101, mas nunca é demais ouvir o que estão mostrando ao mundo sobre este novo paradigma, ops, "inovação não linear".

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:





terça-feira, 26 de março de 2013

Seguro do tratado de Schengen grátis para que tem cartão platinum

Muitas vezes não sabemos de algumas vantagens que "ganhamos" junto com o cartão de crédito.
Esta eu descobri hoje: Quem possui cartão Master ou Visa Platinum  ganha o seguro de EUR$ 30.000,00 exigido pelo tratado de Schengen. Basta ter pago as passagens ou as taxas aeroportuárias (para quem usou pontos) com o cartão. Vale para o titular,  cônjuge e filhos. Para imprimir a declaração (ou carta de Schengen) para o  Visa, entre em www.visa-platinum.com  ou direto em http://www.visa-platinum.com/br/beneficios/carta-schengen_1044 . Para o Master, http://www.mastercard.com/br/platinum/schenge.html

sábado, 16 de março de 2013

Suporte ao protocolo IPv6 no TP-Link WR-841n

O OpenWrt é a melhor alternativa para se obter suporte a IPv6 em roteadores Wi-Fi de baixo custo. Este suporte se refere a estabelecermos uma conexão PPPoE para um BRAS, onde um endereço IPv6 é concedido via odhcp6 e a delegação de um prefixo para ser anunciado pela LAN, pelo 6relayd.

Há uma excelente imagem para o TP-link TL-WR1043nd foi compilada por um hacker Romeno, que se baseou no release Attitude Adjustment do OpenWRT aqui. Basta usar a opção de upgrade no firmware original. Ele possui também versões para outros roteadores, basta clicar em "Parent Directory" no link acima para verificar quais os modelos suportados.

Infelizmente o roteador que temos disponível (TL-WR841n V.7.0) não possui uma imagem compilada com IPv6, então iremos pelo caminho difícil ...
Primeiramente, há o Wiki do Openwrt para o WR841ND aqui, porém Todos os links estão desatualizados, se referem a uma versão anterior do OpenWrt. Há versão pré-compilada recente, mas sem suporte a IPv6.

Compilando a nova versão.


A minha melhor experiência foi com o uso de uma máquina virtual Virtualbox com Ubuntu 12.04, previamente utilizada para outros fins. O que tive de fazer foi acrescentar mais uma interface bridge Eth1 e aumentar a memória da VM para 1,5 GB no Virtualbox. Conectei o TP-Link na interface Eth  e acessei a Internet pelo Wi-Fi do notebook.


Receita de bolo:

Instale as dependências para o processo de compilação:
sudo su -
apt-get install git quilt build-essential binutils flex bison autoconf gettext texinfo sharutils \ 
            subversion libncurses5-dev ncurses-term zlib1g-dev gawk

Crie um diretório de trabalho e baixe as fontes SVN do projeto OpenWRT:
Para isso, volte a ser usuário não root e execute os comandos:
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
Selecione os parâmetros específicos da plataforma:
Selecione "Atheros AR71xx/AR7240/AR913x" under "Target System".
Selecione "(TP-LINK TL-WR841N/ND)" under "Target profile"
Salve e saia.
Confira se todos os pré-requisitos foram satisfeitos:
make prereq
Compile:
make
make kernel_menuconfig
habilite o suporte IPv6
make menuconfig
Neste passo, configure em 
IPv6
   Firewall -> todas as opções
   odhcp6c
Luci 
    Collections
    Protocols - IPv6

Em outras opções, habilite o Luci (ambiente gráfico), inclusive para o RADVD.
Gere a imagem final:
make

ATENÇÃO: Não há garantias que o roteador não será "bricado", com a mesma serventia de um peso de papel após o procedimento a seguir.

Faça upload da imagem (~/openwrt/trunk/bin/ar71xx/openwrt-ar71xx-generic-tl-wr841nd-v7-squashfs-factory.bin) para o TP-Link pela interface gráfica do mesmo, na opção "firmware upgrade".


Retorno ao firmware de fábrica
Para voltar ao  firmware original, baixe o arquivo do site da TP-link, descompacte-o e copie  para o diretório /tmp via wget. Precisará de um servidor http para isso, pode ser o próprio apache do Ubuntu ou, se quiser instalar um HTTP server em seu micro com Windows 7, sugiro o Sami .
Renomeie o arquivo original para tplink.bin e execute o comando:
mtd -r write /tmp/tplink.bin firmware


quarta-feira, 13 de março de 2013

Primeiro post !

Criei este blog como uma forma de documentar as "quebras de pedras"que enfrento na vida profissional e acadêmica todos os dias. É mais para uso pessoal, mas se o Google achar uma dica minha que sirva para outras pessoas, será muito gratificante.
Meus interesses são bem "nerds", indo desde experiências com o Arduíno, Android, e sistemas embarcados em geral até o tema de minha tese, de aplicações para Redes Definidas por Software (SDN).
Pretendo escrever algo sobre meus outros interesses não "nerds"(peronomutcho) como Sax e alguns livros de filosofia que o acaso acaba me trazendo.
Sobre mim, não quero falar muito. Sou um engenheiro eletricista, que começou a vida profissional fazendo um curso de eletrônica por correspondência no Instituto Universal Brasileiro aos 11 anos, fiz o curso técnico e depois engenharia eletrônica no CEFET-PR, mestrado em informática na PUC-PR, e agora me aventurando em um doutorado em paralelo ao trabalho em uma empresa de Telecom. Posso dizer que não é fácil, mas vou tocar, pois afinal é algo que dura apenas quatro anos. Até mais !