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 e 16.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.

sudo apt-get install gcc g++ python python-dev mercurial bzr gdb valgrind gsl-bin libgsl0-dev libgsl0ldbl 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 

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.

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

echo "Verificando a release mais recente"
release=`curl https://www.nsnam.org/releases/latest -Ls -o /dev/null  -w '%{url_effective}' | cut -d "/" -f4 | tr -s "ns" " " | cut -c 3- | tr -s "-" "."`
echo "release $release"
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 libgsl0ldbl 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
echo "baixando a release mais recente ($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!

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

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

    Curtir

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

    Curtir

Deixe um comentário

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

Logotipo do WordPress.com

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

Foto do Google

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

Imagem do Twitter

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

Foto do Facebook

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

Conectando a %s