Grundlegendes zu Richtlinienausdrücken
Richtlinienausdrücke bieten der Richtlinien-Framework-Software eine andere Möglichkeit, Routing-Richtlinien auszuwerten. Ein Richtlinienausdruck verwendet boolesche logische Operatoren mit Richtlinien. Die logischen Operatoren legen Regeln fest, nach denen die Richtlinien ausgewertet werden.
Während der Auswertung einer Routingrichtlinie in einem Richtlinienausdruck wird die Richtlinienaktion "Akzeptieren", "Ablehnen" oder "Nächste Richtlinie" in den Wert "TRUE" oder "FALSE" konvertiert. Dieser Wert wird dann anhand des angegebenen logischen Operators ausgewertet, um die Ausgabe TRUE oder FALSE zu erzeugen. Die Ausgabe wird dann wieder in eine Flusssteuerungsaktion von "Akzeptieren", "Ablehnen" oder "Nächste Richtlinie" konvertiert. Das Ergebnis des Richtlinienausdrucks wird so angewendet, wie es auf eine einzelne Richtlinie angewendet würde. Die Route wird akzeptiert oder abgelehnt, und die Auswertung wird beendet, oder die nächste Richtlinie wird ausgewertet.
Tabelle 1 fasst die Richtlinienaktionen und die entsprechenden TRUE- und FALSE-Werte sowie die Aktionswerte für die Flusssteuerung zusammen. Tabelle 2 Beschreibt die logischen Operatoren. Vollständige Informationen zur Auswertung von Richtlinienausdrücken finden Sie unter Auswertung von Richtlinienausdrücken.
Sie müssen einen Richtlinienausdruck in Klammern einschließen. Sie können einen Richtlinienausdruck an einer beliebigen Stelle in der import
oder-Anweisung export
und in der from policy
Anweisung platzieren.
Politische Maßnahmen |
Conversion-Wert |
Konvertierungswert für die Flusssteuerungsaktion |
---|---|---|
Annehmen |
STIMMT |
Annehmen |
Ablehnen |
FALSCH |
Ablehnen |
Nächste Richtlinie |
STIMMT |
Nächste Richtlinie |
Logischer Operator |
Logik für Richtlinienausdrücke |
Auswirkungen des logischen Operators auf die Auswertung von Richtlinienausdrücken |
---|---|---|
&& (Logisches UND) |
Logisches AND erfordert, dass alle Werte TRUE sein müssen, um die Ausgabe von TRUE zu erzeugen. Der Routingrichtlinienwert TRUE und TRUE erzeugt die Ausgabe TRUE. Der Wert TRUE und FALSE erzeugt die Ausgabe von FALSE. Der Wert FALSE und FALSE erzeugt die Ausgabe von FALSE. |
Wenn die erste Routingrichtlinie den Wert TRUE zurückgibt, wird die nächste Richtlinie ausgewertet. Wenn die erste Richtlinie den Wert FALSE zurückgibt, endet die Auswertung des Ausdrucks, und nachfolgende Richtlinien im Ausdruck werden nicht ausgewertet. |
|| (Logisches ODER) |
Logisches OR erfordert, dass mindestens ein Wert TRUE sein muss, um die Ausgabe TRUE zu erzeugen. Der Routingrichtlinienwert TRUE und FALSE erzeugt die Ausgabe TRUE. Der Wert von TRUE und TRUE erzeugt die Ausgabe von TRUE. Der Wert FALSE und FALSE erzeugt die Ausgabe von FALSE. |
Wenn die erste Routingrichtlinie den Wert TRUE zurückgibt, endet die Auswertung des Ausdrucks, und nachfolgende Richtlinien im Ausdruck werden nicht ausgewertet. Wenn die erste Richtlinie den Wert FALSE zurückgibt, wird die nächste Richtlinie ausgewertet. |
! (Logisches NICHT) |
Logisches NOT kehrt den Wert von TRUE in FALSE und von FALSE in TRUE um. Außerdem werden die Aktionen "Akzeptieren" und "Nächste Richtlinie zum Ablehnen" und "Ablehnen" zum Akzeptieren rückgängig gemacht. |
Wenn es mit dem logischen AND-Operator verwendet wird und der erste Routingrichtlinienwert von FALSE in TRUE umgekehrt wird, wird die nächste Richtlinie ausgewertet. Wenn der Wert von TRUE in FALSE umgekehrt wird, endet die Auswertung des Ausdrucks, und nachfolgende Richtlinien im Ausdruck werden nicht ausgewertet. Wenn es mit dem logischen OR-Operator verwendet wird und der erste Routingrichtlinienwert von FALSE in TRUE umgekehrt wird, endet die Auswertung des Ausdrucks, und nachfolgende Richtlinien im Ausdruck werden nicht ausgewertet. Wenn der Wert von TRUE in FALSE umgekehrt wird, wird die nächste Richtlinie ausgewertet. Wenn sie mit einer Richtlinie verwendet werden und die Flusssteuerungsaktion "Akzeptieren" oder "Nächste Richtlinie" lautet, werden diese Aktionen in "Ablehnen" umgekehrt. Wenn die Flusssteuerungsaktion abgelehnt wird, wird diese Aktion in "Akzeptieren" rückgängig gemacht. |
Weitere Informationen finden Sie in den folgenden Abschnitten:
Beispiele für Richtlinienausdrücke
Die folgenden Beispiele zeigen, wie die logischen Operatoren zum Erstellen von Richtlinienausdrücken verwendet werden:
Logisches UND: Wird im folgenden Beispiel
policy1
zuerst ausgewertet. Wenn afterpolicy1
ausgewertet wird, wird der Wert TRUE zurückgegeben undpolicy2
ausgewertet. Wenn der Wert FALSE zurückgegeben wird,policy2
wird er nicht ausgewertet.export (policy1 && policy2)
Logisches ODER:
policy1
Wird im folgenden Beispiel zuerst ausgewertet. Wenn afterpolicy1
ausgewertet wird, wird der Wert TRUE zurückgegeben undpolicy2
nicht ausgewertet. Wenn der Wert FALSE zurückgegeben wird,policy2
wird ausgewertet.export (policy1 || policy2)
Logisches ODER und logisches UND:
policy1
Im folgenden Beispiel wird zuerst ausgewertet. Wenn afterpolicy1
ausgewertet wird, wird der Wert TRUE zurückgegeben,policy2
übersprungen undpolicy3
ausgewertet. Wenn afterpolicy1
ausgewertet wird, wird der Wert FALSE zurückgegeben undpolicy2
ausgewertet. Wennpolicy2
der Wert TRUE zurückgegeben wird,policy3
wird ausgewertet. Wennpolicy2
der Wert FALSE zurückgegeben wird,policy3
wird nicht ausgewertet.export [(policy1 || policy2) && policy3]
Logisches NOT: Wird im folgenden Beispiel
policy1
zuerst ausgewertet. Wenn afterpolicy1
ausgewertet wird, wird der Wert TRUE zurückgegeben, der Wert wird in FALSE umgekehrt undpolicy2
nicht ausgewertet. Wenn der Wert FALSE zurückgegeben wird, wird der Wert in TRUE umgekehrt undpolicy2
ausgewertet.export (!policy1 && policy2)
Die sequenzielle Liste [policy1 policy2 policy3]
ist nicht identisch mit dem Richtlinienausdruck (policy1 && policy2 && policy3)
.
Die sequenzielle Liste wird auf der Grundlage einer Route ausgewertet, die mit einer Routing-Richtlinie übereinstimmt. Beispiel: Wenn policy1
Übereinstimmungen und die Aktion oder reject
istaccept
, policy2
und policy3
nicht ausgewertet werden. Wenn policy1
nicht übereinstimmt, wird ausgewertet und so weiter, policy2
bis eine Übereinstimmung auftritt und die Aktion oder reject
istaccept
.
Die Richtlinienausdrücke werden auf der Grundlage der Aktion in einer Routingrichtlinie, die in den Wert TRUE oder FALSE konvertiert wird, und der Logik des angegebenen logischen Operators ausgewertet. (Vollständige Informationen zur Auswertung von Richtlinienausdrücken finden Sie unter Auswertung von Richtlinienausdrücken.) Beispiel: if policy1
gibt den Wert FALSE policy2
zurück und policy3
werden nicht ausgewertet. Wenn policy1
der Wert TRUE zurückgegeben wird, policy2
wird ausgewertet. Wenn policy2
der Wert FALSE zurückgegeben wird, policy3
wird nicht ausgewertet. Wenn policy2
der Wert TRUE zurückgegeben wird, policy3
wird ausgewertet.
Sie können auch Richtlinienausdrücke und sequenzielle Listen kombinieren. Im folgenden Beispiel wird if policy1
den Wert FALSE zurückgegeben. policy2
Wenn policy2
der Wert TRUE zurückgegeben wird und eine next policy
Aktion enthält, policy3
wird ausgewertet. Wenn policy2
der Wert TRUE zurückgegeben wird, aber keine Aktion, einschließlich einer next policy
Aktion, enthält, policy3
wird trotzdem ausgewertet (denn wenn Sie keine Aktion angeben, sind der nächste Begriff oder die nächste Richtlinie die Standardaktionen). Wenn policy2
der Wert TRUE zurückgegeben wird und eine accept
Aktion enthält, policy3
wird nicht ausgewertet.
export [(policy1 || policy2) policy3]
Auswertung von Richtlinienausdrücken
Während der Auswertung konvertiert die Richtlinienframeworksoftware Richtlinienaktionen in die Werte TRUE oder FALSE, bei denen es sich um Faktoren bei der Bestimmung der Flusssteuerungsaktion handelt, die für eine Route ausgeführt wird. Die Software führt jedoch erst dann eine Flusssteuerungsaktion für eine Route aus, wenn sie einen vollständigen Richtlinienausdruck ausgewertet hat.
Die Richtlinienrahmensoftware wertet einen Richtlinienausdruck wie folgt aus:
Die Software wertet eine Route anhand der ersten Routing-Richtlinie in einem Richtlinienausdruck aus und konvertiert die angegebene oder Standardaktion in den Wert TRUE oder FALSE. (Informationen zu den Konvertierungswerten für Richtlinienaktionen finden Sie unter Tabelle 1.)
Die Software wertet den Wert TRUE oder FALSE anhand des logischen Operators aus, der im Richtlinienausdruck verwendet wird (siehe Tabelle 2). Basierend auf dem verwendeten logischen Operator bestimmt die Software, ob die nächste Richtlinie ausgewertet werden soll oder nicht, falls eine vorhanden ist.
Die Software des Richtlinienrahmens verwendet eine verkürzte Evaluierungsmethode: Wenn das Ergebnis der Auswertung einer Richtlinie den Wert des gesamten Richtlinienausdrucks vorbestimmt, wertet die Software die nachfolgenden Richtlinien im Ausdruck nicht aus. Wenn der Richtlinienausdruck z. B. den logischen AND-Operator verwendet und die Auswertung einer Richtlinie den Wert FALSE zurückgibt, wertet die Software nachfolgende Richtlinien im Ausdruck nicht aus, da der endgültige Wert des Ausdrucks garantiert FALSE ist, unabhängig von den Werten der nicht ausgewerteten Richtlinien.
Die Software führt Schritt 1 und Schritt 2 für jede nachfolgende Routing-Richtlinie im Richtlinienausdruck aus, sofern sie vorhanden sind und ausgewertet werden müssen.
Nach der Auswertung der letzten Routing-Richtlinie wertet die Software gegebenenfalls den Wert TRUE oder FALSE aus, der sich aus jeder Auswertung der Routing-Richtlinie ergibt. Basierend auf dem verwendeten logischen Operator wird eine Ausgabe von TRUE oder FALSE berechnet.
Die Software wandelt die Ausgabe von WAHR oder FALSCH wieder in eine Aktion um. (Informationen zu den Konvertierungswerten für Richtlinienaktionen finden Sie unter Tabelle 1.) Die Aktion wird ausgeführt.
Wenn jede Richtlinie im Ausdruck den Wert TRUE zurückgegeben hat, konvertiert die Software die Ausgabe von TRUE zurück in die Flusssteuerungsaktion, die in der letzten Richtlinie angegeben wurde. Wenn z. B. der Richtlinienausdruck
(policy1 && policy2)
angegeben ist undpolicy1
angibtaccept
undpolicy2
angibtnext term
, wird dienext term
Aktion ausgeführt.Wenn eine Aktion, die in einer der Richtlinien angegeben ist, ein Routenmerkmal manipuliert, überträgt die Richtlinien-Framework-Software das neue Routenmerkmal bei der Auswertung der verbleibenden Richtlinien. Wenn z. B. die in der ersten Richtlinie eines Richtlinienausdrucks angegebene Aktion die Metrik einer Route auf 500 festlegt, entspricht diese Route den Kriterien der
metric 500
nächsten Richtlinie. Wenn jedoch eine Manipulationsaktion für ein Routenmerkmal in einer Richtlinie angegeben ist, die sich in der Mitte oder am Ende eines Richtlinienausdrucks befindet, ist es aufgrund der Verknüpfungsauswertung möglich, dass die Richtlinie nie ausgewertet wird und die Manipulation des Routenmerkmals nie erfolgt.
Auswerten von Richtlinienausdrücken
Im folgenden Beispiel für eine Routingrichtlinie werden drei Richtlinienausdrücke verwendet:
[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); } } }
Die Software des Richtlinienrahmens wertet die Transit-BGP-Route 10.10.1.0/24 anhand der drei Richtlinienausdrücke aus, die in der Beispiel-Routing-Richtlinie wie folgt angegeben sind:
(Richtlinie-A &&&; Richtlinie-B)—10.10.1.0/24 wird gegen
policy-A
ausgewertet. 10.10.1.0/24 stimmt mit der inpolicy-A
angegebenen Routenliste überein, sodass die angegebene Aktion vonreject
zurückgegeben wird.reject
wird in den Wert FALSE konvertiert, und FALSE wird anhand des angegebenen logischen AND ausgewertet. Da das Ergebnis von FALSE sicher ist, unabhängig davon, wie die Ergebnisse der Auswertung vonpolicy-B
sind (in der Logik des Richtlinienausdrucks erzeugt jedes Ergebnis UND ein Wert von FALSE die Ausgabe von FALSE),policy-B
wird es nicht ausgewertet, und die Ausgabe von FALSE wird erzeugt. Die Ausgabe FALSE wird inreject
konvertiert, und 10.10.1.0/24 wird zurückgewiesen.(policy-A || policy-B)—10.10.1.0/24 wird gegen
policy-A
ausgewertet. 10.10.1.0/24 stimmt mit der inpolicy-A
angegebenen Routenliste überein, sodass die angegebene Aktion vonreject
zurückgegeben wird.reject
in den Wert FALSE konvertiert wird, wird FALSE anhand des angegebenen logischen OR ausgewertet. Da logisches OR mindestens einen Wert von TRUE erfordert, um eine Ausgabe von TRUE zu erzeugen, wird 10.10.1.0/24 gegenpolicy-B
ausgewertet. 10.10.1.0/24 stimmt nicht übereinpolicy-B
, sodass die Standardaktion vonnext-policy
zurückgegeben wird. Dernext-policy
Wert wird in den Wert TRUE konvertiert, dann werden der Wert von FALSE (für die Auswertung) und TRUE (fürpolicy-A
policy-B
die Auswertung) anhand des angegebenen logischen ODER ausgewertet. In der Richtlinienausdruckslogik erzeugt FALSE ODER TRUE die Ausgabe TRUE. Die Ausgabe von TRUE wird in konvertiert.next-policy
(TRUE wird innext-policy
becausenext-policy
was the last action kept by the policy framework-software konvertiert.)policy-B
ist die letzte Routing-Richtlinie im Richtlinienausdruck, sodass die in der Standardexportrichtlinie für BGP angegebene Aktion ausgeführt wird.(!policy-A)—10.10.1.0/24 wird gegen
policy-A
ausgewertet. 10.10.1.0/24 stimmt mit der inpolicy-A
angegebenen Routenliste überein, sodass die angegebene Aktion vonreject
zurückgegeben wird.reject
wird in den Wert FALSE konvertiert, und FALSE wird anhand des angegebenen logischen NOT ausgewertet. Der Wert von FALSE wird basierend auf den Regeln des logischen NOT in eine Ausgabe von TRUE umgekehrt. Die Ausgabe von TRUE wird inaccept
konvertiert, und Route 10.10.1.0/24 wird akzeptiert.