ADC

複合高度なポリシー式

高度なポリシー式は、ブール演算子または算術演算子とアトミック演算で構成できます。次の複合式には、ブール値 AND があります。

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

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

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

複合式には、任意の数の論理演算子と算術演算子を使用できます。

次の式は、HTTP リクエストの長さを評価します。この式は URL と Cookie に基づいています。 この式は、ヘッダー内のテキストを評価します。また、この 2 つの結果に対してブール値 AND も表示されます。

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

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

複合式のブール演算子

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

  • &&.

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

    例:

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

  • ||.

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

  • !.

    P 式に論理 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.hostname + http.req.url.protocol
str + num 演算子の左側にある式の値と、右側の数値を連結します。例:http.req.hostname + http.req.url.content_length
num + str 演算子の左側にある式の数値を、右側の文字列値と連結します。例:http.req.url.content_length + http.req.url.hostname
str + ip 演算子の左側にある式の文字列値を、右側の IP アドレス値と連結します。例:http.req.hostname + 10.00.000.00
IP + str 演算子の左側にある式の IP アドレス値と右側の文字列値を連結します。例:client.ip.dst + http.req.url.hostname
str1 ALT str2 string1 の評価によって undef 例外が発生するか、結果がヌル文字列である場合は string2 を使用します。それ以外の場合は string1 を使用し、string2 は決して評価しません。例:http.req.hostname alt client.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。(「コンテンツタイプ」)。(「javascript」) を含む
bool 式に対して論理 NOT を実行します。

数値の複合演算

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

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

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

数値の算術演算 説明
num + num 演算子の左式の値を右側の式値に追加します。例:http.req.content_length + http.req.url.length
num – num 左の数式値から演算子の右側の式値を減算します。
数×数値 演算子の左の式の値に右の式の値を乗算します。例:クライアント.interface.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 の整数です。次の例では、numeric.expression1 は 12 (バイナリ 1100) を返し、numeric.expression2 が 3 を返すと仮定しています。数式1 « 数値.式2 LSHIFT 演算子を適用した結果は 96 (バイナリ 110000) です。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 型のオペランド間の混合演算のすべての場合において。型昇格は、同じ型のオペランドに対して操作を行うために行われます。この演算では、優先順位の高いオペランドに下位優先タイプが昇格されます。優先順位の順序(高い順)は次のとおりです。

  • Double
  • 符号なしロング
  • 整数

したがって、数値の結果を返す操作は、操作に含まれる最も高いタイプの結果を返します。

たとえば、オペランドが整数型で符号なし長型の場合、整数オペランドは自動的に符号なし長型に変換されます。この型変換は、単純な式で行われます。式の接頭辞によって識別されるデータの型が、関数に引数として渡されるデータの型と一致しません。HTTP.REQ.CONTENT_LENGTH.DIV (3ul) のオペレーションでは、接頭辞 HTTP.REQ.CONTENT_LENGTH は、符号なしロングになる整数を返します。符号なし長整数型:DIV () 関数の引数として渡されるデータ型で、符号なし長除算が実行されます。同様に、引数は式で昇格することができます。たとえば、HTTP.REQ.HEADER (「myHeader」) .TYPECAST_DOUBLE_AT.DIV (5) は整数 5 を倍精度型に昇格させ、倍精度除算を行います。

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

複合高度なポリシー式