• Nenhum resultado encontrado

Desenvolvendo Componentes Próprios

Esta seção mostra como construir um componente próprio para o POX. Em alguns casos o pesquisador pode reutilizar trechos de códigos de alguns componentes já existentes nos seus próprios componentes. Nesses casos é possível fazer uma copia de algum componente e trabalhar em cima deles. O Capitulo 7 mostrará como criar componentes mais concretos e como testá-los.

Como podemos observar os componentes do POX são apenas módulos Python. É possível colocar esses módulos em qualquer lugar. O usual é colocar esse módulos no diretórioext. Este diretório é o local mais conveniente para que os pesquisadores possam colocar seus componentes próprios, pois o POX pesquisa automaticamente esse caminho quando é executado.

Dessa forma uma maneira simples de começar a construir um componente pró-prio é copiar um componente já existente (forwarding.l2_learning.py) para o di-retórioext, renomeá-lo (meu_componente.py) e começar a modificar o arquivo. Para executar ele no POX basta dar o comando:./pox.py meu_coponente.

5.12.1 Como criar um componente básico no POX

Esta seção mostra como criar um componente para o POX. Primeiramente é ne-cessário criar um arquivo em branco no diretório ext (de preferência). Por exemplo o arquivoteste.py. Abra o arquivo (vide código a seguir) e crie o métodolaunch() (linha 22) e se quiser alguns parâmetros (Seção 5.5). Este método é executado assim que o POX chama o componente. É interessante registrar o componente no núcleo do POX, seção 5.6 (linha 23 ou 25). Agora é necessário criar a classe do compo-nente teste (linha 6), essa classe deve escutar os eventos openflow, para isso é necessário executar o método addListeners do núcleo do POX (Seção 5.7) (linha 9). Agora que o componentetestepode escutar eventos é necessário criar funções para tratar certos eventos. Para tratar o eventoConnectionUp, que é lançado toda

vez que o POX detecta uma nova conexão, é necessário criar um tratador para ele, o método_handle_ConnectionUp(linha 14), esse método recebe como parâmetro o próprio evento e pode realizar qualquer tarefa com ele (Seção 5.10). O componente teste.pyficará assim:

1 from pox . core import core

2 from pox . l i b . u t i l import d p i d T o S t r # d p i d _ t o _ s t r e um metodo que converte o i d de um comutador para s t r i n g

3

4 l o g = core . getLogger ( ) # para e x i b i r l o g s no sistema , neste exemplo e u t i l i z a d o o l o g . debug ( )

5

6 c l a s s Teste ( o b j e c t ) :

7 def _ _ i n i t _ _ ( s e l f , an_arg ) :

8 s e l f . arg = an_arg

9 core . openflow . a d d L i s t e n e r s ( s e l f ) # para o u v i r todos os eventos OpenFlow do core

10

11 def meu_nome ( s e l f ) :

12 p r i n t " Sou o componente : ", s e l f . arg

13

14 def _handle_ConnectionUp ( s e l f , event ) : # t r a t a d o r de eventos

ConnectionUp , todas as vezes que este evento o c o r r e r , este metodo e executado

15 l o g . debug ("O s w i t c h %s se conectou ao c o n t r o l a d o r . ", d p i d T o S t r ( event . dpid ) )

16 s e l f . meu_nome ( )

17

18 def _ h a n d l e _ P a c k e t I n ( s e l f , event ) :

19 # executando o metodo r e g i s t a r d o no nucleo do pox

20 core . t e s t e . meu_nome ( ) # i m p r i m i r a " Sou o componente : TesteOpenFlow " toda vez que um pacote chegar

21

22 def launch ( ) :

23 component = Teste (" TesteOpenFlow ")

24 core . r e g i s t e r (" t e s t e ", component ) # r e g i s t r a n d o o componente t e s t e

25 # o u t r a maneira de r e g i s t r a r o componente : core . registerNew ( Teste )

Para executá-lo faça:

./pox.py teste.py

É necessário deixar claro que o código gerado aqui funcionará tanto em redes SDN reais como no simulador MiniNet, que será explicado no próximo capítulo. No Capítulo 7 será mostrado como testar os componentes aqui apresentados e como criar componentes mais realistas e mais complexos.

Capítulo 6 MiniNet

Para a criação de uma arquitetura SDN é necessário múltiplos componentes em sua infraestrutura. Inicialmente precisamos de uma máquina controladora operando algum sistema operacional de rede, como por exemplo, o NOX ou o POX. Posteri-ormente se fazem necessários elementos encaminhadores que tenham o plano de controle separado do plano de dados com alguma interface de programação, como por exemplo o OpenFlow. Além disso, ainda é necessário toda uma infraestrutura física que interligue esses elementos encaminhadores e o controlador por um canal seguro para a criação de uma Rede Definida por Software.

Ocorre que nem sempre um pesquisador dispõe de uma infraestrutura como essa para realizar seus experimentos, pois essa estrutura possui um custo elevado. Para lidar com esse problema é possível usar um simulador de Redes Definidas por Soft-ware.

O MiniNet é uma ferramenta para a simulação de Redes Definidas por Software que permite a rápida prototipação de uma grande infraestrutura virtual de rede com a utilização de apenas um computador. O Mininet também possibilita a criação de protótipos de redes virtuais escaláveis baseados em softwarecomo OpenFlow utili-zando primitivas de virtualização do Sistema Operacional. Com essas primitivas, ele permite criar, interagir e customizar protótipos de Redes Definidas por Software de forma rápida.

São algumas características do MiniNet:

• Fornecer uma maneira simples e barata para a realização de testes em redes para desenvolvimento de aplicações OpenFlow;

• Permite que múltiplos pesquisadores possam trabalhar de forma independente na mesma topologia de rede;

• Permite o teste de uma topologia grande e complexa, sem mesmo a necessi-dade de uma rede física;

• Inclui ferramentas para depurar e executar testes em toda a rede;

• Dá suporte a inúmeras topologias, e inclui um conjunto básicos de topologias;

• Oferece API’s simples em Python para criação e experimentação de redes.

Com o MiniNet é possível realizar testes de depuração e de resoluções de proble-mas podendo se beneficiar de ter uma rede completa experimental em um laptop ou PC. Fornece, de maneira intuitiva, ferramentas para o desenvolvimento de apren-dizagem na área de redes. Sua interface permite sua utilização em pesquisas e em aulas para o uso prático de técnicas e soluções de redes.

O MiniNet é melhor executado em máquina virtual (VM MiniNet) sendo execu-tada em VMware ou VirtualBox para os sistemas operacionais Windows, Mac e Linux com ferramentas OpenFlow já instaladas. Alternativamente é possível instala-lo no Ubuntu 11.10, embora os desenvolvedores não recomendem.

Mesmo com todas essas qualidades o MiniNet ainda não fornece desempenho e qualidade fieis de uma rede real, embora o código utilizado nele sirva para uma rede real baseada em switches de software NetFPGAs1, ou switches e, hardware comerciais. Isso ocorre devido aos recursos que são multiplexados em tempo real pelo kernel da máquina simuladora, e uma vez que a largura de banda total é limitada por restrições de CPU e memória da mesma.

Este capítulo irá apresentar um passo-a-passo dos principais comandos do Mini-Net, assumindo uma utilização com máquinas virtuais. Mostrará também o passo-a-passo de como estabelecer um ambiente virtual de testes para a criação e o desen-volvimento de uma arquitetura baseada em Redes Definidas por Software. Com as explicações deste capítulo é possível compreender melhor o MiniNet e, assim, poder executar os componentes do POX em uma rede virtual, como será apresentado no Capítulo 7.

6.1 Funcionamento

Quase todos os sistemas operacionais virtualizam os recursos de computação usando uma abstração de processos. O MiniNet usa processos baseados na virtuali-zação de várioshosts eswitchesexecutados em um únicokerneldo sistema opera-cional.

O MiniNet pode criarswitchesOpenFlow, controladores ehosts para a comunica-ção da rede simulada. O MiniNet conectaswitchesehosts usando enlacesethernet virtuais entre os pares.

O MiniNet ainda depende dokerneldo Linux para sua execução, no entanto seus desenvolvedores estão desenvolvendo outras técnicas para sua execução em outros sistemas operacionais com virtualização baseada em processos, como por exemplo o Solaris.

1O projeto NetFPGA refere-se ao esforço para o desenvolvimento dehardwaresde código aberto e plataforma de software para permitir a prototipagem rápida de dispositivos de rede. O projeto visa principalmente os pesquisadores, usuários da indústria e também estudantes em sala de aula.

netfpga.org