Detalhes da política

Uma política da WAN consiste em regras que controlam a geração de tráfego do eDirectoryTM . Elas são textos armazenados como um valor de propriedade do eDirectory no objeto Servidor NetWare®, no objeto Área da LAN ou em ambos.

Uma Política da WAN contém três seções: Declaração, Seletor e Provedor.

Estrutura da política da WAN

Seção Declaração
A seção Declaração de uma política contém definições de variáveis locais e das variáveis provenientes de um pedido do cliente.  Essas definições são usadas dentro das seções Seletor e Provedor. Essas variáveis são armazenadas com as variáveis definidas pelo sistema.

As declarações de variável são separadas por um ponto-e-vírgula. Várias declarações para o mesmo tipo podem ser combinadas em uma linha ou quebradas na próxima linha; elas não são sensíveis a quebra de linha. A seguir é apresentado um exemplo de uma seção de Declaração:

REQUIRED INT R1;
REQUIRED TIME R2;
REQUIRED BOOLEAN R3,R4;
REQUIRED NETADDRESS R5,R6;
OPTIONAL INT P1 := 10;
OPTIONAL BOOLEAN := FALSE;
LOCAL INT L1 :=10;
LOCAL INT L2;
LOCAL TIME L3;
LOCAL BOOLEAN L4 :=TRUE, L5 :=FALSE;
LOCAL NETADDRESS L6;

As declarações necessárias e opcionais são específicas a um determinado tipo de tráfego. As políticas que não contiverem as variáveis necessárias não serão executadas. As declarações opcionais devem ter um valor para fornecer um padrão se nenhum valor for informado. O Gerenciador de tráfego da WAN fornece símbolos de sistema (variáveis predefinidas) para serem usados em todos os tipos de tráfego.

Cada declaração consiste em três partes: escopo, tipo e uma lista de  nome/pares de valor opcional.

Escopos válidos são REQUIRED, OPTIONAL, LOCAL e SYSTEM.

Os tipos válidos são  INT, BOOLEAN, TIME ou NETADDRESS. Você não pode designar valores aos tipos TIME e NETADDRESS na seção Declaração. Se esses tipos ainda não tiverem um valor, eles receberão os valores nas seções Seletor ou Provedor. Somente os tipos simples são inicializados na seção Declaração.

Os valores em uma declaração devem ser constantes em vez de variáveis ou expressões. Desta forma, a declaração  "LOCAL INT L2 := L3;" não é permitida. Um valor que inicia uma variável na seção Declaração pode ser mudado nas seções Seletor e Provedor da política.

Seção Seletor
A seção Seletor de uma política começa com a palavra-chave SELECTOR e termina com END. As seções Seletor são avaliadas para determinar quais políticas carregadas serão usadas.

As seções Seletor de todas as políticas carregadas atualmente são executadas para determinar quais políticas têm maior peso. Quando avaliada, a seção retorna um peso entre 0-100, em que 0 significa não use esta política, 1-99 significa use esta política se nenhuma outra retornar um valor maior e 100 significa use esta política.

O resultado de uma seção Seletor é dado em uma declaração RETURN. Se nenhuma declaração RETURN for feita, o valor padrão 0 será retornado . Um exemplo da seção Seletor é o seguinte:

SELECTOR
RETURN 49;
END

Quando as seções Seletor de várias políticas forem avaliadas, mais de uma política deve retornar o mesmo valor. Nesse caso, não estará determinado qual política será selecionada. Se todo o restante for igual, uma política de servidor substituirá uma política da WAN.

Seção Provedor
A seção Provedor começa com a palavra-chave PROVIDER e termina com END.  O corpo da seção Provedor consiste em uma lista de Declarações.

O resultado dessa lista de Declarações deve ser um valor que representa a sugestão da política para SEND ou DONT_SEND.

O resultado de uma seção Provedor é dado em uma declaração RETURN. Se não for feita uma declaração RETURN, um valor padrão SEND será retornado.

A seguir está um exemplo da seção Provedor:

PROVIDER
RETURN SEND;
END

Construções utilizadas nas declarações de políticas
As declarações e as construções a seguir podem ser utilizadas, exceto nas situações especificadas, nas seções Seletor e Provedor. As construções usadas na seção Declarações não estão descritas aqui.

Comentários
Os comentários podem ser realçados utilizando /* no começo da linha e */ no final.  Por exemplo:

/* Isso é um comentário.  */

Os comentários também podem ser reconhecidos por  // no fim da linha anterior a um comentário. Por exemplo:

IF L2 > L3 THEN //Este é um comentário.

Declaração If-Then
As declarações IF-THEN são usadas para executar um bloco de declarações condicionalmente. Exemplos:
IF <expressão boleana> THEN
 <declarações>
END

IF <Expressão boleana> THEN
 <declarações>
ELSE
 <declarações>
END

IF <Expressão boleana> THEN
 <declarações>
ELSIF <Expressão boleana> THEN
 <declarações>
END

IF <Expressão boleana>THEN
Essa é a primeira cláusula em uma declaração IF-THEN. A expressão Booleana é avaliada por um resultado TRUE ou FALSE. Se for TRUE, as declarações imediatamente seguintes são executadas. Se for FALSE, a execução pula para a próxima declaração ELSE, ELSIF ou END correspondente.

ELSE
Esta declaração marca o início das declarações que serão executadas se todas as declarações IF-THEN e ELSIF anteriores resultarem em FALSE.  Por exemplo:

IF <Expressão boleana> THEN
      <declarações>
ELSIF <Expressão boleana> THEN
      <declarações>
ELSIF <Expressão boleana> THEN
      <declarações>
ELSE
      <declarações>
END

ELSIF<Expressão booleana> THEN
A expressão booleana será avaliada se a declaração IF-THEN anterior retornar um FALSE. A declaração ELSIF é avaliada para um resultado TRUE ou FALSE. Se for TRUE, as declarações que a seguem são executadas. Se for FALSE, a execução pula para a próxima declaração ELSE, ELSIF ou END correspondente. Por exemplo:

IF <Expressão boleana> THEN
      <declarações>
ELSIF <Expressão boleana> THEN
      <declarações>
ELSIF <Expressão boleana> THEN
      <declarações>
END

END
A declaração END termina uma construção IF-THEN.

Retornar
O comando RETURN dá os resultados das seções Seletor e Provedor.

Seletor
Em uma seção Seletor, a declaração RETURN fornece o resultado inteiro usado como um peso para a política. RETURN designa um peso de política entre 0-100, em que 0 significa não use esta política, 1-99 significa use esta política se nenhuma outra retornar um valor maior e 100 significa use esta política. Se não for feita uma declaração RETURN em uma seção Seletor, o valor padrão 0 será retornado.

Um ponto-e-vírgula é necessário para terminar a declaração. Por exemplo:

RETURN 49;
RETURN L2;
RETURN 39+7;

Provedor
Em uma seção Provedor, a declaração RETURN fornece o resultado SEND ou DONT_SEND. Se não for feita uma declaração RETURN, um valor padrão SEND será retornado.

Um ponto-e-vírgula é necessário para terminar a declaração. Exemplos:

RETURN SEND;
RETURN DONT_SEND;
RETURN L1;

Designação
A declaração de designação muda o valor de um símbolo usando os caracteres :=. A variável definida ou a variável do sistema é declarada primeiro e depois := com um valor, variável ou operação seguinte. Por exemplo:

<variável>.<campo>:=<expressão>;
<variável>:=<expressão>;

t1 e t2 são do tipo TIME, i1 e i2 são tipo INTEGER, b1, b2 são designações Booleanas válidas:
  t1 := t2;
  b1 := t1 < t2;
  i1 := t1.mday - 15;
  b2 := t2.ano < 2000

designações inválidas:
  b1 := 10 < i2 < 12;
        (10 < i2) é BOOLEAN, e um Boleano não pode ser comparado a um INTEGER.
         Você deve usar b1 := (10 < i2) AND (i2 < 12); em vez disso.
  b2 := i1;
        b2 é BOOLEAN, i1 é INTEGER.  Tipos incompatíveis.
        Em vez disso, use b2 := i1 > 0;.

A declaração de designação deve ser terminada com um ponto-e-vírgula.

É executada uma verificação de tipo exato. Você não tem permissão para designar um INT a uma variável TIME.

Operadores aritméticos
Você pode incluir operadores aritméticos em declarações de designações, declarações RETURN ou em construções IF. Os operadores válidos são:

Adição (+)
Subtração (-)
Divisão (/)
Multiplicação (*)
Módulo (MOD)

Use somente os tipos de variáveis INT com operadores aritméticos. Não use os tipos de variáveis TIME, NETADDRESS e BOOLEAN em expressões aritméticas.

Evite as operações que resultem em valores fora da faixa -2147483648 a +2147483648 ou divisão por zero.

Operadores de relação
Você pode usar operadores de relação em construções IF. Os operadores válidos são:

Igual a (=)
Diferente de (<>)
Maior que (>)
Maior que ou igual a (>=)
Menor que (<)
Menor que ou igual a(<=)

Você pode usar quaisquer operadores de relação com os tipos de variáveis TIME e INT. Você pode utilizar também <> e = com tipos de variáveis NET ADDRESS e BOOLEAN.

Operadores lógicos
Os operadores válidos são:

AND
OR
NOT
Menor que (<)
Maior que
Igual a (=)

Operadores de bitwise
Você pode usar operadores de bitwise em tipos de variáveis INT para retornar um valor de número inteiro. Os operadores válidos são:

BITAND
BITOR
BITNOT

Operações complexas
As seguintes  regras de precedência são executadas durante o processamento de expressões complexas. Os operadores com a mesma ordem de precedência são processados da esquerda para a direita. A ordem é a seguinte:

Parênteses
Unário (+/-)
BITNOT
BITAND
BITOR
Multiplicação, divisão, MOD
Adição, subtração
Relação (>, >=, <, <=, =)
NOT
AND
OR

Se você não tiver certeza da precedência, use parênteses. Por exemplo, se A, B e C forem números inteiros ou variáveis, A<B<C não é permitido. A<B retornaria um valor Boleano, não um valor inteiro, que não pode ser comparado a um inteiro C. Entretanto, (A<B) AND (B<C) estaria sintaticamente correto.

PRINT
Você pode usar declarações PRINT para enviar valores de texto e símbolo para a tela de exibição do Gerenciador de tráfego da WAN do servidor e para o arquivo de registro.

As declarações PRINT podem ter qualquer número de argumentos que sejam strings literais, nomes de símbolo ou membros, valores inteiros ou Boleanos, separados por vírgulas.

Você deve colocar as strings literais entre aspas ("). As declarações PRINT devem terminar com um ponto-e-vírgula (;). Por exemplo:

PRINT "INT=",10,"BOOL=",TRUE,"SYM=",R1;
As variáveis TIME e NETADDRESS usam declarações de impressão formatadas. Os símbolos TIME são impressos da seguinte maneira:

m:d:a h:m

As variáveis de NETADDRESS são impressas da seguinte maneira:

Tipo tamanho dados

Tipo é IP ou IPX, tamanho é o número de bytes e dados é a string do endereço hexadecimal.

Um símbolo de marca registrada (®, TM, etc.) indica uma marca registrada da Novell. Um asterisco (*) indica uma marca registrada de terceiros. Para obter mais informações sobre marcas registradas, consulte Informações legais.