< draft-raza-spring-sr-policy-yang-00.txt   draft-raza-spring-sr-policy-yang-01.txt >
SPRING Working Group K. Raza, Ed. SPRING Working Group K. Raza, Ed.
Internet-Draft R. Sawaya Internet-Draft R. Sawaya
Intended status: Standards Track Cisco Systems Intended status: Standards Track Cisco Systems
Expires: December 1, 2019 Expires: January 9, 2020
Z. Shunwan Z. Shunwan
Huawei Technologies Huawei Technologies
D. Voyer D. Voyer
Bell Canada Bell Canada
M. Durrani M. Durrani
Equinix Equinix
S. Matsushima S. Matsushima
SoftBank SoftBank
May 30, 2019 V. Beeram
Juniper Networks
July 8, 2019
YANG Data Model for Segment Routing Policy YANG Data Model for Segment Routing Policy
draft-raza-spring-sr-policy-yang-00.txt draft-raza-spring-sr-policy-yang-01.txt
Abstract Abstract
This document defines a YANG data model for Segment Routing (SR) This document defines a YANG data model for Segment Routing (SR)
Policy that can be used for configuring, instantiating, and managing Policy that can be used for configuring, instantiating, and managing
SR policies. The model is generic and apply equally to the MPLS and SR policies. The model is generic and apply equally to the MPLS and
SRv6 instantiations of SR policies. SRv6 instantiations of SR policies.
Status of This Memo Status of This Memo
skipping to change at page 1, line 45 skipping to change at page 1, line 48
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 December 1, 2019. This Internet-Draft will expire on January 9, 2020.
Copyright Notice Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the Copyright (c) 2019 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 26 skipping to change at page 2, line 29
3. Building Blocks . . . . . . . . . . . . . . . . . . . . . . . 3 3. Building Blocks . . . . . . . . . . . . . . . . . . . . . . . 3
4. YANG Model . . . . . . . . . . . . . . . . . . . . . . . . . 4 4. YANG Model . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.1. Types and Definitions . . . . . . . . . . . . . . . . . . 4 4.1. Types and Definitions . . . . . . . . . . . . . . . . . . 4
4.2. SR Policy . . . . . . . . . . . . . . . . . . . . . . . . 5 4.2. SR Policy . . . . . . . . . . . . . . . . . . . . . . . . 5
4.2.1. Configuration . . . . . . . . . . . . . . . . . . . . 6 4.2.1. Configuration . . . . . . . . . . . . . . . . . . . . 6
4.2.2. State . . . . . . . . . . . . . . . . . . . . . . . . 10 4.2.2. State . . . . . . . . . . . . . . . . . . . . . . . . 10
4.2.3. Notification . . . . . . . . . . . . . . . . . . . . 12 4.2.3. Notification . . . . . . . . . . . . . . . . . . . . 12
5. Pending Items . . . . . . . . . . . . . . . . . . . . . . . . 13 5. Pending Items . . . . . . . . . . . . . . . . . . . . . . . . 13
6. YANG Specification . . . . . . . . . . . . . . . . . . . . . 14 6. YANG Specification . . . . . . . . . . . . . . . . . . . . . 14
6.1. Types . . . . . . . . . . . . . . . . . . . . . . . . . . 14 6.1. Types . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.2. SR Policy . . . . . . . . . . . . . . . . . . . . . . . . 21 6.2. SR Policy . . . . . . . . . . . . . . . . . . . . . . . . 22
7. Security Considerations . . . . . . . . . . . . . . . . . . . 41 7. Security Considerations . . . . . . . . . . . . . . . . . . . 43
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 44
9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 42 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 44
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 42 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 44
10.1. Normative References . . . . . . . . . . . . . . . . . . 42 10.1. Normative References . . . . . . . . . . . . . . . . . . 44
10.2. Informative References . . . . . . . . . . . . . . . . . 43 10.2. Informative References . . . . . . . . . . . . . . . . . 45
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 43 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 46
1. Introduction 1. Introduction
The Network Configuration Protocol (NETCONF) [RFC6241] defines The Network Configuration Protocol (NETCONF) [RFC6241] defines
mechanisms to manage network devices. YANG [RFC6020] is a modular mechanisms to manage network devices. YANG [RFC6020] is a modular
language that represents data structures in an XML tree format, and language that represents data structures in an XML tree format, and
is used as a data modeling language for the NETCONF. is used as a data modeling language for the NETCONF.
Segment Routing (SR), as defined in [RFC8402], allows a headend node Segment Routing (SR), as defined in [RFC8402], allows a headend node
to steer a packet flow along any topological path and/or service to steer a packet flow along any topological path and/or service
skipping to change at page 5, line 31 skipping to change at page 5, line 34
o policy-oper-state: An Enum for operational state of an SR policy. o policy-oper-state: An Enum for operational state of an SR policy.
o segment-type: An Enum that defines various types for a "segment" o segment-type: An Enum that defines various types for a "segment"
of a Segment list. of a Segment list.
o candidate-path-non-selection-reason: The base identity along with o candidate-path-non-selection-reason: The base identity along with
its children to specify reason for not selecting a candidate path its children to specify reason for not selecting a candidate path
as the best/active path. as the best/active path.
o path-disjointness: The base identity for disjoint path
computation. The disjointness types include link, node, srlg,
srlg-node etc.
o policy-down-reason: The base identity along with its children to o policy-down-reason: The base identity along with its children to
specify reason for a policy becoming (or remaining) operationally specify reason for a policy becoming (or remaining) operationally
down. down.
o binding-sid-unavailable-reason: The base identity along with its o binding-sid-unavailable-reason: The base identity along with its
children to specify reason for a BSID's unavailability. children to specify reason for a BSID's unavailability.
The associated YANG specification for this module is captured in The associated YANG specification for this module is captured in
Section 6.1. Section 6.1.
skipping to change at page 6, line 11 skipping to change at page 6, line 16
The associated YANG specification for this module is captured in The associated YANG specification for this module is captured in
Section 6.2. Section 6.2.
4.2.1. Configuration 4.2.1. Configuration
In terms of configuration hierarchy, SR policy configuration tree has In terms of configuration hierarchy, SR policy configuration tree has
following two main areas: following two main areas:
o policy-attributes: container that defines common constructs that o policy-attributes: container that defines common constructs that
could be used across policies. An example of such a construct is could be used across policies. Examples of such a construct
segment-lists definition. In future revision of this document, it include segment-lists, affinity-map etc. In future revision of
is expected that this container will have more constructs defined. this document, it is expected that this container will have more
constructs defined.
o policies: container that defines list of policies with their o policies: container that defines list of policies with their
attributes such as BSID, candidate-paths etc. attributes such as BSID, candidate-paths etc.
Following diagram depicts high level yang organization and hierarchy Following diagram depicts high level yang organization and hierarchy
for an SR policy specification: for an SR policy specification:
segment-routing segment-routing
sr-policy sr-policy
+ policy-attributes + policy-attributes
| + affinity-map
| | ....
| |
| + segment-lists | + segment-lists
| | segment-list* [name] | | segment-list* [name]
| | segments | | segments
| | segment* [index] | | segment* [index]
| | ... | | ...
| + explicit-binding-sid-rules | + explicit-binding-sid-rules
| ... | ...
| |
+ policies + policies
policy* [color endpoint] policy* [color endpoint]
+ ... + ...
| |
+ binding-sid + binding-sid
| ... | ...
| |
+ candidate-paths + candidate-paths
candidate-path* [protocol origin discrim] candidate-path* [protocol origin discrim]
+ ... + ...
| |
+ type + type
+ dynamic
| ...
|
+ explicit + explicit
segment-lists | segment-lists
segment-list* [ref] | segment-list* [ref]
... | ...
+ dynamic
constraints
...
Figure 1: SR Policy - Hierarchy Figure 1: SR Policy - Hierarchy
Using the building blocks described in Section 3, following is the Using the building blocks described in Section 3, following is the
complete graphical representation of the data model for SR policy complete graphical representation of the data model for SR policy
configuration: configuration:
module: ietf-sr-policy module: ietf-sr-policy
augment /rt:routing: augment /rt:routing:
+--rw segment-routing +--rw segment-routing
+--rw sr-policy +--rw sr-policy
+--rw policy-attributes +--rw policy-attributes
| +--rw affinity-map
| | +--rw affinity* [name]
| | +--rw name string
| | +--rw bit-position? uint16
| +--rw segment-lists | +--rw segment-lists
| | +--rw segment-list* [name] | | +--rw segment-list* [name]
| | +--rw name string | | +--rw name string
| | +--rw segments | | +--rw segments
| | +--rw segment* [index] | | +--rw segment* [index]
| | +--rw index uint32 | | +--rw index uint32
| | +--rw type? sr-policy-types:segment-type | | +--rw type? sr-policy-types:segment-type
| | +--rw segment-types | | +--rw segment-types
| | | +--rw segment-type-1 | | | +--rw segment-type-1
| | | | +--rw sid-value? rt-types:mpls-label | | | | +--rw sid-value? rt-types:mpls-label
| | | +--rw segment-type-2 | | | +--rw segment-type-2
| | | | +--rw sid-value? srv6-types:srv6-sid | | | | +--rw sid-value? srv6-types:srv6-sid
| | | +--rw segment-type-3 | | | +--rw segment-type-3
| | | | +--rw ipv4-address? inet:ipv4-address | | | | +--rw ipv4-address? inet:ipv4-address
| | | | +--rw algorithm? uint8 | | | | +--rw algorithm? uint8
| | | +--rw segment-type-4 | | | +--rw segment-type-4
| | | | +--rw ipv4-address? inet:ipv6-address | | | | +--rw ipv6-address? inet:ipv6-address
| | | | +--rw algorithm? uint8 | | | | +--rw algorithm? uint8
| | | +--rw segment-type-5 | | | +--rw segment-type-5
| | | | +--rw ipv4-address? inet:ipv4-address | | | | +--rw ipv4-address? inet:ipv4-address
| | | | +--rw interface-identifier? uint32 | | | | +--rw interface-identifier? uint32
| | | +--rw segment-type-6 | | | +--rw segment-type-6
| | | | +--rw local-ipv4-address? inet:ipv4-address | | | | +--rw local-ipv4-address? inet:ipv4-address
| | | | +--rw remote-ipv4-address? inet:ipv4-address | | | | +--rw remote-ipv4-address? inet:ipv4-address
| | | +--rw segment-type-7 | | | +--rw segment-type-7
| | | | +--rw local-ipv6-address? inet:ipv6-address | | | | +--rw local-ipv6-address? inet:ipv6-address
| | | | +--rw local-interface-identifier? uint32 | | | | +--rw local-interface-identifier? uint32
| | | | +--rw remote-ipv6-address? inet:ipv6-address | | | | +--rw remote-ipv6-address? inet:ipv6-address
| | | | +--rw remote-interface-identifier? uint32 | | | | +--rw remote-interface-identifier? uint32
| | | +--rw segment-type-8 | | | +--rw segment-type-8
| | | | +--rw local-ipv6-address? inet:ipv6-address | | | | +--rw local-ipv6-address? inet:ipv6-address
| | | | +--rw remote-ipv6-address? inet:ipv6-address | | | | +--rw remote-ipv6-address? inet:ipv6-address
| | | +--rw segment-type-9 | | | +--rw segment-type-9
| | | | +--rw ipv6-address? inet:ipv6-address | | | | +--rw ipv6-address? inet:ipv6-address
| | | | +--rw algorithm? uint8 | | | | +--rw algorithm? uint8
| | | +--rw segment-type-10 | | | +--rw segment-type-10
| | | | +--rw local-ipv6-address? inet:ipv6-address | | | | +--rw local-ipv6-address? inet:ipv6-address
| | | | +--rw local-interface-identifier? uint32 | | | | +--rw local-interface-identifier? uint32
| | | | +--rw remote-ipv6-address? inet:ipv6-address | | | | +--rw remote-ipv6-address? inet:ipv6-address
| | | | +--rw remote-interface-identifier? uint32 | | | | +--rw remote-interface-identifier? uint32
| | | +--rw segment-type-11 | | | +--rw segment-type-11
| | | +--rw local-ipv6-address? inet:ipv6-address | | | +--rw local-ipv6-address? inet:ipv6-address
| | | +--rw remote-ipv6-address? inet:ipv6-address | | | +--rw remote-ipv6-address? inet:ipv6-address
| | +--rw validate? boolean | | +--rw validate? boolean
| +--rw explicit-binding-sid-rules* [index] | +--rw explicit-binding-sid-rules* [index]
| +--rw index uint32 | +--rw index uint32
| +--rw rule? sr-policy-types:explicit-binding-sid-rule-type | +--rw rule? sr-policy-types:explicit-binding-sid-rule-type
+--rw policies +--rw policies
+--rw policy* [color endpoint] +--rw policy* [color endpoint]
skipping to change at page 9, line 12 skipping to change at page 9, line 19
+--rw endpoint inet:ip-address +--rw endpoint inet:ip-address
+--rw name? string +--rw name? string
+--rw description? string +--rw description? string
+--rw admin-state? sr-policy-types:policy-admin-state +--rw admin-state? sr-policy-types:policy-admin-state
+--rw priority? uint8 +--rw priority? uint8
+--rw binding-sid +--rw binding-sid
| +--rw dataplane? sr-policy-types:dataplane-type | +--rw dataplane? sr-policy-types:dataplane-type
| +--rw value? sr-policy-types:sid-value-type | +--rw value? sr-policy-types:sid-value-type
+--rw candidate-paths +--rw candidate-paths
+--rw candidate-path* [protocol-origin originator discriminator] +--rw candidate-path* [protocol-origin originator discriminator]
+--rw protocol-origin sr-policy-types:protocol-origin-type +--rw protocol-origin sr-policy-types:protocol-origin-type
+--rw originator string +--rw originator string
+--rw discriminator uint32 +--rw discriminator uint32
+--rw name? string +--rw name? string
+--rw preference? uint32 +--rw preference? uint32
+--rw description? string +--rw description? string
+--rw binding-sid {capability-candidate-path-binding-sid}? +--rw binding-sid {capability-candidate-path-binding-sid}?
| +--rw dataplane? sr-policy-types:dataplane-type | +--rw dataplane? sr-policy-types:dataplane-type
| +--rw value? sr-policy-types:sid-value-type | +--rw value? sr-policy-types:sid-value-type
+--rw (type)? +--rw (type)?
+--:(explicit) +--:(explicit)
| +--rw segment-lists | +--rw segment-lists
| +--rw segment-list* [name-ref] | +--rw segment-list* [name-ref]
| +--rw name-ref -> .. segment-list/name | +--rw name-ref -> /rt:routing/sr-policy:segment-routing/sr-policy/policy-attributes/segment-lists/segment-list/name
| +--rw weight? uint32 | +--rw weight? uint32
+--:(dynamic) +--:(dynamic)
+--rw sid-dataplane-type? sr-policy-types:dataplane-type +--rw sid-dataplane-type? sr-policy-types:dataplane-type
+--rw constraints
+--rw affinities
| +--rw exclude-any* string
| +--rw include-any* string
| +--rw include-all* string
+--rw bounds
| +--rw igp-metric-bound? uint32
| +--rw te-metric-bound? uint32
| +--rw latency-metric-bound? uint32
| +--rw segment-bound? uint32
+--rw segment-rules
| +--rw sid-algorithm? uint8
+--rw disjoint-path
+--rw group-id? uint32
+--rw disjointness-type? identityref
+--rw subgroup-id? uint32
Figure 2: SR Policy - Config Tree Figure 2: SR Policy - Config Tree
Please take note of the following important points in the above Please take note of the following important points in the above
configuration model: configuration model:
o This model supports both MPLS and SRv6 dataplane for SR -- i.e. o This model supports both MPLS and SRv6 dataplane for SR -- i.e.
items like segments and BSID can be defined as MPLS label or SRv6 items like segments and BSID can be defined as MPLS label or SRv6
SIDs. SIDs.
o Specification of a segment supports all the types defined in SR o Specification of a segment supports all the types defined in SR
policy base specification document policy base specification document
o The above model supports explicit BSID specification on SR policy o The above model supports explicit BSID specification on SR policy
level as the main mode of specification. The model also allows level as the main mode of specification. The model also allows
explicit BSID per candidate-path as an if-feature capability that explicit BSID per candidate-path as an if-feature capability that
is optional for implementations is optional for implementations
o The above model will be extended in future revisions of this o The above model will be extended in future revisions of this
document to enhance items like attribute and control related to document to enhance constraints specification for dynamic type of
dynamic type of segment-list, candidate-path, and traffic steering candidate-path, as well as add traffic-steering controls.
etc.
4.2.2. State 4.2.2. State
As per NMDA model, the state related to configuration items specified As per NMDA model, the state related to configuration items specified
in earlier Section 4.2.1 can be retrieved from the same tree. This in earlier Section 4.2.1 can be retrieved from the same tree. This
section defines the other operational state items related to SR section defines the other operational state items related to SR
policy. policy.
In addition to configured state, the operational state corresponding In addition to configured state, the operational state corresponding
to the SR policy includes: to the SR policy includes:
skipping to change at page 10, line 32 skipping to change at page 11, line 4
o Per candidate-path info such as: o Per candidate-path info such as:
* Whether candidate-path is the best candidate-path * Whether candidate-path is the best candidate-path
* In case of non-best, the reason for such non-selection * In case of non-best, the reason for such non-selection
* Type of candidate-path - explicit or dynamic * Type of candidate-path - explicit or dynamic
* Per segment-list information - such as validity of the segment- * Per segment-list information - such as validity of the segment-
list, as well as forwarding state for a valid segment-list. list, as well as forwarding state for a valid segment-list.
The forwarding state is represented in terms of per forwarding The forwarding state is represented in terms of per forwarding
path info that includes nexthop address, outgoing interface, path info that includes nexthop address, outgoing interface,
protection information, and encapsulation (label stack or SRv6 protection information, and encapsulation (label stack or SRv6
SID stack) etc. SID stack) etc.
Following is a simplified graphical representation of the data model Following is a simplified graphical representation of the data model
for the SR policy operational state: for the SR policy (derived) operational state:
module: ietf-sr-policy module: ietf-sr-policy
augment /rt:routing: augment /rt:routing:
+--rw segment-routing +--rw segment-routing
+--rw sr-policy +--rw sr-policy
+--rw policies +--rw policies
+--rw policy* [color endpoint] +--rw policy* [color endpoint]
+--rw color uint32 +--rw color uint32
+--rw endpoint inet:ip-address +--rw endpoint inet:ip-address
+--ro oper-state? sr-policy-types:policy-oper-state +--ro oper-state? sr-policy-types:policy-oper-state
skipping to change at page 11, line 13 skipping to change at page 11, line 34
+--ro down-time? yang:date-and-time +--ro down-time? yang:date-and-time
+--rw binding-sid +--rw binding-sid
| +--ro alloc-mode? sr-policy-types:binding-sid-alloc-mode | +--ro alloc-mode? sr-policy-types:binding-sid-alloc-mode
| +--ro allocated-sid? sr-policy-types:sid-value-type | +--ro allocated-sid? sr-policy-types:sid-value-type
| +--ro oper-state? sr-policy-types:binding-sid-oper-state | +--ro oper-state? sr-policy-types:binding-sid-oper-state
+--ro counters +--ro counters
| +--ro pkts? yang:counter64 | +--ro pkts? yang:counter64
| +--ro octets? yang:counter64 | +--ro octets? yang:counter64
+--rw candidate-paths +--rw candidate-paths
+--rw candidate-path* [protocol-origin originator discriminator] +--rw candidate-path* [protocol-origin originator discriminator]
+--rw protocol-origin sr-policy-types:protocol-origin-type +--rw protocol-origin sr-policy-types:protocol-origin-type
+--rw originator string +--rw originator string
+--rw discriminator uint32 +--rw discriminator uint32
+--ro is-best-candidate-path? boolean +--ro is-best-candidate-path? boolean
+--ro non-selection-reason? identityref +--ro non-selection-reason? identityref
+--rw (type)? +--ro is-valid? boolean
+--:(explicit) +--ro forwarding-paths
| +--rw segment-lists +--ro forwarding-path* [path-id]
| +--rw segment-list* [name-ref] +--ro path-id uint8
| +--rw name-ref -> .. segment-list/name +--ro next-hop-address? inet:ip-address
| +--ro is-valid? boolean +--ro next-hop-table-id? uint32
| +--ro forwarding-paths +--ro outgoing-interface? if:interface-ref
| +--ro forwarding-path* [path-id] +--ro outgoing-sids
| +--ro path-id uint8 | +--ro (dataplanetype)?
| +--ro next-hop-address? inet:ip-address | +--:(mpls)
| +--ro next-hop-table-id? uint32 | | +--ro labels* [label]
| +--ro outgoing-interface? if:interface-ref | | +--ro label rt-types:mpls-label
| +--ro outgoing-sids | +--:(srv6)
| | +--ro (dataplanetype)? | +--ro sids* [sid]
| | +--:(mpls) | +--ro sid srv6-types:srv6-sid
| | | +--ro labels* [label] +--ro is-protected? boolean
| | | +--ro label rt-types:mpls-label +--ro is-pure-backup? boolean
| | +--:(srv6) +--ro backup-path-id? uint8
| | +--ro sids* [sid] +--ro weight? uint32
| | +--ro sid srv6-types:srv6-sid
| +--ro is-protected? boolean
| +--ro is-pure-backup? boolean
| +--ro backup-path-id? uint8
| +--ro weight? uint32
+--:(dynamic)
+--ro is-valid? boolean
+--ro forwarding-paths
+--ro forwarding-path* [path-id]
+--ro path-id uint8
+--ro next-hop-address? inet:ip-address
+--ro next-hop-table-id? uint32
+--ro outgoing-interface? if:interface-ref
+--ro outgoing-sids
| +--ro (dataplanetype)?
| +--:(mpls)
| | +--ro labels* [label]
| | +--ro label rt-types:mpls-label
| +--:(srv6)
| +--ro sids* [sid]
| +--ro sid srv6-types:srv6-sid
+--ro is-protected? boolean
+--ro is-pure-backup? boolean
+--ro backup-path-id? uint8
+--ro weight? uint32
Figure 3: SR Policy - State Tree Figure 3: SR Policy - State Tree
4.2.3. Notification 4.2.3. Notification
This model defines a list of notifications to inform an operator of This model defines a list of notifications to inform an operator of
important events detected regarding an SR policy. These events important events detected regarding an SR policy. These events
include events related to: include events related to:
o policy status: policy operational state changes o Policy status: policy operational state changes
o Candidate-path active status and changes o Candidate-path active status and changes
o Explicit Binding SID collision/unavailability events o Explicit Binding SID collision/unavailability events
Following is a simplified graphical representation of the data model Following is a simplified graphical representation of the data model
for SR policy notifications: for SR policy notifications:
module: ietf-sr-policy module: ietf-sr-policy
notifications: notifications:
+---n sr-policy-oper-state-change-event +---n sr-policy-oper-state-change-event
| +--ro policy-name-ref? -> .. policy/name | +--ro policy-name-ref? -> /rt:routing/sr-policy:segment-routing/sr-policy/policies/policy/name
| +--ro policy-color-ref? -> .. policy/color | +--ro policy-color-ref? -> /rt:routing/sr-policy:segment-routing/sr-policy/policies/policy/color
| +--ro policy-endpoint-ref? -> .. policy/endpoint | +--ro policy-endpoint-ref? -> /rt:routing/sr-policy:segment-routing/sr-policy/policies/policy/endpoint
| +--ro policy-new-oper-state? sr-policy-types:policy-oper-state | +--ro policy-new-oper-state? sr-policy-types:policy-oper-state
| +--ro policy-down-reason? identityref | +--ro policy-down-reason? identityref
+---n sr-policy-candidate-path-change-event +---n sr-policy-candidate-path-change-event
| +--ro policy-name-ref? -> .. policy/name | +--ro policy-name-ref? -> /rt:routing/sr-policy:segment-routing/sr-policy/policies/policy/name
| +--ro policy-color-ref? -> .. policy/color | +--ro policy-color-ref? -> /rt:routing/sr-policy:segment-routing/sr-policy/policies/policy/color
| +--ro policy-endpoint-ref? -> .. policy/endpoint | +--ro policy-endpoint-ref? -> /rt:routing/sr-policy:segment-routing/sr-policy/policies/policy/endpoint
| +--ro existing-preference? uint32 | +--ro existing-preference? uint32
| +--ro new-preference? uint32 | +--ro new-preference? uint32
+---n sr-policy-binding-sid-unavailable-event +---n sr-policy-binding-sid-unavailable-event
| +--ro policy-name-ref? -> .. policy/name | +--ro policy-name-ref? -> /rt:routing/sr-policy:segment-routing/sr-policy/policies/policy/name
| +--ro policy-color-ref? -> .. policy/color | +--ro policy-color-ref? -> /rt:routing/sr-policy:segment-routing/sr-policy/policies/policy/color
| +--ro policy-endpoint-ref? -> .. policy/endpoint | +--ro policy-endpoint-ref? -> /rt:routing/sr-policy:segment-routing/sr-policy/policies/policy/endpoint
| +--ro policy-binding-sid-value-ref? -> .. policy/binding-sid/value | +--ro policy-binding-sid-value-ref? -> /rt:routing/sr-policy:segment-routing/sr-policy/policies/policy/binding-sid/value
| +--ro reason? identityref | +--ro reason? identityref
+---n sr-policy-candidate-path-binding-sid-mismatch-event +---n sr-policy-candidate-path-binding-sid-mismatch-event
+--ro policy-color-ref? -> .. policy/color +--ro policy-color-ref? -> /rt:routing/sr-policy:segment-routing/sr-policy/policies/policy/color
+--ro policy-endpoint-ref? -> .. policy/endpoint +--ro policy-endpoint-ref? -> /rt:routing/sr-policy:segment-routing/sr-policy/policies/policy/endpoint
+--ro existing-candidate-path-protocol-origin-ref? -> .. candidate-path/protocol-origin +--ro existing-candidate-path-protocol-origin-ref? -> /rt:routing/sr-policy:segment-routing/sr-policy/policies/policy/candidate-paths/candidate-path/protocol-origin
+--ro existing-candidate-path-preference-ref? -> .. candidate-path/preference +--ro existing-candidate-path-preference-ref? -> /rt:routing/sr-policy:segment-routing/sr-policy/policies/policy/candidate-paths/candidate-path/preference
+--ro existing-candidate-path-binding-sid-dataplane-ref? -> .. candidate-path/binding-sid/dataplane +--ro existing-candidate-path-binding-sid-dataplane-ref? -> /rt:routing/sr-policy:segment-routing/sr-policy/policies/policy/candidate-paths/candidate-path/binding-sid/dataplane
+--ro existing-candidate-path-binding-sid-value-ref? -> .. candidate-path/binding-sid/value +--ro existing-candidate-path-binding-sid-value-ref? -> /rt:routing/sr-policy:segment-routing/sr-policy/policies/policy/candidate-paths/candidate-path/binding-sid/value
+--ro conflicting-candidate-path-protocol-origin? uint8 +--ro conflicting-candidate-path-protocol-origin? uint8
+--ro conflicting-candidate-path-preference? uint32 +--ro conflicting-candidate-path-preference? uint32
+--ro conflicting-candidate-path-binding-sid-dataplane? sr-policy-types:dataplane-type +--ro conflicting-candidate-path-binding-sid-dataplane? sr-policy-types:dataplane-type
+--ro conflicting-candidate-path-binding-sid-value? sr-policy-types:sid-value-type +--ro conflicting-candidate-path-binding-sid-value? sr-policy-types:sid-value-type
Figure 4: SR Policy - Notification Tree Figure 4: SR Policy - Notification Tree
5. Pending Items 5. Pending Items
Following are the items that will be addressed in future revisions of Following are the items that will be addressed in future revisions of
this document: this document:
o Configuration and Specification of: o Configuration and Specification of:
* Link Attributes
* Dynamic type of candidate-path (optimization objectives and
constraints)
* Traffic steering over SR policy * Traffic steering over SR policy
* ODN templates * ODN templates
* Spray policy * Spray policy
o Executables (RPC actions) o Executables (RPC actions)
o Re-use and leverage common constructs from TE YANG specification.
6. YANG Specification 6. YANG Specification
Following are actual YANG definition for the modules defined earlier Following are actual YANG definition for the modules defined earlier
in the document. in the document.
6.1. Types 6.1. Types
<CODE BEGINS> file "ietf-sr-policy-types@2018-07-01.yang" --> <CODE BEGINS> file "ietf-sr-policy-types@2019-07-08.yang" -->
module ietf-sr-policy-types { module ietf-sr-policy-types {
namespace "urn:ietf:params:xml:ns:yang:ietf-sr-policy"; namespace "urn:ietf:params:xml:ns:yang:ietf-sr-policy-types";
prefix "ietf-sr-policy-types"; prefix "sr-policy-types";
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix "inet";
} }
import ietf-routing-types { import ietf-routing-types {
prefix "rt-types"; prefix "rt-types";
} }
import ietf-srv6-types { import ietf-srv6-types {
skipping to change at page 14, line 41 skipping to change at page 14, line 40
import ietf-srv6-types { import ietf-srv6-types {
prefix "srv6-types"; prefix "srv6-types";
} }
organization "IETF SPRING Working Group"; organization "IETF SPRING Working Group";
contact contact
"WG Web: <http://tools.ietf.org/wg/spring/> "WG Web: <http://tools.ietf.org/wg/spring/>
WG List: <mailto:spring@ietf.org> WG List: <mailto:spring@ietf.org>
Editor: Kamran Raza Editor: Kamran Raza
<mailto:skraza@cisco.com> <mailto:skraza@cisco.com>
Editor: Zhuang Shunwan Editor: Zhuang Shunwan
<mailto:zhuangshunwa@huawei.com> <mailto:zhuangshunwa@huawei.com>
Editor: Daniel Voyer Editor: Daniel Voyer
<mailto:daniel.voyer@bell.ca> <mailto:daniel.voyer@bell.ca>
Editor: Muhammad Durrani Editor: Muhammad Durrani
<mailto:mdurrani@equinix.com> <mailto:mdurrani@equinix.com>
Editor: Satoru Matsushima Editor: Satoru Matsushima
<mailto:satoru.matsushima@g.softbank.co.jp> <mailto:satoru.matsushima@g.softbank.co.jp>
"; ";
description description
"This YANG module defines the essential types for the management "This YANG module defines the essential types for the management
of SR policy module. of SR policy module.
Copyright (c) 2019 IETF Trust and the persons identified as
Copyright (c) 2018 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(http://trustee.ietf.org/license-info)."; (http://trustee.ietf.org/license-info).";
revision "2019-07-08" {
description
"Dynamic TE candidate-path support";
reference
"draft-ietf-spring-segment-routing-policy";
}
revision "2018-07-01" { revision "2018-07-01" {
description description
"Initial version"; "Initial version";
reference reference
"draft-ietf-spring-segment-routing-policy"; "draft-ietf-spring-segment-routing-policy";
} }
/* Identities */ /* Identities */
identity candidate-path-not-selected-reason { identity candidate-path-not-selected-reason {
description description
skipping to change at page 17, line 41 skipping to change at page 17, line 37
} }
identity binding-sid-rewrite-error { identity binding-sid-rewrite-error {
base binding-sid-unavailable-reason; base binding-sid-unavailable-reason;
description "Binding sid forwarding rewrite error"; description "Binding sid forwarding rewrite error";
} }
identity binding-sid-outside-srlb-range { identity binding-sid-outside-srlb-range {
base binding-sid-unavailable-reason; base binding-sid-unavailable-reason;
description "Binding sid outside SRLB range"; description "Binding sid outside SRLB range";
} }
identity path-disjointness {
description
"Base identity for the type of path disjointness computation";
}
identity path-disjointness-link {
base path-disjointness;
description "The computed path is link-disjoint with the existing path";
}
identity path-disjointness-node {
base path-disjointness;
description "The computed path is node-disjoint with the existing path";
}
identity path-disjointness-srlg {
base path-disjointness;
description "The computed path is srlg-disjoint with the existing path";
}
identity path-disjointness-srlg-node {
base path-disjointness;
description "The computed path is node and srlg disjoint with the existing path";
}
/* Typdefs */ /* Typdefs */
typedef sid-value-type { typedef sid-value-type {
type union { type union {
type rt-types:mpls-label; type rt-types:mpls-label;
type srv6-types:srv6-sid; type srv6-types:srv6-sid;
} }
description "The SID value type"; description "The SID value type";
} }
typedef binding-sid-oper-state { typedef binding-sid-oper-state {
skipping to change at page 21, line 25 skipping to change at page 21, line 44
} }
enum fallback-dynamic { enum fallback-dynamic {
value 2; value 2;
description description
"Explicit Binding SID falls back to dynamic in "Explicit Binding SID falls back to dynamic in
case explicit label is not available."; case explicit label is not available.";
} }
} }
description "Explicit binding sid rule types"; description "Explicit binding sid rule types";
} }
} } // module
<CODE ENDS> <CODE ENDS>
Figure 5: ietf-sr-policy-types.yang Figure 5: ietf-sr-policy-types.yang
6.2. SR Policy 6.2. SR Policy
<CODE BEGINS> file "ietf-sr-policy@2018-07-01.yang" --> <CODE BEGINS> file "ietf-sr-policy@2019-07-08.yang" -->
module ietf-sr-policy { module ietf-sr-policy {
namespace "urn:ietf:params:xml:ns:yang:ietf-sr-policy"; namespace "urn:ietf:params:xml:ns:yang:ietf-sr-policy";
prefix "ietf-sr-policy"; prefix "sr-policy";
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix "inet";
} }
import ietf-interfaces { import ietf-interfaces {
prefix if; prefix if;
} }
import ietf-routing { import ietf-routing {
prefix "rt"; prefix "rt";
} }
import ietf-routing-types { import ietf-routing-types {
prefix "rt-types"; prefix "rt-types";
} }
import ietf-yang-types { import ietf-yang-types {
prefix "yang"; prefix "yang";
skipping to change at page 22, line 50 skipping to change at page 23, line 22
<mailto:mdurrani@equinix.com> <mailto:mdurrani@equinix.com>
Editor: Satoru Matsushima Editor: Satoru Matsushima
<mailto:satoru.matsushima@g.softbank.co.jp> <mailto:satoru.matsushima@g.softbank.co.jp>
"; ";
description description
"This module contains a collection of YANG definitions "This module contains a collection of YANG definitions
for SR policy module. for SR policy module.
Copyright (c) 2018 IETF Trust and the persons identified as Copyright (c) 2019 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(http://trustee.ietf.org/license-info)."; (http://trustee.ietf.org/license-info).";
revision "2019-07-08" {
description
"Dynamic TE candidate-path support";
reference
"draft-ietf-spring-segment-routing-policy";
}
revision "2018-07-01" { revision "2018-07-01" {
description description
"Initial version"; "Initial version";
reference reference
"draft-ietf-spring-segment-routing-policy"; "draft-ietf-spring-segment-routing-policy";
} }
grouping segment_config { grouping segment_config {
description "Segment properties grouping"; description "Segment properties grouping";
leaf index { leaf index {
skipping to change at page 27, line 11 skipping to change at page 27, line 38
} }
grouping policy-attributes { grouping policy-attributes {
description description
"Grouping containing attributes applicable to all SR policies"; "Grouping containing attributes applicable to all SR policies";
container policy-attributes { container policy-attributes {
description description
"Attributes applicable to all SR policies"; "Attributes applicable to all SR policies";
uses affinity-mapping;
uses segment-lists; uses segment-lists;
uses explicit-binding-sid-rules; uses explicit-binding-sid-rules;
} }
} }
grouping segment-lists { grouping segment-lists {
description description
"Segment lists grouping"; "Segment lists grouping";
container segment-lists { container segment-lists {
description "Segment-lists properties"; description "Segment-lists properties";
skipping to change at page 30, line 48 skipping to change at page 31, line 26
leaf backup-path-id { leaf backup-path-id {
type uint8; type uint8;
description "Backup path id"; description "Backup path id";
} }
leaf weight { leaf weight {
type uint32; type uint32;
description "Path's weight for W-ECMP balancing"; description "Path's weight for W-ECMP balancing";
} }
} }
grouping cpath-cmn-properties {
description
"Common properties of the candidate path";
leaf is-valid {
type boolean;
config false;
description
"True if the segment-list is valid, False otherwise";
}
container forwarding-paths {
config false;
description
"Forwarding state of paths";
list forwarding-path {
key "path-id";
description "Forwarding path";
uses path-forwarding_state;
}
}
}
grouping explicit-path-properties { grouping explicit-path-properties {
description description
"Explicit path properties of the candidate path"; "Explicit path properties of the candidate path";
container segment-lists { container segment-lists {
description description
"Path segment list(s) properties"; "Path segment list(s) properties";
list segment-list { list segment-list {
key "name-ref"; key "name-ref";
description "SR policy candidate path segment lists"; description "SR policy candidate path segment lists";
leaf name-ref { leaf name-ref {
type leafref { type leafref {
path "/rt:routing/ietf-sr-policy:segment-routing/ietf-sr-policy:sr-policy/ietf-sr-policy:policy-attributes/ietf-sr-policy:segment-lists/ietf-sr-policy:segment-list/ietf-sr-policy:name"; path "/rt:routing/sr-policy:segment-routing/sr-policy:sr-policy/sr-policy:policy-attributes/sr-policy:segment-lists/sr-policy:segment-list/sr-policy:name";
} }
description "Reference to segment-list name"; description "Reference to segment-list name";
} }
leaf weight { leaf weight {
type uint32; type uint32;
description "Segment-list weighted loadshare"; description "Segment-list weighted loadshare";
} }
leaf is-valid { }
type boolean; }
config false; }
grouping affinity-mapping {
description "Affinity-map grouping";
container affinity-map {
description
"Mapping of affinity names to bit position";
list affinity {
key "name";
unique "bit-position";
leaf name {
type string;
description description
"True if the segment-list is valid, False otherwise"; "Name of the affinity";
} }
container forwarding-paths { leaf bit-position {
config false; type uint16;
description description
"Forwarding state of paths"; "The affinity entry in this list is mapped to the this bit-position in the
list forwarding-path { affinity bitmap";
key "path-id";
description "Forwarding path";
uses path-forwarding_state;
}
} }
description "Affinity";
} }
} }
} }
grouping dynamic-path-properties { grouping dynamic-path-properties {
description description
"Dynamic path properties of the candidate path"; "Dynamic path properties of the candidate path";
leaf sid-dataplane-type { leaf sid-dataplane-type {
type sr-policy-types:dataplane-type; type sr-policy-types:dataplane-type;
description description
"The dataplane type for the sid"; "The dataplane type for the sid";
} }
leaf is-valid {
type boolean; container constraints {
config false; description "Constraints for the dynamic path computation";
description container affinities {
"True if the segment-list is valid, False otherwise"; description "Affinity constraints on the computed dynamic path";
} leaf-list exclude-any {
container forwarding-paths { type string;
config false; description
description "The link is excluded if it has any of these affinities.";
"Forwarding state of paths"; }
list forwarding-path { leaf-list include-any {
key "path-id"; type string;
description "Forwarding path"; description
uses path-forwarding_state; "The link is accepted if it has any of these affinities";
} }
leaf-list include-all {
type string;
description
"The link is accepted if it has all these affinities";
}
}
container bounds {
description "Upper-bound constraints on the computed dynamic path";
leaf igp-metric-bound {
type uint32;
description
"Path is invalid if its IGP metric exceeds this value";
}
leaf te-metric-bound {
type uint32;
description
"Path is invalid if its TE metric exceeds this value";
}
leaf latency-metric-bound {
type uint32;
units "microsecond";
description
"Path is invalid if its latency exceeds this value";
}
leaf segment-bound {
type uint32;
description
"Path is invalid if it has more segments than this value";
}
}
container segment-rules {
description "Constraints on the segments to be used in the path";
leaf sid-algorithm {
type uint8 {
range "128..255";
}
description
"The prefix-sid algorithm to be used in path calculation";
}
}
container disjoint-path {
description "Path disjointness constraints";
leaf group-id {
type uint32 { range "1..65535"; }
description "";
}
leaf disjointness-type {
type identityref { base sr-policy-types:path-disjointness; }
description
"Type of disjointness computation used to find the path";
}
leaf subgroup-id {
type uint32 { range "1..65535"; }
description "";
}
}
} }
} }
grouping candidate-path_state { grouping candidate-path_state {
description description
"Candidate path state properties grouping"; "Candidate path state properties grouping";
leaf is-best-candidate-path { leaf is-best-candidate-path {
type boolean; type boolean;
default 'false'; default 'false';
config false; config false;
skipping to change at page 35, line 20 skipping to change at page 37, line 39
leaf description { leaf description {
type string; type string;
description "Candidate path description"; description "Candidate path description";
} }
container binding-sid { container binding-sid {
if-feature capability-candidate-path-binding-sid; if-feature capability-candidate-path-binding-sid;
description description
"Binding segment ID"; "Binding segment ID";
uses binding-sid_config; uses binding-sid_config;
} }
uses candidate-path_state;
uses candidate-path-type; uses candidate-path-type;
uses candidate-path_state;
uses cpath-cmn-properties;
} }
} }
} }
grouping policies { grouping policies {
description "SR policy grouping"; description "SR policy grouping";
container policies { container policies {
description "SR Policy container"; description "SR Policy container";
list policy { list policy {
key "color endpoint"; key "color endpoint";
unique "name"; unique "name";
description "SR Policy properties"; description "SR Policy properties";
leaf color { leaf color {
type uint32 { type uint32 {
range "1..4294967295"; range "1..4294967295";
} }
description "Color associated with the policy"; description "Color associated with the policy";
skipping to change at page 37, line 22 skipping to change at page 39, line 43
} }
/* Notifications */ /* Notifications */
notification sr-policy-oper-state-change-event { notification sr-policy-oper-state-change-event {
description description
"Notification event when the operational state of the SR policy changes"; "Notification event when the operational state of the SR policy changes";
leaf policy-name-ref { leaf policy-name-ref {
type leafref { type leafref {
path "/rt:routing/ietf-sr-policy:segment-routing/ietf-sr-policy:sr-policy/ietf-sr-policy:policies/ietf-sr-policy:policy/ietf-sr-policy:name"; path "/rt:routing/sr-policy:segment-routing/sr-policy:sr-policy/sr-policy:policies/sr-policy:policy/sr-policy:name";
} }
description "Reference to sr-policy name"; description "Reference to sr-policy name";
} }
leaf policy-color-ref { leaf policy-color-ref {
type leafref { type leafref {
path "/rt:routing/ietf-sr-policy:segment-routing/ietf-sr-policy:sr-policy/ietf-sr-policy:policies/ietf-sr-policy:policy/ietf-sr-policy:color"; path "/rt:routing/sr-policy:segment-routing/sr-policy:sr-policy/sr-policy:policies/sr-policy:policy/sr-policy:color";
} }
description "Reference to sr-policy color"; description "Reference to sr-policy color";
} }
leaf policy-endpoint-ref { leaf policy-endpoint-ref {
type leafref { type leafref {
path "/rt:routing/ietf-sr-policy:segment-routing/ietf-sr-policy:sr-policy/ietf-sr-policy:policies/ietf-sr-policy:policy/ietf-sr-policy:endpoint"; path "/rt:routing/sr-policy:segment-routing/sr-policy:sr-policy/sr-policy:policies/sr-policy:policy/sr-policy:endpoint";
} }
description "Reference to sr-policy endpoint"; description "Reference to sr-policy endpoint";
} }
leaf policy-new-oper-state { leaf policy-new-oper-state {
type sr-policy-types:policy-oper-state; type sr-policy-types:policy-oper-state;
description "New operational state of the SR policy"; description "New operational state of the SR policy";
} }
leaf policy-down-reason { leaf policy-down-reason {
skipping to change at page 38, line 4 skipping to change at page 40, line 25
type sr-policy-types:policy-oper-state; type sr-policy-types:policy-oper-state;
description "New operational state of the SR policy"; description "New operational state of the SR policy";
} }
leaf policy-down-reason { leaf policy-down-reason {
type identityref { type identityref {
base sr-policy-types:policy-down-reason; base sr-policy-types:policy-down-reason;
} }
description "Down reason if the SR policy's new operational state is down"; description "Down reason if the SR policy's new operational state is down";
} }
} }
notification sr-policy-candidate-path-change-event { notification sr-policy-candidate-path-change-event {
description description
"Notification event when candidate path changes for SR policy"; "Notification event when candidate path changes for SR policy";
leaf policy-name-ref { leaf policy-name-ref {
type leafref { type leafref {
path "/rt:routing/ietf-sr-policy:segment-routing/ietf-sr-policy:sr-policy/ietf-sr-policy:policies/ietf-sr-policy:policy/ietf-sr-policy:name"; path "/rt:routing/sr-policy:segment-routing/sr-policy:sr-policy/sr-policy:policies/sr-policy:policy/sr-policy:name";
} }
description "Reference to sr-policy name"; description "Reference to sr-policy name";
} }
leaf policy-color-ref { leaf policy-color-ref {
type leafref { type leafref {
path "/rt:routing/ietf-sr-policy:segment-routing/ietf-sr-policy:sr-policy/ietf-sr-policy:policies/ietf-sr-policy:policy/ietf-sr-policy:color"; path "/rt:routing/sr-policy:segment-routing/sr-policy:sr-policy/sr-policy:policies/sr-policy:policy/sr-policy:color";
} }
description "Reference to sr-policy color"; description "Reference to sr-policy color";
} }
leaf policy-endpoint-ref { leaf policy-endpoint-ref {
type leafref { type leafref {
path "/rt:routing/ietf-sr-policy:segment-routing/ietf-sr-policy:sr-policy/ietf-sr-policy:policies/ietf-sr-policy:policy/ietf-sr-policy:endpoint"; path "/rt:routing/sr-policy:segment-routing/sr-policy:sr-policy/sr-policy:policies/sr-policy:policy/sr-policy:endpoint";
} }
description "Reference to sr-policy endpoint"; description "Reference to sr-policy endpoint";
} }
leaf existing-preference { leaf existing-preference {
type uint32; type uint32;
description "Existing candidate path preference"; description "Existing candidate path preference";
} }
leaf new-preference { leaf new-preference {
skipping to change at page 38, line 49 skipping to change at page 41, line 20
description "New candidate path preference"; description "New candidate path preference";
} }
} }
notification sr-policy-binding-sid-unavailable-event { notification sr-policy-binding-sid-unavailable-event {
description description
"Notification event when the binding sid of sr-policy is unavailable"; "Notification event when the binding sid of sr-policy is unavailable";
leaf policy-name-ref { leaf policy-name-ref {
type leafref { type leafref {
path "/rt:routing/ietf-sr-policy:segment-routing/ietf-sr-policy:sr-policy/ietf-sr-policy:policies/ietf-sr-policy:policy/ietf-sr-policy:name"; path "/rt:routing/sr-policy:segment-routing/sr-policy:sr-policy/sr-policy:policies/sr-policy:policy/sr-policy:name";
} }
description "Reference to sr-policy name"; description "Reference to sr-policy name";
} }
leaf policy-color-ref { leaf policy-color-ref {
type leafref { type leafref {
path "/rt:routing/ietf-sr-policy:segment-routing/ietf-sr-policy:sr-policy/ietf-sr-policy:policies/ietf-sr-policy:policy/ietf-sr-policy:color"; path "/rt:routing/sr-policy:segment-routing/sr-policy:sr-policy/sr-policy:policies/sr-policy:policy/sr-policy:color";
} }
description "Reference to sr-policy color"; description "Reference to sr-policy color";
} }
leaf policy-endpoint-ref { leaf policy-endpoint-ref {
type leafref { type leafref {
path "/rt:routing/ietf-sr-policy:segment-routing/ietf-sr-policy:sr-policy/ietf-sr-policy:policies/ietf-sr-policy:policy/ietf-sr-policy:endpoint"; path "/rt:routing/sr-policy:segment-routing/sr-policy:sr-policy/sr-policy:policies/sr-policy:policy/sr-policy:endpoint";
} }
description "Reference to sr-policy endpoint"; description "Reference to sr-policy endpoint";
} }
leaf policy-binding-sid-value-ref { leaf policy-binding-sid-value-ref {
type leafref { type leafref {
path "/rt:routing/ietf-sr-policy:segment-routing/ietf-sr-policy:sr-policy/ietf-sr-policy:policies/ietf-sr-policy:policy/ietf-sr-policy:binding-sid/ietf-sr-policy:value"; path "/rt:routing/sr-policy:segment-routing/sr-policy:sr-policy/sr-policy:policies/sr-policy:policy/sr-policy:binding-sid/sr-policy:value";
} }
description "Reference to sr-policy binding-sid value"; description "Reference to sr-policy binding-sid value";
} }
leaf reason { leaf reason {
type identityref { type identityref {
base sr-policy-types:binding-sid-unavailable-reason; base sr-policy-types:binding-sid-unavailable-reason;
} }
description description
"Reason why the binding sid is unavailable"; "Reason why the binding sid is unavailable";
skipping to change at page 39, line 41 skipping to change at page 42, line 15
} }
} }
notification sr-policy-candidate-path-binding-sid-mismatch-event { notification sr-policy-candidate-path-binding-sid-mismatch-event {
description description
"Notification event when binding sid of requested candidate path "Notification event when binding sid of requested candidate path
is different from the binding sid of the existing candidate path"; is different from the binding sid of the existing candidate path";
leaf policy-color-ref { leaf policy-color-ref {
type leafref { type leafref {
path "/rt:routing/ietf-sr-policy:segment-routing/ietf-sr-policy:sr-policy/ietf-sr-policy:policies/ietf-sr-policy:policy/ietf-sr-policy:color"; path "/rt:routing/sr-policy:segment-routing/sr-policy:sr-policy/sr-policy:policies/sr-policy:policy/sr-policy:color";
} }
description "Reference to sr-policy color"; description "Reference to sr-policy color";
} }
leaf policy-endpoint-ref { leaf policy-endpoint-ref {
type leafref { type leafref {
path "/rt:routing/ietf-sr-policy:segment-routing/ietf-sr-policy:sr-policy/ietf-sr-policy:policies/ietf-sr-policy:policy/ietf-sr-policy:endpoint"; path "/rt:routing/sr-policy:segment-routing/sr-policy:sr-policy/sr-policy:policies/sr-policy:policy/sr-policy:endpoint";
} }
description "Reference to sr-policy endpoint"; description "Reference to sr-policy endpoint";
} }
leaf existing-candidate-path-protocol-origin-ref { leaf existing-candidate-path-protocol-origin-ref {
type leafref { type leafref {
path "/rt:routing/ietf-sr-policy:segment-routing/ietf-sr-policy:sr-policy/ietf-sr-policy:policies/ietf-sr-policy:policy/ietf-sr-policy:candidate-paths/ietf-sr-policy:candidate-path/ietf-sr-policy:protocol-origin"; path "/rt:routing/sr-policy:segment-routing/sr-policy:sr-policy/sr-policy:policies/sr-policy:policy/sr-policy:candidate-paths/sr-policy:candidate-path/sr-policy:protocol-origin";
} }
description "Reference to existing candidate path protocol origin"; description "Reference to existing candidate path protocol origin";
} }
leaf existing-candidate-path-preference-ref { leaf existing-candidate-path-preference-ref {
type leafref { type leafref {
path "/rt:routing/ietf-sr-policy:segment-routing/ietf-sr-policy:sr-policy/ietf-sr-policy:policies/ietf-sr-policy:policy/ietf-sr-policy:candidate-paths/ietf-sr-policy:candidate-path/ietf-sr-policy:preference"; path "/rt:routing/sr-policy:segment-routing/sr-policy:sr-policy/sr-policy:policies/sr-policy:policy/sr-policy:candidate-paths/sr-policy:candidate-path/sr-policy:preference";
} }
description "Reference to existing candidate path preference"; description "Reference to existing candidate path preference";
} }
leaf existing-candidate-path-binding-sid-dataplane-ref { leaf existing-candidate-path-binding-sid-dataplane-ref {
type leafref { type leafref {
path "/rt:routing/ietf-sr-policy:segment-routing/ietf-sr-policy:sr-policy/ietf-sr-policy:policies/ietf-sr-policy:policy/ietf-sr-policy:candidate-paths/ietf-sr-policy:candidate-path/ietf-sr-policy:binding-sid/ietf-sr-policy:dataplane"; path "/rt:routing/sr-policy:segment-routing/sr-policy:sr-policy/sr-policy:policies/sr-policy:policy/sr-policy:candidate-paths/sr-policy:candidate-path/sr-policy:binding-sid/sr-policy:dataplane";
} }
description "Reference to existing candidate path binding sid dataplane type"; description "Reference to existing candidate path binding sid dataplane type";
} }
leaf existing-candidate-path-binding-sid-value-ref { leaf existing-candidate-path-binding-sid-value-ref {
type leafref { type leafref {
path "/rt:routing/ietf-sr-policy:segment-routing/ietf-sr-policy:sr-policy/ietf-sr-policy:policies/ietf-sr-policy:policy/ietf-sr-policy:candidate-paths/ietf-sr-policy:candidate-path/ietf-sr-policy:binding-sid/ietf-sr-policy:value"; path "/rt:routing/sr-policy:segment-routing/sr-policy:sr-policy/sr-policy:policies/sr-policy:policy/sr-policy:candidate-paths/sr-policy:candidate-path/sr-policy:binding-sid/sr-policy:value";
} }
description "Reference to existing candidate path binding sid value"; description "Reference to existing candidate path binding sid value";
} }
leaf conflicting-candidate-path-protocol-origin { leaf conflicting-candidate-path-protocol-origin {
type uint8; type uint8;
description "Conflicting candidate path protocol origin"; description "Conflicting candidate path protocol origin";
} }
leaf conflicting-candidate-path-preference { leaf conflicting-candidate-path-preference {
type uint32; type uint32;
description "Conflicting candidate path preference"; description "Conflicting candidate path preference";
skipping to change at page 41, line 4 skipping to change at page 43, line 27
leaf conflicting-candidate-path-binding-sid-dataplane { leaf conflicting-candidate-path-binding-sid-dataplane {
type sr-policy-types:dataplane-type; type sr-policy-types:dataplane-type;
description "Conflicting candidate path binding sid dataplane type"; description "Conflicting candidate path binding sid dataplane type";
} }
leaf conflicting-candidate-path-binding-sid-value { leaf conflicting-candidate-path-binding-sid-value {
type sr-policy-types:sid-value-type; type sr-policy-types:sid-value-type;
description "Conflicting candidate path binding sid value"; description "Conflicting candidate path binding sid value";
} }
} }
/* Features */ /* Features */
feature capability-candidate-path-binding-sid { feature capability-candidate-path-binding-sid {
description description
"This feature enables the capability of specifying binding-sid "This feature enables the capability of specifying binding-sid
for a candidate path."; for a candidate path.";
} }
} } // module
<CODE ENDS> <CODE ENDS>
Figure 6: ietf-sr-policy.yang Figure 6: ietf-sr-policy.yang
7. Security Considerations 7. Security Considerations
The configuration, state, and notification data defined using YANG The configuration, state, and notification data defined using YANG
data models in this document are likely to be accessed via the data models in this document are likely to be accessed via the
protocols such as NETCONF [RFC6241] etc. protocols such as NETCONF [RFC6241] etc.
skipping to change at page 43, line 32 skipping to change at page 46, line 6
July 2018, <https://www.rfc-editor.org/info/rfc8402>. July 2018, <https://www.rfc-editor.org/info/rfc8402>.
[RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of
Documents Containing YANG Data Models", BCP 216, RFC 8407, Documents Containing YANG Data Models", BCP 216, RFC 8407,
DOI 10.17487/RFC8407, October 2018, DOI 10.17487/RFC8407, October 2018,
<https://www.rfc-editor.org/info/rfc8407>. <https://www.rfc-editor.org/info/rfc8407>.
10.2. Informative References 10.2. Informative References
[I-D.ietf-idr-segment-routing-te-policy] [I-D.ietf-idr-segment-routing-te-policy]
Previdi, S., Filsfils, C., Jain, D., Mattes, P., Rosen, Previdi, S., Filsfils, C., Mattes, P., Rosen, E., Jain,
E., and S. Lin, "Advertising Segment Routing Policies in D., and S. Lin, "Advertising Segment Routing Policies in
BGP", draft-ietf-idr-segment-routing-te-policy-06 (work in BGP", draft-ietf-idr-segment-routing-te-policy-07 (work in
progress), May 2019. progress), July 2019.
Authors' Addresses Authors' Addresses
Kamran Raza (editor) Kamran Raza (editor)
Cisco Systems Cisco Systems
Email: skraza@cisco.com Email: skraza@cisco.com
Robert Sawaya Robert Sawaya
Cisco Systems Cisco Systems
Email: thjohns2@cisco.com Email: thjohns2@cisco.com
Zhuang Shunwan Zhuang Shunwan
Huawei Technologies Huawei Technologies
Email: zhuangshunwa@huawei.com Email: zhuangshunwa@huawei.com
Daniel Voyer Daniel Voyer
Bell Canada Bell Canada
Email: daniel.voyer@bell.ca Email: daniel.voyer@bell.ca
Muhammad Durrani Muhammad Durrani
Equinix Equinix
Email: mdurrani@equinix.com Email: mdurrani@equinix.com
Satoru Matsushima Satoru Matsushima
SoftBank SoftBank
Email: satoru.matsushima@g.softbank.co.jp Email: satoru.matsushima@g.softbank.co.jp
Vishnu Pavan Beeram
Juniper Networks
Email: vbeeram@juniper.net@g.softbank.co.jp
 End of changes. 99 change blocks. 
189 lines changed or deleted 314 lines changed or added

This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/