Cursos / Redes de Computadores / Redes de Computadores I / Aula

arrow_back Aula 16 - Plataforma de experimentação - Mininet-WiFi

Criando uma topologia customizada

A criação de uma topologia de rede customizada é importante, pois nos possibilita ter mais liberdade e flexibilidade para criar uma topologia de rede mais próxima daquilo que pretendemos fazer. Por exemplo, imagine que seja necessário criar uma topologia de rede que possua estações, host e switch conectado à um ponto de acesso. Os comandos disponíveis para iniciar o Mininet-WiFi não permitem criar a topologia em questão. Se quisermos criar uma topologia de rede similar ao do parágrafo anterior, precisamos utilizar scripts na linguagem de programação Python. Mas não se preocupe com a linguagem de programação, pois este material tentará trazer informações suficientes que possibilitarão a criação da topologia de rede necessária, mesmo que você não conheça a linguagem de programação Python.

Para começar, vale ressaltar que já existem arquivos de exemplos na linguagem de programação Python disponíveis em /examples para diferentes topologias e tecnologias de rede.

Dentre os arquivos de exemplo disponíveis, vamos tomar como referência o arquivo position.py. É importante destacar que o arquivo position.py deve estar disponível na sua instalação do Mininet-WiFi e é ele que você deve considerar para edição e execução. O arquivo position.py traz algumas informações que são úteis para qualquer topologia de rede. Apresentaremos elas abaixo com algumas modificações:

O conteúdo do arquivo é:


#!/usr/bin/python

'Setting position of the nodes'

from mininet.log import setLogLevel, info
from mn_wifi.cli import CLI
from mn_wifi.net import Mininet_wifi

def topology(args):

    net = Mininet_wifi()

    info("*** Creating nodes\n")
    ap1 = net.addAccessPoint('ap1', ssid='new-ssid', mode='g', channel='1', failMode="standalone", mac='00:00:00:00:00:01', position='50,50,0')
    sta1 = net.addStation('sta1', mac='00:00:00:00:00:02', ip='10.0.0.1/8', position='30,60,0')
    sta2 = net.addStation('sta2', mac='00:00:00:00:00:03', ip='10.0.0.2/8', position='70,30,0')
    h1 = net.addHost('h1', ip='10.0.0.3/8')
    s1 = net.addSwitch('s1')

    info("*** Configuring wifi nodes\n")
    net.configureWifiNodes()

    info("*** Creating links\n")
    net.addLink(ap1, s1)
        net.addLink(s1, h1)

    info("*** Starting network\n")
    net.start()

    info("*** Running CLI\n")
    CLI(net)

    info("*** Stopping network\n")
    net.stop()

if __name__ == '__main__':
    setLogLevel('info')
    topology()

Podemos observar que o main do arquivo evoca a função topology() e a função topology possui linhas com as seguintes instruções:

Para criar um AP (net.addAccessPoint()):

ap1 = net.addAccessPoint('ap1', ssid='new-ssid', mode='g', channel='1', failMode="standalone", mac='00:00:00:00:00:01', position='50,50,0')

onde:
ap1 é o nome do AP;
ssid identifica o SSID da rede sem fio;
mode identifica o modo de operação - pode ser substituída por a,b,n,ac e ax;
channel diz respeito ao canal e consequentemente a frequência;
failMode diz respeito ao modo de operação que não seja SDN;
mac identifica o MAC do nó;
position define a posição do nó

Para criar uma estação (net.addStation()):

sta1 = net.addStation('sta1', mac='00:00:00:00:00:02', ip='10.0.0.1/8', position='30,60,0')

Para criar um host (net.addHost()):

h1 = net.addHost('h1', ip='10.0.0.3/8')

Para criar um switch (net.addSwitch()):

s1 = net.addSwitch('s1')

Para criar link entre os nós:

net.addLink(ap1, s1)
net.addLink(s1, h1)

Observa que não precisamos criar o link entre as estações e o ponto de acesso. A associação entre estações e ponto de acesso será feita de forma automática caso as estações estiverem ao alcance do ponto de acesso. Como no caso a posição deles indica que estações e ponto de acesso estarão ao raio de alcande uns dos outros, eles terão associação feita de forma automática. Mesmo assim, caso necessário, você pode definir de forma estática.

net.addLink(ap1, sta1)
net.addLink(ap1, sta2)

Mas atenção, a definição estática só funcionará caso os nós estiverem de fato ao alcance. Caso contrário, a associação não será realizada com sucesso. Esse tipo de definição estática é útil caso existirem múltiplos pontos de acesso ao alcance e você queira especificar em qual a associação será feita. De forma análoga, seria a mesma coisa que você ter dois roteadores sem fio em sua casa e escolher no computador ou celular em qual dos dois roteadores deseja associar.

Uma vez o código em Python pronto, basta executá-lo conforme abaixo:

sudo python position.py

Versão 5.3 - Todos os Direitos reservados