$ 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.