XPL基本原理
XPL的实现
定义规则。定义将要实施路由过滤的路由信息的特征,即定义一组匹配规则。可以用路由信息中的不同属性作为匹配依据进行设置,如目的地址、发布路由信息的路由器地址等。规则的定义主要通过过滤策略实现。
应用规则。将定义成功的匹配规则应用于路由的发布、接收和引入等过程的策略中,实现对路由的过滤。
集合
全局变量集合:对于一台设备上使用频率较高的数值,可以通过定义全局变量集合将这些数值定义为全局变量。全局变量是可以被设备中所有过滤策略引用的变量。过滤策略引用全局变量的方法为$符号后跟全局变量名,如$glovar1。一个设备只允许定义一组全局变量,提交新的全局变量会覆盖当前定义的全局变量。
路由属性集合:路由属性集合即针对路由的某一属性配置的一组数据。可针对需要被过滤的路由具有的相同或相近的属性,如需要被过滤的路由的目的地址属于同一网段或来自于同一个AS,配置相应的路由属性集合。路由属性集合可应用在过滤策略中形成过滤规则。各路由属性集合的应用范围和匹配条件的对比请参见表11-3。
集合不包括传统列表配置中的“接受”和“拒绝”的概念,仅仅是数据的容器,策略动作完全由用户通过过滤策略指定。
过滤策略(Route-Filter)
- 条件语句:通过集合或单元素来定义,符合条件语句的路由通过此过滤,将执行定义的动作。
- 动作语句:用来为符合条件的路由指定动作。系统通过动作语句可指定路由是否通过策略也可以对路由信息的一些属性进行设置。
XPL语言
XPL语言是将用户希望的路由过滤规则转换成设备上的全局变量集合与过滤策略集合的媒介。XPL语言包括过滤策略集合定义、注释、过滤策略集合元素、条件语句、动作语句、参数化几个部分。
注释
对某行XPL语句的解释,以“!”开头。
说明:
list内容不为空时,最后一行即end-list前一行不可配置注释。 |
xpl ip-prefix-list prefix-list1 ! prefix-list1 is the name of a ip-prefix-list. 10.0.1.0 24, 10.0.3.0 24 eq 26, 10.0.2.0 24 le 28, 10.0.4.0 24 ge 26 le 30 end-list |
集合定义
集合定义一般有标志性的开始和结束的语句,中间可以放置过滤条件。 |
如IPv4地址前缀集合,以xpl ip-prefix-list开始,以end-list结束,中间部分为IPv4地址前缀的罗列: xpl ip-prefix-list prefix-list2 10.0.1.0 24, 10.0.3.0 24 eq 26, 10.0.2.0 24 le 28, 10.0.4.0 24 ge 26 le 30 end-list |
集合元素
可包含地址前缀、AS_Path值、团体属性值等,具体元素的数据类型和配置的过滤策略集合类型一致,元素之间用“,”隔开 |
xpl ip-prefix-list prefix-list3 10.0.1.0 24, ! element 10.0.3.0 24 eq 26, ! element 10.0.2.0 24 le 28, ! element 10.0.4.0 24 ge 26 le 30 end-list |
条件语句
条件语句用于过滤策略中,可以和集合配合使用定义过滤策略的匹配条件。有if、elseif和else三种形式。条件语句可以包含eq(等于)、ge(大于等于)、le(小于等于)、in(包含于)四种比较条件,判断条件之间可进行not、and、or的逻辑运算。 集合可以跟在in后面,用来按照集合中的元素进行过滤。 |
xpl route-filter route-filter1 ! route-filter1 is the name of Route-Filter if med eq 20 then apply community { 100:1 } additive endif end-filter |
动作语句
动作语句是过滤策略中配置的指定动作的语句,包括:
|
xpl route-filter route-filter2 ! Name of Route-Filter if med eq 10 then approve endif end-filter |
参数化
XPL支持参数化的过滤策略,即支持定义过滤策略时引用预定义的变量。可在配置其它过滤策略时通过call引用此参数化的策略。 |
xpl route-filter param-route-filter ($mytag) ! Configure a route-filter with a pre-defined variable. apply community { 1234:$mytag } additive end-filter xpl route-filter origin-10 ! Reference the route-filter with the pre-defined variable. if med eq 20 then call route-filter param-route-filter (10) else permit endif end-filter |