Você está na página 1de 62

Introduo Tutorial Resultados Plotar

Network Simulator (NS3)


Carlos Giovanni Nunes de Carvalho1

1 de abril de 2013

Prof. DSc. do Curso de Cincia da Computao da UESPI


Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Sumrio
1

Introduo Caractersticas Instalao Como instalar o NS3 Tutorial Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo Resultados Arquivo de sada Filtrar resultados Plotar Ferramenta
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Caractersticas Instalao Como instalar o NS3

Sobre o Network Simulator (NS3)


O que o NS3 NS3a um simulador para sistemas de Internet baseado em eventos discretos (denido por unidade de tempo) Desenvolvido para ns de pesquisa e educational Software livre e de cdigo aberto (C++ e/ou Python)
a

www.nsnam.org

Comunidade Permite que desenvolvedores da comunidade de redes contribuam em seu cdigoa Lista de usurios do NS3b
a b

www.nsnam.org/developers/overview/ groups.google.com/group/ns-3-users
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Caractersticas Instalao Como instalar o NS3

Sobre o NS3 (Cont.)

NS3a vs NS2b
a b

www.nsnam.org/docs/release/3.15/tutorial-pt-br/ns-3-tutorial.pdf nsnam.isi.edu/nsnam/index.php/Main_Page

O NS3 no uma extenso do NS2 No suporta as APIs do NS2 Algumas funcionalidades do NS2 foram portadas para o NS3 um simulador novo

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Caractersticas Instalao Como instalar o NS3

Pr-requisitos
Aplicativos e bibliotecas Para que o NS3 funcione juntamente com gerao de documentao, plotagem de grcos e outras funcionalidades, necessrio a instalao de alguns pacotes Pacotes recomendados para os usurios do Ubuntua
a

www.nsnam.org/wiki/index.php/Installation

C++ e Python: >sudo apt-get install gcc g++ python python-dev Mercurial: >sudo apt-get install mercurial rvore de desenvolvedores ns-3: >sudo apt-get install bzr Debugging: >sudo apt-get install gdb valgrind
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Caractersticas Instalao Como instalar o NS3

Pr-requisitos (Cont.)
Pacotes recomendados (Cont.) Modelos de erro para WiFi: >sudo apt-get install gsl-bin libgsl0-dev libgsl0ldbl Analisador lxico e parser: >sudo apt-get install ex bison lib-dev Traces pcap: >sudo apt-get install tcpdump Database para estatstica: >sudo apt-get install sqlite sqlite3 libsqlite3-dev Xml: >sudo apt-get install libxml2 libxml2-dev GTK: >sudo apt-get install libgtk2.0-0 libgtk2.0-dev Mquinas virtuais: >sudo apt-get install vtun lxc Utilitrios: >sudo apt-get install uncrustify
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Caractersticas Instalao Como instalar o NS3

Pr-requisitos (Cont.)

Pacotes recomendados (Cont.) Documentao: >sudo apt-get install doxygen graphviz imagemagick texlive texlive-extra-utils texlive-latex-extra python-sphinx dia Visualizador: >sudo apt-get install python-pygraphviz python-kiwi python-pygoocanvas libgoocanvas-dev Openow: >sudo apt-get install libboost-signals-dev libboost-lesystem-dev Emulador: >sudo apt-get install openmpi*

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Caractersticas Instalao Como instalar o NS3

Passo a passo
Recomendao de download O procedimento recomendado baixar o NS3 atravs do Mercurial, pois a ferramenta copia o cdigo do simulador no repositrio Comandos >cd; mkdir repos; cd repos >hg clone http://code.nsnam.org/ns-3-allinone >./download.py -n ns-3-dev >ls -la Tempo de espera O tempo de download vai variar de acordo com a conexo da Internet, mas pode levar alguns minutos ou horas
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Caractersticas Instalao Como instalar o NS3

Passo a passo
Compilao Para gerar o executvel do NS3 necessrio que os cdigos fontes baixados sejam compilados Comandos >cd ns-3-allinone >./build.py enable-examples enable-tests >cd ns-3-dev; ls -la Teste Para vericar o funcionamento, use os seguintes comandos: >./test.py -c core >./waf run hello-simulator
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Aprendendo com exemplos


Onde encontrar? Todos os arquivos do tutorial esto localizados no diretrio examples/tutorial Testando um exemplo Comandos para testar o cenrio a ser simulado: >cp examples/tutorial/rst.cc scratch/myrst.cc >./waf >./waf run scratch/myrst Logs gerados pela simulao Verique o tipo de log que gerado na simulao. Isto pode ser denido dentro do script de simulao ou atravs de parmetros.
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Logs da simulao
O que so logs? So as mensagens do simulador e esto distribudas em 7 nveis Nveis das mensagens NS_LOG_ERROR: erro NS_LOG_WARN: alertas NS_LOG_DEBUG: depurao NS_LOG_INFO: informativo NS_LOG_FUNCTION: descreve a funo chamada NS_LOG_LOGIC: uxo lgico dentro de uma funo NS_LOG_ALL: tudo
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo
// Adicionar bibliotecas bsicas contendo o ncleo do simulador, // os ns e enlaces. #include ns3/core-module.h #include ns3/simulator-module.h #include ns3/node-module.h #include ns3/helper-module.h using namespace ns3; // Denio do log NS_LOG_COMPONENT_DEFINE (FirstScriptExample); // Funo principal do cdigo int main (int argc, char *argv[])
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


{ // Tipo de log denido para a aplicao LogComponentEnable(UdpEchoClientApplication, LOG_LEVEL_INFO); LogComponentEnable(UdpEchoServerApplication, LOG_LEVEL_INFO); // Dene e cria dois ns NodeContainer nodes; nodes.Create (2); // Cria o enlace ponto a ponto entre dois ns PointToPointHelper pointToPoint;
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Congura a taxa da conexo do enlace pointToPoint.SetDeviceAttribute (DataRate, StringValue (5Mbps)); // Congura o atraso do enlace pointToPoint.SetChannelAttribute (Delay, StringValue (2ms)); // Congura o dispositivo de rede NetDeviceContainer devices; // Cria os dispositivos e associa-os ao enlace devices = pointToPoint.Install (nodes);

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Congurar a pilha de protocolo IP nos ns InternetStackHelper stack; stack.Install (nodes); // Congura o endereo IP da rede e sua mscara de subrede Ipv4AddressHelper address; address.SetBase (10.1.1.0, 255.255.255.0); // Atribui os endereos IP as interfaces de rede Ipv4InterfaceContainer interfaces = address.Assign (devices); // Cria o servidor da aplicao de Echo na porta 9 UdpEchoServerHelper echoServer (9);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Congura o segundo n como servidor da aplicao de Echo ApplicationContainer serverApps = echoServer.Install (nodes.Get (1)); // Dene o tempo de incio e nal da aplicao no servidor serverApps.Start (Seconds (1.0)); serverApps.Stop (Seconds (10.0)); // Congura o endereo IP do servidor e a porta // no cliente da aplicao de Echo Ipv4Address serverAddress = interfaces.GetAddress (1); UdpEchoClientHelper echoClient (serverAddress, 9);

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Congura o nmero mximo de pacotes enviados pelo cliente echoClient.SetAttribute (MaxPackets, UintegerValue (1)); // Intervalo de tempo entre pacotes no cliente echoClient.SetAttribute (Interval, TimeValue (Seconds (1.))); // Tamanho mximo do pacote no cliente echoClient.SetAttribute (PacketSize, UintegerValue (1024)); // Congura o cliente da aplicao no primeiro n ApplicationContainer clientApps = echoClient.Install (nodes.Get (0));

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Dene o tempo de incio e nal da aplicao no cliente clientApps.Start (Seconds (2.0)); clientApps.Stop (Seconds (10.0)); // Carrega a simulao aps todas as denies Simulator::Run (); // Encerra a simulao no nal Simulator::Destroy (); return 0; }

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo

// Adicionar bibliotecas bsicas contendo o ncleo do simulador, // os ns, enlaces multiponto (csma/ethernet) e roteamento. #include ns3/core-module.h #include ns3/network-module.h #include ns3/csma-module.h #include ns3/internet-module.h #include ns3/point-to-point-module.h #include ns3/applications-module.h #include ns3/ipv4-global-routing-helper.h

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Descrio da topologia multiponto // Default Network Topology // // 10.1.1.0 // n0 n1 n2 n3 n4 // point-to-point | | | | // // LAN 10.1.2.0 using namespace ns3; // Denio do log NS_LOG_COMPONENT_DEFINE (SecondScriptExample);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Funo principal do cdigo int main (int argc, char *argv[]) { // Variveis criadas para enviar parmetros por linha de comando // Varivel para habilitar ou desabilitar o log bool verbose = true; // Varivel para atribuir a quantidade mnima de ns (multiponto) uint32_t nCsma = 3; // Varivel para receber os parmetros da linha de comando CommandLine cmd;

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Atribui os valores das variveis digitadas na linha de comando cmd.AddValue (nCsma, Number of \extra\ CSMA nodes/devices, nCsma); cmd.AddValue (verbose, Tell echo applications to log if true, verbose); cmd.Parse (argc, argv); // Vericar se o log ser habilitado if (verbose) { LogComponentEnable(UdpEchoClientApplication, LOG_LEVEL_INFO); LogComponentEnable(UdpEchoServerApplication, LOG_LEVEL_INFO); }
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Caso no seja enviado o nmero de ns, garante o nmero // mnimo nCsma = nCsma == 0 ? 1 : nCsma; // Dene e cria dois ns para o enlace ponto a ponto NodeContainer p2pNodes; p2pNodes.Create (2); // Dene e cria a quantidade mnima de ns para o enlace // multiponto e congura o primeiro n para conectar na // rede ponto a ponto NodeContainer csmaNodes; csmaNodes.Add (p2pNodes.Get (1)); csmaNodes.Create (nCsma);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Cria o enlace ponto a ponto entre dois ns PointToPointHelper pointToPoint; // Congura a taxa da conexo do enlace ponto a ponto pointToPoint.SetDeviceAttribute (DataRate, StringValue (5Mbps)); // Congura o atraso do enlace ponto a ponto pointToPoint.SetChannelAttribute (Delay, StringValue (2ms)); // Congura o dispositivo de rede no enlace ponto a ponto NetDeviceContainer p2pDevices; // Cria os dispositivos e associa-os ao enlace ponto a ponto p2pDevices = pointToPoint.Install (p2pNodes);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Cria o enlace multiponto CsmaHelper csma; // Congura a taxa da conexo do enlace multiponto csma.SetChannelAttribute (DataRate, StringValue (100Mbps)); // Congura o atraso do enlace multiponto csma.SetChannelAttribute (Delay, TimeValue (NanoSeconds (6560))); // Congura o dispositivo de rede no enlace multiponto NetDeviceContainer csmaDevices; // Cria os dispositivos e associa-os ao enlace multiponto csmaDevices = csma.Install (csmaNodes);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Congurar a pilha de protocolo IP nos ns InternetStackHelper stack; // Somente o primeiro n ponto a ponto congurado aqui // pois o segundo n j pertence ao enlace multiponto stack.Install (p2pNodes.Get (0)); stack.Install (csmaNodes); // Congura o endereo IP da rede e sua mscara de subrede // para os dispositivos do enlace ponto a ponto Ipv4AddressHelper address; address.SetBase (10.1.1.0, 255.255.255.0);

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Atribui os endereos IP as interfaces de rede // no enlace ponto a ponto Ipv4InterfaceContainer p2pInterfaces = address.Assign (p2pDevices); // Congura o endereo IP da rede e sua mscara de subrede // para os dispositivos do enlace multiponto address.SetBase (10.1.2.0, 255.255.255.0); // Atribui os endereos IP as interfaces de rede // no enlace multiponto Ipv4InterfaceContainer csmaInterfaces = address.Assign (csmaDevices);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Cria o servidor da aplicao de Echo na porta 9 UdpEchoServerHelper echoServer (9); // Congura o ltimo n do enlace multiponto como // servidor da aplicao de Echo ApplicationContainer serverApps = echoServer.Install (csmaNodes.Get (nCsma)); // Dene o tempo de incio e nal da aplicao no servidor serverApps.Start (Seconds (1.0)); serverApps.Stop (Seconds (10.0));

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Congura a porta no cliente da aplicao de Echo no // ltimo n do enlace multiponoto UdpEchoClientHelper echoClient (csmaInterfaces.GetAddress (nCsma), 9); // Congura o nmero mximo de pacotes enviados pelo cliente echoClient.SetAttribute (MaxPackets, UintegerValue (1)); // Intervalo de tempo entre pacotes no cliente echoClient.SetAttribute (Interval, TimeValue (Seconds (1.))); // Tamanho mximo do pacote no cliente echoClient.SetAttribute (PacketSize, UintegerValue (1024));
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Congura o cliente da aplicao no primeiro n // do enlace ponto a ponto ApplicationContainer clientApps = echoClient.Install (p2pNodes.Get (0)); // Dene o tempo de incio e nal da aplicao no cliente clientApps.Start (Seconds (2.0)); clientApps.Stop (Seconds (10.0)); // Congura o roteamento global na rede, // cada n funciona como se fosse um roteador OSPF Ipv4GlobalRoutingHelper::PopulateRoutingTables (); // Habilita o PCAP/Snier no enlace ponto a ponto pointToPoint.EnablePcapAll (second);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Habilita o PCAP/Snier no enlace multiponto // apenas no primeiro n de uma rede compartilhada. // True para congurar a interface em modo promscuo. // Use > tcpdump -nn -tt -r <nome>-<n>-<dispositivo>.pcap // para rastrear os arquivos PCAP csma.EnablePcap (second, csmaDevices.Get (1), true); // Carrega a simulao aps todas as denies Simulator::Run (); // Encerra a simulao no nal Simulator::Destroy (); return 0; }
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo

// Adicionar bibliotecas bsicas contendo o ncleo do simulador, // os ns, enlaces multiponto (csma/ethernet) e roteamento. #include ns3/core-module.h #include ns3/point-to-point-module.h #include ns3/network-module.h #include ns3/applications-module.h #include ns3/wi-module.h #include ns3/mobility-module.h #include ns3/csma-module.h #include ns3/internet-module.h

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// // // // // // // // // // // // Descrio da topologia multiponto Default Network Topology Wi 10.1.3.0 * | * | * | n7 AP * | 10.1.1.0 n0 n1 n2 n3 n4 point-to-point | | | | LAN 10.1.2.0

n5 n6

using namespace ns3;


Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Denio do log NS_LOG_COMPONENT_DEFINE (ThirdScriptExample); // Funo principal do cdigo int main (int argc, char *argv[]) { // Variveis criadas para enviar parmetros por linha de comando // Varivel para habilitar ou desabilitar o log bool verbose = true; // Varivel para atribuir a quantidade mnima de ns (multiponto) uint32_t nCsma = 3; // Varivel para atribuir a quantidade mnima de ns (sem o) uint32_t nWi = 3;
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Varivel para receber os parmetros da linha de comando CommandLine cmd; // Atribui os valores das variveis digitadas na linha de comando cmd.AddValue (nCsma, Number of \extra\ CSMA nodes/devices, nCsma); cmd.AddValue (nWi, Number of wi STA devices, nWi); cmd.AddValue (verbose, Tell echo applications to log if true, verbose); cmd.Parse (argc, argv); // Vericar se o log ser habilitado if (verbose) {
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


LogComponentEnable(UdpEchoClientApplication, LOG_LEVEL_INFO); LogComponentEnable(UdpEchoServerApplication, LOG_LEVEL_INFO); } // Caso no seja enviado o nmero de ns, garante o nmero // mnimo nCsma = nCsma == 0 ? 1 : nCsma; // Dene e cria dois ns para o enlace ponto a ponto NodeContainer p2pNodes; p2pNodes.Create (2);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Dene e cria a quantidade mnima de ns para o enlace // multiponto e congura o primeiro n para conectar na // rede ponto a ponto NodeContainer csmaNodes; csmaNodes.Add (p2pNodes.Get (1)); csmaNodes.Create (nCsma); // Cria o enlace ponto a ponto entre dois ns PointToPointHelper pointToPoint; // Congura a taxa da conexo do enlace ponto a ponto pointToPoint.SetDeviceAttribute (DataRate, StringValue (5Mbps));
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Congura o atraso do enlace ponto a ponto pointToPoint.SetChannelAttribute (Delay, StringValue (2ms)); // Congura o dispositivo de rede no enlace ponto a ponto NetDeviceContainer p2pDevices; // Cria os dispositivos e associa-os ao enlace ponto a ponto p2pDevices = pointToPoint.Install (p2pNodes); // Cria o enlace multiponto CsmaHelper csma; // Congura a taxa da conexo do enlace multiponto csma.SetChannelAttribute (DataRate, StringValue (100Mbps));
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Congura o atraso do enlace multiponto csma.SetChannelAttribute (Delay, TimeValue (NanoSeconds (6560))); // Congura o dispositivo de rede no enlace multiponto NetDeviceContainer csmaDevices; // Cria os dispositivos e associa-os ao enlace multiponto csmaDevices = csma.Install (csmaNodes); // Dene e cria a quantidade mnima de ns para o enlace // sem o e congura o primeiro n para ser o AP NodeContainer wiStaNodes; wiStaNodes.Create (nWi); NodeContainer wiApNode = p2pNodes.Get (0);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Cria o canal e associa-o a camada fsica // da rede sem o YansWiChannelHelper channel = YansWiChannelHelper:: Default (); YansWiPhyHelper phy = YansWiPhyHelper::Default (); phy.SetChannel (channel.Create ()); // Dene a camada de enlace da rede sem o // bsica, sem QoS e usando AARF para controlar // a taxa do canal de dados WiHelper wi = WiHelper::Default (); wi.SetRemoteStationManager (ns3::AarfWiManager); NqosWiMacHelper mac = NqosWiMacHelper::Default ();
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Congura o SSID da rede sem o, com o tipo do MAC // e desabilita a sondagem nas STA (estaes) Ssid ssid = Ssid (ns-3-ssid); mac.SetType (ns3::StaWiMac, Ssid, SsidValue (ssid), ActiveProbing, BooleanValue (false)); // Congura o dispositivo de rede no enlace sem o NetDeviceContainer staDevices; // Cria os dispositivos e associa-os ao enlace sem o staDevices = wi.Install (phy, mac, wiStaNodes);

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Congura o SSID da rede sem o, como o tipo do MAC // no AP (ponto de acesso) mac.SetType (ns3::ApWiMac, Ssid, SsidValue (ssid))); // Congura o dispositivo de rede no enlace sem o NetDeviceContainer apDevices; // Cria o dispositivo e associa-o ao enlace sem o apDevices = wi.Install (phy, mac, wiApNode); // Congura o modelo de mobilidade para as estaes, // denindo as dimensses e o layout da grade MobilityHelper mobility; mobility.SetPositionAllocator (ns3::GridPositionAllocator,
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


MinX, DoubleValue (0.0), MinY, DoubleValue (0.0), DeltaX, DoubleValue (5.0), DeltaY, DoubleValue (10.0), GridWidth, UintegerValue (3), LayoutType, StringValue (RowFirst)); // Dene e instala o modelo de mobilidade aleatria, tanto // para direo quanto para velocidade nas estaes mobility.SetMobilityModel (ns3::RandomWalk2dMobilityModel, Bounds, RectangleValue (Rectangle (-50, 50, -50, 50))); mobility.Install (wiStaNodes);

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Dene a posio constante (sem mobilidade) para o AP mobility.SetMobilityModel (ns3::ConstantPositionMobilityModel); mobility.Install (wiApNode); // Congurar e instala a pilha de protocolo IP nos ns InternetStackHelper stack; stack.Install (csmaNodes); stack.Install (wiApNode); stack.Install (wiStaNodes); // Congura o endereo IP da rede e sua mscara de subrede // para os dispositivos dos enlaces ponto a ponto, // multiponto e sem o Ipv4AddressHelper address;
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


address.SetBase (10.1.1.0, 255.255.255.0); Ipv4InterfaceContainer p2pInterfaces = address.Assign (p2pDevices); address.SetBase (10.1.2.0, 255.255.255.0); Ipv4InterfaceContainer csmaInterfaces = address.Assign (csmaDevices); address.SetBase (10.1.3.0, 255.255.255.0); address.Assign (staDevices); address.Assign (apDevices);

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Cria o servidor da aplicao de Echo na porta 9 UdpEchoServerHelper echoServer (9); // Congura o ltimo n do enlace multiponto como // servidor da aplicao de Echo ApplicationContainer serverApps = echoServer.Install (csmaNodes.Get (nCsma)); // Dene o tempo de incio e nal da aplicao no servidor serverApps.Start (Seconds (1.0)); serverApps.Stop (Seconds (10.0));

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Congura a porta no cliente da aplicao de Echo no // ltimo n do enlace multiponoto UdpEchoClientHelper echoClient (csmaInterfaces.GetAddress (nCsma), 9); // Congura o nmero mximo de pacotes enviados pelo cliente echoClient.SetAttribute (MaxPackets, UintegerValue (1)); // Intervalo de tempo entre pacotes no cliente echoClient.SetAttribute (Interval, TimeValue (Seconds (1.))); // Tamanho mximo do pacote no cliente echoClient.SetAttribute (PacketSize, UintegerValue (1024));
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Congura o cliente da aplicao no penultimo n // do enlace sem o apontando para o servidor no // enlace multiponto ApplicationContainer clientApps = echoClient.Install (wiStaNodes.Get (nWi - 1)); // Dene o tempo de incio e nal da aplicao no cliente clientApps.Start (Seconds (2.0)); clientApps.Stop (Seconds (10.0)); // Congura o roteamento global na rede, // cada n funciona como se fosse um roteador OSPF Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)


// Evita que o AP crie pacotes sinalizadores // (beacons ) indeterminadamente no simulador Simulator::Stop (Seconds (10.0)); // Habilita o PCAP/Snier no enlace ponto a ponto pointToPoint.EnablePcapAll (third); // Habilita o PCAP/Snier no enlace multiponto // apenas no primeiro n de uma rede compartilhada. // True para congurar a interface em modo promscuo. // Use > tcpdump -nn -tt -r <nome>-<n>-<dispositivo>.pcap // para rastrear os arquivos PCAP csma.EnablePcap (second, csmaDevices.Get (0), true); // Habilita o PCAP/Snier no enlace sem o phy.EnablePcap (third, apDevices.Get (0));
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Viso geral Primeiro exemplo Segundo exemplo Terceiro exemplo

Dissecando o cdigo (Cont.)

// Carrega a simulao aps todas as denies Simulator::Run (); // Encerra a simulao no nal Simulator::Destroy (); return 0; }

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Arquivo de sada Filtrar resultados

Preparar o arquivo
Como fazer? Existem vrias ferramentas para tratar o arquivo de sada, entre elas esto as linguagens de script, as quais permitem ltrar, calcular e armazenar os resultados de acordo com as necessidades do usurio. Exemplos de ferramentas Shell Script Perl Python AWK GnuPlot O GnuPlot permite executar cdigos AWK dentro de seus scripts.
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Arquivo de sada Filtrar resultados

Cdigo exemplo com AWK


BEGIN{ iIP=0; iARP_Rep=0; iARP_Req=0; } { if ($2==IP) { tempoIP[iIP]=$1; pacotesIP[iIP]=pacotesIP[iIP-1]+$8; iIP++; };

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Arquivo de sada Filtrar resultados

Cdigo exemplo com AWK


if ($2==ARP, && $3==Request) { tempoARP_Req[iARP_Req]=$1; pacotesARP_Req[iARP_Req]= pacotesARP_Req[iARP_Req-1]+$10; iARP_Req++; }; if ($2==ARP, && $3==Reply) { tempoARP_Rep[iARP_Rep]=$1; pacotesARP_Rep[iARP_Rep]= pacotesARP_Rep[iARP_Rep-1]+$8; iARP_Rep++; }; }
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Arquivo de sada Filtrar resultados

Cdigo exemplo com AWK


END{ ip=0; arp_rep=0; arp_req=0; while (ip<iIP) {print Bytes IP enviados pacotesIP[ip] em tempoIP[ip] segundos ; ip+=1;}; while (arp_rep<iARP_Rep) {print Bytes ARP_REP enviados pacotesARP_Rep[arp_rep] em tempoARP_Rep[arp_rep] segundos ; arp_rep+=1;}; while (arp_req<iARP_Req) {print Bytes ARP_REQ enviados pacotesARP_Req[arp_req] em tempoARP_Req[arp_req] segundos ; arp_req+=1;}; }
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Arquivo de sada Filtrar resultados

Executando o exemplo com AWK


> tcpdump -nn -tt -r second-2-0.pcap | awk -f exemplo1_AWK.awk Sada (padro/tela) do comando acima: Bytes Bytes Bytes Bytes Bytes Bytes IP enviados 1024 em 2.003803 segundos IP enviados 2048 em 2.003921 segundos ARP_REP enviados 50 em 2.003710 segundos ARP_REP enviados 100 em 2.003828 segundos ARP_REQ enviados 50 em 2.003698 segundos ARP_REQ enviados 100 em 2.003815 segundos

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Arquivo de sada Filtrar resultados

Exemplo com AWK para gerar arquivo de plotagem


Preparar arquivo para plotar O arquivo do exemplo anterior gera sada com strings/textos e isso prejudica a leitura do arquivo de plotagem. Faz-se necessrio preparar o arquivo de plotagem somente como nmeros. BEGIN{ iIP=0; } { if ($2==IP) { tempoIP[iIP]=$1; pacotesIP[iIP]=pacotesIP[iIP-1]+$8; iIP++; };
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Arquivo de sada Filtrar resultados

Exemplo com AWK para gerar arquivo de plotagem


} END{ ip=0; while (ip<iIP) {print tempoIP[ip] pacotesIP[ip]; ip+=1;}; } Comando para redirecionar a sada no arquivo de plotagem: > tcpdump -nn -tt -r second-2-0.pcap | awk -f exemplo2_AWK.awk > enviados_IP.dat

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Arquivo de sada Filtrar resultados

Exemplo com AWK para gerar arquivo de plotagem


BEGIN{ iARP_Rep=0; } { if ($2==ARP, && $3==Reply) { tempoARP_Rep[iARP_Rep]=$1; pacotesARP_Rep[iARP_Rep]= pacotesARP_Rep[iARP_Rep-1]+$8; iARP_Rep++; }; }

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Arquivo de sada Filtrar resultados

Cdigo exemplo com AWK

END{ arp_rep=0; while (arp_rep<iARP_Rep) {print tempoARP_Rep[arp_rep] pacotesARP_Rep[arp_rep]; arp_rep+=1;}; } Comando para redirecionar a sada no arquivo de plotagem: > tcpdump -nn -tt -r second-2-0.pcap | awk -f "exemplo3_AWK.awk enviados_ARP_Rep.dat

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Arquivo de sada Filtrar resultados

Exemplo com AWK para gerar arquivo de plotagem


BEGIN{ iARP_Req=0; } { if ($2==ARP, && $3==Request) { tempoARP_Req[iARP_Req]=$1; pacotesARP_Req[iARP_Req]= pacotesARP_Req[iARP_Req-1]+$8; iARP_Req++; }; }

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Arquivo de sada Filtrar resultados

Cdigo exemplo com AWK

END{ arp_req=0; while (arp_req<iARP_Req) {print tempoARP_Req[arp_req] pacotesARP_Req[arp_req]; arp_req+=1;}; } Comando para redirecionar a sada no arquivo de plotagem: > tcpdump -nn -tt -r second-2-0.pcap | awk -f "exemplo4_AWK.awk enviados_ARP_Req.dat

Carlos Giovanni Nunes de Carvalho

Network Simulator (NS3)

Introduo Tutorial Resultados Plotar

Ferramenta

Script
GnuPlot uma das ferramentas mais utilizada para plotar os resultados de simulao. set title Bytes IP enviados set xlabel Tempo(s) set ylabel Bytes plot enviados_IP.dat title Dados with lines

Comando para plotar o grco: > gnuplot enviados_IP.gnu


Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)