• Nenhum resultado encontrado

Outros Comandos e Ferramentas da VM MiniNet

$ sudo mn −−controller=remote −−ip=[ip do controlador] −−port[porta de escuta do controlador (padrão = 6634)]

No próximo capítulo será apresentado melhor um exemplo de uso dessa opção.

6.3 Outros Comandos e Ferramentas da VM

’Switch Features’ e veja as capacidades do datapath. Sinta-se a vontade, explore os recursos do Wireshark.

Quadro 6.1: Tipos de mensagens OpenFlow apresentadas ao iniciar o controlador.

Mensagem Tipo Descrição

Hello Controlador→Switch após o TCP handshake, o controlador envia seu número de versão para o switch.

Hello Switch→Controlador oswitchresponde com seu número de versão suportado.

Features Request Controlador→Switch o controlador pede ao switchpara ver quais portas estão disponíveis.

Set Config Controlador→Switch O controlador pede aoswitchpara en-viar expirações de fluxo

Features Reply Switch→Controlador as respostas do switch com uma lista de suas portas e outras características.

Port Status Switch→Controlador permite ao switch informar ao con-trolador mudanças de velocidades de porta ou de conectividade. Ignorar este, pois parece que está com proble-mas nesta versão do OpenFlow.

Quando há muitosswitches, a análise do Wireshark pode ficar um pouco confusa, pois varias mensagens repetidas vão aparecer. Mas isso não acontece quando cria-mos a topologia com um únicoswitch. Note que as mensagens deEcho Request/Echo Replysão mensagens para manter a conexão entre os switchese o controlador ati-vas.

Agora vamos ver as mensagens geradas em pings na rede. Modifique seu filtro no Wireshark:

of && (of.type != 3) && (of.type != 2)

Agora na janela do MiniNet execute umping:

mininet> h2 ping -c1 h3

Na janela Wireshark, é possível ver uma série de novos tipos de mensagens:

Primeiro vemos a mensagem Packet-In com uma requisição ARP. Logo depois vemos a mensagemPacket-Outque corresponde a ação tomada pelo controlado no switch, esta ação no caso é o envio embroadcast pelas portas doswitchcom

exce-Quadro 6.2: Tipos de mensagens OpenFlow apresentadas ao realizar um ping.

Mensagem Tipo Descrição

Packet-In Switch→Controlador o pacote foi enviado ao controlado pois não possui uma entrada correspon-dente a esse pacote na tabela de fluxo doswitch.

Packet-Out Controlador→Switch controlador envia um pacote de uma ou mais portas doswitch.

Flow-Mod Controlador→Switch adiciona uma entrada na tabela de fluxo doswitch.

Flow-Expired Switch→Controlador um fluxo expirou após um período de inatividade.

ção a porta que chegou o pacote. Quando o pacote de resposta chega aoswitcheste já conhece o caminho para ’h2’ e neste momento ele envia a mensagem Flow-Mod criando uma entrada na tabela de fluxo doswitch. Nos próximos pings, não há en-volvimento do controlador, a exibição das mensagens no Wireshark devem parar por ai até a validade do fluxo vencer e apresentar a mensagemFlow-Expired.

Caso tenha qualquer outra dúvida ou dificuldade em de utilizar o Wireshark pro-cure pela documentação emhttp://www.wireshark.org/.

Outra possibilidade interessante no uso do MiniNet é a possibilidade de se exe-cutarscripts em umhost, dentro do CLI ou em sua inicialização. Você pode executar em umhost. Exemplo:

mininet> h2 config_script

Ou mesmo ser utilizada no próprio CLI:

mininet> source my_cli_script

Ou utilizá-la na inicialização do CLI:

$ sudo mn −−pre my_cli_script

Todas esses comandos evita a digitação repetitiva no CLI em seus testes e depura-ções de sua aplicação de rede. É possível criar um arquivo com múltiplos comandos

do CLI para determinado fim específico. Note que nos exemplos acima o arquivo deve ficar na pasta raiz do MiniNet, no entanto pode-se especificar o local no comando.

Um exemplo de umscripté apresentado a seguir:

py ”Configuring network”

h3 ifconfig h3-eth0 10.0.1.2/24 h4 ifconfig h4-eth0 10.0.1.3/24 h5 ifconfig h5-eth0 10.0.2.2/24 h3 route add default gw 10.0.1.1 h4 route add default gw 10.0.1.1 h5 route add default gw 10.0.2.1 py ”Current network:”

netdump

O MiniNet também fornece APIs para a criação e a configuração de Redes Defini-das por Software. Alguns exemplos de uso pode ser encontraDefini-das em mininet/examples, suas descrições encontram-se em mininet/examples/README. Destaca-se duas API’s gráficas, não muito utilizáveis mais que consistem em ideias interessantes. Exemplo:

$ sudo ./ mininet/examples/miniedit.py

Abrirá uma janela gráfica com a qual é possível desenhar uma topologia de ma-neira simples e fácil, no entanto essa API não é funcional e não possível se fazer absolutamente nada com ela, feche-a e ela encerrará o CLI do MiniNet (Figura 6.1).

Outro exemplo é:

$ sudo ./ mininet/examples/consoles.py

Abrirá uma janela gráfica com uma grade de janelas de console, uma para cada nó, e permite a interação com o acompanhamento de cada console, incluindo moni-toração com um gráfico e comandos como oiperf,pings(Figura 6.2).

Também é possível criar API’s próprias para MiniNet. Uma API simples basica-mente utiliza-se das bibliotecasmininet.net,mininet.node,mininet.cli. A primeira contém os módulos necessários para se montar a rede virtual propriamente dita, a segunda por sua vez contém os módulos para se criar todos os nós virtuais dessa rede e a terceira serve para que se possa executar o CLI do MiniNet. A seguir é apre-sentada uma API simples com comentários.

Figura 6.1: MiniNet API miniedit.py.

Figura 6.2: MiniNet API consoles.py.

1 " " "

2 Este e o exemplo de como c r i a r uma API simples i n s t a n c i a n d o um o b j e t o M i ni N e t

3 montando sua t o p o l o g i a e executando o C L I

4 " " "

5 # importando as c l a s s e s n e c e s s a r i a s

6

7 from m i n i n e t . net import M i n i n e t

8 from m i n i n e t . node import C o n t r o l l e r

9 from m i n i n e t . c l i import C L I

10 from m i n i n e t . l o g import setLogLevel , i n f o # para informacoes de l o g

11

12 def minhaAPI ( ) :

13

14 # Criando a rede :

15 net = M i n i n e t ( c o n t r o l l e r=C o n t r o l l e r ) # i n s t a n c i a n d o um o b j e t o da c l a s s e M i n i n e t

16

17 i n f o ( ∗∗∗ Adding c o n t r o l l e r \ n ’ ) # imprimindo l o g i n f o

18 net . a d d C o n t r o l l e r ( ’ c0 ’ ) # adicionando um c o n t r o l a d o r

19

20 i n f o ( ∗∗∗ Adding h o s t s \ n ’ )

21 h1 = net . addHost ( ’ h1 ’, i p=’ 1 0 . 0 . 0 . 1 ’ ) # adicionando um no host e colocando seu i p

22 h2 = net . addHost ( ’ h2 ’, i p=’ 1 0 . 0 . 0 . 2 ’ )

23

24 i n f o ( ∗∗∗ Adding s w i t c h \ n ’ )

25 s3 = net . addSwitch ( ’ s3 ’ ) # adicionando um s w i t c h openflow

26

27 i n f o ( ∗∗∗ C r e a t i n g l i n k s \ n ’ )

28 h1 . l i n k T o ( s3 ) # c r i a n d o o l i n k de h1 ( host1 ) para s3 ( s w i t c h openflow )

29 h2 . l i n k T o ( s3 )

30

31 i n f o ( ∗∗∗ S t a r t i n g network \ n ’)

32 net . s t a r t ( ) # i n i c i a n d o a rede

33

34 i n f o ( ∗∗∗ Running C L I \ n ’ )

35 C L I ( net ) # i n i c i a n d o o C L I com a rede c r i a d a

36

37 # o codigo para aqui ate que se s a i a do C L I

38

39 i n f o ( ∗∗∗ Stopping network ’ )

40 net . stop ( ) # para a rede c r i a d a

41

42 i f __name__ == ’ __main__ ’:

43 s e t L o g L e v e l ( ’ i n f o ’ )

44 minhaAPI ( )

Para executar esta API, crie um arquivo com o nome deminhaAPI.py no diretório mininet/examplese execute-o na máquina virtual da seguinte maneira:

$ sudo python -O /mininet/examples/minhaAPI.py

Pode-se criar API’s de diversas maneiras. Este trabalho contribui com a criação de uma API’s de inicialização do MiniNet com interface gráfica. Foi utilizando a biblioteca Tkinterdo Python (Figura C.1). Seu código pode ser visto no Apêndice C.