diff --git a/experimental/ietf-extracted-YANG-modules/draft-extended-example@2025-03-09.yang b/experimental/ietf-extracted-YANG-modules/draft-extended-example@2025-03-09.yang new file mode 100644 index 000000000..0470c981d --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/draft-extended-example@2025-03-09.yang @@ -0,0 +1,58 @@ +module draft-extended-example { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:draft-extended-example"; + prefix dr-ext-exp; + + import draft-template { + prefix dr-tmp; + } + + organization + "INSA Lyon"; + contact + "Editor: Vivekananda Boudia + "; + description + "add external references to RFC8345"; + revision 2025-03-09 { + description + "Initial revision."; + reference + ""; + } + + identity AUGMENT-EXAMPLE-TEMPLATE-TYPE { + base dr-tmp:template-type; + description + "augment example for template type"; + } + + identity AUGMENT-EXAMPLE-EXTRA-LABEL { + base dr-tmp:extra-label; + description + "augment example for extra label"; + } + + identity AUGMENT-EXAMPLE-REQUEST-TYPE { + base dr-tmp:request-type; + description + "augment example for request type"; + } + + grouping augment-example-request { + description + "augment example for a request"; + leaf foo { + type string; + description + "leaf example"; + } + } + + augment "/dr-tmp:template/dr-tmp:template/dr-tmp:request/dr-tmp:request-builder" { + when "derived-from-or-self(../dr-tmp:request-type, 'AUGMENT-EXAMPLE-REQUEST-TYPE')"; + uses augment-example-request; + description + "we add our example to the possible request type"; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/draft-relation@2025-03-09.yang b/experimental/ietf-extracted-YANG-modules/draft-relation@2025-03-09.yang new file mode 100644 index 000000000..33f414c47 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/draft-relation@2025-03-09.yang @@ -0,0 +1,132 @@ +module draft-relation { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:draft-relation"; + prefix dr-rel; + + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types"; + } + import ietf-network { + prefix nw; + reference + "RFC 8345: A YANG Data Model for Network Topologies"; + } + import ietf-network-topology { + prefix nt; + reference + "RFC 8345: A YANG Data Model for Network Topologies"; + } + import draft-template { + prefix dr-tmp; + } + + organization + "INSA Lyon"; + contact + "Editor: Vivekananda Boudia + "; + description + "relations external of RFC8345"; + + revision 2025-03-09 { + description + "Initial revision"; + reference + ""; + } + + container relation { + description + "relation container"; + list relation { + key "relation-id"; + description + "relation list"; + leaf relation-id { + type inet:uri; + description + "relation id"; + } + choice network-element-ref { + description + "linking to RFC8345"; + leaf network-ref { + type leafref { + path "/nw:networks/nw:network/nw:network-id"; + } + description + "linking to network"; + } + leaf node-ref { + type leafref { + path "/nw:networks/nw:network/nw:node/nw:node-id"; + } + description + "linking to node"; + } + leaf link-ref { + type leafref { + path "/nw:networks/nw:network/nt:link/nt:link-id"; + } + description + "linking to link"; + } + leaf tp-ref { + type leafref { + path "/nw:networks/nw:network/nw:node/nt:termination-point/nt:tp-id"; + } + description + "linking to termination point"; + } + } + leaf template-ref { + type leafref { + path "/dr-tmp:template/dr-tmp:template/dr-tmp:template-id"; + } + description + "reference to template"; + } + leaf-list request-type-supported { + type identityref { + base dr-tmp:request-type; + } + description + "template is generic and may include requests that are not supported by the network element + here, we specify the types of requests that the network element supports + if network element supports all template ALL-REQUEST may be used"; + } + leaf path { + type string; + description + "network element can be augmented and may contain containers nested within other containers. + path is used for filtering."; + } + list parameter-value { + key "param-ref request-type"; + description + "parameter value from network element"; + leaf param-ref { + type leafref { + path "/dr-tmp:template/dr-tmp:template/dr-tmp:parameter/dr-tmp:param-id"; + } + description + "reference to template parameter"; + } + leaf request-type { + type identityref { + base dr-tmp:request-type; + } + description + "value can be different depending on the request"; + } + leaf value { + type string; + description + "value of the parameter"; + } + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/draft-template@2025-03-09.yang b/experimental/ietf-extracted-YANG-modules/draft-template@2025-03-09.yang new file mode 100644 index 000000000..69fff0323 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/draft-template@2025-03-09.yang @@ -0,0 +1,165 @@ +module draft-template { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:draft-template"; + prefix dr-tmp; + + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types"; + } + + organization + "INSA Lyon"; + contact + "Editor: Vivekananda Boudia + "; + description + "template yang model"; + + revision 2025-03-09 { + description + "Initial revision"; + reference + ""; + } + + identity template-type { + description + "base identity for template type"; + } + + identity CONFIG { + base template-type; + description + "template used to retrieve configuration data"; + } + + identity STATE { + base template-type; + description + "template used to retrieve operational state data"; + } + + identity extra-label { + description + "base identity for extra label"; + } + + identity request-type { + description + "base identity for request type"; + } + + identity ALL_REQUEST { + base request-type; + description + "all request"; + } + + identity NETCONF { + base request-type; + description + "request that retrieves data using the NETCONF protocol"; + } + + grouping netconf-request { + description + "netconf request"; + leaf xpath { + type string; + description + "netconf xpath for request"; + } + } + + container template { + description + "template container"; + list template { + key "template-id"; + description + "template list"; + leaf template-id { + type inet:uri; + description + "uniquely identifies a template"; + } + leaf description { + type string; + description + "template description"; + } + container template-type { + description + "template type + used for filtering"; + leaf base { + type identityref { + base template-type; + } + description + "template base + used for filtering"; + } + leaf is-historical { + type boolean; + description + "check is template is used to get historical data or not + used for filtering"; + } + leaf-list extra-label { + type identityref { + base extra-label; + } + description + "extra label + used for filtering"; + } + } + list parameter { + key "param-id"; + description + "list of parameter used by request"; + leaf param-id { + type inet:uri; + description + "uniquely identifies a parameter"; + } + leaf description { + type string; + description + "parameter description"; + } + } + list request { + key "request-type"; + description + "request list"; + leaf request-type { + type identityref { + base request-type; + } + description + "request type"; + } + container request-builder { + description + "request container that allows users to retrieve data + parameters must be enclosed in brackets."; + } + } + container extra { + description + "use for augmentation"; + } + } + } + + augment "/template/template/request/request-builder" { + when "derived-from-or-self(../request-type, 'NETCONF')"; + uses netconf-request; + description + "adding netconf request to possible request"; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/iana-igp-algo-types@2025-06-13.yang b/experimental/ietf-extracted-YANG-modules/iana-igp-algo-types@2025-06-13.yang new file mode 100644 index 000000000..7315c6a38 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/iana-igp-algo-types@2025-06-13.yang @@ -0,0 +1,78 @@ +module iana-igp-algo-types { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:iana-igp-algo-types"; + prefix iana-algo-types; + + organization + "Internet Assigned Numbers Authority (IANA)"; + + contact + "Internet Assigned Numbers Authority + + ICANN + 12025 Waterfront Drive, Suite 300 + Los Angeles, CA 90094-2536 + United States of America + + Tel: +1 310 301 5800 + "; + + description + "The YANG module defines the identities for Interior Gateway + Protocol (IGP) Algorithm Types. + + This YANG module is maintained by IANA and reflects the 'IGP + Algorithm Types' registry. + + Copyright (c) 2025 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 Revised 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 initial version of this YANG module is part of RFC XXXX + (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself + for full legal notices. + + //RFC Ed.: replace XXXX with actual RFC number and remove + this note + + //RFC Ed.: replace IANA_FOO_URL and remove this note. + + The latest version of this YANG module is available at + "; + + revision 2025-06-13 { + description + "Initial Version"; + reference + "RFC XXXX: YANG Data Model for OSPF Flexible Algorithm"; + } + + identity algo-type { + description + "Base identity for IGP Algorithm Type. The algorithm types + are defined in IANA IGP Algorithm Types registry."; + } + + identity algo-spf { + base algo-type; + description + "Shortest Path First (SPF) algorithm based on link metric."; + reference + "RFC 8665: OSPF Extensions for Segment Routing"; + } + + identity algo-strict-spf { + base algo-type; + description + "Strict Shortest Path First (SPF) algorithm based on link + metric."; + reference + "RFC 8665: OSPF Extensions for Segment Routing"; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/iana-igp-metric-types@2025-06-13.yang b/experimental/ietf-extracted-YANG-modules/iana-igp-metric-types@2025-06-13.yang new file mode 100644 index 000000000..d8227db2f --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/iana-igp-metric-types@2025-06-13.yang @@ -0,0 +1,87 @@ +module iana-igp-metric-types { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:iana-igp-metric-types"; + prefix iana-metric-types; + + organization + "Internet Assigned Numbers Authority (IANA)"; + + contact + "Internet Assigned Numbers Authority + + ICANN + 12025 Waterfront Drive, Suite 300 + Los Angeles, CA 90094-2536 + United States of America + + Tel: +1 310 301 5800 + "; + + description + "The YANG module defines the identities for Interior Gateway + Protocol (IGP) Metric-Types. + + This YANG module is maintained by IANA and reflects the 'IGP + Metric-Type' registry. + + Copyright (c) 2025 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 Revised 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 initial version of this YANG module is part of RFC XXXX + (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself + for full legal notices. + + //RFC Ed.: replace XXXX with actual RFC number and remove + this note + + //RFC Ed.: replace IANA_FOO_URL and remove this note. + + The latest version of this YANG module is available at + ."; + + revision 2025-06-13 { + description + "Initial Version"; + reference + "RFC XXXX: YANG Data Model for OSPF Flexible Algorithm"; + } + + identity metric-type { + description + "Base identity for IGP Metric-Type. The metric types + are defined in IANA IGP Metric-Type registry."; + } + + identity igp-metric { + base metric-type; + description + "IGP Metric."; + } + identity min-unidirectional-link-delay { + base metric-type; + description + "Min Unidirectional Link Delay as defined in RFC8570 Section 4.2 + and RFC7471 Section 4.2."; + } + + identity te-default-metric { + base metric-type; + description + "STraffic Engineering Default Metric as defined in RFC5305 + Section 3.7 and Traffic Engineering Metric as defined in + RFC3630, Section 2.5.5."; + } + + identity bandwidth-metric { + base metric-type; + description + "Bandwidth metric."; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-06.yang similarity index 98% rename from experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-03.yang rename to experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-06.yang index 236043e81..9ca19c6aa 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-06.yang @@ -15,7 +15,6 @@ module ietf-bfd-met-keyed-isaac { contact "WG Web: WG List: - Authors: Mahesh Jethanandani (mjethanandani@gmail.com) Ashesh Mishra (ashesh@aalyria.com) Jeffrey Haas (jhaas@juniper.net) @@ -47,7 +46,7 @@ module ietf-bfd-met-keyed-isaac { described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here."; - revision "2025-07-03" { + revision "2025-07-06" { description "Initial Version."; reference @@ -63,7 +62,6 @@ module ietf-bfd-met-keyed-isaac { reference "RFC XXXX: Meticulous Keyed ISAAC for BFD Authentication."; } - identity optimized-sha1-meticulous-keyed-isaac { base key-chain:crypto-algorithm; description diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-06-13.yang b/experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-07-04.yang similarity index 99% rename from experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-06-13.yang rename to experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-07-04.yang index bc84fa8fc..11fadaf18 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-06-13.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-07-04.yang @@ -43,7 +43,7 @@ module ietf-bgp-communities { // RFC-EDITOR: please update YYYY with this RFC ID - revision 2025-06-13 { + revision 2025-07-04 { description "Initial revision."; reference @@ -356,7 +356,9 @@ module ietf-bgp-communities { "Description for the community"; } leaf type { - type uint8; + type uint8 { + range "0|2|64|66"; + } mandatory true; description "High-order Type of the community. Supported values are 0 diff --git a/experimental/ietf-extracted-YANG-modules/ietf-diffserv@2024-01-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-diffserv@2025-07-06.yang similarity index 99% rename from experimental/ietf-extracted-YANG-modules/ietf-diffserv@2024-01-31.yang rename to experimental/ietf-extracted-YANG-modules/ietf-diffserv@2025-07-06.yang index dc045b065..21c6adb61 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-diffserv@2024-01-31.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-diffserv@2025-07-06.yang @@ -12,7 +12,7 @@ module ietf-diffserv { import ietf-inet-types { prefix inet; } - import iana-qos-types { + import ietf-qos-types { prefix qos-types; reference "RFC XXXX: YANG Models for Quality of Service (QoS)."; @@ -26,10 +26,9 @@ module ietf-diffserv { WG List: Editor: Aseem Choudhary - + Editor: Mahesh Jethanandani "; - description "This module contains a collection of YANG definitions for configuring DiffServ specification implementations. @@ -47,7 +46,7 @@ module ietf-diffserv { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-01-31 { + revision 2025-07-06 { description "Initial version."; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-incident@2024-06-06.yang b/experimental/ietf-extracted-YANG-modules/ietf-incident@2024-06-06.yang index df3f81622..3acc20a12 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-incident@2024-06-06.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-incident@2024-06-06.yang @@ -79,7 +79,7 @@ module ietf-incident { "RFC XXX: YANG module for network incident management."; } - //identities + // Identities identity incident-domain { description @@ -252,8 +252,8 @@ module ietf-incident { base incident-class; description "It indicates the class of the incident is a sla - violation, for example high CPU rate may cause - a fault in the future."; + violation, for example high CPU rate may cause + a fault in the future."; } identity acknowledge-error { @@ -300,7 +300,7 @@ module ietf-incident { base diagnose-error; base resolve-error; description - " The permission required for performing specific + "The permission required for performing specific detection/resolution task is not granted."; } @@ -308,15 +308,15 @@ module ietf-incident { base diagnose-error; base resolve-error; description - " The diagnosis/resolution time exceeds the preset time."; + "The diagnosis/resolution time exceeds the preset time."; } identity resource-unavailable { base diagnose-error; base resolve-error; description - " The resource is unavailable to perform - the diagnosis/resolution operation."; + "The resource is unavailable to perform + the diagnosis/resolution operation."; } identity cause-name { @@ -324,7 +324,7 @@ module ietf-incident { "Base identity for the cause name."; } - //typedefs + // Typedefs typedef incident-priority { type enumeration { @@ -362,13 +362,13 @@ module ietf-incident { "reference a network incident."; } - //groupings + // Groupings grouping probable-cause-info { description "The information of probable cause."; leaf cause-name { - type identityref{ + type identityref { base cause-name; } description @@ -451,13 +451,13 @@ module ietf-incident { description "The type of an incident."; } - leaf incident-id { - type string; - description - "The unique qualifier of an incident instance type. - This leaf is used when the 'type' leaf cannot - uniquely identify the incident instance type. Normally, - this is not the case, and this leaf is the empty string."; + leaf incident-id { + type string; + description + "The unique qualifier of an incident instance type. + This leaf is used when the 'type' leaf cannot + uniquely identify the incident instance type. Normally, + this is not the case, and this leaf is the empty string."; } leaf-list service-instance { type string; @@ -661,7 +661,7 @@ module ietf-incident { } } - // rpcs + // RPCs rpc incident-acknowledge { description @@ -783,7 +783,7 @@ module ietf-incident { } } - // notifications + // Notifications notification incident-notification { description @@ -802,7 +802,7 @@ module ietf-incident { } } - //data definitions + // Data definitions container incidents { config false; @@ -812,12 +812,12 @@ module ietf-incident { key "name type incident-id"; description "the information of incident."; - leaf incident-no { - type uint64; - mandatory true; - description + leaf incident-no { + type uint64; + mandatory true; + description "The unique sequence number of the incident instance."; - } + } uses incident-info; uses incident-time-info; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-isis-flex-algo@2024-09-02.yang b/experimental/ietf-extracted-YANG-modules/ietf-isis-flex-algo@2025-07-06.yang similarity index 79% rename from experimental/ietf-extracted-YANG-modules/ietf-isis-flex-algo@2024-09-02.yang rename to experimental/ietf-extracted-YANG-modules/ietf-isis-flex-algo@2025-07-06.yang index a400250d0..2887f0601 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-isis-flex-algo@2024-09-02.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-isis-flex-algo@2025-07-06.yang @@ -17,17 +17,21 @@ module ietf-isis-flex-algo { } import ietf-isis { - prefix "isis"; + prefix isis; reference "RFC 9130: YANG Data Model for the IS-IS Protocol"; } import ietf-te { - prefix "te"; + prefix te; } - import ietf-isis-link-attr { - prefix "isis-link-attr"; + import iana-igp-algo-types { + prefix iana-algo-types; + } + + import iana-igp-metric-types { + prefix iana-metric-type; } organization @@ -42,6 +46,8 @@ module ietf-isis-flex-algo { Author: Stephane Litkowski + Author: Madhavi Joshi + "; description @@ -51,7 +57,7 @@ module ietf-isis-flex-algo { This YANG model conforms to the Network Management Datastore Architecture (NMDA) as described in RFC 8342. - Copyright (c) 2024 IETF Trust and the persons identified as + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -73,7 +79,7 @@ module ietf-isis-flex-algo { reference "RFC XXXX: YANG Data Model for ISIS Flexible Algorithm."; - revision 2024-09-02 { + revision 2025-07-06 { description "Initial Version"; reference @@ -82,33 +88,6 @@ module ietf-isis-flex-algo { /* Identities */ - identity metric-type { - description - "Base identity for route metric types."; - } - - identity igp-metric { - base metric-type; - description - "Identity for the IGP metric type."; - } - - identity min-uni-delay { - base metric-type; - description - "Min unidirectional link delay metric type."; - reference - "RFC 8570 - IS-IS Traffic Engineering (TE) Metric Extensions"; - } - - identity te-metric { - base metric-type; - description - "Traffic engineering metric type."; - reference - "RFC 5305 - IS-IS Extensions for Traffic Engineering (TE)"; - } - identity fad-flags { description "Base identity for ISIS FAD flags."; @@ -122,13 +101,6 @@ module ietf-isis-flex-algo { calculation."; } - /* Identity augmentation */ - identity flex-algo-bit { - base isis-link-attr:sabm-bit; - description - "X bit, flexible algorithm."; - } - /* Groupings */ grouping fa-ex-ag-sub-tlv { container fa-ex-ag-sub-tlv { @@ -187,6 +159,7 @@ module ietf-isis-flex-algo { description "The flex-algo definition flags sub-tlv."; } + grouping fa-ex-srlg-sub-tlv { container fa-ex-srlg-sub-tlv { leaf-list srlgs { @@ -211,14 +184,14 @@ module ietf-isis-flex-algo { } leaf metric-type { type identityref { - base metric-type; + base iana-metric-type:metric-type; } description "Type of metric to be used during the calculation."; } leaf calc-type { - type uint8 { - range "0..127"; + type identityref { + base iana-algo-types:algo-type; } description "IGP algorithm types, value from 0 to 127 as @@ -351,26 +324,23 @@ module ietf-isis-flex-algo { the flex-algo path computation."; } - leaf fast-reroute { - type boolean; - default true; - description - "Enable fast reroute."; - } - leaf metric-type { type identityref { - base metric-type; + base iana-metric-type:metric-type; } description "Type of metric to be used during the calculation."; } - leaf microloop-avoidance { - type boolean; - default true; + leaf calc-type { + type identityref { + base iana-algo-types:algo-type; + } + default iana-algo-types:algo-spf; description - "Enable microloop avoidance."; + "Calcuation-type. Value from 0-127 inclusive from the IANA + 'IGP Algorithm Types' registry defined under the 'Interior + Gateway Protocol (IGP) Parameters' registry."; } container prefix-metric { @@ -399,81 +369,82 @@ module ietf-isis-flex-algo { augment "/rt:routing/" + "rt:control-plane-protocols/rt:control-plane-protocol"+ "/isis:isis/isis:database/isis:levels/isis:lsp"+ - "/isis:router-capabilities" { - when "/rt:routing/rt:control-plane-protocols/"+ - "rt:control-plane-protocol/"+ - "rt:type = 'isis:isis'" { - description - "This augment ISIS routing protocol when used"; + "/isis:router-capabilities" { + when "/rt:routing/rt:control-plane-protocols/"+ + "rt:control-plane-protocol/"+ + "rt:type = 'isis:isis'" { + description + "This augment ISIS routing protocol when used"; } - description - "This augments ISIS protocol LSDB router capability."; + description + "This augments ISIS protocol LSDB router capability."; - uses fad-tlvs; + uses fad-tlvs; } augment "/rt:routing/" + "rt:control-plane-protocols/rt:control-plane-protocol"+ "/isis:isis/isis:database/isis:levels/isis:lsp"+ - "/isis:extended-ipv4-reachability/"+ - "isis:prefixes" { - when "/rt:routing/rt:control-plane-protocols/"+ - "rt:control-plane-protocol/"+ - "rt:type = 'isis:isis'" { + "/isis:extended-ipv4-reachability/"+ + "isis:prefixes" { + when "/rt:routing/rt:control-plane-protocols/"+ + "rt:control-plane-protocol/"+ + "rt:type = 'isis:isis'" { description "This augment ISIS routing protocol when used"; } - description - "This augments ISIS protocol LSDB prefix."; - uses fapm-sub-tlvs; + description + "This augments ISIS protocol LSDB prefix."; + uses fapm-sub-tlvs; } augment "/rt:routing/" + "rt:control-plane-protocols/rt:control-plane-protocol"+ "/isis:isis/isis:database/isis:levels/isis:lsp"+ - "/isis:mt-extended-ipv4-reachability/isis:prefixes" { - when "/rt:routing/rt:control-plane-protocols/"+ - "rt:control-plane-protocol/"+ - "rt:type = 'isis:isis'" { + "/isis:mt-extended-ipv4-reachability/isis:prefixes" { + when "/rt:routing/rt:control-plane-protocols/"+ + "rt:control-plane-protocol/"+ + "rt:type = 'isis:isis'" { description "This augment ISIS routing protocol when used"; } - description - "This augments ISIS protocol LSDB prefix."; - uses fapm-sub-tlvs; + description + "This augments ISIS protocol LSDB prefix."; + uses fapm-sub-tlvs; } augment "/rt:routing/" + "rt:control-plane-protocols/rt:control-plane-protocol"+ "/isis:isis/isis:database/isis:levels/isis:lsp"+ "/isis:ipv6-reachability/isis:prefixes" { - when "/rt:routing/rt:control-plane-protocols/"+ - "rt:control-plane-protocol/"+ - "rt:type = 'isis:isis'" { + when "/rt:routing/rt:control-plane-protocols/"+ + "rt:control-plane-protocol/"+ + "rt:type = 'isis:isis'" { description "This augment ISIS routing protocol when used"; } - description - "This augments ISIS protocol LSDB prefix."; - uses fapm-sub-tlvs; + description + "This augments ISIS protocol LSDB prefix."; + uses fapm-sub-tlvs; } augment "/rt:routing/" + "rt:control-plane-protocols/rt:control-plane-protocol"+ "/isis:isis/isis:database/isis:levels/isis:lsp"+ "/isis:mt-ipv6-reachability/isis:prefixes" { - when "/rt:routing/rt:control-plane-protocols/"+ - "rt:control-plane-protocol/"+ - "rt:type = 'isis:isis'" { + when "/rt:routing/rt:control-plane-protocols/"+ + "rt:control-plane-protocol/"+ + "rt:type = 'isis:isis'" { description "This augment ISIS routing protocol when used"; } - description - "This augments ISIS protocol LSDB prefix."; - uses fapm-sub-tlvs; + description + "This augments ISIS protocol LSDB prefix."; + uses fapm-sub-tlvs; } /* notification */ + notification flex-algo-not-supported { uses isis:notification-instance-hdr; leaf flex-algo-number { diff --git a/experimental/ietf-extracted-YANG-modules/ietf-lisp-address-types@2024-10-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-lisp-address-types@2024-10-20.yang index 43093fbd5..4a424e8fc 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-lisp-address-types@2024-10-20.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-lisp-address-types@2024-10-20.yang @@ -19,6 +19,7 @@ module ietf-lisp-address-types { contact "WG Web: WG List: + Editor: Vina Ermagan diff --git a/experimental/ietf-extracted-YANG-modules/ietf-lisp-etr@2024-10-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-lisp-etr@2024-10-20.yang index e1869b08b..700314b7b 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-lisp-etr@2024-10-20.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-lisp-etr@2024-10-20.yang @@ -25,7 +25,6 @@ module ietf-lisp-etr { "RFC 8349: A YANG Data Model for Routing Management (NMDA version)"; } - organization "IETF LISP (Locator/ID Separation Protocol) Working Group"; contact diff --git a/experimental/ietf-extracted-YANG-modules/ietf-lisp-itr@2024-10-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-lisp-itr@2024-10-20.yang index bb966fba8..28310993b 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-lisp-itr@2024-10-20.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-lisp-itr@2024-10-20.yang @@ -28,6 +28,7 @@ module ietf-lisp-itr { contact "WG Web: WG List: + Editor: Vina Ermagan diff --git a/experimental/ietf-extracted-YANG-modules/ietf-lm-hierarchy@2025-07-06.yang b/experimental/ietf-extracted-YANG-modules/ietf-lm-hierarchy@2025-07-06.yang new file mode 100644 index 000000000..fe4a37cf3 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-lm-hierarchy@2025-07-06.yang @@ -0,0 +1,201 @@ +module ietf-lm-hierarchy { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-lm-hierarchy"; + prefix lm; + + import ietf-inet-types { prefix inet; } + import ietf-yang-types { prefix yang; } + + organization + "IETF Network Modeling (NETMOD) Working Group"; + + contact + "WG Web: + WG List: + + Author: Keenan Williams + "; + + description + "This module defines a hierarchical topology model for + distributed language models (LMs), including request + escalation, authentication, and inter-node coordination. + + Copyright (c) 2025 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 Revised 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 + (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself + for full legal notices."; + + revision 2025-07-06 { + description "Initial version"; + reference "RFC XXXX: Hierarchical Topology for Language Model + Coordination"; + } + + feature pluggable-token-validation { + description + "Indicates support for pluggable token validation + (e.g., JWTs, OIDC, or COSE)"; + } + + identity lm-node-type { + description "Base identity for LM node types."; + } + + identity tiny-lm { + base lm-node-type; + description "A lightweight edge-deployed language model."; + } + + identity small-lm { + base lm-node-type; + description "A mid-tier aggregator or summarizer."; + } + + identity large-lm { + base lm-node-type; + description "A central reasoning or escalation endpoint."; + } + + grouping auth-token-grouping { + description "Reusable auth-token structure."; + leaf auth-token { + type string; + description "A signed authentication/authorization token."; + } + } + + container lm-node { + description "Node-level configuration and operational state."; + + leaf node-id { + type string; + mandatory true; + description "Unique identifier of this LM node."; + } + + leaf node-type { + type identityref { + base lm-node-type; + } + mandatory true; + description "Classification of this node (tiny, small, large)."; + } + + container trust { + description "Token validation configuration."; + if-feature pluggable-token-validation; + + leaf trust-anchor { + type string; + description "Root or public key used for token validation."; + } + + leaf token-scope-enforced { + type boolean; + default true; + description "Whether to enforce scope claims in tokens."; + } + } + + action validate-token { + description + "Validates a received authentication token."; + input { + leaf token { + type string; + mandatory true; + } + } + output { + leaf valid { + type boolean; + } + leaf reason { + type string; + } + } + } + } + + rpc lm-request { + description "Submits an inference or summarization request."; + input { + uses auth-token-grouping; + leaf source-node { + type string; + mandatory true; + } + leaf target-node { + type string; + mandatory true; + } + leaf request-type { + type enumeration { + enum inference; + enum summarization; + } + mandatory true; + } + leaf payload { + type string; + mandatory true; + } + } + output { + leaf result { + type string; + } + leaf status { + type string; + } + } + } + + rpc model-escalation { + description "Forwards a request upward in the hierarchy."; + input { + uses auth-token-grouping; + leaf original-payload { + type string; + } + leaf reason { + type string; + } + } + output { + leaf resolution { + type string; + } + leaf downstream-directive { + type string; + } + } + } + + notification lm-heartbeat { + description "Emitted to indicate liveness of this node."; + leaf sender-node { + type string; + } + leaf status { + type enumeration { + enum alive; + enum degraded; + enum unreachable; + } + } + leaf timestamp { + type yang:date-and-time; + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp-extended@2024-12-01.yang b/experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp-extended@2025-07-05.yang similarity index 88% rename from experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp-extended@2024-12-01.yang rename to experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp-extended@2025-07-05.yang index 29bc48807..374e66b7f 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp-extended@2024-12-01.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp-extended@2025-07-05.yang @@ -90,6 +90,17 @@ module ietf-mpls-mldp-extended { // RFC Editor: replace XXXX with actual RFC number and remove // this note + revision 2025-07-05 { + // RFC Editor: replace the above date with the date of + // publication and remove this note. + description + "Addressing RtgDir review comments"; + reference + "RFC XXXX: Base YANG Data Model for MPLS mLDP"; + // RFC Editor: replace XXXX with actual RFC number and remove + // this note + } + revision 2024-12-01 { // RFC Editor: replace the above date 2024-12-01 with the date of // publication and remove this note. @@ -199,38 +210,6 @@ module ietf-mpls-mldp-extended { } // peer } // mldp-ext-binding-label-peer-state - grouping mldp-ext-binding-label-recur-fec-peer-state { - description - "mLDP label binding peer state."; - - list peer { - key "direction peer advertisement-type"; - description - "List of peers with bindings exchnaged (sent and/or received)"; - leaf peer { - type leafref { - path - "../../../../../../../../../../../../ldp:peers/ldp:peer/" - + "ldp:lsr-id"; - } - description - "[m]LDP peer from which this binding is received, or - to which this binding is advertised."; - } - uses mldp:mldp-binding-label-peer-state-attributes; - - leaf mofrr-status { - when "../direction = 'upstream'" { - description - "This leaf is used for MoFRR upstream direction only."; - } - type lsp-mofrr-role; - description - "The MoFRR status of this LSP"; - } - } // peer - } // mldp-ext-binding-label-recur-fec-peer-state - grouping mldp-ext-capabilities { description "mLDP extended capabilities"; @@ -304,9 +283,9 @@ module ietf-mpls-mldp-extended { } // recursive-fec } // mldp-ext-per-af-config-attributes - grouping recursive-fec-attributes { + grouping recursive-fec-base-attributes { description - "mLDP recursive FEC attributes."; + "mLDP recursive FEC base attributes."; reference "RFC6512: Using Multipoint LDP When the Backbone Has No Route to the Root"; @@ -315,18 +294,24 @@ module ietf-mpls-mldp-extended { description "Recursive root address"; } + } // recursive-fec-base-attributes + + grouping recursive-fec-attributes { + description + "mLDP recursive FEC attributes."; + reference + "RFC6512: Using Multipoint LDP When the + Backbone Has No Route to the Root"; + + uses recursive-fec-base-attributes; + leaf recur-rd { type rt-types:route-distinguisher; description "Route Distinguisher in the VPN-Recursive Opaque Value"; } - leaf multipoint-type { - type mldp:multipoint-type; - description - "The type of multipoint: p2mp or mp2mp"; - } - } // recursive-fec-attributes + } // recursive-fec-attributes /* * Configuration data and operational state data nodes @@ -362,31 +347,31 @@ module ietf-mpls-mldp-extended { uses mldp-ext-per-af-config-attributes; } - // IPv4 configured-leaf-lsps config + // IPv4 static-lsps-leaf config augment "/rt:routing/rt:control-plane-protocols/" + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/mldp:mldp/" - + "mldp:address-families/mldp:ipv4/mldp:configured-leaf-lsps/" + + "mldp:address-families/mldp:ipv4/mldp:static-lsps-leaf/" + "mldp:opaque-element-lspid/mldp:fec-label" { description - "Augmentation for mLDP IPv4 configured-leaf-lsps + "Augmentation for mLDP IPv4 static-lsps-leaf configuration for opaque-element-lspid with recursive-fec"; list recursive-fec { key - "recur-root-address recur-rd"; + "recur-root-address"; description "List of recursive-fec opaque values"; - uses recursive-fec-attributes; + uses recursive-fec-base-attributes; } // recursive-fec } augment "/rt:routing/rt:control-plane-protocols/" + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/mldp:mldp/" - + "mldp:address-families/mldp:ipv4/mldp:configured-leaf-lsps" { + + "mldp:address-families/mldp:ipv4/mldp:static-lsps-leaf" { description - "Augmentation for mLDP IPv4 configured-leaf-lsps + "Augmentation for mLDP IPv4 static-lsps-leaf configuration for other opaque types"; - container opaque-element-transit { + container opaque-element-transit-source { description "Transit IPv4/VPNv4 Source opaque type"; reference @@ -407,12 +392,12 @@ module ietf-mpls-mldp-extended { leaf source-address { type inet:ipv4-address; description - "Source address"; + "Source address (0.0.0.0 refers to wildcard *)"; } leaf group-address { type inet:ipv4-address; description - "Group address"; + "Group address (0.0.0.0 refers to wildcard *)"; } leaf rd { type rt-types:route-distinguisher; @@ -426,9 +411,9 @@ module ietf-mpls-mldp-extended { } uses recursive-fec-attributes; } // fec-label - } // opaque-element-transit + } // opaque-element-transit-source - container opaque-element-bidir { + container opaque-element-transit-bidir { description "Transit IPv4/VPNv4 Bidir opaque type"; reference @@ -438,7 +423,7 @@ module ietf-mpls-mldp-extended { Paths."; list fec-label { key - "root-address rp group-address rd recur-root-address " + "root-address masklen rp group-address rd recur-root-address " + "recur-rd"; description "List of FEC-label bindings"; @@ -447,6 +432,10 @@ module ietf-mpls-mldp-extended { description "Root address"; } + leaf masklen { + type uint8; + description "Mask length for the subnet"; + } leaf rp { type inet:ipv4-address; description @@ -469,7 +458,7 @@ module ietf-mpls-mldp-extended { } uses recursive-fec-attributes; } // fec-label - } // opaque-element-bidir + } // opaque-element-transit-bidir } // IPv6 config @@ -564,7 +553,7 @@ module ietf-mpls-mldp-extended { + "mldp:bindings" { description "Augmentation for mLDP IPv4 bindings extended type."; - container opaque-element-transit { + container opaque-element-transit-source { description "Transit IPv4/VPNv4 Source opaque type"; reference @@ -580,12 +569,12 @@ module ietf-mpls-mldp-extended { leaf source-address { type inet:ipv4-address; description - "Source address"; + "Source address (0.0.0.0 refers to wildcard *)"; } leaf group-address { type inet:ipv4-address; description - "Group address"; + "Group address (0.0.0.0 refers to wildcard *)"; } leaf rd { type rt-types:route-distinguisher; @@ -600,9 +589,9 @@ module ietf-mpls-mldp-extended { uses recursive-fec-attributes; uses mldp-ext-binding-label-peer-state; } // fec-label - } // opaque-element-transit + } // opaque-element-transit-source - container opaque-element-bidir { + container opaque-element-transit-bidir { description "Transit IPv4/VPNv4 Bidir opaque type"; reference @@ -612,9 +601,13 @@ module ietf-mpls-mldp-extended { Paths."; list fec-label { key - "rp group-address rd recur-root-address recur-rd"; + "masklen rp group-address rd recur-root-address recur-rd"; description "List of FEC-label bindings"; + leaf masklen { + type uint8; + description "Mask length for the subnet"; + } leaf rp { type inet:ipv4-address; description @@ -638,7 +631,7 @@ module ietf-mpls-mldp-extended { uses recursive-fec-attributes; uses mldp-ext-binding-label-peer-state; } // fec-label - } // opaque-element-bidir + } // opaque-element-transit-bidir } // IPv6 bindings state @@ -646,7 +639,7 @@ module ietf-mpls-mldp-extended { + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/mldp:mldp/" + "mldp:address-families/ipv6/roots/root/bindings" { description "Augmentation for mLDP IPv6 bindings."; - container opaque-element-transit { + container opaque-element-transit-source { config false; description "Transit IPv6/VPNv6 Source opaque type"; @@ -664,12 +657,12 @@ module ietf-mpls-mldp-extended { leaf source-address { type inet:ipv6-address; description - "Source address"; + "Source address (::0 refers to wildcard *)"; } leaf group-address { type inet:ipv6-address; description - "Group address"; + "Group address (::0 refers to wildcard *)"; } leaf rd { type rt-types:route-distinguisher; @@ -684,9 +677,9 @@ module ietf-mpls-mldp-extended { uses recursive-fec-attributes; uses mldp-ext-binding-label-peer-state; } // fec-label - } // opaque-element-transit + } // opaque-element-transit-source - container opaque-element-bidir { + container opaque-element-transit-bidir { config false; description "Transit IPv6/VPNv6 Bidir opaque type"; @@ -697,9 +690,13 @@ module ietf-mpls-mldp-extended { Paths."; list fec-label { key - "rp group-address rd recur-root-address recur-rd"; + "masklen rp group-address rd recur-root-address recur-rd"; description "List of FEC-label bindings"; + leaf masklen { + type uint8; + description "Mask length for the subnet"; + } leaf rp { type inet:ipv6-address; description @@ -723,7 +720,7 @@ module ietf-mpls-mldp-extended { uses recursive-fec-attributes; uses mldp-ext-binding-label-peer-state; } // fec-label - } // opaque-element-bidir + } // opaque-element-transit-bidir } // IPv4 bindings opaque-element-lspid state @@ -735,11 +732,10 @@ module ietf-mpls-mldp-extended { "Augmentation for mLDP IPv4 bindings opaque type LSP ID."; list recursive-fec { key - "recur-root-address recur-rd"; + "recur-root-address"; description "List of recursive opaque values"; - uses recursive-fec-attributes; - uses mldp-ext-binding-label-recur-fec-peer-state; + uses recursive-fec-base-attributes; } // recursive-fec } @@ -751,12 +747,11 @@ module ietf-mpls-mldp-extended { description "Augmentation for mLDP IPv6 bindings with opaque type LSP ID."; list recursive-fec { - key "recur-root-address recur-rd"; + key "recur-root-address"; config false; description "List of recursive opaque values"; - uses recursive-fec-attributes; - uses mldp-ext-binding-label-recur-fec-peer-state; + uses recursive-fec-base-attributes; } // recursive-fec } @@ -859,9 +854,9 @@ module ietf-mpls-mldp-extended { } // list root } // roots - container configured-leaf-lsps { + container static-lsps-leaf { description - "Configured multicast LSPs."; + "Statically Configured multicast LSPs at leaf node."; container opaque-element-lspid { description @@ -892,15 +887,15 @@ module ietf-mpls-mldp-extended { } list recursive-fec { key - "recur-root-address recur-rd"; + "recur-root-address"; description "List of recursive opaque values"; - uses recursive-fec-attributes; + uses recursive-fec-base-attributes; } // recursive-fec } // fec-label } // opaque-element-lspid - container opaque-element-transit { + container opaque-element-transit-source { description "Transit IPv6/VPNv6 Source opaque type"; reference @@ -921,12 +916,12 @@ module ietf-mpls-mldp-extended { leaf source-address { type inet:ipv6-address; description - "Source address"; + "Source address (::0 refers to wildcard *)"; } leaf group-address { type inet:ipv6-address; description - "Group address"; + "Group address (::0 refers to wildcard *)"; } leaf rd { type rt-types:route-distinguisher; @@ -940,8 +935,9 @@ module ietf-mpls-mldp-extended { } uses recursive-fec-attributes; } // fec-label - } // opaque-element-transit - container opaque-element-bidir { + } // opaque-element-transit-source + + container opaque-element-transit-bidir { description "Transit IPv6/VPNv6 Bidir opaque type"; reference @@ -951,7 +947,7 @@ module ietf-mpls-mldp-extended { Paths."; list fec-label { key - "root-address rp group-address rd recur-root-address " + "root-address masklen rp group-address rd recur-root-address " + "recur-rd"; description "List of FEC-label bindings."; @@ -960,6 +956,10 @@ module ietf-mpls-mldp-extended { description "Root address"; } + leaf masklen { + type uint8; + description "Mask length for the subnet"; + } leaf rp { type inet:ipv6-address; description @@ -982,8 +982,8 @@ module ietf-mpls-mldp-extended { } uses recursive-fec-attributes; } // fec-label - } // opaque-element-bidir - } // configured-leaf-lsps + } // opaque-element-transit-bidir + } // static-lsps-leaf } // ipv6 } @@ -1000,15 +1000,15 @@ module ietf-mpls-mldp-extended { container recursive-fec { description "Container of recursive opaque values"; - uses recursive-fec-attributes; + uses recursive-fec-base-attributes; } // recursive-fec } augment "/mldp:mpls-mldp-fec-event/mldp:opaque-element" { description "Augmentation for mLDP notification for opaque types other than lspid."; - case opaque-element-transit { - container opaque-element-transit { + case opaque-element-transit-source { + container opaque-element-transit-source { description "Transit IP/VPN Source opaque type"; reference @@ -1041,11 +1041,11 @@ module ietf-mpls-mldp-extended { Context."; } uses recursive-fec-attributes; - } // opaque-element-transit container - } // opaque-element-transit case + } // opaque-element-transit-source container + } // opaque-element-transit-source case - case opaque-element-bidir { - container opaque-element-bidir { + case opaque-element-transit-bidir { + container opaque-element-transit-bidir { description "Transit IP/VPN Bidir opaque type"; reference @@ -1058,6 +1058,10 @@ module ietf-mpls-mldp-extended { description "Root address"; } + leaf masklen { + type uint8; + description "Mask length for the subnet"; + } leaf rp { type inet:ip-address; description @@ -1079,7 +1083,7 @@ module ietf-mpls-mldp-extended { Context."; } uses recursive-fec-attributes; - } // opaque-element-bidir container - } // opaque-element-bidir case + } // opaque-element-transit-bidir container + } // opaque-element-transit-bidir case } // augment } // module diff --git a/experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp@2024-12-01.yang b/experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp@2025-07-05.yang similarity index 96% rename from experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp@2024-12-01.yang rename to experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp@2025-07-05.yang index 349356adb..060e6c4e3 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp@2024-12-01.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp@2025-07-05.yang @@ -79,6 +79,17 @@ module ietf-mpls-mldp { // RFC Editor: replace XXXX with actual RFC number and remove // this note + revision 2025-07-05 { + // RFC Editor: replace the above date with the date of + // publication and remove this note. + description + "Addressing RtgDir review comments"; + reference + "RFC XXXX: Base YANG Data Model for MPLS mLDP"; + // RFC Editor: replace XXXX with actual RFC number and remove + // this note + } + revision 2024-12-01 { // RFC Editor: replace the above date 2024-12-01 with the date of // publication and remove this note. @@ -413,9 +424,9 @@ module ietf-mpls-mldp { } // list root } // roots - container configured-leaf-lsps { + container static-lsps-leaf { description - "Configured multicast LSPs."; + "Statically Configured multicast LSPs at leaf node."; container opaque-element-lspid { description "Generic LSP identifier opaque element FEC-label bindings container"; @@ -445,7 +456,7 @@ module ietf-mpls-mldp { } } // fec-label } // opaque-element-lspid - } // configured-leaf-lsps + } // static-lsps-leaf } // ipv4 } // list address-family } // mldp diff --git a/experimental/ietf-extracted-YANG-modules/ietf-network-inventory@2025-02-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-network-inventory@2025-07-02.yang similarity index 53% rename from experimental/ietf-extracted-YANG-modules/ietf-network-inventory@2025-02-03.yang rename to experimental/ietf-extracted-YANG-modules/ietf-network-inventory@2025-07-02.yang index 82662841f..7fe08485a 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-network-inventory@2025-02-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-network-inventory@2025-07-02.yang @@ -68,7 +68,7 @@ module ietf-network-inventory { // RFC Ed.: update the date below with the date of RFC publication // and remove this note. - revision 2025-02-03 { + revision 2025-07-02 { description "Initial version"; reference @@ -118,12 +118,12 @@ module ietf-network-inventory { typedef ne-ref { type leafref { - path "/nwi:network-inventory/nwi:network-elements" - + "/nwi:network-element/nwi:ne-id"; + path "/nwi:network-inventory/nwi:network-elements" + + "/nwi:network-element/nwi:ne-id"; } description "This type is intended to be used by data models that need to - reference Network Element."; + reference Network Element."; } /* @@ -133,19 +133,18 @@ module ietf-network-inventory { grouping port-ref { description "This grouping is intended to be used by data models that need - to reference a port component within a Network Element."; + to reference a port component within a Network Element."; leaf ne-ref { type nwi:ne-ref; description "The reference to the Network Element which contains the - port to be referenced."; + port to be referenced."; } leaf port-ref { type leafref { - path - "/nwi:network-inventory/nwi:network-elements/" - + "nwi:network-element[nwi:ne-id=current()/../ne-ref]" - + "/nwi:components/nwi:component/nwi:component-id"; + path "/nwi:network-inventory/nwi:network-elements/" + + "nwi:network-element[nwi:ne-id=current()/../ne-ref]" + + "/nwi:components/nwi:component/nwi:component-id"; } must "derived-from-or-self (/nwi:network-inventory/ nwi:network-elements/nwi:network-element @@ -169,10 +168,9 @@ module ietf-network-inventory { } leaf transceiver-module-ref { type leafref { - path - "/nwi:network-inventory/nwi:network-elements/" - + "nwi:network-element[nwi:ne-id=current()/../ne-ref]" - + "/nwi:components/nwi:component/nwi:component-id"; + path "/nwi:network-inventory/nwi:network-elements/" + + "nwi:network-element[nwi:ne-id=current()/../ne-ref]" + + "/nwi:components/nwi:component/nwi:component-id"; } must "derived-from-or-self (/nwi:network-inventory/ nwi:network-elements/nwi:network-element @@ -184,24 +182,160 @@ module ietf-network-inventory { } leaf-list channel-ref { type leafref { - path "/nwi:network-inventory/nwi:network-elements" - + "/nwi:network-element[nwi:ne-id=current()/../ne-ref]/" - + "nwi:components/" - + "nwi:component[nwi:component-id=" - + "current()/../transceiver-module-ref]/" - + "nwi:transceiver-module-specific-info/" - + "nwi:breakout-channels/nwi:breakout-channel/" - + "nwi:channel-id"; + path "/nwi:network-inventory/nwi:network-elements" + + "/nwi:network-element[nwi:ne-id=current()/../ne-ref]/" + + "nwi:components/" + + "nwi:component[nwi:component-id=" + + "current()/../transceiver-module-ref]/" + + "nwi:breakout-channels/nwi:breakout-channel/" + + "nwi:channel-id"; } description "The references to the breakout channels."; } } - grouping common-entity-attributes { + grouping component-attributes { description - "The set of attributes which are common to all the entities - (e.g., component, network elements) defined in this module."; + "The set of common attributes of a component. + + This grouping is intended also to be re-used by data models + that need to report the common attributes of a component."; + leaf component-id { + type string; + description + "An identifier that uniquely identifies the component + in a node."; + } + leaf class { + type union { + type identityref { + base ianahw:hardware-class; + } + type identityref { + base non-hardware-component-class; + } + } + config false; + mandatory true; + description + "The type of the component."; + } + uses ne-component-common-entity-attributes { + refine "hardware-rev" { + description + "The vendor-specific hardware revision string for + the component. The preferred value is the hardware + revision identifier actually printed on the + component itself (if present)."; + reference + "RFC 6933: Entity MIB (Version 4) - + entPhysicalHardwareRev"; + } + refine "software-rev" { + reference + "RFC 6933: Entity MIB (Version 4) - + entPhysicalSoftwareRev"; + } + refine "mfg-name" { + description + "The name of the manufacturer of this physical + component. + The preferred value is the manufacturer name + string actually printed on the component itself + (if present). + + Note that comparisons between instances of the + 'model-name', 'firmware-rev', 'software-rev', and + 'serial-number' nodes are only meaningful amongst + components with the same value of 'mfg-name'. + + If the manufacturer name string associated with + the physical component is unknown to the server, + then this node is not instantiated."; + reference + "RFC 6933: Entity MIB (Version 4) - + entPhysicalMfgName"; + } + refine "mfg-date" { + description + "The date of manufacturing of the managed + component."; + reference + "RFC 6933: Entity MIB (Version 4) - + entPhysicalMfgDate"; + } + } + leaf firmware-rev { + type string; + config false; + description + "The vendor-specific firmware revision string for the + component."; + reference + "RFC 6933: Entity MIB (Version 4) - + entPhysicalFirmwareRev"; + } + leaf part-number { + type string; + config false; + description + "The vendor-specific part number of the component + type. It is expected that vendors assign unique part + numbers to different component types within the + scope of the vendor."; + } + leaf asset-id { + type string; + config false; + description + "This node is a user-assigned asset tracking + identifier for the component. + + A server implementation MAY map this leaf to the + entPhysicalAssetID MIB object. Such an + implementation needs to use some mechanism to handle + the differences in size and characters allowed + between this leaf and entPhysicalAssetID. + + The definition of such a mechanism is outside the + scope of this document."; + reference + "RFC 6933: Entity MIB (Version 4) - + entPhysicalAssetID"; + } + leaf is-fru { + type boolean; + config false; + description + "This node indicates whether or not this component is + considered a 'field-replaceable unit' by the vendor. + If this node contains the value 'true', then this + component identifies a field-replaceable unit. + For all components that are permanently contained + within a field-replaceable unit, the value 'false' + should be returned for this node."; + reference + "RFC 6933: Entity MIB (Version 4) - + entPhysicalIsFRU"; + } + leaf-list uri { + type inet:uri; + config false; + description + "This node contains identification information about + the component."; + reference + "RFC 6933: Entity MIB (Version 4) - entPhysicalUris"; + } + } + + grouping basic-common-entity-attributes { + description + "The set of basic attributes which are common to all the + entities (e.g., component, network elements, location, passive + entities) defined in this module and in other inventory + modules."; leaf uuid { type yang:uuid; config false; @@ -232,6 +366,13 @@ module ietf-network-inventory { "The alias name of the entity (e.g., component). This alias name can be specified by network manager."; } + } + + grouping ne-component-common-entity-attributes { + description + "The set of attributes which are common to all the entities + (e.g., component, network elements) defined in this module."; + uses basic-common-entity-attributes; leaf hardware-rev { type string; config false; @@ -316,7 +457,7 @@ module ietf-network-inventory { description "The NE type."; } - uses common-entity-attributes; + uses ne-component-common-entity-attributes; container components { description "The top-level container for the list of components @@ -325,109 +466,7 @@ module ietf-network-inventory { key "component-id"; description "The list of components within a network element."; - leaf component-id { - type string; - description - "An identifier that uniquely identifies the component - in a node."; - } - leaf class { - type union { - type identityref { - base ianahw:hardware-class; - } - type identityref { - base non-hardware-component-class; - } - } - config false; - mandatory true; - description - "The type of the component."; - } - uses common-entity-attributes { - refine "hardware-rev" { - description - "The vendor-specific hardware revision string for - the component. The preferred value is the hardware - revision identifier actually printed on the - component itself (if present)."; - reference - "RFC 6933: Entity MIB (Version 4) - - entPhysicalHardwareRev"; - } - refine "software-rev" { - reference - "RFC 6933: Entity MIB (Version 4) - - entPhysicalSoftwareRev"; - } - refine "mfg-name" { - description - "The name of the manufacturer of this physical - component. - The preferred value is the manufacturer name - string actually printed on the component itself - (if present). - - Note that comparisons between instances of the - 'model-name', 'firmware-rev', 'software-rev', and - 'serial-number' nodes are only meaningful amongst - components with the same value of 'mfg-name'. - - If the manufacturer name string associated with - the physical component is unknown to the server, - then this node is not instantiated."; - reference - "RFC 6933: Entity MIB (Version 4) - - entPhysicalMfgName"; - } - refine "mfg-date" { - description - "The date of manufacturing of the managed - component."; - reference - "RFC 6933: Entity MIB (Version 4) - - entPhysicalMfgDate"; - } - } - leaf firmware-rev { - type string; - config false; - description - "The vendor-specific firmware revision string for the - component."; - reference - "RFC 6933: Entity MIB (Version 4) - - entPhysicalFirmwareRev"; - } - leaf part-number { - type string; - config false; - description - "The vendor-specific part number of the component - type. It is expected that vendors assign unique part - numbers to different component types within the - scope of the vendor."; - } - leaf asset-id { - type string; - config false; - description - "This node is a user-assigned asset tracking - identifier for the component. - - A server implementation MAY map this leaf to the - entPhysicalAssetID MIB object. Such an - implementation needs to use some mechanism to handle - the differences in size and characters allowed - between this leaf and entPhysicalAssetID. - - The definition of such a mechanism is outside the - scope of this document."; - reference - "RFC 6933: Entity MIB (Version 4) - - entPhysicalAssetID"; - } + uses component-attributes; container child-component-ref { config false; description @@ -456,109 +495,57 @@ module ietf-network-inventory { config false; description "The identifier of the component that physically - contains this component. - - If this leaf is not instantiated, it indicates that - this component is not contained in any other - component. - - In the event that a physical component is contained - by more than one physical component - (e.g., double-wide modules), this node contains the - identifier of one of these components. - An implementation MUST use the same name every time - this node is instantiated."; + contains this component. + + If this leaf is not instantiated, it indicates that + this component is not contained in any other + component. + + In the event that a physical component is contained + by more than one physical component + (e.g., double-wide modules), this node contains the + identifier of one of these components. + An implementation MUST use the same name every time + this node is instantiated."; reference - "RFC 6933: Entity MIB (Version 4) - + "RFC 6933: Entity MIB (Version 4) - entPhysicalContainedIn"; - } - leaf is-fru { + leaf is-main { + when "derived-from-or-self(../nwi:class, " + + "'ianahw:chassis')"; type boolean; config false; description - "This node indicates whether or not this component is - considered a 'field-replaceable unit' by the vendor. - If this node contains the value 'true', then this - component identifies a field-replaceable unit. - For all components that are permanently contained - within a field-replaceable unit, the value 'false' - should be returned for this node."; - reference - "RFC 6933: Entity MIB (Version 4) - - entPhysicalIsFRU"; - } - leaf-list uri { - type inet:uri; - config false; - description - "This node contains identification information about - the component."; - reference - "RFC 6933: Entity MIB (Version 4) - entPhysicalUris"; - } - container chassis-specific-info { - when - "derived-from-or-self(../nwi:class, - 'ianahw:chassis')"; - config false; - description - "This container contains some attributes belong to - chassis only."; - } - container slot-specific-info { - when - "derived-from-or-self(../nwi:class, - 'ianahw:container')"; - config false; - description - "This container contains some attributes belong to - slot only."; - } - container board-specific-info { - when - "derived-from-or-self(../nwi:class, - 'ianahw:module')"; - config false; - description - "This container contains some attributes belong to - board only."; - } - container port-specific-info { - when - "derived-from-or-self(../nwi:class, 'ianahw:port')"; - config false; - description - "This container contains some attributes belong to - port only."; + "This node indicates whether the chassis is taking or + not the 'main' role. + + This node is applicable only to scenarios where + there are chassis components which can take the + 'main' role (e.g., multi-chassis network elements), + otherwise it is omitted."; } - container transceiver-module-specific-info { - when - "derived-from-or-self(../nwi:class, - 'nwi:transceiver-module')"; + container breakout-channels { + when "derived-from-or-self(../nwi:class, " + + "'nwi:transceiver-module')"; + presence + "When present, it indicates that port breakout is + supported."; config false; description - "This container contains some attributes belong to - transceivers modules only."; - container breakout-channels { - presence - "When present, it indicates that port breakout is - supported."; + "Top level container for the list of breakout + channels supported by the transceivers module."; + list breakout-channel { + key "channel-id"; description - "Top level container for the list of breakout - channels supported by the transceivers module."; - list breakout-channel { - key "channel-id"; - leaf channel-id { - type uint8; - description - "An identifier that uniquely identifies the - breakout channel within the transceiver - module."; - } + "The list of breakout channels supported by the + transceivers module."; + leaf channel-id { + type uint8; description - "The list of breakout channels supported by the - transceivers module."; + "An identifier that uniquely identifies the + breakout channel within the transceiver + module."; } } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-nwi-passive-inventory@2025-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-nwi-passive-inventory@2025-07-07.yang new file mode 100644 index 000000000..57d3894a1 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-nwi-passive-inventory@2025-07-07.yang @@ -0,0 +1,531 @@ +module ietf-nwi-passive-inventory { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-nwi-passive-inventory"; + prefix nwi-passive; + + import ietf-network-inventory { + prefix nwi; + reference + "RFCXXXX: A YANG Data Model for Network Inventory"; + //RFC Editor: replace XXXX with actual RFC number + //and remove this note + } + import ietf-ni-location { + prefix nil; + reference + "RFCYYYY: A YANG Data Model for Network Inventory Location"; + //RFC Editor: replace YYYY with actual RFC number + //and remove this note + } + organization + "IETF Network Inventory YANG (ivy) Working Group"; + contact + "WG Web: + WG List: + + Editor: Chaode Yu + + + Editor: Aihua Guo + + + Editor: Italo Busi + "; + + description + "This YANG module specifies a data model for passive + devices, such as fibers, cables, and passive sites, + deployed within and between network elements. + + The model fully conforms to the Network Management + Datastore Architecture (NMDA). + + Copyright (c) 2023 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 Revised 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. + + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL + NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', + 'MAY', and 'OPTIONAL' in this document are to be interpreted as + described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, + they appear in all capitals, as shown here."; + + // 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 2025-07-07 { + description + "Initial version"; + reference + "RFC XXXX: A YANG Data Model for Passive Device Info in + Network Inventory."; + //RFC Editor: replace XXXX with actual RFC number, update date + //information and remove this note + } + + /* Identities */ + identity fiber-type { + description + "Base identity for fiber types."; + } + identity G652A { + base fiber-type; + description + "ITU-T G.652A fiber."; + } + identity G652B { + base fiber-type; + description + "ITU-T G.652B fiber."; + } + identity G652C { + base fiber-type; + description + "ITU-T G.652C fiber."; + } + identity G652D { + base fiber-type; + description + "ITU-T G.652D fiber."; + } + identity G653 { + base fiber-type; + description + "ITU-T G.653 fiber."; + } + identity G654 { + base fiber-type; + description + "ITU-T G.654 fiber."; + } + identity G655 { + base fiber-type; + description + "ITU-T G.655 fiber."; + } + identity G656 { + base fiber-type; + description + "ITU-T G.656 fiber."; + } + identity G657A1 { + base fiber-type; + description + "ITU-T G.657A1 fiber."; + } + identity G657A2 { + base fiber-type; + description + "ITU-T G.657A2 fiber."; + } + identity G657B { + base fiber-type; + description + "ITU-T G.657B fiber."; + } + identity other { + base fiber-type; + description + "Other type of fiber."; + } + + identity cable-type { + description + "Base identity for cable types."; + } + identity optical-fiber { + base cable-type; + description + "Fiber optic cable."; + } + identity electrical-cable { + base cable-type; + description + "Electrical cable."; + } + identity coaxial-cable { + base electrical-cable; + description + "Coaxial cable."; + } + + identity cable-role { + description + "Base identity for cable roles."; + } + identity backbone { + base cable-role; + description + "Backbone cable."; + } + identity aggregation { + base cable-role; + description + "Aggregation cable."; + } + identity access { + base cable-role; + description + "Access cable."; + } + identity trunk { + base cable-role; + description + "Trunk cable."; + } + identity distribution { + base cable-role; + description + "Distribution cable."; + } + identity branch { + base cable-role; + description + "Branch cable."; + } + + identity passive-port-type { + description + "Base identity for passive port types."; + } + identity service-port { + base passive-port-type; + description + "Service port."; + } + identity input-port { + base passive-port-type; + description + "Input port."; + } + identity output-port { + base passive-port-type; + description + "Output port."; + } + identity p2mp-port { + base passive-port-type; + description + "Input port."; + } + + identity connected-device-type { + description + "Base identity for connected device types."; + } + identity passive-device { + base connected-device-type; + description + "Passive/unmanaged device."; + } + identity active-device { + base connected-device-type; + description + "Active device, e.g. network element."; + } + + identity passive-device-type { + description + "Base identity for passive device types."; + } + identity ODF { + base passive-device-type; + description + "Optical Distribution Frame."; + } + identity WDM { + base passive-device-type; + description + "Wavelength Division Multiplexer."; + } + identity FAT { + base passive-device-type; + description + "Fiber Access Terminal."; + } + identity FDT { + base passive-device-type; + description + "Fiber Distribution Terminal."; + } + identity ATB { + base passive-device-type; + description + "Access Terminal Box."; + } + + /* Groupings */ + grouping connected-device-end { + description + "Attributes applicable to connected device end."; + + leaf device-type { + type identityref { + base connected-device-type; + } + description + "Type of connected device."; + } + + choice connected-device-type { + description + "Device end based on the type of connected device."; + case passive { + leaf device-id { + type string; + must "derived-from-or-self(../device-type, + 'nwi-passive:passive-device')"; + description + "Connected passive device identifier."; + } + } + case active { + leaf ne-ref { + type leafref { + path "/nwi:network-inventory/nwi:network-elements" + + "/nwi:network-element/nwi:ne-id"; + } + must "derived-from-or-self(../device-type, + 'nwi-passive:active-device')"; + description + "Referenced Network Element (NE)."; + } + leaf component-ref { + type leafref { + path "/nwi:network-inventory/nwi:network-elements" + + "/nwi:network-element[nwi:ne-id=current()/.." + + "/ne-ref]/nwi:components/nwi:component" + + "/nwi:component-id"; + } + must "derived-from-or-self(../device-type, + 'nwi-passive:active-device')"; + description + "Referenced connected active device's component, + e.g. port component."; + } + } + } + } + + grouping connected-device-ref { + description + "Attributes applicable to connected devices."; + + container a-end { + description + "A-end device reference"; + uses connected-device-end; + } + + container z-end { + description + "Z-end device reference"; + uses connected-device-end; + } + } + + grouping common-cable-attributes { + description + "Common attributes of cables applicable to the cable + and its child cables."; + + leaf id { + type string; + description + "Cable identifier."; + } + + leaf length { + type uint32; + units "meter"; + description + "Length of the cable in meter."; + } + + uses connected-device-ref; + } + + grouping optical-cable-attributes { + description + "Attributes applicable to fiber optic cables."; + + container optical-cable { + when + "derived-from-or-self(../cable-type, 'optical-fiber')"; + + description + "Container for attributes associated with fiber + optic cables."; + + leaf fiber-core-num { + type uint32; + description + "Number of fiber cores within the cable."; + } + leaf fiber-type { + type identityref { + base fiber-type; + } + description + "Type of fiber contained in the cable."; + } + leaf attenuation { + type decimal64 { + fraction-digits 2; + } + units "dB"; + description + "The fiber attenuation in dB."; + } + } + } + + grouping cable-attributes { + description + "Attributes of cables."; + + uses common-cable-attributes; + uses nwi:basic-common-entity-attributes; + + leaf cable-type { + type identityref { + base cable-type; + } + description + "Type of cable."; + } + + leaf cable-role { + type identityref { + base cable-role; + } + description + "Role of cable."; + } + + uses optical-cable-attributes; + } + + grouping child-cables { + description + "Attributes applicable to child cables that are concatnated + to form the cable."; + + list child-cable { + key "index"; + min-elements 2; + description + "Ordered list of concatenated child cables."; + + leaf index { + type uint8; + description + "An index number used to identify the concatenation + order of the child cables."; + } + + uses common-cable-attributes; + } + } + + grouping cables { + description + "Attributes applicable to cables."; + + list cable { + key "id"; + description + "List of cables."; + + uses cable-attributes; + uses child-cables; + } + } + + grouping passive-device-ports { + description + "Attributes applicable to passive device ports."; + + list passive-port { + key "id"; + description + "List of ports on a passive device."; + + leaf id { + type string; + description + "Port identifier."; + } + uses nwi:basic-common-entity-attributes; + leaf port-type { + type identityref { + base passive-port-type; + } + description + "Type of passive port."; + } + leaf fiber-core-num { + type uint32; + description + "Number of fiber cores within the port."; + } + } + } + + grouping passive-devices { + description + "Attributes applicable to passive devices."; + + list passive-device { + key "id"; + description + "List of passive devices."; + + leaf id { + type string; + description + "Cable identifier."; + } + uses nwi:basic-common-entity-attributes; + leaf device-type { + type identityref { + base passive-device-type; + } + description + "Type of passive device."; + } + leaf-list custom-tags { + type string; + description + "Customized tags, e.g. RFID, QR code that are + attached to the device."; + } + leaf location-ref { + type nil:ni-location-ref; + description + "Referenced location for the passive device."; + } + uses passive-device-ports; + } + } + + /* Augmentation */ + augment "/nwi:network-inventory" { + description + "Augment network inventory with information + for optical cables and passive devices."; + uses cables; + uses passive-devices; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-optical-impairment-topology@2024-05-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-optical-impairment-topology@2025-06-24.yang similarity index 50% rename from experimental/ietf-extracted-YANG-modules/ietf-optical-impairment-topology@2024-05-21.yang rename to experimental/ietf-extracted-YANG-modules/ietf-optical-impairment-topology@2025-06-24.yang index 70496a105..71d430308 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-optical-impairment-topology@2024-05-21.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-optical-impairment-topology@2025-06-24.yang @@ -2,39 +2,36 @@ module ietf-optical-impairment-topology { yang-version 1.1; namespace "urn:ietf:params:xml" + ":ns:yang:ietf-optical-impairment-topology"; - prefix "oit"; + prefix oit; import ietf-network { - prefix "nw"; + prefix nw; reference "RFC 8345: A YANG Data Model for Network Topologies"; } - import ietf-network-topology { - prefix "nt"; + prefix nt; reference "RFC 8345: A YANG Data Model for Network Topologies"; } - import ietf-te-topology { - prefix "tet"; + prefix tet; reference - "RFC 8795: YANG Data Model for Traffic Engineering (TE) - Topologies"; + "RFC 8795: YANG Data Model for Traffic Engineering (TE) + Topologies"; } - import ietf-te-types { - prefix "te-types"; + prefix te-types; reference "RFC YYYY: Updated Common YANG Data Types for Traffic - Engineering"; + Engineering"; } /* Note: The RFC Editor will replace YYYY with the number assigned to the RFC once draft-ietf-teas-rfc8776-update becomes an RFC.*/ import ietf-layer0-types { - prefix "l0-types"; + prefix l0-types; reference "RFC ZZZZ: A YANG Data Model for Layer 0 Types"; } @@ -44,7 +41,6 @@ module ietf-optical-impairment-topology { organization "IETF CCAMP Working Group"; - contact "WG Web: WG List: @@ -53,7 +49,7 @@ module ietf-optical-impairment-topology { Editor: Haomian Zheng Editor: Nicola Sambo Editor: Victor Lopez - Editor: Gabriele Galimberti + Editor: Gabriele Galimberti Editor: Giovanni Martinelli Editor: Jean-Luc Auge Editor: Le Rouzic Esther @@ -63,12 +59,11 @@ module ietf-optical-impairment-topology { Editor: Sergio Belotti Editor: Griseri Enrico Editor: Gert Grammel "; - description "This module contains a collection of YANG definitions for impairment-aware optical networks. - Copyright (c) 2024 IETF Trust and the persons identified as + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -79,15 +74,22 @@ module ietf-optical-impairment-topology { (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."; + the RFC itself for full legal notices. -// RFC Ed.: replace XXXX with actual RFC number and remove -// this note -// replace the revision date with the module publication date -// the format is (year-month-day) - revision 2024-05-21 { + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL + NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', + 'MAY', and 'OPTIONAL' in this document are to be interpreted as + described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, + they appear in all capitals, as shown here."; + + // RFC Ed.: replace XXXX with actual RFC number and remove + // this note + // replace the revision date with the module publication date + // the format is (year-month-day) + + revision 2025-06-24 { description - "Initial Version"; + "Initial version."; reference "RFC XXXX: A Yang Data Model for Impairment-aware Optical Networks"; @@ -102,8 +104,8 @@ module ietf-optical-impairment-topology { description "Individual OTSi(G) protection LSP protection type."; reference - "ITU-T G.873.1 v5.2 (02/2022): Optical transport network: - Linear protection"; + "ITU-T G.873.1 v5.2 (02/2022): Optical transport network: + Linear protection"; } /* @@ -111,71 +113,63 @@ module ietf-optical-impairment-topology { */ grouping amplifier-params { - description "describes parameters for an amplifier"; + description + "Describes parameters for an amplifier"; container amplifier { description - "amplifier type, operatonal parameters are described."; + "Amplifier type, operational parameters are described."; leaf type-variety { type string; - mandatory true ; + mandatory true; description "String identifier of amplifier type referencing - a specification in a separate equipment catalog"; + a specification in a separate equipment catalog"; } container operational { - description "amplifier operational parameters"; + description + "Amplifier operational parameters"; list amplifier-element { key "frequency-range-id stage-order"; description "The list of parallel amplifier elements within an - amplifier used to amplify different frequency ranges. + amplifier used to amplify different frequency ranges. - Two elements in the list must not have the same range - or overlapping ranges."; - leaf frequency-range-id { - type uint16; - description - "The identifier of the frequency range."; - } + Two elements in the list MUST NOT have the same range + or overlapping ranges."; + uses l0-types:frequency-range-with-identifier; leaf stage-order { type uint8; description - "It allows defining for each spectrum badwidth the - cascade order of each amplifier-element."; + "It allows defining for each spectrum bandwidth the + cascade order of each amplifier-element."; } leaf name { type string; description "The name of the amplifier element as specified in - the vendor's specification associated with the - type-variety."; + the vendor's specification associated with the + type-variety."; } leaf type-variety { type string; description "String identifier of amplifier element type - referencing a specification in a separate equipment - catalog. + referencing a specification in a separate equipment + catalog. - This attributes applies only when the type-variety of - the amplifier is not sufficient to describe the - amplifier element type."; - } - container frequency-range { - description - "The frequency range amplified by the amplifier - element."; - uses l0-types:frequency-range; + This attributes applies only when the type-variety of + the amplifier is not sufficient to describe the + amplifier element type."; } container power-param { description "The optical power after the out-voa of each amplifier - element."; + element."; choice power-param { mandatory true; description "Select the mode: channel power or power spectral - density (PSD)."; + density (PSD)."; case channel-power { leaf nominal-carrier-power { type l0-types:power-dbm-or-null; @@ -193,91 +187,92 @@ module ietf-optical-impairment-topology { } } } - } // container power-param + } // container power-param leaf pdl { type l0-types:power-loss-or-null; - description "Polarization Dependent Loss (PDL)"; + description + "Polarization Dependent Loss (PDL)"; } choice amplifier-element-type { mandatory true; description "Identifies whether the amplifier element is an - Optical Amplifier (OA) or a Dynamic Gain Equalizer - (DGE)."; + Optical Amplifier (OA) or a Dynamic Gain Equalizer + (DGE)."; container optical-amplifier { description "The attributes applicable only to amplifier - elements"; + elements"; leaf actual-gain { type l0-types:power-gain-or-null; mandatory true; description "The value of the gain provided by the - amplification stage of the optical amplifier."; + amplification stage of the optical amplifier."; } leaf in-voa { type l0-types:power-loss-or-null; description "Loss introduced by the Variable Optical Attenuator - (VOA) at the input of the amplification stage of - the amplifier, if present"; + (VOA) at the input of the amplification stage of + the amplifier, if present"; } leaf out-voa { type l0-types:power-loss-or-null; description "Loss introduced by the Variable Optical Attenuator - (VOA) at the output of the amplification stage of - the amplifier, if present."; + (VOA) at the output of the amplification stage of + the amplifier, if present."; } leaf tilt-target { type l0-types:decimal-2-or-null; units "dB"; - mandatory true ; + mandatory true; description "The tilt target defined between lower and upper - frequency of the amplifier frequency range."; + frequency of the amplifier frequency range."; } leaf total-output-power { type l0-types:power-dbm-or-null; mandatory true; description "It represent total output power measured in the - range specified by the frequency-range. + range specified by the frequency-range. - Optical power is especially needed to - re-compute/check consistency of span - (fiber + concentrated loss) loss value, with - respect to loss/gain information on elements."; + Optical power is especially needed to + re-compute/check consistency of span + (fiber + concentrated loss) loss value, with + respect to loss/gain information on elements."; } leaf raman-direction { type enumeration { enum co-propagating { description "Co-propagating indicates that optical pump - light is injected in the same direction to the - optical signal that is amplified - (forward pump)."; + light is injected in the same direction to the + optical signal that is amplified + (forward pump)."; } enum counter-propagating { description "Counter-propagating indicates that optical - pump light is injected in opposite direction - to the optical signal that is amplified - (backward pump)."; + pump light is injected in opposite direction + to the optical signal that is amplified + (backward pump)."; } } description "The direction of injection of the raman pump."; } list raman-pump { - key pump-id; + key "pump-id"; description "The list of pumps for the Raman amplifier."; leaf pump-id { type uint16; description "The identifier of a pump within an amplifier - element."; + element."; } leaf frequency { type l0-types:frequency-thz; @@ -289,95 +284,100 @@ module ietf-optical-impairment-topology { units "Watts"; description "The total pump power considering a depolarized - pump at the raman pump central frequency."; + pump at the raman pump central frequency."; } } - } // container optical-amplifier + } // container optical-amplifier container dynamic-gain-equalizer { presence "When present it indicates that the amplifier element - is a Dynamic Gain Equalizer (DGE)"; + is a Dynamic Gain Equalizer (DGE)"; description "The attributes applicable only to DEG amplifier - elements."; + elements."; list media-channel { key "flexi-n"; description "List of media channels represented as (n,m)"; - uses l0-types:flexi-grid-frequency-slot { - refine flexi-m { + refine "flexi-m" { mandatory true; } } - leaf delta-power { type l0-types:power-ratio-or-null; description - " Deviation from the reference carrier power - defined for the OMS."; + "Deviation from the reference carrier power + defined for the OMS."; } } // media channels list - } // container dynamic-gain-equalizer + } // container dynamic-gain-equalizer } // choice amplifier-element-type - } // list amplifier-element - } // container operational - } // container amplifier - } // grouping amplifier-params + } // list amplifier-element + } // container operational + } // container amplifier + } // grouping amplifier-params grouping fiber-params { - description - "String identifier of fiber type referencing a + description + "String identifier of fiber type referencing a specification in a separate equipment catalog"; container fiber { - description "fiber characteristics"; + description + "Fiber characteristics"; leaf type-variety { - type string ; - mandatory true ; - description "fiber type"; + type string; + mandatory true; + description + "Fiber type"; } leaf length { type l0-types:decimal-2-or-null; - units km; - mandatory true ; - description "length of fiber"; + units "km"; + mandatory true; + description + "Length of fiber"; } leaf loss-coef { type l0-types:decimal-2-or-null; - units dB/km; - mandatory true ; - description "loss coefficient of the fiber"; + units "dB/km"; + mandatory true; + description + "Loss coefficient of the fiber"; } leaf total-loss { type l0-types:power-loss-or-null; description "The measured total loss of the fiber, which includes - all possible losses: fiber loss and conn-in and conn-out - losses. + all possible losses: fiber loss and conn-in and conn-out + losses. - This attribute is not present when the total loss cannot - be measured."; + This attribute is not present when the total loss cannot + be measured."; } leaf pmd { type l0-types:decimal-2-or-null; units "ps"; - description "pmd of the fiber"; + description + "PMD of the fiber"; } - leaf conn-in{ + leaf conn-in { type l0-types:power-loss-or-null; - description "connector-in"; + description + "connector-in"; } - leaf conn-out{ + leaf conn-out { type l0-types:power-loss-or-null; - description "connector-out"; + description + "connector-out"; } } } grouping roadm-common-path { description - "The optical impairments of a ROADM which are common to all - its paths (express path, add path or drop path)."; + "The optical impairments of a ROADM which are common to all + its paths (express path, add path or drop path)."; leaf roadm-pmd { type union { type decimal64 { @@ -387,34 +387,36 @@ module ietf-optical-impairment-topology { type empty; } units "ps"; - description - "Polarization Mode Dispersion (PMD), when known, or an - empty value when unknown."; + description + "Polarization Mode Dispersion (PMD), when known, or an + empty value when unknown."; } leaf roadm-cd { type l0-types:decimal-5-or-null; units "ps/nm"; - description "Chromatic Dispersion (CD)"; - } + description + "Chromatic Dispersion (CD)"; + } leaf roadm-pdl { type l0-types:power-loss-or-null; - description "Polarization Dependent Loss (PDL)"; + description + "Polarization Dependent Loss (PDL)"; } leaf roadm-inband-crosstalk { type l0-types:decimal-2-or-null; units "dB"; description - "In-band crosstalk, or coherent crosstalk, can occur in - components that can have multiple same wavelength inputs - with the inputs either routed to different output ports, - or all but one blocked"; + "In-band crosstalk, or coherent crosstalk, can occur in + components that can have multiple same wavelength inputs + with the inputs either routed to different output ports, + or all but one blocked"; } leaf roadm-maxloss { type l0-types:power-loss-or-null; description - "This is the maximum expected path loss from the - ROADM ingress to the ROADM egress - assuming no additional path loss is added"; + "This is the maximum expected path loss from the + ROADM ingress to the ROADM egress + assuming no additional path loss is added"; } } // grouping roadm-common-path @@ -428,69 +430,73 @@ module ietf-optical-impairment-topology { description "The optical impairments of a ROADM add path."; uses roadm-common-path { - refine roadm-inband-crosstalk { + refine "roadm-inband-crosstalk" { description - "In-band crosstalk, or coherent crosstalk, - can occur in components that can have multiple same - wavelength inputs,with the inputs either - routed to different output ports, - or all but one blocked. - - In the case of add path it is the total - of the add block + egress WSS crosstalk contributions."; + "In-band crosstalk, or coherent crosstalk, + can occur in components that can have multiple same + wavelength inputs,with the inputs either + routed to different output ports, + or all but one blocked. + + In the case of add path it is the total + of the add block + egress WSS crosstalk contributions."; } - refine roadm-maxloss { - description - "This is the maximum expected add path loss from - the add/drop port input to the ROADM egress, - assuming no additional add path loss is added. - This is used to establish the minimum required - transponder output power required - to hit the ROADM egress target power - levels and preventing - to hit the WSS attenuation limits. - If the add path contains an internal amplifier - this loss value should be based - on worst case expected amplifier gain due to - ripple or gain uncertainty"; + refine "roadm-maxloss" { + description + "This is the maximum expected add path loss from + the add/drop port input to the ROADM egress, + assuming no additional add path loss is added. + + This is used to establish the minimum required + transponder output power required + to hit the ROADM egress target power + levels and preventing + to hit the WSS attenuation limits. + + If the add path contains an internal amplifier + this loss value MUST be based + on worst case expected amplifier gain due to + ripple or gain uncertainty"; } } leaf roadm-pmax { type l0-types:power-dbm-or-null; - description - "This is the maximum (per carrier) power level - permitted at the add block input ports, - that can be handled by the ROADM node. - This may reflect either add amplifier power - contraints or WSS adjustment limits. - Higher power transponders would need to have - their launch power reduced - to this value or lower"; + description + "This is the maximum (per carrier) power level + permitted at the add block input ports, + that can be handled by the ROADM node. + This can reflect either add amplifier power + constraints or WSS adjustment limits. + Higher power transponders would need to have + their launch power reduced + to this value or lower"; } leaf roadm-osnr { type l0-types:snr-or-null; - description + description "Optical Signal-to-Noise Ratio (OSNR). - If the add path contains the ability to adjust the - carrier power levels into an add path amplifier - (if present) to a target value, - this reflects the OSNR contribution of the - add amplifier assuming this target value is obtained. - The worst case OSNR based on the input power and - NF calculation method, and this value, should be used - (if both are defined)."; + + If the add path contains the ability to adjust the + carrier power levels into an add path amplifier + (if present) to a target value, + this reflects the OSNR contribution of the + add amplifier assuming this target value is obtained. + + The worst case OSNR based on the input power and + NF calculation method, and this value, MUST be used + (if both are defined)."; } leaf roadm-noise-figure { type l0-types:decimal-5-or-null; - units "dB"; - description - "Noise Figure. If the add path contains an amplifier, - this is the noise figure of that amplifier inferred - to the add port. - This permits add path OSNR calculation based - on the input power levels to the add block - without knowing the ROADM path losses to - the add amplifier."; + units "dB"; + description + "Noise Figure. If the add path contains an amplifier, + this is the noise figure of that amplifier inferred + to the add port. + This permits add path OSNR calculation based + on the input power levels to the add block + without knowing the ROADM path losses to + the add amplifier."; } } // grouping roadm-add-path @@ -498,149 +504,153 @@ module ietf-optical-impairment-topology { description "The optical impairments of a ROADM drop path"; uses roadm-common-path { - refine roadm-inband-crosstalk { + refine "roadm-inband-crosstalk" { description "In-band crosstalk, or coherent crosstalk, can occur in - components that can have multiple same wavelength - inputs,with the inputs either routed to different - output ports,or all but one blocked. - - In the case of drop path it is the total - of the ingress - to drop e.g. WSS and drop block crosstalk - contributions."; + components that can have multiple same wavelength + inputs,with the inputs either routed to different + output ports,or all but one blocked. + + In the case of drop path it is the total + of the ingress + to drop e.g. WSS and drop block crosstalk + contributions."; } - refine roadm-maxloss { - description - "The net loss from the ROADM input,to the output - of the drop block. - If ROADM ingress to drop path includes an amplifier, - the amplifier gain reduces the net loss. - This is before any additional drop path attenuation - that may be required - due to drop amplifier power contraints. - The max value correspond to worst case expected loss, - including amplifier gain ripple or uncertainty. - It is the maximum output power of the drop - amplifier."; + refine "roadm-maxloss" { + description + "The net loss from the ROADM input,to the output + of the drop block. + If this ROADM ingress-to-drop path includes an amplifier, + the amplifier gain reduces the net loss. + This is before any additional drop path attenuation + that may be required + due to drop amplifier power constraints. + The max value correspond to worst case expected loss, + including amplifier gain ripple or uncertainty. + It is the maximum output power of the drop + amplifier."; } } leaf roadm-minloss { type l0-types:power-loss-or-null; - description - "The net loss from the ROADM input, to the - output of the drop block. - If this ROADM ingress to drop path includes - an amplifier,the amplifier gain reduces the net loss. - This is before any additional drop path attenuation - that may be required due to drop amplifier power - contraints. - The min value correspond to best case expected loss, - including amplifier gain ripple or uncertainty."; + description + "The net loss from the ROADM input, to the + output of the drop block. + If this ROADM ingress-to-drop path includes + an amplifier,the amplifier gain reduces the net loss. + This is before any additional drop path attenuation + that may be required due to drop amplifier power + constraints. + The min value correspond to best case expected loss, + including amplifier gain ripple or uncertainty."; } leaf roadm-typloss { type l0-types:power-loss-or-null; - description - "The net loss from the ROADM input, - to the output of the drop block. - If this ROADM ingress to drop path - includes an amplifier, - the amplifier gain reduces the net loss. - This is before any additional drop path - attenuation - that may be required due to drop amplifier - power contraints. - The typ value correspond to typical case - expected loss."; + description + "The net loss from the ROADM input, + to the output of the drop block. + If this ROADM ingress-to-drop path + includes an amplifier, + the amplifier gain reduces the net loss. + This is before any additional drop path + attenuation + that may be required due to drop amplifier + power constraints. + The typ value correspond to typical case + expected loss."; } leaf roadm-pmin { type l0-types:power-dbm-or-null; - description + description "If the drop path has additional loss - that is added, for example, - to hit target power levels into a - drop path amplifier, or simply, to reduce the - power of a strong carrier - (due to ripple,for example), - then the use of the ROADM input power levels and - the above drop losses is not appropriate. - This parameter corresponds to the min per - carrier power levels - expected at the output of the drop block. - A detail example of the comparison using - these parameters is - detailed in section xxx of the document yyy."; + that is added, for example, + to hit target power levels into a + drop path amplifier, or simply, to reduce the + power of a strong carrier + (due to ripple,for example), + then the use of the ROADM input power levels and + the above drop losses is not appropriate. + This parameter corresponds to the min per + carrier power levels + expected at the output of the drop block. + A detail example of the comparison using + these parameters is + detailed in section xxx of the document yyy."; } leaf roadm-pmax { type l0-types:power-dbm-or-null; - description - "If the drop path has additional loss that is added, - for example, to hit target power levels into a - drop path amplifier,or simply,to reduce the power - of a strong carrier(due to ripple,for example), - then the use of the ROADM input power levels and the - above drop losses is not appropriate. - This parameter corresponds to the best case per - carrier power levels expected at the output of the - drop block. - A detail example of the comparison using - these parameters - is detailed in section xxx of the document yyy"; + description + "If the drop path has additional loss that is added, + for example, to hit target power levels into a + drop path amplifier,or simply,to reduce the power + of a strong carrier(due to ripple,for example), + then the use of the ROADM input power levels and the + above drop losses is not appropriate. + This parameter corresponds to the best case per + carrier power levels expected at the output of the + drop block. + A detail example of the comparison using + these parameters + is detailed in section xxx of the document yyy"; } leaf roadm-ptyp { type l0-types:power-dbm-or-null; - description + description "If the drop path has additional loss that is added, - for example, to hit target power levels into a - drop path amplifier,or simply,to reduce the - power of a strong carrier(due to ripple,for example), - then the use of the ROADM input power levels and - the above drop losses is not appropriate. - This parameter corresponds to the typical case - per carrier power levels expected - at the output of the drop block."; + for example, to hit target power levels into a + drop path amplifier,or simply,to reduce the + power of a strong carrier(due to ripple,for example), + then the use of the ROADM input power levels and + the above drop losses is not appropriate. + This parameter corresponds to the typical case + per carrier power levels expected + at the output of the drop block."; } leaf roadm-osnr { - type l0-types:snr-or-null; - description + type l0-types:snr-or-null; + description "Optical Signal-to-Noise Ratio (OSNR). - Expected OSNR contribution of the drop path - amplifier(if present) - for the case of additional drop path loss - (before this amplifier) - in order to hit a target power level (per carrier). - If both, the OSNR based on the ROADM - input power level - (Pcarrier = - Pref+10Log(carrier-baudrate/ref-baud) + delta-power) - and the input inferred NF(NF.drop), - and this OSNR value, are defined, - the minimum value between these two should be used"; + + Expected OSNR contribution of the drop path + amplifier(if present) + for the case of additional drop path loss + (before this amplifier) + in order to hit a target power level (per carrier). + + If both, the OSNR based on the ROADM + input power level + (Pcarrier = + Pref+10Log(carrier-baudrate/ref-baud) + delta-power) + and the input inferred NF(NF.drop), + and this OSNR value, are defined, + the minimum value between these two MUST be used"; } leaf roadm-noise-figure { type l0-types:decimal-5-or-null; - units "dB"; - description - "Drop path Noise Figure. - If the drop path contains an amplifier, - this is the noise figure - of that amplifier, inferred to the - ROADM ingress port. - This permits to determine - amplifier OSNR contribution - without having to specify the - ROADM node's losses to that amplifier. - This applies for the case of no - additional drop path loss, - before the amplifier, in order to reduce the power - of the carriers to a target value"; + units "dB"; + description + "Drop path Noise Figure. + If the drop path contains an amplifier, + this is the noise figure + of that amplifier, inferred to the + ROADM ingress port. + This permits to determine + amplifier OSNR contribution + without having to specify the + ROADM node's losses to that amplifier. + This applies for the case of no + additional drop path loss, + before the amplifier, in order to reduce the power + of the carriers to a target value"; } } // grouping roadm-drop-path - grouping concentratedloss-params { - description "concentrated loss"; - container concentratedloss{ - description "concentrated loss"; + grouping concentrated-loss-params { + description + "Concentrated loss"; + container concentrated-loss { + description + "Concentrated loss"; leaf loss { type l0-types:power-loss-or-null; mandatory true; @@ -651,28 +661,30 @@ module ietf-optical-impairment-topology { } grouping oms-general-optical-params { - description "OMS link optical parameters"; + description + "OMS link optical parameters"; leaf generalized-snr { type l0-types:snr; - description "generalized snr"; + description + "Generalized SNR"; } - leaf equalization-mode{ + leaf equalization-mode { type identityref { base l0-types:type-power-mode; } description "The equalization mode. - When not present it indicates that the information about - the equalization mode is not reported. + When not present it indicates that the information about + the equalization mode is not reported. - Reporting this value is needed to support optical - impairments applications."; + Reporting this value is needed to support optical + impairments applications."; } container power-param { description "Optical channel power or power spectral densitity (PSD) - after the ROADM."; + after the ROADM."; leaf nominal-carrier-power { when "derived-from-or-self(../../equalization-mode, " + "'l0-types:carrier-power')"; @@ -687,46 +699,47 @@ module ietf-optical-impairment-topology { description " Reference power spectral density (PSD)."; } - } // container power-param + } // container power-param } // grouping oms-general-optical-params grouping otsi-group { - description "OTSiG definition , representing client - digital information stream supported by one or more OTSi"; - + description + "OTSiG definition , representing client + digital information stream supported by one or more OTSi"; list otsi { - key "otsi-carrier-id"; + key "carrier-id"; config false; description "list of OTSi contained in one OTSiG. - The list could also be of only one element"; - leaf otsi-carrier-id { + The list could also be of only one element"; + leaf carrier-id { type uint16; - description "OTSi carrier-id"; + description + "OTSi carrier-id"; } - leaf otsi-carrier-frequency { + leaf carrier-frequency { type union { type l0-types:frequency-thz; type empty; } description "OTSi carrier frequency, equivalent to the - actual configured transmitter frequency, when known, or - an empty value when unknown."; + actual configured transmitter frequency, when known, or + an empty value when unknown."; } leaf-list e2e-mc-path-id { type uint16; description - "The list of the possible end-to-end Media Channel - (e2e-MC) paths associated with the OTSi which have - different optical impairments. + "The list of the possible end-to-end Media Channel + (e2e-MC) paths associated with the OTSi which have + different optical impairments. - This list is meaningful in case the OTSi can be associated - with multiple end-to-end Media Channel (e2e-MC) paths - (e.g., when OPS protection is configured). + This list is meaningful in case the OTSi can be associated + with multiple end-to-end Media Channel (e2e-MC) paths + (e.g., when OPS protection is configured). - The list can be empty when the OTSi has only one - e2e-MC path."; + The list can be empty when the OTSi has only one + e2e-MC path."; } } // OTSi list } // OTSiG grouping @@ -735,31 +748,29 @@ module ietf-optical-impairment-topology { description "media channel groups. - This grouping is not intended to be reused outside of this - module."; - + This grouping is not intended to be reused outside of this + module."; container media-channel-groups { presence - "When present, it indicates that the list media channel - groups is reported."; + "When present, it indicates that the list media channel + groups is reported."; description - "The top level container for the list of media channel - groups."; + "The top level container for the list of media channel + groups."; list media-channel-group { key "otsi-group-ref"; description "The list of media channel groups"; leaf otsi-group-ref { type leafref { - path "../../../../../../../otsis/" + - "otsi-group/otsi-group-id"; + path "../../../../../../../otsis/" + + "otsi-group/otsi-group-id"; } description - "Reference to the OTSiG to which the OTSis carried by - this media channel group belong to."; + "Reference to the OTSiG to which the OTSis carried by + this media channel group belong to."; } list media-channel { - // key "flexi-n"; key "media-channel-id"; unique "flexi-n"; description @@ -768,50 +779,48 @@ module ietf-optical-impairment-topology { type int16; description "The identifier of media channel within media channel - group. + group. - It may be equal to the flexi-n attribute, when the - flexi-n attribute is present."; + It may be equal to the flexi-n attribute, when the + flexi-n attribute is present."; } - // this grouping add both n.m values uses l0-types:flexi-grid-frequency-slot; - list otsi-ref { - key "otsi-carrier-ref"; + key "carrier-ref"; description - "The list of references to the OTSis and their - end-to-end Media Channel (e2e-MC) paths within the - OTSiG carried by this media channel."; - leaf otsi-carrier-ref { + "The list of references to the OTSis and their + end-to-end Media Channel (e2e-MC) paths within the + OTSiG carried by this media channel."; + leaf carrier-ref { type leafref { - path "../../../../../../../../../otsis/" + - "otsi-group[otsi-group-id=current()" + - "/../../../otsi-group-ref]/" + - "otsi/otsi-carrier-id" ; + path "../../../../../../../../../otsis/" + + "otsi-group[otsi-group-id=current()" + + "/../../../otsi-group-ref]/" + + "otsi/carrier-id"; } description "Reference to the OTSi within the OTSiG carried - by this media channel."; + by this media channel."; } leaf-list e2e-mc-path-ref { type leafref { - path "../../../../../../../../../otsis/" + - "otsi-group[otsi-group-id=current()" + - "/../../../otsi-group-ref]/" + - "otsi[otsi-carrier-id=current()" + - "/../otsi-carrier-ref]/e2e-mc-path-id"; + path "../../../../../../../../../otsis/" + + "otsi-group[otsi-group-id=current()" + + "/../../../otsi-group-ref]/" + + "otsi[carrier-id=current()" + + "/../carrier-ref]/e2e-mc-path-id"; } description - "References to the end-to-end Media Channel (e2e-MC) - paths of this OTSi which are routed through this - media channel."; + "References to the end-to-end Media Channel (e2e-MC) + paths of this OTSi which are routed through this + media channel."; } } leaf delta-power { type l0-types:power-ratio-or-null; description - " Deviation from the reference carrier power defined - for the OMS."; + " Deviation from the reference carrier power defined + for the OMS."; } } // media channels list } // media-channel-groups list @@ -819,24 +828,27 @@ module ietf-optical-impairment-topology { } // media media-channel-groups grouping grouping oms-element { - description "OMS description"; - container OMS-elements { + description + "OMS description"; + container oms-elements { presence - "When present, it indicates that the list of OMS elements - is reported."; + "When present, it indicates that the list of OMS elements + is reported."; + config false; description "The top level container for the list of OMS elements."; - list OMS-element { + list oms-element { key "elt-index"; description - "defines the spans and the amplifier blocks of - the amplified lines"; + "The building blocks (e.g., fibers, amplifiers, + concentrated loss) that compose the WDM TE-link between + its link termination points."; leaf elt-index { type uint16; description - "ordered list of Index of OMS element - (whether it's a Fiber, an EDFA or a - Concentratedloss)"; + "An index allowing to sort the elements in their physical + order along the link without constraining their position + in the list."; } leaf oms-element-uid { type union { @@ -844,31 +856,31 @@ module ietf-optical-impairment-topology { type empty; } description - "Unique id of the element, if it exists and it is known. + "Unique id of the element, if it exists and is known. - When unknown, an empty value is reported. + When unknown, an empty value is reported. - When it does not exist, the attribute is not present."; + When it does not exist, the attribute is not present."; } container reverse-element-ref { description "It contains references to the elements which are - associated with this element in the reverse - direction."; + associated with this element in the reverse + direction."; leaf link-ref { type leafref { path "../../../../../../../../nt:link/nt:link-id"; } description "The reference to the OMS link which the OMS elements - belongs to."; + belongs to."; } leaf-list oms-element-ref { type leafref { path "../../../../../../../../nt:link[nt:link-id=" - + "current()/../link-ref]/tet:te/" - + "tet:te-link-attributes/OMS-attributes/" - + "OMS-elements/OMS-element/elt-index"; + + "current()/../link-ref]/tet:te/" + + "tet:te-link-attributes/oms-attributes/" + + "oms-elements/oms-element/elt-index"; } description "The references to the OMS elements."; @@ -876,7 +888,8 @@ module ietf-optical-impairment-topology { } choice element { mandatory true; - description "OMS element type"; + description + "OMS element type"; case amplifier { uses tet:geolocation-container; uses amplifier-params; @@ -884,8 +897,8 @@ module ietf-optical-impairment-topology { case fiber { uses fiber-params; } - case concentratedloss { - uses concentratedloss-params ; + case concentrated-loss { + uses concentrated-loss-params; } } } @@ -896,34 +909,35 @@ module ietf-optical-impairment-topology { description "References to an OTSi. - This grouping is intended to be reused within the - transceiver's list only."; + This grouping is intended to be reused within the + transceiver's list only."; leaf otsi-group-ref { type leafref { - path "../../../../../../otsis/otsi-group/" + - "otsi-group-id"; + path "../../../../../../otsis/otsi-group/" + + "otsi-group-id"; } description "The OTSi generated by the transceiver's transmitter."; } leaf otsi-ref { type leafref { - path "../../../../../../otsis/otsi-group" + - "[otsi-group-id=current()/../otsi-group-ref]/otsi/" + - "otsi-carrier-id"; + path "../../../../../../otsis/otsi-group" + + "[otsi-group-id=current()/../otsi-group-ref]/otsi/" + + "carrier-id"; } description "The OTSi generated by the transceiver's transmitter."; } } -/* - * Data nodes - */ + /* + * Data nodes + */ augment "/nw:networks/nw:network/nw:network-types" + "/tet:te-topology" { - description "optical-impairment topology augmented"; + description + "optical-impairment topology augmented"; container optical-impairment-topology { presence "Indicates an impairment-aware topology of optical networks"; @@ -931,142 +945,116 @@ module ietf-optical-impairment-topology { "Container to identify impairment-aware topology type"; reference "RFC8345: A YANG Data Model for Network Topologies."; - } + } } augment "/nw:networks/nw:network" { - when "./nw:network-types/tet:te-topology" + - "/oit:optical-impairment-topology" { + when './nw:network-types/tet:te-topology' + + '/oit:optical-impairment-topology' { description - "This augment is only valid for Optical Impairment - topology."; + "This augment is only valid for Optical Impairment + topology."; } description "Network augmentation for optical impairments data."; container otsis { - presence - "When present, it indicates that OTSi information is - reported."; + presence "When present, it indicates that OTSi information is + reported."; description - "The information about the OTSis configured on the WDM-TE - link."; + "The information about the OTSis configured on the WDM-TE + link."; list otsi-group { key "otsi-group-id"; config false; description "the list of possible OTSiG representing client digital - stream"; + stream"; leaf otsi-group-id { type string; description "A network-wide unique identifier of otsi-group element. - It could be structured e.g., as an URI or as an UUID."; + It could be structured e.g., as an URI or as an UUID."; } uses otsi-group; } // list of OTSiG } - container templates { config false; description "Templates for set of parameters which can be common to - multiple elements."; - container roadm-path-impairments { + multiple elements."; + container roadm-path-impairments-sets { description "The top level container for the list of the set of - optical impairments related to ROADM paths."; - list roadm-path-impairment { - key "roadm-path-impairments-id"; + optical impairments related to ROADM paths."; + list roadm-path-impairments-set { + key "roadm-path-impairments-set-id"; description - "The list of the set of optical impairments related to - ROADM paths."; - - leaf roadm-path-impairments-id { - type string; + "The list of the set of optical impairments related to a + ROADM path."; + leaf roadm-path-impairments-set-id { + type string; description "The identifier of the set of optical impairments - related to a ROADM path."; + related to a ROADM path."; + } + leaf description { + type string; + description + "The textual description of the the set of optical + impairments related to a ROADM path."; } choice impairment-type { - description "type path impairment"; + description + "Type path impairment"; case roadm-express-path { list roadm-express-path { - key frequency-range-id; + key "frequency-range-id"; description "The list of optical impairments on a ROADM express - path for different frequency ranges. + path for different frequency ranges. - Two elements in the list must not have the same - range or overlapping ranges."; - leaf frequency-range-id { - type uint16; - description - "The identifier of the frequency range."; - } - container frequency-range { - description - "The frequency range for which these optical - impairments apply."; - uses l0-types:frequency-range; - } + Two elements in the list MUST NOT have the same + range or overlapping ranges."; + uses l0-types:frequency-range-with-identifier; uses roadm-express-path; - } + } } case roadm-add-path { list roadm-add-path { - key frequency-range-id; + key "frequency-range-id"; description "The list of optical impairments on a ROADM add - path for different frequency ranges. + path for different frequency ranges. - Two elements in the list must not have the same - range or overlapping ranges."; - leaf frequency-range-id { - type uint16; - description - "The identifier of a frequency range."; - } - container frequency-range { - description - "The frequency range for which these optical - impairments apply."; - uses l0-types:frequency-range; - } - uses roadm-add-path; + Two elements in the list MUST NOT have the same + range or overlapping ranges."; + uses l0-types:frequency-range-with-identifier; + uses roadm-add-path; } - } + } case roadm-drop-path { list roadm-drop-path { - key frequency-range-id; + key "frequency-range-id"; description "The list of optical impairments on a ROADM add - path for different frequency ranges. + path for different frequency ranges. - Two elements in the list must not have the same - range or overlapping ranges."; - leaf frequency-range-id { - type uint16; - description - "The identifier of a frequency range."; - } - container frequency-range { - description - "The frequency range for which these optical - impairments apply."; - uses l0-types:frequency-range; - } - uses roadm-drop-path; + Two elements in the list MUST NOT have the same + range or overlapping ranges."; + uses l0-types:frequency-range-with-identifier; + uses roadm-drop-path; } } } - } // list roadm-path-impairments - } // container roadm-path-impairments + } // list roadm-path-impairments-set + } // container roadm-path-impairments-sets container explicit-transceiver-modes { description "The top level container for the list of the - transceivers' explicit modes."; + transceivers' explicit modes."; list explicit-transceiver-mode { - key explicit-transceiver-mode-id; + key "explicit-transceiver-mode-id"; description "The list of the transceivers' explicit modes."; leaf explicit-transceiver-mode-id { @@ -1075,14 +1063,14 @@ module ietf-optical-impairment-topology { "The identifier of the transceivers' explicit mode."; } uses l0-types:explicit-mode; - } // list explicit-transceiver-mode - } // container explicit-transceiver-modes - } // container templates + } // list explicit-transceiver-mode + } // container explicit-transceiver-modes + } // container templates } // augment network augment "/nw:networks/nw:network/nw:node" { - when "../nw:network-types/tet:te-topology" + - "/oit:optical-impairment-topology" { + when '../nw:network-types/tet:te-topology' + + '/oit:optical-impairment-topology' { description "This augment is only valid for Optical Impairment."; } @@ -1090,49 +1078,51 @@ module ietf-optical-impairment-topology { "Node augmentation for optical impairments data."; container transponders { presence - "If present, it indicates that the list of transponders is - reported."; + "If present, it indicates that the list of transponders is + reported."; description "The top level container for the list of transponders."; list transponder { key "transponder-id"; config false; - description "The list of transponders."; + description + "The list of transponders."; leaf transponder-id { type uint32; - description "transponder identifier"; + description + "transponder identifier"; } leaf termination-type-capabilities { type enumeration { enum tunnel-only { description "The transponder can only be used in an Optical - Tunnel termination configuration."; + Tunnel termination configuration."; } enum 3r-only { description "The transponder can only be used in a 3R - configuration."; + configuration."; } enum 3r-or-tunnel { description "The transponder can be configure to be used either - in an Optical Tunnel termination configuration or in - a 3R configuration."; + in an Optical Tunnel termination configuration or in + a 3R configuration."; } } description "Describes whether the transponder can be used in an - Optical Tunnel termination configuration or in a 3R - configuration (or both)."; + Optical Tunnel termination configuration or in a 3R + configuration (or both)."; } leaf supported-3r-mode { - when '(../termination-type-capabilities = "3r-only") or - (../termination-type-capabilities = "3r-or-tunnel")' - { + when '(../termination-type-capabilities = "3r-only") ' + + 'or (../termination-type-capabilities = ' + + '"3r-or-tunnel")' { description "Applies only when the transponder supports 3R - configuration."; + configuration."; } type enumeration { enum unidir { @@ -1145,33 +1135,35 @@ module ietf-optical-impairment-topology { } } description - "Describes the supported 3R configuration type."; + "Describes the supported 3R configuration type."; } list transceiver { key "transceiver-id"; config false; min-elements 1; - description "list of transceiver related to a transponder"; + description + "List of transceiver related to a transponder"; leaf transceiver-id { type uint32; - description "transceiver identifier"; + description + "Transceiver identifier"; } uses l0-types:transceiver-capabilities { augment "supported-modes/supported-mode/mode/" + "explicit-mode/explicit-mode" { description "Augment the explicit-mode container with the - proper leafref."; + proper leafref."; leaf explicit-transceiver-mode-ref { type leafref { path "../../../../../../../../oit:templates" - + "/oit:explicit-transceiver-modes" - + "/oit:explicit-transceiver-mode" - + "/oit:explicit-transceiver-mode-id"; + + "/oit:explicit-transceiver-modes" + + "/oit:explicit-transceiver-mode" + + "/oit:explicit-transceiver-mode-id"; } description "The refernce to the explicit transceiver - mode template."; + mode template."; } } } @@ -1184,30 +1176,30 @@ module ietf-optical-impairment-topology { } description "Reference to the configured mode for transceiver - compatibility approach. + compatibility approach. - The empty value is used to report that no mode has - been configured and there is no default mode. + The empty value is used to report that no mode has + been configured and there is no default mode. - When not present, the configured-mode is not reported - by the server."; + When not present, the configured-mode is not reported + by the server."; } uses l0-types:common-transceiver-param; container outgoing-otsi { - when "../../../../../otsis" { + when '../../../../../otsis' { description - "It applies only when the OTSi information is - reported."; + "It applies only when the OTSi information is + reported."; } description "The OTSi generated by the transceiver's transmitter."; uses otsi-ref; } container incoming-otsi { - when "../../../../../otsis" { + when '../../../../../otsis' { description - "It applies only when the OTSi information is - reported."; + "It applies only when the OTSi information is + reported."; } description "The OTSi received by the transceiver's received."; @@ -1222,29 +1214,28 @@ module ietf-optical-impairment-topology { enum tunnel-termination { description "The transceiver is currently used in an Optical - Tunnel termination configuration."; + Tunnel termination configuration."; } enum 3r-regeneration { description "The transceiver is currently used in a 3R - configuration."; + configuration."; } } description "Describes whether the current configuration of the - transceiver is used in an Optical Tunnel termination - configuration or in a 3R configuration. + transceiver is used in an Optical Tunnel termination + configuration or in a 3R configuration. - If empty, it means that the information about the - configured-termination-type is not reported."; + If empty, it means that the information about the + configured-termination-type is not reported."; } } // end of list of transceiver } // end list of transponder } container regen-groups { - presence - "When present, it indicates that the list of 3R groups - is reported."; + presence "When present, it indicates that the list of 3R groups + is reported."; description "The top level container for the list of 3R groups."; list regen-group { @@ -1253,21 +1244,21 @@ module ietf-optical-impairment-topology { description "The list of 3R groups. - Any 3R group represent a group of transponder in which an - a an electrical connectivity is either in place or could - be dynamically provided, to associated transponders used - for 3R regeneration."; + Any 3R group represent a group of transponder in which an + a an electrical connectivity is either in place or could + be dynamically provided, to associated transponders used + for 3R regeneration."; leaf group-id { type uint32; description "Group identifier used an index to access elements in the - list of 3R groups."; + list of 3R groups."; } leaf regen-metric { type uint32; description "The cost permits choice among different group of - transponders during path computation"; + transponders during path computation"; } leaf-list transponder-ref { type leafref { @@ -1281,17 +1272,19 @@ module ietf-optical-impairment-topology { } augment "/nw:networks/nw:network/nt:link/tet:te" - + "/tet:te-link-attributes" { - when "../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + + "/tet:te-link-attributes" { + when '../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for Optical Impairment - topology."; + "This augment is only valid for Optical Impairment + topology."; } - description "Optical Link augmentation for impairment data."; - container OMS-attributes { + description + "Optical Link augmentation for impairment data."; + container oms-attributes { config false; - description "OMS attributes"; + description + "OMS attributes"; uses oms-general-optical-params; uses media-channel-groups; uses oms-element; @@ -1300,20 +1293,19 @@ module ietf-optical-impairment-topology { augment "/nw:networks/nw:network/nw:node/tet:te" + "/tet:tunnel-termination-point" { - when "../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for Optical Impairment - topology."; + "This augment is only valid for Optical Impairment + topology."; } description "Tunnel termination point augmentation for impairment data."; - list ttp-transceiver { - when "../../../transponders" { + when '../../../transponders' { description - "It applies only when the list of transponders is - reported."; + "It applies only when the list of transponders is + reported."; } key "transponder-ref transceiver-ref"; config false; @@ -1326,13 +1318,13 @@ module ietf-optical-impairment-topology { } description "The reference to the transponder hosting the transceiver - of the TTP."; + of the TTP."; } leaf transceiver-ref { type leafref { - path "../../../../transponders/transponder" + - "[transponder-id=current()/../transponder-ref]/" + - "transceiver/transceiver-id"; + path "../../../../transponders/transponder" + + "[transponder-id=current()/../transponder-ref]/" + + "transceiver/transceiver-id"; } description "The reference to the transceiver of the TTP."; @@ -1340,13 +1332,12 @@ module ietf-optical-impairment-topology { } // list of transceivers } // end of augment - // Should this leaf be moved to te-topology? augment "/nw:networks/nw:network/nw:node/nt:termination-point" { - when "../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for Optical Impairment - topology"; + "This augment is only valid for Optical Impairment + topology"; } description "Augment LTP"; @@ -1357,76 +1348,74 @@ module ietf-optical-impairment-topology { description "The protection type that this LTP is capable of. - When not present it indicates that the information about - the protection type is not reported."; + When not present it indicates that the information about + the protection type is not reported."; } } augment "/nw:networks/nw:network/nw:node/nt:termination-point" + "/tet:te" { - when "../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for Optical Impairment - topology"; + "This augment is only valid for Optical Impairment + topology"; } description "Augment TE attributes of an LTP"; - leaf inter-layer-sequence-number { type uint32; description - "The inter-layer-sequence-number (ILSN) is used to report - additional connectivity constraints between a client layer - Link Termination Point (LTP), such as a muxponder port, and - the server layer Tunnel Termination Point (TTP). - - A client service cannot be setup between two client layer - LTPs which report different values of the ILSN. - - This attribute is not reported when there are no additional - connectivity constraints. - - Therefore, a client service can be setup when at least one - of the two client layer LTPs does not report any ILSN or - both client layer LTPs report the same ILSN value and the - corresponding server layer TTPs have at least one common - server-layer switching capability and at least one common - client-layer switching capability."; + "The inter-layer-sequence-number (ILSN) is used to report + additional connectivity constraints between a client layer + Link Termination Point (LTP), such as a muxponder port, and + the server layer Tunnel Termination Point (TTP). + + A client service cannot be setup between two client layer + LTPs which report different values of the ILSN. + + This attribute is not reported when there are no additional + connectivity constraints. + + Therefore, a client service can be setup when at least one + of the two client layer LTPs does not report any ILSN or + both client layer LTPs report the same ILSN value and the + corresponding server layer TTPs have at least one common + server-layer switching capability and at least one common + client-layer switching capability."; } } augment "/nw:networks/nw:network/nw:node/tet:te" + "/tet:te-node-attributes" { - when "../../../nw:network-types/tet:te-topology" - + "/oit:optical-impairment-topology" { + when '../../../nw:network-types/tet:te-topology' + + '/oit:optical-impairment-topology' { description - "This augment is only valid for Optical Impairment - topology"; + "This augment is only valid for Optical Impairment + topology"; } description "node attributes augmentantion for optical-impairment ROADM node"; - } // augmentation for optical-impairment ROADM augment "/nw:networks/nw:network/nw:node/tet:te/" - + "tet:information-source-entry/tet:connectivity-matrices"{ - when "../../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + + "tet:information-source-entry/tet:connectivity-matrices" { + when '../../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for Optical Impairment - topology "; - } + "This augment is only valid for Optical Impairment + topology "; + } description - "Augment default TE node connectivity matrix information - source."; - - leaf roadm-path-impairments { + "Augment default TE node connectivity matrix information + source."; + leaf roadm-path-impairments-set { type leafref { path "../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id"; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } config false; description @@ -1437,86 +1426,91 @@ module ietf-optical-impairment-topology { augment "/nw:networks/nw:network/nw:node/tet:te/" + "tet:information-source-entry/tet:connectivity-matrices/" + "tet:connectivity-matrix" { - when "../../../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description "This augment is only valid for Optical Impairment topology "; } description - "Augment TE node connectivity matrix entry information - source."; - leaf roadm-path-impairments { + "Augment TE node connectivity matrix entry information + source."; + leaf roadm-path-impairments-set { type leafref { path "../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id"; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } config false; description "Pointer to the list set of ROADM optical impairments"; - } + } } // augmentation connectivity-matrix information-source augment "/nw:networks/nw:network/nw:node/tet:te/" + "tet:te-node-attributes/tet:connectivity-matrices" { - when "../../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for Optical Impairment - topology "; - } + "This augment is only valid for Optical Impairment + topology "; + } description "Augment default TE node connectivity matrix."; - leaf roadm-path-impairments { + leaf roadm-path-impairments-set { type leafref { path "../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id"; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } config false; /*the identifier in the list */ - /*"roadm-path-impairments" of ROADM optical impairment*/ - /*is read-only as the rest of attributes*/ - description "pointer to the list set of ROADM optical - impairments"; - } + /*"roadm-path-impairments" of ROADM optical impairment*/ + /*is read-only as the rest of attributes*/ + description + "Pointer to the list set of ROADM optical + impairments"; + } } // augmentation connectivity-matrices augment "/nw:networks/nw:network/nw:node/tet:te/" + "tet:te-node-attributes/" + "tet:connectivity-matrices/tet:connectivity-matrix" { - when "../../../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for - Optical Impairment topology "; + "This augment is only valid for + Optical Impairment topology "; } description "Augment TE node connectivity matrix entry."; - leaf roadm-path-impairments { + leaf roadm-path-impairments-set { type leafref { path "../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id"; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } config false; - description "pointer to the list set of ROADM optical - impairments"; + description + "Pointer to the list set of ROADM optical + impairments"; } } // augmentation connectivity-matrix augment "/nw:networks/nw:network/nw:node/tet:te/" + "tet:te-node-attributes/tet:connectivity-matrices/" + "tet:connectivity-matrix/tet:from" { - when "../../../../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../../../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for - Optical Impairment topology "; + "This augment is only valid for + Optical Impairment topology "; } description - "Augment the attributes for the 'from' LTP for the TE node - connectivity matrix entry."; + "Augment the attributes for the 'from' LTP for the TE node + connectivity matrix entry."; list additional-ltp { when "derived-from-or-self(../../../../../../" + "nt:termination-point" @@ -1524,55 +1518,56 @@ module ietf-optical-impairment-topology { + "oit:protection-type," + "'oit:otsi-protection')" { description - "This list applies only when the 'to' LTP for this - connectivity matrix entry supports individual OTSi(G) - protection."; + "This list applies only when the 'to' LTP for this + connectivity matrix entry supports individual OTSi(G) + protection."; } key "ltp-ref"; config false; description - "The restricted list of the potential secondary LTPs that - can be selected when the 'from' LTP of this connectivity - matrix entry is selected as a working LTP. + "The restricted list of the potential secondary LTPs that + can be selected when the 'from' LTP of this connectivity + matrix entry is selected as a working LTP. - If this list is empty, all the other LTPs that can reach - the 'to' LTP of this connectivity matrix entry can be - selected as secondary LTPs."; + If this list is empty, all the other LTPs that can reach + the 'to' LTP of this connectivity matrix entry can be + selected as secondary LTPs."; leaf ltp-ref { type leafref { path "../../../../../../../nt:termination-point/nt:tp-id"; } description - "The reference to the potential secondary LTP that can be - selected when the 'from' LTP of this connectivity matrix - entry is selected as a working LTP"; + "The reference to the potential secondary LTP that can be + selected when the 'from' LTP of this connectivity matrix + entry is selected as a working LTP"; } - leaf roadm-path-impairments { + leaf roadm-path-impairments-set { type leafref { path "../../../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id"; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } description - "Pointer to ROADM optical impairments of the ROADM path - between this secondary 'from' LTP and the 'to' LTP of - this connectivity matrix entry."; - } + "Pointer to ROADM optical impairments of the ROADM path + between this secondary 'from' LTP and the 'to' LTP of + this connectivity matrix entry."; + } } } // augmentation connectivity-matrix from augment "/nw:networks/nw:network/nw:node/tet:te/" + "tet:te-node-attributes/tet:connectivity-matrices/" + "tet:connectivity-matrix/tet:to" { - when "../../../../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../../../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for - Optical Impairment topology "; + "This augment is only valid for + Optical Impairment topology "; } description - "Augment the attributes for the 'to' LTP for the TE node - connectivity matrix entry."; + "Augment the attributes for the 'to' LTP for the TE node + connectivity matrix entry."; list additional-ltp { when "derived-from-or-self(../../../../../../" + "nt:termination-point" @@ -1580,72 +1575,78 @@ module ietf-optical-impairment-topology { + "oit:protection-type," + "'oit:otsi-protection')" { description - "This list applies only when the 'from' LTP for this - connectivity matrix entry supports individual OTSi(G) - protection."; + "This list applies only when the 'from' LTP for this + connectivity matrix entry supports individual OTSi(G) + protection."; } key "ltp-ref"; config false; description - "The restricted list of the potential secondary LTPs that - can be selected when the 'to' LTP of this connectivity - matrix entry is selected as a working LTP. + "The restricted list of the potential secondary LTPs that + can be selected when the 'to' LTP of this connectivity + matrix entry is selected as a working LTP. - If this list is empty, all the other LTPs that can be - reached from the 'from' LTP of this connectivity matrix - entry can be selected as secondary LTPs."; + If this list is empty, all the other LTPs that can be + reached from the 'from' LTP of this connectivity matrix + entry can be selected as secondary LTPs."; leaf ltp-ref { type leafref { path "../../../../../../../nt:termination-point/nt:tp-id"; } description - "The reference to the potential secondary LTP that can be - selected when the 'to' LTP of this connectivity matrix - entry is selected as a working LTP"; + "The reference to the potential secondary LTP that can be + selected when the 'to' LTP of this connectivity matrix + entry is selected as a working LTP"; } - leaf roadm-path-impairments { + leaf roadm-path-impairments-set { type leafref { path "../../../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id"; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } description - "Pointer to ROADM optical impairments of the ROADM path - between the 'from' LTP of this connectivity matrix entry - and this secondary LTP."; - } + "Pointer to ROADM optical impairments of the ROADM path + between the 'from' LTP of this connectivity matrix entry + and this secondary LTP."; + } } } // augmentation connectivity-matrix to augment "/nw:networks/nw:network/nw:node/tet:te/" + "tet:tunnel-termination-point/" + "tet:local-link-connectivities" { - when "../../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for Optical Impairment topology "; + "This augment is only valid for Optical Impairment + topology."; } description "Augment default TTP LLC."; - leaf add-path-impairments { + leaf add-path-impairments-set { type leafref { path "../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id" ; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } config false; - description "pointer to the list set of ROADM optical - impairments"; + description + "Pointer to the list set of ROADM optical + impairments"; } - leaf drop-path-impairments { + leaf drop-path-impairments-set { type leafref { path "../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id" ; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } config false; - description "pointer to the list set of ROADM - optical impairments"; + description + "pointer to the list set of ROADM + optical impairments"; } } // augmentation local-link-connectivities @@ -1653,47 +1654,51 @@ module ietf-optical-impairment-topology { + "tet:tunnel-termination-point/" + "tet:local-link-connectivities/" + "tet:local-link-connectivity" { - when "../../../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description "This augment is only valid for Optical Impairment topology "; } description "Augment TTP LLC entry."; - leaf add-path-impairments { + leaf add-path-impairments-set { type leafref { path "../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id" ; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } config false; - description "pointer to the list set of ROADM optical - impairments"; + description + "pointer to the list set of ROADM optical + impairments"; } - leaf drop-path-impairments { + leaf drop-path-impairments-set { type leafref { path "../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id" ; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } config false; - description "pointer to the list set of ROADM optical - impairments"; + description + "pointer to the list set of ROADM optical + impairments"; } list llc-transceiver { key "ttp-transponder-ref ttp-transceiver-ref"; config false; description "The list of transceivers having a LLC different from the - default LLC."; + default LLC."; leaf ttp-transponder-ref { type leafref { path "../../../../ttp-transceiver/transponder-ref"; } description "The reference to the transponder hosting the transceiver - of this LLCL entry."; + of this LLCL entry."; } leaf ttp-transceiver-ref { type leafref { @@ -1706,72 +1711,81 @@ module ietf-optical-impairment-topology { type boolean; description "'true' - connectivity from this transceiver is allowed; - 'false' - connectivity from this transceiver is - disallowed."; + 'false' - connectivity from this transceiver is + disallowed."; } - leaf add-path-impairments { + leaf add-path-impairments-set { type leafref { path "../../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id" ; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } - description "pointer to the list set of ROADM optical - impairments"; + description + "pointer to the list set of ROADM optical + impairments"; } - leaf drop-path-impairments { + leaf drop-path-impairments-set { type leafref { path "../../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id" ; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } - description "pointer to the list set of ROADM - optical impairments"; + description + "pointer to the list set of ROADM + optical impairments"; } } list additional-ltp { when "derived-from-or-self(../../../tet:protection-type," + "'oit:otsi-protection')" { description - "This list applies only to TTPs that support individual - OTSi(G) protection."; + "This list applies only to TTPs that support individual + OTSi(G) protection."; } key "ltp-ref"; config false; description - "The restricted list of the potential secondary LTPs that - can be selected when the LTP associated with this LLCP - entry is selected as a working LTP. + "The restricted list of the potential secondary LTPs that + can be selected when the LTP associated with this LLCP + entry is selected as a working LTP. - If this list is empty, all the other LTPs that can be - reached by this TTP can be selected as secondary LTPs."; + If this list is empty, all the other LTPs that can be + reached by this TTP can be selected as secondary LTPs."; leaf ltp-ref { type leafref { path "../../../../../../nt:termination-point/nt:tp-id"; } description - "The reference to potential secondary LTP that can be - selected when the LTP associated with this LLCP entry is - selected as a working LTP"; + "The reference to potential secondary LTP that can be + selected when the LTP associated with this LLCP entry is + selected as a working LTP"; } - leaf add-path-impairments { + leaf add-path-impairments-set { type leafref { path "../../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id" ; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } - description "pointer to the list set of ROADM optical - impairments"; + description + "pointer to the list set of ROADM optical + impairments"; } - leaf drop-path-impairments { + leaf drop-path-impairments-set { type leafref { path "../../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id" ; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } - description "pointer to the list set of ROADM - optical impairments"; + description + "pointer to the list set of ROADM + optical impairments"; } } } // augmentation local-link-connectivity + } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-petra@2024-07-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-petra@2025-05-12.yang similarity index 97% rename from experimental/ietf-extracted-YANG-modules/ietf-petra@2024-07-05.yang rename to experimental/ietf-extracted-YANG-modules/ietf-petra@2025-05-12.yang index 4ce5e3814..3b0de6e21 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-petra@2024-07-05.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-petra@2025-05-12.yang @@ -14,7 +14,7 @@ module ietf-petra { description "Initial YANG rendition of the PETRA Energy API, v1.0.1 - Copyright (c) 2024 IETF Trust and the persons identified as + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -65,7 +65,7 @@ module ietf-petra { } */ - revision 2024-07-05 { + revision 2025-05-12 { description "Initial YANG rendition of the PETRA Energy API, v1.0.1"; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-qos-action@2024-01-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-qos-action@2025-07-06.yang similarity index 89% rename from experimental/ietf-extracted-YANG-modules/ietf-qos-action@2024-01-31.yang rename to experimental/ietf-extracted-YANG-modules/ietf-qos-action@2025-07-06.yang index a03572fc2..5142855d8 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-qos-action@2024-01-31.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-qos-action@2025-07-06.yang @@ -8,10 +8,10 @@ module ietf-qos-action { reference "RFC 6991: Common YANG Data Types"; } - import iana-qos-types { + import ietf-qos-types { prefix qos-types; reference - "RFC XXXX: YANG Model for QoS"; + "RFC XXXX: YANG Model for Quality of Service (QoS)."; } organization @@ -22,7 +22,7 @@ module ietf-qos-action { WG List: Editor: Aseem Choudhary - + Editor: Mahesh Jethanandani "; @@ -43,7 +43,7 @@ module ietf-qos-action { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-01-31 { + revision 2025-07-06 { description "Initial version"; reference @@ -92,6 +92,7 @@ module ietf-qos-action { description "DSCP marking"; } + leaf traffic-group-mark { type string; must "../action-type = 'qos-types:action-mark'" { @@ -140,6 +141,7 @@ module ietf-qos-action { description "A Basic Single Rate Two Color Meter."; } + grouping single-rate-three-color-meter { container single-rate-three-color-meter { description @@ -172,7 +174,6 @@ module ietf-qos-action { reference "RFC 2697: A Single Rate Three Color Marker."; } - container conform-action { uses meter-action; description @@ -284,6 +285,7 @@ module ietf-qos-action { case single-rate-two-color-meter-type { uses single-rate-two-color-meter; } + case single-rate-three-color-meter-type { uses single-rate-three-color-meter; } @@ -319,7 +321,10 @@ module ietf-qos-action { grouping meter-reference { container meter { leaf name { - type string ; + type leafref { + path "/qos-action:meters/" + + "qos-action:meter/qos-action:name"; + } mandatory true; description "This leaf defines name of the meter referenced."; @@ -524,6 +529,7 @@ module ietf-qos-action { "Value of maximum probability value. This value need be interpreted along with max-probability-unit"; } + leaf max-probability-unit { type identityref { base qos-types:probability-unit; @@ -536,6 +542,27 @@ module ietf-qos-action { "Random Early Detect (RED) configuration parameters."; } + grouping codel-config-parameters { + leaf target { + type uint64; + units "microseconds"; + default 5000; + description + "Target time in microseconds spent by each packet in queue."; + } + + leaf interval { + type uint64; + units "microseconds"; + default 100000; + description + "The time in microsecond for minimum interval for congestion + to persist before algorithm kicks in. "; + } + description + "CoDel configuration parameters."; + } + grouping queue { container queue { uses priority; @@ -619,12 +646,49 @@ module ietf-qos-action { type boolean; default "false"; description - "ECN is enabled on the queue."; + "When configure as true, ECN is enabled on + the queue."; } description "Weighted Random Early Detect (WRED) configuration."; } } + + case codel { + container codel { + uses codel-config-parameters; + leaf ecn-enabled { + type boolean; + default "false"; + description + "When configure as true, ECN is enabled on + the queue."; + } + description + "CoDel configuration."; + } + } + + case fq-codel { + container fq-codel { + uses codel-config-parameters; + leaf flows { + type uint64; + default 1024; + description + "The maximum number of flow queues."; + } + leaf ecn-enabled { + type boolean; + default "false"; + description + "ECN is enabled on the queue."; + } + description + "FQ-CoDel configuration."; + } + } + description "Choice of Drop Algorithm."; } @@ -659,7 +723,10 @@ module ietf-qos-action { grouping queue-reference { container queue-reference { leaf queue-name { - type string; + type leafref { + path "/qos-action:queues/" + + "qos-action:queue/qos-action:name"; + } mandatory true; description "This leaf defines name of the queue template diff --git a/experimental/ietf-extracted-YANG-modules/ietf-qos-oper@2024-01-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-qos-oper@2025-07-06.yang similarity index 80% rename from experimental/ietf-extracted-YANG-modules/ietf-qos-oper@2024-01-31.yang rename to experimental/ietf-extracted-YANG-modules/ietf-qos-oper@2025-07-06.yang index 9470e91b0..19b8e6a53 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-qos-oper@2024-01-31.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-qos-oper@2025-07-06.yang @@ -13,18 +13,19 @@ module ietf-qos-oper { reference "RFC8343: A YANG Data Model for Interface Management."; } - import iana-qos-types { + import ietf-qos-types { prefix qos-types; reference "RFC XXXX: YANG Models for Quality of Service (QoS)."; } organization "IETF RTG (Routing Area) Working Group."; + contact "WG Web: WG List: Editor: Aseem Choudhary - + Editor: Mahesh Jethanandani "; description @@ -44,7 +45,7 @@ module ietf-qos-oper { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-01-31 { + revision 2025-07-06 { description "Initial version."; reference @@ -133,68 +134,111 @@ module ietf-qos-oper { "Total number of bytes tail-dropped."; } - leaf red-drop-pkts { - type yang:zero-based-counter64; - description - "Total number of packets dropped because of RED."; - } - - leaf red-drop-bytes { - type yang:zero-based-counter64; - description - "Total number of bytes dropped because of RED."; - } + container red-statistics { + leaf drop-pkts { + type yang:zero-based-counter64; + description + "Total number of packets dropped because of RED."; + } - leaf red-ecn-marked-pkts { - type yang:zero-based-counter64; - description - "Total number of packets that were marked with ECN - because of RED."; - } + leaf drop-bytes { + type yang:zero-based-counter64; + description + "Total number of bytes dropped because of RED."; + } - leaf red-ecn-marked-bytes { - type yang:zero-based-counter64; - description - "Total number of bytes that were marked with ECN because of - RED."; - } + leaf ecn-marked-pkts { + type yang:zero-based-counter64; + description + "Total number of packets that were marked with ECN + because of RED."; + } - list wred-stats { - config false; - description - "QoS WRED statistics."; + leaf ecn-marked-bytes { + type yang:zero-based-counter64; + description + "Total number of bytes that were marked with ECN because of + RED."; + } - leaf profile { - type uint8; + list wred-stats { + config false; description - "Profile identifier for each color of traffic."; + "QoS WRED statistics."; + + leaf profile { + type uint8; + description + "Profile identifier for each color of traffic."; + } + + leaf drop-pkts { + type yang:zero-based-counter64; + description + "Total number of packets dropped because of WRED."; + } + + leaf drop-bytes { + type yang:zero-based-counter64; + description + "Total number of bytes dropped because of WRED."; + } + + leaf ecn-marked-pkts { + type yang:zero-based-counter64; + description + "Total number of packets that were marked with ECN + because of WRED."; + } + + leaf ecn-marked-bytes { + type yang:zero-based-counter64; + description + "Total number of bytes that were marked with ECN because + of WRED."; + } } + description + "Container of all RED statistics."; + } + container codel-statistics { leaf drop-pkts { type yang:zero-based-counter64; description - "Total number of packets dropped because of WRED."; + "Total number of packets dropped because of CoDel + or FQ-CoDel."; } leaf drop-bytes { type yang:zero-based-counter64; description - "Total number of bytes dropped because of WRED."; + "Total number of bytes dropped because of CoDel + or FQ-CoDel."; } leaf ecn-marked-pkts { type yang:zero-based-counter64; description - "Total number of packets that were marked with ECN because - of WRED."; + "Total number of packets that were marked with ECN + because of CoDel or FQ-CoDel."; } leaf ecn-marked-bytes { type yang:zero-based-counter64; description - "Total number of bytes that were marked with ECN because of - WRED."; + "Total number of bytes that were marked with ECN because + of CoDel or FQ-CoDel."; } + + leaf new-flow-count { + type yang:zero-based-counter64; + description + "Total number of flows that FQ-CoDel has identified and is + managing or has managed."; + } + description + "Container of all CoDel or FQ-CoDel statistics."; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-qos-types@2025-07-06.yang b/experimental/ietf-extracted-YANG-modules/ietf-qos-types@2025-07-06.yang new file mode 100644 index 000000000..81b128b32 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-qos-types@2025-07-06.yang @@ -0,0 +1,403 @@ +module ietf-qos-types { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-qos-types"; + prefix qos-types; + + organization + "IETF Routing Area Working Group"; + + contact + "WG Web: + WG List: + + Editor: Aseem Choudhary + + Editor: Mahesh Jethanandani + "; + + description + "This module contains type definitions for all QoS types. + + Copyright (c) 2022 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 + (http://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC XXXX; see + the RFC itself for full legal notices."; + + revision 2025-07-06 { + description + "Initial version"; + reference + "RFC XXXX: YANG Models for Quality of Service (QoS)."; + } + + /* + * Features. + */ + feature child-policy { + description + " This feature allows configuration of hierarchical policy."; + } + feature count { + description + "This feature allows action configuration to enable + counter in a classifier"; + } + feature named-counter { + description + "This feature allows action configuration to enable + named counter in a classifier"; + } + + /* + * Identities. + */ + identity policy-type { + description + "Base identity for policy type."; + } + identity diffserv-policy-type { + base policy-type; + description + "Policy type defined as DiffServ."; + } + identity ipv4-diffserv-policy-type { + base policy-type; + description + "Policy type defined as a DiffServ IPv4 policy type."; + } + identity ipv6-diffserv-policy-type { + base policy-type; + description + "Policy type defined as a DiffServ IPv6 policy type."; + } + identity queue-policy-type { + base policy-type; + description + "Policy type defined as a queue policy type."; + } + identity scheduler-policy-type { + base policy-type; + description + "Policy type defined as a scheduler policy type."; + } + + identity action-type { + description + "Base identity for the action type."; + } + identity dscp-marking { + base action-type; + description + "Action type defined as DSCP marking."; + } + identity meter-inline { + base action-type; + description + "Action type defined as meter inline."; + } + identity meter-reference { + base action-type; + description + "Action type defined as meter reference."; + } + identity queue { + base action-type; + description + "Action type defined as queue."; + } + identity scheduler { + base action-type; + description + "Action type defined as scheduler."; + } + identity discard { + base action-type; + description + "Action type defined as discard."; + } + identity child-policy { + if-feature child-policy; + base action-type; + description + "Action type defined as child policy."; + } + identity count { + if-feature count; + base action-type; + description + "Action type defined as count."; + } + identity named-counter { + if-feature named-counter; + base action-type; + description + "Action type specified as a named counter."; + } + identity queue-policy-name { + base action-type; + description + "Action type specified as a queue policy name."; + } + + identity meter-type { + description + "Base identity for types of meter."; + } + identity one-rate-two-color { + base meter-type; + description + "Meter type specified as one rate two color meter."; + } + identity one-rate-tri-color { + base meter-type; + description + "Meter type specified as one rate three color meter."; + } + identity two-rate-tri-color { + base meter-type; + description + "Meter type specified as two rate three color meter."; + } + + identity drop-type { + description + "Base identity for drop algorithm."; + } + identity tail-drop { + base drop-type; + description + "Drop algorithm specified as tail drop."; + } + identity red { + base drop-type; + description + "Drop algorithm specified as RED."; + } + identity wred { + base drop-type; + description + "Drop algorithm specified as WRED."; + } + + identity rate-unit-type { + description + "Base definition for the type of rate unit."; + } + identity bits-per-second { + base rate-unit-type; + description + "Rate specified in bits per second."; + } + identity percent { + base rate-unit-type; + description + "Rate specified as a percentage of queue depth."; + } + + identity burst-unit-type { + description + "Base definition for burst specification."; + } + identity bytes { + base burst-unit-type; + description + "Burst specified in bytes."; + } + identity microsecond { + base burst-unit-type; + description + "Burst specified in microseconds."; + } + + identity red-threshold-unit { + description + "Base definition for RED threshold specification."; + } + identity red-threshold-bytes { + base red-threshold-unit; + description + "RED threshold specified in bytes."; + } + identity red-threshold-us { + base red-threshold-unit; + description + "RED threshold specified in microseconds."; + } + identity red-threshold-pc { + base red-threshold-unit; + description + "RED threshold specified as a percentage."; + } + identity red-theshold-pt { + base red-threshold-unit; + description + "RED threshold specified per-thousand."; + } + + identity wred-color-type { + description + "Base identity for WRED color type."; + } + identity wred-color-dscp { + base wred-color-type; + description + "WRED color specified by DSCP."; + } + + identity probability-unit { + description + "Base definition for probability unit."; + } + identity probability-pc { + base probability-unit; + description + "Probability specified in percentage."; + } + identity probability-pt { + base probability-unit; + description + "Probability specified in unit of per thousand."; + } + identity probability-denominator { + base probability-unit; + description + "Probability value specified as a denominator value + while numerator is always 1."; + } + + identity filter-type { + description + "Base identity for filter type."; + } + + identity dscp { + base filter-type; + description + "Filter type specified as DSCP."; + } + identity source-ipv4-prefix { + base filter-type; + description + "Filter type specified as source IPv4 prefix."; + } + identity destination-ipv4-prefix { + base filter-type; + description + "Filter type specified as destination IPv4 prefix."; + } + identity source-ipv6-prefix { + base filter-type; + description + "Filter type specified as source IPv6 prefix."; + } + identity destination-ipv6-prefix { + base filter-type; + description + "Filter type specified as destination IPv6 prefix."; + } + identity source-port { + base filter-type; + description + "Filter type specified as source port."; + } + identity destination-port { + base filter-type; + description + "Filter type specified as destination port."; + } + identity protocol { + base filter-type; + description + "Filter type specified as protocol."; + } + identity traffic-group-name { + base filter-type; + description + "Filter type specified as traffic group name."; + } + identity filter-match-all { + base filter-type; + description + "Filter type specified as match all."; + } + + typedef match-operation-type { + type enumeration { + enum match-all { + description + "Classifier entry filters logical AND operation"; + } + enum match-any { + description + "Classifier entry filters logical OR operation"; + } + } + default "match-all"; + description + "Filter match logical operation type"; + } + + identity direction { + description + "Base identity for traffic direction"; + } + identity ingress { + base direction; + description + "Direction of traffic coming into the network entry"; + } + identity egress { + base direction; + description + "Direction of traffic going out of the network entry"; + } + + identity meter-action-type { + description + "Base identify for actions related to metering"; + } + identity action-drop { + base meter-action-type; + description + "Drop packets that conform/exceed/violate to the set value."; + } + identity action-transmit { + base meter-action-type; + description + "Transmit packets that conform/exceed/violate to the set + value."; + } + identity action-mark { + base meter-action-type; + description + "Mark packets that conform/exceed/violate to the set value."; + } + + identity clear-counters-type { + description + "Base identify for clear interface counters related options"; + } + identity all-counters { + base clear-counters-type; + description + "Clear all counters in both directions."; + } + identity inbound-counters { + base clear-counters-type; + description + "Clear counters in inbound direction."; + } + identity outbound-counters { + base clear-counters-type; + description + "Clear counters in outbound direction."; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-queue-policy@2024-01-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-queue-policy@2025-07-06.yang similarity index 98% rename from experimental/ietf-extracted-YANG-modules/ietf-queue-policy@2024-01-31.yang rename to experimental/ietf-extracted-YANG-modules/ietf-queue-policy@2025-07-06.yang index 6ad6296a1..dcb7707dd 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-queue-policy@2024-01-31.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-queue-policy@2025-07-06.yang @@ -12,7 +12,7 @@ module ietf-queue-policy { import ietf-diffserv { prefix diffserv; } - import iana-qos-types { + import ietf-qos-types { prefix qos-types; reference "RFC XXXX: YANG Models for Quality of Service (QoS)."; @@ -47,7 +47,7 @@ module ietf-queue-policy { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-01-31 { + revision 2025-07-06 { description "Initial version."; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-resource-pm-types@2024-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-resource-pm-types@2025-07-04.yang similarity index 96% rename from experimental/ietf-extracted-YANG-modules/ietf-resource-pm-types@2024-07-07.yang rename to experimental/ietf-extracted-YANG-modules/ietf-resource-pm-types@2025-07-04.yang index f57b4c7e8..e0f093dec 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-resource-pm-types@2024-07-07.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-resource-pm-types@2025-07-04.yang @@ -15,7 +15,7 @@ module ietf-resource-pm-types { Editor: Fabio Peruzzini - + Editor: Yanlei Zheng @@ -43,7 +43,7 @@ module ietf-resource-pm-types { The model fully conforms to the Network Management Datastore Architecture (NMDA). - Copyright (c) 2022 IETF Trust and the persons + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -62,7 +62,7 @@ module ietf-resource-pm-types { described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here."; - revision 2024-07-07 { + revision 2025-07-04 { description "Initial revision."; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2024-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2025-07-04.yang similarity index 99% rename from experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2024-07-07.yang rename to experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2025-07-04.yang index dc4cf429b..b4543944a 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2024-07-07.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2025-07-04.yang @@ -22,7 +22,7 @@ module ietf-resource-pm { Editor: Fabio Peruzzini - + Editor: Yanlei Zheng @@ -49,7 +49,7 @@ module ietf-resource-pm { The model fully conforms to the Network Management Datastore Architecture (NMDA). - Copyright (c) 2022 IETF Trust and the persons + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -68,7 +68,7 @@ module ietf-resource-pm { described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here."; - revision 2024-07-07 { + revision 2025-07-04 { description "Initial revision."; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-schc-coap@2025-03-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-schc-coap@2025-07-07.yang similarity index 84% rename from experimental/ietf-extracted-YANG-modules/ietf-schc-coap@2025-03-03.yang rename to experimental/ietf-extracted-YANG-modules/ietf-schc-coap@2025-07-07.yang index bb98cb9a1..e958ac997 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-schc-coap@2025-03-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-schc-coap@2025-07-07.yang @@ -36,7 +36,7 @@ module ietf-schc-coap { This module extends the ietf-schc module defined in RFC 9363 to include the new CoAP options as defined in RFC YYYY."; - revision 2025-03-03 { + revision 2025-07-07 { description "New CoAP extensions and extended OSCORE fields."; reference @@ -143,46 +143,22 @@ module ietf-schc-coap { RFC XXXX Key Update for OSCORE (KUDOS)"; } - identity fid-coap-option-oscore-y { - base "schc:fid-coap-option"; - description - "CoAP option OSCORE y field."; - reference - "RFC YYYY Static Context Header Compression (SCHC) for the - Constrained Application Protocol (CoAP) (see - Section 6.4) - RFC XXXX Key Update for OSCORE (KUDOS)"; - } - - identity fid-coap-option-oscore-oldnonce { - base "schc:fid-coap-option"; - description - "CoAP option OSCORE old_nonce field."; - reference - "RFC YYYY Static Context Header Compression (SCHC) for the - Constrained Application Protocol (CoAP) (see - Section 6.4) - RFC XXXX Key Update for OSCORE (KUDOS)"; - } - // Function Length - identity fl-oscore-oscore-nonce-length { + identity fl-oscore-oscore-piv-length { base "schc:fl-base-type"; description - "Size in bytes of the OSCORE nonce corresponding to m+1."; + "Size in bytes of the OSCORE Partial IV corresponding to n."; reference "RFC YYYY Static Context Header Compression (SCHC) for the Constrained Application Protocol (CoAP) (see - Section 6.4) - RFC XXXX Key Update for OSCORE (KUDOS)"; + Section 6.4)"; } - identity fl-oscore-oscore-oldnonce-length { + identity fl-oscore-oscore-nonce-length { base "schc:fl-base-type"; description - "Size in bytes of the OSCORE old_nonce corresponding to w+1. - "; + "Size in bytes of the OSCORE nonce corresponding to m+1."; reference "RFC YYYY Static Context Header Compression (SCHC) for the Constrained Application Protocol (CoAP) (see diff --git a/experimental/ietf-extracted-YANG-modules/ietf-scheduler-policy@2024-01-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-scheduler-policy@2025-07-06.yang similarity index 97% rename from experimental/ietf-extracted-YANG-modules/ietf-scheduler-policy@2024-01-31.yang rename to experimental/ietf-extracted-YANG-modules/ietf-scheduler-policy@2025-07-06.yang index 5eb1f1f25..a41482ead 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-scheduler-policy@2024-01-31.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-scheduler-policy@2025-07-06.yang @@ -12,7 +12,7 @@ module ietf-scheduler-policy { import ietf-diffserv { prefix diffserv; } - import iana-qos-types { + import ietf-qos-types { prefix qos-types; reference "RFC XXXX: YANG Models for Quality of Service (QoS)."; @@ -26,7 +26,7 @@ module ietf-scheduler-policy { WG List: Editor: Aseem Choudhary - + Editor: Mahesh Jethanandani "; @@ -47,7 +47,7 @@ module ietf-scheduler-policy { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-01-31 { + revision 2025-07-06 { description "Initial version."; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-srv6-base@2022-01-14.yang b/experimental/ietf-extracted-YANG-modules/ietf-srv6-base@2025-07-07.yang similarity index 60% rename from experimental/ietf-extracted-YANG-modules/ietf-srv6-base@2022-01-14.yang rename to experimental/ietf-extracted-YANG-modules/ietf-srv6-base@2025-07-07.yang index 80c0fdb23..b2d5a693d 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-srv6-base@2022-01-14.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-srv6-base@2025-07-07.yang @@ -12,7 +12,6 @@ module ietf-srv6-base { prefix inet; reference "RFC 6991: Common YANG Data Types"; } - import ietf-yang-types { prefix "yang"; reference "RFC 6991: Common YANG Data Types"; @@ -55,13 +54,13 @@ module ietf-srv6-base { Editor: Xufeng Liu - + Editor: Zhibo Hu Editor: Iftekhar Hussain - + Editor: Himanshu Shah @@ -76,11 +75,13 @@ module ietf-srv6-base { Editor: Katsuhiro Horiba - + Editor: Ahmed AbdelSalam + Editor: Pingping Yu + "; description @@ -102,6 +103,15 @@ module ietf-srv6-base { // RFC Editor: replace XXXX with actual RFC number and remove // this note + revision 2025-07-07 { + description + "Adding compressed SID and few other missing def"; + reference + "RFC XXXX: YANG Data Model for SRv6"; + // RFC Editor: replace XXXX with actual RFC number and remove + // this note + } + revision 2022-01-14 { description "Alignment with SRv6 network programming rev16"; @@ -217,6 +227,7 @@ module ietf-srv6-base { container hop-limit { description "Configure IPv6 header's Hop-limit options"; leaf value { + when "../propagate = 'false'"; type uint8; default 64; description "Set encapsulating outer IPv6 header's Hoplimit @@ -238,6 +249,7 @@ module ietf-srv6-base { container traffic-class { description "Configure IPv6 header's Traffic-class options"; leaf value { + when "../propagate = 'false'"; type uint8; default 0; description "Set encapsulating outer IPv6 header's @@ -258,6 +270,127 @@ module ietf-srv6-base { } } +grouping srv6-ucsid16-cfg-grouping { + description "Uncompressed 16 bit FUNCT SID format config grouping"; + + container id-block { + description "Container for Id allocation corresponding to FUNCT"; + reference "RFC XXXX: YANG Data Model for SRv6 - Section 3.4.1"; + + container explicit { + description "Configure Explicit FUNCT parameters"; + leaf start { + type uint16; + description "Start of explicit block"; + } + leaf size { + type uint16; + description "Size of explicit block"; + } + } + } +} + +grouping srv6-csid-next16-cfg-grouping { + description "NEXT-CSID (16b uSID) common grouping"; + + // CFG + + container local-id-block { + description "Configure LIB parameters"; + reference "RFC XXXX: YANG Data Model for SRv6 - Section 3.4.2"; + leaf start { + type uint16; // TODO: range + description "LIB space follows GIB space. An implementation may chose + the default index for the start of LIB - e.g. LIB starting + from 0xE000. This configuration item allows to change the start of + LIB space as a user wishes to resize (expand or shrink) + it"; + } + + container explicit { + description "Configure Explicit LIB parameters"; + + leaf start { + type uint16; + description "Start of explicit LIB within LIB space"; + } + leaf size { + type uint16; + description "Size (to shrink or expand) of explicit LIB"; + } + } + } +} + +/* TODO +grouping srv6-csid-replace-cfg-grouping { + description "REPLACE-CSID common grouping"; + // TODO CFG + } +*/ + + grouping srv6-sid-formats { + description "SRv6 SID formats grouping"; + + container sid-formats { + description "Container for SRv6 SID formats"; + + list format { + key "type"; + description "SRv6 SID format"; + + leaf type { + type identityref { base srv6-types:srv6-sid-format-type; } + description "Format type"; + } + + // STATE + leaf compression-type { + type srv6-types:srv6-sid-compression-type; + config false; + description "Compression type"; + } + leaf description { + type string; + config false; + description "Format description"; + } + + uses srv6-types:srv6-sid-structure-info-grouping; + + // CFG + container uncompressed-16 { + when "derived-from-or-self(../type, 'srv6-sid-fmt-uc-1')" { + description "This container is valid only when the + SID format is one of the uncompressed types"; + } + + description "Configuration specific to uncompressed SID formats with 16b FUNCT"; + uses srv6-ucsid16-cfg-grouping; + } + + container csid-next-16 { + when "derived-from-or-self(../type, 'srv6-sid-fmt-cnext-1616') or + derived-from-or-self(../type, 'srv6-sid-fmt-cnext-3216') or + derived-from-or-self(../type, 'srv6-sid-fmt-cnext-6416')" { + description "This container is valid only when the + SID format is one of the 16bits NEXT-CSID"; + } + + description "Configuration specific to NEXT-CSID with 16b CSIDs"; + uses srv6-csid-next16-cfg-grouping; + } + + container csid-replace { + // TODO: when clause if/as needed + description "REPLACE-CSID specific items"; + // TODO: uses srv6-csid-replace-cfg-grouping; + } + } + } + } + grouping srv6-locator-state { description "SRv6 grouping Locator state"; @@ -275,6 +408,58 @@ module ietf-srv6-base { } } + grouping srv6-remote-locator-stats-grouping { + description "SRv6 Locator prefix accounting grouping"; + + container traffic-accounting { + description "SRv6 remote locator traffic accounting"; + + container inbound { + description "Per-Locator prefix inbound accounting"; + + uses srv6-stats-in; + } + + container outbound { + description "Per-Locator prefix per-nexthop counters (aka LOC.INT.E)"; + + list paths { + key "interface next-hop"; + description "Forwarding path information"; + + leaf interface { + type if:interface-ref; + description "The outgoing interface"; + } + + leaf next-hop { + type inet:ipv6-address; + description "The IPv6 address of the next-hop"; + } + + uses srv6-stats-out; + } + } + } +} + grouping srv6-remote-locators-state { + + description "SRv6 Remote Locator state grouping"; + + list remote { + key "prefix"; + config false; + description "SRv6 remote locators' prefixes"; + + leaf prefix { + type inet:ipv6-prefix; + description "Locator IPv6 prefix"; + } + + uses srv6-remote-locator-stats-grouping; + } + } + grouping srv6-locators { description "SRv6 locator grouping"; @@ -296,6 +481,12 @@ module ietf-srv6-base { description "Enable a SRv6 locator"; } + leaf format { + type identityref { base srv6-types:srv6-sid-format-type; } + mandatory true; + description "SRv6 SID format"; + } + container prefix { description "Specify locator prefix value"; leaf address { @@ -311,7 +502,7 @@ module ietf-srv6-base { } leaf algorithm { - type uint32 { + type uint8 { range "128..255"; } @@ -324,8 +515,30 @@ module ietf-srv6-base { description "Set to true if locator is an Anycast locator"; } + container node-sid-auto-allocation { + description "Container for SID auto allocation"; + leaf behavior { + type identityref { base srv6-types:srv6-endpoint-type; } + + description "As locator becomes operational, Node SIDs can be + auto allocated - e.g. in Uncompressed format locator, a reserved + FUNC value can be used and assigned for END SID; In + NEXT-CSID, the locator prefix address is used as + NEXT-CSID's END. These node SID are auto allocated with a + default variant (e.g. PSP-USD). This item allows a user to specify + a different variant."; + } + + leaf disable { + type boolean; + default false; + description "Set to true to disable auto allocation of SIDs"; + } + } + uses srv6-locator-state; } + uses srv6-remote-locators-state; } } @@ -408,21 +621,31 @@ module ietf-srv6-base { } container l2 { - when "../../../next-hop-type = 'l2'" { - description "This container is valid only for L2 type - of NHs"; - } leaf interface { + when "../../../../next-hop-type = 'l2'" { + description "This leaf is valid only when the nexthop type + is l2"; + } type if:interface-ref; description "The outgoing Layer2 interface"; } + leaf lookup-table-id { + when "../../../../next-hop-type = 'l2_lookup'" { + description "This leaf is valid only when the nexthop type + is L2 lookup (in a table)"; + } + type uint32; + description "Lookup Table ID; Applicable to L2 VLAN, + L2 Ucast/Mcast table"; + } + description "L2 information"; - } + } container l3 { - when "../../../next-hop-type != 'l2'" { + when "../../../next-hop-type = 'ipv4' or ../../../next-hop-type = 'ipv6'" { description "This container is valid only for L3 type of NHs"; } @@ -439,8 +662,23 @@ module ietf-srv6-base { uses path-attrs-cmn; + leaf lookup-table-id { + when "../../../../next-hop-type = 'l3_lookup'" { + description "This leaf is valid only when the nexthop type + is L3 lookup (in a table)"; + } + type uint32; + description "L3 Lookup Table ID; Applicable to L3 unicast table"; + } + + //leaf vrf-name { + // type string; + // description " vrf name"; + //} + description "L3 information"; } + uses path-out-sids-choice; } @@ -449,79 +687,106 @@ module ietf-srv6-base { } } - grouping srv6-state-sid { - description "SRv6 SID state grouping"; + grouping srv6-sid-alloc-grouping { + description "SRv6 SID allocation grouping"; - container local-sids { - config false; - description "Local-SID state"; + container allocation { + description "SRv6 SID allocation container."; - container counters { - description "SRv6 counters"; - container cnt-3 { - description "Counts SRv6 traffic received/dropped on local - prefix not instantiated as local-SID"; - uses srv6-stats-in; - } + leaf alloc-type { + type srv6-types:sid-alloc-type; + description "Type of sid allocation."; } - list local-sid { - key "sid"; - description "Per-localSID Counters"; + list owner { + key "type instance"; + description "SID Owner clients"; - leaf sid { - type srv6-types:srv6-sid; - description "Local SID value"; + leaf type { + type identityref { base srv6-types:srv6-sid-owner-type; } + description "SID owner/client type"; } - uses srv6-locator; + leaf instance { + type string; + description "Client instance"; + } - leaf is-reserved { + leaf is-winner { type boolean; - description "Set to true if SID comes from reserved pool"; + description "Is this client/owner the winning in terms of forwarding"; } + } - leaf end-behavior-type { - type identityref { - base srv6-types:srv6-endpoint-type; - } - description "Type of SRv6 end behavior."; - } + leaf allocated-from-reserved { + type boolean; + description "Set to true if SID comes from reserved pool"; + } + } +} - leaf alloc-type { - type srv6-types:sid-alloc-type; - description - "Type of sid allocation."; - } + grouping srv6-state-sid { + description "SRv6 SID state grouping"; + + container sids { + + description "My SID state"; - list owner { - key "type instance"; - description "SID Owner clients"; - leaf type { - type identityref { - base srv6-types:srv6-sid-owner-type; + leaf sid-holdtime { + type uint8 { + range "0..60"; //The range of minutes is from 0 (disabled) to 60 minutes } - description "SID owner/client type"; + units minutes; + default 30; + description "The holdtime for a stale or freed SID. The value 0 + is used for an immediate release of an allocated SID."; } - leaf instance { - type string; - description "Client instance"; - } - leaf is-winner { - type boolean; - description "Is this client/owner the winning in terms of - forwarding"; + + container counts { + config false; + description "Summary/aggregate counts for my SIDs"; + + leaf allocated { + type uint32; + description "Total number of currently allocated SID"; + } + + leaf stale { + type uint32; + description "A stale SID is the a previously allocated SID which + is freed by the owner but not fully released due to holdtime"; + } } + + list sid { + key "sid"; + config false; + + description "Per-SID"; + + leaf sid { + type srv6-types:srv6-sid; + description "My SID value"; } + leaf behavior { + type identityref { base srv6-types:srv6-endpoint-type; } + description "Type of SRv6 endpoint behavior."; + } + + uses srv6-locator; + + uses srv6-sid-alloc-grouping; + uses local-sid-fwd-state; container counters { - description "SRv6 per local-SID counters"; + description "SRv6 per SID counters"; - container cnt-1 { + container success { description "Counts SRv6 traffic received on local-SID - prefix and processed successfully"; + prefix and processed successfully - see + srv6-counter-types:CNT-MySID-Success (RFC 8986 section 6)"; uses srv6-stats-in; } } @@ -536,9 +801,7 @@ module ietf-srv6-base { description "End behavior support"; leaf type { - type identityref { - base srv6-types:srv6-endpoint-type; - } + type identityref { base srv6-types:srv6-endpoint-type; } description "End behavior (End*) type"; } leaf supported { @@ -556,9 +819,7 @@ module ietf-srv6-base { key "type"; description "Headend behavior support"; leaf type { - type identityref { - base srv6-types:srv6-headend-type; - } + type identityref { base srv6-types:srv6-headend-type; } description "Headend behavior (H*) type"; } leaf supported { @@ -608,9 +869,7 @@ module ietf-srv6-base { description "Security rule support"; leaf type { - type identityref { - base srv6-types:srv6-security-type; - } + type identityref { base srv6-types:srv6-security-type; } description "Security rule type"; } leaf supported { @@ -628,9 +887,7 @@ module ietf-srv6-base { key "type"; description "SRv6 counter support"; leaf type { - type identityref { - base srv6-types:srv6-counter-type; - } + type identityref { base srv6-types:srv6-counter-type; } description "Counter type"; } leaf supported { @@ -661,7 +918,6 @@ module ietf-srv6-base { container srv6 { description "Segment Routing with IPv6 dataplane"; - /* config */ leaf enable { type boolean; @@ -669,9 +925,10 @@ module ietf-srv6-base { description "Enable SRv6"; } + uses srv6-state-capabilities; uses srv6-encap; + uses srv6-sid-formats; uses srv6-locators; - uses srv6-state-capabilities; uses srv6-state-sid; } } @@ -711,22 +968,47 @@ module ietf-srv6-base { container existing { description "Current assignment / bind"; leaf end-behavior-type { - type identityref { - base srv6-types:srv6-endpoint-type; - } + type identityref { base srv6-types:srv6-endpoint-type; } description "End type"; } - // TODO: More + + list owner { + key "type instance"; + description "SID Owner clients"; + + leaf type { + type identityref { base srv6-types:srv6-sid-owner-type; } + description "SID owner/client type"; + } + + leaf instance { + type string; + description "Client instance"; + } + } } + container requested { description "Requested assignment / bind"; leaf end-behavior-type { - type identityref { - base srv6-types:srv6-endpoint-type; - } + type identityref { base srv6-types:srv6-endpoint-type; } description "End type"; } + + container requester { + description "SID client"; + + leaf type { + type identityref { base srv6-types:srv6-sid-owner-type; } + description "SID owner/client type"; + } + + leaf instance { + type string; + description "Client instance"; + } + } } } } // module diff --git a/experimental/ietf-extracted-YANG-modules/ietf-srv6-nexthop@2025-07-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-srv6-nexthop@2025-07-05.yang new file mode 100644 index 000000000..413cc7ecb --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-srv6-nexthop@2025-07-05.yang @@ -0,0 +1,195 @@ +module ietf-srv6-nexthop { + yang-version "1.1"; + namespace "urn:ietf:params:xml:ns:yang:ietf-srv6-nexthop"; + prefix "srv6-nexthop"; + import ietf-inet-types { + prefix "inet"; + reference + "RFC 6991: Common YANG Data Types"; + } + import ietf-routing { + prefix "rt"; + reference + "RFC 8349: A YANG Data Model for Routing Management + (NMDA Version)."; + } + import ietf-ipv4-unicast-routing { + prefix "v4ur"; + reference + "RFC 8349: A YANG Data Model for Routing Management + (NMDA Version)."; + } + import ietf-ipv6-unicast-routing { + prefix "v6ur"; + reference + "RFC 8349: A YANG Data Model for Routing Management + (NMDA Version)."; + } + import ietf-sr-policy-types { + prefix "sr-policy-types"; + reference + "RFC XXXX: YANG Data Model for Segment Routing Policy."; + } + organization + "IETF SPRING Working Group"; + contact + "TBD"; + description + "This module describes a YANG model for configuring and + managing SRv6 next hop information for Routing. + This YANG model conforms to the Network Management + Datastore Architecture (NMDA) as described in RFC 8342. + Copyright (c) 2025 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 Revised 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. + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL + NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', + 'MAY', and 'OPTIONAL' in this document are to be interpreted as + described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, + they appear in all capitals, as shown here."; + revision 2025-07-05 { + description + "Initial Version"; + reference + "RFC XXXX, YANG Data Model for SRv6 Next Hop of Routing"; + } + grouping srv6-nexthop-info { + description + "This group provides the information of SRv6 next hop for + routing."; + container srv6-te { + description + "The informaton of SRv6 Traffic Engineering forwarding."; + leaf color { + type sr-policy-types:color-type; + description + "The Color of a SRv6 Policy."; + } + leaf endpoint { + type inet:ip-prefix; + description + "The endpoint of a SRv6 Policy."; + } + leaf srv6-sid { + type inet:ipv6-prefix; + description + "The SRv6 SID value for SRv6 Traffic Engineering + forwarding."; + } + } + container srv6-be { + description + "The informaton of SRv6 Best Effort forwarding."; + leaf srv6-sid { + type inet:ipv6-prefix; + description + "The SRv6 SID value for SRv6 Best Effort forwarding."; + } + } + } + grouping srv6-nexthop-content { + description + "Generic parameters of SRv6 next hop in static routes."; + container srv6-next-hop-list { + description + "Container for multiple SRv6 next hop."; + list srv6-next-hop { + key "index"; + description + "An entry in a SRv6 next hop list."; + leaf index { + type string; + description + "A user-specified identifier utilized to uniquely + reference the SRv6 next-hop entry in the SRv6 + next-hop list. The value of this index has no + semantic meaning other than for referencing the + entry."; + } + uses srv6-nexthop-info; + } + } + } + grouping srv6-nexthop-state-content { + description + "Generic state parameters of SRv6 next hop."; + container srv6-next-hop-list { + description + "Container for multiple SRv6 next hop."; + list srv6-next-hop { + description + "An entry in a SRv6 next hop list."; + uses srv6-nexthop-info; + } + } + } + augment "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:static-routes/v4ur:ipv4/" + + "v4ur:route/v4ur:next-hop/v4ur:next-hop-options" { + description + "Augment 'next-hop-options' in IPv4 unicast route."; + case srv6-next-hop-list { + description + "The case represents a SRv6 next hop list."; + uses srv6-nexthop-content; + } + } + augment "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:static-routes/v6ur:ipv6/" + + "v6ur:route/v6ur:next-hop/v6ur:next-hop-options" { + description + "Augment 'next-hop-options' in IPv6 unicast route."; + case srv6-next-hop-list { + description + "The case represents a SRv6 next hop list."; + uses srv6-nexthop-content; + } + } + augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/" + + "rt:next-hop/rt:next-hop-options" { + description + "Augment 'next-hop-options' of a route in RIB."; + case srv6-next-hop-list { + description + "The case represents a SRv6 next hop list."; + uses srv6-nexthop-state-content; + } + } + augment "/rt:routing/rt:ribs/rt:rib/rt:active-route/rt:output/" + + "rt:route/rt:next-hop/rt:next-hop-options" { + description + "Augment 'next-hop-options' of an active-route in RIB."; + case srv6-next-hop-list { + description + "The case represents a SRv6 next hop list."; + uses srv6-nexthop-state-content; + } + } + augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/" + + "rt:route/rt:next-hop/rt:next-hop-options" { + description + "Augment 'next-hop-options' of a route state in RIB."; + case srv6-next-hop-list { + description + "The case represents a SRv6 next hop list."; + uses srv6-nexthop-state-content; + } + } + augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/" + + "rt:output/rt:route/rt:next-hop/rt:next-hop-options" { + description + "Augment 'next-hop-options' of an active route state in RIB."; + case srv6-next-hop-list { + description + "The case represents a SRv6 next hop list."; + uses srv6-nexthop-state-content; + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2024-03-04.yang b/experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2025-07-07.yang similarity index 98% rename from experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2024-03-04.yang rename to experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2025-07-07.yang index 86297ed50..9cc722e2c 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2024-03-04.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2025-07-07.yang @@ -59,7 +59,7 @@ module ietf-srv6-static { Editor: Iftekhar Hussain - + Editor: Himanshu Shah @@ -74,12 +74,15 @@ module ietf-srv6-static { Editor: Katsuhiro Horiba - + Editor: Ahmed AbdelSalam - "; + Editor: Pingping Yu + + + "; description "This YANG module defines the essential elements for the management of Static application for Segment-Routing with @@ -101,6 +104,15 @@ module ietf-srv6-static { // RFC Editor: replace XXXX with actual RFC number and remove // this note + revision 2025-07-07 { + description + "Renamed local-sid to sid"; + reference + "RFC XXXX: YANG Data Model for SRv6 Static"; + // RFC Editor: replace XXXX with actual RFC number and remove + // this note + } + revision 2024-03-04 { description "Fixed static yang warnings"; @@ -265,6 +277,7 @@ module ietf-srv6-static { list path { key path-index; description "The list of paths associated with the SID"; + leaf path-index { type uint8; description "Index of the path"; @@ -409,6 +422,7 @@ module ietf-srv6-static { (variant: PSP/USD)"; } + container end_usp_usd { when "../end-behavior-type = 'srv6-types:End_USP_USD'" { description @@ -601,6 +615,7 @@ module ietf-srv6-static { in the core."; // TODO presence "Mandatory child only if container is present"; + leaf lookup-table-ipv6 { type srv6-types:table-id; mandatory true; @@ -840,6 +855,7 @@ module ietf-srv6-static { uses multi-paths-v6; } + container end-bm { when "../end-behavior-type = 'srv6-types:End.BM'" { description @@ -1073,13 +1089,13 @@ module ietf-srv6-static { to EVPN ESI filtering and EVPN-ETREE used to exclude specific OIF (or set of OIFs) from flooding table. */ } - /* End of EVPN END behavior types */ } - grouping srv6-static-cfg { + grouping srv6-static-sid-cfg { description "Grouping configuration and operation for SRv6 sid."; + list sid { key "function"; description "List of locally instantiated SIDs"; @@ -1095,12 +1111,12 @@ module ietf-srv6-static { container static { description "Static SRv6"; - /* Local SIDs */ - container local-sids { + /* Local/My SIDs */ + container sids { description - "SRv6-static locally instantiated SIDs"; + "Locally instantiated explicit SRv6 SIDs"; - uses srv6-static-cfg; + uses srv6-static-sid-cfg; /* no state for now; SID state accessible through base model */ } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2024-11-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2025-07-07.yang similarity index 52% rename from experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2024-11-21.yang rename to experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2025-07-07.yang index 836443536..cd419452e 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2024-11-21.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2025-07-07.yang @@ -28,7 +28,7 @@ module ietf-srv6-types { Editor: Iftekhar Hussain - + Editor: Himanshu Shah @@ -43,11 +43,14 @@ module ietf-srv6-types { Editor: Katsuhiro Horiba - + Editor: Ahmed AbdelSalam + Editor: Pingping Yu + + "; description @@ -70,6 +73,15 @@ module ietf-srv6-types { // RFC Editor: replace XXXX with actual RFC number and remove // this note + revision 2025-07-07 { + description + "Adding compressed SID and few other missing def"; + reference + "RFC XXXX: YANG Data Model for SRv6"; + // RFC Editor: replace XXXX with actual RFC number and remove + // this note + } + revision 2024-11-21 { description "Added SID structure definition and "; @@ -123,7 +135,6 @@ module ietf-srv6-types { // RFC Editor: replace XXXX with actual RFC number and remove // this note } - identity srv6-endpoint-type { description "Base identity from which specific SRv6 Endpoint types are @@ -172,7 +183,6 @@ module ietf-srv6-types { reference "RFC 8986"; } - identity End.X_PSP { base srv6-endpoint-type; description @@ -236,6 +246,8 @@ module ietf-srv6-types { "RFC 8986"; } + // TODO: End.B6.Insert + identity End.B6.Encaps { base srv6-endpoint-type; description @@ -315,7 +327,6 @@ module ietf-srv6-types { reference "RFC 8986"; } - identity End.DT2U { base srv6-endpoint-type; description @@ -334,6 +345,8 @@ module ietf-srv6-types { "RFC 8986"; } + // TODO: End.B6.Insert.Red + identity End.B6.Encaps.Red { base srv6-endpoint-type; description @@ -445,142 +458,715 @@ module ietf-srv6-types { "RFC 8986"; } - /* Endpoints defined under - * draft-ietf-spring-sr-service-programming */ + identity End.MAP { + base srv6-endpoint-type; + description + "DMM End.MAP"; + reference + "RFC9433"; + } - identity End.AN { + identity End.Limit { base srv6-endpoint-type; description - "Service-Chaining SR Aware function (native)"; + "DMM End.Limit"; reference - "draft-ietf-spring-sr-service-programming-05"; + "RFC9433"; + } + + /* Endpoints defined under RFC9800 */ + + identity END.NEXT-ONLY-CSID { + base srv6-endpoint-type; + description + "End SID with the NEXT-ONLY-CSID flavor"; + reference + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.AS { + identity END.NEXT-CSID { base srv6-endpoint-type; description - "Service-Chaining Static proxy"; + "End SID with the NEXT-CSID flavor"; reference - "draft-ietf-spring-sr-service-programming-05"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.AD { + identity END.NEXT-CSID_PSP { base srv6-endpoint-type; description - "Service-Chaining Dynamic proxy"; + "End SID with the NEXT-CSID PSP flavor"; reference - "draft-ietf-spring-sr-service-programming-05"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.AM { + identity END.NEXT-CSID_USP { base srv6-endpoint-type; description - "Service-Chaining Masquerading SR proxy"; + "End SID with the NEXT-CSID USP flavor"; reference - "draft-ietf-spring-sr-service-programming-05"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.AM_NAT { + identity END.NEXT-CSID_PSP_USP { base srv6-endpoint-type; description - "Service-Chaining Masquerading SR proxy with NAT"; + "End SID with the NEXT-CSID PSP/USP flavor"; reference - "draft-ietf-spring-sr-service-programming-05"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.AM_CACHE { + identity END.NEXT-CSID_USD { base srv6-endpoint-type; description - "Service-Chaining Masquerading SR proxy with Caching"; + "End SID with the NEXT-CSID USD flavor"; reference - "draft-ietf-spring-sr-service-programming-05"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.AM_NAT_CACHE { + identity END.NEXT-CSID_PSP_USD { base srv6-endpoint-type; description - "Service-Chaining Masquerading SR proxy with NAT and - Caching"; + "End SID with the NEXT-CSID PSP/USD flavor"; reference - "draft-ietf-spring-sr-service-programming-05"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - /* Endpoints defined under draft-ietf-dmm-srv6-mobile-uplane */ + identity END.NEXT-CSID_USP_USD { + base srv6-endpoint-type; + description + "End SID with the NEXT-CSID USP/USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } - identity End.MAP { + identity END.NEXT-CSID_PSP_USP_USD { base srv6-endpoint-type; description - "DMM End.MAP"; + "End SID with the NEXT-CSID PSP/USP/USD flavor"; reference - "draft-ietf-dmm-srv6-mobile-uplane-17"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.Limit { + identity END.NEXT-CSID_ONLY { base srv6-endpoint-type; description - "DMM End.Limit"; + "End.X SID with the NEXT-ONLY-CSID flavor"; reference - "draft-ietf-dmm-srv6-mobile-uplane-17"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.M.GTP6.D { + identity END.X.NEXT-CSID { base srv6-endpoint-type; description - "DMM End.M.GTP6.D"; + "End.X SID with the NEXT-CSID flavor"; reference - "draft-ietf-dmm-srv6-mobile-uplane-17"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.M.GTP6.Di { + identity END.X.NEXT-CSID_PSP { base srv6-endpoint-type; description - "DMM End.M.GTP6.Di"; + "End.X SID with the NEXT-CSID PSP flavor"; reference - "draft-ietf-dmm-srv6-mobile-uplane-17"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.M.GTP6.E { + identity END.X.NEXT-CSID_USP { base srv6-endpoint-type; description - "DMM End.M.GTP6.E"; + "End.X SID with the NEXT-CSID USP flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.NEXT-CSID_PSP_USP { + base srv6-endpoint-type; + description + "End.X SID with the NEXT-CSID PSP/USP flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + identity END.X.NEXT-CSID_USD { + base srv6-endpoint-type; + description + "End.X SID with the NEXT-CSID USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.NEXT-CSID_PSP_USD { + base srv6-endpoint-type; + description + "End.X SID with the NEXT-CSID PSP/USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.NEXT-CSID_USP_USD { + base srv6-endpoint-type; + description + "End.X SID with the NEXT-CSID USP/USD flavor"; reference - "draft-ietf-dmm-srv6-mobile-uplane-05"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } + identity END.X.NEXT-CSID_PSP_USP_USD { + base srv6-endpoint-type; + description + "End.X SID with the NEXT-CSID PSP/USP/USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity End.DX6.NEXT-CSID { + base srv6-endpoint-type; + description + "NEXT-CSID Endpoint with decapsulation and cross-connect + to an array of IPv6 adjacencies"; + reference + "RFC 9800"; + } + identity End.DX4.NEXT-CSID { + base srv6-endpoint-type; + description + "NEXT-CSID Endpoint with decapsulation and cross-connect + to an array of IPv4 adjacencies"; + reference + "RFC 9800"; + } + + identity End.DT6.NEXT-CSID { + base srv6-endpoint-type; + description + "NEXT-CSID Endpoint with decapsulation and specific + IPv6 table lookup"; + reference + "RFC 9800"; + } + + identity End.DT4.NEXT-CSID { + base srv6-endpoint-type; + description + "NEXT-CSID Endpoint with decapsulation and specific + IPv4 table lookup"; + reference + "RFC 9800"; + } + + identity End.DT46.NEXT-CSID { + base srv6-endpoint-type; + description + "NEXT-CSID Endpoint with decapsulation and specific IP + (IPv4 or IPv6) table lookup"; + reference + "RFC 9800"; + } + + identity End.DX2.NEXT-CSID { + base srv6-endpoint-type; + description + "NEXT-CSID Endpoint with decapsulation and Layer-2 + cross-connect to an L2 interface"; + reference + "RFC 9800"; + } + + identity End.DX2V.NEXT-CSID { + base srv6-endpoint-type; + description + "NEXT-CSID Endpoint with decapsulation and specific + VLAN L2 table lookup"; + reference + "RFC 9800"; + } + + identity End.DT2U.NEXT-CSID { + base srv6-endpoint-type; + description + "NEXT-CSID Endpoint with decapsulation and specific + unicast MAC L2 table lookup"; + reference + "RFC 9800"; + } + + identity End.DT2M.NEXT-CSID { + base srv6-endpoint-type; + description + "NEXT-CSID Endpoint with decapsulation and specific L2 table + flooding"; + reference + "RFC 9800"; + } + + /* DMM - RFC9433 */ + + identity End.M.GTP6.D { + base srv6-endpoint-type; + description + "DMM End.M.GTP6.D"; + reference + "RFC 9433"; + } + + identity End.M.GTP6.Di { + base srv6-endpoint-type; + description + "DMM End.M.GTP6.Di"; + reference + "RFC 9433"; + } + + identity End.M.GTP6.E { + base srv6-endpoint-type; + description + "DMM End.M.GTP6.E"; + reference + "RFC 9433"; + } + identity End.M.GTP4.E { base srv6-endpoint-type; description "DMM End.M.GTP4.E"; reference - "draft-ietf-dmm-srv6-mobile-uplane-05"; + "RFC 9433"; + } + /* DMM end */ + + // TODO: END.DTM + // TODO: End.M + // TODO: End.Replicate + // TODO: End.DTMC4 + // TODO: End.DTMC6 + // TODO: End.DTMC46 + + // TODO: End.T NEXT-CSID ... + + identity END.B6.Encaps.NEXT-CSID { + base srv6-endpoint-type; + description + "End.B6.Encaps SID with the NEXT-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.B6.Encaps.Red.NEXT-CSID { + base srv6-endpoint-type; + description + "End.B6.Encaps.Red SID with the NEXT-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.BM.NEXT-CSID { + base srv6-endpoint-type; + description + "End.BM SID with the NEXT-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.REPLACE-SID { + base srv6-endpoint-type; + description + "End SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.REPLACE-SID_PSP { + base srv6-endpoint-type; + description + "End SID with the REPLACE-CSID PSP flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.REPLACE-SID_USP { + base srv6-endpoint-type; + description + "End SID with the REPLACE-CSID USP flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.REPLACE-SID_PSP_USP { + base srv6-endpoint-type; + description + "End SID with the REPLACE-CSID PSP/USP flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.X SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.REPLACE-CSID_PSP { + base srv6-endpoint-type; + description + "End.X SID with the REPLACE-CSID PSP flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.REPLACE-CSID_USP { + base srv6-endpoint-type; + description + "End.X SID with the REPLACE-CSID USP flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.REPLACE-CSID_PSP_USP { + base srv6-endpoint-type; + description + "End SID with the REPLACE-CSID PSP/USP flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + // TODO: End.T REPLACE-CSID + + identity END.B6.Encaps.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.B6.Encaps SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.BM.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.BM.Red SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.DX6.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.DX6 SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.DX4.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.DX4 SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.DT6.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.DT6 SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.DT4.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.DT4 SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.DT46.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.DT46 SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.DX2.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.DX2 SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.DX2V.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.DX2V SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.DT2U.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.DT2U SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.DT2M.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.DT2M SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.B6.Encaps.Red.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.B6.Encaps.Red SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.REPLACE-SID_USD { + base srv6-endpoint-type; + description + "End SID with the REPLACE-CSID USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.REPLACE-SID_PSP_USD { + base srv6-endpoint-type; + description + "End SID with the REPLACE-CSID PSP/USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.REPLACE-SID_USP_USD { + base srv6-endpoint-type; + description + "End SID with the REPLACE-CSID USP/USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.REPLACE-SID_PSP_USP_USD { + base srv6-endpoint-type; + description + "End SID with the REPLACE-CSID PSP/USP/USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.REPLACE-CSID_USD { + base srv6-endpoint-type; + description + "End.X SID with the REPLACE-CSID USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.REPLACE-CSID_PSP_USD { + base srv6-endpoint-type; + description + "End.X SID with the REPLACE-CSID PSP/USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.REPLACE-CSID_USP_USD { + base srv6-endpoint-type; + description + "End.X SID with the REPLACE-CSID USP/USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.REPLACE-CSID_PSP_USP_USD { + base srv6-endpoint-type; + description + "End.X SID with the REPLACE-CSID PSP/USP/USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + // TODO: End.T w/ REPLACE-CSID *USD + // TODO: End.DX1* + + /* Endpoints defined under + * draft-ietf-spring-sr-service-programming */ + + identity End.AN { + base srv6-endpoint-type; + description + "Service-Chaining SR Aware function (native)"; + reference + "draft-ietf-spring-sr-service-programming-05"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity End.AS { + base srv6-endpoint-type; + description + "Service-Chaining Static proxy"; + reference + "draft-ietf-spring-sr-service-programming-05"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity End.AD { + base srv6-endpoint-type; + description + "Service-Chaining Dynamic proxy"; + reference + "draft-ietf-spring-sr-service-programming-05"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity End.AM { + base srv6-endpoint-type; + description + "Service-Chaining Masquerading SR proxy"; + reference + "draft-ietf-spring-sr-service-programming-05"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity End.AM_NAT { + base srv6-endpoint-type; + description + "Service-Chaining Masquerading SR proxy with NAT"; + reference + "draft-ietf-spring-sr-service-programming-05"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity End.AM_CACHE { + base srv6-endpoint-type; + description + "Service-Chaining Masquerading SR proxy with Caching"; + reference + "draft-ietf-spring-sr-service-programming-05"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity End.AM_NAT_CACHE { + base srv6-endpoint-type; + description + "Service-Chaining Masquerading SR proxy with NAT and + Caching"; + reference + "draft-ietf-spring-sr-service-programming-05"; // RFC Editor: replace with actual RFC number and remove this // note } - /* DMM end */ identity srv6-headend-type { description @@ -628,26 +1214,30 @@ module ietf-srv6-types { // RFC Editor: replace with actual RFC number and remove this // note } + identity srv6-security-type { description "Base identity from which SRv6 Security rule types are derived."; } - identity SEC-1 { + identity EXTIF-ACL-DROP-DA-SIDSPACE { base srv6-security-type; description "Support an ACL on the external interface that - drops any traffic with SA or DA in the internal SID space. - (aka Security rule SEC-1)"; + drops any traffic with DA within the internal SID space."; + reference + "RFC 8754 section 5.1"; } - identity SEC-2 { + identity INTIF-ACL-DROP-DA-SIDSPACE-SA-EXT { base srv6-security-type; description - "Support an ACL that drops any traffic on local SID as DA + "Support an ACL that drops any traffic on mySID as DA from a source SA that does not belong to internal address - or SID space. (aka Security rule SEC-2)"; + or SID space.)"; + reference + "RFC 8754 section 5.1"; } identity srv6-counter-type { @@ -655,15 +1245,13 @@ module ietf-srv6-types { "Base identity from which SRv6 counter types are derived."; } - identity LocalSID { + identity CNT-MySID-Success { base srv6-counter-type; description - "Count packets and bytes traffic that matched that SID and - was processed successfully (aka Counter CNT-1)"; + "Count packets and bytes traffic that matched mySID and + was processed successfully"; reference - "RFC 8986"; - // RFC Editor: replace with actual RFC number and remove this - // note + "RFC 8986 section 6"; } typedef srv6-sid { @@ -672,6 +1260,16 @@ module ietf-srv6-types { "This type defines a SID value in SRv6"; } + typedef srv6-sid-compression-type { + type enumeration { + enum uncompressed { value 1; description "Uncompressed"; } + enum csid-next { description "Compressed NEXT-CSID (aka uSID)"; } + enum csid-replace { description "Compressed REPLACE-CSID"; } + } + description + "SID [compression] type"; + } + typedef srv6-sid-func-value { type uint32; description @@ -688,7 +1286,6 @@ module ietf-srv6-types { description "SRv6 SID's FUNC Reserved values"; } - typedef srv6-locator-name-type { type string { length "1..59"; @@ -698,7 +1295,7 @@ module ietf-srv6-types { typedef srv6-locator-len { type uint8 { - range "32 .. 96"; + range "16 .. 96"; } description "This type defines an SRv6 locator len with range @@ -731,13 +1328,12 @@ module ietf-srv6-types { typedef srv6-sid-pfxlen { type uint8 { - range "32 .. 128"; + range "16 .. 128"; } default 128; description "This type defines a SID prefixlen with range constraints"; } - typedef sid-alloc-type { type enumeration { enum Dynamic { @@ -772,6 +1368,7 @@ module ietf-srv6-types { base srv6-sid-owner-type; description "BGP"; } + identity evpn { base srv6-sid-owner-type; description "EVPN"; @@ -787,6 +1384,11 @@ module ietf-srv6-types { description "SF"; } + identity static { + base srv6-sid-owner-type; + description "Static"; + } + typedef table-id { type uint32; description @@ -807,13 +1409,15 @@ module ietf-srv6-types { enum ipv4 { value 1; description "IPv4 next-hop"; } enum ipv6 { description "IPv6 next-hop"; } enum mpls { description "MPLS next-hop"; } + enum l3_lookup { description "L3 Lookup in a table"; } enum l2 { description "L2 next-hop"; } + enum l2_lookup { description "L2 Lookup in a table"; } } description "Forwarding Next-hop type"; } - grouping srv6-sid-structure { + grouping srv6-sid-structure-grouping { description "SRv6 SID structure grouping"; leaf locator-block-length { @@ -834,19 +1438,64 @@ module ietf-srv6-types { } } - grouping srv6-sid-type-b-config { - description "SRv6 SID Type-B config grouping"; + grouping srv6-sid-structure-info-grouping { + description "SRv6 SID structure info grouping"; - leaf sid-behavior { - type identityref { - base srv6-types:srv6-endpoint-type; - } - description "SRv6 SID behavior"; - } + container sid-structure { + config false; + description "SID structure container"; - container sid-structure { - description "SRv6 SID structure"; - uses srv6-types:srv6-sid-structure; - } + uses srv6-sid-structure-grouping; + } + } + + // Base identity for SID formats + identity srv6-sid-format-type { + description + "Base identity from which SID format types are derived."; } + + identity srv6-sid-fmt-uc-1 { + base srv6-sid-format-type; + description + "Uncompressed SID format with LBL=40, LNL=24, FL=16, and AL=16 or more. + The locator length for this format is 64 bits."; + } + + identity srv6-sid-fmt-uc-128 { + base srv6-sid-format-type; + description + "Uncompressed SID format that allows flexible values for LBL/LNL/FL/AL."; + } + + identity srv6-sid-fmt-cnext-1616 { + base srv6-sid-format-type; + description "Compressed NEXT-CSID format using LBL=16, LNL=16, + FL=16 (or 32 for wide function), and AL=16 or more. + The locator length for this format is 32 bits."; + } + + identity srv6-sid-fmt-cnext-3216 { + base srv6-sid-format-type; + description "Compressed NEXT-CSID format using LBL=32, LNL=16, + FL=16 (or 32 for wide function), and AL=16 or more. + The locator length for this format is 48 bits."; + } + + identity srv6-sid-fmt-cnext-4816 { + base srv6-sid-format-type; + description "Compressed NEXT-CSID format using LBL=48, LNL=16, + FL=16 (or 32 for wide function), and AL=16 or more. + The locator length for this format is 64 bits."; + } + + identity srv6-sid-fmt-cnext-6416 { + base srv6-sid-format-type; + description "Compressed NEXT-CSID format using LBL=64, LNL=16, + FL=16 (or 32 for wide function), and AL=16 or more. + The locator length for this format is 80 bits."; + } + + // TODO: srv6-sid-fmt-crepl-XYZ + } // module diff --git a/experimental/ietf-extracted-YANG-modules/ietf-topology-filter@2024-02-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-topology-filter@2025-07-07.yang similarity index 98% rename from experimental/ietf-extracted-YANG-modules/ietf-topology-filter@2024-02-20.yang rename to experimental/ietf-extracted-YANG-modules/ietf-topology-filter@2025-07-07.yang index c44482018..11add8ae8 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-topology-filter@2024-02-20.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-topology-filter@2025-07-07.yang @@ -46,7 +46,7 @@ module ietf-topology-filter { "This YANG module defines data definitions for managing topology filters. - Copyright (c) 2024 IETF Trust and the persons identified as + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -59,7 +59,7 @@ module ietf-topology-filter { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-02-20 { + revision 2025-07-07 { description "Initial revision."; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-traffic-policy@2024-01-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-traffic-policy@2025-07-06.yang similarity index 92% rename from experimental/ietf-extracted-YANG-modules/ietf-traffic-policy@2024-01-31.yang rename to experimental/ietf-extracted-YANG-modules/ietf-traffic-policy@2025-07-06.yang index 9c9538b23..4e214d314 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-traffic-policy@2024-01-31.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-traffic-policy@2025-07-06.yang @@ -6,7 +6,7 @@ module ietf-traffic-policy { import ietf-interfaces { prefix if; } - import iana-qos-types { + import ietf-qos-types { prefix qos-types; reference "RFC XXXX: YANG Data Models for Quality of Service (QoS)."; @@ -20,7 +20,7 @@ module ietf-traffic-policy { WG List: Editor: Aseem Choudhary - + Editor: Mahesh Jethanandani "; @@ -41,7 +41,7 @@ module ietf-traffic-policy { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-01-31 { + revision 2025-07-06 { description "Initial version."; reference @@ -165,8 +165,15 @@ module ietf-traffic-policy { ordered-by user; description "Classifier configuration in a policy."; + leaf name { - type string; + type union { + type string; + type leafref { + path "/traffic-policy:classifiers/" + + "traffic-policy:classifier/traffic-policy:name"; + } + } description "A unique name for classifier entry."; } @@ -226,7 +233,10 @@ module ietf-traffic-policy { } leaf name { - type string; + type leafref { + path "/traffic-policy:policies/" + + "traffic-policy:policy/traffic-policy:name"; + } mandatory true; description "A unique name for the Policy."; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-tvr-node@2024-10-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-tvr-node@2025-06-30.yang similarity index 80% rename from experimental/ietf-extracted-YANG-modules/ietf-tvr-node@2024-10-20.yang rename to experimental/ietf-extracted-YANG-modules/ietf-tvr-node@2025-06-30.yang index c17849738..a8043cd24 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-tvr-node@2024-10-20.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-tvr-node@2025-06-30.yang @@ -43,7 +43,7 @@ module ietf-tvr-node { This YANG model conforms to the Network Management Datastore Architecture (NMDA) as described in RFC 8342. - Copyright (c) 2024 IETF Trust and the persons identified as + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -60,7 +60,7 @@ module ietf-tvr-node { reference "RFC XXXX: YANG Data Model for Scheduled Attributes"; - revision 2024-10-20 { + revision 2025-06-30 { description "Initial Version"; reference @@ -94,7 +94,7 @@ module ietf-tvr-node { unspecified, the node is powered down by default."; } uses tvr-schd:tvr-schedule { - augment "schedules/attr-value" { + augment "schedule" { description "Augment the power state within each period."; leaf power-state { @@ -110,7 +110,7 @@ module ietf-tvr-node { description "Container for TVR node interface attributes."; - list interfaces { + list interface { key "name"; description "List of interface with schedules."; @@ -144,27 +144,31 @@ module ietf-tvr-node { "Interface attributes with schedules."; uses tvr-schd:tvr-schedule { - augment "schedules/attr-value" { + augment "schedule" { description "Augment scheduled interface state."; - leaf available { - type boolean; + container scheduled-attributes { description - "Scheduled interface power state. This is to - work with the leaf 'enabled' for the configured - state of the interface."; - } - leaf bandwidth { - type yang:gauge64; - units "bits/second"; - description - "The scheduled bandwidth in bits per second"; - } - leaf neighbor { - type inet:uri; - description - "The node expected to be this interface's neighbor - during this time."; + "Augmentation container for links."; + leaf available { + type boolean; + description + "Scheduled interface power state. This is to + work with the leaf 'enabled' for the configured + state of the interface."; + } + leaf bandwidth { + type yang:gauge64; + units "bits/second"; + description + "The scheduled bandwidth in bits per second"; + } + leaf neighbor { + type inet:uri; + description + "The node expected to be this interface's neighbor + during this time."; + } } } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-tvr-schedule@2024-07-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-tvr-schedule@2025-06-30.yang similarity index 89% rename from experimental/ietf-extracted-YANG-modules/ietf-tvr-schedule@2024-07-05.yang rename to experimental/ietf-extracted-YANG-modules/ietf-tvr-schedule@2025-06-30.yang index ff8a064a1..cebe3b4d5 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-tvr-schedule@2024-07-05.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-tvr-schedule@2025-06-30.yang @@ -33,7 +33,7 @@ module ietf-tvr-schedule { This YANG model conforms to the Network Management Datastore Architecture (NMDA) as described in RFC 8342. - Copyright (c) 2024 IETF Trust and the persons identified as + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -50,7 +50,7 @@ module ietf-tvr-schedule { reference "RFC XXXX: YANG Data Model for Scheduled Attributes"; - revision 2024-07-05 { + revision 2025-06-30 { description "Initial Version"; reference @@ -58,7 +58,7 @@ module ietf-tvr-schedule { } grouping tvr-schedule { - list schedules { + list schedule { key schedule-id; leaf schedule-id { type uint32; @@ -81,11 +81,6 @@ module ietf-tvr-schedule { } } - container attr-value { - description - "Attribute value(s). This container should be augmented - with attributes that apply to the current interval."; - } description "list of schedules."; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-tvr-topology@2024-10-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-tvr-topology@2025-06-30.yang similarity index 73% rename from experimental/ietf-extracted-YANG-modules/ietf-tvr-topology@2024-10-20.yang rename to experimental/ietf-extracted-YANG-modules/ietf-tvr-topology@2025-06-30.yang index bb8861cf8..470c13f58 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-tvr-topology@2024-10-20.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-tvr-topology@2025-06-30.yang @@ -41,7 +41,7 @@ module ietf-tvr-topology { "This YANG module contains YANG definitions for describing network topology with an time-variant availability schedule. - Copyright (c) 2024 IETF Trust and the persons identified as + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -60,7 +60,7 @@ module ietf-tvr-topology { described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here."; - revision 2024-10-20 { + revision 2025-06-30 { description "Initial revision"; reference @@ -70,7 +70,7 @@ module ietf-tvr-topology { container topology-schedule { description "Network topology schedules."; - list nodes { + list node { key "node-id"; description "List of nodes with schedules."; @@ -93,7 +93,7 @@ module ietf-tvr-topology { } uses tvr-schd:tvr-schedule { - augment "schedules/attr-value" { + augment "schedule" { description "Augment scheduled node availability."; leaf node-available { @@ -106,7 +106,7 @@ module ietf-tvr-topology { } } - list links { + list link { key "source-node source-link-id"; description "List of links."; @@ -124,38 +124,41 @@ module ietf-tvr-topology { description "The time at which this link becomes available."; uses tvr-schd:tvr-schedule { - augment "schedules/attr-value" { + augment "schedule" { description "Augment scheduled values."; - leaf link-available { - type boolean; - description - "The predicted link availability."; - } - leaf bandwidth { - type yang:gauge64; - units "bits/second"; - description - "The predicted link capacity. If the value measured - by the system is less than this value, the system - value is used. If the value measured by the system - is greater than this value the predicted value - SHOULD be used."; - } - leaf delay { - type uint32 { - range "0..16777215"; + container link-attributes { + description "Augmentation container for links."; + leaf link-available { + type boolean; + description + "The predicted link availability."; + } + leaf bandwidth { + type yang:gauge64; + units "bits/second"; + description + "The predicted link capacity. If the value measured + by the system is less than this value, the system + value is used. If the value measured by the system + is greater than this value the predicted value + SHOULD be used."; + } + leaf delay { + type uint32 { + range "0..16777215"; + } + description + "The predicted one-way delay or latency in + microseconds. If the value measured by the system is + less than this value the predicted value SHOULD be + used."; + } + leaf destination-node { + type inet:uri; + description + "A name refers to the destination node of the link."; } - description - "The predicted one-way delay or latency in - microseconds. If the value measured by the system - is less than this value the predicted value SHOULD - be used."; - } - leaf destination-node { - type inet:uri; - description - "A name refers to the destination node of the link."; } } } @@ -164,8 +167,8 @@ module ietf-tvr-topology { default "false"; description "The default link availibility. During times when the - schedule does not specifiy an availability, this value - is used."; + schedule does not specifiy an availability, this value + is used."; } leaf default-bandwidth { type yang:gauge64; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-vni-mng@2025-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-vni-mng@2025-07-07.yang new file mode 100644 index 000000000..c329129eb --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-vni-mng@2025-07-07.yang @@ -0,0 +1,162 @@ +module ietf-vni-mng { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-vni-mng"; + prefix vni-mng; + + organization + "XXX"; + contact + "WG Web: + WG List: + + Author: Fan Zhang + + Author: Yongqing Zhu + "; + description + "This document defines a YANG data model for the management + of VNIs (Virtual Network Interfaces), including vNIC and CNI, + depending on the different ways of virtualization. It exposes + the real-time VNI resources to network controller and service + orchestrator in order to supervise the cloud resource states + for dynamic adjustment of service function placement and + load-balancing of service instances to ensure the + SLO (Service Level Objective). + + The model is based on YANG 1.1 as defined in RFC 7950 and + conforms to Network Management Datastore Architecture (NMDA) + as defined in RFC 8342. + + Copyright (c) 2025 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 + (http://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC XXXX; see the + RFC itself for full legal notices."; + + revision 2025-07-07 { + description + "Init revision"; + reference + "YANG Data Model for Virtual Network Interfaces Management"; + } + + /* Data nodes */ + + container dc { + description + "Datacenter"; + leaf dc-id { + type string; + description + "Identifier for the datacenter"; + } + container nodes { + description + "Virtualized nodes (VMs or containers)"; + list node { + key "node-id"; + description + "List of virtualized nodes."; + leaf node-id { + type string; + description + "Identifier for the virtualized node."; + } + leaf node-type { + type enumeration { + enum vm { + description + "Indicates that the node is a Virtual + Machine (VM) instance."; + } + enum container { + description + "Indicates that the node is a Container instance."; + } + } + description + "Specifies the type of the node."; + } + leaf allocatable-bandwidth { + type uint64; + units "bps"; + description + "The maximum allocatable bandwidth for the + node's virtualized interface."; + } + leaf allocated-bandwidth { + type uint64; + units "bps"; + description + "The allocated bandwidth for the node's + virtualized interface."; + } + leaf bandwidth-usage { + type uint64; + units "bps"; + description + "The current bandwidth usage on the node's + virtualized interface."; + } + leaf priority { + type uint8; + description + "Priority level of the node or its traffic, + with lower values indicating higher priority."; + } + leaf latency { + type uint64; + units "ms"; + description + "Average one-way latency experienced by the + node."; + } + leaf packet-loss-rate { + type uint64; + units "%"; + description + "The average packet loss rate observed on the + node's virtualized interface."; + } + leaf ingress-bytes { + type uint64; + units "bytes"; + description + "Total number of bytes received by the node."; + } + leaf egress-bytes { + type uint64; + units "bytes"; + description + "Total number of bytes transmitted from the + node."; + } + list policy { + key "policy-id"; + description + "The service deployed on the node and its + related policy."; + leaf policy-id { + type string; + description + "Identifier for the policy of the service + deployed on the node."; + } + leaf service-id { + type string; + description + "Identifier for the service deployed on the + node."; + } + } + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-wdm-interface@2025-02-10.yang b/experimental/ietf-extracted-YANG-modules/ietf-wdm-interface@2025-02-10.yang index 20a5221ba..ac30c0a27 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-wdm-interface@2025-02-10.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-wdm-interface@2025-02-10.yang @@ -6,6 +6,7 @@ module ietf-wdm-interface { import ietf-interfaces { prefix if; } + import ietf-layer0-types { prefix "l0-types"; } @@ -55,6 +56,9 @@ module ietf-wdm-interface { } + // Need to verify if the enumeration is the proper approach for + // the tca-types, since the list is not fully standardized adn + // subject to change. typedef wdm-if-tca-types { type enumeration { enum laser-linewdt-tca { @@ -104,25 +108,31 @@ module ietf-wdm-interface { description "Thresholds for TCA's"; leaf tca-type { type wdm-if-tca-types; - description "type of the TCA eg TX Power"; + description + "type of the TCA that identify the + performance measurement, eg TX Power"; } - leaf min-threshold { - type int32; + leaf tca-name { + type string; description - "A TCA is generated if the variable is less than - this value"; + "A name of the TCA that explain the TCA scope + eg 'Low TX Power'"; } - leaf max-threshold { + leaf raise-threshold { type int32; description - "A TCA is generated if the variable is more than - this value"; + "A TCA is raised if the variable cross this threshold: + - if raise-threshold is greater than clear-threshold + (or clear threshold is not defined), the TCA + is raised when the value exceed the threshold + - if raise-threshold is smaller that clear-threshold, the + TCA is raised when the value fall below the threshold"; } - leaf threshold-hysteresis { + leaf clear-threshold { type int32; description - "The TCA raise/clear hysteresisis around the - threshold value to avoi alert flikering"; + "A TCA cleared when the variable cross the threshold in the + direction defined for raise-threshold"; } } @@ -158,7 +168,7 @@ module ietf-wdm-interface { leaf central-frequency { type l0-types:frequency-thz; description - "This parameter indicates the nterface Central Frequency"; + "This parameter indicates the interface Central Frequency"; } // uses wdm-if-fec-tca-thresholds; uses wdm-if-tca-list; @@ -192,8 +202,8 @@ module ietf-wdm-interface { } } - notification wdm-if-min-tca { - description "A min output TCA notification"; + notification wdm-if-tca { + description "A output TCA notification"; leaf "if-name" { type leafref { path "/if:interfaces/if:interface/if:name"; } @@ -205,6 +215,12 @@ module ietf-wdm-interface { mandatory true; description "Type of TCA for eg min tx power TCA"; } + leaf tca-name { + type string; + description + "A name of the TCA that explain the TCA scope + eg 'Low TX Power'"; + } } augment "/if:interfaces" { @@ -254,7 +270,7 @@ module ietf-wdm-interface { + "/wdm-if:explicit-transceiver-mode-id"; } description - "The refernce to the explicit transceiver + "The reference to the explicit transceiver mode template."; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-package-instance@2025-03-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-package-instance@2025-03-03.yang index ce156e93a..874e06b67 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yang-package-instance@2025-03-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-package-instance@2025-03-03.yang @@ -69,7 +69,6 @@ module ietf-yang-package-instance { /* * Top-level structure */ - sx:structure package { description "Defines the YANG package structure for use in a YANG instance diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-package-types@2025-03-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-package-types@2025-03-03.yang deleted file mode 100644 index 6ceda3c99..000000000 --- a/experimental/ietf-extracted-YANG-modules/ietf-yang-package-types@2025-03-03.yang +++ /dev/null @@ -1,484 +0,0 @@ -module ietf-yang-package-types { - yang-version 1.1; - namespace "urn:ietf:params:xml:ns:yang:ietf-yang-package-types"; - prefix "pkg-types"; - - import ietf-yang-revisions { - prefix rev; - reference "XXXX: Updated YANG Module Revision Handling"; - } - - import ietf-yang-semver { - prefix ys; - reference "XXXX: YANG Semantic Versioning"; - } - - import ietf-yang-types { - prefix yang; - rev:recommended-min-date 2019-07-21; - reference "RFC 6991bis: Common YANG Data Types."; - } - - import ietf-inet-types { - prefix inet; - rev:recommended-min-date 2013-07-15; - reference "RFC 6991: Common YANG Data Types."; - } - - import ietf-module-tags { - prefix tags; - // RFC Ed. Fix revision once revision date of - // ietf-module-tags.yang is known. - reference "RFC XXX: YANG Module Tags."; - } - - organization - "IETF NETMOD (Network Modeling) Working Group"; - - contact - "WG Web: - WG List: - - Author: Rob Wilton - "; - - description - "This module provides type and grouping definitions for YANG - packages. - - Copyright (c) 2025 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 Revised 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. - - The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL - NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', - 'MAY', and 'OPTIONAL' in this document are to be interpreted as - described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, - they appear in all capitals, as shown here."; - - // RFC Ed.: update the date below with the date of RFC publication - // and remove this note. - // RFC Ed.: replace XXXX with actual RFC number and remove this - // note. - revision 2025-03-03 { - ys:version 0.5.0; - description - "Initial revision"; - reference - "RFC XXXX: YANG Packages"; - } - - /* - * Typedefs - */ - - typedef pkg-name { - type yang:yang-identifier; - description - "Package names are typed as YANG identifiers."; - } - - typedef pkg-version { - type ys:version; - description - "Packages are versioning used YANG Semver version labels."; - } - - typedef version-or-rev-date { - type union { - type rev:revision-date; - type ys:version; - } - description - "Identifies a module by YANG semantic version or revision date"; - } - - typedef scoped-feature { - type string { - pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*:[a-zA-Z_][a-zA-Z0-9\-_.]*'; - } - description - "Represents a feature name scoped to a particular module, - identified as the ':', where both - and are YANG identifier strings, - as defiend by Section 12 or RFC 6020."; - reference - "RFC XXXX, YANG Packages."; - } - - /* - * Groupings - */ - grouping yang-pkg-identification-leafs { - description - "Parameters for identifying a specific version of a YANG - package"; - - leaf name { - type pkg-name; - mandatory true; - description - "The YANG package name."; - } - - leaf version { - type pkg-version; - mandatory true; - description - "Uniquely identies a particular version of a YANG package. - - Follows the definition for revision labels defined in - draft-verdt-nemod-yang-module-versioning, section XXX"; - } - } - - grouping yang-pkg-instance { - description - "Specifies the data node for a full YANG package instance - represented either on a server or as a YANG instance data - document."; - uses yang-pkg-identification-leafs; - leaf timestamp { - type yang:date-and-time; - description - "An optional timestamp for when this package was created. - This does not need to be unique across all versions of a - package."; - } - - leaf organization { - type string; - description "Organization responsible for this package"; - } - - leaf contact { - type string; - description - "Contact information for the person or organization to whom - queries concerning this package should be sent."; - } - - leaf description { - type string; - description "Provides a description of the package"; - } - - leaf reference { - type string; - description "Allows for a reference for the package"; - } - - leaf complete { - type boolean; - default true; - description - "Indicates whether the schema defined by this package is - referentially complete. I.e. all module imports can be - resolved to a module explicitly defined in this package or - one of the included packages."; - } - - leaf-list tag { - type tags:tag; - description - "Tags associated with a YANG package. Module tags defined in - XXX, ietf-netmod-module-tags can be used here but with the - modification that the tag applies to the entire package - rather than a specific module. See the IANA 'YANG Module - Tag Prefix' registry for reserved prefixes and the IANA - 'YANG Module IETF Tag' registry for IETF standard tags."; - } - - leaf-list supported-feature { - type scoped-feature; - description - "Lists features from any modules included in the package that - MUST be supported by any server implementing the package. - - Features already specified in a 'supported-feature' list of - any included package MUST also be supported by server - implementations and do not need to be repeated in this list. - - All other features defined in modules included in the - package are OPTIONAL to implement. - - Features are identified using :."; - } - - list included-package { - key "name"; - description - "An entry in this list represents a package that is included - as part of the package definition, or an indirectly included - package that is changed in a non backwards compatible way. - - It can be used to resolve inclusion of conflicting package - versions by explicitly specifying which package version is - used. - - If included packages implement different revisions - of the same module, then an explicit entry in the - module list MUST be provided to select the specific module - revision 'implemented' by this package definition. - - For import-only modules, the 'replaces-revision' leaf-list - can be used to select the specific module revisions used by - this package."; - reference - "XXX"; - - uses yang-pkg-identification-leafs; - - leaf-list location { - type inet:uri; - description - "Contains a URL that represents where an instance data file - for this YANG package can be found. - This leaf will only be present if there is a URL available - for retrieval of the schema for this entry. - - If multiple locations are provided, then the first - location in the leaf-list MUST be the definitive location - that uniquely identifies this package"; - } - - } - - list module { - key "name"; - description - "An entry in this list represents a module that must be - implemented by a server implementing this package, as per - RFC 7950 section 5.6.5, with a particular set of supported - features and deviations. - - A entry in this list overrides any module revision - 'implemented' by an included package. Any replaced module - revision SHOULD also be listed in the 'replaces-revision' - list."; - reference - "RFC 7950: The YANG 1.1 Data Modeling Language."; - - leaf name { - type yang:yang-identifier; - mandatory true; - description - "The YANG module name."; - } - - leaf version { - type version-or-rev-date; - mandatory true; - description - "Identifies the module version. If available, the YANG - Semantic Version SHOULD be used, otherwise the YANG module - revision date is used."; - } - - leaf-list location { - type inet:uri; - description - "Contains a URL that represents the YANG schema resource - for this module. - - This leaf will only be present if there is a URL available - for retrieval of the schema for this entry."; - } - - list submodule { - key "name"; - description - "Each entry represents one submodule within the - parent module."; - - leaf name { - type yang:yang-identifier; - description - "The YANG submodule name."; - } - - leaf version { - type version-or-rev-date; - mandatory true; - description - "The YANG submodule revision date or YANG Semantic version. - - If the parent module include statement for this submodule - includes a revision date then it MUST match the revision - date specified here or it MUST match the revision-date - associated with the version specified here."; - } - - leaf-list location { - type inet:uri; - description - "Contains a URL that represents the YANG schema resource - for this submodule. - - This leaf will only be present if there is a URL - available for retrieval of the schema for this entry."; - } - - } - - } - - list import-only-module { - key "name version"; - description - "An entry in this list indicates that the server imports - reusable definitions from the specified revision of the - module, but does not implement any protocol accessible - objects from this revision. - Multiple entries for the same module name MAY exist. This - can occur if multiple modules import the same module, but - specify different revision-dates in the import statements."; - - leaf name { - type yang:yang-identifier; - mandatory true; - description - "The YANG module name."; - } - - leaf version { - type version-or-rev-date; - mandatory true; - description - "Identifies the module version. If available, the YANG - Semantic Version SHOULD be used, otherwise the YANG module - revision date is used."; - } - - leaf-list replaces-version { - type version-or-rev-date; - description - "Gives the version of an import-only-module defined in an - included package that is replaced by this - import-only-module version."; - } - - leaf-list location { - type inet:uri; - description - "Contains a URL that represents the YANG schema resource - for this module. - - This leaf will only be present if there is a URL available - for retrieval of the schema for this entry."; - } - - list submodule { - key "name"; - description - "Each entry represents one submodule within the - parent module."; - - leaf name { - type yang:yang-identifier; - description - "The YANG submodule name."; - } - - leaf version { - type version-or-rev-date; - mandatory true; - description - "The YANG submodule revision date or YANG Semantic version. - - If the parent module include statement for this submodule - includes a revision date then it MUST match the revision - date specified here or it MUST match the revision-date - associated with the version specified here."; - } - - leaf-list location { - type inet:uri; - description - "Contains a URL that represents the YANG schema resource - for this submodule. - - This leaf will only be present if there is a URL - available for retrieval of the schema for this entry."; - } - } - } - - list mounted { - key "mount-path"; - description - "An entry in this list represents a package that will be - found mounted in the schema at the specified mount path. - - For a given mount path, the set of mounted package - versions is the union of all packages mounted at the - given mount point. Any conflicting package versions - MUST be explicitly resolved via an entry in the - mounted/packages of the package definition. - - A mount path with specific keys MUST also includes any - mounted packages without specific keys."; - - leaf "mount-path" { - type string; - description - "This path identifies a mount point in the schema. - - This leaf is encoded as a JSON style encoded - instance-identifier (regardless of whether the format - used to encode the YANG instance data), as specified in - RFC 7951, section 6.11, except that keys are optional. - - For optional keys, the name and value of the key is - excluded from the key list. - - Mount paths MUST only be used for schema mount points - defined in the package schema. - - For example, if an example module 'ex-module' defines a - mount point under list entry'/modules/module/' then a - mount path of - - - '/modules/module[name=foo]' would indicate the mounted - package schema for only the 'foo' entry in the module - list. Each entry in the list could have a different - mounted schema specified. - - - '/modules/module[]' would indicate that the same - mounted package schema is available for all list - entries in the module list."; - } - - list packages { - key "name"; - description - "The package that will be mounted at the specified mount - path"; - uses yang-pkg-identification-leafs; - - leaf-list location { - type inet:uri; - description - "Contains a URL that represents where an instance data - file for this YANG package can be found. - - This leaf will only be present if there is a URL - available for retrieval of the schema for this entry. - - If multiple locations are provided, then the first - location in the leaf-list MUST be the definitive - location to retreive the package definition."; - } - } - } - } -} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-package-types@2025-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-package-types@2025-07-07.yang new file mode 100644 index 000000000..469f2fa72 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-package-types@2025-07-07.yang @@ -0,0 +1,566 @@ +module ietf-yang-package-types { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-yang-package-types"; + prefix "pkg-types"; + + import ietf-yang-revisions { + prefix rev; + reference "XXXX: Updated YANG Module Revision Handling"; + } + + import ietf-yang-semver { + prefix ys; + reference "XXXX: YANG Semantic Versioning"; + } + + import ietf-yang-types { + prefix yang; + rev:recommended-min-date 2019-07-21; + reference "RFC 6991bis: Common YANG Data Types."; + } + import ietf-inet-types { + prefix inet; + rev:recommended-min-date 2013-07-15; + reference "RFC 6991: Common YANG Data Types."; + } + + organization + "IETF NETMOD (Network Modeling) Working Group"; + + contact + "WG Web: + WG List: + + Author: Rob Wilton + "; + + description + "This module provides type and grouping definitions for YANG + packages. + + Copyright (c) 2025 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 Revised 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. + + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL + NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', + 'MAY', and 'OPTIONAL' in this document are to be interpreted as + described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, + they appear in all capitals, as shown here."; + + // RFC Ed.: update the date below with the date of RFC publication + // and remove this note. + // RFC Ed.: replace XXXX with actual RFC number and remove this + // note. + revision 2025-07-07 { + ys:version 0.6.0; + description + "Initial revision"; + reference + "RFC XXXX: YANG Packages"; + } + + /* + * Typedefs + */ + + typedef pkg-name { + type yang:yang-identifier; + description + "Package names are typed as YANG identifiers."; + } + + typedef pkg-version { + type ys:version; + description + "Packages are versioning used YANG Semver version labels."; + } + + typedef version-or-rev-date { + type union { + type rev:revision-date; + type ys:version; + } + description + "Identifies a module by YANG semantic version or revision date"; + } + + typedef scoped-feature { + type string { + pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*:[a-zA-Z_][a-zA-Z0-9\-_.]*'; + } + description + "Represents a feature name scoped to a particular module, + identified as the ':', where both + and are YANG identifier strings, + as defiend by Section 12 or RFC 6020."; + reference + "RFC XXXX, YANG Packages."; + } + + typedef mount-ypath { + type string; + + description + "A path that identifies a set of data nodes in the schema tree. + + This leaf is encoded as a JSON style encoded + instance-identifier (regardless of whether the format + used to encode the YANG instance data), as specified in + RFC 7951, section 6.11, except that keys are optional. + + For optional keys, the name and value of the key is + excluded from the key list. + + TODO - Check if this definition is sufficient."; + } + + /* + * Groupings + */ + grouping yang-pkg-identification-leafs { + description + "Parameters for identifying a specific version of a YANG + package"; + + leaf name { + type pkg-name; + mandatory true; + description + "The YANG package name."; + } + + leaf version { + type pkg-version; + mandatory true; + description + "Uniquely identies a particular version of a YANG package. + + Follows the definition for revision labels defined in + draft-verdt-nemod-yang-module-versioning, section XXX"; + } + } + + grouping yang-pkg-exclusions { + description + "Parameters for excluding modules and packages from a YANG + package definition"; + + container excludes { + description + "Contains parameters for excluding modules and packages + from a YANG package definition"; + + leaf-list module { + type pkg-name; + description + "Lists implemented modules, of any version, that may have + have been brought in by included packages, but are + explicitly excluded from this package definition. + + Excluding a module can affect the compliance and + correctness of any included packages that expect that + module to be implemented. + + It is an error to list a module in both this list and the + 'includes/module' list."; + } + + leaf-list import-only-module { + type pkg-name; + description + "Lists import-only modules, of any version, that may have + have been brought in by included packages, but are + explicitly excluded from this package definition. + + It is an error to list a module in both this list and the + 'includes/import-only-module' list."; + } + } + } + + grouping yang-pkg-location { + description + "Parameters for locating a YANG package instance"; + + leaf-list location { + type inet:uri; + description + "Contains a URL that represents where an instance data file + (RFC 9195) for this YANG package can be found. + + This leaf will only be present if there is a URL available + for retrieval of the schema for this entry."; + } + } + + grouping yang-pkg-instance { + description + "Specifies the data node for a full YANG package instance + represented either on a server or as a YANG instance data + document."; + uses yang-pkg-identification-leafs; + leaf timestamp { + type yang:date-and-time; + description + "An optional timestamp for when this package was created. + This does not need to be unique across all versions of a + package."; + } + + leaf organization { + type string; + description "Organization responsible for this package"; + } + + leaf contact { + type string; + description + "Contact information for the person or organization to whom + queries concerning this package should be sent."; + } + + leaf description { + type string; + description "Provides a description of the package"; + } + + leaf reference { + type string; + description "Allows for a reference for the package"; + } + + leaf complete { + type boolean; + default true; + description + "Indicates whether the schema defined by this package is + referentially complete. I.e. all module imports can be + resolved to a module explicitly defined in this package or + one of the included packages."; + } + + container includes { + description + "Lists package and modules that are included in the package + definition."; + + list package { + key "name"; + description + "An entry in this list represents a package that is included + as part of the package definition, or to change the version + of a descendent included package. + + An entry in this list overrides any other package version + 'included' by an included package, which can be used for + resolving conflicting package versions from included + packages. + + A package definition MUST resolve to including only a single + version of any YANG package."; + + uses yang-pkg-identification-leafs; + uses yang-pkg-location; + } + + list module { + key "name"; + description + "An entry in this list represents a module that MUST be + implemented by a server implementing this package, as per + RFC 7950 section 5.6.5. + + A entry in this list overrides any module version + 'implemented' by an included package."; + reference + "RFC 7950: The YANG 1.1 Data Modeling Language."; + + leaf name { + type yang:yang-identifier; + mandatory true; + description + "The YANG module name."; + } + + leaf version { + type version-or-rev-date; + mandatory true; + description + "Identifies the module version. If available, the YANG + Semantic Version SHOULD be used, otherwise the YANG module + revision date is used."; + } + + leaf-list location { + type inet:uri; + description + "Contains a URL that represents the YANG schema resource + for this module. + + This leaf will only be present if there is a URL available + for retrieval of the schema for this entry."; + } + + list submodule { + key "name"; + description + "Each entry represents one submodule within the + parent module."; + + leaf name { + type yang:yang-identifier; + description + "The YANG submodule name."; + } + + leaf version { + type version-or-rev-date; + mandatory true; + description + "The YANG submodule revision date or YANG Semantic version. + + If the parent module include statement for this submodule + includes a revision date then it MUST match the revision + date specified here or it MUST match the revision-date + associated with the version specified here."; + } + + leaf-list location { + type inet:uri; + description + "Contains a URL that represents the YANG schema resource + for this submodule. + + This leaf will only be present if there is a URL + available for retrieval of the schema for this entry."; + } + } + } + + list import-only-module { + key "name version"; + description + "An entry in this list indicates that the server imports + reusable definitions from the specified revision of the + module, but does not implement any protocol accessible + objects from this revision. + + Multiple entries for the same module name MAY exist. This + can occur if multiple modules import the same module, but + specify different revision-dates in the import statements."; + + leaf name { + type yang:yang-identifier; + mandatory true; + description + "The YANG module name."; + } + + leaf version { + type version-or-rev-date; + mandatory true; + description + "Identifies the module version. If available, the YANG + Semantic Version SHOULD be used, otherwise the YANG module + revision date is used."; + } + + leaf-list replaces-version { + type version-or-rev-date; + description + "Gives the version of an import-only-module defined in an + included package that is replaced by this + import-only-module version."; + } + + leaf-list location { + type inet:uri; + description + "Contains a URL that represents the YANG schema resource + for this module. + + This leaf will only be present if there is a URL available + for retrieval of the schema for this entry."; + } + + list submodule { + key "name"; + description + "Each entry represents one submodule within the + parent module."; + + leaf name { + type yang:yang-identifier; + description + "The YANG submodule name."; + } + + leaf version { + type version-or-rev-date; + mandatory true; + description + "The YANG submodule revision date or YANG Semantic version. + + If the parent module include statement for this submodule + includes a revision date then it MUST match the revision + date specified here or it MUST match the revision-date + associated with the version specified here."; + } + + leaf-list location { + type inet:uri; + description + "Contains a URL that represents the YANG schema resource + for this submodule. + + This leaf will only be present if there is a URL + available for retrieval of the schema for this entry."; + } + } + } + } + + uses yang-pkg-exclusions; + + container mandatory-features { + description + "Contains parameters for specifying the features that MUST + be supported by any server implementing the package."; + + leaf-list include { + type scoped-feature; + description + "Lists features from any modules included in the package + that MUST be supported by any server implementing the + package. + + Mandatory features specified by any directly included + packages MUST also be supported by server + implementations, unless excluded by an entry in the + 'mandatory-features/excludes' list, and do not + need to be repeated in this list. + All other features defined in modules included in the + package are OPTIONAL to implement. + + Features are identified using + :."; + } + + leaf-list exclude { + type scoped-feature; + description + "Lists features from the mandatory features exported by an + included package that are reclassified as being OPTIONAL + to support by any server implementing the package, + overriding the behavior specified by the included package. + + Features MUST NOT be specified both in this list and also + the 'mandatory-features/includes' list. + + Features are identified using + :."; + } + } + + list mounts { + key "mount-path"; + description + "An entry in this list represents a package that will be + found mounted in the schema at the specified mount path. + + For a given mount path, the set of mounted package + versions is the union of all packages mounted at the + given mount point. Any conflicting package versions + MUST be explicitly resolved via an entry in the + mounted/packages of the package definition. + + A mount path with specific keys MUST also includes any + mounted packages without specific keys."; + + leaf "mount-path" { + type mount-ypath; + description + "This path identifies a mount point in the schema. + + This leaf is encoded as a JSON style encoded + instance-identifier (regardless of whether the format + used to encode the YANG instance data), as specified in + RFC 7951, section 6.11, except that keys are optional. + + For optional keys, the name and value of the key is + excluded from the key list. + + Mount paths MUST only be used for schema mount points + defined in the package schema. + + For example, if an example module 'ex-module' defines a + mount point under list entry'/modules/module/' then a + mount path of + + - '/modules/module[name=foo]' would indicate the mounted + package schema for only the 'foo' entry in the module + list. Each entry in the list could have a different + mounted schema specified. + + - '/modules/module[]' would indicate that the same + mounted package schema is available for all list + entries in the module list."; + } + + list package { + key "name"; + description + "The packages that will be mounted at the specified mount + path. + + The set of mounteed packages is the union of all packages + mounted at the given mount by any packages in the + 'includes/package' list, except that each entry in this list + replaces any other versions of the same package at the + same mount point. In addition, other package versions may + be omitted from the mount point via the 'replaces-package' + leaf-list."; + uses yang-pkg-identification-leafs; + uses yang-pkg-location; + + leaf-list replaces-package { + type pkg-name; + description + "Lists other packages that have been explicitly mounted + at the same mount point by included package, that are + replaced by this mounted package. + + The replacing mounted package MUST explicitly include + or exclude the mounted package being replaced. + + Any packages or modules included by the replaced + package are also removed by this mounted package + unless they have also been explicitly mounted at the + same mount point, in which case the replacing package + MUST also explicitly include/exclude them. + + replaces-package is expected to be used if an + implementation does not fully implement a mounted + package and needs to apply deviations or remove + included packages or modules."; + } + } + + leaf-list parent-reference { + type mount-ypath; + description + "See Mount Point path and parent-reference in Schema Mount"; + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-packages@2025-03-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-packages@2025-03-03.yang index 88d867ddb..11903c476 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yang-packages@2025-03-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-packages@2025-03-03.yang @@ -57,6 +57,7 @@ module ietf-yang-packages { 'MAY', and 'OPTIONAL' in this document are to be interpreted as described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here."; + // RFC Ed.: update the date below with the date of RFC publication // and remove this note. // RFC Ed.: replace XXXX with actual RFC number and remove this diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yl-packages@2025-03-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-yl-packages@2025-03-03.yang index da787d3cd..bec2aff59 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yl-packages@2025-03-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yl-packages@2025-03-03.yang @@ -38,6 +38,7 @@ module ietf-yl-packages { description "This module provides defined augmentations to YANG library to allow a server to report YANG package information. + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. @@ -57,7 +58,6 @@ module ietf-yl-packages { described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here."; - // RFC Ed.: update the date below with the date of RFC publication // and remove this note. // RFC Ed.: replace XXXX with actual RFC number and remove this diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yp-lite@2024-11-11.yang b/experimental/ietf-extracted-YANG-modules/ietf-yp-lite@2024-11-11.yang index 0bc73c6ad..e084e3ccf 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yp-lite@2024-11-11.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yp-lite@2024-11-11.yang @@ -325,6 +325,14 @@ module ietf-yp-lite { "Specifies a data encoding, e.g., for a data subscription."; } + typedef subscription-name { + type string { + length "1..255"; + } + description + "A user friendly name for a subscription."; + } + typedef subscription-id { type uint32; description @@ -402,37 +410,6 @@ module ietf-yp-lite { "Indicates the status of a subscription"; } - typedef receiver-status { - type enumeration { - enum disconnected { - description - "The publish is not currently connected to the receiver. - - Nornally, this is because there are no active - subscriptions for this receiver."; - } - enum connecting { - description - "The publisher is actively trying to connect to the - receiver. This implies that there is at least one active - subscription for this receiver. - - A receiver in connecting state may indicate that the - transport or associated security session could not be - established, and the publisher is periodically trying to - establish the connection."; - } - enum connected { - description - "The publisher has successfully connected to the receiver - and at least one active subscription is using this - receiver."; - } - } - description - "Indicates the status of a receiver"; - } - /* * GROUPINGS */ @@ -461,7 +438,7 @@ module ietf-yp-lite { description "The content filter specification for this request."; - leaf-list paths { + leaf path { type ypath; description "A basic path filter that allows wildcard, regex, or @@ -476,7 +453,7 @@ module ietf-yp-lite { "RFC 6241: Network Configuration Protocol (NETCONF), Section 6"; } - leaf-list xpaths { + leaf xpath { if-feature "ypl:xpath"; type yang:xpath1.0; description @@ -591,6 +568,27 @@ module ietf-yp-lite { "Common settings that are shared between dynamic and configured subscriptions."; + leaf name { + type subscription-name; + mandatory true; + description + "The client provided name for the subscription. + + This MUST be unique across all subscriptions. Configuring + a subscription with a name already used by a dynamic + subscription will replace the dynamic subscription, forcing + it to be terminated."; + } + + leaf purpose { + type string { + length "1..1000"; + } + description + "Open text allowing a configuring entity to embed the + originator or other specifics of this subscription."; + } + container target { description "Identifies the source of information against which a @@ -722,12 +720,11 @@ module ietf-yp-lite { where the 'error-info' field MAY contain a 'delete-subscription-error-info' structure."; input { - leaf id { - type subscription-id; + leaf name { + type subscription-name; mandatory true; description - "Identifier of the dynamic subscription that is to be - deleted."; + "The name of the dynamic subscription to be deleted."; } } } @@ -747,12 +744,11 @@ module ietf-yp-lite { where the 'error-info' field MAY contain a 'delete-subscription-error-info' structure."; input { - leaf id { - type subscription-id; + leaf name { + type subscription-name; mandatory true; description - "Identifier of the dynamic subscription that is to be - deleted."; + "The name of the dynamic subscription to be deleted."; } } } @@ -833,6 +829,12 @@ module ietf-yp-lite { description "This notification indicates that a subscription has been terminated."; + leaf name { + type subscription-name; + mandatory true; + description + "The name of the subscription that has been terminated."; + } leaf id { type subscription-id; mandatory true; @@ -1008,7 +1010,7 @@ container datastore-telemetry { RPC primitives as well as subscriptions that have been established via configuration."; list subscription { - key "id"; + key "name"; description "The identity and specific parameters of a subscription. Subscriptions in this list can be created using a control @@ -1018,31 +1020,8 @@ container datastore-telemetry { are used to delete a subscription, a 'subscription-terminated' message is sent to any active or suspended receivers."; - leaf id { - type subscription-id; - description - "Identifier of a subscription; unique in a given - publisher."; - } - uses subscription-common; - - leaf purpose { - if-feature "configured"; - type string; - description - "Open text allowing a configuring entity to embed the - originator or other specifics of this subscription."; - } - leaf status { - type subscription-status; - config false; - description - "The presence of this leaf indicates that the - subscription originated from configuration, not through - a controlchannel or RPC. The value indicates the state - of the subscription as established by the publisher."; - } + uses subscription-common; list receivers { key "name"; @@ -1061,47 +1040,98 @@ container datastore-telemetry { "Identifies a unique receiver for a subscription."; } - leaf encoding { - type encoding; + leaf status { + type enumeration { + enum disconnected { + description + "This subscription does not have an active session + with the receiver, and it is not trying to connect. + + E.g., this state may be reported if the subscription + is not valid, or has not been started yet."; + } + enum connecting { + description + "The publisher is trying to establish a session with + the receiver for this subscription. + + For a session less transport, this state may be + used to indicate that there is no route to the + receiver. + + A receiver in connecting state may indicate that + the transport or associated security session + could not be established, and the publisher is + periodically trying to establish the connection."; + } + enum active { + description + "The publisher has successfully connected (if over a + session based transport) to the receiver for this + subscription, and the publisher is able to send + notifications to the receiver."; + } + } config false; description - "The type of encoding for notification messages."; + "Specifies the connection status of the receiver for + this subscription."; } + } - leaf status { - type receiver-status; + leaf id { + type subscription-id; + config false; + mandatory true; + description + "Publisher allocated identifier for a subscription; + Unique in a given publisher."; + } + + leaf status { + type subscription-status; + config false; + description + "The presence of this leaf indicates that the + subscription originated from configuration, not through + a controlchannel or RPC. The value indicates the state + of the subscription as established by the publisher."; + } + + container statistics { + config false; + description + "Statistics related to the number of messages generated + for this subscription."; + + leaf update-record-count { + type yang:zero-based-counter64; config false; description - "Specifies the connection status of the receiver. - I.e., whether a conenction has been sucessfully - established"; + "The number of update records generated for the + subscription, to be queued to one of more active + receivers. + + The count is initialized when the subscription + first becomes active. + + The count is incremented even if the update + record has been generated, but is not queued to + any receiver. + + TODO - Does this count include lifecycle or only + update messages?"; } - container statistics { + leaf excluded-event-records { + type yang:zero-based-counter64; config false; description - "Statistics related to the number of messages sent to - the receiver."; - - leaf sent-event-records { - type yang:zero-based-counter64; - config false; - description - "The number of event records sent to the receiver. - The count is initialized when a dynamic - subscription is established or when a configured - receiver transitions to the 'valid' state."; - } - leaf excluded-event-records { - type yang:zero-based-counter64; - config false; - description - "The number of event records explicitly removed via - either an event stream filter or an access control - filter so that they are not passed to a receiver. - This count is set to zero each time - 'sent-event-records' is initialized."; - } + "The number of event records explicitly removed via + either an event stream filter or an access control + filter so that they are not passed to a receiver. + This count is set to zero each time + 'sent-event-records' is initialized."; } }