| < draft-ietf-rtgwg-policy-model-02.txt | draft-ietf-rtgwg-policy-model-03.txt > | |||
|---|---|---|---|---|
| RTGWG Y. Qu | RTGWG Y. Qu | |||
| Internet-Draft Huawei | Internet-Draft Huawei | |||
| Intended status: Informational J. Tantsura | Intended status: Informational J. Tantsura | |||
| Expires: September 4, 2018 Nuage Networks | Expires: December 31, 2018 Nuage Networks | |||
| A. Lindem | A. Lindem | |||
| Cisco | Cisco | |||
| X. Liu | X. Liu | |||
| Jabil | Jabil | |||
| A. Shaikh | A. Shaikh | |||
| March 3, 2018 | June 29, 2018 | |||
| A YANG Data Model for Routing Policy Management | A YANG Data Model for Routing Policy Management | |||
| draft-ietf-rtgwg-policy-model-02 | draft-ietf-rtgwg-policy-model-03 | |||
| Abstract | Abstract | |||
| This document defines a YANG data model for configuring and managing | This document defines a YANG data model for configuring and managing | |||
| routing policies in a vendor-neutral way and based on actual | routing policies in a vendor-neutral way and based on actual | |||
| operational practice. The model provides a generic policy framework | operational practice. The model provides a generic policy framework | |||
| which can be augmented with protocol-specific policy configuration. | which can be augmented with protocol-specific policy configuration. | |||
| Status of This Memo | Status of This Memo | |||
| skipping to change at page 1, line 40 ¶ | skipping to change at page 1, line 40 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on September 4, 2018. | This Internet-Draft will expire on December 31, 2018. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2018 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 24 ¶ | skipping to change at page 2, line 24 ¶ | |||
| 1.1. Goals and approach . . . . . . . . . . . . . . . . . . . 3 | 1.1. Goals and approach . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Model overview . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Model overview . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Route policy expression . . . . . . . . . . . . . . . . . . . 4 | 3. Route policy expression . . . . . . . . . . . . . . . . . . . 4 | |||
| 3.1. Defined sets for policy matching . . . . . . . . . . . . 4 | 3.1. Defined sets for policy matching . . . . . . . . . . . . 4 | |||
| 3.2. Policy conditions . . . . . . . . . . . . . . . . . . . . 5 | 3.2. Policy conditions . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.3. Policy actions . . . . . . . . . . . . . . . . . . . . . 6 | 3.3. Policy actions . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.4. Policy subroutines . . . . . . . . . . . . . . . . . . . 7 | 3.4. Policy subroutines . . . . . . . . . . . . . . . . . . . 7 | |||
| 4. Policy evaluation . . . . . . . . . . . . . . . . . . . . . . 7 | 4. Policy evaluation . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5. Applying routing policy . . . . . . . . . . . . . . . . . . . 8 | 5. Applying routing policy . . . . . . . . . . . . . . . . . . . 8 | |||
| 6. Routing protocol-specific policies . . . . . . . . . . . . . 8 | 6. Routing protocol-specific policies . . . . . . . . . . . . . 8 | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 9. YANG modules . . . . . . . . . . . . . . . . . . . . . . . . 10 | 9. YANG modules . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 9.1. Routing policy model . . . . . . . . . . . . . . . . . . 10 | 9.1. Routing policy model . . . . . . . . . . . . . . . . . . 11 | |||
| 10. Policy examples . . . . . . . . . . . . . . . . . . . . . . . 26 | 10. Policy examples . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 27 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 11.1. Normative references . . . . . . . . . . . . . . . . . . 27 | 11.1. Normative references . . . . . . . . . . . . . . . . . . 28 | |||
| 11.2. Informative references . . . . . . . . . . . . . . . . . 27 | 11.2. Informative references . . . . . . . . . . . . . . . . . 29 | |||
| Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 27 | Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 29 | |||
| Appendix B. Change summary . . . . . . . . . . . . . . . . . . . 28 | Appendix B. Change summary . . . . . . . . . . . . . . . . . . . 29 | |||
| B.1. Changes between revisions -01 and -02 . . . . . . . . . . 28 | B.1. Changes between revisions -01 and -02 . . . . . . . . . . 29 | |||
| B.2. Changes between revisions -00 and -01 . . . . . . . . . . 28 | B.2. Changes between revisions -00 and -01 . . . . . . . . . . 29 | |||
| B.3. Changes between revisions draft-shaikh-rtgwg-policy-model | B.3. Changes between revisions draft-shaikh-rtgwg-policy-model | |||
| and -00 . . . . . . . . . . . . . . . . . . . . . . . . . 28 | and -00 . . . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 28 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 1. Introduction | 1. Introduction | |||
| This document describes a YANG [RFC6020] [RFC7950] data model for | This document describes a YANG [RFC6020] [RFC7950] data model for | |||
| routing policy configuration based on operational usage and best | routing policy configuration based on operational usage and best | |||
| practices in a variety of service provider networks. The model is | practices in a variety of service provider networks. The model is | |||
| intended to be vendor-neutral, in order to allow operators to manage | intended to be vendor-neutral, in order to allow operators to manage | |||
| policy configuration in a consistent, intuitive way in heterogeneous | policy configuration in a consistent, intuitive way in heterogeneous | |||
| environments with routers supplied by multiple vendors. | environments with routers supplied by multiple vendors. | |||
| skipping to change at page 5, line 5 ¶ | skipping to change at page 5, line 5 ¶ | |||
| o neighbor sets - define a set of neighboring nodes by their IP | o neighbor sets - define a set of neighboring nodes by their IP | |||
| addresses. These sets are used for selecting routes based on the | addresses. These sets are used for selecting routes based on the | |||
| neighbors advertising the routes. | neighbors advertising the routes. | |||
| o tag set - define a set of generic tag values that can be used in | o tag set - define a set of generic tag values that can be used in | |||
| matches for filtering routes | matches for filtering routes | |||
| The model structure for defined sets is shown below. | The model structure for defined sets is shown below. | |||
| +--rw routing-policy | +--rw routing-policy | |||
| +--rw defined-sets | +--rw defined-sets | |||
| | +--rw prefix-sets | | +--rw prefix-sets | |||
| | | +--rw prefix-set* [name] | | | +--rw prefix-set* [name] | |||
| | | +--rw name string | | | +--rw name string | |||
| | | +--rw mode? enumeration | | | +--rw mode? enumeration | |||
| | | +--rw prefixes | | | +--rw prefixes | |||
| | | +--rw prefix* [ip-prefix masklength-range] | | | +--rw prefix-list* [ip-prefix masklength-lower | |||
| | | masklength-upper] | ||||
| | | +--rw ip-prefix inet:ip-prefix | | | +--rw ip-prefix inet:ip-prefix | |||
| | | +--rw masklength-range string | | | +--rw masklength-lower uint8 | |||
| | | +--rw masklength-upper uint8 | ||||
| | +--rw neighbor-sets | | +--rw neighbor-sets | |||
| | | +--rw neighbor-set* [name] | | | +--rw neighbor-set* [name] | |||
| | | +--rw name string | | | +--rw name string | |||
| | | +--rw address* inet:ip-address | | | +--rw address* inet:ip-address | |||
| | +--rw tag-sets | | +--rw tag-sets | |||
| | +--rw tag-set* [name] | | +--rw tag-set* [name] | |||
| | +--rw name string | | +--rw name string | |||
| | +--rw tag-value* tag-type | | +--rw tag-value* tag-type | |||
| 3.2. Policy conditions | 3.2. Policy conditions | |||
| skipping to change at page 6, line 22 ¶ | skipping to change at page 6, line 26 ¶ | |||
| +--rw policy-definitions | +--rw policy-definitions | |||
| +--rw policy-definition* [name] | +--rw policy-definition* [name] | |||
| +--rw name string | +--rw name string | |||
| +--rw statements | +--rw statements | |||
| +--rw statement* [name] | +--rw statement* [name] | |||
| +--rw conditions | +--rw conditions | |||
| | +--rw call-policy? | | +--rw call-policy? | |||
| | +--rw install-protocol-eq? | | +--rw install-protocol-eq? | |||
| | +--rw match-interface | | +--rw match-interface | |||
| | | +--rw interface? | | | +--rw interface? | |||
| | | +--rw subinterface? | ||||
| | +--rw match-prefix-set | | +--rw match-prefix-set | |||
| | | +--rw prefix-set? | | | +--rw prefix-set? | |||
| | | +--rw match-set-options? | | | +--rw match-set-options? | |||
| | +--rw match-neighbor-set | | +--rw match-neighbor-set | |||
| | | +--rw neighbor-set? | | | +--rw neighbor-set? | |||
| | | +--rw match-set-options? | ||||
| | | match-set-options-restricted-type | ||||
| | +--rw match-tag-set | | +--rw match-tag-set | |||
| | +--rw tag-set? | | +--rw tag-set? | |||
| | +--rw match-set-options? | | +--rw match-set-options? | |||
| match-set-options-restricted-type | ||||
| 3.3. Policy actions | 3.3. Policy actions | |||
| When policy conditions are satisfied, policy actions are used to set | When policy conditions are satisfied, policy actions are used to set | |||
| various attributes of the route being processed, or to indicate the | various attributes of the route being processed, or to indicate the | |||
| final disposition of the route, i.e., accept or reject. | final disposition of the route, i.e., accept or reject. | |||
| Similar to policy conditions, the routing policy model includes | Similar to policy conditions, the routing policy model includes | |||
| generic actions in addition to the basic route disposition actions. | generic actions in addition to the basic route disposition actions. | |||
| These are shown below. | These are shown below. | |||
| +--rw routing-policy | +--rw routing-policy | |||
| +--rw policy-definitions | +--rw policy-definitions | |||
| +--rw policy-definition* [name] | +--rw policy-definition* [name] | |||
| +--rw statements | +--rw statements | |||
| +--rw statement* [name] | +--rw statement* [name] | |||
| +--rw actions | +--rw actions | |||
| +--rw policy-result? policy-result-type | +--rw policy-result? policy-result-type | |||
| +--rw set-metric? uint16 | ||||
| +--rw set-preference? uint8 | ||||
| 3.4. Policy subroutines | 3.4. Policy subroutines | |||
| Policy 'subroutines' (or nested policies) are supported by allowing | Policy 'subroutines' (or nested policies) are supported by allowing | |||
| policy statement conditions to reference other policy definitions | policy statement conditions to reference other policy definitions | |||
| using the call-policy configuration. Called policies apply their | using the call-policy configuration. Called policies apply their | |||
| conditions and actions before returning to the calling policy | conditions and actions before returning to the calling policy | |||
| statement and resuming evaluation. The outcome of the called policy | statement and resuming evaluation. The outcome of the called policy | |||
| affects the evaluation of the calling policy. If the called policy | affects the evaluation of the calling policy. If the called policy | |||
| results in an accept-route (either explicit or by default), then the | results in an accept-route (either explicit or by default), then the | |||
| skipping to change at page 9, line 5 ¶ | skipping to change at page 8, line 51 ¶ | |||
| policy configuration. The routing policy model assumes that | policy configuration. The routing policy model assumes that | |||
| additional defined sets, conditions, and actions may all be added by | additional defined sets, conditions, and actions may all be added by | |||
| other models. | other models. | |||
| An example of this is shown below, in which the BGP configuration | An example of this is shown below, in which the BGP configuration | |||
| model in [I-D.ietf-idr-bgp-model] adds new defined sets to match on | model in [I-D.ietf-idr-bgp-model] adds new defined sets to match on | |||
| community values or AS paths. The model similarly augments BGP- | community values or AS paths. The model similarly augments BGP- | |||
| specific conditions and actions in the corresponding sections of the | specific conditions and actions in the corresponding sections of the | |||
| routing policy model. | routing policy model. | |||
| +--rw routing-policy | module: ietf-routing-policy | |||
| +--rw defined-sets | +--rw routing-policy | |||
| +--rw prefix-sets | +--rw defined-sets | |||
| | +--rw prefix-set* [prefix-set-name] | | +--rw prefix-sets | |||
| | +--rw prefix-set-name | | | +--rw prefix-set* [name] | |||
| | +--rw prefix* [ip-prefix masklength-range] | | | +--rw name string | |||
| | +--rw ip-prefix | | | +--rw mode? enumeration | |||
| | +--rw masklength-range | | | +--rw prefixes | |||
| +--rw neighbor-sets | | | +--rw prefix-list* [ip-prefix masklength-lower | |||
| | +--rw neighbor-set* [neighbor-set-name] | | | masklength-upper] | |||
| | +--rw neighbor-set-name | | | +--rw ip-prefix inet:ip-prefix | |||
| | +--rw neighbor* [address] | | | +--rw masklength-lower uint8 | |||
| | +--rw address | | | +--rw masklength-upper uint8 | |||
| +--rw tag-sets | | +--rw neighbor-sets | |||
| | +--rw tag-set* [tag-set-name] | | | +--rw neighbor-set* [name] | |||
| | +--rw tag-set-name | | | +--rw name string | |||
| | +--rw tag* [value] | | | +--rw address* inet:ip-address | |||
| | +--rw value | | +--rw tag-sets | |||
| +--rw bgp-pol:bgp-defined-sets | | | +--rw tag-set* [name] | |||
| +--rw bgp-pol:community-sets | | | +--rw name string | |||
| | +--rw bgp-pol:community-set* [community-set-name] | | | +--rw tag-value* tag-type | |||
| | +--rw bgp-pol:community-set-name | | +--rw bgp-pol:bgp-defined-sets | |||
| | +--rw bgp-pol:community-member* | | +--rw bgp-pol:community-sets | |||
| +--rw bgp-pol:ext-community-sets | | | +--rw bgp-pol:community-set* [community-set-name] | |||
| | +--rw bgp-pol:ext-community-set* | | | +--rw bgp-pol:community-set-name string | |||
| | [ext-community-set-name] | | | +--rw bgp-pol:community-member* union | |||
| | +--rw bgp-pol:ext-community-set-name | | +--rw bgp-pol:ext-community-sets | |||
| | +--rw bgp-pol:ext-community-member* | | | +--rw bgp-pol:ext-community-set* [ext-community-set-name] | |||
| +--rw bgp-pol:as-path-sets | | | +--rw bgp-pol:ext-community-set-name string | |||
| +--rw bgp-pol:as-path-set* [as-path-set-name] | | | +--rw bgp-pol:ext-community-member* union | |||
| +--rw bgp-pol:as-path-set-name | | +--rw bgp-pol:as-path-sets | |||
| +--rw bgp-pol:as-path-set-member* | | +--rw bgp-pol:as-path-set* [as-path-set-name] | |||
| | +--rw bgp-pol:as-path-set-name string | ||||
| | +--rw bgp-pol:as-path-set-member* string | ||||
| +--rw policy-definitions | ||||
| +--rw policy-definition* [name] | ||||
| +--rw name string | ||||
| +--rw statements | ||||
| +--rw statement* [name] | ||||
| +--rw name string | ||||
| +--rw conditions | ||||
| | +--rw call-policy? | ||||
| | +--rw source-protocol? identityref | ||||
| | +--rw match-interface | ||||
| | | +--rw interface? | ||||
| | | +--rw subinterface? | ||||
| | +--rw match-prefix-set | ||||
| | | +--rw prefix-set? | ||||
| | | +--rw match-set-options? match-set-options-type | ||||
| | +--rw match-neighbor-set | ||||
| | | +--rw neighbor-set? | ||||
| | +--rw match-tag-set | ||||
| | | +--rw tag-set? | ||||
| | | +--rw match-set-options? match-set-options-type | ||||
| | +--rw bgp-pol:bgp-conditions | ||||
| | +--rw bgp-pol:med-eq? uint32 | ||||
| | +--rw bgp-pol:origin-eq? | ||||
| | bgp-types:bgp-origin-attr-type | ||||
| | +--rw bgp-pol:next-hop-in* | ||||
| | inet:ip-address-no-zone | ||||
| | +--rw bgp-pol:afi-safi-in* identityref | ||||
| | +--rw bgp-pol:local-pref-eq? uint32 | ||||
| | +--rw bgp-pol:route-type? enumeration | ||||
| | +--rw bgp-pol:community-count | ||||
| | +--rw bgp-pol:as-path-length | ||||
| | +--rw bgp-pol:match-community-set | ||||
| | | +--rw bgp-pol:community-set? | ||||
| | | +--rw bgp-pol:match-set-options? | ||||
| | match-set-options-type | ||||
| | +--rw bgp-pol:match-ext-community-set | ||||
| | | +--rw bgp-pol:ext-community-set? | ||||
| | | +--rw bgp-pol:match-set-options? | ||||
| | | match-set-options-type | ||||
| | +--rw bgp-pol:match-as-path-set | ||||
| | +--rw bgp-pol:as-path-set? | ||||
| | +--rw bgp-pol:match-set-options? | ||||
| | match-set-options-type | ||||
| +--rw actions | ||||
| +--rw policy-result? policy-result-type | ||||
| +--rw set-metric? uint16 | ||||
| +--rw set-preference? uint8 | ||||
| +--rw bgp-pol:bgp-actions | ||||
| +--rw bgp-pol:set-route-origin? | ||||
| bgp-types:bgp-origin-attr-type | ||||
| +--rw bgp-pol:set-local-pref? uint32 | ||||
| +--rw bgp-pol:set-next-hop? bgp-next-hop-type | ||||
| +--rw bgp-pol:set-med? bgp-set-med-type | ||||
| +--rw bgp-pol:set-as-path-prepend | ||||
| | +--rw bgp-pol:repeat-n? uint8 | ||||
| +--rw bgp-pol:set-community | ||||
| | +--rw bgp-pol:method? enumeration | ||||
| | +--rw bgp-pol:options? | ||||
| bgp-set-community-option-type | ||||
| | +--rw bgp-pol:inline | ||||
| | | +--rw bgp-pol:communities* union | ||||
| | +--rw bgp-pol:reference | ||||
| | +--rw bgp-pol:community-set-ref? | ||||
| +--rw bgp-pol:set-ext-community | ||||
| +--rw bgp-pol:method? enumeration | ||||
| +--rw bgp-pol:options? | ||||
| bgp-set-community-option-type | ||||
| +--rw bgp-pol:inline | ||||
| | +--rw bgp-pol:communities* union | ||||
| +--rw bgp-pol:reference | ||||
| +--rw bgp-pol:ext-community-set-ref? | ||||
| 7. Security Considerations | 7. Security Considerations | |||
| Routing policy configuration has a significant impact on network | Routing policy configuration has a significant impact on network | |||
| operations, and, as such, any related model carries potential | operations, and, as such, any related model carries potential | |||
| security risks. | security risks. | |||
| YANG data models are generally designed to be used with the NETCONF | YANG data models are generally designed to be used with the NETCONF | |||
| protocol over an SSH transport. This provides an authenticated and | protocol over an SSH transport. This provides an authenticated and | |||
| secure channel over which to transfer configuration and operational | secure channel over which to transfer configuration and operational | |||
| skipping to change at page 10, line 25 ¶ | skipping to change at page 11, line 46 ¶ | |||
| YANG modules will be registered in the "YANG Module Names" registry | YANG modules will be registered in the "YANG Module Names" registry | |||
| [RFC6020]. | [RFC6020]. | |||
| 9. YANG modules | 9. YANG modules | |||
| The routing policy model is described by the YANG modules in the | The routing policy model is described by the YANG modules in the | |||
| sections below. | sections below. | |||
| 9.1. Routing policy model | 9.1. Routing policy model | |||
| <CODE BEGINS> file "ietf-routing-policy@2018-02-26.yang" | <CODE BEGINS> file "ietf-routing-policy@2018-06-25.yang" | |||
| module ietf-routing-policy { | module ietf-routing-policy { | |||
| yang-version "1.1"; | yang-version "1.1"; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-routing-policy"; | namespace "urn:ietf:params:xml:ns:yang:ietf-routing-policy"; | |||
| prefix rt-pol; | prefix rt-pol; | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix "inet"; | prefix "inet"; | |||
| } | } | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix "yang"; | prefix "yang"; | |||
| } | } | |||
| import ietf-interfaces { | import ietf-interfaces { | |||
| prefix "if"; | prefix "if"; | |||
| skipping to change at page 12, line 35 ¶ | skipping to change at page 14, line 8 ¶ | |||
| definition which applies conditions and actions from the | definition which applies conditions and actions from the | |||
| referenced policy before returning to the calling policy | referenced policy before returning to the calling policy | |||
| statement and resuming evaluation. If the called policy | statement and resuming evaluation. If the called policy | |||
| results in an accept-route (either explicit or by default), then | results in an accept-route (either explicit or by default), then | |||
| the subroutine returns an effective true value to the calling | the subroutine returns an effective true value to the calling | |||
| policy. Similarly, a reject-route action returns false. If the | policy. Similarly, a reject-route action returns false. If the | |||
| subroutine returns true, the calling policy continues to | subroutine returns true, the calling policy continues to | |||
| evaluate the remaining conditions (using a modified route if the | evaluate the remaining conditions (using a modified route if the | |||
| subroutine performed any changes to the route)."; | subroutine performed any changes to the route)."; | |||
| revision "2018-02-26" { | revision "2018-06-25" { | |||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFC XXXX: Routing Policy Configuration Model for Service | "RFC XXXX: Routing Policy Configuration Model for Service | |||
| Provider Networks"; | Provider Networks"; | |||
| } | } | |||
| // typedef statements | // typedef statements | |||
| typedef default-policy-type { | typedef default-policy-type { | |||
| skipping to change at page 15, line 31 ¶ | skipping to change at page 17, line 4 ¶ | |||
| list prefix-set { | list prefix-set { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "List of the defined prefix sets"; | "List of the defined prefix sets"; | |||
| uses prefix-set; | uses prefix-set; | |||
| uses prefix-top; | uses prefix-top; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping prefix { | grouping prefix { | |||
| description | description | |||
| "Configuration data for a prefix definition"; | "Configuration data for a prefix definition"; | |||
| leaf ip-prefix { | leaf ip-prefix { | |||
| type inet:ip-prefix; | type inet:ip-prefix; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The prefix member in CIDR notation -- while the | "The prefix member in CIDR notation -- while the | |||
| prefix may be either IPv4 or IPv6, most | prefix may be either IPv4 or IPv6, most | |||
| implementations require all members of the prefix set | implementations require all members of the prefix set | |||
| to be the same address family. Mixing address types in | to be the same address family. Mixing address types in | |||
| the same prefix set is likely to cause an error."; | the same prefix set is likely to cause an error."; | |||
| } | } | |||
| leaf masklength-range { | leaf masklength-lower { | |||
| type string { | type uint8; | |||
| pattern '([0-9]{2}\.\.[0-9]{2})|([0-9]{2})'; | description | |||
| "Masklength range lower bound."; | ||||
| } | ||||
| leaf masklength-upper { | ||||
| type uint8 { | ||||
| range "1..128"; | ||||
| } | ||||
| must "../masklength-upper >= ../masklength-lower" { | ||||
| error-message "The upper bound should not be less" | ||||
| + "than lower bound."; | ||||
| } | } | |||
| description | description | |||
| "Defines a range for the masklength, or 'exact' if | "Masklength range upper bound. | |||
| the prefix has an exact length. | ||||
| The combination of masklength-lower and masklength-upper | ||||
| define a range for the mask length, or single 'exact' | ||||
| length if masklength-lower and masklenght-upper are equal. | ||||
| Example: 10.3.192.0/21 through 10.3.192.0/24 would be | Example: 10.3.192.0/21 through 10.3.192.0/24 would be | |||
| expressed as prefix: 10.3.192.0/21, | expressed as prefix: 10.3.192.0/21, | |||
| masklength-range: 21..24. | masklength-lower=21, | |||
| masklength-upper=24 | ||||
| Example: 10.3.192.0/21 would be expressed as | Example: 10.3.192.0/21 (an exact match) would be | |||
| prefix: 10.3.192.0/21, | expressed as prefix: 10.3.192.0/21, | |||
| masklength-range: exact"; | masklength-lower=21, | |||
| masklength-upper=21"; | ||||
| } | } | |||
| } | } | |||
| grouping prefix-top { | grouping prefix-top { | |||
| description | description | |||
| "Top-level grouping for prefixes in a prefix list"; | "Top-level grouping for prefixes in a prefix list"; | |||
| container prefixes { | container prefixes { | |||
| description | description | |||
| "Enclosing container for the list of prefixes in a policy | "Enclosing container for the list of prefixes in a policy | |||
| prefix list"; | prefix list"; | |||
| list prefix-list { | list prefix-list { | |||
| key "ip-prefix masklength-range"; | key "ip-prefix masklength-lower masklength-upper"; | |||
| description | description | |||
| "List of prefixes in the prefix set"; | "List of prefixes in the prefix set"; | |||
| uses prefix; | uses prefix; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping neighbor-set { | grouping neighbor-set { | |||
| description | description | |||
| skipping to change at page 21, line 4 ¶ | skipping to change at page 22, line 36 ¶ | |||
| "/name"; | "/name"; | |||
| require-instance true; | require-instance true; | |||
| } | } | |||
| description "References a defined tag set"; | description "References a defined tag set"; | |||
| } | } | |||
| uses match-set-options-restricted-group; | uses match-set-options-restricted-group; | |||
| description | description | |||
| "Match a referenced tag set according to the logic defined | "Match a referenced tag set according to the logic defined | |||
| in the match-options-set leaf"; | in the match-options-set leaf"; | |||
| } | } | |||
| } | } | |||
| grouping generic-conditions { | grouping generic-conditions { | |||
| description "Condition statement definitions for checking | description "Condition statement definitions for checking | |||
| membership in a generic defined set"; | membership in a generic defined set"; | |||
| uses match-interface-condition; | uses match-interface-condition; | |||
| uses prefix-set-condition; | uses prefix-set-condition; | |||
| uses neighbor-set-condition; | uses neighbor-set-condition; | |||
| uses tag-set-condition; | uses tag-set-condition; | |||
| } | } | |||
| grouping generic-actions { | ||||
| description | ||||
| "Definitions for common set of policy action statements that | ||||
| manage the disposition or control flow of the policy"; | ||||
| leaf policy-result { | ||||
| type policy-result-type; | ||||
| description | ||||
| "Select the final disposition for the route, either | ||||
| accept or reject."; | ||||
| } | ||||
| } | ||||
| grouping policy-conditions { | grouping policy-conditions { | |||
| description | description | |||
| "Data for general policy conditions, i.e., those | "Data for general policy conditions, i.e., those | |||
| not related to match-sets"; | not related to match-sets"; | |||
| leaf call-policy { | leaf call-policy { | |||
| type leafref { | type leafref { | |||
| path "../../../../../../" + | path "../../../../../../" + | |||
| "rt-pol:policy-definitions/" + | "rt-pol:policy-definitions/" + | |||
| "rt-pol:policy-definition/rt-pol:name"; | "rt-pol:policy-definition/rt-pol:name"; | |||
| skipping to change at page 22, line 10 ¶ | skipping to change at page 23, line 28 ¶ | |||
| itself call other policies (subject to | itself call other policies (subject to | |||
| implementation limitations). This is intended to | implementation limitations). This is intended to | |||
| provide a policy 'subroutine' capability. The | provide a policy 'subroutine' capability. The | |||
| called policy should contain an explicit or a | called policy should contain an explicit or a | |||
| default route disposition that returns an | default route disposition that returns an | |||
| effective true (accept-route) or false | effective true (accept-route) or false | |||
| (reject-route), otherwise the behavior may be | (reject-route), otherwise the behavior may be | |||
| ambiguous and implementation dependent"; | ambiguous and implementation dependent"; | |||
| } | } | |||
| leaf install-protocol-eq { | leaf source-protocol { | |||
| type identityref { | type identityref { | |||
| base rt:control-plane-protocol; | base rt:control-plane-protocol; | |||
| } | } | |||
| description | description | |||
| "Condition to check the protocol / method used to install | "Condition to check the protocol / method used to install | |||
| the route into the local routing table"; | the route into the local routing table"; | |||
| } | } | |||
| } | } | |||
| grouping policy-conditions-top { | grouping policy-conditions-top { | |||
| skipping to change at page 22, line 33 ¶ | skipping to change at page 24, line 4 ¶ | |||
| container conditions { | container conditions { | |||
| description | description | |||
| "Condition statements for the current policy statement"; | "Condition statements for the current policy statement"; | |||
| uses policy-conditions; | uses policy-conditions; | |||
| uses generic-conditions; | uses generic-conditions; | |||
| } | } | |||
| } | } | |||
| grouping policy-statements { | grouping policy-statements { | |||
| description | description | |||
| "Data for policy statements"; | "Data for policy statements"; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "Name of the policy statement"; | "Name of the policy statement"; | |||
| } | } | |||
| } | } | |||
| grouping policy-actions { | grouping policy-actions { | |||
| description | description | |||
| "Grouping for policy actions"; | ||||
| uses generic-actions; | ||||
| } | ||||
| grouping policy-actions-top { | ||||
| description | ||||
| "Top-level grouping for policy actions"; | "Top-level grouping for policy actions"; | |||
| container actions { | container actions { | |||
| description | description | |||
| "Top-level container for policy action statements"; | "Top-level container for policy action statements"; | |||
| uses policy-actions; | leaf policy-result { | |||
| type policy-result-type; | ||||
| description | ||||
| "Select the final disposition for the route, either | ||||
| accept or reject."; | ||||
| } | ||||
| leaf set-metric { | ||||
| type uint16; | ||||
| description | ||||
| "Set a new metric for the route."; | ||||
| } | ||||
| leaf set-preference { | ||||
| type uint8; | ||||
| description | ||||
| "Set a new preference for the route."; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| grouping policy-statements-top { | grouping policy-statements-top { | |||
| description | description | |||
| "Top-level grouping for the policy statements list"; | "Top-level grouping for the policy statements list"; | |||
| container statements { | container statements { | |||
| description | description | |||
| "Enclosing container for policy statements"; | "Enclosing container for policy statements"; | |||
| skipping to change at page 23, line 36 ¶ | skipping to change at page 25, line 15 ¶ | |||
| ordered-by user; | ordered-by user; | |||
| description | description | |||
| "Policy statements group conditions and actions | "Policy statements group conditions and actions | |||
| within a policy definition. They are evaluated in | within a policy definition. They are evaluated in | |||
| the order specified (see the description of policy | the order specified (see the description of policy | |||
| evaluation at the top of this module."; | evaluation at the top of this module."; | |||
| uses policy-statements; | uses policy-statements; | |||
| uses policy-conditions-top; | uses policy-conditions-top; | |||
| uses policy-actions-top; | uses policy-actions; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping policy-definitions { | grouping policy-definitions { | |||
| description | description | |||
| "This grouping provides policy definitions"; | "This grouping provides policy definitions"; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| skipping to change at page 27, line 35 ¶ | skipping to change at page 29, line 12 ¶ | |||
| [RFC6991] Schoenwaelder, J., "Common YANG Data Types", RFC 6991, | [RFC6991] Schoenwaelder, J., "Common YANG Data Types", RFC 6991, | |||
| July 2013. | July 2013. | |||
| [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | |||
| RFC 7950, DOI 10.17487/RFC7950, August 2016, | RFC 7950, DOI 10.17487/RFC7950, August 2016, | |||
| <https://www.rfc-editor.org/info/rfc7950>. | <https://www.rfc-editor.org/info/rfc7950>. | |||
| 11.2. Informative references | 11.2. Informative references | |||
| [I-D.ietf-idr-bgp-model] | [I-D.ietf-idr-bgp-model] | |||
| Shaikh, A., Shakir, R., Patel, K., Hares, S., D'Souza, K., | Patel, K., Jethanandani, M., and S. Hares, "BGP Model for | |||
| Bansal, D., Clemm, A., Zhdankin, A., Jethanandani, M., and | Service Provider Networks", draft-ietf-idr-bgp-model-03 | |||
| X. Liu, "BGP Model for Service Provider Networks", draft- | (work in progress), May 2018. | |||
| ietf-idr-bgp-model-02 (work in progress), July 2016. | ||||
| Appendix A. Acknowledgements | Appendix A. Acknowledgements | |||
| The routing policy module defined in this draft is based on the | The routing policy module defined in this draft is based on the | |||
| OpenConfig route policy model. The authors would like to thank to | OpenConfig route policy model. The authors would like to thank to | |||
| OpenConfig for their contributions, especially Rob Shakir, Kevin | OpenConfig for their contributions, especially Rob Shakir, Kevin | |||
| D'Souza, and Chris Chase. | D'Souza, and Chris Chase. | |||
| The authors are grateful for valuable contributions to this document | The authors are grateful for valuable contributions to this document | |||
| and the associated models from: Ebben Aires, Luyuan Fang, Josh | and the associated models from: Ebben Aires, Luyuan Fang, Josh | |||
| End of changes. 32 change blocks. | ||||
| 99 lines changed or deleted | 181 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||