module openconfig-pf-srte { yang-version "1"; namespace "http://openconfig.net/yang/policy-forwarding/sr-te"; prefix "oc-pf-srte"; import openconfig-extensions { prefix "oc-ext"; } import openconfig-network-instance { prefix "oc-ni"; } import openconfig-mpls-types { prefix "oc-mplst"; } import openconfig-inet-types { prefix "oc-inet"; } import openconfig-segment-routing { prefix "oc-sr"; } organization "OpenConfig working group"; contact "OpenConfig Working group www.openconfig.net"; description "This module defines extensions to the OpenConfig policy forwarding module to support static segment routing traffic engineering policy definitions. Extensions are provided to match: - Ingress binding SIDs, such that traffic can be mapped based on an ingress label. - A colour community and endpoint combination, such that the routes can be resolved according to the policy forwarding entries that are to be installed. In addition, policy forwarding actions associated with next-hops are added to the model. The next-hop set to be forwarded to is augmented to cover a set of lists of segments. The most common application of such segment lists is to express stacks of MPLS labels which are used as SR segments. In addition, they may be used to expressed segments in the form of IPv6 addresses."; oc-ext:openconfig-version "0.1.0"; revision 2017-10-01 { description "Initial revision of the SR-TE policy SAFI model."; reference "0.1.0"; } grouping oc-pf-srte-match-top { description "Top-level grouping used for SR-TE policy match criteria within a policy forwarding rule."; container srte { description "Match criteria associated with Segment Routing Traffic Engineering policies."; container config { description "Configuration parameters associated with SR-TE policies."; uses oc-pf-srte-match-config; } container state { config false; description "Operational state parameters associated with SR-TE policies."; uses oc-pf-srte-match-config; } } } grouping oc-pf-srte-match-config { description "Configuration parameters specific to Segment Routing traffic Engineering."; leaf mpls-bsid { type oc-mplst:mpls-label; description "The Binding SID (BSID) to be matched expressed as an MPLS label. Packets that are ingress to the system with the top-most label matching the SID value specified in this leaf should be forwarded according to the policy. The top-most label (the specified Binding SID) must be popped from the label stack by the system."; } leaf srte-endpoint { type oc-inet:ip-address; description "When the policy forwarding rule is used for RIB resolution to a Segment Routing Traffic Engineering path, the policy is used when the required endpoint (which may be the protocol next-hop) matches the endpoint address specified in this leaf. When the leaf is set to all zeros (0.0.0.0 or ::), the endpoint acts as a wildcard in the policy resolution."; } leaf srte-color { type uint32; description "When the policy forwarding rule is used for RIB resolution to a specific Segment Routing Traffic Engineering path, the policy is used when the colour required in the policy (which may be specified based on the value of a BGP extended colour community) matches the value of this leaf. The colour being set to 0 indicates that the colour is a wildcard in the policy resolution."; } leaf srte-preference { type uint32; description "When there are multiple policy forwarding rules specified for a particular SR-TE endpoint. The preference is used to resolve between them. These rules may be learnt from a dynamic routing protocol, or interface to the device, or from other static entries configured on the system."; } } grouping oc-pf-srte-segment-list-top { description "Top-level grouping for specifying segment lists under a policy forwarding action."; container segment-lists { description "A list of SR-TE segment lists that should be applied as an action within this policy. Where a system selects the SR-TE policy to be used, the list of segment lists that is specified should be used as forwarding next-hops."; list segment-list { key "index"; description "An individual segment list within the list of segment lists used for SR-TE policies."; leaf index { type leafref { path "../config/index"; } description "Reference to the index leaf which act as a key to the segment-list list."; } container config { description "Configuration parameters for the SR-TE segment list."; uses oc-pf-srte-segment-list-config; } container state { config false; description "Operational state parameters relating to the SR-TE segment list."; uses oc-pf-srte-segment-list-config; } container sids { description "Surrounding container for the list of SIDs that makes up the segment list."; list sid { key "index"; description "List of SIDs that make up the segment list. The segment list is formed by ordering the set of SIDs that are specified by their index in ascending numerical order."; leaf index { type leafref { path "../config/index"; } description "Reference to the SID's index within the segment list which acts as the key of the list."; } container config { description "Configuration parameters relating to the SID within the segment list."; uses oc-pf-srte-segment-list-sid-config; } container state { config false; description "Operational state parameters relating to the SID within the segment list."; uses oc-pf-srte-segment-list-sid-config; } } } } } } grouping oc-pf-srte-segment-list-config { description "Configuration parameters relating to a segment list."; leaf index { type uint64; description "Unique integer identifying the segment list within the set of segment lists used for the SR-TE policy action."; } leaf weight { type uint32; description "The weight of the segment list within the set of segment lists specified for the policy. The traffic that is forwarded according to the policy is distributed across the set of paths such that each list receives weight/(sum of all weights) traffic."; } } grouping oc-pf-srte-segment-list-sid-config { description "Configuration parameters relating to a SID within an SR-TE segment list"; leaf index { type uint64; description "The index of the SID within the segment list. The segment list is applied by ordering the SID entries in ascending numerical order beginning at 0."; } leaf value { type oc-sr:sr-sid-type; description "The value of the SID that is to be used. Specified as an MPLS label or IPv6 address."; } leaf mpls-ttl { type uint8; default 0; description "The TTL to be set if the type of the SID is an MPLS label. If the value of the TTL is set to be 0, the value is picked by the local implementation."; } leaf mpls-tc { type uint8 { range "0..7"; } default 0; description "The value of the MPLS Traffic Class (TC) bits to be used if the value of the SID is an MPLS label. In the case that the value is set to 0, then the local implementation should choose the value."; } } augment "/oc-ni:network-instances/oc-ni:network-instance/oc-ni:policy-forwarding/" + "oc-ni:policies/oc-ni:policy/oc-ni:rules/oc-ni:rule" { description "Add the SR-TE specific policy forwarding match criteria to the policy forwarding model."; uses oc-pf-srte-match-top; } augment "/oc-ni:network-instances/oc-ni:network-instance/oc-ni:policy-forwarding/" + "oc-ni:policies/oc-ni:policy/oc-ni:rules/oc-ni:rule/oc-ni:action" { description "Add the SR-TE specific policy forwarding actions to the policy forwarding model."; uses oc-pf-srte-segment-list-top; } }