Structure de la règle WAN

Une règle WAN se compose des trois sections suivantes :


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 stockées avec les variables système.

Les déclarations de variables sont séparées par des points-virgules. Vous pouvez combiner plusieurs déclarations du même type sur une seule ligne ou vous pouvez les renvoyer chacune sur une nouvelle ligne. Le nombre de lignes est indifférent. Vous trouverez ci-dessous 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 qui ne comportent pas les variables obligatoires ne fonctionnent pas. 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 :


Etendue

Les étendues valides sont répertoriées dans Tableau 93.


Tableau 93. Étendues de déclarations valides

Etendue Description

REQUIRED

Les variables dont l'étendue est REQUIRED peuvent être utilisées dans plusieurs sections, mais elles ne peuvent apparaître qu'une fois dans la section Declaration.

Aucune valeur ne peut être définie pour une variable d'étendue REQUIRED. Cette valeur doit être issue de la requête GetWanPolicy.

OPTIONAL

Les variables dont l'étendue est OPTIONAL peuvent être utilisées dans plusieurs sections, mais elles ne peuvent apparaître qu'une fois dans la section Declaration.

Les variables d'étendue OPTIONAL sont assignées à une valeur par défaut. Ces valeurs ne sont pas initialisées. Elles sont définies uniquement si aucune valeur n'est transmise. Si une requête de règle WAN ne transmet pas de nouvelle valeur au paramètre qui correspond aussi bien au niveau du nom que du type, la valeur définie dans la section Declaration est utilisée lors du traitement de la règle.

Vous devez affecter une valeur aux variables dont l'étendue est OPTIONAL. Par conséquent, étant donné que les types TIME et NETADDRESS ne peuvent pas être initialisés dans la section Declaration, n'utilisez pas une étendue OPTIONAL avec ces types de variable.

LOCAL

Les variables dont l'étendue est LOCAL peuvent être utilisées dans plusieurs sections, mais elles ne peuvent apparaître qu'une fois dans la section Declaration.

Les variables d'étendue LOCAL n'existent que pour une règle particulière : leurs valeurs ne sont pas renvoyées au client qui effectue l'appel.

Tous les types de paramètre peuvent être définis. Toutefois, étant donné que les types TIME et NETADDRESS ne peuvent pas être initialisés dans la section Declaration, ne leur affectez pas de valeurs.

SYSTEM

Les variables dont l'étendue est SYSTEM peuvent être utilisées dans plusieurs sections, mais elles ne peuvent apparaître qu'une fois dans la section Declaration.


Type

Les types valides sont répertoriés dans Tableau 94.


Tableau 94. Types de déclarations valides

Type Description

INT

Représente le type de trafic de la requête GetWanPolicy pour laquelle la règle est exécutée. Par exemple, la règle suivante définit le type de trafic NDS_SYNC :

IF TrafficType=NDS_SYNC THEN opération END.

BOOLEAN

Utilisé pour les valeurs TRUE ou FALSE uniquement. La valeur sera indéterminée si elle n'est pas spécifiée dans une déclaration ou dans une requête de règle WAN.

TIME

Les variables d'étendue TIME doivent recevoir leurs valeurs dans les sections Selector ou Provider, ou à partir de la requête de règle WAN. N'affectez pas de valeurs aux variables d'étendue TIME dans la section Declaration.

NETADDRESS

Les variables d'étendue NETADDRESS doivent recevoir leurs valeurs dans les sections Selector ou Provider. N'affectez pas de valeurs aux variables d'étendue NETADRESS dans la section Declaration.

Vous ne pouvez pas affecter de valeurs aux types Time et Netaddress dans la section Declaration. Si ces types ne sont associés à aucune valeur, ils en reçoivent dans les sections Selector ou Provider. Seuls les types uniques sont initialisés dans la section Declaration.


Paires nom/valeur facultative

Les noms de variable sont des chaînes sans limitation de longueur dans lesquelles sont combinés des caractères alphanumériques. Étant donné que seuls les 31 premiers caractères sont utilisés, une variable doit commencer par une chaîne unique de 31 caractères. Un nom de variable doit commencer par un caractère alphabétique, sinon le symbole est interprété en tant que constante numérique.

Les noms de variables font la distinction entre les majuscules et les minuscules. Par exemple, la variable R1 est différente de la variable r1. Le caractère de soulignement (_) est autorisé dans les noms de variable.

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 le mot-clé 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. Lors de cette évaluation, la section retourne une priorité comprise entre 0 et 100. Une priorité 0 signifie que la règle ne doit pas être utilisée. Une priorité comprise entre 1 et 99 signifie que la règle est utilisée si aucune autre ne présente une valeur supérieure. Enfin, une priorité 100 signifie que la règle doit impérativement être utilisée.

Le résultat d'une section Selector est indiqué dans une déclaration RETURN. Si aucune déclaration RETURN n'est générée, le système retourne par défaut une valeur nulle. Vous trouverez ci-dessous un exemple de section Selector :

SELECTOR
RETURN 49;
END

Lorsque les sections Selector de différentes règles sont évaluées, plusieurs règles peuvent retourner la même valeur. Dans ce cas, il est impossible de déterminer la règle sélectionnée. Lorsqu'aucun autre élément ne les distingue, une règle de serveur est prioritaire par rapport à une règle WAN.

Pour plus d'informations sur la rédaction des déclarations, reportez-vous à Blocs utilisés au sein de sections de règles. Voir aussi Section Provider.


Section Provider

La section Provider commence par le mot-clé PROVIDER et se termine par le mot-clé 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'opération suggérée pour la règle (SEND ou DONT_SEND).

Les résultats d'une section Provider sont fournis dans une déclaration RETURN. Si aucune déclaration RETURN n'est générée, la valeur par défaut SEND est retournée.

Vous trouverez ci-dessous un exemple de section Provider :

PROVIDER
 RETURN SEND; 
 END

Pour plus d'informations sur la rédaction des déclarations, reportez-vous à Blocs utilisés au sein de sections de règles.


Blocs utilisés au sein de sections de règles

Sauf indication contraire, les instructions et blocs suivants peuvent être utilisés dans les sections Selector et Provider d'une règle WAN. Pour plus d'informations sur la façon dont sont utilisés les blocs dans la section Declaration d'une règle, consultez Section Declaration.


Commentaires

Vous pouvez indiquer des commentaires en plaçant le signe /* au début de la ligne et le signe */ à la fin. Par exemple :

/* Ceci est un commentaire. */

Vous pouvez également signaler les commentaires en insérant les symboles // à la fin d'une ligne, juste avant les commentaires. 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
END

IF expression_booléenne THEN déclarations
ELSE déclarations
END

IF expression_booléenne THEN déclarations
ELSIF expression_booléenne THEN déclarations
END


IF expression_booléenne THEN

Il s'agit de la première clause d'une instruction IF-THEN. Une évaluation permet de savoir si l'expression booléenne est TRUE ou FALSE. Si elle est TRUE, les déclarations qui la suivent sont exécutées. Si elle est FALSE, le processus passe directement à la déclaration ELSE, ELSIF ou END suivante.


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 sont FALSE. Par exemple :

IF expression_booléenne THEN instructions
ELSIF expression_booléenne THEN instructions
ELSIF expression_booléenne THEN instructions
ELSE instructions
END


ELSIF expression_booléenne THEN

L'expression booléenne est évaluée si la déclaration IF-THEN qui précède est FALSE. Une évaluation permet de savoir si la déclaration ELSIF est TRUE ou FALSE. Si elle est TRUE, les déclarations qui la suivent sont exécutées. Si elle est FALSE, le processus passe directement à la déclaration ELSE, ELSIF ou END suivante. Par exemple :

IF expression_booléenne THEN instructions
ELSIF expression_booléenne THEN instructions
ELSIF expression_booléenne THEN instructions
END


END

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 règle une priorité comprise entre 0 et 100. Une priorité 0 signifie que la règle ne doit pas être utilisée. Une priorité comprise entre 1 et 99 signifie que la règle est utilisée si aucune autre ne présente une valeur supérieure. Enfin, une priorité 100 signifie que la règle doit impérativement être utilisée. Si aucune déclaration RETURN n'est générée dans aucune section Selector, le système retourne par défaut une valeur nulle.

La déclaration doit obligatoirement se terminer par un point-virgule. 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 générée, la valeur par défaut SEND est retournée.

La déclaration doit obligatoirement se terminer par un point-virgule. Par exemple :

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 de la valeur, de la variable ou de l'opération. La déclaration d'assignation doit se terminer par un point-virgule. Par exemple :

variable.champ:=expressionvariable:=expression;

t1 et t2 sont du type TIME, i1 et i2 du type INTEGER, et b1 et b2 sont des assignations booléennes valides :

t1 := t2;
b1 := t1 < t2;
i1 := t1.mday - 15;
b2 := t2.year < 2000

Assignations non valides :

b1 := 10 < i2 < 12;

(10 < i2) est booléenne. Or une valeur BOOLEAN ne peut pas être comparée à une valeur INTEGER.

Vous pouvez utiliser b1 := (10 < i2) AND (i2 < 12); à la place. Par exemple :

  b2 := i1;

b2 est de type BOOLEAN et i1, de type INTEGER. Il s'agit donc de types incompatibles.

Vous pouvez utiliser b2 := i1 > 0; à la place.

Le système procède à une vérification stricte du type. 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 les suivants :

Les opérateurs arithmétiques vous permettent uniquement d'utiliser des variables de type INT. N'utilisez pas de variables de type TIME, NETADDRESS et BOOLEAN dans des expressions arithmétiques.

Évitez de procéder à des opérations générant un résultat inférieur à -2147483648 ou supérieur à +2147483648. Évitez également les divisions par zéro.


Opérateurs relationnels

Vous pouvez utiliser les opérateurs relationnels dans des blocs IF. Les opérateurs valides sont les suivants :

Tous les opérateurs relationnels peuvent être utilisés avec les variables de type 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 :


Opérateurs de bits

Vous pouvez utiliser des opérateurs de bits sur des variables de type INT afin de retourner un entier. Les opérateurs valides sont les suivants :


Opérations complexes

Les règles de priorité suivantes sont respectées lors du traitement d'expressions complexes. Les opérateurs présentant le même niveau de priorité sont traités de gauche à droite. L'ordre respecté est le suivant :

Si vous n'êtes pas sûr de l'ordre de 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 retourne 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.


PRINT

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 de constantes, de noms de symboles ou de membres, d'entiers ou de valeurs booléennes, séparés par des virgules.

Les chaînes de constantes doivent figurer entre guillemets (""). Les déclarations PRINT doivent se terminer par un point-virgule (;). Par exemple :

PRINT "INT=",10,"BOOL=",TRUE,"SYM=",R1;

Les variables TIME et NETADDRESS utilisent des déclarations PRINT formatées. Les symboles TIME sont imprimés de la manière suivante :

m:j:a h:m

Les variables NETADDRESS sont imprimées de la manière suivante :

Type longueur données

Type peut être IP ou IPX, longueur désigne le nombre d'octets et données correspondent à la chaîne d'adresse hexadécimale.