ポリシー式の理解
ポリシー式は、ポリシー フレームワーク ソフトウェアに、ルーティング ポリシーを評価する別の方法を提供します。ポリシー式では、ポリシーでブール論理演算子を使用します。論理演算子は、ポリシーを評価するためのルールを確立します。
ポリシー式でのルーティング ポリシーの評価中に、受理、拒否、または次のポリシーのポリシー アクションは、TRUE または FALSE の値に変換されます。この値は、指定された論理演算子に対して評価され、TRUE または FALSE の出力が生成されます。その後、出力は、accept、reject、または次のポリシーのフロー制御アクションに変換されます。ポリシー式の結果は、1 つのポリシーに適用される場合と同様に適用されます。ルートが受理または拒否されて評価が終了するか、次のポリシーが評価されます。
表 1 は、ポリシー アクションとそれに対応する TRUE および FALSE 値、およびフロー制御アクション値をまとめたものです。 表 2 では、論理演算子について説明します。ポリシー式の評価の詳細については、「 政策表現の評価」を参照してください。
ポリシー式を括弧で囲む必要があります。ポリシー式は、 import ステートメントまたは export ステートメントと from policy ステートメントの任意の場所に配置できます。
ポリシーアクション |
コンバージョン値 |
フロー制御アクション変換値 |
|---|---|---|
受け入れる |
真 |
受け入れる |
リジェクト |
偽 |
リジェクト |
次のポリシー |
真 |
次のポリシー |
論理演算子 |
ポリシー式のロジック |
論理演算子がポリシー式の評価に与える影響 |
|---|---|---|
&& (論理 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は評価されません。export (policy1 && policy2)
論理OR:次の例では、
policy1が最初に評価されます。policy1が評価された後に値 TRUE が返された場合、policy2は評価されません。値 FALSE が返された場合は、policy2が評価されます。export (policy1 || policy2)
論理ORおよび論理AND:次の例では、
policy1が最初に評価されます。policy1が評価された後、値 TRUE が返された場合、policy2はスキップされ、policy3が評価されます。policy1評価後に値 FALSE が返された場合は、policy2が評価されます。policy2が値 TRUE を返す場合は、policy3が評価されます。policy2が値 FALSE を返す場合、policy3は評価されません。export [(policy1 || policy2) && policy3]
論理 NOT:次の例では、
policy1が最初に評価されます。policy1が評価された後に TRUE の値が返された場合、値は FALSE に逆転し、policy2は評価されません。値 FALSE が返された場合、値は TRUE に逆転され、policy2評価されます。export (!policy1 && 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は評価されません。
export [(policy1 || policy2) policy3]
政策表現の評価
評価時に、ポリシー フレームワーク ソフトウェアは、ポリシー アクションを、ルート上で実行されるフロー制御アクションを決定する要因である TRUE または FALSE の値に変換します。ただし、ソフトウェアは、ポリシー式全体を評価するまで、ルートに対して実際にフロー制御アクションを実行しません。
ポリシー フレームワーク ソフトウェアは、ポリシー式を次のように評価します。
ソフトウェアは、ポリシー式の最初のルーティング ポリシーに対してルートを評価し、指定されたアクションまたはデフォルトのアクションを TRUE または FALSE の値に変換します。(ポリシー・アクションのコンバージョン値については、 表 1を参照してください。
ソフトウェアは、TRUEまたはFALSEの値を受け取り、ポリシー式で使用される論理演算子に対して評価します( 表 2を参照)。使用された論理演算子に基づいて、次のポリシーが存在する場合、それを評価するかどうかがソフトウェアによって判断されます。
ポリシー フレームワーク ソフトウェアは、評価のショートカット方法を使用します。ポリシーの評価結果がポリシー式全体の値を事前に決定する場合、ソフトウェアは式内の後続のポリシーを評価しません。たとえば、ポリシー式で論理 AND 演算子が使用され、ポリシーの評価で FALSE が返された場合、未評価のポリシーの値に関係なく、式の最終値は FALSE であることが保証されるため、ソフトウェアは式内の後続のポリシーを評価しません。
ソフトウェアは、ポリシー式内の後続の各ルーティング・ポリシーに対してステップ1とステップ2を実行します(存在する場合、それらを評価する必要がある場合)。
最後のルーティング ポリシーを評価した後、適切であれば、ソフトウェアは各ルーティング ポリシーの評価から得られた TRUE または FALSE の値を評価します。使用された論理演算子に基づいて、TRUE または FALSE の出力が計算されます。
ソフトウェアは、TRUE または FALSE の出力をアクションに戻します。(ポリシー・アクションのコンバージョン値については、 表 1を参照してください。アクションが実行されます。
式内の各ポリシーが TRUE の値を返した場合、ソフトウェアは TRUE の出力を最後のポリシーで指定されたフロー制御アクションに戻します。たとえば、ポリシー式
(policy1 && policy2)が指定され、policy1でacceptが指定され、policy2でnext termが指定されている場合、next termアクションが実行されます。ポリシーの 1 つで指定されたアクションがルート特性を操作する場合、ポリシー フレームワーク ソフトウェアは、残りのポリシーの評価中に新しいルート特性を転送します。たとえば、ポリシー式の最初のポリシーで指定されたアクションでルートのメトリックが 500 に設定されている場合、このルートは次のポリシーで定義された
metric 500の条件に一致します。ただし、ポリシー式の途中または末尾にあるポリシーでルート特性操作アクションが指定されている場合、ショートカット評価により、ポリシーが評価されず、ルート特性の操作が発生しない可能性があります。
ポリシー式の評価
以下のルーティング ポリシー例では、3 つのポリシー式を使用しています。
[edit]
policy-options {
policy-statement policy-A {
from {
route-filter 10.10.0.0/16 orlonger;
}
then reject;
}
}
policy-options {
policy-statement policy-B {
from {
route-filter 10.20.0.0/16 orlonger;
}
then accept;
}
}
protocols {
bgp {
neighbor 192.168.1.1 {
export (policy-A && policy-B);
}
neighbor 192.168.2.1 {
export (policy-A || policy-B);
}
neighbor 192.168.3.1 {
export (!policy-A);
}
}
}
ポリシー フレームワーク ソフトウェアは、トランジット 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 が受け入れられます。