Información sobre la directiva

Una directiva WAN se compone de reglas que controlan la generación de tráfico de eDirectoryTM. Se trata de texto almacenado como valor de la propiedad de eDirectory en un objeto Servidor NetWare®, un objeto Área de LAN o en ambos.

Una directiva WAN contiene tres secciones: Declaración, selector y proveedor.

Estructura de la directiva WAN

Sección de declaración
La sección de declaración de una directiva contiene definiciones de variables locales y de las que provienen de la petición de un cliente.  Estas definiciones se emplean en las secciones del selector y del proveedor. Estas variables se almacenan junto con las variables definidas por el sistema.

Las declaraciones de variables se separan mediante un punto y coma. Es posible combinar varias declaraciones del mismo tipo en una línea o ajustarlas a la siguiente línea; no distinguen líneas. A continuación, se muestra una Sección de declaración de ejemplo:

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;

Las declaraciones requeridas y opcionales son específicas para un tipo de tráfico concreto. Las directivas que no contienen las variables requeridas no se ejecutarán. Las declaraciones opcionales deben poder proporcionar un valor por defecto si no les pasan ninguno. El Gestor de tráfico WAN proporciona símbolos del sistema (variables predefinidas) para utilizarlas con todos los tipos de tráfico.

Cada declaración consta de tres partes: ámbito, tipo y una lista de  pares de nombre/valor opcional.

Los ámbitos válidos son REQUIRED, OPTIONAL, LOCAL y SYSTEM.

Los tipos válidos son  INT, BOOLEAN, TIME o NETADDRESS. En la Sección de declaración no puede asignar valores a los tipos TIME ni NETADDRESS. Si estos tipos no tienen ningún valor, reciben sus valores en las secciones del selector o del proveedor. En la Sección de declaración sólo se inicializan los tipos sencillos.

Los valores de una declaración deben ser constantes en lugar de variables o expresiones. Así pues, no se permite la declaración  "LOCAL INT L2 := L3;". En las secciones del selector y del proveedor de la directiva es posible cambiar un valor que inicializa una variable en la sección de declaración.

Sección del selector
La Sección del selector de una directiva empieza con la palabra clave SELECTOR y termina con la palabra clave END. La Sección del selector se evalúa para determinar la directiva cargada que se va a utilizar.

Las secciones del selector de todas las directivas cargadas en estos momentos se ejecutan para determinar la directiva que tiene mayor peso. Cuando se ha evaluado, la sección devuelve un valor entre 0 y 100, donde 0 significa que no utiliza esta directiva, de 1 a 99 significa que se utiliza esta directiva si ninguna otra directiva devuelve un valor superior y 100 significa que se utiliza esta directiva.

El resultado de una Sección del selector se proporciona en una declaración RETURN. Si no se realiza una declaración RETURN, se devolverá un valor por defecto 0. A continuación, se proporciona una Sección del selector de ejemplo:

SELECTOR
RETURN 49;
END

Cuando se evalúan las secciones del selector de varias directivas, muchas de ellas pueden devolver el mismo valor. En este caso, la directiva que se seleccionará no está determinada. En el caso de ser iguales, una directiva de servidor anularía una directiva WAN.

Sección del proveedor
La Sección del proveedor de una directiva empieza con la palabra clave PROVIDER y termina con la palabra clave END.  El cuerpo de dicha sección está compuesto por una lista de declaraciones.

El resultado de esta lista de declaraciones deber ser un valor que representa la sugerencia de directivas de SEND o DONT_SEND.

El resultado de una Sección del proveedor se proporciona en una declaración RETURN. Si no se realiza una declaración RETURN, se devolverá un valor por defecto SEND.

A continuación, se proporciona una Sección del proveedor de ejemplo:

PROVIDER
RETURN SEND;
END

Construcciones usadas en sentencias de directivas
En las secciones del selector y del proveedor es posible utilizar las siguientes sentencias y construcciones, excepto las indicadas. Aquí no se describen las construcciones usadas en la sección de declaration.

Comentarios
Los comentarios se pueden desactivar con /* al principio de la línea y */ al final.  Por ejemplo:

/* Esto es un comentario.  */

Los comentarios también pueden distinguirse por  // al final de la línea antes de un comentario. Por ejemplo:

IF L2 > L3 THEN //Esto es un comentario.

Sentencia If-Then
Las sentencias IF-THEN se usan para ejecutar un bloque de declaraciones de forma condicional. Ejemplos:
IF <expresión booleana> THEN
 <declaraciones>
END

IF <expresión booleana> THEN
 <declaraciones>
ELSE
 <declaraciones>
END

IF <expresión booleana> THEN
 <declaraciones>
ELSIF <expresión booleana> THEN
 <declaraciones>
END

IF <expresión booleana>THEN
Ésta es la primera cláusula de una sentencia IF-THEN. La expresión booleana se evalúa para obtener un resultado TRUE o FALSE. Si es TRUE, se ejecutan las declaraciones que están a continuación. Si es FALSE, la ejecución pasa a la siguiente declaración ELSE, ELSIF o END correspondiente.

ELSE
Esta declaración marca el principio de las declaraciones que se ejecutan si todas las sentencias IF-THEN y ELSIF anteriores dan como resultado FALSE.  Por ejemplo:

IF <expresión booleana> THEN
      <sentencias>
ELSIF <expresión booleana> THEN
      <sentencias>
ELSIF <expresión booleana> THEN
      <sentencias>
ELSE
      <sentencias>
END

ELSIF <expresión booleana> THEN
La expresión booleana se evalúa si la declaración IF-THEN anterior devuelve FALSE. La declaración ELSIF se evalúa para obtener un resultado TRUE o FALSE. Si es TRUE, se ejecutan las declaraciones que están a continuación. Si es FALSE, la ejecución pasa a la siguiente declaración ELSE, ELSIF o END correspondiente. Por ejemplo:

IF < expresión booleana> THEN
      <sentencias>
ELSIF <expresión booleana> THEN
      <sentencias>
ELSIF <expresión booleana> THEN
      <sentencias>
END

END
La declaración END termina una construcción IF-THEN.

b>RETURN
El comando RETURN ofrece el resultado de las secciones del selector y del proveedor.

Selector
En una sección del selector, la declaración RETURN proporciona el resultado entero utilizado como peso de la directiva. RETURN asigna un peso de directiva entre 0 y 100, donde 0 significa que no utiliza esta directiva, de 1 a 99 significa que se utiliza esta directiva si ninguna otra directiva devuelve un valor superior y 100 significa que se utiliza esta directiva. Si no se realiza una declaración RETURN en una Sección del selector, se devolverá un valor por defecto 0.

Se requiere un punto y coma para terminar la declaración. Por ejemplo:

RETURN 49;
RETURN L2;
RETURN 39+7;

Proveedor
En una Sección del proveedor, la declaración RETURN proporciona el resultado SEND o DONT_SEND. Si no se realiza ninguna declaración RETURN, se devolverá un valor por defecto SEND.

Se requiere un punto y coma para terminar la declaración. Ejemplos:

RETURN SEND;
RETURN DONT_SEND;
RETURN L1;

Asignación
La declaración de asignación cambia el valor de un símbolo mediante los caracteres :=. Primero se indica el estado de la variable definida o la variable del sistema; a continuación, := con un valor, una variable o la operación siguiente. Por ejemplo:

<variable>.<campo>:=<expresión>;
<variable>:=<expresión>;

t1 y t2 son de tipo TIME, i1 e i2 son de tipo INTEGER, b1 y b2 son asignaciones booleanas válidas:
  t1 := t2;
  b1 := t1 < t2;
  i1 := t1.mday - 15;
  b2 := t2.year < 2000

son asignaciones no válidas:
  b1 := 10 < i2 < 12;
        (10 < i2) es BOOLEAN, y un valor booleano no se puede comparar con un INTEGER.
         En su lugar, podría utilizar b1 := (10 < i2) AND (i2 < 12);.
  b2 := i1;
        b2 es BOOLEAN, i1 es INTEGER.  Tipos incompatibles.
        En su lugar, podría utilizar b2 := i1 >.

La declaración de asignación debe terminar con un punto y coma.

Se ejecuta una verificación estricta de tipo. No es posible asignar un INT a una variable TIME.

Operadores aritméticos
Puede incluir operadores aritméticos en declaraciones de asignación, declaraciones RETURN o construcciones IF. Los operadores válidos son:

Suma (+)
Resta (-)
División (/)
Multiplicación (*)
Módulo (MOD)

Utilice sólo tipos de variables INT con operadores aritméticos. No utilice tipos de variables TIME, NETADDRESS y BOOLEAN en expresiones aritméticas.

Evite operaciones que den como resultado valores fuera del rango -2147483648 a +2147483648, o división por cero.

Operadores relacionales
En construcciones IF puede utilizar operadores relacionales. Los operadores válidos son:

Igual que (=)
Distinto de (<>)
Mayor que (>)
Mayor o igual que (>=)
Menor que (<)
Menor o igual que (<=)

Puede utilizar cualquier operador relacional con tipos de variables TIME y INT. También puede utilizar <> y = con tipos de variables NET ADDRESS y BOOLEAN.

Operadores lógicos
Los operadores válidos son:

AND
OR
NOT
Menor que (<)
Mayor que (>)
Igual que (=)

Operadores de comparación bit a bit
Puede utilizar operadores de comparación bit a bit en tipos de variables INT para devolver un valor entero. Los operadores válidos son:

BITAND
BITOR
BITNOT

Operaciones complejas
Cuando se procesan expresiones complejas se exigen las siguientes  reglas de prioridad. Los operadores con el mismo orden de prioridad se procesan de izquierda a derecha. El orden es el siguiente:

Paréntesis
Unario (+/-)
BITNOT
BITAND
BITOR
Multiplicación, división, MOD
Suma, resta
Relacional (>, >=, <, <=, =)
NOT
AND
OR

Si no está seguro de la prioridad, use paréntesis. Por ejemplo, si A, B y C son enteros o variables, no se permite A<B<C. A<B devolvería un valor booleano, no un valor entero, que no es posible comparar con un entero C. No obstante, (A<B) AND (B<C) sería correcto sintácticamente.

PRINT
Puede utilizar declaraciones PRINT para enviar valores de texto y símbolos a la pantalla de visualización del Gestor de tráfico WAN del servidor y al archivo de registro.

Las sentencias PRINT pueden tener cualquier número de argumentos que pueden ser cadenas literales, nombres de símbolos o miembros, valores enteros o valores booleanos, separados por comas.

Las cadenas literales debe ponerlas entre comillas dobles ("). Las declaraciones PRINT deben terminar con un punto y coma (;). Por ejemplo:

Las variables PRINT "INT=",10,"BOOL=",TRUE,"SYM=",R1;
TIME y NETADDRESS utilizan declaraciones de impresión con formato. Los símbolos TIME se imprimen de la forma siguiente:

d:m:a h:m

Las variables NETADDRESS se imprimen de la forma siguiente:

Tipo longitud datos

Tipo es IP o IPX, longitud es el número de bytes y datos es una cadena de dirección hexadecimal.

Un símbolo de marca comercial (®, TM, etc.) indica una marca comercial de Novell. Un asterisco (*) indica una marca comercial de otro fabricante. Para obtener información sobre marcas comerciales, consulte Información legal.