Network Working Group G. Yan Internet-Draft S. Zhuang Intended status: Informational Huawei Technologies Expires: June 30, 2015 December 27, 2014 Yang Data Model for Routing Policy draft-yan-rtgwg-routing-policy-yang-00 Abstract This document defines a YANG data model that can be used to configure and manage routing policies. Requirements Language The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [RFC2119]. Status of This Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." This Internet-Draft will expire on June 30, 2015. Copyright Notice Copyright (c) 2014 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must Yan & Zhuang Expires June 30, 2015 [Page 1] Internet-Draft Yang Data Model for Routing Policies December 2014 include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 2. Definitions and Acronyms . . . . . . . . . . . . . . . . . . 2 3. Introduction to Routing Policies . . . . . . . . . . . . . . 3 4. Design of Data Model . . . . . . . . . . . . . . . . . . . . 4 4.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 4 4.2. AS_Path Filter Configuration . . . . . . . . . . . . . . 5 4.3. Community Filter Configuration . . . . . . . . . . . . . 6 4.4. Extend Community Filter Configuration . . . . . . . . . . 6 4.5. Extend Community SoO Lists Configuration . . . . . . . . 7 4.6. RD Filters Configuration . . . . . . . . . . . . . . . . 7 4.7. IPv4 Prefix Filters Configuration . . . . . . . . . . . . 8 4.8. IPv6 Prefix Filters Configuration . . . . . . . . . . . . 8 4.9. Route-Policy Configuration . . . . . . . . . . . . . . . 9 5. Route Policy Yang Module . . . . . . . . . . . . . . . . . . 11 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 50 7. Security Considerations . . . . . . . . . . . . . . . . . . . 50 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 50 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 50 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 50 1. Introduction YANG [RFC6020] is a data definition language that was introduced to define the contents of a conceptual data store that allows networked devices to be managed using NETCONF[RFC6241]. YANG is proving relevant beyond its intial confines, as bindings to other interfaces(e.g. ReST) and encoding other than XML (e.g. JSON) are being defined. Furthermore, YANG data models can be used as the basis of implementation for other interface, such as CLI and programatic APIs. This document defines a YANG data model that can be used to configure and manage routing policies. 2. Definitions and Acronyms ACL:Access Control List AS: Autonomous System BGP: Border Gateway Protocol Yan & Zhuang Expires June 30, 2015 [Page 2] Internet-Draft Yang Data Model for Routing Policies December 2014 JSON: JavaScript Object Notation NETCONF: Network Configuration Protocol PBR:Policy-Based Routing RD:Route Distinguisher RPKI: Resource Public Key Infrastructure VPN: Virtual Private Network YANG: A data definition language for NETCONF 3. Introduction to Routing Policies Routing policies are used to filter routes and set attributes for routes. Changing route attributes (including reachability) changes the path that network traffic passes through. The difference between a routing policy and policy-based routing (PBR) is as follows: o Routing policies apply to routes. Based on routing protocols, the result of route generation, advertisement, and selection is changed by following rules, changing parameters, or using control modes. That is, the contents in the routing table are changed. o PBR applies to data packets. PBR provides a means to route or forward data packets flexibly based on predefined policies instead of following the routes in the existing routing table. When advertising, receiving, and importing routes, the router implements certain policies based on actual networking requirements to filter routes and change the attributes of the routes. Routing policies serve the following purposes: o Control route advertising: Only routes that match the rules specified in a policy are advertised. o Control route receiving: Only the required and valid routes are received. This reduces the size of the routing table and improves network security. o Filter and control imported routes: A routing protocol may import routes discovered by other routing protocols. Only routes that satisfy certain conditions are imported to meet the requirements of the protocol. Yan & Zhuang Expires June 30, 2015 [Page 3] Internet-Draft Yang Data Model for Routing Policies December 2014 o Modify attributes of specified routes Attributes of the routes: that are filtered by a routing policy are modified to meet the requirements of the local device. o Configure fast reroute (FRR): If a backup next hop and a backup outbound interface are configured for the routes that match a routing policy, IP FRR, VPN FRR, and IP+VPN FRR can be implemented. Routing policies are implemented using the following procedures: 1) Define rules: Define features of routes to which routing policies are applied. Users define a set of matching rules based on different attributes of routes, such as the destination address and the address of the router that advertises the routes. 2) Implement the rules: Apply the matching rules to routing policies for advertising, receiving, and importing routes. 4. Design of Data Model 4.1. Overview The routing policy Yang module is divided in following containers : o asPathFilters : An AS_Path filter is used to filter BGP routes based on AS_Path attributes contained in the BGP routes.. o communityFilters : A community filter is used to filter BGP routes based on the community attributes contained in the BGP routes. o extendCommunityFilters : An extcommunity filter is used to filter BGP routes based on extended community attributes. o extendCommunitySooLists : A SoO extended community filter is used to filter BGP routes based on SoO extended community attributes. o rdFilters : An RD filter is used to filter BGP routes based on RDs in VPN routes. o prefixFilters : An IP prefix list contains a group of route filtering rules. o ipv6PrefixFilters : An IPv6 prefix list contains a group of route filtering rules. o routePolicys : A Route-Policy is a complex filter. It is used to match attributes of specified routes and change route attributes when Yan & Zhuang Expires June 30, 2015 [Page 4] Internet-Draft Yang Data Model for Routing Policies December 2014 specific conditions are met. A Route-Policy can use the preceding filters to define its matching rules. The figure below describe the overall structure of the routing policy Yang module : module: routing-policy +--rw routing-policy +--rw asPathFilters ... +--rw communityFilters ... +--rw extendCommunityFilters ... +--rw extendCommunitySooLists ... +--rw rdFilters ... +--rw prefixFilters ... +--rw ipv6PrefixFilters ... +--rw routePolicys +--rw routePolicy* [name] +--rw name string +--rw routePolicyNodes +--rw routePolicyNode* [nodeSequence] +--rw nodeSequence uint32 +--rw matchMode? enumeration +--rw description? string +--ro matchCount? uint32 +--rw matchCondition | +--rw matchCostValue uint32 ... | +--rw matchExtCmntySooList? string +--rw applyAction +--rw applyAsPaths ... +--rw applyPriorityValue uint16 4.2. AS_Path Filter Configuration An AS_Path filter uses the regular expression to define matching rules. Yan & Zhuang Expires June 30, 2015 [Page 5] Internet-Draft Yang Data Model for Routing Policies December 2014 +--rw asPathFilters | +--rw asPathFilterKeyedByIndex* [index] | | +--rw index uint32 | | +--rw asPathFilterNodes | | +--rw asPathFilterNode* [nodeSequence] | | +--rw nodeSequence uint32 | | +--rw matchMode? enumeration | | +--rw regular string | +--rw asPathFilterKeyedByName* [name] | +--rw name string | +--rw asPathFilterNodes | +--rw asPathFilterNode* [nodeSequence] | +--rw nodeSequence uint32 | +--rw matchMode? enumeration | +--rw regular string 4.3. Community Filter Configuration A community filter is used to filter BGP routes based on the community attributes contained in the BGP routes. The community attribute is a set of destination addresses with the same characteristics. Therefore, filtering rules defined based on community attributes can be used to filter BGP routes.. +--rw communityFilters | +--rw basicCommunityFilterKeyedByIndex* [index] | | +--rw index uint32 | | +--rw basicCommunityNodes | | +--rw basicCommunityNode* [nodeSequence] ... | +--rw basicCommunityFilterKeyedByName* [name] | | +--rw name string | | +--rw basicCommunityNodes | | +--rw basicCommunityNode* [nodeSequence] ... | +--rw advancedCommunityFilterKeyedByIndex* [index] ... | +--rw advancedCommunityFilterKeyedByName* [name] ... 4.4. Extend Community Filter Configuration An extendCommunity filter is used to filter BGP routes based on extended community attributes. An extcommunity filter is used to filter only BGP routes because the extended community attribute is a private attribute of BGP. Yan & Zhuang Expires June 30, 2015 [Page 6] Internet-Draft Yang Data Model for Routing Policies December 2014 +--rw extendCommunityFilters | +--rw basicExtendCommunityFilterKeyedByIndex* [index] .. | +--rw basicExtendCommunityFilterKeyedByName* [name] ... | +--rw advancedExtendCommunityFilterKeyedByIndex* [index] ... | +--rw advancedExtendCommunityFilterKeyedByName* [name] ... 4.5. Extend Community SoO Lists Configuration An SoO extended community filter is used to filter BGP routes based on SoO extended community attributes. +--rw extendCommunitySooLists | +--rw extendCommunitySooList* [name] | +--rw filterType enumeration | +--rw name string | +--rw basicExtendCommunitySooListNodes ... | +--rw advanceExtendEommunitySooListNodes | +--rw advanceExtendEommunitySooListNode* [nodeSequence matchMode] | +--rw nodeSequence uint32 | +--rw matchMode enumeration | +--rw regular string ... 4.6. RD Filters Configuration An RD filter is used to filter BGP routes based on RDs in VPN routes. RDs are used to distinguish IPv4 and IPv6 prefixes in the same address segment in VPN instances. RD filters specify matching rules regarding RD attributes. +--rw rdFilters | +--rw rdFilter* [index] | +--rw index uint32 | +--rw rdFilterNodes | +--rw rdFilterNode* [nodeSequence] | +--rw nodeSequence uint32 | +--rw matchMode? enumeration | +--rw rdStrings | +--rw rdString* [rdStringValue] | +--rw rdStringValue string Yan & Zhuang Expires June 30, 2015 [Page 7] Internet-Draft Yang Data Model for Routing Policies December 2014 4.7. IPv4 Prefix Filters Configuration An IP prefix list contains a group of route filtering rules. Users can specify the prefix and mask length range to match the destination network segment address or the next hop address of a route. An IP prefix list is used to filter routes that are advertised and received by various dynamic routing protocols.. +--rw prefixFilters | +--rw prefixFilter* [name] | +--rw name string | +--ro permitCnt? uint32 | +--ro denyCnt? uint32 | +--rw prefixFilterNodes | +--rw prefixFilterNode* [nodeSequence] | +--rw nodeSequence uint32 | +--rw matchMode? enumeration | +--rw address inet:ipv4-address | +--rw maskLength uint8 | +--rw matchNetwork? boolean | +--rw greaterEqual? uint8 | +--rw lessEqual? uint8 4.8. IPv6 Prefix Filters Configuration An IPv6 prefix list contains a group of route filtering rules. Users can specify the prefix and mask length range to match the destination network segment address or the next hop address of a route. An IPv6 prefix list is used to filter routes that are advertised and received by various dynamic routing protocols.. +--rw ipv6PrefixFilters | +--rw ipv6PrefixFilter* [name] | +--rw name string | +--ro permitCnt? uint32 | +--ro denyCnt? uint32 | +--rw ipv6PrefixFilterNodes | +--rw ipv6PrefixFilterNode* [nodeSequence] | +--rw nodeSequence uint32 | +--rw matchMode? enumeration | +--rw address inet:ipv6-address | +--rw maskLength uint8 | +--rw matchNetwork? boolean | +--rw greaterEqual? uint8 | +--rw lessEqual? uint8 Yan & Zhuang Expires June 30, 2015 [Page 8] Internet-Draft Yang Data Model for Routing Policies December 2014 4.9. Route-Policy Configuration As shown in following figure, a Route-Policy consists of node IDs, matching mode, if-match clauses, and apply clauses. |-------------| | Route entry | | 10.1.1.0/25 | |-------------| | V |----------------------------------------------| | -------------------- mode | | | | | V | | route-policy A permit node 10 <----- node | | if-match xxx <--------------------- rule | | apply xxx <--------------------- action | | ----------| | | | node 10 | |--------------------|-------------------------| | V | | route-policy A deny node 20 | | if-match xxx ----------| | | node 20 | |----------------------------------------------| Composition of a Route-Policy o Node ID A Route-Policy consists of one or more nodes. Node IDs are specified as indexes in the IP prefix list. In a Route-Policy, routes are filtered based on the following rules: 1) Sequential matching: The system checks entries based on node IDs in ascending order. Therefore, specifying the node IDs in the required sequence is recommended. 2) One-time matching: The relationship between the nodes of a Route- Policy is "OR". If a route matches one node, the route matches the Route-Policy and will not be matched against the next node. o Matching mode Either of the following matching modes can be used: 1) permit: specifies the permit mode of a node. If a route matches the if-match clauses of a node, all the actions defined by apply Yan & Zhuang Expires June 30, 2015 [Page 9] Internet-Draft Yang Data Model for Routing Policies December 2014 clauses are performed, and the matching is complete. If a route does not match the if-match clauses of the node, the route continues to match the next node. 2) deny: specifies the deny mode of a node. In the deny mode, the apply clauses are not used. If a route matches all the if-match clauses of the node, the route is denied by the node and the next node is not matched. If the entry does not match all the if-match clauses, the next node is matched. o if-match clause The if-match clause defines the matching rules. Each node of a Route-Policy can comprise multiple if-match clauses or no if-match clause at all. If no if-match clause is configured for a node in the permit mode, all routes match the node. o apply clause The apply clauses specify actions. When a route matches a Route- Policy, the system sets some attributes for the route based on the apply clause. Each node of a Route-Policy can comprise multiple apply clauses or no apply clause at all. The apply clause is not used when routes need to be filtered but attributes of the routes do not need to be set. Matching results of a Route-Policy The matching results of a Route-Policy are obtained based on the following aspects: 1) Matching mode of the node, either permit or deny 2) Matching rules (either permit or deny) contained in the if-match clause (such as ACLs or IP prefix lists) A Route-Policy is a complex filter. It is used to match attributes of specified routes and change route attributes when specific conditions are met. A Route-Policy can use the preceding filters to define its matching rules. Yan & Zhuang Expires June 30, 2015 [Page 10] Internet-Draft Yang Data Model for Routing Policies December 2014 +--rw routePolicys +--rw routePolicy* [name] +--rw name string +--rw routePolicyNodes +--rw routePolicyNode* [nodeSequence] +--rw nodeSequence uint32 +--rw matchMode? enumeration +--rw description? string +--ro matchCount? uint32 +--rw matchCondition | +--rw matchCostValue uint32 ... | +--rw matchExtCmntySooList? string +--rw applyAction +--rw applyAsPaths ... +--rw applyPriorityValue uint16 5. Route Policy Yang Module ROUTING POLICY YANG MODEL file "routing-policy@2014-12-12.yang" module routing-policy { namespace "urn:huawei:params:xml:ns:yang:routing-policy"; // replace with IANA namespace when assigned prefix "routing-policy"; import ietf-interfaces { prefix if; //rfc7223-YANG Interface Management } import ietf-inet-types { prefix inet; //rfc6991-Common YANG Data Types } description "This YANG module defines the RTP configuration data for routing policy service. Terms and Acronyms RTP: Routing-Policy Routing policies are used to filter routes and set attributes for routes. Changing route attributes (including reachability) changes the path that network traffic passes through. Yan & Zhuang Expires June 30, 2015 [Page 11] Internet-Draft Yang Data Model for Routing Policies December 2014 "; revision 2014-12-12 { description "Initial revision."; } grouping matchMode { leaf matchMode { config "true"; type enumeration { enum "permit" { value "0"; description "permit: Specifies the matching mode of the route-policy as permit. In permit mode, a route matches all the if-match clauses, the route matches the route-policy and the actions defined by the apply clause are performed on the route. Otherwise, the route continues to match the next entry."; } enum "deny" { value "1"; description "deny: Specifies the matching mode of the route-policy as deny. In deny mode, if a route matches all the if-match clauses, the route fails to match the route-policy and cannot match the next node."; } } } }//End of grouping matchMode grouping asPathFilterNodes { container asPathFilterNodes { list asPathFilterNode { key "nodeSequence"; min-elements "0"; max-elements "unbounded"; leaf nodeSequence { config "true"; type uint32 { range "1..4294967295"; } } uses matchMode; leaf regular { Yan & Zhuang Expires June 30, 2015 [Page 12] Internet-Draft Yang Data Model for Routing Policies December 2014 config "true"; mandatory "true"; type "string"; } } } }//End of grouping asPathFilterNodes grouping basicCommunityNodes { container basicCommunityNodes { list basicCommunityNode { key "nodeSequence"; min-elements "0"; max-elements "unbounded"; leaf nodeSequence { config "true"; type uint32 { range "1..4294967295"; } } uses matchMode; container communityNumbers { description "The ip community-filter basic comm-filter-name command or the ip community-filter basic-comm-filter-num command can be used to configure a basic community filter. basic comm-filter-name specifies the name of a basic community filter, and the name cannot be all digits. A maximum of 20 community numbers can be configured using one command. basic-comm-filter-num specifies only the basic community filter with the number ranging from 1 to 99. A maximum of 20 community numbers can be configured using one command."; list communityNumber { key "communityNumberValue"; min-elements "0"; max-elements "20"; leaf communityNumberValue { config "true"; type string; } } } } } Yan & Zhuang Expires June 30, 2015 [Page 13] Internet-Draft Yang Data Model for Routing Policies December 2014 }//End of grouping basicCommunityNodes grouping advancedCommunityNodes { container advancedCommunityNodes { list advancedCommunityNode { key "nodeSequence matchMode"; min-elements "0"; max-elements "unbounded"; leaf nodeSequence { config "true"; type uint32 { range "1..4294967295"; } } uses matchMode; leaf regular { description "The ip community-filter advanced comm-filter-name command or the ip community-filter adv-comm-filter-num command can be used to configure an advanced community filter. advanced comm-filter-name specifies the name of an advanced community filter, and the name cannot be all digits. adv-comm-filter-num specifies only the advanced community filter with the number ranging from 100 to 199."; config "true"; mandatory "true"; type "string"; } } } }//End of grouping advancedCommunityNodes grouping basicExtendCommunityFilterNodes { container extendCommunityFilterNodes { list extendCommunityFilterNode { key "nodeSequence"; min-elements "0"; max-elements "unbounded"; leaf nodeSequence { config "true"; type uint32 { Yan & Zhuang Expires June 30, 2015 [Page 14] Internet-Draft Yang Data Model for Routing Policies December 2014 range "1..4294967295"; } } uses matchMode; container extendEommunityNumbers { list extendCommunityNumber { key "extendCommunityNumberValue"; min-elements "0"; max-elements "16"; leaf extendCommunityNumberValue { config "true"; type string; } } } } } }//End of grouping basicExtendCommunityFilterNodes grouping advancedExtendCommunityNodes { container advancedExtendCommunityNodes { list advancedExtendCommunityNode { key "nodeSequence matchMode"; min-elements "0"; max-elements "unbounded"; leaf nodeSequence { config "true"; type uint32 { range "1..4294967295"; } } uses matchMode; leaf regular { config "true"; mandatory "true"; type "string"; } } } }//End of grouping advancedExtendCommunityNodes container routing-policy { Yan & Zhuang Expires June 30, 2015 [Page 15] Internet-Draft Yang Data Model for Routing Policies December 2014 /* IP Routing Policy Configuration Commands. Routing policies are implemented using the following procedures: 1)Define rules: Define features of routes to which routing policies are applied. Users define a set of matching rules based on different attributes of routes, such as the destination address and the address of the router that advertises the routes. 2)Implement the rules: Apply the matching rules to routing policies for advertising, receiving, and importing routes. 3)Filter A filter is the core of a routing policy and is defined using a set of matching rules. */ container asPathFilters { description "An AS_Path filter uses the regular expression to define matching rules."; list asPathFilterKeyedByIndex { key "index"; min-elements "0"; max-elements "unbounded"; leaf index { config "true"; type uint32 { range "1..256"; } } uses asPathFilterNodes; } list asPathFilterKeyedByName { key "name"; min-elements "0"; max-elements "unbounded"; leaf name { config "true"; type "string"; } uses asPathFilterNodes; } } //End of container asPathFilters Yan & Zhuang Expires June 30, 2015 [Page 16] Internet-Draft Yang Data Model for Routing Policies December 2014 container communityFilters { description "The ip community-filter command configures a community filter or one entry in the community filter. The community attribute is a private attribute of BGP, and can be used only to filter BGP routes. The community attribute can be used together with the if-match community-filter command as a matching condition of a route-policy."; list basicCommunityFilterKeyedByIndex { key "index"; min-elements "0"; max-elements "unbounded"; leaf index { config "true"; type uint32 { range "1..99"; } } uses basicCommunityNodes; } list basicCommunityFilterKeyedByName { key "name"; min-elements "0"; max-elements "unbounded"; leaf name { config "true"; type "string"; } uses basicCommunityNodes; } list advancedCommunityFilterKeyedByIndex { key "index"; min-elements "0"; max-elements "unbounded"; leaf index { config "true"; type uint32 { range "100..199"; } } uses advancedCommunityNodes; Yan & Zhuang Expires June 30, 2015 [Page 17] Internet-Draft Yang Data Model for Routing Policies December 2014 } list advancedCommunityFilterKeyedByName { key "name"; min-elements "0"; max-elements "unbounded"; leaf name { config "true"; type "string"; } uses advancedCommunityNodes; } }//End of container communityFilters container extendCommunityFilters { description "The ip extcommunity-filter command adds an extended community filter. An extended community filter can be used as a matching condition of a route-policy by using a command such as if-match extcommunity-filter zz."; list basicExtendCommunityFilterKeyedByIndex { key "index"; min-elements "0"; max-elements "unbounded"; leaf index { config "true"; type uint32 { range "1..199"; } } uses basicExtendCommunityFilterNodes; } list basicExtendCommunityFilterKeyedByName { key "name"; min-elements "0"; max-elements "unbounded"; leaf name { config "true"; type "string"; } uses basicExtendCommunityFilterNodes; Yan & Zhuang Expires June 30, 2015 [Page 18] Internet-Draft Yang Data Model for Routing Policies December 2014 } list advancedExtendCommunityFilterKeyedByIndex { key "index"; min-elements "0"; max-elements "unbounded"; leaf index { config "true"; type uint32 { range "200..399"; } } uses advancedExtendCommunityNodes; } list advancedExtendCommunityFilterKeyedByName { key "name"; min-elements "0"; max-elements "unbounded"; leaf name { config "true"; type "string"; } uses advancedExtendCommunityNodes; } }//End of container extendCommunityFilters container extendCommunitySooLists { description "The ip extcommunity-list soo command configures a Source of Origin (SoO) extended community filter. SoO records the BGP route originator. To configure an SoO extended community filter so that BGP routes carrying SoO can be filtered, run the ip extcommunity-list soo command."; list extendCommunitySooList { key "name"; min-elements "0"; max-elements "unbounded"; leaf filterType { config "true"; mandatory "true"; type enumeration { Yan & Zhuang Expires June 30, 2015 [Page 19] Internet-Draft Yang Data Model for Routing Policies December 2014 enum "basic" { value "0"; description "basic:"; } enum "advanced" { value "1"; description "advanced:"; } } } leaf name { config "true"; type "string"; } container basicExtendCommunitySooListNodes { list basicExtendCommunitySooListNode { key "nodeSequence"; min-elements "0"; max-elements "unbounded"; leaf nodeSequence { config "true"; type uint32 { range "1..4294967295"; } } uses matchMode; container extendEommunityNumbers { list extendCommunityNumber { key "extendCommunityNumberValue"; min-elements "1"; max-elements "16"; leaf extendCommunityNumberValue { config "true"; type string; } } } } } container advanceExtendEommunitySooListNodes { list advanceExtendEommunitySooListNode { key "nodeSequence matchMode"; min-elements "0"; Yan & Zhuang Expires June 30, 2015 [Page 20] Internet-Draft Yang Data Model for Routing Policies December 2014 max-elements "unbounded"; leaf nodeSequence { config "true"; type uint32 { range "1..4294967295"; } } uses matchMode; leaf regular { config "true"; mandatory "true"; type "string"; } } } } }// End of container extendCommunitySooLists container rdFilters { description "The ip rd-filter command configures a route distinguisher (RD) filter. The RD attribute is carried in VPN routes. RDs are used to distinguish address spaces with the same IPv4 address prefix. An RD filter is used to filter VPN routes. The VPN target attribute of the VPN route controls the route exchange between VPN instances. The RD filter can filter a VPN route or multiple VPN routes from VPN instances."; list rdFilter { key "index"; min-elements "0"; max-elements "unbounded"; leaf index { config "true"; type uint32 { range "1..199"; } } Yan & Zhuang Expires June 30, 2015 [Page 21] Internet-Draft Yang Data Model for Routing Policies December 2014 container rdFilterNodes { list rdFilterNode { key "nodeSequence"; min-elements "0"; max-elements "unbounded"; leaf nodeSequence { config "true"; type uint32 { range "1..4294967295"; } } uses matchMode; container rdStrings { list rdString { key "rdStringValue"; min-elements "0"; max-elements "unbounded"; leaf rdStringValue { config "true"; type "string"; } } } } } } }//End of container rdFilters container prefixFilters { description "The ip ip-prefix command configures an new IP prefix list or one entry in an existing IP prefix list. An IP prefix list can be used as a filter or as matching conditions of a routing policy when it is used together with the if-match command."; list prefixFilter { key "name"; min-elements "0"; max-elements "unbounded"; Yan & Zhuang Expires June 30, 2015 [Page 22] Internet-Draft Yang Data Model for Routing Policies December 2014 leaf name { config "true"; type "string"; } leaf permitCnt { config "false"; default "0"; type uint32 { range "0..65535"; } } leaf denyCnt { config "false"; default "0"; type uint32 { range "0..65535"; } } container prefixFilterNodes { list prefixFilterNode { key "nodeSequence"; min-elements "0"; max-elements "unbounded"; leaf nodeSequence { config "true"; type uint32 { range "1..4294967295"; } } uses matchMode; leaf address { config "true"; mandatory "true"; type inet:ipv4-address; } leaf maskLength { config "true"; mandatory "true"; type uint8 { range "0..32"; } } leaf matchNetwork { config "true"; Yan & Zhuang Expires June 30, 2015 [Page 23] Internet-Draft Yang Data Model for Routing Policies December 2014 default "false"; type "boolean"; } leaf greaterEqual { config "true"; type uint8 { range "0..32"; } } leaf lessEqual { config "true"; type uint8 { range "0..32"; } } } } } }//End of container prefixFilters container ipv6PrefixFilters { description "The ip ipv6-prefix command configures an new IPv6 prefix list or one entry in an existing IPv6 prefix list. The IPv6 prefix list can be used by the protocols as a prefix filter, or used with the if-match ipv6 command as a matching condition of routing policies."; list ipv6PrefixFilter { key "name"; min-elements "0"; max-elements "unbounded"; leaf name { config "true"; type "string"; } leaf permitCnt { config "false"; default "0"; type uint32 { range "0..65535"; } } Yan & Zhuang Expires June 30, 2015 [Page 24] Internet-Draft Yang Data Model for Routing Policies December 2014 leaf denyCnt { config "false"; default "0"; type uint32 { range "0..65535"; } } container ipv6PrefixFilterNodes { list ipv6PrefixFilterNode { key "nodeSequence"; min-elements "0"; max-elements "unbounded"; leaf nodeSequence { config "true"; type uint32 { range "1..4294967295"; } } uses matchMode; leaf address { config "true"; mandatory "true"; type inet:ipv6-address; } leaf maskLength { config "true"; mandatory "true"; type uint8 { range "0..128"; } } leaf matchNetwork { config "true"; default "false"; type "boolean"; } leaf greaterEqual { config "true"; type uint8 { range "0..128"; } } leaf lessEqual { config "true"; type uint8 { Yan & Zhuang Expires June 30, 2015 [Page 25] Internet-Draft Yang Data Model for Routing Policies December 2014 range "0..128"; } } } } } }//End of container ipv6PrefixFilters /* Routing policies are used to filter routes and set attributes for routes. Changing route attributes (including reachability) changes the path that network traffic passes through. */ container routePolicys { list routePolicy { key "name"; min-elements "0"; max-elements "unbounded"; leaf name { config "true"; type "string"; } /* A route-policy is used to filter routes and set route attributes for the routes that match the route-policy. A route-policy consists of multiple nodes. One node can be configured with multiple if-match and apply clauses. */ container routePolicyNodes { list routePolicyNode { key "nodeSequence"; min-elements "0"; max-elements "unbounded"; leaf nodeSequence { config "true"; type uint32 { range "0..65535"; } } uses matchMode; leaf description { Yan & Zhuang Expires June 30, 2015 [Page 26] Internet-Draft Yang Data Model for Routing Policies December 2014 description "The description command configures the description of a route-policy."; config "true"; mandatory "false"; type "string"; } leaf matchCount { config "false"; mandatory "false"; type "uint32"; } /*if-match clauses*/ container matchCondition { description "Define a set of matching rules and setting rules. The policy is applied to the routing information to meet the requirements of the matching rules."; leaf matchCostValue { description "The if-match cost command sets a matching rule that is based on the route cost. You can use the if-match cost command to configure a node to filter routes based on the route costs. After such a matching rule is configured, you can apply the apply clauses to change the attributes of the routes that match the matching rule."; config "true"; mandatory "true"; type uint32 { range "0..4294967295"; } }//End of leaf matchCostValue container matchInterfaces { description "The if-match interface command sets a matching rule that is based on the outbound interface. The if-match interface command is used to filter routes based on the outbound interfaces. A maximum of 16 outbound interfaces can be configured in this command. "; Yan & Zhuang Expires June 30, 2015 [Page 27] Internet-Draft Yang Data Model for Routing Policies December 2014 list matchInterface { key "ifName"; min-elements "0"; max-elements "unbounded"; leaf ifName { config "true"; type leafref { path "/if:interfaces/if:interface/if:name"; } } } }//End of container matchInterfaces container matchRouteTypes { description "The if-match route-type command sets a filtering rule that is based on the route type. To filter OSPF or IS-IS routes based on the route type, run the if-match route-type command."; list matchRouteType { key "routeType"; min-elements "0"; max-elements "unbounded"; leaf routeType { config "true"; type enumeration { enum "external1" { value "0"; description "external1:"; } enum "external2" { value "1"; description "external2:"; } enum "internal" { value "2"; description "internal:"; } enum "isisLevel1" { value "3"; description "isisLevel1:"; } enum "isisLevel2" { value "4"; Yan & Zhuang Expires June 30, 2015 [Page 28] Internet-Draft Yang Data Model for Routing Policies December 2014 description "isisLevel2:"; } enum "nssaExternal1" { value "5"; description "nssaExternal1:"; } enum "nssaExternal2" { value "6"; description "nssaExternal2:"; } } } } }//End of container matchRouteTypes leaf matchTagValue { description "The if-match tag command sets a matching rule that is based on the route tag. You can run the if-match tag command to filter OSPF or IS-IS routes based on the tags."; config "true"; mandatory "true"; type uint32 { range "0..4294967295"; } }//End of leaf matchTagValue leaf matchMplsLabel { description "The if-match mpls-label command sets a matching rule that is based on MPLS labels. That is, a rule is set to match the routes with MPLS labels. In the scenario where inter-AS VPN Option C or CSC is deployed, you can use the if-match mpls-label command to match routes with MPLS labels."; config "true"; mandatory "true"; type "boolean"; } leaf matchDestAcl { description Yan & Zhuang Expires June 30, 2015 [Page 29] Internet-Draft Yang Data Model for Routing Policies December 2014 "The if-match acl command sets a matching rule that is based on the Access Control List (ACL)."; config "true"; mandatory "true"; type "string"; } leaf matchDestPrefixFilter { description "The if-match ip-prefix command sets a matching rule that is based on the IP prefix list."; config "true"; mandatory "true"; type "string"; } leaf matchDestPrefix6Filter { description "Specify the ipv6-prefix name to be matched"; config "true"; mandatory "true"; type "string"; } leaf matchDestAcl6 { description "Specify the ipv6 acl name or num."; config "true"; mandatory "true"; type "string"; } container matchIPv4NextHop { description "."; choice matchIPv4NextHopMode { case matchNextHopPrefixFilter { leaf prefixName { config "true"; mandatory "true"; type "string"; } } Yan & Zhuang Expires June 30, 2015 [Page 30] Internet-Draft Yang Data Model for Routing Policies December 2014 case matchNexthopAcl { leaf aclNameOrNum { config "true"; mandatory "true"; type "string"; } } } } container matchIPv6NextHop { choice matchIPv6NextHopMode { case matchNextHopPrefix6Filter { leaf ipv6PrefixName { config "true"; mandatory "true"; type "string"; } } case matchNextHopAcl6 { leaf aclNameOrNum { config "true"; mandatory "true"; type "string"; } } } } container matchIPv4RouteSource { choice matchIPv4RouteSourceMode { case matchRtSrcPrefixFilter { leaf prefixName { config "true"; mandatory "true"; type "string"; } } case matchRouteSourceAcl { leaf aclNameOrNum { config "true"; mandatory "true"; type "string"; } } } } Yan & Zhuang Expires June 30, 2015 [Page 31] Internet-Draft Yang Data Model for Routing Policies December 2014 container matchIPv6RouteSource { choice matchIPv6RouteSourceMode { case matchRtSrcPrefix6Filter { leaf ipv6PrefixName { config "true"; mandatory "true"; type "string"; } } case matchRtSrcAcl6 { leaf aclNameOrNum { config "true"; mandatory "true"; type "string"; } } } } container matchCommunityFilters { description "The if-match community-filter command sets a matching rule that is based on the community filter."; list matchCommunityFilter { key "cmntyNameOrNum"; min-elements "0"; max-elements "unbounded"; leaf wholeMatch { config "true"; default "false"; type "boolean"; } leaf cmntyNameOrNum { config "true"; type "string"; } } } container matchExtcommunityFilters { description "The if-match extcommunity-filter command sets a matching rule that is based on the extended community filter."; Yan & Zhuang Expires June 30, 2015 [Page 32] Internet-Draft Yang Data Model for Routing Policies December 2014 list matchExtcommunityFilterIndex { key "extCmntyIndex"; min-elements "0"; max-elements "unbounded"; leaf extCmntyIndex { config "true"; type uint32 { range "1..399"; } } } list matchExtcommunityFilterName { key "extCmntyName"; min-elements "0"; max-elements "unbounded"; leaf extCmntyName { config "true"; type "string"; } } } leaf matchRdFilter { description "The if-match rd-filter command sets a matching rule that is based on the Route Distinguisher (RD) filter."; config "true"; mandatory "true"; type uint32 { range "1..199"; } } container matchAsPathFilters { description "The if-match as-path-filter command sets a matching rule that is based on the AS_Path filter."; list matchAsPathFilterIndex { key "asPathIndex"; min-elements "0"; max-elements "unbounded"; Yan & Zhuang Expires June 30, 2015 [Page 33] Internet-Draft Yang Data Model for Routing Policies December 2014 leaf asPathIndex { config "true"; type uint32 { range "1..256"; } } } list matchAsPathFilterName { key "asPathFilterName"; min-elements "0"; max-elements "unbounded"; leaf asPathFilterName { config "true"; type "string"; } } } leaf matchOriginAsValidateResult { description "The if-match rpki origin-as-validation command configures a filtering rule based on the BGP origin AS validation result. Attackers can steal user data by advertising routes that are more specific than those advertised by carriers. RPKI can address this issue by validating the origin ASs of BGP routes and apply the BGP origin AS validation result to route selection. The validation result can be Valid, Not Found, or Invalid. To configure a filtering rule based on the BGP origin AS validation result, you can run the if-match rpki origin-as-validation command. After the filtering rule is configured, attribute of the routes that match the filtering rule can be modified based on the apply clause."; config "true"; mandatory "true"; type enumeration { enum "valid" { value "0"; description "valid:"; } enum "invalid" { Yan & Zhuang Expires June 30, 2015 [Page 34] Internet-Draft Yang Data Model for Routing Policies December 2014 value "1"; description "invalid:"; } enum "notFound" { value "2"; description "notFound:"; } } }//End of leaf matchOriginAsValidateResult leaf matchExtCmntySooList { description "The if-match extcommunity-list soo command sets a filtering rule that is based on the Source of Origin (SoO) extended community filter. The extended community attributes help flexibly control the route-policy. You can use the if-match extcommunity-list soo command to configure a node to filter routes based on the SoO extended community filter."; config "true"; type "string"; } }//End of container matchCondition /*apply clauses*/ container applyAction { description "Apply the matching rules to the routing policies for route advertisement, reception, and import."; container applyAsPaths { description "The apply as-path command replaces the original AS_Path list or add the specified AS number to the original AS_Path list when BGP route selection is adjusted."; container asPathStrings { list asPathString { key "sequenceNumber"; min-elements "0"; max-elements "unbounded"; leaf sequenceNumber { Yan & Zhuang Expires June 30, 2015 [Page 35] Internet-Draft Yang Data Model for Routing Policies December 2014 config "true"; type uint32 { range "1..10"; } } leaf stringValue { config "true"; mandatory "true"; type "string"; } } } leaf operationType { config "true"; type enumeration { enum "delete" { value "0"; description "delete:"; } enum "replace" { value "1"; description "replace:"; } enum "additive" { value "2"; description "additive:"; } enum "delSpecial" { value "3"; description "delSpecial:"; } } default "replace"; } }//End of container applyAsPaths container applyNextHops { description "The apply ip-address next-hop command sets the next hop address of a route. In BGP, the next hop address of a route can be set through the route-policy in the following situations: 1) IBGP: For an IBGP peer, the configured import and export policies can take effect. If the next hop address configured in the policy is unreachable, the IBGP peer still adds the route to the BGP routing table, but the route is not Yan & Zhuang Expires June 30, 2015 [Page 36] Internet-Draft Yang Data Model for Routing Policies December 2014 valid. 2) EBGP: For an EBGP peer, when the policy is used to modify the next hop address of a route, the import policy is configured. If the export policy is configured, the route is discarded because its next hop is unreachable. When the EBGP peer relationship is established through a physical connection, the policy cannot take effect. That is, the next hop address of the route cannot be modified."; leaf nextHop { config "true"; mandatory "true"; type inet:ipv4-address; } leaf isPeerAddress { config "true"; type "boolean"; default "false"; } }//End of container applyNextHops leaf applyLocalPreference { description "The apply local-preference command sets the local preference (Local-Pref) for BGP routes. The Local-Pref attribute is the proprietary attribute of BGP. Therefore, the apply local-preference command sets only the Local-Pref for BGP routes. The Local_Pref attribute is used to determine the optimal route when traffic leaves an AS. When a BGP router obtains multiple routes to the same destination address but with different next hops through IBGP peers, the route with the largest Local_Pref value is selected."; config "true"; mandatory "true"; type uint32 { range "0..4294967295"; } } container applyCosts { description "The apply cost command sets the MED value for BGP Yan & Zhuang Expires June 30, 2015 [Page 37] Internet-Draft Yang Data Model for Routing Policies December 2014 routes or cost value for routes of other protocols. When the filtering conditions specified by if-match clauses are met, you can run the apply cost command to change the route MED or cost to control route selection. After setting the MED or cost, the MED or cost of the routes that are imported using the route-policy is changed accordingly."; leaf applyChoice { config "true"; mandatory "true"; type enumeration { enum "Add" { value "0"; description "Add:"; } enum "Sub" { value "1"; description "Sub:"; } enum "Replace" { value "2"; description "Replace:"; } enum "Inherit" { value "3"; description "Inherit:"; } } } leaf costValue { config "true"; mandatory "true"; type uint32 { range "0..4294967295"; } } }//End of container applyCosts container applyIpv6NextHops { description "The apply ipv6 next-hop command configures an IPv6 next hop address for a BGP route through a route-policy. In BGP, the next hop address of a route can be set through the route-policy in the following situations: 1) IBGP: For an IBGP peer, the configured inbound Yan & Zhuang Expires June 30, 2015 [Page 38] Internet-Draft Yang Data Model for Routing Policies December 2014 and outbound policies can take effect. If the next hop address configured in the policy is unreachable, the IBGP peer still adds the route to the BGP routing table, but the route is not valid. 2) EBGP: For an EBGP peer, when the policy is used to modify the next hop address of a route, the inbound policy is configured. If the outbound policy is configured, the route is discarded because its next hop is unreachable. When the EBGP peer relationship is established through a physical connection, the policy cannot take effect. That is, the next hop address of the route cannot be modified."; leaf ipv6NextHop { config "true"; mandatory "true"; type inet:ipv6-address; } leaf isPeerAddress { config "true"; type "boolean"; default "false"; } }//End of container applyIpv6NextHops leaf applyCostType { description "The apply cost-type command sets the cost type of the route. 1) The apply cost-type { external | internal } command sets the cost type of IS-IS routes. The cost of an internal route imported to IS-IS remains unchanged and the cost of an external route imported to IS-IS is increased by 64. 2) The apply cost-type { type-1 | type-2 } command modifies the type of OSPF routes. During route import, OSPF modifies the type but not the cost value of the original route. When OSPF advertises the imported route with the cost and type information to a peer, the peer device will recalculate the cost value of the imported route based on the received information."; config "true"; mandatory "true"; type enumeration { Yan & Zhuang Expires June 30, 2015 [Page 39] Internet-Draft Yang Data Model for Routing Policies December 2014 enum "external" { value "0"; description "external:"; } enum "internal" { value "1"; description "internal:"; } enum "type_1" { value "2"; description "type_1:"; } enum "type_2" { value "3"; description "type_2:"; } } }//End of leaf applyCostType container applyOrigin { description "The apply origin command sets the Origin attribute of BGP routes. The Origin attribute, as a proprietary attribute of BGP, defines the origin of a route. It identifies how a BGP route is generated. You can use the apply origin command to set the Origin attribute of BGP routes."; leaf originType { config "true"; mandatory "true"; type enumeration { enum "egp" { value "0"; description "egp:"; } enum "igp" { value "1"; description "igp:"; } enum "incomplete" { value "2"; description "incomplete:"; } } } leaf asStrOrNum { config "true"; Yan & Zhuang Expires June 30, 2015 [Page 40] Internet-Draft Yang Data Model for Routing Policies December 2014 mandatory "true"; type "string"; } }//End of container applyOrigin container applyCommunitys { description "The apply community command configures BGP community attributes. The community attribute, which is the private attribute of BGP, simplifies the application of routing policies and facilitates route maintenance and management. A community is a set of destination addresses with the same characteristics. These addresses have no physical boundary and are independent of their ASs. They share one or multiple community attributes, which can be changed or set through the apply community command."; leaf operationType { config "true"; default "replace"; type enumeration { enum "delete" { value "0"; description "delete:"; } enum "replace" { value "1"; description "replace:"; } enum "additive" { value "2"; description "additive:"; } enum "delSpecial" { value "3"; description "delSpecial:"; } } } container applyCmntyStrings { list applyCmntyString { key "stringValue"; min-elements "0"; max-elements "unbounded"; Yan & Zhuang Expires June 30, 2015 [Page 41] Internet-Draft Yang Data Model for Routing Policies December 2014 leaf stringValue { config "true"; type "string"; } } } }//End of container applyCommunitys leaf applyTagValue { description "The apply tag command sets the tag for routes. If routes satisfy the filter condition specified by the if-match clause, you can run the apply tag command to set the same tag for the routes that satisfy the same filter condition to classify the routes."; config "true"; mandatory "true"; type uint32 { range "0..4294967295"; } } leaf applyMplsLabel { description "The apply mpls-label command assigns MPLS labels to routes. In the scenario where inter-AS VPN Option C or carrier's carrier (CSC) is deployed, you can use the apply mpls-label command to allocate labels to public routes."; config "true"; mandatory "true"; type "boolean"; } leaf applyPreference { description "The apply preference command sets the preference for routes. If a route satisfies the filter condition specified by the if-match clause, you can run the apply preference command to change the preference of the route to participate in route selection. Then, when different protocols discover multiple routes to the same destination, the route discovered by the protocol with a higher preference is selected as a valid route to forward Yan & Zhuang Expires June 30, 2015 [Page 42] Internet-Draft Yang Data Model for Routing Policies December 2014 packets."; config "true"; mandatory "true"; type uint32 { range "1..255"; } } container applyExtendCommunitys { description "The apply extcommunity command configures extended community attributes for BGP routes. The apply extcommunity command is applicable to BGP/MPLS IP VPNs. At present, there are two types of BGP extended community attributes. 1) VPN route-target (RT) extended community 2) Source of Origin (SoO) extended community At present, RT extended community attributes can be set only through the route-policy. This command cannot specify an extended community attribute for public routes."; container applyExtCmntyStrings { list applyExtCmntyString { key "stringValue"; min-elements "0"; max-elements "unbounded"; leaf stringValue { config "true"; type "string"; } } } leaf additiveFlag { config "true"; default "false"; type "boolean"; } }//End of container applyExtendCommunitys container applyCommunityFilterDelete { description "The apply comm-filter delete command deletes a BGP route community according to the specified value in the community filter. The community filter can be Yan & Zhuang Expires June 30, 2015 [Page 43] Internet-Draft Yang Data Model for Routing Policies December 2014 either a basic or advanced community filter. When the apply comm-filter delete command is run in the Route-Policy view to delete the values in the community filter, only one community attribute can be specified in an ip community-filter command. If multiple community attributes are configured in the same community filter, running the apply comm-filter delete command cannot delete these community attributes. To delete the community attributes, you need to run the ip community-filter command several times to configure community attributes one by one, and then run the apply comm-filter delete command to delete these community attributes."; leaf communityNum { config "true"; type "string"; } leaf communityName { config "true"; type "string"; } }//End of container applyCommunityFilterDelete container applyDampening { description "The apply dampening command sets dampening parameters for EBGP routes. The apply dampening command, which is mostly used in BGP, is used to prevent frequent route dampening from affecting routers on the network. You can configure different route dampening parameters for different nodes in the same route-policy. When route flapping occurs, BGP can use different route dampening parameters to suppress the routes that match the route-policy."; leaf halfLifeValue { config "true"; mandatory "true"; type uint32 { range "1..45"; } } leaf reuseValue { config "true"; Yan & Zhuang Expires June 30, 2015 [Page 44] Internet-Draft Yang Data Model for Routing Policies December 2014 mandatory "true"; type uint32 { range "1..20000"; } } leaf suppressValue { config "true"; mandatory "true"; type uint32 { range "1..20000"; } } leaf ceilingValue { config "true"; mandatory "true"; type uint32 { range "1001..20000"; } } }//End of container applyDampening leaf applyRouteType { description " 1) After a route matches a route-policy, you can set the level of the route imported to IS-IS. 2) Routes matching the if-match clauses defined in the routing policy will be imported into the OSPF area specified in the command."; config "true"; mandatory "true"; type enumeration { enum "OspfStubArea" { value "0"; description "OspfStubArea:"; } enum "OspfBackbone" { value "1"; description "OspfBackbone:"; } enum "IsisLevel1" { value "2"; description "IsisLevel1:"; } enum "IsisLevel2" { value "3"; description "IsisLevel2:"; Yan & Zhuang Expires June 30, 2015 [Page 45] Internet-Draft Yang Data Model for Routing Policies December 2014 } enum "IsisLevel12" { value "4"; description "IsisLevel12:"; } } }//End of leaf applyRouteType leaf applyPreferredValue { description "The apply preferred-value command sets the preferred value for BGP routes. The preferred value is a proprietary attribute of BGP. You can use the apply preferred-value command to set the preferred value for a BGP route in the import policy."; config "true"; mandatory "true"; type uint32 { range "0..65535"; } }//End of leaf applyPreferredValue container applyQosParas { leaf QosType { config "true"; mandatory "true"; type enumeration { enum "QosID" { value "0"; description "qosLocalID:"; } enum "Behavior" { value "1"; description "behavior:"; } enum "IpPrecedence" { value "2"; description "ipPrecedence:"; } } } leaf qosLocalID { description "The apply qos-local-id command sets the QoS local ID. Yan & Zhuang Expires June 30, 2015 [Page 46] Internet-Draft Yang Data Model for Routing Policies December 2014 The QoS local ID is a local identifier of QoS. In actual applications, you can set the QoS local ID in the route-policy, and add the command that matches the QoS local ID in the QoS policy. The QoS local ID set in the route-policy is delivered to the FIB table. During packet forwarding, the system obtains the QoS local ID from the FIB table and applies the related QoS policy according to the QoS local ID."; config "true"; mandatory "true"; type uint32 { range "1..4095"; } } leaf ipPrecedence { description "The apply ip precedence command sets the QoS parameter ip-precedence for routes. The apply ip precedence command is generally applicable to QPPB, in which the IP precedence is a QoS parameter that can be set. After receiving routes, a BGP route receiver matches the attributes of the BGP routes based on the import route-policy, sets the IP precedence, delivers the BGP routes together with the associated QoS parameters, and applies QoS traffic policies to the classified data. In this case, the BGP route receiver can apply QoS policies to the data sent to the destination network segment based on the IP precedence. This applies QoS policies in BGP."; config "true"; mandatory "true"; type uint32 { range "0..7"; } } leaf behaviorName { description "The apply behavior command configures a QoS traffic behavior for routes."; Yan & Zhuang Expires June 30, 2015 [Page 47] Internet-Draft Yang Data Model for Routing Policies December 2014 config "true"; mandatory "true"; type "string"; } }//End of container applyQosParas leaf applyTrafficIndex { description "The apply traffic-index command sets the BGP traffic index. BGP accounting uses different BGP traffic indexes in BGP community attributes to identify routes and charge the traffic accordingly."; config "true"; mandatory "true"; type uint32 { range "1..64"; } }//End of leaf applyTrafficIndex container applyExtCmntySoos { description "The apply extcommunity soo command configures Source of Origin (SoO) extended community attributes for BGP routes."; leaf operationType { config "true"; type enumeration { enum "delete" { value "0"; description "delete:"; } enum "replace" { value "1"; description "replace:"; } enum "additive" { value "2"; description "additive:"; } enum "delSpecial" { value "3"; description "delSpecial:"; } } default "replace"; Yan & Zhuang Expires June 30, 2015 [Page 48] Internet-Draft Yang Data Model for Routing Policies December 2014 } container applyExtCmntySooStrings { list applyExtCmntySooString { key "stringValue"; min-elements "0"; max-elements "unbounded"; leaf stringValue { config "true"; type "string"; } } } }//End of container applyExtCmntySoos leaf applyPriorityValue { description "The apply preference command sets the preference for routes. If a route satisfies the filter condition specified by the if-match clause, you can run the apply preference command to change the preference of the route to participate in route selection. Then, when different protocols discover multiple routes to the same destination, the route discovered by the protocol with a higher preference is selected as a valid route to forward packets."; config "true"; mandatory "true"; type uint16 { range "1..255"; } }//End of leaf applyPriorityValue } } }//End of container routePolicyNodes } }//End of container routePolicys }//End of container routing-policy } Yan & Zhuang Expires June 30, 2015 [Page 49] Internet-Draft Yang Data Model for Routing Policies December 2014 6. IANA Considerations This document makes no request of IANA. 7. Security Considerations This document does not introduce any new security risk. 8. Acknowledgements The authors would like to thank Xianping Zhang, Nan Meng, Linghai Kong for their contributions to this work. 9. References [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)", RFC 6020, October 2010. [RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. Bierman, "Network Configuration Protocol (NETCONF)", RFC 6241, June 2011. Authors' Addresses Gang Yan Huawei Technologies Huawei Bld., No.156 Beiqing Rd. Beijing 100095 China Email: yangang@huawei.com Shunwan Zhuang Huawei Technologies Huawei Bld., No.156 Beiqing Rd. Beijing 100095 China Email: zhuangshunwan@huawei.com Yan & Zhuang Expires June 30, 2015 [Page 50]