Политика ГС состоит из правил, с помощью которых осуществляется управление образованием трафика eDirectoryTM. Они являются текстовыми элементами, которые в виде значений свойств eDirectory хранятся в объектах "Сервер" NetWare®, "Область ЛС" или в них обоих.
Политика ГС состоит из трех секций: секции объявлений, секции селектора и секции поставщика.
Структура политики ГС
Секция объявлений
В секции объявлений политики содержатся определения локальных переменных и переменных, пришедших с запросом клиента. Эти определения используются в секциях селектора и поставщика. Эти переменные хранятся вместе с переменными, определенными системой.Объявления переменных разделяются точкой с запятой. Несколько объявлений одного типа могут быть указаны на одной строке или перенесены на следующую, то есть, они не привязаны к одной строке. Пример секции объявлений приведен ниже:
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;Обязательные и необязательные объявления зависят от конкретного типа трафика. Политики, не содержащие обязательных переменных, выполняться не будут. Необязательные объявления должны иметь, по крайней мере, значения по умолчанию, если эти значения не были переданы в политику в качестве параметров. Менеджер трафика ГС предоставляет системные символы (предварительно определенные переменные) для всех типов трафика.
Каждое объявление состоит из трех частей: область действия, тип и список пар имя/необязательное значение.
Допустимыми областями действия являются REQUIRED, OPTIONAL, LOCAL и SYSTEM.
Допустимыми типами являются INT, BOOLEAN, TIME или NETADDRESS. В секции объявлений нельзя присваивать значения типам TIME и NETADDRESS. Если эти типы еще не имеют значений, они получат их в секциях селектора или поставщика. В секции объявлений инициализируются только отдельные типы.
Значения в объявлении должны быть константами, а не переменными или выражениями. Таким образом, объявление "LOCAL INT L2 := L3;" является недопустимым. Значение, присвоенное переменной в секции объявления, может быть изменено в секциях селектора и поставщика.
Секция селектора
Секция селектора начинается с ключевого слова SELECTOR и завершается ключевым словом END. Секции селектора обрабатываются в целях определения, какая загруженная политика будет использована.Секции селектора всех загруженных в данный момент времени политик обрабатываются для оценки, какая политика сейчас имеет наивысший приоритет. После выполнения такой оценки секция возвращает значение приоритета в диапазоне от 0 до 100. Значение 0 означает, что политику использовать нельзя. Значения 1-99 означают, что данную политику можно использовать, если какая-либо политика не возвратила большее значение. Значение 100 означает, что нужно использовать именно эту политику.
Результат обработки секции селектора возвращается в объявлении RETURN. Если объявление RETURN не выполнено, будет возвращено значение по умолчанию - 0. Ниже приведен пример раздела "Selector":
SELECTOR
RETURN 49;
ENDПри обработке секций селекторов нескольких политик эти политики могут возвратить одно и то же значение. В этом случае неясно, какая политика будет выбрана. При всех равных условиях политика сервера будет иметь приоритет над политикой ГС.
Секция поставщика
Секция поставщика начинается с ключевого слова PROVIDER и завершается ключевым словом END. Секция поставщика состоит из списка объявлений.Результатом обработки списка объявлений должно быть значение, представляющее решение политики: генерировать трафик (SEND) или нет (DONT_SEND).
Результат выполнения секции поставщика возвращается в объявлении RETURN. Если объявление RETURN не выполнено, будет возвращено значение по умолчанию - SEND.
Ниже приведен пример секции поставщика:
PROVIDER
RETURN SEND;
END
Конструкции, используемые в операторах политики
Ниже дано описание операторов и конструкций, которые могут быть использованы в секциях селектора и поставщика, за исключением комментирующих пояснений. Конструкции, используемые в секции объявлений, здесь не описываются.
Комментарии
Комментарии начинаются с косой черты и звездочки (/*), а заканчиваются звездочкой и косой чертой (*/). Например:/* Это комментарий. */
Комментарии могут также определяться двойной косой чертой (//) в конце строки определения, но перед комментарием. Например:
IF L2 > L3 THEN //Это комментарий.
Оператор IF-THEN
Оператор IF-THEN используется для выполнения условного блока объявлений. Примеры:
IF <булево выражение> THEN
<объявления>
ENDIF <булево выражение> THEN
<объявления>
ELSE
<объявления>
ENDIF <булево выражение> THEN
<объявления>
ELSIF <булево выражение> THEN
<объявления>
ENDIF <булево выражение>THEN
Это первое условие оператора IF-THEN. Результатом оценки булева выражения является либо значение TRUE (истина), либо FALSE (ложь). Если результатом является TRUE, выполняются объявления, следующие непосредственно за оператором. Если результатом является FALSE, выполнение переходит к следующему соответствующему объявлению ELSE, ELSIF или END.ELSE
Это объявление отмечает начало объявлений, которые выполняются, если результатом всех соответствующих предыдущих операторов IF-THEN и ELSIF является FALSE. Например:IF <булево выражение> THEN
<операторы>
ELSIF <булево выражение> THEN
<операторы>
ELSIF <булево выражение> THEN
<операторы>
ELSE
<операторы>
ENDELSIF <булево выражение> THEN
Булево выражение оценивается, если предыдущее объявление IF-THEN возвращает FALSE. Объявление ELSIF оценивается на значение TRUE или FALSE. Если результатом является TRUE, выполняются объявления, следующие за оператором. Если результатом является FALSE, выполнение переходит к следующему соответствующему объявлению ELSE, ELSIF или END. Пример:IF <булево выражение> THEN
<операторы>
ELSIF <булево выражение> THEN
<операторы>
ELSIF <булево выражение> THEN
<операторы>
ENDEND
Объявление END завершает конструкцию IF-THEN.RETURN
Команда RETURN выдает результаты выполнения секций селектора и поставщика.Селектор
В секции селектора (Selector) объявление RETURN предоставляет целочисленный результат, используемый для определения приоритета политики. RETURN назначает политике приоритет в диапазоне от 0 до 100. Значение 0 означает, что политику использовать нельзя. Значения 1-99 означают, что данную политику можно использовать, если какая-либо политика не возвратила большее значение. Значение 100 означает, что нужно использовать именно эту политику. Если объявление RETURN не выполнено в секции селектора, будет возвращено значение по умолчанию - 0.Объявление необходимо завершать точкой с запятой. Пример:
RETURN 49;
RETURN L2;
RETURN 39+7;Поставщик
В секции поставщика (Provider) объявление RETURN предоставляет результат SEND или DONT_SEND. Если объявление RETURN не выполнено, будет возвращено значение по умолчанию - SEND.Объявление необходимо завершать точкой с запятой. Примеры:
RETURN SEND;
RETURN DONT_SEND;
RETURN L1;Назначение
Объявление назначения изменяет значение символа с помощью оператора ":=". Определенная переменная или системная переменная ставится в начале, затем следует ":=", а затем значение, переменная или операция. Пример:<переменная>.<поле>:=<выражение>;
<переменная>:=<выражение>;Переменные t1 и t2, принадлежащие типу TIME, i1 и i2 - типу INTEGER, b1 и b2 - типу BOOLEAN, являются правильными назначениями:
t1 := t2;
b1 := t1 < t2;
i1 := t1.mday - 15;
b2 := t2.year < 2000неправильные назначения:
b1 := 10 < i2 < 12;
(10 < i2) является булевым значением, а тип BOOLEAN не может сравниваться с типом INTEGER.
Вместо этого нужно использовать b1 := (10 < i2) AND (i2 < 12).
b2 := i1;
b2 является BOOLEAN, i1 является INTEGER. Несовместимые типы.
Вместо этого нужно использовать b2 := i1 > 0;.Объявление назначения должно заканчиваться точкой с запятой.
Выполняется строгая проверка типов. Нельзя назначать переменную INT переменной TIME.
Арифметические операторы
В объявления назначений, в объявления RETURN или в конструкции IF можно включать арифметические операторы. Допустимыми операторами являются:Сложение (+);
Вычитание (-);
Деление (/);
Умножение (*);
Сравнение по модулю (MOD).С арифметическими операторами используются только переменные типа INT. Нельзя использовать в арифметических выражениях переменные типа TIME, NETADDRESS и BOOLEAN.
Избегайте операций, в результате которых значения выходят из диапазона от -2147483648 до +2147483648, а также операций деления на ноль.
Операторы отношения
В конструкциях IF можно использовать операторы отношения. Допустимыми операторами являются:Равно (=)
Не равно (<>)
Больше (>)
Больше или равно (>=)
Меньше (<)
Меньше или равно (<=)Операторы отношения можно использовать с переменными типа TIME и INT. Операторы "<>" и "=" можно использовать с переменными типа NET ADDRESS и BOOLEAN.
Логические операторы
Допустимыми операторами являются:AND
OR
NOT
Меньше (<)
Больше (>)
Равно (=)Побитовые операторы
С переменными типа INT для получения целочисленных значений можно использовать побитовые операторы. Допустимыми операторами являются:BITAND;
BITOR;
BITNOT.Сложные операции
При выполнении сложных выражений применяется определенный порядок действий. Операторы с одинаковым приоритетом выполняются слева направо. Порядок приоритета следующий:Скобки
Унарные операторы (+/-)
BITNOT
BITAND
BITOR
Умножение, деление, MOD
Сложение, вычитание
Операторы отношений (>, >=, <, <=, =)
NOT
AND
ORЕсли нет уверенности в приоритете каких-либо операторов, используйте скобки. Например, если A, B и C являются целыми числами или переменными, операция A<B<C недопустима. Операция A<B возвратит булево значение, а не целочисленное, и поэтому оно не может сравниваться с целочисленным C. Однако операция (A<B) AND (B<C) будет синтаксически правильной.
Объявления PRINT используются для передачи текстовых и символьных значений на экран и в файл журнала менеджера трафика ГС сервера.Операторы PRINT могут иметь несколько аргументов, которые могут быть буквенными строками, символьными именами или членами, целочисленными или булевыми значениями, разделенными запятыми.
Буквенные строки необходимо заключать в двойные кавычки ("). Объявления PRINT должны заканчиваться точкой с запятой (;). Пример:
PRINT "INT=",10,"BOOL=",TRUE,"SYM=",R1;
Переменные TIME и NETADDRESS используют форматированные объявления печати. Символы TIME печатаются в следующем виде:м:д:г ч:м (месяц:день:год часы:минуты).
Переменные NETADDRESS печатаются в следующем виде:
Тип длина данные
Типом является либо IP, либо IPX, длина указывается в байтах, а данные - это шестнадцатеричный адрес.
Символ торговой марки (®, TM и т.д.) обозначает торговую марку Novell. Символ "звездочка" (*) обозначает торговую марку независимого производителя. Информацию о торговых марках см. в разделе Юридическая информация.