ポリシー式の理解
ポリシー式は、ポリシー フレームワーク ソフトウェアに、ルーティング ポリシーを評価する別の方法を提供します。ポリシー 式 では、ポリシーでブール論理演算子を使用します。論理演算子は、ポリシーを評価するためのルールを確立します。
ポリシー式でのルーティング ポリシーの評価中に、受理、拒否、または次のポリシーのポリシー アクションは、TRUE または FALSE の値に変換されます。この値は、指定された論理演算子に対して評価され、TRUE または FALSE の出力が生成されます。その後、出力は、accept、reject、または次のポリシーのフロー制御アクションに変換されます。ポリシー式の結果は、1 つのポリシーに適用される場合と同様に適用されます。ルートが受理または拒否されて評価が終了するか、次のポリシーが評価されます。
表 1 は、ポリシー アクションとそれに対応する TRUE および FALSE 値、およびフロー制御アクション値をまとめたものです。 表 2 は論理演算子を記述します。ポリシー式の評価の詳細については、を参照してください 。政策表現の評価
ポリシー式を括弧で囲む必要があります。ポリシー式は、 または ステートメントおよび ステートメント内のどこにでも配置できます。import
export
from policy
ポリシーアクション |
コンバージョン値 |
フロー制御アクション変換値 |
---|---|---|
受け入れる |
True |
受け入れる |
拒否 |
False |
拒否 |
次のポリシー |
True |
次のポリシー |
論理演算子 |
ポリシー式のロジック |
論理演算子がポリシー式の評価に与える影響 |
---|---|---|
&& (論理 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
後に 評価された場合は、TRUE の値が返され、 評価されます。policy1
policy2
値が FALSE が返された場合、 は評価されません。policy2
export (policy1 && policy2)
論理OR:次の例では、 が最初に評価されます。
policy1
after が評価された場合、値 TRUE が返され、 評価されません。policy1
policy2
値が FALSE が返された場合は、 が評価されます。policy2
export (policy1 || policy2)
論理ORおよび論理AND—次の例では、 が最初に評価されます。
policy1
after が評価された場合、値 TRUE が返され、 スキップされて 評価されます。policy1
policy2
policy3
後に 評価された場合は、FALSE の値が返され、 評価されます。policy1
policy2
値が TRUE を返す場合は 、 評価されます。policy2
policy3
値が FALSE を返す場合は 、 評価されません。policy2
policy3
export [(policy1 || policy2) && policy3]
論理NOT:次の例では、 が最初に評価されます。
policy1
後に 値が TRUE が返された場合、値は FALSE に逆転され 、評価されません。policy1
policy2
値 FALSE が返された場合、値は TRUE に逆転され 、評価されます。policy2
export (!policy1 && policy2)
シーケンシャルリストは 、ポリシー式 と同じではありません。[policy1 policy2 policy3]
(policy1 && policy2 && policy3)
シーケンシャルリストは、ルーティングポリシーに一致するルートに基づいて評価されます。例えば、 が一致し、アクションが または であり、 が評価されない場合などです。policy1
accept
reject
policy2
policy3
一致しない場合は、 が評価され、一致が発生してアクションが または になるまで、 が評価されます。policy1
policy2
accept
reject
ポリシー式は、TRUE または FALSE の値に変換されたルーティング ポリシー内のアクションと、指定された論理演算子のロジックに基づいて評価されます。(ポリシー式の評価の詳細については、「」を参照してください)。たとえば、if は FALSE の値を返し、評価されません。政策表現の評価policy1
policy2
policy3
値が TRUE を返す場合は 、 評価されます。policy1
policy2
値が FALSE を返す場合は 、 評価されません。policy2
policy3
値が TRUE を返す場合は 、 評価されます。policy2
policy3
ポリシー式とシーケンシャルリストを組み合わせることもできます。次の例では、if が値 FALSE を返す場合に評価されます。policy1
policy2
値が TRUE を返し、アクションが含まれている場合は 、 評価されます。policy2
next policy
policy3
値が TRUE を返すが、アクション (アクションを含む) が含まれていない場合は、引き続き評価されます (アクションを指定しない場合、次の用語または次のポリシーが既定のアクションになるため)。policy2
next policy
policy3
値が TRUE を返し、アクションが含まれている場合 は、 評価されません。policy2
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 が に対して評価されます。10.10.1.0/24 は で指定されたルート リストと一致するため、 で指定された のアクションが返されます。は値 FALSE に変換され、FALSE は指定された論理 AND に対して評価されます。
policy-A
policy-A
reject
reject
FALSE の結果は、 の評価 の結果がどのようなものであっても確実であるため (ポリシー式のロジックでは、結果と値が FALSE の場合、FALSE の出力が生成されます)、評価されず、 FALSE の出力が生成されます。policy-B
policy-B
FALSE 出力は に変換 され、10.10.1.0/24 は拒否されます。reject
(policy-A || policy-B)—10.10.1.0/24 が に対して評価されます。 10.10.1.0/24 は で指定されたルート リストに一致するため、 で指定された のアクションが返されます。 は FALSE の値に変換され、指定された論理 OR に対して FALSE が評価されます。
policy-A
policy-A
reject
reject
論理ORは、TRUEの出力を生成するために少なくとも1つの値TRUEを必要とするため、10.10.1.0/24はに対して評価 されます。10.10.1.0/24は と一致しないため 、 の デフォルトアクションが返されます。policy-B
policy-B
next-policy
は TRUE の値に変換され、次に FALSE (評価の場合 ) と TRUE (評価の場合 ) の値が、指定された論理 OR に対して評価されます。next-policy
policy-A
policy-B
ポリシー式ロジックでは、FALSE または TRUE は TRUE の出力を生成します。TRUE の出力は に変換 されます。next-policy
(TRUEは、ポリシーフレームワークソフトウェアが保持した最後のアクションであったために変換されます。)はポリシー式の最後のルーティングポリシーであるため、BGPのデフォルトのエクスポートポリシーで指定されたアクションが実行されます。next-policy
next-policy
policy-B
(!policy-A)—10.10.1.0/24 が に対して評価されます。 10.10.1.0/24 は で指定されたルート リストと一致するため、 で指定された のアクションが返されます。は値 FALSE に変換され、FALSE は指定された論理 NOT に対して評価されます。
policy-A
policy-A
reject
reject
FALSE の値は、論理 NOT の規則に基づいて TRUE の出力に逆転されます。TRUE の出力は に変換 され、ルート 10.10.1.0/24 が受け入れられます。accept