Le norme WAN sono costituite da regole che controllano la generazione del traffico eDirectoryTM e sono costituite da testo memorizzato come valore della proprietà eDirectory in un oggetto NetWare® Server, in un oggetto LAN Area o in entrambi.
Le norme WAN contengono tre sezioni: dichiarazione, selettore e provider.
Struttura delle norme WAN
Sezione di dichiarazione
La sezione di dichiarazione delle norme contiene le definizioni delle variabili locali e delle variabili derivanti da una richiesta del client. Le definizioni vengono utilizzate nelle sezioni del selettore e del provider. Tali variabili vengono memorizzate insieme alle variabili definite dal sistema.Le dichiarazioni delle variabili sono separate da un punto e virgola. Più dichiarazioni dello stesso tipo possono essere indifferentemente combinate in una sola riga o disposte su due righe. Di seguito viene riportato un esempio di sezione di dichiarazione.
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;Le dichiarazioni richieste (REQUIRED) e opzionali (OPTIONAL) sono specifiche di un determinato tipo di traffico. Le norme che non contengono le variabili richieste non verranno eseguite. Le dichiarazioni opzionali devono includere un valore da fornire come valore di default in caso non ne venga trasmesso alcuno. In WAN Traffic Manager sono disponibili dei simboli di sistema (variabili predefinite) da utilizzare con tutti i tipi di traffico.
Ogni dichiarazione è costituita da tre parti: ambito, tipo e un elenco di coppie nome/valore opzionale.
Gli ambiti validi sono REQUIRED, OPTIONAL, LOCAL e SYSTEM.
I tipi validi sono INT, BOOLEAN, TIME o NETADDRESS. Non è possibile assegnare valori ai tipi TIME e NETADDRESS nella sezione di dichiarazione. Se non sono già associati a un valore, questi tipi riceveranno i relativi valori nelle sezioni del selettore o del provider. Solo i tipi singoli vengono inizializzati nella sezione di dichiarazione.
È necessario che i valori in una dichiarazione siano costanti anziché variabili o espressioni. Pertanto, la dichiarazione "LOCAL INT L2 := L3;" non è consentita. Un valore per l'inizializzazione di una variabile nella sezione di dichiarazione può essere modificato nelle sezioni del selettore e del provider della norma.
Sezione del selettore
La sezione del selettore di una norma inizia con la parola chiave SELECTOR e termina con la parola chiave END. Le sezioni del selettore vengono valutate per determinare la norma caricata da utilizzare.Le sezioni del selettore di tutte le norme attualmente caricate vengono eseguite per determinare la norma con il peso maggiore. Quando viene valutata, la sezione restituisce un valore compreso tra 0 e 100, dove 0 indica che la norma non viene utilizzata, un valore compreso tra 1 e 99 indica che la norma viene utilizzata se nessuna altra norma restituisce un valore maggiore e 100 indica che la norma viene utilizzata.
Il risultato di una sezione del selettore viene restituito in una dichiarazione RETURN. Se non è presente alcuna dichiarazione RETURN, viene restituito un valore di default pari a 0. Di seguito è riportato un esempio di sezione del selettore:
SELECTOR
RETURN 49;
ENDQuando vengono valutate le sezioni del selettore di più norme, è possibile che più norme restituiscano lo stesso valore. In questo caso, la scelta della norma da selezionare è irrilevante. Poiché tutte le altre sono equivalenti, una norma per il server sovrascrive una norma WAN.
Sezione del provider
La sezione del provider inizia con la parola chiave PROVIDER e termina con la parola chiave END. Il corpo della sezione del provider è costituito da un elenco di dichiarazioni.Il risultato di questo elenco di dichiarazioni dovrebbe essere un valore che rappresenta il suggerimento della norma SEND o DONT_SEND.
Il risultato di una sezione del provider viene restituito in una dichiarazione RETURN. Se non è presente alcuna dichiarazione RETURN, viene restituito il valore di default SEND.
Di seguito è riportato un esempio di sezione del provider:
PROVIDER
RETURN SEND;
END
Costruzioni utilizzate nelle istruzioni delle norme
Nelle sezioni del selettore e del provider è possibile utilizzare le seguenti istruzioni e costruzioni, ad eccezione dei casi indicati. Le costruzioni utilizzate nella sezione di dichiarazione non sono descritte in questo argomento.
Commenti
È possibile inserire commenti utilizzando /* all'inizio della riga e */ alla fine. Ad esempio:/* Questo è un commento. */
I commenti possono anche essere contrassegnati inserendo // alla fine della riga prima del commento. Ad esempio:
IF L2 > L3 THEN //Questo è un commento.
Istruzione If-Then
Le istruzioni IF-THEN vengono utilizzate per eseguire un blocco di dichiarazioni in modo condizionale. Esempi:
IF <espressione booleana> THEN
<dichiarazioni>
ENDIF <espressione booleana> THEN
<dichiarazioni>
ELSE
<dichiarazioni>
ENDIF <espressione booleana> THEN
<dichiarazioni>
ELSIF <espressione booleana> THEN
<dichiarazioni>
ENDIF <espressione booleana>THEN
è la prima clausola in un'istruzione IF-THEN. L'espressione booleana viene valutata per ottenere un risultato TRUE o FALSE. Se l'espressione restituisce TRUE, le dichiarazioni immediatamente successive vengono eseguite. Se restituisce FALSE, viene eseguita la successiva dichiarazione ELSE, ELSIF o END corrispondente.ELSE
Questa dichiarazione contrassegna l'inizio delle dichiarazioni che vengono eseguite se tutte le precedenti istruzioni IF-THEN ed ELSIF corrispondenti restituiscono un risultato FALSE. Ad esempio:IF <espressione booleana> THEN
<istruzioni>
ELSIF <espressione booleana> THEN
<istruzioni>
ELSIF <espressione booleana> THEN
<istruzioni>
ELSE
<istruzioni>
ENDELSIF <espressione booleana> THEN
L'espressione booleana viene valutata se la dichiarazione IF-THEN precedente restituisce un risultato FALSE. La dichiarazione ELSIF viene valutata per ottenere un risultato TRUE o FALSE. Se restituisce TRUE, le dichiarazioni successive vengono eseguite. Se restituisce FALSE, viene eseguita la successiva dichiarazione ELSE, ELSIF o END corrispondente. Ad esempio:IF <espressione booleana> THEN
<istruzioni>
ELSIF <espressione booleana> THEN
<istruzioni>
ELSIF <espressione booleana> THEN
<istruzioni>
ENDEND
La dichiarazione END conclude una costruzione IF-THEN.Return
Il comando RETURN fornisce i risultati delle sezioni del selettore e del provider.Selettore
In una sezione del selettore, la dichiarazione RETURN fornisce il risultato in valori interi utilizzato come peso per la norma. La dichiarazione RETURN assegna un peso della norma compreso tra 0 e 100, dove 0 indica che la norma non viene utilizzata, un valore compreso tra 1 e 99 indica che la norma viene utilizzata se nessuna altra norma restituisce un valore maggiore e 100 indica che la norma viene utilizzata. Se non è presente alcuna dichiarazione RETURN nella sezione del selettore, viene restituito un valore di default pari a 0.Per concludere la dichiarazione è necessario inserire un punto e virgola. Ad esempio:
RETURN 49;
RETURN L2;
RETURN 39+7;Provider
In una sezione del provider, la dichiarazione RETURN fornisce il risultato SEND o DONT_SEND. Se non è presente alcuna dichiarazione RETURN, viene restituito il valore di default SEND.Per concludere la dichiarazione è necessario inserire un punto e virgola. Esempi:
RETURN SEND;
RETURN DONT_SEND;
RETURN L1;Assegnazione
La dichiarazione di assegnazione modifica il valore di un simbolo mediante i caratteri :=. La variabile definita o la variabile di sistema viene dichiarata per prima, seguita dai caratteri := e da un valore, una variabile o un'operazione. Ad esempio:<variabile>.<campo>:=<espressione>;
<variabile>:=<espressione>;t1 e t2 sono di tipo TIME, i1 e i2 sono di tipo INTEGER, b1 e b2 sono assegnazioni booleane valide:
t1 := t2;
b1 := t1 < t2;
i1 := t1.mgiorno - 15;
b2 := t2.anno < 2000assegnazioni non valide:
b1 := 10 < i2 < 12;
(10 < i2) è un valore di tipo BOOLEAN e non può essere confrontato con un valore di tipo INTEGER.
È invece possibile utilizzare b1 := (10 < i2) AND (i2 < 12);.
b2 := i1;
b2 è un valore di tipo BOOLEAN, i1 è un valore di tipo INTEGER e i due tipi sono incompatibili.
È invece possibile utilizzare b2 := i1 > 0;.La dichiarazione di assegnazione deve terminare con un punto e virgola.
Viene eseguito un rigido controllo del tipo. Non è possibile assegnare un tipo INT a una variabile TIME.
Operatori aritmetici
È possibile includere operatori aritmetici nelle dichiarazioni di assegnazione, nelle dichiarazioni RETURN o nelle costruzioni IF. Gli operatori validi sono:Addizione (+)
Sottrazione (-)
Divisione (/)
Moltiplicazione (*)
Modulo (MOD)Utilizzare solo i tipi di variabile INT con gli operatori aritmetici. Non utilizzare tipi di variabile TIME, NETADDRESS e BOOLEAN nelle espressioni aritmetiche.
Evitare operazioni che restituiscono un risultato non compreso nell'intervallo di valori da -2147483648 a +2147483648 o divisioni per zero.
Operatori relazionali
È possibile utilizzare gli operatori relazionali nelle costruzioni IF. Gli operatori validi sono:Uguale a (=)
Diverso da (<>)
Maggiore di (>)
Maggiore o uguale a (>=)
Minore di (<)
Minore o uguale a (<=)È possibile utilizzare qualsiasi operatore relazionale con tipo di variabile TIME e INT. È anche possibile utilizzare <> e = con i tipi di variabile NET ADDRESS e BOOLEAN.
Operatori logici
Gli operatori validi sono:AND
OR
NOT
Minore di (<)
Maggiore di (>)
Uguale a (=)Operatori a bit
È possibile utilizzare gli operatori a bit nei tipi di variabile INT per restituire un valore intero. Gli operatori validi sono:BITAND
BITOR
BITNOTOperazioni complesse
Quando si elaborano espressioni complesse, vengono applicate le seguenti regole di precedenza. Gli operatori con lo stesso ordine di precedenza vengono elaborati da sinistra a destra. L'ordine è il seguente:Parentesi
Unario (+/-)
BITNOT
BITAND
BITOR
Moltiplicazione, divisione, MOD
Addizione, sottrazione
Relazionale (>, >=, <, <=, =)
NOT
AND
ORSe non si è certi della precedenza, utilizzare le parentesi. Ad esempio, se A, B e C sono interi o variabili, A<B<C non è consentito. A<B restituirebbe un valore booleano e non intero, impedendo quindi il confronto con il valore intero C. Tuttavia, la sintassi (A<B) AND (B<C) è corretta.
È possibile utilizzare le dichiarazioni PRINT per inviare valori di testo e simbolici allo schermata WAN Traffic Manager del server e al file di log.Le istruzioni PRINT possono includere un numero qualsiasi di argomenti costituiti da stringhe letterali, nomi o membri di simbolo, valori interi o valori booleani separati da virgole.
È necessario racchiudere le stringhe letterali tra virgolette ("). Le dichiarazioni PRINT devono terminare con un punto e virgola (;). Ad esempio:
PRINT "INT=",10,"BOOL=",TRUE,"SYM=",R1;
Le variabili TIME e NETADDRESS utilizzano le dichiarazioni di stampa formattate. I simboli TIME vengono stampati come segue:m:g:a h:m
Le variabili NETADDRESS vengono stampate come segue:
Tipo lunghezza dati
Il tipo può essere IP o IPX, la lunghezza è il numero di byte e i dati sono costituiti dalla stringa esadecimale dell'indirizzo.
Un simbolo di marchio di fabbrica (®, TM e così via) indica un marchio di fabbrica di Novell. Un asterisco (*) indica un marchio di fabbrica di terze parti. Per informazioni sui marchi di fabbrica, vedere Note legali.