ポリシー式の理解
ポリシー表現により、ポリシー フレームワーク ソフトウェアは、ルーティング ポリシーを評価するための別の方法を使用できます。 ポリシー式 では、ポリシーでブール論理演算子を使用します。論理演算子は、ポリシーを評価するためのルールを確立します。
ポリシー式でのルーティングポリシーの評価中に、accept、reject、またはnext policyのポリシーアクションがTRUEまたはFALSEの値に変換されます。次に、この値を指定した論理運用担当者に対して評価して、TRUEまたはFALSEの出力を生成します。その後、出力は、受け入れ、拒否、または次のポリシーのフロー制御アクションに変換されます。ポリシー式の結果は、単一のポリシーに適用される場合と同様に適用されます。ルートが承認または拒否され、評価が終了するか、次のポリシーが評価されます。
表1は 、ポリシーアクションと、それに対応するTRUEおよびFALSE値とフロー制御アクション値をまとめたものです。 表2は 、論理演算子について説明しています。ポリシー式の評価の詳細については、「 ポリシー式の評価」を参照してください。
ポリシー式を括弧で囲む必要があります。ポリシー式は、 import または export ステートメントと from policy ステートメントの任意の場所に配置できます。
ポリシーアクション |
コンバージョン値 |
フロー制御アクション変換値 |
|---|---|---|
同意する |
True |
同意する |
拒否する |
誤 |
拒否する |
次のポリシー |
True |
次のポリシー |
論理演算子 |
ポリシー式ロジック |
論理演算子がポリシー式の評価に及ぼす影響 |
|---|---|---|
& &(論理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は評価されません。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の値に変換され、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が受け入れられます。