Instalação e primeiros passos no NS-3

 

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!

Publicidade

8 comentários em “Instalação e primeiros passos no NS-3

  1. Bom dia, estou com uma vaga de emprego para profissionais que dominam esta ferramenta. é possível indicação de profissionais?

    Curtir

  2. 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!

    Curtir

Deixe uma resposta para Demis Gomes Cancelar resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s