• Nenhum resultado encontrado

Cria¸c˜ao dos Objectos Necess´arios ao Encaminhamento

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.