Neste tutorial é relatada a instalação, a execução do primeiro programa e algumas dicas sobre o NS-3, simulador muito usado na academia. Os SO testados foram o Ubuntu 14.04, 16.04 e 18.04.
NS-3
O Network Simulator é um simulador de eventos discretos usado, principalmente, para fins educacionais e de pesquisa. Seu código é open source e permite estudar o comportamento de vários tipos de rede, como a ethernet, LTE, Wi-Fi, VANETs, entre outras. O número 3 se refere a versão do simulador, sendo esta a única que recebe suporte dos desenvolvedores. Tal versão substituiu a 2, que deixou de receber suporte desde 2010.
Entretanto, o NS-3 possui certas dificuldades de instalacão e uso, principalmente para quem não está habituado a ambientes Linux. A quantidade de dependências e os diferentes releases da ferramenta dificultam a utilizacão para os iniciantes. Portanto, para auxiliar quem está comecando a manusear a ferramenta, oferecemos um breve tutorial para reduzir o estresse causado pelos erros na instalação e no uso do NS-3.
Instalação
A instalacão se dá nos seguintes passos:
Crie o diretório ns3 para inserir os arquivos de instalacão:
mkdir ns3 cd ns3
Baixe todas as dependências necessárias para a instalação. Você pode obter maiores detalhes sobre o funcionamento de cada uma neste link.
Caso você esteja no Ubuntu 14.04/ 16.04, baixe as seguintes dependências:
sudo apt-get install curl gcc g++ python python-dev mercurial bzr gdb valgrind gsl-bin libgsl0-dev flex bison tcpdump sqlite sqlite3 libsqlite3-dev libxml2 libxml2-dev libgtk2.0-0 libgtk2.0-dev uncrustify doxygen graphviz imagemagick texlive texlive-latex-extra texlive-generic-extra texlive-generic-recommended texinfo dia texlive texlive-latex-extra texlive-extra-utils texlive-generic-recommended texi2html python-pygraphviz python-kiwi python-pygoocanvas libgoocanvas-dev python-pygccxml qt4-dev-tools libqt4-dev libc6-dev libc6-dev-i386 g++-multilib -y
No Ubuntu 18.04, as libs python-pygoocanvas e libgoocanvas-dev foram removidas. Elas podem ser trocadas por outras libs que são executadas com o Python 3. Caso você use a versão do NS-3 de 3.29 em diante, é possível usar o GTK 3+ (as versões anteriores do NS-3 tinham suporte apenas para o GTK 2). Com isso, você pode trocar as libs removidas por
sudo apt-get install gir1.2-goocanvas-2.0 python-gi python-gi-cairo python3-gi python3-gi-cairo python3-pygraphviz gir1.2-gtk-3.0 ipython ipython3
Caso queira instalar todas as dependencias de uma só vez:
sudo apt-get install curl gcc g++ python python-dev mercurial bzr gdb valgrind gsl-bin libgsl0-dev flex bison tcpdump sqlite sqlite3 libsqlite3-dev libxml2 libxml2-dev libgtk2.0-0 libgtk2.0-dev uncrustify doxygen graphviz imagemagick texlive texlive-latex-extra texlive-generic-extra texlive-generic-recommended texinfo dia texlive texlive-latex-extra texlive-extra-utils texlive-generic-recommended texi2html python-pygraphviz python-kiwi gir1.2-goocanvas-2.0 python-gi python-gi-cairo python3-gi python3-gi-cairo python3-pygraphviz gir1.2-gtk-3.0 ipython ipython3 python-pygccxml qt4-dev-tools libqt4-dev libc6-dev libc6-dev-i386 g++-multilib -y
Baixe a release desejada do NS-3. Neste tutorial sempre baixamos a mais recente, mas você pode trocar a variável $release pela de sua preferência. Vale salientar que as versões 3.25 em diante não possuem a implementacão das versões Reno e Tahoe do TCP por exemplo, o que pode causar resultados diferentes comparados à outras versões da ferramenta. Neste tutorial, visitamos a página https://www.nsnam.org/releases/ e escolhemos a versão 3.30. Digite isso no terminal:
release = "3.30"
Em seguida, baixe a versão:
wget https://www.nsnam.org/release/ns-allinone-$release.tar.bz2
Descompacte o arquivo baixado e mude o diretório. Novamente, você pode trocar a versão do release para a desejada.
tar xjf ns-allinone-$release.tar.bz2 cd ns-allinone-$release/
Faca o build da release. As flags –enable-examples e –enable-tests permitem a execução dos arquivos de exemplo e de scripts de teste da ferramenta.
./build.py --enable-examples --enable-tests
Caso não tenha ocorrido nenhum erro, o NS-3 foi instalado com sucesso. Caso você queira testar a ferramenta, o NS-3 possui um script chamado test.py dentro da pasta ns3-$release. Você pode executá-lo pelo seguinte comando:
cd ns3-$release ./test.py -c core
Caso a saída seja parecida com essa, sem erros,
... PASS: TestSuite packet PASS: TestSuite lte-ue-measurements-piecewise-2 PASS: TestSuite lte-x2-handover-measures 169 of 172 tests passed (169 passed, 3 skipped, 0 failed, 0 crashed, 0 valgrind errors)
a ferramenta foi instalada com êxito.
Caso tenha tido dificuldades na instalação, há um script criado com todos os passos da ferramenta. As primeiras linhas buscam o release mais recente do NS-3, e depois segue os passos da instalação relatados aqui. Você pode salvar o código em um arquivo (ex: script_ns3.sh), dar permissão de execucão (chmod +x script_ns3.sh) e executar como sudo (sudo ./script_ns3.sh). Esse script é compatível com o Ubuntu 18.04.
echo "Baixando a release 3.30" release="3.30" echo "Atualizando..." apt-get update -y echo "Criando diretorio ns3 ..." mkdir ns3 cd ns3 echo "baixando dependências..." sudo apt-get install gcc g++ python python-dev mercurial bzr gdb valgrind gsl-bin libgsl0-dev flex bison tcpdump sqlite sqlite3 libsqlite3-dev libxml2 libxml2-dev libgtk2.0-0 libgtk2.0-dev uncrustify doxygen graphviz imagemagick texlive texlive-latex-extra texlive-generic-extra texlive-generic-recommended texinfo dia texlive texlive-latex-extra texlive-extra-utils texlive-generic-recommended texi2html python-pygraphviz python-kiwi gir1.2-goocanvas-2.0 python-gi python-gi-cairo python3-gi python3-gi-cairo python3-pygraphviz gir1.2-gtk-3.0 ipython ipython3 python-pygccxml qt4-dev-tools libqt4-dev libc6-dev libc6-dev-i386 g++-multilib -y echo "baixando a release $release" wget https://www.nsnam.org/release/ns-allinone-$release.tar.bz2 echo "Descompactando... " tar xjf ns-allinone-$release.tar.bz2 cd ns-allinone-$release/ echo "build da release ($release)" ./build.py --enable-examples --enable-tests echo "Concluído!"
Uso da ferramenta
Você pode executar alguns exemplos escritos em C++ ou Python. A sintaxe é sempre da mesma forma do comando a seguir (sem a extensão do arquivo).
./waf --run $nome_script
O primeiro exemplo é o Hello Simulator, que pode ser executado através do comando:
./waf --run hello-simulator
Caso você veja a frase “Hello Simulator”, o código foi executado corretamente.
Outro exemplo é o fifth. Execute pelo comando
./waf --run fifth
Este exemplo gera duas colunas de dados: a primeira é o tempo de simulação, enquanto que a segunda descreve o tamanho da janela de congestionamento. Você pode gerar gráficos com estes valores.
Para executar um script que não está nos exemplos, é necessário copiá-lo para a pasta scratch. Depois, execute o waf para compilar o script.
cp myscript.cc scratch/ ./waf
Para executar, basta executar o mesmo comando:
./waf --run myscript
Espero que este tutorial tenha ajudado a instalar e executar o NS-3. Abraço!
Muito bom! Instalei tranquilo no UBuntu! Mas alguns arquivos estão desatualizados, tive que fazer modificações no parâmetro libgsl0ldbl e segui a sugestão do shell
CurtirCurtido por 1 pessoa
Obrigado, Engenheiro! Depois de muito tempo, atualizei o post. Valeu pelas considerações!
CurtirCurtir
Bom dia, estou com uma vaga de emprego para profissionais que dominam esta ferramenta. é possível indicação de profissionais?
CurtirCurtir
Muito bom! Instalei tranquilo no Xubuntu, apesar de ter alguns arquivos desatualizados como já citaram nos comentários. Também fiz modificações no parâmetro libgsl0ldbl e segui a sugestão do shell.
CurtirCurtido por 1 pessoa
Obrigado, pelas considerações, Diego! Atualizei o post com as suas dicas. Valeu!
CurtirCurtir
Feito no Mint 18 e funcionou perfeitamente! Obrigado.
CurtirCurtido por 1 pessoa
Que legal, Victor! Fico feliz em ter ajudado 🙂
CurtirCurtir
Boa tarde, Demis Gomes. Parabéns pela postagem!
– Estou usando uma VM do ubuntu-20.04.2.0-desktop-amd64 no Oracle VM VirtualBox 6.1 e o pacote ns-allinone-3.33.tar.bz2;
– Instalei apenas estas dependências de uma só vez: sudo apt-get install curl gcc g++ python python-dev mercurial bzr gdb valgrind gsl-bin libgsl0-dev flex bison tcpdump sqlite sqlite3 libsqlite3-dev libxml2 libxml2-dev libgtk2.0-0 libgtk2.0-dev uncrustify doxygen graphviz imagemagick texlive texlive-latex-extra texinfo dia texlive texlive-latex-extra texlive-extra-utils texi2html gir1.2-goocanvas-2.0 python-gi python-gi-cairo python3-gi python3-gi-cairo python3-pygraphviz gir1.2-gtk-3.0 ipython3 libc6-dev libc6-dev-i386 g++-multilib -y, removi algumas que não eram encontradas ou estavam obsoletas.
Segui o seu tutorial, testei os exemplos e deu tudo certo até o momento. Obrigado!
CurtirCurtir