Citrix ADC

複合高度なポリシー式

ブール演算または算術演算子、および複数のアトミック演算を含む高度なポリシー式を設定できます。次の複合式には、ブール値の AND が含まれています。

http.req.hostname.eq("mycompany.com") && http.req.method.eq(post)

次の式は、2 つのターゲットの値を加算し、その結果を 3 番目の値と比較します。

http.req.url.length + http.req.cookie.length \<= 500

複合式には、任意の数の論理演算子と算術演算子を含めることができます。次の式は、URL と cookie に基づいて HTTP リクエストの長さを評価し、ヘッダー内のテキストを評価し、これら 2 つの結果に対してブール値 AND を実行します。

http.req.url.length + http.req.cookie.length \<= 500 && http.req.header.contains("some text")

括弧を使用して、複合式での評価の順序を制御できます。

複合式のブール演算子

複合式は、次の演算子を使用して構成します。

  • &&.

    この演算子は論理 AND です。式が TRUE と評価されるには、And によって結合されるすべてのコンポーネントが TRUE と評価される必要があります。次に例を示します。

    http.req.url.hostname.eq(“myHost”) && http.req.header(“myHeader”).exists

  • ||.

    この演算子は論理 OR です。OR で結合された式のコンポーネントが TRUE と評価された場合、式全体が TRUE になります。

  • !.

    式に対して論理 NOT を実行します。

場合によっては、Citrix ADC構成ユーティリティで、[式の追加] ダイアログボックスに AND、NOT、OR 演算子が表示されることがあります。しかし、これらは限られた使用です。演算子&&、||、および! を使用して、ブール論理を使用する複合式を構成してください。

複合式の括弧

括弧を使用して、式の評価順序を制御できます。次に例を示します。

http.req.url.contains("myCompany.com") || (http.req.url.hostname.eq("myHost") && http.req.header("myHeader").exists)

次に、別の例を示します。

(http.req.header("Content-Type").exists && http.req.header("Content-Type").eq("text/html")) || (http.req.header("Transfer-Encoding").exists || http.req.header("Content-Length").exists)

文字列の複合演算

次の表に、文字列データに対する複合演算を設定するために使用できる演算子を示します。

文字列値を生成する操作 説明
str + str 演算子の左側の式の値と右側の値を連結します。以下に例を示します。ホスト名+http.req.url.プロトコル
str + num 演算子の左側にある式の値と、右側の数値を連結します。以下に例を示します。ホスト名+http.req.url.コンテンツの長さです。
num + str 演算子の左側にある式の数値を、右側の文字列値と連結します。以下に例を示します。内容の長さ+ホスト名です。
str + ip 演算子の左側にある式の文字列値を、右側の IP アドレス値と連結します。以下に例を示します。ホスト名+10.00.000.00
ip + str 演算子の左側にある式のIPアドレス値を右側の文字列値で連結します。次の例は次のとおりです。
str1 ALT str2 演算子の両側の式から派生した string1 または string2 の値を使用します。どちらの式も複合式でない場合に限ります。次に例を示します。http.req.ホスト名の代替クライアント.ip.src
TRUE または FALSE の結果を生成する文字列に対する演算 説明
str == str 演算子の両側の文字列が同じかどうかを評価します。以下は例です:http.req.ヘッダー(「マイヘッダー」)== http.res.ヘッダー(「マイヘッダー」)
str <= str 演算子の左側の文字列が、右側の文字列と同じか、アルファベット順に先行するかを評価します。
str >= str 演算子の左側の文字列が右側の文字列と同じか、アルファベット順に続くかを評価します。
str < str 演算子の左側の文字列が、右側の文字列の前にアルファベット順にあるかどうかを評価します。
str > str 演算子の左側の文字列が、右側の文字列の後にあるかどうかをアルファベット順に評価します。
str !!= str 演算子の両側の文字列が異なるかどうかを評価します。
文字列に対する論理演算 説明
bool && bool この演算子は論理 AND です。複合式のコンポーネントを評価する場合、AND によって結合されるすべてのコンポーネントが TRUE と評価される必要があります。以下は例を示しています。(「ビューレポート & & 私のページラベルを表示」)
bool || bool この演算子は論理 OR です。複合式のコンポーネントを評価するときに、OR によって結合された式のコンポーネントが TRUE と評価された場合、式全体が TRUE になります。以下は例である:http.req.url.contains(“.js”) || http.res.header.(“Content-Type”).contains(“javascript”)
bool 式に対して論理 NOT を実行します。

数値の複合演算

複合数値式を設定できます。たとえば、次の式は、HTTP ヘッダーの長さと URL の長さの合計を表す数値を返します。

http.req.header.length + http.req.url.length

次の表に、数値データの複合式を構成するために使用できる演算子を示します。

数値の算術演算 説明
num + num 演算子の左側にある式の値を、右側の式の値に加算します。以下は例である:コンテンツの長さ+ http.req.url.長さ
num – num 左側の式の値から、演算子の右側の式の値を減算します。
num * num 演算子の左側の式の値と、右側の式の値を乗算します。次に、クライアント.インターフェイス.rxスループット* 9 の例を示します。
num / num 演算子の左側の式の値を、右側の式の値で割ります。
num % num モジュロ、または演算子の左側の式の値を、右側の式の値で除算した剰余を計算します。たとえば、値「15 mod 4」は 3、「12 mod 4」は 0 に等しい。
~number 数値のビット単位の論理否定を適用した後の数値を返します。次の例では、数値式が 12 (バイナリ 1100) を返すと仮定しています:~数値式です。〜演算子を適用した結果は、-11(バイナリ1110011、合計32ビット、すべてが左側)です。演算子を暗黙的に適用する前に 32 ビット未満のすべての戻り値は、32 ビット幅にするため、左側にゼロがあることに注意してください。
number ^ number 等しい長さの2つのビットパターンを比較し、各数値引数の対応するビットの各ペアに対してXOR演算を実行し、ビットが異なる場合は1を返し、同じ場合は0を返します。整数引数と現在の数値にビット単位のXORを適用した後の数値を返します。ビット単位の比較の値が同じ場合、戻り値は 0 になります。次の例では、数値.式 1 は 12 (バイナリ 1100) を返し、数値.式 2 は 10 (バイナリ 1010) を返します。数値.式1 ^ 数値.式2 ^ 演算子を式全体に適用した結果は 6 (バイナリ 0110) です。演算子を暗黙的に適用する前に 32 ビット未満のすべての戻り値は、32 ビット幅にするため、左側にゼロがあることに注意してください。
数値| 数値 数値値にビット単位の OR を適用した後の数値を返します。ビット単位の比較のいずれかの値が 1 の場合、戻り値は 1 になります。次の例では、数値.式 1 が 12 (バイナリ 1100) を返し、数値.式 2 が 10 (バイナリ 1010) を返すと仮定しています。数値.式1 | 数値.式2 | 演算子を式全体に適用した結果は 14 (バイナリ 1110) です。演算子を暗黙的に適用する前に 32 ビット未満のすべての戻り値は、32 ビット幅にするため、左側にゼロがあることに注意してください。
number & number 同じ長さの 2 つのビットパターンを比較し、対応するビットの各ペアに対してビット単位の AND 演算を実行します。両方のビットの値が 1 の場合は 1 を返し、いずれかのビットが 0 の場合は 0 を返します。次の例では、数値.式1 が 12 (バイナリ 1100) を返し、数値.式2 は 10 (バイナリ 1010) を返すと仮定しています。数値.式1 と数値.式2 式全体が 8 (バイナリ 1000) と評価されます。演算子を暗黙的に適用する前に 32 ビット未満のすべての戻り値は、32 ビット幅にするため、左側にゼロがあることに注意してください。
num « num 右側の number 引数のビット数によって、数値値のビット単位の左シフトの後に数値を返します。シフトされるビット数は 32 の整数モジュロであることに注意してください。次の例では、数値.式1 が 12 (バイナリ 1100) を返し、数値.式2 が 3 を返すと仮定します。数値式1 « 数値式2 LSHIFT 演算子を適用した結果は 96 (バイナリ 1100000) です。32 ビット未満の戻り値はすべて、演算子を適用する前に、32 ビット未満であることに注意してください。は暗黙的に左にゼロを持ち、32ビット幅にします。
num » num 整数引数のビット数による数値値のビット単位の右シフト後の数値を返します。シフトされるビット数は 32 の整数モジュロであることに注意してください。次の例では、数値.式1 が 12 (バイナリ 1100) を返し、数値.式2 が 3 を返すと仮定しています。数値.式1 » 数値.式2 RSHIFT 演算子を適用した結果は 1 (バイナリ 0001) です。演算子を暗黙的に適用する前に 32 ビット未満のすべての戻り値は、32 ビット幅にするため、左側にゼロがあることに注意してください。
TRUE または FALSE の結果を生成する数値演算子 説明
num == num 演算子の左側の式の値が、右側の式の値と等しいかどうかを判断します。
num != num 演算子の左側の式の値が、右側の式の値と等しくないかどうかを確認します。
num > num 演算子の左側の式の値が、右側の式の値より大きいかどうかを判断します。
num < num 演算子の左側の式の値が、右側の式の値より小さいかどうかを判断します。
num >= num 演算子の左側の式の値が、右側の式の値以上であるかどうかを判断します。
num <= num 演算子の左側の式の値が、右側の式の値以下であるかどうかを判断する

ポリシーインフラストラクチャのデータ型の関数

Citrix ADCポリシーインフラストラクチャでは、次の数値データ型がサポートされています。

  • 整数 (32 ビット)
  • 符号なしロング (64 ビット)
  • ダブル (64 ビット)

単純な式は、これらのすべてのデータ型を返すことができます。したがって、算術演算子と論理演算子を使用してこれらのデータ型の値を評価または返す複合式を作成できます。さらに、これらの値をすべてポリシー式で使用できます。符号なし long 型のリテラル定数は、文字列 ul を数値に追加することで指定できます。double 型のリテラル定数には、ピリオド (.)、指数、またはその両方が含まれます。

算術演算子、論理演算子、および型昇格

複合式では、次の標準的な算術演算子と論理演算子を double データ型と符号なしロングデータ型に使用できます。

  • +、-、*、/
  • %, ~, ^, &, |, «, and » (do not apply to double)
  • ==,! =、>、<、>=、<=

これらの演算子はすべて、Cプログラミング言語と同じ意味を持ちます。

整数型、符号なしlong、およびdouble型のオペランド間の混合演算のすべてのケースでは、同じ型のオペランドに対して操作を実行できるように、型昇格が実行されます。優先順位の低いタイプは、演算に関係する優先順位が最も高いオペランドの型に自動的に昇格されます。優先順位の順序(高い順)は次のとおりです。

  • ダブル
  • 符号なしロング
  • 整数

したがって、数値の結果を返す操作は、操作に関係する最も高い型の結果を返します。

たとえば、オペランドが整数型で符号なし長型の場合、整数オペランドは自動的に符号なし長型に変換されます。この型変換は、式のプレフィックスで識別されるデータの型が、関数に引数として渡されるデータの型と一致しない単純な式でも実行されます。このような例を示すために、HTTP.REQ.CONTENT_LENGTH.DIV (3ul) 操作では、プレフィックス HTTP.REQ.CONTENT_LENGTH(DIV () 関数の引数として渡されたデータの型) が自動的に符号なし長整数に変換され、符号なし長分割が実行されます。同様に、引数は式で昇格することができます。たとえば、HTTP.REQ.HEADER (「myHeader」) .TYPECAST_DOUBLE_AT.DIV (5) は、整数 5 を倍精度型に昇格させ、倍精度除算を実行します。

あるタイプのデータを別のタイプのデータにキャストする式については、データの型キャストを参照してください。

複合高度なポリシー式