Qualquer versão superior a ns-2.1b8 possui os requisitos necessários. Utilizar a última versão disponível à qual se possa aplicar o patch PIM-SM. As versões ns-2.28 e ns-2.29 são as mais recentes e funcionam bem no Windows com http://x.cygwin.com/.
A instalação actual dos laboratórios resulta da seguinte sequência de comandos:
# cd /usr/local # wget http://www.isi.edu/nsnam/dist/ns-allinone-2.29.tar.gz # zcat ns-allinone-2.29.tar.gz | tar xvf - # chown -R root.root ns-allinone-2.29 # cd ns-allinone-2.29 # wget http://marco.uminho.pt/~joao/pim-ns2/patch-2.29.pim.gz # wget http://marco.uminho.pt/disciplinas/ST/nam-1.11.patch # gunzip patch-2.29.pim.gz # cd ns-2.29 # patch -p1 < ../patch-2.29.pim # cd ../nam-1.11 # patch < ../nam-1.11.patch # cd .. # ./install # cd ns-2.29 # make install # cd ../nam-1.11 # make install
O Nuno Carvalho, disponibilizou no servidor gil os pacotes ns e nam (bem como as suas dependências) compilados para Ubuntu 5.10 i386 e powerpc, e também as sources seguindo a filosofia desta distribuição. Todos os pacotes do ns já incluem o patch com o módulo PIM-SM. Partiu de sources debianzadas pelo Andre Herm disponibilizadas aqui.
Instalação do ns2 com o módulo PIM-SM, em ubuntu i386 e powerpc:
- Acrescentar as seguintes linhas ao ficheiro /etc/apt/sources.list:
# ns deb ftp://ftp.gil.di.uminho.pt/pub/users/knocker/ubuntu breezy ns2- Actualizar lista de pacotes disponíveis:
$ apt-get update- Instalar os pacotes ns e nam:
$ apt-get install ns nam
A implementação do PIM-SM para o NS-2 que está disponível na forma de patch deve ser previamente acrescentada ao simulador:
- Descarregue e instale o patch com o módulo PIM-SM. Use o wget para evitar problemas na descarga do patch:
% wget http://marco.uminho.pt/~joao/pim-ns2/patch-2.28.pim.gz % wget http://marco.uminho.pt/~joao/pim-ns2/patch-2.29.pim.gz- Instale o patch:
% gunzip patch-2.28.pim.gz % mv patch-2.28.pim ns-allinone-2.28/ns-2.28 % patch -p1 < patch-2.28.pim- (Re)Compile o NS-2:
% ./configure % make depend % makeou, se é a primeira instalação:
% cd .. (para directoria principal ns-allinone-2.28) % ./install- Recomenda-se que use a script pim-sim.tcl que é mais actual (e usa cores!).
Este patch também corrige o estoiro no dump-routes.
Ao simular uma falha de um link, ocorre um erro do género:
ns: _o528 recv-update 2 233: can't unset "active_": no such variable while executing "unset active_" (procedure "_o603" line 9) (Classifier/Replicator/Demuxer reset line 9) invoked from within "$r reset"Este erro já está corrigido na nova versão do patch PIM-SM, mas se precisar corrigir apenas este erro (por exemplo por ter aplicado uma versão mais antiga do patch PIM) basta aplicar este patch:
- Descarregar e descompactar o patch:
% wget http://marco.uminho.pt/disciplinas/ST/patch-active.gz % gunzip patch-active.gz- Aplicar o patch às sources do NS-2:
% cd ns-2.28 % patch -p1 < patch-active- Recompilar o NS-2:
% make
Ao imprimir a tabela de encaminhamento multicast usando o dump-routes ocorre um erro do género:
ns: _o10 dump-routes file5: expected integer but got "x" while executing "format "\t%5s\t %s\t\t%d\t0x%x\t%s\t\t%s" $reps($ent) $active $s $g $iif_node_id $dest" (procedure "_o362" line 43) (McastProtocol dump-routes line 43) (...)Este erro já está corrigido na nova versão do patch PIM-SM, mas se precisar corrigir apenas este erro (por exemplo por ter aplicado uma versão mais antiga do patch PIM) basta aplicar este patch:
- Descarregar e descompactar o patch:
% wget http://marco.uminho.pt/disciplinas/ST/patch-dump-routes.gz % gunzip patch-dump-routes.gz- Aplicar o patch às sources do NS-2:
% cd ns-2.28 % patch -p1 < patch-dump-routes- Recompilar o NS-2:
% make
Nalguns sistemas, como por exemplo no Windows com cygwin, o NAM dá um erro de compilação do género:
agent.h:73: error: expected `0' before "" agent.h:73: error: invalid initializer for virtual method `virtual void Agent::findClosestCornertoPoint(double, double, double&, double&) const'Descarregue e aplique o patch nam-1.11.patch:
% cd ns-allinone-2.28/nam-1.11 % wget http://marco.uminho.pt/disciplinas/ST/nam-1.11.patch % patch < nam-1.11.patch % makeAlternativamente, pode simplesmente trocar o NULL por 0 na linha 73 do ficheiro agent.h que é exactamente o que o patch faz...