• Nenhum resultado encontrado

A Interface de Programac~ao de Aplicac~oes do S3L Multiponto

e capaz de rejeitar cotac~oes repetidas (relativas ao mesmo instante temporal de outras previamente recebidas) bem como de actualizar o historial de cotac~oes com valores menos recentes, mas que foram recebidos apos valores mais actuais.

Na proxima secc~ao, veremos que o valor do camponde uma mensagem S3L multiponto

recebida e acessvel atraves de um camporem n(remote n) da estrutura de dadosS3LMCtx,

que de ne o contexto de emiss~ao/recepc~ao de uma mensagem S3L multiponto. Desta forma, as aplicac~oes que necessitem de Sequenciac~ao de mensagens S3L multiponto t^em a sua disposic~ao a referida marca temporal.

6.3 A Interface de Programac~ao de Aplicac~oes do S3L Mul-

tiponto

Nesta secc~ao descrevem{se as extens~oes multiponto a Interface de Programac~ao de Apli- cac~oes do S3L ponto{a{ponto, inicialmente apresentada na secc~ao 5.3. As estruturas de dados e func~oes aqui introduzidas devem ser aplicadas em conjunc~ao com os procedi- mentos necessarios a utilizac~ao de sockets de Berkeley sobre IP Multicast. As extens~oes multiponto do S3L s~ao tambem descritas na secc~ao B.2 do ap^endice B, apresentando{se 29No protocoloInternet Group Management Protocol(IGMP) [Fen96], por exemplo, adopta{se um com-

portamento semelhante, quando ummulticast router em fase de arranque envia, para o grupo 224.0.0.1, duasmembership queriespraticamente seguidas.

na secc~ao B.2.8 do mesmo ap^endice exemplos concretos de um servidor e de um cliente S3L multiponto.

Tal como acontece no S3L ponto{a{ponto, a utilizac~ao das funcionalidades proporcio- nadas pelas extens~oes multiponto segue um roteiro bem de nido, que se divide em dois conjuntos de tarefas, em func~ao do papel a desempenhar:

 tarefas do produtor de mensagens S3L multiponto:

1. obtenc~ao de informac~ao que identi ca e caracteriza a entidade produtora; 2. inicializac~ao de um contexto S3L multiponto, especi cando{se o endereco IP

Multicast do grupo e identi cando{se o seu dono;

3. assemblagem da mensagem S3L multiponto com base no contexto inicializado em 2 (e que acaba por ser completamente de nido, em resultado de uma junc~ao implcita junto do dono do grupo S3L);

4. envio da mensagem assemblada para o grupo S3L, subgrupo de um determinado grupoIP Multicast, atraves da func~ao S3Lsendto;

5. repetic~ao das etapas 2, 3 e 4, com possvel reutilizac~ao dos contextos iniciali- zados na etapa 2 sempre que o grupo em causa e o seu dono se mantenham os mesmos;

 tarefas do consumidor de mensagens S3L multiponto:

1. obtenc~ao de informac~ao que identi ca e caracteriza a entidade consumidora; 2. inicializac~ao de um contexto S3L multiponto, especi cando{se o endereco IP

Multicast do grupo e identi cando{se o seu dono;

3. junc~ao explcita de umsocket de Berkeley ao grupoIP Multicast 30; 4. recepc~ao de uma mensagem S3L multiponto viaS3Lrecvfrom;

5. processamento da mensagem recebida com base no contexto inicializado em 2 (e que acaba por ser completamente de nido, em resultado de uma junc~ao implcita junto do dono do grupo S3L);

6. repetic~ao das etapas 2, 3, 4 e 5, com possvel reutilizac~ao dos contextos inicia- lizados na etapa 2 sempre que o grupo em causa e o seu dono se mantenham os mesmos, em cujo caso se dispensa tambem a repetic~ao da junc~aoIP Multicast efectuada em 3.

Das tarefas apresentadas, ressaltam algumas semelhancas com o modelo de utilizac~ao da API do S3L ponto{a{ponto. Nomeadamente, a obtenc~ao de informac~ao de \caracter pessoal" que caracteriza a entidade produtora ou consumidora de mensagens continua a constituir uma tarefa (a primeira) obrigatoria. As estruturas de dados e func~oes relacio- nadas com a manipulac~ao desse tipo de informac~ao foram ja apresentadas na secc~ao 5.3.1 do captulo anterior. As restantes tarefas lidam com alguns pormenores espec cos do S3L multiponto, pelo que as respectivas estruturas de dados e func~oes ser~ao objecto de discuss~ao nas proximas secc~oes.

6.3.1 Manipulac~ao de Contextos Multiponto Seguros

Um contexto multiponto de ne{se como uma estrutura de dados onde se concentra toda a informac~ao relevante a operac~ao de uma entidade como membro de um grupo S3L. E com base na informac~ao guardada nessa estrutura que uma entidade pode produzir mensagens S3L multiponto de acordo com as qualidades de servico de nidas pelo dono do grupo.

typedef struct {

time_t birthdate; /* ``data de nascimento'' da GIK */ char gik[32]; /* GIK */

} S3LMGikInfo; /* informacao relativa a uma GIK */ typedef struct {

u_char version; /* versao das extensoes multiponto do S3L */ char mipaddr[16]; /* endereco IP multicast do grupo */ time_t group_lifetime; /* tempo de vida do grupo */

time_t group_birthdate; /* ``data de nascimento'' do grupo */

char gik_file[UNIX_PATH_MAX]; /* ficheiro com a proxima versao da GIK */ S3LMGikInfo gik_array[S3LM_MAX_GIKS]; /* array circular de GIKs */ int gik_array_front; /* 1a posicao livre do array */

int gik_array_back; /* 1a posicao ocupada do array */ S3Lbool gik_array_full; /* estado (cheio/nao cheio) do array */ time_t gik_lifetime; /* tempo de vida de uma GIK */

time_t kp_kcis; /* intervalo de mudanca de Kp em segundos */ size_t kp_kcib; /* intervalo de mudanca de Kp em bytes */ char gikalg[64]; /* algoritmo de encriptacao de Kp */ char cryptalg[64];/* algoritmo de encriptacao dos dados */ car macalg[64]; /* algoritmo de producao do MAC */ char compalg[64]; /* algoritmo de compressao dos dados */ } S3LMGroupInfo;

Figura 6.13: Estruturas auxiliares S3LMGikInfoeS3LMGroupInfo.

A gura 6.14 apresenta a de nic~ao, em C, do tipo S3LMCtx, relativo a um contexto

S3L multiponto. A gura 6.13 apresenta outros tipos de dados auxiliares, entre os quais o tipoS3LMGroupInfo. O dono do grupo mantem, numa estrutura deste tipo, a informac~ao

que caracteriza o grupo. E precisamente esta informac~ao que e devolvida a um candi- dato ou membro numa con rmac~ao de (re)junc~ao, cando acessvel atraves do campo

group infodo contexto multipontoS3LMCtx. Portanto, a de nic~ao de um contexto so se

encontra concluda apos uma junc~ao ao grupo S3L. Todavia, antes dessa junc~ao, que ocor- re implicitamente durante a sntese ou analise de mensagens S3L multiponto (ver func~oes

S3LMmake message e S3LMopen message), e necessario colocar no contexto um conjunto

mnimo de informac~ao que permita levar a cabo, posteriormente, o referido processo de junc~ao. E esse o papel da func~ao S3LMinit S3LMCtx:

 void S3LMinit S3LMCtx (S3LMCtx *mctx, S3LPartieInfo *loc info,

typedef struct {

S3LPartieInfo *loc_info; /* informacao relativa `a entidade local */ char gowner_dname[SBUF_SIZE]; /* nome distinto X.500 do dono do grupo */ char gowner_ipaddr[16]; /* endereco IP do dono do grupo */

S3LMGroupInfo group_info; /* caracterizacao do grupo */

time_t loc_gik_birthdate; /* ``data de nascimento'' local da GIK mais recente */

size_t kp_counter; /* numero de bytes enviados com a ultima Kp */ time_t kp_birthdate; /* ``data de nascimento'' local da ultima Kp */ char kp[32]; /* ultima Kp gerada aleatoriamente */

struct timeval loc_n; /* marca temporal local */ struct timeval rem_n; /* marca temporal remota */

u_long delta; /* desvio maximo admissivel entre loc_n e rem_n */ } S3LMCtx;

Figura 6.14: EstruturaS3LMCtx.

texto multiponto mctx, actualizando os seus campos loc info, group info.mipaddr,gowner dnamee gowner ipaddr com o valor dos par^ametros

homologos da func~ao.

A API do S3L n~ao oferece mais func~oes de manipulac~ao de contextos multiponto. A inicializac~ao dos restantes campos ca a cargo dos mecanismos implcitos de (re)junc~ao ao grupo. A utilizac~ao de memoria estatica dispensa tambem uma func~ao de libertac~ao espec ca.

Existem, no entanto, dois campos cuja manipulac~ao directa podera ter interesse. A leitura do campo rem napos a recepc~ao de uma mensagem permitira aceder ao valor do

campondessa mensagem a m de proceder, por exemplo, a sua sequenciac~ao ou a detecc~ao

de repetic~oes. A escrita no campo delta de um valor positivo, antes do envio de uma

mensagem, constitui indicac~ao de que no destino esse campo devera ser usado na detecc~ao de ataques{de{repetic~ao, de uma forma analoga a das mensagens S3L ponto{a{ponto.

A reutilizac~ao de um contexto S3LMCtx e possvel desde que o grupo e o seu dono

se mantenham inalterados, uma vez que a reactualizac~ao do contexto ocorre, implcita e progressivamente,por necessidade.

6.3.2 Sntese e Analise de Mensagens S3L Multiponto

A semelhanca das mensagens do S3L ponto{a{ponto, o processamento de mensagens S3L multiponto e efectuado por func~oes espec cas, conforme se trate da assemblagem ou da desassemblagem dessas mensagens:

 S3Lbool S3LMmake message (char *buf in, u long len buf in,

char *buf out, u long *len buf out, S3LMCtx *mctx): sintetiza uma mensa-

gem S3L multiponto, com base nos dadosbuf in(de dimens~aolen buf in) e no con-

textomctx; a mensagem produzidae depositada embuf out, re ectindolen buf out

 S3Lbool S3LMopen message (char *buf in, u long len buf in,

char *buf out, u long *len buf out, S3LCtx *mctx): analisa, campo a cam-

po, uma mensagem S3L, fornecida em buf in; o contexto mctx recebe informac~ao

contextual resultante da analise da mensagem e de uma eventual (re)junc~ao ao gru- po durante esse processo; os dados recuperados da mensagem s~ao depositados em

buf oute a sua dimens~ao indicada atraves de len buf out.

A estrutura das mensagens S3L multiponto foi previamente introduzida na secc~ao 6.2.2. Aparte o trabalho de assemblagem e desassemblagem de mensagens desse tipo, estas func~oes levam a cabo execuc~oes do processo de (re)junc~ao ao grupo. As condic~oes que determinam, nestas func~oes, a execuc~ao implcita de (re)junc~oes ao grupo foram discutidas previamente na secc~ao 6.2.3.

6.3.3 Escrita e Leitura de Mensagens S3L Multiponto sobre Sockets As func~oes S3Lsendto e S3Lrecvfrom foram apresentadas, em primeira inst^ancia, na

secc~ao 5.3.4 do captulo anterior, optando{se, nesse contexto, por n~ao antecipar a sua relac~ao com o S3L multiponto. A utilizac~ao destas func~oes para enviar e receber mensa- gens S3L multiponto encapsuladas no campo de dados de pacotes UDP deriva do facto de que, no modelo de programac~ao de sockets de Berkeley, s~ao precisamente as primiti- vas sendtoe recvfrom as unicas primitivas de escrita e leitura que operam com sockets

IP Multicast. A utilizac~ao das func~oesS3Lrecvfrom e S3Lsendtoassegura, assim, seme-

lhancas sintacticas e sem^anticas com as respectivas primitivas de Berkeley.

O prototipo nal que a seguir se apresenta para as func~oes S3Lsendto e S3Lrecvfromapenas difere do apresentado anteriormente na secc~ao 5.3.4 pela utilizac~ao do

tipovoid *na tipi cac~ao do par^ametro do contexto, sendo internamente feitas convers~oes

paraS3LCtx * ouS3LMCtx *, conforme o caso:

 int S3Lsendto (int fd, void *msg, int len, unsigned int flags,

const struct sockaddr *to, int tolen, void *ctx);

 int S3Lrecvfrom (int fd, char *buf, int len, unsigned int flags,

struct sockaddr *from, int *fromlen, void *ctx);

Internamente, cada uma desta func~oes invoca procedimentos ponto{a{ponto (S3Lmake message, S3Lopen message) ou multiponto (S3LMmake message, S3LMopen message), em func~ao do tipo do endereco IP encerrado no campo sin addr

dos par^ametros to oufrom, c.f. o caso.