Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

ポリシー式の理解

ポリシー表現により、ポリシー フレームワーク ソフトウェアは、ルーティング ポリシーを評価するための別の方法を使用できます。 ポリシー式 では、ポリシーでブール論理演算子を使用します。論理演算子は、ポリシーを評価するためのルールを確立します。

ポリシー式でのルーティングポリシーの評価中に、accept、reject、またはnext policyのポリシーアクションがTRUEまたはFALSEの値に変換されます。次に、この値を指定した論理運用担当者に対して評価して、TRUEまたはFALSEの出力を生成します。その後、出力は、受け入れ、拒否、または次のポリシーのフロー制御アクションに変換されます。ポリシー式の結果は、単一のポリシーに適用される場合と同様に適用されます。ルートが承認または拒否され、評価が終了するか、次のポリシーが評価されます。

表1は 、ポリシーアクションと、それに対応するTRUEおよびFALSE値とフロー制御アクション値をまとめたものです。 表2は 、論理演算子について説明しています。ポリシー式の評価の詳細については、「 ポリシー式の評価」を参照してください。

ポリシー式を括弧で囲む必要があります。ポリシー式は、 import または export ステートメントと from policy ステートメントの任意の場所に配置できます。

表1:ポリシーアクションの変換値

ポリシーアクション

コンバージョン値

フロー制御アクション変換値

同意する

True

同意する

拒否する

誤

拒否する

次のポリシー

True

次のポリシー

表2:ポリシー式の論理演算子

論理演算子

ポリシー式ロジック

論理演算子がポリシー式の評価に及ぼす影響

& &(論理AND)

論理 AND では、TRUE の出力を生成するには、すべての値が TRUE である必要があります。

ルーティング ポリシー値が TRUE および TRUE の場合、TRUE の出力が生成されます。値が TRUE と FALSE の場合、FALSE の出力が生成されます。値が FALSE と FALSE の場合、FALSE の出力が生成されます。

最初のルーティングポリシーがTRUEの値を返した場合、次のポリシーが評価されます。最初のポリシーが FALSE の値を返した場合、式の評価は終了し、式内の後続のポリシーは評価されません。

||(論理OR)

論理 OR では、TRUE の出力を生成するには、少なくとも 1 つの値が TRUE である必要があります。

ルーティング ポリシー値が TRUE および FALSE の場合、TRUE の出力が生成されます。値が TRUE と TRUE の場合、TRUE の出力が生成されます。値が FALSE と FALSE の場合、FALSE の出力が生成されます。

最初のルーティングポリシーがTRUEの値を返した場合、式の評価は終了し、式内の後続のポリシーは評価されません。最初のポリシーが FALSE の値を返した場合、次のポリシーが評価されます。

!(論理NOT)

論理 NOT は、TRUE の値を FALSE に、FALSE の値を TRUE に反転します。また、acceptと次のポリシーを拒否する、および拒否するアクションを受け入れるアクションを逆にします。

論理 AND 運用担当者とともに使用し、最初のルーティングポリシー値の FALSE が TRUE に逆になった場合、次のポリシーが評価されます。TRUE の値が FALSE に逆になった場合、式の評価は終了し、式内の後続のポリシーは評価されません。

論理 OR 運用担当者とともに使用し、最初のルーティングポリシー値の FALSE が TRUE に逆になった場合、式の評価は終了し、式内の後続のポリシーは評価されません。TRUE の値が FALSE に逆になった場合、次のポリシーが評価されます。

ポリシーと共に使用され、フロー制御アクションがacceptまたはnext policyの場合、これらのアクションはrejectに逆になります。フロー制御アクションが拒否の場合、このアクションは受け入れに逆になります。

詳細については、次のセクションを参照してください。

ポリシー表現の例

次の例は、論理演算子を使用してポリシー式を作成する方法を示しています。

  • 論理AND—次の例では、 policy1 が最初に評価されます。 policy1 が評価された後に値 TRUE が返された場合、 policy2 が評価されます。FALSE の値が返された場合、 policy2 は評価されません。

  • 論理OR—次の例では、 policy1 が最初に評価されます。 policy1 が評価された後に値 TRUE が返される場合、 policy2 は評価されません。値 FALSE が返された場合、 policy2 が評価されます。

  • 論理ORと論理AND—次の例では、 policy1 が最初に評価されます。 policy1 が評価された後に値 TRUE が返された場合、 policy2 はスキップされ、 policy3 が評価されます。 policy1 が評価された後に値 FALSE が返された場合、 policy2 が評価されます。 policy2 が TRUE の値を返す場合、 policy3 が評価されます。 policy2 が FALSE の値を返す場合、 policy3 は評価されません。

  • 論理NOT—次の例では、 policy1 が最初に評価されます。 policy1 が評価された後に TRUE の値が返された場合、値は FALSE に反転され、 policy2 は評価されません。値 FALSE が返された場合、値は TRUE に反転し、 policy2 が評価されます。

シーケンシャルリスト [policy1 policy2 policy3] は、ポリシー式 (policy1 && policy2 && policy3)と同じではありません。

シーケンシャルリストは、ルーティングポリシーに一致するルートに基づいて評価されます。例えば、policy1が一致し、アクションがacceptまたはrejectの場合、policy2とpolicy3は評価されません。policy1一致しない場合は、一致が発生してアクションがacceptまたはrejectになるまで、policy2が評価されます。

ポリシー式は、TRUEまたはFALSEの値に変換されるルーティングポリシーのアクションと、指定された論理運用担当者のロジックに基づいて評価されます。(ポリシー式の評価の詳細については、「 ポリシー式の評価」を参照してください)。たとえば、 policy1 が FALSE の値を返した場合、 policy2 と policy3 は評価されません。 policy1 が TRUE の値を返す場合、 policy2 が評価されます。 policy2 が FALSE の値を返す場合、 policy3 は評価されません。 policy2 が TRUE の値を返す場合、 policy3 が評価されます。

ポリシー式とシーケンシャルリストを組み合わせることもできます。次の例では、 policy1 が FALSE の値を返すと、 policy2 が評価されます。 policy2 が TRUE の値を返し、 next policy アクションが含まれている場合、 policy3 が評価されます。 policy2 が TRUE の値を返しても、 next policy アクションを含むアクションが含まれていない場合、 policy3 は引き続き評価されます(アクションを指定しない場合、次の条件または次のポリシーがデフォルトのアクションであるため)。 policy2 が TRUE の値を返し、 accept アクションを含む場合、 policy3 は評価されません。

ポリシー式の評価

評価時に、ポリシー フレームワーク ソフトウェアはポリシー アクションを TRUE または FALSE の値に変換します。これは、ルート上で実行されるフロー制御アクションを決定する要因です。ただし、ソフトウェアは、ポリシー式全体を評価するまで、ルートに対してフロー制御アクションを実際に実行しません。

ポリシー フレームワーク ソフトウェアは、ポリシー式を次のように評価します。

  1. ソフトウェアは、ポリシー式の最初のルーティングポリシーに対してルートを評価し、指定されたアクションまたはデフォルトのアクションをTRUEまたはFALSEの値に変換します。(ポリシーアクションのコンバージョン値については、 表1を参照してください。)

  2. ソフトウェアは、TRUEまたはFALSEの値を受け取り、ポリシー式で使用される論理運用担当者に対して評価します( 表2を参照)。ソフトウェアは、使用する論理運用担当者に基づいて、次のポリシーを評価するかどうかを判断します(存在する場合)。

    ポリシー フレームワーク ソフトウェアは、ショートカットの評価方法を使用します。ポリシーの評価結果がポリシー式全体の値を事前に決定する場合、ソフトウェアは式内の後続のポリシーを評価しません。たとえば、ポリシー式が論理 AND 運用担当者を使用し、ポリシーの評価が FALSE の値を返す場合、未評価のポリシーの値が何であれ、式の最終値は FALSE になることが保証されるため、ソフトウェアは式内の後続のポリシーを評価しません。

  3. ソフトウェアは、ポリシー表現内の後続の各ルーティングポリシーについて、ステップ 1とステップ 2を実行します(それらが存在する場合)、それらを評価する必要があります。

  4. 最後のルーティングポリシーを評価した後、適切であれば、各ルーティングポリシーの評価から得られたTRUEまたはFALSEの値をソフトウェアで評価します。使用された論理運用担当者に基づいて、TRUEまたはFALSEの出力が計算されます。

  5. ソフトウェアは、TRUEまたはFALSEの出力をアクションに変換します。(ポリシーアクション変換値については、 表1を参照してください。)アクションが実行されます。

    式の各ポリシーがTRUEの値を返した場合、ソフトウェアはTRUEの出力を最後のポリシーで指定されたフロー制御アクションに変換します。例えば、ポリシー式 (policy1 && policy2) が指定され、 policy1 が accept を指定し、 policy2 が next termを指定した場合、 next term アクションが実行されます。

    ポリシーの1つで指定されたアクションがルート特性を操作する場合、ポリシーフレームワークソフトウェアは、残りのポリシーの評価中に新しいルート特性を転送します。例えば、ポリシー式の最初のポリシーで指定されたアクションがルートのメトリックを500に 設定した場合、このルートは次のポリシーで定義された metric 500 の基準に一致します。ただし、ポリシー式の中間または最後にあるポリシーでルート特性操作アクションが指定されている場合は、ショートカット評価のため、ポリシーが評価されず、ルート特性の操作が発生しない可能性があります。

ポリシー式の評価

次のサンプルルーティングポリシーでは、3つのポリシー式を使用します。

ポリシー フレームワーク ソフトウェアは、トランジット BGP ルート 10.10.1.0/24 を、サンプル ルーティングポリシーで指定された 3 つのポリシー式に照らして、次のように評価します。

  • (policy-A &; &; policy-B)—10.10.1.0/24は policy-Aに対して評価されます。10.10.1.0/24は policy-Aで指定されたルートリストと一致するため、指定されたアクション reject が返されます。 reject はFALSEの値に変換され、FALSEは指定された論理ANDに対して評価されます。 policy-B の評価の結果がどうであれ、FALSE の結果は確実であるため (ポリシー式ロジックでは、任意の結果と FALSE の値が FALSE の出力を生成します)、 policy-B は評価されず、FALSE の出力が生成されます。FALSE 出力は reject に変換され、10.10.1.0/24 は拒否されます。

  • (policy-A || policy-B)—10.10.1.0/24はpolicy-Aに対して評価されます。10.10.1.0/24はpolicy-Aで指定されたルートリストと一致するため、指定されたアクションrejectが返されます。rejectはFALSEの値に変換され、FALSEは指定された論理ORに対して評価されます。論理 OR は TRUE の出力を生成するために少なくとも 1 つの値 TRUE を必要とするため、10.10.1.0/24 は policy-B に対して評価されます。10.10.1.0/24 は policy-B と一致しないため、デフォルトのアクション next-policy が返されます。next-policyは TRUE の値に変換され、FALSE (policy-A評価の場合) と TRUE (policy-B評価の場合) の値が指定された論理 OR に対して評価されます。ポリシー式ロジックでは、FALSEまたはTRUEはTRUEの出力を生成します。TRUE の出力は next-policy に変換されます。(TRUE は、ポリシー フレームワーク ソフトウェアによって保持される最後のアクションnext-policyため、next-policy に変換されます。)policy-B はポリシー式の最後の ルーティングポリシー であるため、BGP のデフォルトのエクスポート ポリシーで指定されたアクションが実行されます。

  • (!policy-A)—10.10.1.0/24は policy-Aに対して評価されます。10.10.1.0/24は policy-Aで指定されたルートリストと一致するため、 reject の指定されたアクションが返されます。 reject はFALSEの値に変換され、FALSEは指定された論理NOTに対して評価されます。FALSEの値は、論理NOTのルールに基づいてTRUEの出力に逆になります。TRUEの出力は acceptに変換され、ルート10.10.1.0/24が受け入れられます。