--- 1/draft-ietf-teas-yang-te-types-01.txt 2018-12-23 22:13:09.660031074 -0800 +++ 2/draft-ietf-teas-yang-te-types-02.txt 2018-12-23 22:13:09.772033770 -0800 @@ -1,24 +1,24 @@ TEAS Working Group T. Saad Internet-Draft R. Gandhi Intended status: Standards Track Cisco Systems Inc -Expires: April 10, 2019 X. Liu +Expires: June 24, 2019 X. Liu Volta Networks V. Beeram Juniper Networks I. Bryskin Huawei Technologies - October 07, 2018 + December 21, 2018 Traffic Engineering Common YANG Types - draft-ietf-teas-yang-te-types-01 + draft-ietf-teas-yang-te-types-02 Abstract This document defines a collection of common data types and groupings in YANG data modeling language. These derived common types and groupings are intended to be imported by modules that model Traffic Engineering (TE) configuration and state capabilities. Status of This Memo @@ -28,21 +28,21 @@ Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at https://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." - This Internet-Draft will expire on April 10, 2019. + This Internet-Draft will expire on June 24, 2019. Copyright Notice Copyright (c) 2018 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents @@ -50,34 +50,34 @@ to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 2 1.2. Prefixes in Data Node Names . . . . . . . . . . . . . . . 3 - 2. Abbreviations . . . . . . . . . . . . . . . . . . . . . . . . 3 + 2. Acronyms and Abbreviations . . . . . . . . . . . . . . . . . 3 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.1. TE Types Module . . . . . . . . . . . . . . . . . . . . . 4 3.2. MPLS TE Types Module . . . . . . . . . . . . . . . . . . 7 4. IETF TE Types YANG Module . . . . . . . . . . . . . . . . . . 8 - 5. IETF MPLS TE Types YANG Module . . . . . . . . . . . . . . . 57 - 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 60 - 7. Security Considerations . . . . . . . . . . . . . . . . . . . 60 - 8. Acknowledgement . . . . . . . . . . . . . . . . . . . . . . . 61 - 9. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 61 - 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 61 - 10.1. Normative References . . . . . . . . . . . . . . . . . . 61 - 10.2. Informative References . . . . . . . . . . . . . . . . . 65 - Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 65 + 5. IETF MPLS TE Types YANG Module . . . . . . . . . . . . . . . 64 + 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 69 + 7. Security Considerations . . . . . . . . . . . . . . . . . . . 69 + 8. Acknowledgement . . . . . . . . . . . . . . . . . . . . . . . 69 + 9. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 70 + 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 70 + 10.1. Normative References . . . . . . . . . . . . . . . . . . 70 + 10.2. Informative References . . . . . . . . . . . . . . . . . 74 + Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 74 1. Introduction YANG [RFC6020] and [RFC7950] is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols such as NETCONF [RFC6241]. The YANG language supports a small set of built-in data types and provides mechanisms to derive other types from the built-in types. @@ -110,21 +110,21 @@ +---------------+--------------------+---------------+ | yang | ietf-yang-types | [RFC6991] | | inet | ietf-inet-types | [RFC6991] | | rt-types | ietf-routing-types | [RFC8294] | | te-types | ietf-te-types | this document | | te-mpls-types | ietf-te-mpls-types | this document | +---------------+--------------------+---------------+ Table 1: Prefixes and corresponding YANG modules -2. Abbreviations +2. Acronyms and Abbreviations GMPLS: Generalized Multiprotocol Label Switching LSP: Label Switched Path LSR: Label Switching Router LER: Label Edge Router MPLS: Multiprotocol Label Switching @@ -333,40 +333,48 @@ A base YANG identity for supported Diffserv-TE bandwidth constraint models as defined in [RFC4125], [RFC4126] and [RFC4127]. te-bandwidth-requested-type: An enumerated type for the different options to request bandwidth for a specific tunnel. + performance-metric-container-packet: + + A YANG grouping for the augmentation of packet specific metrics to + the generic performance metrics grouping parameters. + 4. IETF TE Types YANG Module - file "ietf-te-types@2018-10-08.yang" + file "ietf-te-types@2018-12-21.yang" module ietf-te-types { - + yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-te-types"; /* Replace with IANA when assigned */ prefix "te-types"; import ietf-inet-types { prefix inet; + reference "RFC6991: Common YANG Data Types"; } import ietf-yang-types { prefix "yang"; + reference "RFC6991: Common YANG Data Types"; } import ietf-routing-types { prefix "rt-types"; + reference "RFC6991: Common YANG Data Types"; } organization "IETF Traffic Engineering Architecture and Signaling (TEAS) Working Group"; contact "WG Web: WG List: @@ -391,31 +399,64 @@ Editor: Xufeng Liu Editor: Igor Bryskin Editor: Young Lee "; description - "This module contains a collection of generally - useful TE specific YANG data type definitions."; + "This module contains a collection of generally useful TE + specific YANG data type definitions. The model fully conforms + to the Network Management Datastore Architecture (NMDA). - revision "2018-10-08" { + Copyright (c) 2018 IETF Trust and the persons + identified as authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + This version of this YANG module is part of RFC XXXX; see + the RFC itself for full legal notices."; + + // RFC Ed.: replace XXXX with actual RFC number and remove this + // note. + + // RFC Ed.: update the date below with the date of RFC publication + // and remove this note. + + revision "2018-12-21" { description "Latest revision of TE types"; - reference "RFC3209"; + reference + "RFC XXXX: A YANG Data Model for Common Traffic Engineering + Types"; } /** * Typedefs */ + typedef path-attribute-flags { + type union { + type identityref { + base session-attributes-flags; + } + type identityref { + base lsp-attributes-flags; + } + } + description "Path attributes flags type"; + } + typedef te-bandwidth { type string { pattern '0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|' + '1(\.([\da-fA-F]{0,5}[02468aAcCeE]?)?)?[pP](\+)?(12[0-7]|' + '1[01]\d|0?\d?\d)?)|0[xX][\da-fA-F]{1,8}|\d+' + '(,(0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|' + '1(\.([\da-fA-F]{0,5}[02468aAcCeE]?)?)?[pP](\+)?(12[0-7]|' + '1[01]\d|0?\d?\d)?)|0[xX][\da-fA-F]{1,8}|\d+))*'; } @@ -423,23 +464,24 @@ "This is the generic bandwidth type that is a string containing a list of numbers separated by commas, with each of these number can be non-negative decimal, hex integer, or hex float: (dec | hex | float)[*(','(dec | hex | float))] For packet switching type, a float number is used, such as 0x1p10. For OTN switching type, a list of integers can be used, such as '0,2,3,1', indicating 2 odu0's and 1 odu3. For DWDM, a list of pairs of slot number and width can be used, such as '0, 2, 3, 3', indicating a frequency slot 0 with - slot width 2 and a frequency slot 3 with slot width 3."; + slot width 2 and a frequency slot 3 with slot width 3. + Canonically, the string is represented as all lowercase and in + hex where the prefix '0x' precedes the hex number"; } // te-bandwidth - typedef te-ds-class { type uint8 { range "0..7"; } description "The Differentiated Class-Type of traffic."; reference "RFC4124: section-4.3.1"; } typedef te-link-direction { @@ -437,56 +479,56 @@ type uint8 { range "0..7"; } description "The Differentiated Class-Type of traffic."; reference "RFC4124: section-4.3.1"; } typedef te-link-direction { type enumeration { - enum INCOMING { + enum incoming { description "explicit route represents an incoming link on a node"; } - enum OUTGOING { + enum outgoing { description "explicit route represents an outgoing link on a node"; } } description "enumerated type for specifying direction of link on a node"; } typedef te-label-direction { type enumeration { - enum FORWARD { + enum forward { description "Label allocated for the forward LSP direction"; } - enum REVERSE { + enum reverse { description "Label allocated for the reverse LSP direction"; } } description "enumerated type for specifying the forward or reverse label"; } typedef te-hop-type { type enumeration { - enum LOOSE { + enum loose { description "loose hop in an explicit path"; } - enum STRICT { + enum strict { description "strict hop in an explicit path"; } } description "enumerated type for specifying loose or strict paths"; reference "RFC3209: section-4.3.2"; } @@ -731,25 +774,30 @@ enum "update" { value 2; description "A TE node or te-link has been updated."; } } description "TE Event type for notifications"; } // te-topology-event-type typedef te-topology-id { + type union { + type string { + length 0; // empty string + } type string { pattern '([a-zA-Z0-9\-_.]+:)*' + '/?([a-zA-Z0-9\-_.]+)(/[a-zA-Z0-9\-_.]+)*'; } + } description "An identifier for a topology. It is optional to have one or more prefixes at the beginning, separated by colons. The prefixes can be the network-types, defined in ietf-network.yang, to help user to understand the topology better before further inquiry."; } typedef te-tp-id { type union { @@ -787,22 +835,21 @@ } typedef srlg { type uint32; description "SRLG type"; reference "RFC4203 and RFC5307"; } typedef te-metric { type uint32; - description - "TE link metric"; + description "TE link metric"; reference "RFC3785"; } /* TE features */ feature p2mp-te { description "Indicates support for P2MP-TE"; reference "RFC4875"; } @@ -844,20 +892,212 @@ } feature path-optimization-objective-function { description "Indicates support for path optimization objective function"; } /* * Identities */ + identity session-attributes-flags { + description + "Base identity for the RSVP-TE session attributes flags"; + } + identity local-protection-desired { + base session-attributes-flags; + description "Fastreroute local protection is desired."; + reference "RFC3209"; + } + identity se-style-desired { + description + "Shared explicit style to allow the LSP to be + established sharing resources with the old LSP."; + reference "RFC3209"; + } + identity local-recording-desired { + description "Local recording desired"; + reference "RFC3209"; + } + identity bandwidth-protection-desired { + base session-attributes-flags; + description + "Request FRR bandwidth protection on LSRs if + present."; + reference "RFC4090"; + } + identity node-protection-desired { + base session-attributes-flags; + description + "Request FRR node protection on LSRs if + present."; + reference "RFC4090"; + } + identity path-reevaluation-request { + base session-attributes-flags; + description + "This flag indicates that a path re-evaluation (of the + current path in use) is requested. Note that this does + not trigger any LSP Reroute but instead just signals a + request to evaluate whether a preferable path exists."; + reference "RFC4736"; + } + identity soft-preemption-desired { + base session-attributes-flags; + description + "Soft-preemption of LSP resources is desired"; + reference "RFC5712"; + } + + identity lsp-attributes-flags { + description "Base identity for per hop attribute flags"; + } + identity end-to-end-rerouting-desired { + base lsp-attributes-flags; + description + "Indicates end-to-end re-routing behavior for an + LSP under establishment. This MAY also be used for + specifying the behavior of end-to-end LSP recovery for + established LSPs."; + reference "RFC4920, RFC5420, RFC7570"; + } + identity boundary-rerouting-desired { + base lsp-attributes-flags; + description + "Indicates boundary re-routing behavior for an LSP under + establishment. This MAY also be used for specifying the + segment-based LSP recovery through nested crankback for + established LSPs. The boundary ABR/ASBR can either decide + to forward the PathErr message upstream to an upstream boundary + ABR/ASBR or to the ingress LSR. + Alternatively, it can try to select another egress boundary + LSR."; + reference "RFC4920, RFC5420, RFC7570"; + } + identity segment-based-rerouting-desired { + base lsp-attributes-flags; + description + "Indicates segment-based re-routing behavior for an LSP under + establishment. This MAY also be used to specify the segment- + based LSP recovery for established LSPs."; + reference "RFC4920, RFC5420, RFC7570"; + } + identity lsp-integrity-required { + base lsp-attributes-flags; + description "Indicates LSP integrity is required"; + reference "RFC4875, RFC7570"; + + } + identity contiguous-lsp-desired { + base lsp-attributes-flags; + description "Indicates contiguous LSP is desired"; + reference "RFC5151, RFC7570"; + } + identity lsp-stitching-desired { + base lsp-attributes-flags; + description "Indicates LSP stitching is desired"; + reference "RFC5150, RFC7570"; + } + identity pre-planned-lsp-flag { + base lsp-attributes-flags; + description + "Indicates the LSP MUST be provisioned in the + control plane only."; + reference "RFC6001, RFC7570"; + } + identity non-php-behavior-flag { + base lsp-attributes-flags; + description + "Indicates non-php behavior for the LSP is desired"; + reference "RFC6511, RFC7570"; + } + identity oob-mapping-flag { + base lsp-attributes-flags; + description + "Indicates signaling of the egress binding information + is out-of-band , (e.g., via Border Gateway Protocol (BGP))"; + reference "RFC6511, RFC7570"; + } + identity entropy-label-capability { + base lsp-attributes-flags; + description "Indicates entropy label capability"; + reference "RFC6790, RFC7570"; + } + identity oam-mep-entity-desired { + base lsp-attributes-flags; + description "OAM MEP entities desired"; + reference "RFC7260"; + } + identity oam-mip-entity-desired { + base lsp-attributes-flags; + description "OAM MIP entities desired"; + reference "RFC7260"; + } + identity srlg-collection-desired { + base lsp-attributes-flags; + description "SRLG collection desired"; + reference "RFC8001, RFC7570"; + } + identity loopback-desired { + base lsp-attributes-flags; + description + "This flag indicates a particular node on the LSP is + required to enter loopback mode. This can also be + used for specifying the loopback state of the node."; + reference "RFC7571"; + } + identity p2mp-te-tree-eval-request { + base lsp-attributes-flags; + description "P2MP-TE tree re-evaluation request"; + reference "RFC8149"; + } + identity rtm-set-desired { + base lsp-attributes-flags; + description + "Residence Time Measurement (RTM) attribute flag"; + reference "RFC8169"; + } + + identity link-protection-type { + description "Base identity for link protection type."; + } + identity link-protection-unprotected { + base link-protection-type; + description "Unprotected link type"; + reference "RFC4872"; + } + identity link-protection-extra-traffic { + base link-protection-type; + description "Extra-traffic protected link type"; + reference "RFC4427."; + } + identity link-protection-shared { + base link-protection-type; + description "Shared protected link type"; + reference "RFC4872"; + } + identity link-protection-1-for-1 { + base link-protection-type; + description "One for one protected link type"; + reference "RFC4872"; + } + identity link-protection-1-plus-1 { + base link-protection-type; + description "One plus one protected link type"; + reference "RFC4872"; + } + identity link-protection-enhanced { + base link-protection-type; + description "Enhanced protection protected link type"; + reference "RFC4872"; + } + identity association-type { description "Base identity for tunnel association"; reference "RFC6780, RFC4872, RFC4873"; } identity association-type-recovery { base association-type; description "Association Type Recovery used to association LSPs of same tunnel for recovery"; reference "RFC4872"; @@ -952,39 +1192,39 @@ say, some local computation may also be required"; } identity path-explicitly-defined { base path-computation-method; description "constrained-path LSP in which the path is explicitly specified as a collection of strict or/and loose hops"; } - identity LSP_METRIC_TYPE { + identity lsp-metric-type { description "Base identity for types of LSP metric specification"; } - identity LSP_METRIC_RELATIVE { - base LSP_METRIC_TYPE; + identity lsp-metric-relative { + base lsp-metric-type; description "The metric specified for the LSPs to which this identity refers is specified as a relative value to the IGP metric cost to the LSP's tail-end."; } - identity LSP_METRIC_ABSOLUTE { - base LSP_METRIC_TYPE; + identity lsp-metric-absolute { + base lsp-metric-type; description "The metric specified for the LSPs to which this identity refers is specified as an absolute value"; } - identity LSP_METRIC_INHERITED { - base LSP_METRIC_TYPE; + identity lsp-metric-inherited { + base lsp-metric-type; description "The metric for the LSPs to which this identity refers is not specified explicitly - but rather inherited from the IGP cost directly"; } identity te-tunnel-type { description "Base identity from which specific tunnel types are derived."; @@ -1194,27 +1434,39 @@ description "LSP protection 'Rerouting without Extra-Traffic'"; reference "RFC4872"; } identity lsp-protection-1-for-n { base lsp-protection-type; description "LSP protection '1:N Protection with Extra-Traffic'"; reference "RFC4872"; } - identity lsp-protection-unidir-1-to-1 { + identity lsp-protection-unidir-1-for-1 { + base lsp-protection-type; + description + "LSP protection '1:1 Unidirectional Protection'"; + reference "RFC4872"; + } + identity lsp-protection-bidir-1-for-1 { + base lsp-protection-type; + description + "LSP protection '1:1 Bidirectional Protection'"; + reference "RFC4872"; + } + identity lsp-protection-unidir-1-plus-1 { base lsp-protection-type; description "LSP protection '1+1 Unidirectional Protection'"; reference "RFC4872"; } - identity lsp-protection-bidir-1-to-1 { + identity lsp-protection-bidir-1-plus-1 { base lsp-protection-type; description "LSP protection '1+1 Bidirectional Protection'"; reference "RFC4872"; } identity lsp-protection-extra-traffic { base lsp-protection-type; description "LSP protection 'Extra-Traffic'"; reference @@ -1487,30 +1740,33 @@ identity lsp-encoding-fiber-channel { base lsp-encoding-types; description "Fiber Channel LSP encoding"; reference "RFC3471"; } identity lsp-encoding-oduk { base lsp-encoding-types; description "G.709 ODUk (Digital Path) LSP encoding"; + reference "RFC4328"; } identity lsp-encoding-optical-channel { base lsp-encoding-types; description - "Line (e.g., 8B/10B) LSP encoding"; + "G.709 Optical Channel LSP encoding"; + reference "RFC4328"; } identity lsp-encoding-line { base lsp-encoding-types; description "Line (e.g., 8B/10B) LSP encoding"; + reference "RFC6004"; } identity path-signaling-type { description "base identity from which specific LSPs path setup types are derived"; } identity path-setup-static { base path-signaling-type; description "Static LSP provisioning path setup"; @@ -1540,34 +1796,33 @@ identity path-scope-end-to-end { base path-scope-type; description "Path scope end to end"; } identity route-usage-type { description "Base identity for route usage"; } - identity route-include-ero { + identity route-include-object { base route-usage-type; description - "Include ERO resource in route"; + "Include route object"; } - identity route-exclude-ero { + identity route-exclude-object { base route-usage-type; description - "Exclude ERO resource from route"; + "Exclude route object"; } identity route-exclude-srlg { base route-usage-type; - description - "Exclude SRLG from route"; + description "Exclude SRLG"; } identity path-metric-type { description "Base identity for path metric type"; } identity path-metric-te { base path-metric-type; description "TE path metric"; @@ -1786,21 +2040,22 @@ grouping te-bandwidth { description "This grouping defines the generic TE bandwidth. For some known data plane technologies, specific modeling structures are specified. The string encoded te-bandwidth type is used for un-specified technologies. The modeling structure can be augmented later for other technologies."; container te-bandwidth { description - "Container that specifies TE bandwidth."; + "Container that specifies TE bandwidth. The choices + can be augmented for specific dataplane technologies."; choice technology { default generic; description "Data plane technology type."; case generic { leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } @@ -1813,62 +2069,68 @@ * TE label groupings **/ grouping te-label { description "This grouping defines the generic TE label. The modeling structure can be augmented for each technology. For un-specified technologies, rt-types:generalized-label is used."; container te-label { description - "Container that specifies TE label."; - + "Container that specifies TE label. The choices can + be augmented for specific dataplane technologies."; choice technology { default generic; description "Data plane technology type."; case generic { leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } } leaf direction { type te-label-direction; + default forward; description "Label direction"; } } } grouping te-topology-identifier { description "Augmentation for TE topology."; container te-topology-identifier { description "TE topology identifier container"; leaf provider-id { - type te-types:te-global-id; + type te-global-id; + default 0; description - "An identifier to uniquely identify a provider."; + "An identifier to uniquely identify a provider. If omitted, + it assumes the default topology provider ID=0"; } leaf client-id { - type te-types:te-global-id; + type te-global-id; + default 0; description - "An identifier to uniquely identify a client."; + "An identifier to uniquely identify a client. If omitted, + it assumes the default topology client ID=0"; } leaf topology-id { - type te-types:te-topology-id; + type te-topology-id; + default ''; description - "It is presumed that a datastore will contain many - topologies. To distinguish between topologies it is - vital to have UNIQUE topology identifiers."; + "When the datastore contains several topologies, the topology-id + distinguishes between them. If omitted, the default empty string + topology-id is assumed"; } } } /** * TE performance metric groupings **/ grouping performance-metric-one-way-delay-loss { description "Performance metric information in real time that can @@ -1898,30 +2160,20 @@ range 0..16777215; } description "Maximum delay or latency in micro seconds."; } leaf one-way-delay-variation { type uint32 { range 0..16777215; } description "Delay variation in micro seconds."; } - leaf one-way-packet-loss { - type decimal64 { - fraction-digits 6; - range "0 .. 50.331642"; - } - description - "Packet loss as a percentage of the total traffic sent - over a configurable interval. The finest precision is - 0.000003%."; - } } grouping performance-metric-two-way-delay-loss { description "Performance metric information in real time that can be applicable to links or connections. PM defined in this grouping is applicable to generic TE performance metrics as well as packet TE performance metrics."; reference "RFC7471: OSPF Traffic Engineering (TE) Metric Extensions. @@ -1946,32 +2198,21 @@ range 0..16777215; } description "Maximum delay or latency in micro seconds."; } leaf two-way-delay-variation { type uint32 { range 0..16777215; } description "Delay variation in micro seconds."; } - leaf two-way-packet-loss { - type decimal64 { - fraction-digits 6; - range "0 .. 50.331642"; } - description - "Packet loss as a percentage of the total traffic sent - over a configurable interval. The finest precision is - 0.000003%."; - } - } - grouping performance-metric-one-way-bandwidth { description "Performance metric information in real time that can be applicable to links. PM defined in this grouping is applicable to generic TE performance metrics as well as packet TE performance metrics."; reference "RFC7471: OSPF Traffic Engineering (TE) Metric Extensions. RFC7810: IS-IS Traffic Engineering (TE) Metric Extensions. RFC7823: Performance-Based Path Selection for Explicitly @@ -2033,158 +2273,235 @@ Extensions"; uses performance-metric-two-way-delay-loss; } } /** * TE tunnel generic groupings **/ grouping explicit-route-hop { description - "The explicit route subobject grouping"; + "The explicit route entry grouping"; choice type { description - "The explicit route subobject type"; - case num-unnum-hop { - container num-unnum-hop { + "The explicit route entry type"; + case numbered-node-hop { + container numbered-node-hop { leaf node-id { - type te-types:te-node-id; + type te-node-id; + mandatory true; description "The identifier of a node in the TE topology."; } + leaf hop-type { + type te-hop-type; + default strict; + description "strict or loose hop"; + } + description "Numbered node route hop"; + reference + "RFC3209: section 4.3 for EXPLICIT_ROUTE in RSVP-TE + RFC3477: Signalling Unnumbered Links in RSVP-TE"; + } + + } + case numbered-link-hop { + container numbered-link-hop { leaf link-tp-id { - type te-types:te-tp-id; + type te-tp-id; + mandatory true; + description + "TE link termination point identifier."; + } + leaf hop-type { + type te-hop-type; + default strict; + description "strict or loose hop"; + } + leaf direction { + type te-link-direction; + default outgoing; + description "Link route object direction"; + } + description + "Numbered link explicit route hop"; + reference + "RFC3209: section 4.3 for EXPLICIT_ROUTE in RSVP-TE + RFC3477: Signalling Unnumbered Links in RSVP-TE"; + } + } + case unnumbered-link-hop { + container unnumbered-link-hop { + leaf link-tp-id { + type te-tp-id; + mandatory true; description "TE link termination point identifier. The combination of TE link ID and the TE node ID is used to identify an unnumbered TE link."; } + leaf node-id { + type te-node-id; + mandatory true; + description + "The identifier of a node in the TE topology."; + } leaf hop-type { type te-hop-type; + default strict; description "strict or loose hop"; } leaf direction { type te-link-direction; - default INCOMING; - description "Link ERO direction"; + default outgoing; + description "Link route object direction"; } description - "Numbered and Unnumbered link/node explicit route - subobject"; + "Unnumbered link explicit route hop"; reference "RFC3209: section 4.3 for EXPLICIT_ROUTE in RSVP-TE RFC3477: Signalling Unnumbered Links in RSVP-TE"; } } case as-number { container as-number-hop { leaf as-number { type binary { - length 16; + length 2; } - description "AS number"; + mandatory true; + description "The AS number"; } leaf hop-type { type te-hop-type; - description - "strict or loose hop"; + default strict; + description "strict or loose hop"; } description - "Autonomous System explicit route subobject"; + "Autonomous System explicit route hop"; } } case label { container label-hop { description "Label hop type"; uses te-label; } description - "The Label ERO subobject"; + "The label explicit route hop type"; } } } - grouping record-route-subobject_state { + grouping record-route_state { description - "The record route subobject grouping"; + "The record route grouping"; leaf index { type uint32; - description "RRO subobject index"; + description + "Record route hop index. The index is used to + identify an entry in the list. A lower index + indicates the path traverses it earlier"; } choice type { description - "The record route subobject type"; - case numbered { - leaf address { - type te-types:te-tp-id; + "The record route entry type"; + case numbered-node-hop { + container numbered-node-hop { + description "Numbered node route hop container"; + leaf node-id { + type te-node-id; + mandatory true; description - "Numbered link TE termination point address."; + "The identifier of a node in the TE topology."; } - leaf ip-flags { - type binary { - length 8; + leaf-list flags { + type path-attribute-flags; + description "Record route per hop flags"; + reference "RFC3209 and others"; } + } + description "Numbered node route hop"; + } + case numbered-link-hop { + container numbered-link-hop { + description "Numbered link route hop container"; + leaf link-tp-id { + type te-tp-id; + mandatory true; description - "RRO IP address sub-object flags"; - reference "RFC3209"; + "Numbered TE link termination point identifier."; } + leaf-list flags { + type path-attribute-flags; + description "Record route per hop flags"; + reference "RFC3209 and others"; + } + } + description "Numbered link route hop"; + } + case unnumbered-link-hop { + container unnumbered-link-hop { + leaf link-tp-id { + type te-tp-id; + mandatory true; + description + "TE link termination point identifier. The combination + of TE link ID and the TE node ID is used to identify an + unnumbered TE link."; + } - case unnumbered { leaf node-id { - type te-types:te-node-id; + type te-node-id; description "The identifier of a node in the TE topology."; } - leaf link-tp-id { - type te-types:te-tp-id; - description - "TE link termination point identifier, used - together with te-node-id to identify the - link termination point"; + leaf-list flags { + type path-attribute-flags; + description "Record route per hop flags"; + reference "RFC3209 and others"; } description - "Unnumbered link record route subobject"; + "Unnumbered link record route hop"; reference "RFC3477: Signalling Unnumbered Links in RSVP-TE"; } + description "Unnumbered link route hop"; + } case label { container label-hop { - description "Label hop type"; + description "Label route hop type"; uses te-label; - leaf label-flags { - type binary { - length 8; + leaf-list flags { + type path-attribute-flags; + description "Record route per hop flags"; + reference "RFC3209 and others"; } - description - "Label sub-object flags"; - reference "RFC3209"; - } - } description - "The Label RRO subobject"; + "The Label record route entry types"; } } } grouping label-restriction-info { description "Label set item info"; leaf restriction { type enumeration { enum inclusive { description "The label or label range is inclusive."; } enum exclusive { description "The label or label range is exclusive."; } } + default inclusive; description "Whether the list item is inclusive or exclusive."; } leaf index { type uint32; description "Then index of the label restriction list entry."; } container label-start { must "not(../label-end/te-label/direction) or " @@ -2193,26 +2510,20 @@ error-message "label-start and label-end must have the same direction."; } description "This is the starting label if a label range is specified. This is the label value if a single label is specified, in which case, attribute 'label-end' is not set."; uses te-label; } container label-end { - must "not(../label-end/te-label/direction) or " - + "not(te-label/direction) " - + "or ../label-end/te-label/direction = te-label/direction" { - error-message - "label-start and label-end must have the same direction."; - } description "The ending label if a label range is specified; This attribute is not set, If a single label is specified."; uses te-label; } container label-step { description "The step increment between labels in the label range. The label start/end values will have to be consistent @@ -2230,21 +2541,22 @@ description "Label range step"; } } } } leaf range-bitmap { type binary; description "When there are gaps between label-start and label-end, this attribute is used to specify the positions - of the used labels."; + of the used labels. This is represented in big-endian and + in base64 representation as RFC7951, section 6.6 states"; } } grouping label-set-info { description "Grouping for List of label restrictions specifying what labels may or may not be used on a link connectivity."; container label-restrictions { description "The label restrictions container"; @@ -2259,145 +2571,160 @@ for GMPLS-Controlled Networks"; uses label-restriction-info; } } } grouping optimizations_config { description "Optimization metrics configuration grouping"; leaf metric-type { type identityref { - base te-types:path-metric-type; + base path-metric-type; } - description "TE path metric type"; + description + "Identifies an entry in the list of metric-types to + optimize the TE path for."; } leaf weight { type uint8; + default 1; description "TE path metric normalization weight"; } container explicit-route-exclude-objects { when "../metric-type = " + - "'te-types:path-metric-optimize-excludes'"; + "'path-metric-optimize-excludes'"; + description "Container for the exclude route object list"; uses path-route-exclude-objects; } container explicit-route-include-objects { when "../metric-type = " + - "'te-types:path-metric-optimize-includes'"; + "'path-metric-optimize-includes'"; description "Container for the include route object list"; uses path-route-include-objects; } } grouping common-constraints_config { description "Common constraints grouping that can be set on a constraint set or directly on the tunnel"; - uses te-types:te-bandwidth { + uses te-bandwidth { description "A requested bandwidth to use for path computation"; } + leaf link-protection { + type identityref { + base link-protection-type; + } + default link-protection-unprotected; + description + "Link Protection Type desired for this link."; + reference + "RFC4202: Routing Extensions in Support of + Generalized Multi-Protocol Label Switching (GMPLS)."; + } + leaf setup-priority { type uint8 { range "0..7"; } + default 7; description "TE LSP requested setup priority"; reference "RFC3209"; } leaf hold-priority { type uint8 { range "0..7"; } + default 7; description "TE LSP requested hold priority"; reference "RFC3209"; } leaf signaling-type { type identityref { - base te-types:path-signaling-type; + base path-signaling-type; } + default path-setup-rsvp; description "TE tunnel path signaling type"; } } grouping tunnel-constraints_config { description "Tunnel constraints grouping that can be set on a constraint set or directly on the tunnel"; - uses te-types:te-topology-identifier; - uses te-types:common-constraints_config; + uses te-topology-identifier; + uses common-constraints_config; } grouping path-metrics-bounds_config { description "TE path metric bounds grouping"; - leaf metric-type { - type identityref { - base te-types:path-metric-type; - } - description "TE path metric type"; - } - leaf upper-bound { - type uint64; - description "Upper bound on end-to-end TE path metric"; - } } grouping path-objective-function_config { description "Optimization metrics configuration grouping"; leaf objective-function-type { type identityref { - base te-types:objective-function-type; + base objective-function-type; } - description - "Objective function entry"; + description "Objective function entry"; } } - grouping path-route-objects { + grouping path-constraints-route-objects { description - "List of EROs to be included or excluded when performing - the path computation."; - container explicit-route-objects { + "List of route entries to be included or excluded when performing + path computation."; + container explicit-route-objects-always { description "Container for the exclude route object list"; list route-object-exclude-always { key index; description - "List of explicit route objects to always exclude + "List of route objects to always exclude from path computation"; + leaf index { type uint32; - description "ERO subobject index"; + description + "Explicit route object index. The index is used to + identify an entry in the list. A lower index indicates + the path traverses it earlier"; } - uses te-types:explicit-route-hop; + uses explicit-route-hop; } list route-object-include-exclude { key index; description - "List of explicit route objects to include or - exclude in path computation"; + "List of route objects to include or exclude in path + computation"; leaf explicit-route-usage { type identityref { - base te-types:route-usage-type; + base route-usage-type; } - description "Explicit-route usage."; + description "Include or exclude usage"; } leaf index { type uint32; - description "ERO subobject index"; + description + "Route object entry index. A lower index indicates + path traverses the hop earlier than the higher index + hop(s)"; } - uses te-types:explicit-route-hop { + uses explicit-route-hop { augment "type" { case srlg { container srlg { description "SRLG container"; leaf srlg { type uint32; description "SRLG value"; } } description "An SRLG value to be included or excluded"; @@ -2403,52 +2730,56 @@ description "An SRLG value to be included or excluded"; } description "Augmentation to generic explicit route for SRLG exclusion"; } } } } } - grouping path-route-include-objects { description - "List of EROs to be included when performing + "List of route object(s) to be included when performing the path computation."; list route-object-include-object { key index; description "List of explicit route objects to be included in path computation"; leaf index { type uint32; - description "ERO subobject index"; + description + "Route object entry index. A lower index indicates + path traverses the hop earlier than the higher index + hop(s)"; } - uses te-types:explicit-route-hop; + uses explicit-route-hop; } } grouping path-route-exclude-objects { description - "List of EROs to be included when performing + "List of route object(s) to be excluded when performing the path computation."; list route-object-exclude-object { key index; description "List of explicit route objects to be excluded in path computation"; leaf index { type uint32; - description "ERO subobject index"; + description + "Route object entry index. The index in this case + identifies the entry and holds no other meaning"; } - uses te-types:explicit-route-hop { + uses explicit-route-hop { augment "type" { case srlg { container srlg { description "SRLG container"; leaf srlg { type uint32; description "SRLG value"; } } description "An SRLG value to be included or excluded"; @@ -2460,21 +2791,35 @@ } } grouping generic-path-metric-bounds { description "TE path metric bounds grouping"; container path-metric-bounds { description "TE path metric bounds container"; list path-metric-bound { key metric-type; description "List of TE path metric bounds"; - uses path-metrics-bounds_config; + leaf metric-type { + type identityref { + base path-metric-type; + } + description + "Identifies an entry in the list of metric-types + bound for the TE path."; + } + leaf upper-bound { + type uint64; + default 0; + description + "Upper bound on end-to-end TE path metric. A zero indicate + an unbounded upper limit for the specific metric-type"; + } } } } grouping generic-path-optimization { description "TE generic path optimization grouping"; container optimizations { description "The objective function container that includes @@ -2495,23 +2840,24 @@ description "The list of tiebreaker criterion to apply on an equally favored set of paths to pick best"; list tiebreaker { key "tiebreaker-type"; description "The list of tiebreaker criterion to apply on an equally favored set of paths to pick best"; leaf tiebreaker-type { type identityref { - base te-types:path-metric-type; + base path-metric-type; } - description "The objective function"; + description + "Identifies an entry in the list of tiebreakers."; } } } } case objective-function { if-feature path-optimization-objective-function; /* Objective functions */ container objective-function { description "The objective function container that includes @@ -2530,105 +2876,114 @@ description "Path affinities values representation"; list path-affinities-value { key "usage"; description "List of named affinity constraints"; leaf usage { type identityref { base resource-affinities-type; } - description "Affinities usage"; + description + "Identifies an entry in the list of value affinities + constraints"; } leaf value { type admin-groups; - description "Affinity value"; + default ''; + description "The affinity value. The default is empty."; } } - } container path-affinity-names { description "Path affinities named representation style"; list path-affinity-name { key "usage"; description "List of named affinity constraints"; leaf usage { type identityref { - base te-types:resource-affinities-type; + base resource-affinities-type; } - description "Affinities usage"; + description + "Identifies an entry in the list of named affinities + constraints"; } list affinity-name { key "name"; leaf name { type string; - description "Affinity name"; + description "Identify a named affinity entry."; } description "List of named affinities"; } } } } grouping generic-path-srlgs { description "Path SRLG grouping"; - container path-srlgs-values { + container path-srlgs-lists { description "Path SRLG properties container"; + list path-srlgs-list { + key "usage"; + description + "List entries of value SRLGs to be included or excluded"; leaf usage { type identityref { - base te-types:route-exclude-srlg; + base route-usage-type; } - description "SRLG usage"; + description + "Identifies an entry of list of SRLGs to either include + or exclude"; } leaf-list values { type srlg; - description "SRLG value"; + description "List of SRLG values"; + } } } container path-srlgs-names { description "Container for named SRLG list"; list path-srlgs-name { key "usage"; - description "List of named SRLGs"; + description + "List entries of named SRLGs to be included or excluded"; leaf usage { type identityref { - base te-types:route-exclude-srlg; + base route-usage-type; } - description "SRLG usage"; + description + "Identifies an entry of list of named SRLGs to either + include or exclude"; } - list srlg-name { - key "name"; - leaf name { + leaf-list names { type string; - description "The SRLG name"; - } description "List named SRLGs"; } } } } grouping generic-path-disjointness { description "Path disjointness grouping"; leaf disjointness { - type te-types:te-path-disjointness; + type te-path-disjointness; description "The type of resource disjointness. Under primary path, disjointness level applies to all secondary LSPs. Under secondary, disjointness level overrides the one under primary"; } } - grouping common-path-constraints-attributes { description "Common path constraints configuration grouping"; uses common-constraints_config; uses generic-path-metric-bounds; uses generic-path-affinities; uses generic-path-srlgs; } grouping generic-path-constraints { @@ -2644,21 +3000,21 @@ grouping generic-path-properties { description "TE generic path properties grouping"; container path-properties { config false; description "The TE path properties"; list path-metric { key metric-type; description "TE path metric type"; leaf metric-type { type identityref { - base te-types:path-metric-type; + base path-metric-type; } description "TE path metric type"; } leaf accumulative-value { type uint64; description "TE path metric accumulative value"; } } uses generic-path-affinities; uses generic-path-srlgs; @@ -2666,42 +3022,53 @@ description "Container for the list of route objects either returned by the computation engine or actually used by an LSP"; list path-route-object { key index; description "List of route objects either returned by the computation engine or actually used by an LSP"; leaf index { type uint32; - description "ERO subobject index"; + description + "Route object entry index. A lower index indicates + path traverses the hop earlier than the higher index + hop(s)"; } uses explicit-route-hop; } } } } } Figure 1: TE basic types YANG module 5. IETF MPLS TE Types YANG Module - file "ietf-te-mpls-types@2018-10-08.yang" + file "ietf-te-mpls-types@2018-12-21.yang" module ietf-te-mpls-types { - + yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-te-mpls-types"; /* Replace with IANA when assigned */ prefix "te-mpls-types"; + /* Import TE generic types */ + import ietf-te-types { + prefix te-types; + reference + "RFC XXXX: A YANG Data Model for Common Traffic Engineering + Types"; + } + organization "IETF TEAS Working Group"; contact "WG Web: WG List: WG Chair: Lou Berger @@ -2723,38 +3090,59 @@ Editor: Xufeng Liu Editor: Igor Bryskin Editor: Young Lee "; description - "This module contains a collection of generally - useful MPLS TE specific YANG data type definitions."; + "This module contains a collection of generally useful MPLS TE + specific YANG data type definitions. The model fully conforms + to the Network Management Datastore Architecture (NMDA). - revision "2018-10-08" { + Copyright (c) 2018 IETF Trust and the persons + identified as authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + This version of this YANG module is part of RFC XXXX; see + the RFC itself for full legal notices."; + + // RFC Ed.: replace XXXX with actual RFC number and remove this + // note. + + // RFC Ed.: update the date below with the date of RFC publication + // and remove this note. + + revision "2018-12-21" { description "Latest revision of TE MPLS types"; - reference "RFC3209"; + reference + "RFC XXXX: A YANG Data Model for Common Traffic Engineering + Types"; } /** * Typedefs */ typedef te-bandwidth-requested-type { type enumeration { - enum SPECIFIED { + enum specified { description "Bandwidth is explicitly specified"; } - enum AUTO { + enum auto { description "Bandwidth is automatically computed"; } } description "enumerated type for specifying whether bandwidth is explicitly specified or automatically computed"; } typedef te-class-type { @@ -2836,20 +3224,57 @@ reference "RFC4125: Maximum Allocation Model for DS-TE"; } identity bc-model-mar { base bc-model-type; description "Maximum Allocation with Reservation bandwidth constraint model type."; reference "RFC4126: MAR Bandwidth Constraints Model for DS-TE"; } + + grouping performance-metric-container-packet { + description + "A container containing performance metric attributes."; + uses te-types:performance-metric-container { + augment performance-metric-one-way { + leaf one-way-packet-loss { + type decimal64 { + fraction-digits 6; + range "0 .. 50.331642"; + } + description + "Packet loss as a percentage of the total traffic sent + over a configurable interval. The finest precision is + 0.000003%."; + } + description + "PM one-way packet specific augmentation to generic PM + grouping"; + } + augment performance-metric-two-way { + leaf two-way-packet-loss { + type decimal64 { + fraction-digits 6; + range "0 .. 50.331642"; + } + description + "Packet loss as a percentage of the total traffic sent + over a configurable interval. The finest precision is + 0.000003%."; + } + description + "PM two-way packet specific augmentation to generic PM + grouping"; + } + } + } } Figure 2: TE MPLS types YANG module 6. IANA Considerations This document registers the following URIs in the IETF XML registry [RFC3688]. Following the format in [RFC3688], the following registration is requested to be made. @@ -2907,22 +3332,22 @@ [I-D.ietf-teas-yang-rsvp] Beeram, V., Saad, T., Gandhi, R., Liu, X., Bryskin, I., and H. Shah, "A YANG Data Model for Resource Reservation Protocol (RSVP)", draft-ietf-teas-yang-rsvp-09 (work in progress), May 2018. [I-D.ietf-teas-yang-te] Saad, T., Gandhi, R., Liu, X., Beeram, V., Shah, H., and I. Bryskin, "A YANG Data Model for Traffic Engineering - Tunnels and Interfaces", draft-ietf-teas-yang-te-16 (work - in progress), July 2018. + Tunnels and Interfaces", draft-ietf-teas-yang-te-17 (work + in progress), October 2018. [I-D.ietf-teas-yang-te-topo] Liu, X., Bryskin, I., Beeram, V., Saad, T., Shah, H., and O. Dios, "YANG Data Model for Traffic Engineering (TE) Topologies", draft-ietf-teas-yang-te-topo-18 (work in progress), June 2018. [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997,