Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

ポリシー式の理解

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

ポリシー式でのルーティング ポリシーの評価中に、受理、拒否、または次のポリシーのポリシー アクションは、TRUE または FALSE の値に変換されます。この値は、指定された論理演算子に対して評価され、TRUE または FALSE の出力が生成されます。その後、出力は、accept、reject、または次のポリシーのフロー制御アクションに変換されます。ポリシー式の結果は、1 つのポリシーに適用される場合と同様に適用されます。ルートが受理または拒否されて評価が終了するか、次のポリシーが評価されます。

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

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

表 1: ポリシー アクションのコンバージョン値

ポリシーアクション

コンバージョン値

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

受け入れる

受け入れる

リジェクト

リジェクト

次のポリシー

次のポリシー

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

論理演算子

ポリシー式のロジック

論理演算子がポリシー式の評価に与える影響

&& (論理 AND)

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

ルーティング ポリシー値が TRUE の場合、出力は TRUE になります。値が TRUE の場合と FALSE の場合、出力は FALSE になります。値が FALSE の場合と FALSE の場合、出力は FALSE になります。

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

||(論理和)

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

ルーティング ポリシーの値が TRUE と FALSE の場合、出力は TRUE になります。値が TRUE の場合、出力は TRUE になります。値が FALSE の場合と FALSE の場合、出力は FALSE になります。

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

! (論理NOT)

論理 NOT は、TRUE の値を FALSE に、FALSE の値を TRUE に反転させます。また、受け入れと次のポリシーのアクションを取り消して拒否し、拒否して受け入れます。

論理 AND 演算子と一緒に使用し、最初のルーティング ポリシーの FALSE 値が TRUE に逆転した場合、次のポリシーが評価されます。TRUE の値が FALSE に戻された場合、式の評価は終了し、式内の後続のポリシーは評価されません。

論理OR演算子と一緒に使用し、FALSEの最初のルーティングポリシー値がTRUEに逆転した場合、式の評価は終了し、式内の後続のポリシーは評価されません。TRUE の値が FALSE に逆転すると、次のポリシーが評価されます。

あるポリシーで使用され、フロー制御アクションが accept または next policy の場合、これらのアクションは拒否に対して取り消されます。フロー制御アクションが拒否の場合、このアクションは逆に accept に設定されます。

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

ポリシー式の例

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

  • 論理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の場合、 policy2policy3 は評価されません。policy1一致しない場合は、一致が発生してアクションがacceptまたはrejectになるまで、policy2が評価されます。

ポリシー式は、TRUE または FALSE の値に変換されたルーティング ポリシー内のアクションと、指定された論理演算子のロジックに基づいて評価されます。(ポリシー式の評価の詳細については、「 政策表現の評価」を参照してください)。たとえば、 policy1 が値 FALSE を返す場合、 policy2policy3 は評価されません。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) が指定され、 policy1accept が指定され、 policy2next 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 に変換され、指定された論理 OR に対して FALSE が評価されます。論理 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 が受け入れられます。