Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

了解策略表达式

策略表达式为策略框架软件提供了一种评估路由策略的不同方法。策略表达式将布尔逻辑运算符与策略一起使用。逻辑运算符建立评估策略所依据的规则。

在策略表达式中评估路由策略期间,接受、拒绝或下一个策略的策略操作将转换为 TRUE 或 FALSE 值。然后根据指定的逻辑运算符计算此值,以生成 TRUE 或 FALSE 的输出。然后将输出转换回“接受”、“拒绝”或“下一个策略”的流控制操作。应用策略表达式的结果,就像应用于单个策略一样;接受或拒绝路由,评估结束,或者评估下一个策略。

表 1 汇总了策略操作及其相应的 TRUE 和 FALSE 值以及流控制操作值。 表 2 介绍了逻辑运算符。有关策略表达式计算的完整信息,请参见 策略表达式评估

必须将策略表达式括在括号中。您可以将策略表达式放置在 or export 语句和语句中的任何importfrom policy位置。

表 1: 策略操作转化值

策略操作

转化价值

流控制操作转化值

接受

接受

拒绝

拒绝

下一政策

下一政策

表 2: 策略表达式逻辑运算符

逻辑运算符

策略表达式逻辑

逻辑运算符如何影响策略表达式评估

&&(逻辑与)

逻辑 AND 要求所有值都必须为 TRUE 才能生成 TRUE 输出。

路由策略值 TRUE 和 TRUE 生成 TRUE 输出。TRUE 和 FALSE 的值生成 FALSE 的输出。FALSE 和 FALSE 的值产生 FALSE 的输出。

如果第一个路由策略返回值 TRUE,则评估下一个策略。如果第一个策略返回 FALSE 的值,则表达式的计算结束,并且不会计算表达式中的后续策略。

||(逻辑或)

逻辑 OR 要求至少一个值必须为 TRUE 才能生成 TRUE 输出。

路由策略值为 TRUE 和 FALSE 将生成 TRUE 的输出。TRUE 和 TRUE 的值生成 TRUE 的输出。FALSE 和 FALSE 的值产生 FALSE 的输出。

如果第一个路由策略返回值 TRUE,则表达式的计算结束,并且不会计算表达式中的后续策略。如果第一个策略返回 FALSE 值,则评估下一个策略。

! (逻辑上不是)

逻辑 NOT 将 TRUE 的值反转为 FALSE,将 FALSE 的值反转为 TRUE。它还会反转“接受”和“下一个拒绝”策略和“拒绝接受”的操作。

如果与逻辑 AND 运算符一起使用,并且第一个路由策略值 FALSE 反转为 TRUE,则评估下一个策略。如果 TRUE 的值反转为 FALSE,则表达式的计算结束,并且不会计算表达式中的后续策略。

如果与逻辑 OR 运算符一起使用,并且第一个路由策略值 FALSE 反转为 TRUE,则表达式的计算结束,并且不会计算表达式中的后续策略。如果 TRUE 的值反转为 FALSE,则评估下一个策略。

如果与策略一起使用,并且流控制操作为“接受”或“下一个策略”,则这些操作将反转为“拒绝”。如果流控制操作被拒绝,此操作将反转为接受。

有关详细信息,请参阅以下部分:

策略表达式示例

以下示例说明如何使用逻辑运算符创建策略表达式:

  • 逻辑 AND — 在以下示例中, policy1 首先评估。如果评估 after policy1 ,则返回 policy2 值 TRUE,则计算。如果返回值 FALSE, policy2 则不计算。

  • 逻辑 OR - 在以下示例中, policy1 首先评估。如果评估了 after policy1 ,则返回值 TRUE, policy2 则不计算。如果返回值 FALSE, policy2 则计算值。

  • 逻辑 OR 和逻辑 AND — 在以下示例中, policy1 首先计算。如果计算了 after policy1 ,则返回值 TRUE, policy2 跳过并 policy3 对其进行计算。如果评估 after policy1 ,则返回 policy2 值 FALSE,则计算。如果返回值 TRUE,policy3policy2计算。如果返回值 FALSE,policy3policy2不计算。

  • 逻辑 NOT - 在以下示例中, policy1 首先评估。如果 after policy1 被计算,则返回值 TRUE,该值将反转为 FALSE,并且 policy2 不计算。如果返回值 FALSE,则该值将反转为 TRUE 并 policy2 计算。

顺序列表 [policy1 policy2 policy3] 与策略表达式 (policy1 && policy2 && policy3)不同。

根据与路由策略匹配的路由评估顺序列表。例如,如果 policy1 匹配且操作为 acceptrejectpolicy2 并且 policy3 不计算。如果不匹配,policy2policy1进行评估,依此类推,直到匹配发生且操作为 acceptreject

将根据路由策略中的操作(转换为 TRUE 或 FALSE 值)以及指定逻辑运算符的逻辑来评估策略表达式。(有关策略表达式评估的完整信息,请参阅 策略表达式评估。)例如,if policy1 返回值 FALSE, policy2 并且 policy3 不计算。如果返回值 TRUE,policy2policy1计算。如果返回值 FALSE,policy3policy2不计算。如果返回值 TRUE,policy3policy2计算。

您还可以组合策略表达式和顺序列表。在下面的示例中,如果 policy1 返回值 FALSE, policy2 则计算。如果返回值 TRUE 并包含一个next policy操作,policy3policy2计算。如果返回值 TRUE,但不包含操作(包括next policy操作policy3),则policy2仍会进行评估(因为如果未指定操作,则下一个术语或下一个策略是默认操作)。如果返回值 TRUE 并包含操作acceptpolicy3policy2不计算。

策略表达式评估

在评估期间,策略框架软件将策略操作转换为 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)policy1指定并policy2指定acceptnext term了 ,next term则执行该操作。

    如果其中一个策略中指定的操作操作操纵了路由特征,则策略框架软件会在评估其余策略期间转发新的路由特征。例如,如果在策略表达式的第一个策略中指定的操作将路由的指标设置为 500,则此路由与下一个 metric 500 策略中定义的条件匹配。但是,如果在位于策略表达式中间或末尾的策略中指定了路由特征操作,则由于快捷方式计算,可能永远不会评估策略,并且永远不会发生路由特征的操作。

评估策略表达式

以下示例路由策略使用三个策略表达式:

策略框架软件根据示例路由策略中指定的三个策略表达式评估中转 BGP 路由 10.10.1.0/24,如下所示:

  • (policy-A && policy-B) - 根据 policy-A评估 10.10.1.0/24。 10.10.1.0/24 与 中 policy-A指定的路由列表匹配,因此返回指定的操作 rejectreject 将转换为 FALSE 值,并根据指定的逻辑 AND 计算 FALSE。因为无论 的 policy-B 评估结果是什么(在策略表达式逻辑中,任何结果和 FALSE 的值都会产生 FALSE 的输出),所以 FALSE 的结果是确定的, policy-B 因此不会计算并生成 FALSE 的输出。FALSE 输出将转换为 reject,而 10.10.1.0/24 将被拒绝。

  • (policy-A || policy-B)— 根据 policy-A评估 10.10.1.0/24。 10.10.1.0/24 与 中 policy-A指定的路由列表匹配,因此返回指定的操作 rejectreject 将转换为 FALSE 值,然后根据指定的逻辑 OR 计算 FALSE。由于逻辑 OR 要求至少一个 TRUE 值才能生成 TRUE 输出,因此将根据 policy-B计算 10.10.1.0/24。 10.10.1.0/24 不匹配policy-B,因此返回默认操作 。next-policy 将 转换为 next-policy TRUE 值,然后根据指定的逻辑 OR 评估 FALSE(用于 policy-A 评估)和 TRUE(用于 policy-B 评估)的值。在策略表达式逻辑中,FALSE 或 TRUE 生成 TRUE 的输出。TRUE 的输出将转换为 next-policy。(TRUE 转换为 next-policy ,因为 next-policy 这是策略框架软件保留的最后一个操作) policy-B 是策略表达式中的最后一个路由策略,因此将执行 BGP 的默认导出策略指定的操作。

  • (!policy-A)—根据 policy-A评估 10.10.1.0/24。 10.10.1.0/24 与 中 policy-A指定的路由列表匹配,因此返回指定的操作 rejectreject 将转换为值 FALSE,并根据指定的逻辑 NOT 计算 FALSE。FALSE 的值根据逻辑 NOT 的规则反转为 TRUE 的输出。TRUE 的输出将转换为 accept,并接受路由 10.10.1.0/24。