Une règle WAN est constituée de différentes règles qui contrôlent la génération du trafic eDirectoryTM. Elles se présentent sous forme de texte et sont stockées en tant que valeur de la propriété eDirectory d'un objet Serveur NetWare® et/ou d'un objet Zone LAN.
Une règle WAN se compose de trois sections : Declaration, Selector et Provider.
Structure d'une règle WAN
Section Declaration
La section Declaration d'une règle contient les définitions des variables locales et des variables issues d'une requête client. Ces définitions sont utilisées dans les sections Selector et Provider. Ces variables sont enregistrées avec les variables définies par le système.Les déclarations de variables sont séparées par un point-virgule. Vous pouvez combiner sur une même ligne plusieurs déclarations pour le même type ou passer à la ligne suivante ; le nombre de lignes est indifférent. Vous trouverez cidessous un exemple de section Declaration :
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;Chaque type de trafic dispose de ses propres déclarations obligatoires et facultatives. Les règles ne contenant pas les variables requises ne seront pas appliquées. Les déclarations facultatives doivent disposer d'une valeur qui sert de valeur par défaut si aucune valeur n'est transmise. Le gestionnaire de trafic WAN fournit des symboles système (variables prédéfinies) à utiliser avec tous les types de trafic.
Chaque déclaration se compose de trois parties : l'étendue, le type et la liste des paires nom/valeur facultative.
Les étendues valides sont les suivantes : REQUIRED, OPTIONAL, LOCAL et SYSTEM.
Les types valides sont les suivants : INT, BOOLEAN, TIME ou NETADDRESS. Vous ne pouvez pas affecter de valeurs aux types TIME et NETADDRESS dans la section Declaration. Si ces types n'ont pas encore de valeur, elle leur est assignée dans les sections Selector ou Provider. Seuls les types uniques sont initialisés dans la section Declaration.
Les valeurs d'une déclaration doivent être des constantes plutôt que des variables ou des expressions. Par conséquent, la déclaration “ LOCAL INT L2 := L3; ” n'est pas autorisée. Une valeur d'initialisation de variable dans la section Declaration peut être modifiée dans les sections Selector et Provider de la règle.
Section Selector
La section Selector d'une règle commence par le mot-clé SELECTOR et se termine par END. Les sections Selector sont évaluées afin de déterminer la règle chargée à utiliser.Les sections Selector de toutes les règles actuellement chargées sont exécutées afin d'identifier la règle prioritaire. Lorsqu'elle est analysée, la section renvoie une priorité comprise entre 0 et 100. 0 signifie que le système ne doit pas utiliser cette règle ; 1-99 signifie que le système doit utiliser cette règle si aucune autre règle ne renvoie de valeur supérieure et 100 signifie que le système doit utiliser cette règle.
Le résultat d'une section Selector est donné dans une déclaration RETURN. En l'absence de déclaration RETURN, la valeur par défaut 0 est renvoyée. Voici un exemple de section Selector :
SELECTOR
RETURN 49;
ENDLorsque les sections Selector de différentes règles sont analysées, plusieurs règles sont susceptibles de renvoyer la même valeur. Dans ce cas, la règle qui sera sélectionnée n'est pas déterminée. Quoi qu'il en soit, une règle de serveur est prioritaire sur une règle WAN.
Section Provider
La section Provider d'une règle commence par le mot-clé PROVIDER et se termine par END. Le corps de la section Provider se compose d'une liste de déclarations.Cette liste de déclarations doit générer une valeur indiquant l'action suggérée pour la règle (SEND ou DONT_SEND).
Le résultat d'une section Provider est donné dans une déclaration RETURN. Si aucune déclaration RETURN n'est effectuée, la valeur SEND est renvoyée par défaut.
Vous trouverez ci-dessous un exemple de section Provider :
PROVIDER
RETURN SEND;
END
Blocs utilisés au sein d'instructions de règles
Sauf indication contraire, les instructions et blocs suivants peuvent être utilisés dans les sections Selector et Provider. Ce document ne fournit aucune description des blocs utilisés dans la section Declaration.
Commentaires
Vous pouvez créer des commentaires en plaçant les signes /* au début de la ligne et les signes */ à la fin. Par exemple :/* Ceci est un commentaire. */
Les commentaires peuvent également se trouver en fin de ligne. Ils sont reconnaissables au signe // qui les précède. Par exemple :
IF L2 > L3 THEN //Ceci est un commentaire.
Instruction If-Then
Les instructions IF-THEN permettent de définir les conditions qui détermineront l'exécution d'un bloc de déclarations. Exemples :
IF <expression booléenne> THEN
<déclarations>
ENDIF <expression booléenne> THEN
<déclarations>
ELSE
<déclarations>
ENDIF <expression booléenne> THEN
<déclarations> < ELSIF <expression booléenne> THEN
<déclarations>
ENDIF <expression booléenne>THEN
Première clause d'une instruction IF-THEN. L'expression booléenne est évaluée et renvoie le résultat TRUE ou FALSE. Si ce résultat est TRUE, les déclarations situées directement après sont exécutées. Si le résultat est FALSE, la déclaration suivante ELSE, ELSIF ou END correspondante est exécutée.ELSE
Cette déclaration marque le début des déclarations exécutées lorsque toutes les instructions IF-THEN et ELSIF qui précèdent renvoient FALSE. Par exemple :IF <expression booléenne> THEN
<instructions>
ELSIF <expression booléenne> THEN
<instructions>
ELSIF <expression booléenne> THEN
<instructions>
ELSE
<instructions>
ENDELSIF <expression booléenne> THEN
L'expression booléenne est évaluée si la déclaration IF-THEN qui précède renvoie une valeur FALSE. La déclaration ELSIF permet de renvoyer un résultat TRUE ou FALSE. Si le résultat est TRUE, les déclarations qui suivent sont exécutées. Si le résultat est FALSE, la déclaration suivante ELSE, ELSIF ou END correspondante est exécutée. Par exemple :IF <expression booléenne> THEN
<instructions>
ELSIF <expression booléenne> THEN
<instructions>
ELSIF <expression booléenne> THEN
<instructions>
ENDEND
La déclaration END met fin à un bloc IF-THEN.Return
La commande RETURN fournit les résultats des sections Selector et Provider.Selector
Dans une section Selector, la déclaration RETURN fournit l'entier qui définit la priorité de la règle. La commande RETURN assigne une priorité de règle comprise entre 0 et 100. 0 signifie que le système ne doit pas utiliser cette règle ; 1-99 signifie que le système doit utiliser cette règle si aucune autre règle ne renvoie de valeur supérieure et 100 signifie que le système doit utiliser cette règle. Si aucune déclaration RETURN n'est effectuée dans une section Selector, la valeur par défaut 0 sera renvoyée.La déclaration doit obligatoirement se terminer par un pointvirgule. Par exemple :
RETURN 49;
RETURN L2;
RETURN 39+7;Provider
Dans une section Provider, la déclaration RETURN fournit le résultat SEND ou DONT_SEND. Si aucune déclaration RETURN n'est effectuée, la valeur SEND est renvoyée par défaut.La déclaration doit obligatoirement se terminer par un pointvirgule. Exemples :
RETURN SEND;
RETURN DONT_SEND;
RETURN L1;Assignation
La déclaration d'assignation modifie la valeur d'un symbole à l'aide des caractères :=. La variable définie par l'utilisateur ou par le système est indiquée en premier, suivie du signe := et d'une valeur, d'une variable ou d'une opération. Par exemple :<variable<.>champ<:=< expression>;
<variable>:=<expression>;t1 et t2 sont du type TIME, i1 et i2 du type INTEGER, b1, b2 sont des assignations booléennes valides :
t1 := t2;
b1 := t1 < t2;
i1 := t1.mday - 15;
b2 := t2.year < 2000Assignations incorrectes :
b1 := 10 < i2 < 12;
(10 < i2) est booléenne et une valeur BOOLEAN ne peut pas être comparée à une valeur INTEGER.
Vous pouvez utiliser b1 := (10 < i2) AND (i2 < 12); à la place.
b2 := i1;
b2 est BOOLEAN, i1 est INTEGER. Types incompatibles.
Vous pouvez utiliser b2 := i1 > 0; à la place.La déclaration d'assignation doit se terminer par un pointvirgule.
Un contrôle des types très strict est effectué. Vous n'êtes pas autorisé à assigner une valeur INT à une variable TIME.
Opérateurs arithmétiques
Vous pouvez inclure des opérateurs arithmétiques dans des déclarations d'assignation, des déclarations RETURN ou des blocs IF. Les opérateurs valides sont :Addition (+)
Soustraction (-)
Division (/)
Multiplication (*)
Modulo (MOD)Utilisez seulement les variables de type INT avec des opérateurs arithmétiques. N'utilisez pas de variables de type TIME, NETADDRESS et BOOLEAN dans des expressions arithmétiques.
Évitez les opérations dont le résultat n'est pas compris entre -2147483648 et +2147483648 ou les divisions par zéro.
Opérateurs relationnels
Vous pouvez utiliser des opérateurs relationnels dans des blocs IF. Les opérateurs valides sont :Égal à (=)
Différent de (<>)
Supérieur à (>)
Supérieur ou égal à (>=)
Inférieur à (<)
Inférieur ou égal à (<=)Vous pouvez utiliser tous les opérateurs relationnels avec des variables TIME et INT. Vous pouvez également utiliser <> et = avec des variables de type NET ADDRESS et BOOLEAN.
Opérateurs logiques
Les opérateurs valides sont les suivants :AND
OR
NOT
Inférieur à (<)
Supérieur à (>)
Égal à (=)Opérateurs de bits
Vous pouvez utiliser des opérateurs de bits sur des variables de type INT afin de renvoyer un entier. Les opérateurs valides sont :BITAND
BITOR
BITNOTOpérations complexes
Les règles de priorité suivantes sont appliquées lors du traitement d'expressions complexes. Les opérateurs dont l'ordre de priorité est le même sont traités de gauche à droite. Voici cet ordre :Parenthèse
Unaire (+/-)
BITNOT
BITAND
BITOR
Multiplication, division, MOD
Addition, soustraction
Relationnel (>, >=, <, <=, =)
NOT
AND
ORSi vous n'êtes pas sûr de la priorité, utilisez des parenthèses. Par exemple, si les valeurs A, B et C sont des entiers ou des variables, la combinaison A<B<C n'est pas autorisée. A<B renvoie une valeur booléenne, et non un entier. Cette valeur ne peut donc pas être comparée à l'entier C. En revanche, la syntaxe de l'instruction (A<B) AND (B<C) est correcte.
Vous pouvez utiliser les déclarations PRINT pour envoyer du texte et des symboles vers l'écran d'affichage du gestionnaire de trafic WAN du serveur et dans le fichier journal.Les instructions PRINT peuvent comporter autant d'arguments que nécessaire. Il peut s'agir de chaînes constantes, de noms de symboles ou de membres, d'entiers ou de valeurs booléennes, séparés par des virgules.
Les chaînes constantes doivent figurer entre guillemets ("). Les déclarations PRINT doivent se terminer par un pointvirgule (;). Par exemple :
PRINT "INT=",10,"BOOL=",TRUE,"SYM=",R1;
Les variables TIME et NETADDRESS utilisent des déclarations d'impression formatées. Les symboles TIME sont imprimés comme suit :m:d:y h:m
Les variables NETADDRESS sont imprimées comme suit :
Type longueur données
Le type peut être IP ou IPX, la longueur désigne le nombre d'octets et les données correspondent à la chaîne d'adresse hexadécimale.
Les symboles de marque commerciale (®, TM, etc.) signalent une marque de Novell. L'astérisque (*) indique qu'il s'agit d'une marque commerciale de fabricant tiers. Pour plus d'informations sur les marques commerciales, reportez-vous à la rubrique Mentions légales.