Network Simulator-2
A.4.2 Cria¸c˜ao dos Objectos Necess´arios ao Encaminhamento
O momento em que os diversos objectos apresentados na figura A.5 s˜ao criados difere.
O primeiro objecto a ser criado ´e a routingTable , que ´e um objecto da clas-se RouteLogic, inclu´ıdo na classe Simulator. Este objecto pode ser criado em dois momentos distintos. Se existir, no c ´odigo que define a configurac¸˜ao da rede, uma chamada ao procedimento rtprotoda classe Simulator, como por exemplo
$ns rtproto LS
ent˜ao, a criac¸˜ao ´e feita imediatamente.
Se n˜ao (e ser´a o caso que se d´a quando ´e usado um protocolo de encaminhamento est´atico) a criac¸˜ao ´e protelada para o momento em que a simulac¸˜ao se inicia (procedi-mentorun da classeSimulator). Em qualquer dos casos, a criac¸˜ao da routingTa-ble ´e feita por um procedimento chamado get-routelogicfgda classe Simula-tor.
Outra das tarefas do procedimentortproto ´e o de registar todos os n ´os onde o protocolo deve ser instalado. Para isso a classe Simulatortem uma vari´avel vecto-rial,rtprotos , que ´e indexada pelos nomes dos protocolos e que armazena em cada posic¸˜ao uma lista de todos os n ´os onde o protocolo deve ser instalado.
J´a depois de criada aroutingTable ´e invocado o procedimentoconfigurefg
da classeRouteLogic(tamb´em no procedimentoSimulator run), que percorre to-do o vector rtprotos , se este existir, e invoca para cada protocolo que indexa es-te vector, o procedimento est´atico de inicializac¸˜ao respectivo, chamado init-allfg. Isto permite aos diversos protocolos de encaminhamento fazer as suas inicializac¸ ˜oes globais. Se o protocolo em causa for o LS, o prot ´otipo deste procedimento ser´a:
Agent/rtProto/LS proc init-all args
Emargs ´e passada a lista dos n ´os onde deve ser instalado o protocolo, lista essa que ´e o valor armazenado no vectorrtprotos . Dito de outra forma a lista indica em que n ´os ´e que devem ser criados os agentes desse protocolo.
agen-te. Este procedimento comec¸a por invocar o procedimento est´atico hom ´onimo da clas-sertObject, que para cada um dos n ´os fornecidos emargsvai instalar um objecto da classertObjectse este ainda n˜ao existir.
Depois disso, e ainda no procedimento init-allfg do rtObject, s˜ao calcula-dos e instalacalcula-dos os caminhos mais curtos atrav´es duma chamada ao procedimento
compute-routesdortObject (voltaremos a estes assunto mais adiante). Note-se que o mais que se consegue saber neste ponto ´e o caminho para os vizinhos imedia-tos, atrav´es do protocolo Direct, at´e porque os pr ´oprios agentes protocolares podem n˜ao existir, j´a que s ´o s˜ao criados a seguir, al´em dos agentes protocolares de outros protocolos, que podem ainda nem ter sido inicializados com o mesmo procedimento
init-allfg.
Terminado o init-allfg dortObject, o init-allfg do agente vai criar um agente em cada um dos n ´os da lista, com o procedimento add-protofg do rtOb-ject, j´a garantidamente existente em cada n ´o. As tabelas A.1 e A.2 resumem as se-quˆencias de procedimentos que acab´amos de descrever. A primeira das duas tabelas exp ˜oe a sequˆencia que ocorre na fase de configurac¸ ˜ao, enquanto que na segunda tabe-la est´a descrita a sequˆencia que ocorre j´a no procedimento run do simulador (classe
Simulator).
No ficheiro de configurac¸ ˜ao da re-de
$ns rtproto nome
Simulator rtproto ...
[$self get-routelogic] register nome Simulator
get-routelogic ...
Devolve aroutingTable ou cria-a se n˜ao existir.
RouteLogic regis-ter ...
adiciona o protocolo de nome (nome) ao vector rtpro-tos , de forma que rtprotos (nome) = lista dos n ´os onde deve correr o protocolonome.
RouteLogic confi-gure
foreach p [array names rtprotos ] f
Agent/rtProto/$p init-all $rtprotos ($p) g
Para todos os protocolos chama-se o procedimento
init-allfg.
Agent/rtProto/nome proc init-all
eval rtObject init-all $nodes-list; [$no-de rtObject?] add-proto nome $node
Chama o procedimento init-allfg da classe rtOb-ject. Para cada n ´o adiciona um objecto do protocolo designado pornome.
rtObject proc init-all args
Instala em cada n ´o (presente na listaargs) um novo ob-jectortObject. Chamacompute-routespara instalar os caminhos mais curtos.
rtObject instproc proc add-proto proto no
Cria um novo agente do protocolo dado no n ´o dado.
Tabela A.2: Criac¸˜ao dos objectos de encaminhamento — fase de execuc¸˜ao
A.4.3 Inicializa¸c˜ao
Depois de criados todos os objectos necess´arios ao encaminhamento, o processo n˜ao fica terminado, porque h´a, ainda, que calcular os caminhos e introduzir os resulta-dos nos classificadores resulta-dos n ´os. Antes desse momento n˜ao ´e poss´ıvel `a rede funcionar em pleno, j´a que os n ´os desconhecem o caminho para a maior parte dos destinos, ex-ceptuando os seus vizinhos.
Se voltarmos atr´as `a figura A.1, verificamos que na sequˆencia n ´o-ligac¸˜ao-n ´o, s ´o o ´ultimo elo est´a ligado, uma vez que a maior parte das sa´ıdas dos n ´os ainda permane-cem em aberto.
´E importante referir a existˆencia dum protocolo chamado Direct, que ´e instala-do em toinstala-dos os n ´os, sempre que ´e criainstala-do um rtObject. Mais precisamente, ´e dentro de cada construtor da classe rtObject (e como j´a vimos existem m ´ultiplas instˆancias desta classe), ou seja, dentro do procedimentoinit, que ´e criado o agente
Agent/rtProto/Direct, para instalar no mesmo n ´o onde vai ser instalado o objec-tortObject. Estes agentes conhecem sempre o caminho para os vizinhos directos do n ´o em que s˜ao instalados, pelo que o n ´o apresenta sempre conectividade, pelo menos, com os seus vizinhos. Este facto ´e essencial, para que protocolos de encaminhamento
distribu´ıdos como s˜ao o DV e o LS possam iniciar os procedimentos necess´arios ao seu funcionamento, que passam por enviar mensagens para os seus vizinhos directos.
Vimos j´a, ent˜ao, que o c´alculo dos caminhos feito por cadartObject ´e efectuado logo ap ´os a sua criac¸˜ao. Nesta fase, s ´o s˜ao considerados os caminhos para os vizinhos obtidos a partir dos agentes rtProto/Direct. Veremos de seguida como ´e que s˜ao depois considerados os outros protocolos de encaminhamento, quando ´e que os caminhos s˜ao recalculados e onde ´e que os classificadores dos n ´os s˜ao preenchidos. Para fazer essa descric¸˜ao e sempre que acharmos necess´ario particularizar vamos usar o protocolo LS.