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-09-05.yang similarity index 84% rename from experimental/ietf-extracted-YANG-modules/iana-igp-algo-types@2025-06-13.yang rename to experimental/ietf-extracted-YANG-modules/iana-igp-algo-types@2025-09-05.yang index 7315c6a38..6c2f0e203 100644 --- 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-09-05.yang @@ -5,7 +5,6 @@ module iana-igp-algo-types { organization "Internet Assigned Numbers Authority (IANA)"; - contact "Internet Assigned Numbers Authority @@ -16,7 +15,6 @@ module iana-igp-algo-types { Tel: +1 310 301 5800 "; - description "The YANG module defines the identities for Interior Gateway Protocol (IGP) Algorithm Types. @@ -34,6 +32,10 @@ module iana-igp-algo-types { Relating to IETF Documents (https://trustee.ietf.org/license-info). + All revisions of IETF and IANA published modules can be found + at the YANG Parameters registry group + (https://www.iana.org/assignments/yang-parameters). + 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. @@ -41,16 +43,15 @@ module iana-igp-algo-types { //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 - "; + https://www.iana.org/assignments/yang-parameters."; - revision 2025-06-13 { + revision 2025-09-05 { description "Initial Version"; reference - "RFC XXXX: YANG Data Model for OSPF Flexible Algorithm"; + "RFC XXXX: YANG Data Model for OSPF Application-Specific + Link Attributes and Flexible Algorithm"; } identity algo-type { 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-09-05.yang similarity index 70% rename from experimental/ietf-extracted-YANG-modules/iana-igp-metric-types@2025-06-13.yang rename to experimental/ietf-extracted-YANG-modules/iana-igp-metric-types@2025-09-05.yang index d8227db2f..a671cc800 100644 --- 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-09-05.yang @@ -5,7 +5,6 @@ module iana-igp-metric-types { organization "Internet Assigned Numbers Authority (IANA)"; - contact "Internet Assigned Numbers Authority @@ -16,7 +15,6 @@ module iana-igp-metric-types { Tel: +1 310 301 5800 "; - description "The YANG module defines the identities for Interior Gateway Protocol (IGP) Metric-Types. @@ -34,6 +32,10 @@ module iana-igp-metric-types { Relating to IETF Documents (https://trustee.ietf.org/license-info). + All revisions of IETF and IANA published modules can be found + at the YANG Parameters registry group + (https://www.iana.org/assignments/yang-parameters). + 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. @@ -41,16 +43,15 @@ module iana-igp-metric-types { //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 - ."; + https://www.iana.org/assignments/yang-parameters."; - revision 2025-06-13 { + revision 2025-09-05 { description "Initial Version"; reference - "RFC XXXX: YANG Data Model for OSPF Flexible Algorithm"; + "RFC XXXX: YANG Data Model for OSPF Application-Specific + Link Attributes and Flexible Algorithm"; } identity metric-type { @@ -62,26 +63,35 @@ module iana-igp-metric-types { identity igp-metric { base metric-type; description - "IGP Metric."; + "IGP Metric."; + reference + "RFC9350: IGP Flexible Algorithm"; } + 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."; + "Min Unidirectional Link Delay as defined in RFC8570 + Section 4.2 and RFC7471 Section 4.2."; + reference + "RFC9350: IGP Flexible Algorithm"; } 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 + "Traffic Engineering Default Metric as defined in RFC5305 + Section 3.7 and Traffic Engineering Metric as defined in RFC3630, Section 2.5.5."; + reference + "RFC9350: IGP Flexible Algorithm"; } identity bandwidth-metric { base metric-type; description "Bandwidth metric."; + reference + "draft-ietf-lsr-flex-algo-bw-con"; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-amm-semtype@2025-07-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-amm-semtype@2025-07-03.yang index c64eb2765..08dac0534 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-amm-semtype@2025-07-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-amm-semtype@2025-07-03.yang @@ -141,10 +141,23 @@ module ietf-amm-semtype { amm:base "./IDENT/semtype"; amm:parameter columns { description - "The list of column definitions. - Each column SHALL have a unique name."; - amm:type "/ARITYPE/ident" { - amm:base "./IDENT/tblt-col"; + "The list of column definitions as rows in a table. + The order of these definitions is significant and correspond + exactly with the order of columns in the TBL values."; + amm:tblt { + amm:key "name"; + amm:column name { + description + "The name of this column. + Each name SHALL be unique within a table template. + Each name SHALL be restricted to valid label text."; + amm:type "//ietf/amm-base/typedef/id-text"; + } + amm:column datatype { + description + "The semantic type for values in this column."; + amm:type "./TYPEDEF/semtype"; + } } } amm:parameter min-elements { @@ -186,23 +199,6 @@ module ietf-amm-semtype { } } } - amm:ident tblt-col { - amm:enum 7; - description - "A parameterized table column within a template. - This object does not have a base as it is not substitutable."; - amm:parameter name { - description - "The name of this column. - Each name SHALL be restricted to valid label text."; - amm:type "/ARITYPE/label"; - } - amm:parameter datatype { - description - "The semantic type for values in this column."; - amm:type "./TYPEDEF/semtype"; - } - } amm:ident union { amm:enum 8; description diff --git a/experimental/ietf-extracted-YANG-modules/ietf-amm@2025-07-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-amm@2025-07-03.yang index 9d19eafc4..0f0abe7ba 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-amm@2025-07-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-amm@2025-07-03.yang @@ -256,7 +256,7 @@ module ietf-amm { "Reference an IDENT object which indicates how a value should be displayed for human consumption. The base of the IDENT SHALL be the - object object."; + object."; } extension int-labels { diff --git a/experimental/ietf-extracted-YANG-modules/ietf-amt@2022-11-17.yang b/experimental/ietf-extracted-YANG-modules/ietf-amt@2022-11-17.yang index 1b97b307f..e9d391f06 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-amt@2022-11-17.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-amt@2022-11-17.yang @@ -1,10 +1,16 @@ module ietf-amt { yang-version "1.1"; namespace "urn:ietf:params:xml:ns:yang:ietf-amt"; - prefix "amt"; + prefix amt; import ietf-inet-types { - prefix "inet"; + prefix inet; + reference + "RFC 6991: Common YANG Data Types"; + } + + import ietf-yang-types { + prefix yang; reference "RFC 6991: Common YANG Data Types"; } @@ -12,59 +18,73 @@ module ietf-amt { import ietf-routing-types { prefix rt-types; reference - "RFC 8294, Common YANG Data Types for the Routing Area."; + "RFC 8294: Common YANG Data Types for the Routing Area"; } import ietf-interfaces { prefix if; reference - "RFC 8343, A YANG Data Model for Interface Management."; + "RFC 8343: A YANG Data Model for Interface Management"; } import ietf-routing { prefix rt; reference - "RFC 8349, A YANG Data Model for Routing Management - (NMDA Version)."; + "RFC 8349: A YANG Data Model for Routing Management + (NMDA Version)"; } - organization - "IETF MBONE Working Group"; + "IETF Multicast Backbone Deployment (MBONED) Working Group"; contact - "TBD"; + "WG Web: + WG List: + + Editor: Yisong Liu + + Editor: Changwang Lin + + Editor: Zheng(Sandy) Zhang + + Editor: Xuesong Geng + + Editor: Vinod Kumar Nagaraj + "; description - "This module describes a YANG model for configuring and managing - AMT Protocol. + "This module describes a YANG model for configuring and + managing the AMT Protocol. This YANG model conforms to the Network Management Datastore Architecture (NMDA) as described in RFC 8342. Copyright (c) 2022 IETF Trust and the persons identified as - authors of the code. All rights reserved. + authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or - 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 + 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. + All revisions of IETF and IANA published modules can be found + at the YANG Parameters registry group + (https://www.iana.org/assignments/yang-parameters). + + 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 2022-11-17 { description "Initial Version"; reference - "RFC XXXX, YANG Data Model for Automatic Multicast Tunneling"; + "RFC XXXX: YANG Data Model for Automatic Multicast Tunneling"; } identity address-family { @@ -73,6 +93,18 @@ module ietf-amt { families are derived."; } + identity ipv4 { + base address-family; + description + "This identity represents an IPv4 address family."; + } + + identity ipv6 { + base address-family; + description + "This identity represents an IPv6 address family."; + } + typedef ip-multicast-source-address { type union { type rt-types:ipv4-multicast-source-address; @@ -80,7 +112,7 @@ module ietf-amt { } description "This type represents a version-neutral IP multicast source - address. The format of the textual representation implies + address. The format of the textual representation implies the IP version."; } @@ -92,33 +124,36 @@ module ietf-amt { "Configuration parameters for the AMT protocol."; container relay { description - "Parameters of AMT Relay service."; + "Parameters of AMT relay service."; container relay-addresses { description - "Parameters of AMT Relay addresses."; + "Parameters of AMT relay addresses."; list relay-address { key "family"; description - "Each entry contains parameters for a AMT relay - Address identified by the 'family' key."; + "Each entry contains parameters for an AMT relay + address identified by the 'family' key."; leaf family { type identityref { base address-family; } mandatory true; description - "The Address family."; + "Address family."; } leaf anycast-prefix { - type inet:ip-address; + type inet:ip-prefix; description - "The anycast IP address of AMT Relay Discovery - Address."; + "The anycast IP prefix of AMT relay discovery + address which is used when sending discovery + messages to a relay."; } leaf local-address { type inet:ip-address; description - "The unicast IP address of AMT Relay Address."; + "The unicast IP address of AMT relay address + which is obtained as a result of the discovery + process."; } } } @@ -132,11 +167,11 @@ module ietf-amt { description "The timeout interval of secret key."; } - container amt-tunnels { + container tunnels { config false; description "The AMT tunnel information on the relay."; - list amt-tunnel { + list tunnel { key "gateway-address gateway-port"; description "An entry of AMT tunnel."; @@ -169,17 +204,17 @@ module ietf-amt { } enum establishing { description - "The AMT tunnel is being establishing."; + "The AMT tunnel is being established."; } } description "The state of AMT tunnel."; } - container multicastflows { + container multicast-flows { config false; description "The multicast flow information in the AMT tunnel."; - list multicastflow { + list multicast-flow { key "source-address group-address"; description "An entry of multicast flow."; @@ -196,37 +231,37 @@ module ietf-amt { } } leaf multicast-group-num { - type uint32; + type yang:gauge32; description "Number of multicast groups."; } leaf request-message-count { - type uint64; + type yang:zero-based-counter64; description "Number of AMT request messages received in the tunnel."; } leaf membership-query-message-count { - type uint64; + type yang:zero-based-counter64; description "Number of AMT membership query messages sent in the tunnel."; } leaf membership-update-message-count { - type uint64; + type yang:zero-based-counter64; description "Number of AMT membership update messages received in the tunnel."; } } } - container amtrelay-dns-resource-records { + container relay-dns-resource-records { description "The DNS resource records of AMT relay."; - list amtrelay-dns-resource-record { + list relay-dns-resource-record { key "source-address"; description - "An entry of AMTRELAY resource record."; + "An entry of AMT relay resource record."; leaf source-address { type inet:ip-address; description @@ -239,38 +274,38 @@ module ietf-amt { } leaf d-flag { type boolean; - default "false"; + default false; description "If the D-bit is set to true, the gateway MAY send an AMT Request message directly to the discovered relay address without first sending an AMT Discovery message. If the D-bit is set to false, the gateway MUST - receive an AMT Relay Advertisement message + receive an AMT relay advertisement message for an address before sending an AMT Request message to that address."; } leaf relay-type { type enumeration { enum empty { - value "0"; + value 0; description "The relay field is empty."; } enum ipv4-address { - value "1"; + value 1; description "The relay field contains a 4-octet IPv4 address."; } enum ipv6-address { - value "2"; + value 2; description "The relay field contains a 16-octet IPv6 address."; } enum domain-name { - value "3"; + value 3; description "The relay field contains a wire-encoded domain name."; @@ -282,136 +317,136 @@ module ietf-amt { leaf discovery-address { type inet:ip-address; description - "The IP address of AMT Relay Discovery Address."; + "The IP address of AMT relay discovery address."; } leaf domain-name { type inet:domain-name; description - "The wire-encoded domain name of AMT Relay."; + "The wire-encoded domain name of AMT relay."; } } } - container amtrelay-message-statistics { + container relay-message-statistics { config false; description - "Message statistics of AMT Relay."; - container amtrelay-received-message-statistics { + "Message statistics of AMT relay."; + container received { description - "Received message statistics of AMT Relay."; + "Received message statistics of AMT relay."; leaf relay-discovery { - type uint64; + type yang:zero-based-counter64; description "Number of AMT relay discovery messages received."; } leaf request { - type uint64; + type yang:zero-based-counter64; description "Number of AMT membership request messages received."; } leaf membership-update { - type uint64; + type yang:zero-based-counter64; description "Number of AMT membership update messages received."; } leaf teardown { - type uint64; + type yang:zero-based-counter64; description "Number of AMT teardown messages received."; } } - container amtrelay-sent-message-statistics { + container sent { description - "Sent message statistics of AMT Relay."; + "Sent message statistics of AMT relay."; leaf relay-advertisement { - type uint64; + type yang:zero-based-counter64; description "Number of AMT relay advertisement messages sent."; } leaf membership-query { - type uint64; + type yang:zero-based-counter64; description "Number of AMT membership query messages sent."; } } - container amtrelay-error-message-statistics { + container error { description - "Error message statistics of AMT Relay."; + "Error message statistics of AMT relay."; leaf incomplete-packet { - type uint64; + type yang:zero-based-counter64; description "Number of messages received with length errors so severe that further classification could not occur."; } leaf invalid-mac { - type uint64; + type yang:zero-based-counter64; description "Number of messages received with an invalid message authentication code (MAC)."; } leaf unexpected-type { - type uint64; + type yang:zero-based-counter64; description "Number of messages received with an unknown message type specified."; } leaf invalid-relay-discovery-address { - type uint64; + type yang:zero-based-counter64; description "Number of AMT relay discovery messages received with an address other than the configured anycast address."; } leaf invalid-membership-request-address { - type uint64; + type yang:zero-based-counter64; description "Number of AMT membership request messages received with an address other than the configured AMT local address."; } leaf invalid-membership-update-address { - type uint64; + type yang:zero-based-counter64; description "Number of AMT membership update messages received with an address other than the configured AMT local address."; } leaf incomplete-relay-discovery-messages { - type uint64; + type yang:zero-based-counter64; description "Number of AMT relay discovery messages received that are not fully formed."; } leaf incomplete-membership-request-messages { - type uint64; + type yang:zero-based-counter64; description "Number of AMT membership request messages received that are not fully formed."; } leaf incomplete-membership-update-messages { - type uint64; + type yang:zero-based-counter64; description "Number of AMT membership update messages received that are not fully formed."; } leaf no-active-gateway { - type uint64; + type yang:zero-based-counter64; description "Number of AMT membership update messages received for a tunnel that does not exist for the gateway that sent the message."; } leaf invalid-inner-header-checksum { - type uint64; + type yang:zero-based-counter64; description "Number of AMT membership update messages received with an invalid IP checksum."; } leaf gateways-timed-out { - type uint64; + type yang:gauge64; description "Number of gateways that timed out because of inactivity."; @@ -426,14 +461,13 @@ module ietf-amt { description "Parameters of AMT pseudo-interface."; list pseudo-interface { - key ifIndex; + key "interface"; description "An entry of AMT pseudo-interface."; - leaf ifIndex { + leaf interface { type if:interface-ref; description - "Index of pseudo interface, which can be ifindex - or interface name."; + "Pseudo interface."; } leaf discovery-method { type enumeration { @@ -449,23 +483,22 @@ module ietf-amt { } } description - "The method of discover relay address."; + "The method used to discover the relay address."; } leaf relay-discovery-address { type inet:ip-address; description - "The IP address of AMT Relay Discovery Address."; + "IP address of the AMT relay discovery address."; } leaf relay-address { type inet:ip-address; description - "The Ip address of AMT relay Address."; + "IP address of the AMT relay address."; } leaf upstream-interface { type if:interface-ref; description - "The index of upstream interface, which can - be ifindex or interface name."; + "Upstream interface."; } leaf discovery-timeout { type uint32; @@ -504,7 +537,7 @@ module ietf-amt { leaf relay-port { type inet:port-number; description - "The UDP port of AMT Relay."; + "The UDP port of AMT relay."; } leaf local-address { type inet:ip-address; @@ -544,35 +577,35 @@ module ietf-amt { "The tunnel's state."; } leaf relay-discovery-message-count { - type uint64; + type yang:zero-based-counter64; config false; description "Number of AMT relay discovery messages sent on the interface."; } leaf relay-advertisement-message-count { - type uint64; + type yang:zero-based-counter64; config false; description "Number of AMT relay advertisement messages received on the interface."; } leaf request-message-count { - type uint64; + type yang:zero-based-counter64; config false; description "Number of AMT membership request messages sent on the interface."; } leaf membership-query-message-count { - type uint64; + type yang:zero-based-counter64; config false; description "Number of AMT membership query messages received on the interface."; } leaf membership-update-message-count { - type uint64; + type yang:zero-based-counter64; config false; description "Number of AMT membership update messages sent @@ -580,46 +613,46 @@ module ietf-amt { } } } - container amtgateway-message-statistics { + container gateway-message-statistics { config false; description "Message statistics of AMT Gateway."; - container amtgateway-received-message-statistics { + container received { description "Received message statistics of AMT Gateway."; leaf relay-advertisement { - type uint64; + type yang:zero-based-counter64; description "Number of AMT relay advertisement messages received."; } leaf membership-query { - type uint64; + type yang:zero-based-counter64; description "Number of AMT membership query messages received."; } } - container amtgateway-sent-message-statistics { + container sent { description "Sent message statistics of AMT Gateway."; leaf relay-discovery { - type uint64; + type yang:zero-based-counter64; description "Number of AMT relay discovery messages sent."; } leaf request { - type uint64; + type yang:zero-based-counter64; description "Number of AMT membership request messages sent."; } leaf membership-update { - type uint64; + type yang:zero-based-counter64; description "Number of AMT membership update messages sent."; } leaf teardown { - type uint64; + type yang:zero-based-counter64; description "Number of AMT teardown messages sent."; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-arp@2025-01-02.yang b/experimental/ietf-extracted-YANG-modules/ietf-arp@2025-07-19.yang similarity index 96% rename from experimental/ietf-extracted-YANG-modules/ietf-arp@2025-01-02.yang rename to experimental/ietf-extracted-YANG-modules/ietf-arp@2025-07-19.yang index d1ae6042b..6cf742cab 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-arp@2025-01-02.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-arp@2025-07-19.yang @@ -20,10 +20,10 @@ module ietf-arp { } organization - "IETF Routing Area Working Group (rtgwg)"; + "IETF Internet Area Working Group (intarea)"; contact - "WG Web: - WG List: + "WG Web: + WG List: Author: Feng Zheng @@ -57,12 +57,11 @@ module ietf-arp { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2025-01-02 { + revision 2025-07-19 { description "Init revision"; reference - "RFC XXXX: A Yang Data Model for Address - Resolution Protocol (ARP)"; + "RFC XXXX: A Yang Data Model for ARP"; } container arp { diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-06.yang b/experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-09-04.yang similarity index 71% rename from experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-06.yang rename to experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-09-04.yang index 9ca19c6aa..a80f6e960 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-06.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-09-04.yang @@ -1,7 +1,7 @@ module ietf-bfd-met-keyed-isaac { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-bfd-met-keyed-isaac"; - prefix "bfdmia"; + prefix "bfd-mki"; import ietf-key-chain { prefix key-chain; @@ -15,6 +15,7 @@ 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) @@ -22,9 +23,9 @@ module ietf-bfd-met-keyed-isaac { Sonal Agarwal (sonal@arrcus.com)."; description - "This experimental YANG module provides identities derived from - the ietf-key-chain model for the BFD Meticulous Keyed ISAAC - authentication mechanism. + "This YANG module provides identities derived from the + ietf-key-chain model for the experimental BFD Meticulous Keyed + ISAAC authentication mechanism. Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. @@ -38,19 +39,14 @@ module ietf-bfd-met-keyed-isaac { 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. - - 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."; + for full legal notices."; - revision "2025-07-06" { + revision "2025-09-04" { description "Initial Version."; reference - "RFC XXXX: Meticulous Keyed ISAAC for BFD Authentication."; + "RFC XXXX: Meticulous Keyed ISAAC for BFD Optimized + Authentication."; } identity optimized-md5-meticulous-keyed-isaac { @@ -60,8 +56,10 @@ module ietf-bfd-met-keyed-isaac { strong authentication and Meticulous Keyed ISAAC Keyed as the less computationally intensive authentication."; reference - "RFC XXXX: Meticulous Keyed ISAAC for BFD Authentication."; + "RFC XXXX: Meticulous Keyed ISAAC for BFD Optimized + Authentication."; } + identity optimized-sha1-meticulous-keyed-isaac { base key-chain:crypto-algorithm; description @@ -69,6 +67,7 @@ module ietf-bfd-met-keyed-isaac { the strong authentication and Meticulous Keyed ISAAC Keyed as the less computationally intensive authentication."; reference - "RFC XXXX: Meticulous Keyed ISAAC for BFD Authentication."; + "RFC XXXX: Meticulous Keyed ISAAC for BFD Optimized + Authentication."; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bfd-opt-auth@2025-06-04.yang b/experimental/ietf-extracted-YANG-modules/ietf-bfd-opt-auth@2025-09-10.yang similarity index 83% rename from experimental/ietf-extracted-YANG-modules/ietf-bfd-opt-auth@2025-06-04.yang rename to experimental/ietf-extracted-YANG-modules/ietf-bfd-opt-auth@2025-09-10.yang index 980469bfc..c616f88b3 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-bfd-opt-auth@2025-06-04.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-bfd-opt-auth@2025-09-10.yang @@ -1,7 +1,7 @@ module ietf-bfd-opt-auth { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-bfd-opt-auth"; - prefix "bfdoa"; + prefix "bfd-oa"; import ietf-routing { prefix "rt"; @@ -66,7 +66,8 @@ module ietf-bfd-opt-auth { description "This YANG module augments the base BFD YANG model to add - attributes related to BFD Optimized Authentication. + attributes related to the experimental BFD Optimized + Authentication. Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. @@ -87,8 +88,7 @@ module ietf-bfd-opt-auth { '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-06-04" { + revision "2025-09-10" { description "Initial Version."; reference @@ -97,28 +97,10 @@ module ietf-bfd-opt-auth { feature optimized-auth { description - "When enabled, this implementation supports optimized - authentication as described in this document."; - } - - identity optimized-md5-meticulous-keyed-isaac { - base key-chain:crypto-algorithm; - description - "BFD Optimized Authentication using Meticulous Keyed MD5 as the - strong authentication and Meticulous Keyed ISAAC Keyed as the - less computationally intensive authentication."; - reference - "RFC XXXX: Meticulous Keyed ISAAC for BFD Authentication."; - } - - identity optimized-sha1-meticulous-keyed-isaac { - base key-chain:crypto-algorithm; - description - "BFD Optimized Authentication using Meticulous Keyed SHA-1 as - the strong authentication and Meticulous Keyed ISAAC Keyed as - the less computationally intensive authentication."; + "Indicates that the implementation supports optimized + authentication."; reference - "RFC XXXX: Meticulous Keyed ISAAC for BFD Authentication."; + "RFC XXXX: Optimizing BFD Authentication."; } grouping bfd-opt-auth-config { @@ -131,7 +113,6 @@ module ietf-bfd-opt-auth { description "Interval of time after which strong authentication should be utilized to prevent an on-path-attacker attack. - Default is 1 minute. A value of zero means that we do not do periodic reauthentication using the strong authentication method. diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bgp-aspa@2022-10-18.yang b/experimental/ietf-extracted-YANG-modules/ietf-bgp-aspa@2022-10-18.yang index 28319db6f..a74b0899f 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-bgp-aspa@2022-10-18.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-bgp-aspa@2022-10-18.yang @@ -2,7 +2,7 @@ module ietf-bgp-aspa { yang-version "1.1"; namespace "urn:ietf:params:xml:ns:yang:" + "ietf-bgp-aspa"; - prefix "oav"; + prefix "aspa"; import ietf-routing { prefix "rt"; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bgp-sec@2022-10-18.yang b/experimental/ietf-extracted-YANG-modules/ietf-bgp-sec@2022-10-18.yang index abfe62ace..39394b571 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-bgp-sec@2022-10-18.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-bgp-sec@2022-10-18.yang @@ -2,7 +2,7 @@ module ietf-bgp-sec { yang-version "1.1"; namespace "urn:ietf:params:xml:ns:yang:" + "ietf-bgp-sec"; - prefix "oav"; + prefix "sec"; import ietf-routing { prefix "rt"; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bmp-tcp-dependencies@2025-01-02.yang b/experimental/ietf-extracted-YANG-modules/ietf-bmp-tcp-dependencies@2025-01-02.yang index 1eff56e54..b0d21a344 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-bmp-tcp-dependencies@2025-01-02.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-bmp-tcp-dependencies@2025-01-02.yang @@ -6,11 +6,10 @@ module ietf-bmp-tcp-dependencies { import ietf-bmp { prefix bmp; } - import ietf-tcp-common { prefix tcpcmn; reference - "I-D.ietf-netconf-tcp-client-server: YANG Groupings for TCP + "RFC 9643: YANG Groupings for TCP Clients and TCP Servers."; } import ietf-key-chain { @@ -47,7 +46,7 @@ module ietf-bmp-tcp-dependencies { (RFC 8174) when, and only when, they appear in all capitals, as shown here. - Copyright (c) 2022 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 @@ -57,9 +56,10 @@ module ietf-bmp-tcp-dependencies { Relating to IETF Documents (https://trustee.ietf.org/license-info). - This version of this YANG module is part of RFC 9196 - (https://www.rfc-editor.org/info/rfc9196); see the RFC itself - for full legal notices."; + 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-01-02 { description @@ -68,10 +68,12 @@ module ietf-bmp-tcp-dependencies { "RFC YYYY: BMP YANG Module RFC-EDITOR: please update YYYY with this RFC ID"; } - augment "/bmp:bmp/bmp:bmp-monitoring-stations/" - + "bmp:bmp-monitoring-station/bmp:connection/bmp:tcp-options" { - description "Augment the tcp options of the BMP model"; + augment "/bmp:bmp/bmp:monitoring-stations/" + + "bmp:monitoring-station/" + + "bmp:connection/bmp:tcp-options" { + description + "Augment the tcp options of the BMP model"; uses tcpcmn:tcp-common-grouping; container secure-session { presence "Means the session should be secure. "; @@ -80,7 +82,15 @@ module ietf-bmp-tcp-dependencies { is to be secured."; choice authentication { mandatory true; + description + "Choice of TCP authentication."; case ao { + description + "Uses TCP-AO to secure the session. Parameters for + those are defined as a grouping in the TCP YANG + model."; + reference + "RFC 5925 - The TCP Authentication Option."; leaf ao-keychain { type key-chain:key-chain-ref; description @@ -90,14 +100,14 @@ module ietf-bmp-tcp-dependencies { reference "RFC 8177: YANG Key Chain."; } + } + case md5 { description - "Uses TCP-AO to secure the session. Parameters for + "Uses TCP-MD5 to secure the session. Parameters for those are defined as a grouping in the TCP YANG model."; reference - "RFC 5925 - The TCP Authentication Option."; - } - case md5 { + "RFC 5925: The TCP Authentication Option."; leaf md5-keychain { type key-chain:key-chain-ref; description @@ -107,15 +117,7 @@ module ietf-bmp-tcp-dependencies { reference "RFC 8177: YANG Key Chain."; } - description - "Uses TCP-MD5 to secure the session. Parameters for - those are defined as a grouping in the TCP YANG - model."; - reference - "RFC 5925: The TCP Authentication Option."; } - description - "Choice of TCP authentication."; } } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bmp@2025-01-02.yang b/experimental/ietf-extracted-YANG-modules/ietf-bmp@2025-01-02.yang index d77d85052..b49d2673f 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-bmp@2025-01-02.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-bmp@2025-01-02.yang @@ -11,16 +11,6 @@ module ietf-bmp { reference "RFC 6991: Common YANG Data Types"; } - import ietf-bgp-types { - prefix bt; - description - "The bgp types is a model that contains just types. - Vendors can include it without implications."; - reference - "RFC AAAA: BGP YANG module for Service Provider Network. - RFC-EDITOR: please update XXX with the RFC ID assigned - to I-D.ietf-idr-bgp-model"; - } import ietf-netconf-acm { prefix nacm; reference @@ -30,7 +20,7 @@ module ietf-bmp { prefix rt-pol; description "This module is only needed if the feature - bmp-filter-based-on-route-policy is set"; + bmp-filter-based-on-route-policy is set"; reference "RFC 9067: A YANG Data Model for Routing Policy"; } @@ -50,7 +40,6 @@ module ietf-bmp { contact "WG Web: WG List: - Author: Camilo Cardona @@ -68,30 +57,30 @@ module ietf-bmp { Author: Prasad S. Narasimha "; - description "This module defines a YANG data model for configuration and monitoring of the BGP Monitoring Protocol (BMP). - 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. - Copyright (c) 2022 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 - without modification, is permitted pursuant to, and subject to, - the license terms contained in the Revised BSD License set + 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 9196 - (https://www.rfc-editor.org/info/rfc9196); see the RFC itself - for full legal notices."; + 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. + + 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-01-02 { description @@ -101,51 +90,112 @@ module ietf-bmp { RFC-EDITOR: please update YYYY with this RFC ID"; } + feature bmp-filter-based-on-route-policy { + description + "This feature means that the device + is capable of filtering prefixes in BMP monitoring sessions"; + } + + /* The next enums are temporary here until we resolve how to deal + * with them. Taken from draft-ietf-idr-bgp-model */ + /* BGP AFI-SAFI Type Identities. */ + + identity afi-safi-type { + description + "Base identity type for AFI,SAFI tuples for BGP-4"; + reference + "RFC4760: Multiprotocol Extensions for BGP-4."; + } + + identity ipv4-unicast { + base afi-safi-type; + description + "IPv4 unicast (AFI,SAFI = 1,1)"; + reference + "RFC4760: Multiprotocol Extensions for BGP-4."; + } + + identity ipv6-unicast { + base afi-safi-type; + description + "IPv6 unicast (AFI,SAFI = 2,1)"; + reference + "RFC4760: Multiprotocol Extensions for BGP-4."; + } + + /* End of temporal objects */ + identity bmp-peer-selectors { description - "Enum values for selecting peers"; + "Generic Identity for selecting peers"; } - identity bmp-peer-selectors-all-peers { + identity all-peers { base bmp-peer-selectors; description "This identity selects all peers under the RIB. When used, it acts as a default configuration."; } - identity bmp-ni-types { description - "Enum values for selecting one or more network instances for - configuration"; + "Identities for selecting one or more network instances for + configuration"; } - identity bmp-ni-types-all-ni { + identity all-ni { base bmp-ni-types; description "This identity is an explicit way to select all network instances."; } - identity bmp-ni-types-global-ni { + identity global-ni { base bmp-ni-types; description - "Selecting the global or main network instance"; + "Identity for Selecting the global or main network instance"; } - identity bmp-ni-types-non-global-ni { + identity non-global-ni { base bmp-ni-types; description "This identity is an explicit way to select all network instances except the global one."; } - feature bmp-filter-based-on-route-policy { + /* The next types are temporary here until we resolve how to deal + * with them. Taken from draft-ietf-idr-bgp-model */ + /* BGP Peer-Types */ + + typedef peer-type { + type enumeration { + enum internal { + description + "Internal (IBGP) peer"; + } + enum external { + description + "External (EBGP) peer"; + } + enum confederation-internal { + description + "Confederation Internal (IBGP) peer."; + } + enum confederation-external { + description + "Confederation External (EBGP) peer."; + } + } description - "This feature means that the device - is capable of filtering prefixes in BMP monitoring sessions"; + "Labels a peer or peer group as explicitly internal, + external, or the related confederation type."; + reference + "RFC 4271: A Border Gateway Protocol 4 (BGP-4), Sec 1.1. + RFC 5065: Autonomous System Configuration for BGP."; } - grouping bmp-ip-connection { + /* End of temporal objects */ + + grouping bmp-ip-connection-grouping { description "Common parameters for establishing connectivity to a BMP monitoring station."; @@ -153,13 +203,13 @@ module ietf-bmp { mandatory true; description "Selects whether the device initiates - (active) or waits for (passive) + (active) or waits for (passive) the connection to the monitoring station, as described in RFC 7854 Section 3.2."; case active { description "Device initiates the connection to - the monitoring station."; + the monitoring station."; container active { description "The device starts the connection to @@ -189,19 +239,18 @@ module ietf-bmp { } choice local-endpoint { mandatory true; - description "Local endpoint for the connection."; + description + "Local endpoint for the connection."; case monitored-router-address { - leaf monitored-router-address{ + leaf monitored-router-address { type inet:ip-address; description "Local IP address to source the connection."; } } case monitored-router-interface { - leaf monitored-router-interface { - type leafref { - path "/if:interfaces/if:interface/if:name"; - } + leaf monitored-router-interface { + type if:interface-ref; description "Local interface to source the connection."; } @@ -217,11 +266,11 @@ module ietf-bmp { case passive { description "Device waits for incoming connection at a local - endpoint."; + endpoint."; container passive { description "Parameters for passively accepting - a connection from the monitoring station."; + a connection from the monitoring station."; leaf network-instance { type leafref { path "/ni:network-instances/ni:network-instance/" @@ -247,7 +296,8 @@ module ietf-bmp { } choice local-endpoint { mandatory true; - description "Local endpoint for the connection."; + description + "Local endpoint for the connection."; case monitored-router-address { leaf monitored-router-address { type inet:ip-address; @@ -257,9 +307,7 @@ module ietf-bmp { } case monitored-router-interface { leaf monitored-router-interface { - type leafref { - path "/if:interfaces/if:interface/if:name"; - } + type if:interface-ref; description "Local interface to accept the connection."; } @@ -283,21 +331,21 @@ module ietf-bmp { } } - grouping bmp-route-monitoring-peer-configuration { + grouping route-monitoring-peer-grouping { description "General configuration options for route monitoring of a peer."; container filters { description "Filters for selecting which routes to export to - the monitoring station."; + the monitoring station."; container policy-filter { if-feature "bmp-filter-based-on-route-policy"; description "Filter routes using a routing policy from the - rt-pol module. - The policy should only contain accept/reject actions - and match prefix sets."; + rt-pol module. + The policy should only contain accept/reject actions + and match prefix sets."; leaf-list export-policy { type leafref { path "/rt-pol:routing-policy/" @@ -308,7 +356,7 @@ module ietf-bmp { ordered-by user; description "Ordered list of policy names used to select - routes for export."; + routes for export."; } leaf default-export-policy { type rt-pol:default-policy-type; @@ -320,20 +368,20 @@ module ietf-bmp { } } - grouping bmp-peer-ribs-filter { + grouping bmp-peer-ribs-filter-grouping { description "Configuration containers for RIBs under the main - BMP container."; + BMP container."; container address-families { description "List of address families for route monitoring."; list address-family { - key "address-family-id"; + key "id"; description "Address family, as defined in the BGP model."; - leaf address-family-id { + leaf id { type identityref { - base bt:afi-safi-type; + base afi-safi-type; } description "Address family identifier."; @@ -343,7 +391,7 @@ module ietf-bmp { default "true"; description "Enables route monitoring messages for this address - family."; + family."; } container peers-configurations { description @@ -357,7 +405,7 @@ module ietf-bmp { 1. peer 2. peer-groups 3. peer-type - 4. bmp-peer-selectors + 4. peer-selectors New child containers or new bmp-peer-selectors instances SHOULD provide a way of unambiguously @@ -373,10 +421,10 @@ module ietf-bmp { description "Configuration for individual peers."; list peer { - key "peer-id"; + key "id"; description "Peer identifier."; - leaf peer-id { + leaf id { type string; description "Identifier of the peer."; @@ -387,17 +435,17 @@ module ietf-bmp { description "Enables route monitoring messages for this peer."; } - uses bmp-route-monitoring-peer-configuration; + uses route-monitoring-peer-grouping; } } container peer-groups { description "Configuration for peer groups."; list peer-group { - key "peer-group-id"; + key "id"; description "Peer group identifier."; - leaf peer-group-id { + leaf id { type string; description "Identifier of the peer group."; @@ -407,24 +455,25 @@ module ietf-bmp { default "true"; description "Enables route monitoring messages for - this peer group."; + this peer group."; } - uses bmp-route-monitoring-peer-configuration; + uses route-monitoring-peer-grouping; } } - container bmp-peer-selectors { + container peer-selectors { description "Configuration for peers selected by BMP peer - selectors."; - list bmp-peer-selector { - key "bmp-selector-id"; + selectors."; + list peer-selector { + key "id"; description "Identification of peers for which we send BMP data to the collector - using a peer type defined using a peer-types-bmp. + using a peer type defined using a + bmp-peer-selectors identity. For instance, to create a default for all - peers use bmp-peer-selectors-all-peers"; - leaf bmp-selector-id { + peers use all-peers"; + leaf id { type identityref { base bmp-peer-selectors; } @@ -435,109 +484,109 @@ module ietf-bmp { type boolean; default "true"; description - "Enables routing monitoring messages + "Enables route monitoring messages for the peer(s)."; } - uses bmp-route-monitoring-peer-configuration; + uses route-monitoring-peer-grouping; } } - container bgp-peer-types { + container peer-types { description "Generic identification of peers to configure."; - list bgp-peer-type { - key "bgp-peer-type-id"; + list peer-type { + key "id"; description "Identification of peers for which we send BMP data to the collector using BGP peer-type (e.g. internal, external) "; - leaf bgp-peer-type-id { - type bt:peer-type; + leaf id { + type peer-type; description "BGP peer type."; } + leaf enabled { + type boolean; + default "true"; + description + "Enables route monitoring messages + for the peer(s)."; + } + uses route-monitoring-peer-grouping; } - leaf enabled { - type boolean; - default "true"; - description - "Enables routing monitoring messages - for the peer(s)."; - } - uses bmp-route-monitoring-peer-configuration; } } } } } - grouping generic-network-instance-configuration { + grouping generic-network-instance-grouping { + description + "Generic configuration of a network instance."; + leaf enabled { + type boolean; + default "true"; + description + "Enables route monitoring + messages for the network instance."; + } + container adj-rib-in-pre { + description + "Configuration for the adj-rib-in pre-policy."; + reference + "RFC7854: BGP Monitoring Protocol (BMP), Section 2."; + uses bmp-peer-ribs-filter-grouping; + } + container adj-rib-in-post { + description + "Configuration for the adj-rib-in post-policy"; + reference + "RFC7854: BGP Monitoring Protocol (BMP), Section 2."; + uses bmp-peer-ribs-filter-grouping; + } + container local-rib { + description + "Configuration for the local-rib."; + reference + "RFC9069: Support for Local RIB in the BGP Monitoring + Protocol (BMP), Section 3."; + container address-families { description - "Generic configuration of a network instance."; - leaf enabled { - type boolean; - default "true"; - description - "Enables route monitoring - messages for the network instance."; - } - container adj-rib-in-pre { - description - "Configuration for the adj-rib-in pre-policy."; - reference - "RFC7854: BGP Monitoring Protocol (BMP), Section 2."; - uses bmp-peer-ribs-filter; - } - container adj-rib-in-post { - description - "Configuration for the adj-rib-in post-policy"; - reference - "RFC7854: BGP Monitoring Protocol (BMP), Section 2."; - uses bmp-peer-ribs-filter; - } - container local-rib { + "List of address families to enable for local-rib."; + list address-family { + key "id"; description - "Configuration for the local-rib."; - reference - "RFC9069: Support for Local RIB in the BGP Monitoring - Protocol (BMP), Section 3."; - container address-families { - description - "List of address families to enable for local-rib."; - list address-family { - key "address-family-id"; - description - "Address family to enable for local-rib"; - leaf address-family-id { - type identityref { - base bt:afi-safi-type; - } - description - "Address family id to enable for local-rib"; - } - uses bmp-route-monitoring-peer-configuration; + "Address family to enable for local-rib"; + leaf id { + type identityref { + base afi-safi-type; } + description + "Address family id to enable for local-rib"; } - } - container adj-rib-out-pre { - description - "Configuration for the adj-rib-out pre-policy"; - uses bmp-peer-ribs-filter; - reference - "RFC8671: Support for Adj-RIB-Out in the BGP Monitoring - Protocol (BMP) , Section 3."; - } - container adj-rib-out-post { - description - "Configuration for the adj-rib-out post-policy"; - uses bmp-peer-ribs-filter; - reference - "RFC8671: Support for Adj-RIB-Out in the BGP Monitoring - Protocol (BMP) , Section 3."; + uses route-monitoring-peer-grouping; } } + } + container adj-rib-out-pre { + description + "Configuration for the adj-rib-out pre-policy"; + reference + "RFC8671: Support for Adj-RIB-Out in the BGP Monitoring + Protocol (BMP) , Section 3."; + uses bmp-peer-ribs-filter-grouping; + } + container adj-rib-out-post { + description + "Configuration for the adj-rib-out post-policy"; + reference + "RFC8671: Support for Adj-RIB-Out in the BGP Monitoring + Protocol (BMP) , Section 3."; + uses bmp-peer-ribs-filter-grouping; + } + } - grouping bmp-route-monitoring-sources { + grouping route-monitoring-sources { description "Configuration of route monitoring sources."; reference @@ -545,33 +594,36 @@ module ietf-bmp { container network-instance-configuration { description "This container offers options for configuring BMP - route-monitoring messages for each network instance either - selecting it through its name or through a - network-instance-selectors. - - Network-instance-selectors are instances of bmp-ni-types that - select one or more network instances for configuration. For - instance, bmp-ni-types-all-ni to configure all network - instances (serving as a default). - - Network-instance can be at most configured by one of the - containers. If the network instance is not covered by any, - then no BMP route monitoring message should include that - network instance. If more than one container matches - the network instance, the priority for selecting the - container to use for configuration is: - - 1. The configuration under the BGP container, if supported - by the implementation (see - ietf-bmp-bgp-dependencies.yang) - 2. For any other named network instance, the configuration + route-monitoring messages for each network instance either + selecting it through its name or through a + network-instance-selectors. + + Network-instance-selectors are instances of bmp-ni-types + that select one or more network instances for configuration. + For instance, all-ni to configure all network + instances (serving as a default). + + Network-instance can be at most configured by one of the + containers. If the network instance is not covered by any, + then no BMP route monitoring message should include that + network instance. If more than one container matches + the network instance, the priority for selecting the + container to use for configuration is: + + 1. For any named network instance, the configuration under the element listed with its name under the network-instance container. + 2. If the global-ni network-instance type exists, + it SHOULD be used for the global-ni. + However, if the global-ni + has an explicit name, and it is configured, then + from the previous rule, the explicit network + instance name configuration SHOULD be used. 3. The configuration under network-instance-groups of type - bmp-ni-types-non-global-ni if existing and not the global + non-global-ni if existing and not the global network instance. 4. the configuration under network-instance-groups under the - element bmp-ni-types-all-ni. + element all-ni. If the implementation has a name for the global network instance (e.g. 'main') it can be configure directly under @@ -581,16 +633,14 @@ module ietf-bmp { container in the future SHOULD provide a clear way of selecting the configuration container for a network-instance without ambiguity."; - container network-instances { description "Configuration for specific network instances"; - list network-instance { - key "network-instance-id"; + key "id"; description "Network instance to monitor using BMP."; - leaf network-instance-id { + leaf id { type leafref { path "/ni:network-instances/ni:network-instance/" + "ni:name"; @@ -598,30 +648,29 @@ module ietf-bmp { description "Name of the network instance."; } - uses generic-network-instance-configuration; - } + uses generic-network-instance-grouping; + } } - container network-instance-selectors { - description "Configuration of network instances. Uses - bmp-ni-types to identify one or a group of - network instances to configure."; + description + "Configuration of network instances. Uses + bmp-ni-types to identify one or a group of + network instances to configure."; list network-instance-selector { - key "network-instance-selector-id"; + key "id"; description "Network instance(s) to monitor using BMP."; - leaf network-instance-selector-id { + leaf id { type identityref { base bmp-ni-types; } description "Configures one or multiple network instances selected based on a bmp-ni-types identity (e.g. - bmp-ni-types-all-ni for all of them)."; + all-ni for all of them)."; } - uses generic-network-instance-configuration; - - } + uses generic-network-instance-grouping; + } } } } @@ -629,10 +678,10 @@ module ietf-bmp { container bmp { description "Top-level container for BMP configuration."; - container bmp-monitoring-stations { + container monitoring-stations { description "List of BMP monitoring stations."; - list bmp-monitoring-station { + list monitoring-station { key "id"; description "Configuration for a BMP monitoring station."; @@ -649,7 +698,7 @@ module ietf-bmp { container connection { description "Connection parameters for the monitoring station."; - uses bmp-ip-connection; + uses bmp-ip-connection-grouping; container tcp-options { description "TCP options for the connection to the monitoring @@ -725,7 +774,7 @@ module ietf-bmp { container bmp-data { description "Configuration of BMP data sent to the monitoring - station."; + station."; leaf initiation-message { type string; description @@ -735,7 +784,7 @@ module ietf-bmp { "RFC7854: BGP Monitoring Protocol, Section 4.3 and 4.4"; } - container bmp-statistics-report { + container statistics-report { presence "Enable BMP statistics report."; description "Configuration for periodic statistics reports."; @@ -750,102 +799,42 @@ module ietf-bmp { "Interval between statistics report messages."; } } - container bmp-route-monitoring { + container route-monitoring { description "Configuration of the data sources for route-monitoring messages"; - uses bmp-route-monitoring-sources; + uses route-monitoring-sources; } - container bmp-route-mirroring { - presence - "Enable BMP route mirroring to the monitoring - station."; + container route-mirroring { + presence "Enable BMP route mirroring to the monitoring + station."; description "Configuration for route mirroring to the monitoring station."; } } - container session-stats { config false; description "Operational statistics for the monitoring station. Counters are reset after each successful connection or reset."; - leaf discontinuity-time { - type yang:date-and-time; - mandatory true; - description - "The time on the most recent occasion at which any - one or more of this station's counters suffered a - discontinuity. If no such discontinuities have - occurred since the last re-initialization of the - local management subsystem, then this node contains - the time the local management subsystem - re-initialized itself."; - } - leaf established-session { - type boolean; - description - "Indicates if the session is currently - established."; - } - leaf total-route-monitoring-messages { - type uint64; - description - "Number of route-monitoring messages sent."; - } - leaf total-statistics-messages { - type uint64; - description - "Number of statistics messages sent."; - } - leaf total-peer-down-messages { - type uint64; - description - "Number of peer-down messages sent."; - } - leaf total-peer-up-messages { - type uint64; - description - "Number of peer-up messages sent."; - } - leaf total-initiation-messages { - type uint64; - description - "Number of initiation messages sent"; - } - leaf total-route-mirroring-messages { - type uint64; - description - "Number of route-mirroring messages sent."; - } - leaf total-termination-messages { - type uint64; - description - "Number of termination messages sent."; - } - - grouping bmp-af-stats-with-peers { + grouping bmp-af-stats-with-peers-grouping { description "Generic statistics for an address family that can be - disaggregated by peers"; - + disaggregated by peers"; container peers-stats { description - "Peer stats"; + "Peer stats"; list peer { - key "peer-id"; - + key "id"; description "List of peers"; - - leaf peer-id { + leaf id { type string; description "Peer id"; } - leaf enabled { type boolean; description @@ -853,75 +842,68 @@ module ietf-bmp { currently enabled for the peer under this network instance, address family, and RIB."; } - - leaf - total-route-monitoring-updated-prefixes-per-peer { + leaf total-route-mnt-updated-prefixes-per-peer { type uint64; description "Number of prefixes updated for this peer."; } - leaf - total-route-monitoring-withdraw-prefixes-per-peer { + leaf total-route-mnt-withdraw-prefixes-per-peer { type uint64; description "Number of prefixes withdrawn for this peer."; } - } } } - grouping bmp-af-stats { - + grouping bmp-af-stats-grouping { description "Group for statistics for an address family."; leaf enabled { - type boolean; - description - "Indicates if any route monitoring messages - are currently enabled for the address family - within the RIB."; - } - leaf total-route-monitoring-updated-prefixes-per-af { - type uint64; - description - "Number of prefixes updated for this address - family."; - } - leaf total-route-monitoring-withdraw-prefixes-per-af { - type uint64; - description - "Number of prefixes withdrawn for this address - family."; - } + type boolean; + description + "Indicates if any route monitoring messages + are currently enabled for the address family + within the RIB."; + } + leaf total-route-monitoring-updated-prefixes-per-af { + type uint64; + description + "Number of prefixes updated for this address + family."; + } + leaf total-route-monitoring-withdraw-prefixes-per-af { + type uint64; + description + "Number of prefixes withdrawn for this address + family."; + } } - grouping bmp-rib-with-peers-stats { + grouping bmp-rib-with-peers-stats-grouping { description "Generic statistics for a RIB with peers."; container address-families { - description - "List of address families to list stats."; - list address-family { - key "address-family-id"; description - "Address family to enable for local-rib"; - leaf address-family-id { - type identityref { - base bt:afi-safi-type; - } - + "List of address families to list stats."; + list address-family { + key "id"; description - "Address family ID for local-rib."; - } - uses bmp-af-stats; - uses bmp-af-stats-with-peers; + "Address family to enable for local-rib"; + leaf id { + type identityref { + base afi-safi-type; + } + description + "Address family ID for local-rib."; + } + uses bmp-af-stats-grouping; + uses bmp-af-stats-with-peers-grouping; } } - } - grouping bmp-rib-stats { + grouping bmp-rib-stats-grouping { description "Generic statistics per RIB."; leaf enabled { @@ -934,11 +916,63 @@ module ietf-bmp { type uint64; description "Number of route-mirroring messages sent for - this RIB."; + this RIB."; } - } + leaf discontinuity-time { + type yang:date-and-time; + mandatory true; + description + "The time on the most recent occasion at which any + one or more of this station's counters suffered a + discontinuity. If no such discontinuities have + occurred since the last re-initialization of the + local management subsystem, then this node contains + the time the local management subsystem + re-initialized itself."; + } + leaf established-session { + type boolean; + description + "Indicates if the session is currently + established."; + } + leaf total-route-monitoring-messages { + type uint64; + description + "Number of route-monitoring messages sent."; + } + leaf total-statistics-messages { + type uint64; + description + "Number of statistics messages sent."; + } + leaf total-peer-down-messages { + type uint64; + description + "Number of peer-down messages sent."; + } + leaf total-peer-up-messages { + type uint64; + description + "Number of peer-up messages sent."; + } + leaf total-initiation-messages { + type uint64; + description + "Number of initiation messages sent"; + } + leaf total-route-mirroring-messages { + type uint64; + description + "Number of route-mirroring messages sent."; + } + leaf total-termination-messages { + type uint64; + description + "Number of termination messages sent."; + } container route-monitoring-stats { description "Statistics of route monitoring messages disaggregated @@ -947,11 +981,9 @@ module ietf-bmp { description "Stats per network-instance"; list network-instance { - key 'network-instance-name'; - + key "network-instance-name"; description "Network instance stats list"; - leaf network-instance-name { type leafref { path "/ni:network-instances/ni:network-instance/" @@ -966,82 +998,67 @@ module ietf-bmp { "Indicates if route monitoring messages are currently enabled for the network instance."; } - leaf total-route-mirroring-messages-per-ni { type uint64; description "Number of route-mirroring messages sent for this network instance."; } - container ribs-stats { description "Statistics for the different RIBs."; container adj-rib-in-pre { description "Statistics for adj-rib-in-pre."; - uses bmp-rib-stats; - uses bmp-rib-with-peers-stats; - + uses bmp-rib-stats-grouping; + uses bmp-rib-with-peers-stats-grouping; } - container adj-rib-in-post { description "Statistics for adj-rib-in-post"; - uses bmp-rib-stats; - uses bmp-rib-with-peers-stats; - + uses bmp-rib-stats-grouping; + uses bmp-rib-with-peers-stats-grouping; } - container local-rib { description "Statistics for local-rib"; - uses bmp-rib-stats; + uses bmp-rib-stats-grouping; container address-families { description "List of address families to for stats."; list address-family { - key "address-family-id"; + key "id"; description "Address family to enable for local-rib"; - leaf address-family-id { + leaf id { type identityref { - base bt:afi-safi-type; + base afi-safi-type; } description "Address family ID for local-rib"; } - uses bmp-af-stats; - } + uses bmp-af-stats-grouping; } - + } } - container adj-rib-out-pre { description "Statistics for adj-rib-out-pre"; - uses bmp-rib-stats; - uses bmp-rib-with-peers-stats; - + uses bmp-rib-stats-grouping; + uses bmp-rib-with-peers-stats-grouping; } - container adj-rib-out-post { description "Statistics for adj-rib-out-post"; - uses bmp-rib-stats; - uses bmp-rib-with-peers-stats; - + uses bmp-rib-stats-grouping; + uses bmp-rib-with-peers-stats-grouping; } - } + } } - - } - - } + } } container actions { - nacm:default-deny-all; description "Container with actions for BMP operation."; action session-reset { @@ -1090,10 +1107,9 @@ module ietf-bmp { } } } + nacm:default-deny-all; } } } - } - } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-cats@2024-06-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-cats@2024-06-20.yang index b2e6cab7b..0a8c85218 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-cats@2024-06-20.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-cats@2024-06-20.yang @@ -1,16 +1,18 @@ module ietf-cats { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-cats"; - prefix ietf-cats; + prefix cats; import ietf-inet-types { prefix inet; reference - "RFC 6991 Common YANG Data Types"; + "RFC 6991: Common YANG Data Types"; } import ietf-routing-types { prefix "rt-types"; + reference + "RFC 8294: Common YANG Data Types for the Routing Area"; } import ietf-srv6-types { @@ -23,8 +25,18 @@ module ietf-cats { organization "IETF CATS"; contact - "WG Web: - WG List: + "WG Web: + WG List: + Author: Huijuan Yao + + Author: Changwang Lin + + Author: Zhenqiang Li + + Author: Quan Xiong + + Author: Luis M. Contreras + "; description @@ -38,14 +50,16 @@ module ietf-cats { 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 - (httpstrustee.ietf.orglicense-info). - This version of this YANG module is part of RFC XXXX; + 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. - The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL','SHALL - NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT + 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 @@ -56,7 +70,7 @@ module ietf-cats { "Initial Version"; reference "RFC XXXX: YANG Data Model for CATS"; - } + } typedef cs-id { type union { @@ -68,21 +82,20 @@ module ietf-cats { "This type is for CATS CS-ID."; } - typedef cis-id { + typedef csci-id { type union { type uint32; type inet:ipv4-address; type inet:ipv6-address; } description - "This type is for CATS CIS-ID."; + "This type is for CATS CSCI-ID."; } grouping service-policy-type { description "service policy type"; leaf policy-type { - description "service policy type"; type enumeration { enum base-on-affinity { value 0; @@ -98,6 +111,7 @@ module ietf-cats { metric"; } } + description "service policy type"; } } container base { @@ -106,7 +120,7 @@ module ietf-cats { leaf enable { type boolean; description - "enable CATS" + "enable CATS"; } leaf update-interval { type uint32; @@ -144,13 +158,13 @@ module ietf-cats { description "CATS traffic-classifier feature"; list traffic-classifier { + key "cs-id"; description "CATS traffic-classifier feature"; - key "cs-id"; leaf cs-id { type cs-id; description - "CATS CIS-ID"; + "CATS CS-ID"; } leaf description { type string; @@ -174,22 +188,20 @@ module ietf-cats { description "CATS service metric entry"; list service-metric { + key "cs-id csci-id source-type"; description "CATS service metric entry"; - key "cs-id cis-id source-type"; leaf cs-id { type cs-id; description "CATS cs-id"; } - leaf cis-id { - type cis-id; + leaf csci-id { + type csci-id; description - "CATS cis-id"; + "CATS csci-id"; } leaf source-type { - description - "source-type of the service-metric"; type enumeration { enum static { value 0; @@ -200,6 +212,8 @@ module ietf-cats { description "bgp protocol"; } } + description + "source-type of the service-metric"; } leaf priority { type uint32; @@ -220,43 +234,31 @@ module ietf-cats { description "service metric"; list metric { - description "Different types of service "; key "metric-type"; + description "Different types of service."; leaf metric-type { - description "metric type"; type enumeration { enum delay { value 0; description " Calculate the metric based on - transmission delay, where the metric value - is the delay time in milliseconds."; + transmission delay, where the metric value + is the delay time in milliseconds."; } - enum service-capacity { + enum service-ratio { value 1; description "Calculate the metric based on - service capacity, where the metric value is - the service capacity."; - } - enum service-availability-ratio { - value 2; - description "Calculate the metric based on - service capacity, where the metric value is - the current available capacity percentage."; - } - enum memory-capacity { - value 3; - description "Calculate the metric based on - memory capacity, where the metric value - is the memory capacity"; + business capacity, where the metric value is + the current capacity percentage."; } enum memory-ratio { - value 4; - description "Calculate the metric based on - memory utilization percentage, where the - metric value is the current memory - utilization percentage"; + value 2; + description " Calculate the metric based on + memory utilization percentage, where the + metric value is the current memory + utilization percentage"; } } + description "metric type"; } leaf metric { type uint32; @@ -279,7 +281,7 @@ module ietf-cats { leaf index { type uint32; description "A unique ID of an MPLS label in labels -list"; + list"; } leaf label { type rt-types:mpls-label; @@ -310,6 +312,9 @@ list"; } } grouping path-forwarding-info { + description + "cats forwarding path information"; + leaf next-hop-address { type inet:ip-address; description "Nexthop address"; @@ -331,31 +336,22 @@ list"; uses srv6-sid-stack; } } - } - - grouping path-forwarding-state { - description "cats Forwarding path information"; - leaf path-id { - type uint8; - description "Primary path id"; } - uses path-forwarding-info; - } } container forwarding-paths { description "Forwarding state of paths"; list forwarding-path { + key "cs-id csci-id"; description "Forwarding state of paths"; - key "cs-id cis-id"; leaf cs-id { type cs-id; description "CATS cs-id"; } - leaf cis-id { - type cis-id; - description "CATS cis-id"; + leaf csci-id { + type csci-id; + description "CATS csci-id"; } uses service-policy-type; leaf weight { @@ -364,8 +360,12 @@ list"; } list forwarding-path-state { key "path-id"; - description "Forwarding path state"; - uses path-forwarding-state; + description "CATS Forwarding path state"; + leaf path-id { + type uint8; + description "Primary path id"; + } + uses path-forwarding-info; } } } @@ -373,9 +373,9 @@ list"; container flow-entrys { description "flow entry"; list flow-entry { - description "flow entry"; key "source-address dest-address source-port dest-port -protocol"; + protocol"; + description "flow entry"; leaf source-address { type inet:ip-address; description "source address of flow"; @@ -400,9 +400,9 @@ protocol"; type cs-id; description "CATS cs-id"; } - leaf cis-id { - type cis-id; - description "CATS cis-id"; + leaf csci-id { + type csci-id; + description "CATS csci-id"; } leaf affinity { type uint32; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-cmis-control@2025-04-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-cmis-control@2025-04-21.yang index 1ba889058..b57b80678 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-cmis-control@2025-04-21.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-cmis-control@2025-04-21.yang @@ -6,6 +6,7 @@ module ietf-cmis-control { import ietf-interfaces { prefix if; } + organization "IETF CCAMP Working Group"; @@ -17,7 +18,7 @@ module ietf-cmis-control { Editor: Hitoshi Irino - "; + "; description "This YANG module defines a data model for the management @@ -197,6 +198,7 @@ module ietf-cmis-control { /* * Augment Interface */ + augment "/if:interfaces/if:interface" { container cmis-control { uses cmis-control; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent-acl@2025-07-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent-acl@2025-07-03.yang index 97db545f1..18214c7f5 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent-acl@2025-07-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent-acl@2025-07-03.yang @@ -56,39 +56,13 @@ module ietf-dtnma-agent-acl { "draft-ietf-dtn-adm-yang"; } amm:enum 2; - amm:typedef tag { - amm:enum 0; - description - "Datatype for access control list tags"; - amm:type "./TYPEDEF/permissions"; - } - amm:typedef permissions { - amm:enum 1; - amm:type "/ARITYPE/BYTE" { - amm:int-labels { - bit tag-read { - position 0; - description - "Permission bit for Read"; - } - bit tag-write { - position 1; - description - "Permission bit for Write"; - } - bit tag-execute { - position 2; - description - "Permission bit for Execute/Evaluate"; - } - } - } - } + + // Common types in this model amm:typedef entry-id { amm:enum 2; description "The identifier for an entry in any access control table."; - amm:type "/ARITYPE/UVAST"; + amm:type "/ARITYPE/UINT"; } amm:typedef optional-entry-id { amm:enum 3; @@ -99,36 +73,95 @@ module ietf-dtnma-agent-acl { amm:type "/ARITYPE/null"; } } - amm:typedef result { - amm:enum 4; - amm:type "/ARITYPE/INT" { - amm:int-labels { - enum success { - value 0; - description - "Execution was successful"; - } - enum error-generic { - value 1; - description - "Generic execution failure"; - } - enum error-permission-denied { - value 2; - description - "Manager does not have permission"; - } + + // Atomic permission objects + amm:ident permission { + amm:enum 0; + description + "The base IDENT for objects usable as permissions in the + access control table. + Derived objects MUST define the specific conditions in which + the permission is exercised. + Derived objects MAY be parameterized as needed to control + specific access granted by each permission. + This object itself is abstract and provides not specific + permission."; + amm:abstract true; + } + amm:typedef permission-list { + amm:enum 0; + description + "A list of permission object (IDENT) references."; + amm:ulist { + amm:type "/aritype/ident" { + amm:base "./ident/permission"; } } } + // built-in permissions + amm:ident execute { + amm:enum 10; + description + "Permission to allow executing specific CTRL objects. + This includes objects used directly as EXECSET targets, + indirectly within macros, or as actions of TBR or SBR + objects."; + amm:base "./ident/permission"; + } + amm:ident produce { + amm:enum 11; + description + "Permission to allow producing values from CONST, VAR, or + EDD objects. + This includes production for use by reporting or evaluating + procedures of the Agent."; + amm:base "./ident/permission"; + } + amm:ident modify-var { + amm:enum 12; + description + "Permission to allow modifying state on VAR objects."; + amm:base "./ident/permission"; + } + amm:ident create-odm { + amm:enum 13; + description + "Permission to allow creating a new ODM within an Agent."; + amm:base "./ident/permission"; + } + amm:ident delete-odm { + amm:enum 14; + description + "Permission to allow deleting an ODM within an Agent."; + amm:base "./ident/permission"; + } + amm:ident create-object { + amm:enum 15; + description + "Permission to allow creating a new object within an ODM. + The permission itself does not restrict the type of object, + but the access list can limit the item to specific object + types and names."; + amm:base "./ident/permission"; + } + amm:ident delete-object { + amm:enum 16; + description + "Permission to allow deleting an object within an ODM. + The permission itself does not restrict the type of object, + but the access list can limit the item to specific object + types and names."; + amm:base "./ident/permission"; + } + // Default access permission amm:var default-access { amm:enum 1; description "The default permission for any object if no specific access - are present in the ./EDD/access-list table."; - amm:type "./TYPEDEF/tag"; + are present in the <./EDD/access-list> table."; + amm:type "./TYPEDEF/permission-list"; } // Access control table and modifier controls @@ -137,27 +170,43 @@ module ietf-dtnma-agent-acl { description "List the current group--object access."; amm:tblt { - amm:key "id"; - amm:column id { + amm:key "access-id"; + amm:column access-id { + description + "A unique identifier for this access list item."; amm:type "./TYPEDEF/entry-id"; } - amm:column group { + amm:column group-ids { + description + "A cross-reference to the groups getting access, or the + empty list to match all groups."; + amm:ulist { + amm:type "./TYPEDEF/entry-id"; + } + } + amm:column objects { + description + "A pattern for objects being granted access, which may + match all objects."; + amm:type "//ietf/amm-base/typedef/ari-pattern"; + } + amm:column permissions { description - "A cross-reference to the group getting access, or null to - match all groups."; - amm:type "./TYPEDEF/optional-entry-id"; + "Refernces to specific permissions being granted. + Individual permission references MAY be parameterized + as necessary. + The absence of permissions does not grant any access."; + amm:type "./TYPEDEF/permission-list"; } - amm:column object-pattern { + amm:column added-at { description - "A pattern for objects being accessed, which may match - all objects."; - amm:type "/ARITYPE/TEXTSTR"; + "Agent timestamp when this group was added."; + amm:type "//ietf/amm-base/typedef/timestamp"; } - amm:column tag { + amm:column updated-at { description - "A pattern for objects being accessed, which may match - all objects."; - amm:type "./TYPEDEF/tag"; + "Agent timestamp when this group was added or updated."; + amm:type "//ietf/amm-base/typedef/timestamp"; } } } @@ -166,76 +215,71 @@ module ietf-dtnma-agent-acl { description "Ensures that an access control permission is set for the given group and ARI pattern."; - amm:parameter group { + amm:parameter access-id { description - "Identify the group being assigned the permission"; - amm:type "./TYPEDEF/optional-entry-id"; + "A unique identifier for this access list item."; + amm:type "./TYPEDEF/entry-id"; } - amm:parameter object-pattern { + amm:parameter group-ids { description - "ARI pattern to determine which objects shall be assigned - the permission"; - amm:type "/ARITYPE/TEXTSTR"; + "Identify the groups being assigned the permission, + or the empty list for all-groups."; + amm:ulist { + amm:type "./TYPEDEF/entry-id"; + } } - amm:parameter tag { + amm:parameter objects { description - "Permission tag value to set"; - amm:default "0"; - amm:type "./TYPEDEF/tag"; + "ARI pattern to determine which objects will be assigned + the permissions."; + amm:type "//ietf/amm-base/typedef/ari-pattern"; } - amm:result error-code { + amm:parameter permissions { description - "If non-zero, an indicator of an error."; - amm:type "./TYPEDEF/result"; + "Permissions to grant to the associated group and objects"; + amm:type "./TYPEDEF/permission-list"; } } amm:ctrl discard-access { amm:enum 4; description - "Discard any permissions for the given group and ARI pattern."; - amm:parameter group { - description - "Identify the group"; - amm:type "./TYPEDEF/optional-entry-id"; - } - amm:parameter object-pattern { - description - "ARI pattern"; - amm:type "/ARITYPE/TEXTSTR"; - } - amm:result error-code { + "Discard any access item with the given ID."; + amm:parameter access-id { description - "If non-zero, an indicator of an error."; - amm:type "./TYPEDEF/result"; + "Uniquely identify the access"; + amm:type "./TYPEDEF/entry-id"; } } // // Group management // - amm:edd current-group-id { + amm:edd current-groups { amm:enum 3; description - "Get the group ID for the current execution context, which may - be the implicit Agent group ID zero."; - amm:type "./TYPEDEF/entry-id"; + "Get the group IDs for the current execution context, which may + incude the implicit Agent group ID zero."; + amm:ulist { + amm:type "./TYPEDEF/entry-id"; + } } amm:edd group-list { amm:enum 4; description "Get the defined access control groups."; amm:tblt { - amm:key "id"; - amm:column id { + amm:key "group-id"; + amm:column group-id { description "The unique identifier for a group. - The agent itself has implicit group ID zero."; + The agent itself has implicit group ID zero which cannot + be modified."; amm:type "./TYPEDEF/entry-id"; } amm:column name { description "The human-friendly name of the group."; - amm:type "/ARITYPE/TEXTSTR"; + amm:type "//ietf/amm-base/typedef/id-text"; } amm:column members { description @@ -245,6 +289,16 @@ module ietf-dtnma-agent-acl { amm:type "//ietf/network-base/TYPEDEF/endpoint-pattern"; } } + amm:column added-at { + description + "Agent timestamp when this group was added."; + amm:type "//ietf/amm-base/typedef/timestamp"; + } + amm:column updated-at { + description + "Agent timestamp when this group was added or updated."; + amm:type "//ietf/amm-base/typedef/timestamp"; + } } } amm:ctrl ensure-group { @@ -252,7 +306,7 @@ module ietf-dtnma-agent-acl { description "Ensure that after the control completes a group exists with the given information"; - amm:parameter id { + amm:parameter group-id { description "Uniquely identify the group"; amm:type "./TYPEDEF/entry-id"; @@ -260,12 +314,7 @@ module ietf-dtnma-agent-acl { amm:parameter name { description "Name of the group"; - amm:type "/ARITYPE/TEXTSTR"; - } - amm:result error-code { - description - "If non-zero, an indicator of an error."; - amm:type "./TYPEDEF/result"; + amm:type "//ietf/amm-base/typedef/id-text"; } } amm:ctrl ensure-group-members { @@ -273,7 +322,7 @@ module ietf-dtnma-agent-acl { description "Ensure that the membership of a group has a specific set of endpoint patterns."; - amm:parameter id { + amm:parameter group-id { description "Uniquely identify the group"; amm:type "./TYPEDEF/entry-id"; @@ -283,25 +332,15 @@ module ietf-dtnma-agent-acl { amm:type "//ietf/network-base/TYPEDEF/endpoint-pattern"; } } - amm:result error-code { - description - "If non-zero, an indicator of an error."; - amm:type "./TYPEDEF/result"; - } } amm:ctrl discard-group { amm:enum 6; description "Discard any group with the given ID."; - amm:parameter group { + amm:parameter group-id { description "Uniquely identify the group"; amm:type "./TYPEDEF/entry-id"; } - amm:result error-code { - description - "If non-zero, an indicator of an error."; - amm:type "./TYPEDEF/result"; - } } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent@2025-07-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent@2025-07-03.yang index 6baf4ef8c..d283fea0e 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent@2025-07-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent@2025-07-03.yang @@ -111,12 +111,22 @@ module ietf-dtnma-agent { amm:operand left { description "The left-side operand."; - amm:type "//ietf/amm-base/typedef/ANY"; + amm:type "//ietf/amm-base/typedef/any"; } amm:operand right { description "The left-side operand."; - amm:type "//ietf/amm-base/typedef/ANY"; + amm:type "//ietf/amm-base/typedef/any"; + } + } + + grouping any-unary-result { + description + "Any-value result"; + amm:result result { + description + "The single value."; + amm:type "//ietf/amm-base/typedef/any"; } } @@ -305,6 +315,10 @@ module ietf-dtnma-agent { amm:enum 15; amm:type "//ietf/amm-base/typedef/counter64"; } + amm:edd last-msg-rx-time { + amm:enum 17; + amm:type "/aritype/TP"; + } // Execution counters and states amm:edd num-exec-started { @@ -327,7 +341,7 @@ module ietf-dtnma-agent { amm:type "/aritype/UVAST"; } amm:column target { - amm:type "//ietf/amm-base/typedef/ANY"; + amm:type "//ietf/amm-base/typedef/any"; } amm:column state { amm:type "/aritype/BYTE" { @@ -459,7 +473,7 @@ module ietf-dtnma-agent { amm:result val { description "The produced value."; - amm:type "//ietf/amm-base/typedef/ANY"; + amm:type "//ietf/amm-base/typedef/any"; } } amm:ctrl report-on { @@ -482,13 +496,18 @@ module ietf-dtnma-agent { } amm:parameter destinations { description - "One or more destination for the resulting report. + "Destinations for the resulting report. + If given an empty list (the default) reports will be sent + to the manager executing this CTRL. + When executed as a rule action, the destinations list is + mandatory. + It is possible that each destination has different access limitations so each destination might see different report contents."; - amm:union { + amm:default "/ac/()"; + amm:ulist { amm:type "//ietf/network-base/typedef/endpoint-or-uri"; - amm:type "/aritype/null"; } } } @@ -530,7 +549,10 @@ module ietf-dtnma-agent { amm:ctrl ensure-odm { amm:enum 18; description - "Ensure a specific ODM is present."; + "Ensure a specific ODM is present. + The referenced organization and model identifiers SHALL either + not already exist or exist with the exact combination given by + these parameters"; amm:parameter org-name { description "The organization name containing the ODM"; @@ -543,13 +565,17 @@ module ietf-dtnma-agent { } amm:parameter model-name { description - "The model name containing the ODM"; - amm:type "//ietf/amm-base/typedef/id-text"; + "The model name containing the ODM."; + amm:type "//ietf/amm-base/typedef/id-text" { + pattern '!.+'; + } } amm:parameter model-id { description "The model enumeration ID containing the ODM"; - amm:type "//ietf/amm-base/typedef/id-int"; + amm:type "//ietf/amm-base/typedef/id-int" { + range "min..-1"; + } } } amm:ctrl obsolete-odm { @@ -586,7 +612,7 @@ module ietf-dtnma-agent { amm:parameter value { description "The exact value to store in the VAR."; - amm:type "//ietf/amm-base/typedef/ANY"; + amm:type "//ietf/amm-base/typedef/any"; } } @@ -623,19 +649,22 @@ module ietf-dtnma-agent { amm:ctrl ensure-const { amm:enum 11; description - "Ensure a specific CONST is present in an ODM."; + "Ensure a specific CONST is present in an ODM. + If an object already exists with the same identifiers, type, + and value this control will do nothing and succeed. + If an object already exists in the same namespace with either + of the object identifiers this control will fail."; uses ensure-object-id; amm:parameter type { description "The type for the CONST object."; amm:type "//ietf/amm-semtype/typedef/semtype"; } - amm:parameter init { + amm:parameter value { description - "A required initializer expression. - This expression is evaluated once at the time of object - creation."; - amm:type "//ietf/amm-base/typedef/EXPR"; + "A required constant value. + This value SHALL match the type given for this object."; + amm:type "//ietf/amm-base/typedef/any"; } } amm:ctrl obsolete-const { @@ -669,23 +698,27 @@ module ietf-dtnma-agent { amm:ctrl ensure-var { amm:enum 9; description - "Ensure a specific VAR is present in an ODM."; + "Ensure a specific VAR is present in an ODM. + If an object already exists with the same identifiers, type, + and init-value this control will do nothing and succeed. + If an object already exists in the same namespace with either + of the object identifiers (but not both), or the type or + is different, this control will fail. + That means that this control can change only the initial value + of a pre-existing VAR object."; uses ensure-object-id; amm:parameter type { description "The type for the VAR object."; amm:type "//ietf/amm-semtype/typedef/semtype"; } - amm:parameter init { + amm:parameter init-value { description - "An optional initializer expression. - This expression is evaluated once at the time of object - creation."; - amm:default "null"; - amm:union { - amm:type "/aritype/NULL"; - amm:type "//ietf/amm-base/typedef/EXPR"; - } + "The exact value to use as the initial value of + the new object and to store as the initial state + of the object if created. + This value SHALL match the type given for this object."; + amm:type "//ietf/amm-base/typedef/any"; } } amm:ctrl obsolete-var { @@ -780,9 +813,6 @@ module ietf-dtnma-agent { "The execution when this rule triggers."; amm:type "//ietf/amm-base/typedef/MAC"; } - amm:parameter start-time { - amm:type "//ietf/amm-base/typedef/TIME"; - } amm:parameter condition { amm:type "//ietf/amm-base/typedef/EXPR"; } @@ -820,9 +850,6 @@ module ietf-dtnma-agent { amm:parameter max-count { amm:type "/ARITYPE/UVAST"; } - amm:parameter max-count { - amm:type "/ARITYPE/UVAST"; - } amm:parameter init-enabled { amm:type "/ARITYPE/BOOL"; } @@ -902,23 +929,23 @@ module ietf-dtnma-agent { "Add two numeric values. The operands are cast to the least compatible numeric type before the arithmetic."; - uses numeric-binary-operands; - uses numeric-unary-result; + uses any-binary-operands; + uses any-unary-result; } amm:oper sub { amm:enum 2; - uses numeric-binary-operands; - uses numeric-unary-result; + uses any-binary-operands; + uses any-unary-result; } amm:oper multiply { amm:enum 3; - uses numeric-binary-operands; - uses numeric-unary-result; + uses any-binary-operands; + uses any-unary-result; } amm:oper divide { amm:enum 4; - uses numeric-binary-operands; - uses numeric-unary-result; + uses any-binary-operands; + uses any-unary-result; } amm:oper remainder { amm:enum 5; @@ -1028,35 +1055,29 @@ module ietf-dtnma-agent { } // Table filtering - amm:typedef column-id { - amm:enum 1; - description - "Name or index of an individual column in a table."; - amm:union { - amm:type "/aritype/UVAST"; - amm:type "/aritype/TEXTSTR"; - } - } amm:oper tbl-filter { amm:enum 20; description "Filter a table first by rows and then by columns."; amm:parameter row-match { description - "A filter to match rows with specific cell contents. - Each key is a column to compare and each value is an - expression with LABEL values substituted by column names."; - amm:ulist { - amm:type "//ietf/amm-base/typedef/EXPR"; - } + "A filter applied using two phases for each row: + 1. Substitute row values for LABEL items within EXPR + 2. Evaluate the expression and consider the row matched + if the result is a truthy value + Each LABEL item refers to the value at a column index + within the context of the input row. Label substitution + is performed as described in the value production section + of the DTNMA AMM document."; + amm:type "//ietf/amm-base/typedef/EXPR"; } amm:parameter columns { description - "A filter to match rows with specific cell contents. - Each key is a column to compare and each value is an - expression with LABEL values substituted by column names."; + "A filter to restrict output to only the listed columns. + The order of columns in the filtered table shall + correspond with the order of columns in this list."; amm:ulist { - amm:type "./typedef/column-id"; + amm:type "/aritype/UVAST"; } } amm:operand in { @@ -1070,4 +1091,48 @@ module ietf-dtnma-agent { amm:type "/aritype/TBL"; } } + + // List filtering + amm:oper list-get { + amm:enum 21; + description + "Retrieve an item from the given list."; + amm:parameter index { + description + "Index of the value to retrieve from the list."; + amm:type "//ietf/amm-base/typedef/INTEGER"; + } + amm:operand in { + description + "List to retrieve a value from."; + amm:type "/aritype/AC"; + } + amm:result out { + description + "The retrieved value or undefined if the index is not valid."; + amm:type "//ietf/amm-base/typedef/any"; + } + } + + // Map filtering + amm:oper map-get { + amm:enum 22; + description + "Retrieve an item from the given map."; + amm:parameter key { + description + "Key of the value to retrieve from the map."; + amm:type "//ietf/amm-base/typedef/primitive"; + } + amm:operand in { + description + "Map to retrieve a value from."; + amm:type "/aritype/AM"; + } + amm:result out { + description + "The retrieved value or undefined if the key is not valid."; + amm:type "//ietf/amm-base/typedef/any"; + } + } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-if-ethernet-like@2025-01-27.yang b/experimental/ietf-extracted-YANG-modules/ietf-if-ethernet-like@2025-08-07.yang similarity index 98% rename from experimental/ietf-extracted-YANG-modules/ietf-if-ethernet-like@2025-01-27.yang rename to experimental/ietf-extracted-YANG-modules/ietf-if-ethernet-like@2025-08-07.yang index 0c5f10857..37e0e766a 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-if-ethernet-like@2025-01-27.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-if-ethernet-like@2025-08-07.yang @@ -26,7 +26,7 @@ module ietf-if-ethernet-like { "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; contact - "WG Web: + "WG Web: WG List: Editor: Robert Wilton @@ -61,7 +61,7 @@ module ietf-if-ethernet-like { (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself for full legal notices."; - revision 2025-01-27 { + revision 2025-08-07 { description "Initial revision."; reference @@ -446,9 +446,9 @@ module ietf-if-ethernet-like { type yang:mac-address; config false; description - "The 'burnt-in' MAC address. I.e the default MAC address - assigned to the interface if no MAC address has been - explicitly configured on it."; + "The 'burnt-in' MAC address. I.e., the default MAC + address assigned to the interface if no MAC address has + been explicitly configured on it."; } } } @@ -472,7 +472,7 @@ module ietf-if-ethernet-like { type yang:counter64; units frames; description - "A count of the number of frames that were well formed, but + "A count of the number of frames that were well-formed, but otherwise discarded because the destination MAC address did not pass any ingress destination MAC address filter. diff --git a/experimental/ietf-extracted-YANG-modules/ietf-if-extensions@2025-01-27.yang b/experimental/ietf-extracted-YANG-modules/ietf-if-extensions@2025-08-07.yang similarity index 81% rename from experimental/ietf-extracted-YANG-modules/ietf-if-extensions@2025-01-27.yang rename to experimental/ietf-extracted-YANG-modules/ietf-if-extensions@2025-08-07.yang index 6ed3f663a..d010d7231 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-if-extensions@2025-01-27.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-if-extensions@2025-08-07.yang @@ -25,7 +25,7 @@ module ietf-if-extensions { "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; contact - "WG Web: + "WG Web: WG List: Editor: Robert Wilton @@ -35,9 +35,9 @@ module ietf-if-extensions { "; description - "This module contains common definitions for extending the IETF - interface YANG model (RFC 8343) with common configurable layer 2 - properties. + "This module contains definitions for extending the IETF + interface YANG model (RFC 8343) with common configurable + layer 2 properties. Copyright (c) 2025 IETF Trust and the persons identified as @@ -60,9 +60,9 @@ module ietf-if-extensions { described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here."; - revision 2025-01-27 { + revision 2025-08-07 { description - "Interface Extension YANG Module initial revision"; + "Initial revision"; reference "RFC XXXX, Common Interface Extension YANG Data Models"; @@ -87,15 +87,15 @@ module ietf-if-extensions { feature loopback { description - "This feature indicates that configurable interface loopback is - supported."; + "This feature indicates that configurable interface loopback + is supported."; reference "RFC XXXX, Section 2.4 Loopback"; } feature max-frame-size { description - "This feature indicates that the device supports configuring or - reporting the maximum frame size on interfaces."; + "This feature indicates that the device supports configuring + or reporting the maximum frame size on interfaces."; reference "RFC XXXX, Section 2.5 Maximum Frame Size"; } @@ -103,18 +103,18 @@ module ietf-if-extensions { description "This feature indicates that the device supports the instantiation of sub-interfaces. Sub-interfaces are defined - as logical child interfaces that allow features and forwarding - decisions to be applied to a subset of the traffic processed - on the specified parent interface."; + as logical child interfaces that allow features and + forwarding decisions to be applied to a subset of the traffic + processed on the specified parent interface."; reference "RFC XXXX, Section 2.6 Sub-interface"; } feature peer-interface { description "This feature indicates that the device supports the - specification of peer-interfaces. A Peer-interface is defined - as logical peer that receives egress traffic of the given - interface on its ingress path and vice versa."; + specification of peer-interfaces. A Peer-interface is + defined as logical peer that receives egress traffic of the + given interface on its ingress path and vice versa."; reference "RFC XXXX, Section 2.8 Peer-interface"; } @@ -166,12 +166,13 @@ module ietf-if-extensions { identity network { base forwarding-mode; description - "Network layer based forwarding, such as IP, MPLS, or L3VPNs."; + "Network layer based forwarding, such as IP, MPLS, + or L3VPNs."; reference "RFC XXXX, Section 2.7"; } /* - * Augments the IETF interfaces model with leaves to configure + * Augments the IETF interfaces model with leafs to configure * and monitor link-flap-suppression on an interface. */ augment "/if:interfaces/if:interface" { @@ -191,15 +192,16 @@ module ietf-if-extensions { type uint32; units milliseconds; description - "Delays the propagation of a 'loss of carrier signal' event - that would cause the interface state to go down, i.e. the - command allows short link flaps to be suppressed. The - configured value indicates the minimum time interval (in - milliseconds) that the link signal must be continuously - down before the interface state is brought down. If not - configured, the behavior on loss of link signal is - vendor/interface specific, but with the general - expectation that there should be little or no delay."; + "Delays the propagation of a 'loss of carrier signal' + event that would cause the interface state to go down, + i.e., the command allows short link flaps to be + suppressed. The configured value indicates the minimum + time interval (in milliseconds) that the link signal must + be continuously down before the interface state is + brought down. If not configured, the behavior on loss of + link signal is vendor/interface specific, but with the + general expectation that there should be little or no + delay."; } leaf up { type uint32; @@ -211,9 +213,10 @@ module ietf-if-extensions { from down to up. If not configured, the behavior is vendor/interface specific, but with the general expectation that sufficient default delay should be used - to ensure that the interface is stable when enabled before - being reported as being up. Configured values that are - too low for the hardware capabilties may be rejected."; + to ensure that the interface is stable when enabled + before being reported as being up. Configured values + that are too low for the hardware capabilities may be + rejected."; } leaf carrier-transitions { type yang:counter64; @@ -221,10 +224,10 @@ module ietf-if-extensions { config false; description "Defines the number of times the underlying link state - has changed to, or from, state up. This counter should be - incremented even if the high layer interface state changes - are being suppressed by a running link flap suppression - timer."; + has changed to, or from, state up. This counter should + be incremented even if the high layer interface state + changes are being suppressed by a running link flap + suppression timer."; } leaf timer-running { type enumeration { @@ -265,8 +268,8 @@ module ietf-if-extensions { "Enable interface link flap dampening with default settings (that are vendor/device specific)."; description - "Interface dampening limits the propagation of interface link - state flaps over longer periods."; + "Interface dampening limits the propagation of interface + link state flaps over longer periods."; reference "RFC XXXX, Section 2.2 Dampening"; leaf half-life { @@ -287,7 +290,7 @@ module ietf-if-extensions { type uint32; description "Penalty value below which a stable interface is - unsuppressed (i.e. brought up) (no units). The default + unsuppressed (i.e., brought up) (no units). The default value is vendor/device specific. The penalty value for a link up->down state change is 1000 units."; reference "RFC XXXX, Section 2.2.3 Reuse Threshold"; @@ -296,11 +299,11 @@ module ietf-if-extensions { leaf suppress { type uint32; description - "Limit at which an interface is suppressed (i.e. held down) - when its penalty exceeds that limit (no units). The value - must be greater than the reuse threshold. The default - value is vendor/device specific. The penalty value for a - link up->down state change is 1000 units."; + "Limit at which an interface is suppressed (i.e., held + down) when its penalty exceeds that limit (no units). + The value must be greater than the reuse threshold. The + default value is vendor/device specific. The penalty + value for a link up->down state change is 1000 units."; reference "RFC XXXX, Section 2.2.1 Suppress Threshold"; } @@ -311,8 +314,8 @@ module ietf-if-extensions { "Maximum time (in seconds) that an interface can be suppressed before being unsuppressed if no further link up->down state change penalties have been applied. This - value effectively acts as a ceiling that the penalty value - cannot exceed. The default value is vendor/device + value effectively acts as a ceiling that the penalty + value cannot exceed. The default value is vendor/device specific."; reference "RFC XXXX, Section 2.2.4 Maximum Suppress Time"; } @@ -323,7 +326,7 @@ module ietf-if-extensions { description "The current penalty value for this interface. When the penalty value exceeds the 'suppress' leaf then the - interface is suppressed (i.e. held down)."; + interface is suppressed (i.e., held down)."; reference "RFC XXXX, Section 2.2 Dampening"; } @@ -331,8 +334,8 @@ module ietf-if-extensions { type boolean; config false; description - "Represents whether the interface is suppressed (i.e. held - down) because the 'penalty' leaf value exceeds the + "Represents whether the interface is suppressed (i.e., + held down) because the 'penalty' leaf value exceeds the 'suppress' leaf."; reference "RFC XXXX, Section 2.2 Dampening"; } @@ -398,7 +401,7 @@ module ietf-if-extensions { derived-from-or-self(../if:type, 'ianaift:atm') or derived-from-or-self(../if:type, 'ianaift:otnOtu')" { description - "All interface types that support loopback configuration."; + "All interface types supporting loopback configuration."; } if-feature "loopback"; type identityref { @@ -423,9 +426,9 @@ module ietf-if-extensions { If configured, the max-frame-size also limits the maximum frame size of any child sub-interfaces. The MTU available - to higher layer protocols is restricted to the maximum frame - payload size, and MAY be further restricted by explicit - layer 3 or protocol specific MTU configuration."; + to higher layer protocols is restricted to the maximum + frame payload size, and MAY be further restricted by + explicit layer 3 or protocol specific MTU configuration."; reference "RFC XXXX, Section 2.5 Maximum Frame Size"; } @@ -463,8 +466,8 @@ module ietf-if-extensions { */ augment "/if:interfaces/if:interface" { when "derived-from-or-self(if:type, 'ianaift:l2vlan') or - derived-from-or-self(if:type, 'ianaift:atmSubInterface') or - derived-from-or-self(if:type, 'ianaift:frameRelay')" { + derived-from-or-self(if:type, 'ianaift:atmSubInterface') + or derived-from-or-self(if:type, 'ianaift:frameRelay')" { description "Any ianaift:types that explicitly represent sub-interfaces."; @@ -495,16 +498,16 @@ module ietf-if-extensions { counter"; leaf in-discard-overflows { type yang:counter64; - units frames; + units packets; description - "A count of the number of frames discarded because of + "A count of the number of packets discarded because of overflows, e.g., because there were insufficient resources to buffer or process the frame. - This counter does not include frames that were discarded + This counter does not include packets that were discarded due to a QOS policy. - For consistency, frames counted against this counter are + For consistency, packets counted against this counter are also counted against the IETF interfaces statistics. In particular, they are included in in-octets and in-discards, but are not included in in-unicast-pkts, in-multicast-pkts @@ -515,8 +518,7 @@ module ietf-if-extensions { re-initialization of the management system, and at other times as indicated by the value of the 'discontinuity-time' leaf defined in the ietf-interfaces YANG module - (RFC 8343). - "; + (RFC 8343)."; } } @@ -530,8 +532,8 @@ module ietf-if-extensions { 'ianaift:ieee8023adLag') or derived-from-or-self(../if:type, 'ianaift:ifPwType')" { description - "Applies to interfaces that can demultiplex ingress frames to - sub-interfaces."; + "Applies to interfaces that can demultiplex ingress packets + to sub-interfaces."; } if-feature "sub-interfaces"; @@ -540,16 +542,16 @@ module ietf-if-extensions { demux discard counter."; leaf in-discard-unknown-encaps { type yang:counter64; - units frames; + units packets; description - "A count of the number of frames that were well formed, but - otherwise discarded because their encapsulation does not - classify the frame to the interface or any child - sub-interface. E.g., a frame might be discarded because the + "A count of the number of packets that were well-formed, + but otherwise discarded because their encapsulation does + not classify the packet to the interface or any child + sub-interface. E.g., a packet might be discarded because it has an unknown VLAN Id, or does not have a VLAN Id when one is expected. - For consistency, frames counted against this counter are + For consistency, packets counted against this counter are also counted against the IETF interfaces statistics. In particular, they are included in in-octets and in-discards, but are not included in in-unicast-pkts, in-multicast-pkts diff --git a/experimental/ietf-extracted-YANG-modules/ietf-if-flexible-encapsulation@2025-04-09.yang b/experimental/ietf-extracted-YANG-modules/ietf-if-flexible-encapsulation@2025-09-03.yang similarity index 98% rename from experimental/ietf-extracted-YANG-modules/ietf-if-flexible-encapsulation@2025-04-09.yang rename to experimental/ietf-extracted-YANG-modules/ietf-if-flexible-encapsulation@2025-09-03.yang index 1b4591834..657fb6dab 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-if-flexible-encapsulation@2025-04-09.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-if-flexible-encapsulation@2025-09-03.yang @@ -30,7 +30,7 @@ module ietf-if-flexible-encapsulation { organization "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; contact - "WG Web: + "WG Web: WG List: Editors: @@ -61,9 +61,9 @@ module ietf-if-flexible-encapsulation { described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here."; - revision 2025-04-09 { + revision 2025-09-03 { description - "Interface flexible encapsulations YANG model"; + "Initial version of the module"; reference "RFC BBBB: Sub-interface VLAN YANG Data Models"; } @@ -71,7 +71,7 @@ module ietf-if-flexible-encapsulation { feature flexible-rewrites { description "This feature indicates that the network element supports - specifying flexible rewrite operations."; + specifying flexible rewrite operations."; } feature asymmetric-rewrites { @@ -314,7 +314,7 @@ module ietf-if-flexible-encapsulation { sub-interface with the most specific match. E.g., matching two VLAN tags in the frame is more specific than matching the outermost VLAN tag, which is more - specific than the catch all 'default' match."; + specific than the catch-all 'default' match."; uses flexible-match; } container rewrite { diff --git a/experimental/ietf-extracted-YANG-modules/ietf-if-vlan-encapsulation@2025-04-09.yang b/experimental/ietf-extracted-YANG-modules/ietf-if-vlan-encapsulation@2025-09-03.yang similarity index 97% rename from experimental/ietf-extracted-YANG-modules/ietf-if-vlan-encapsulation@2025-04-09.yang rename to experimental/ietf-extracted-YANG-modules/ietf-if-vlan-encapsulation@2025-09-03.yang index 47fc83454..2643e918f 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-if-vlan-encapsulation@2025-04-09.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-if-vlan-encapsulation@2025-09-03.yang @@ -29,7 +29,7 @@ module ietf-if-vlan-encapsulation { organization "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; contact - "WG Web: + "WG Web: WG List: Editors: @@ -60,9 +60,9 @@ module ietf-if-vlan-encapsulation { described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here."; - revision 2025-04-09 { + revision 2025-09-03 { description - "VLAN encapsulations YANG model"; + "Initial version of the module"; reference "RFC BBBB: Sub-interface VLAN YANG Data Models"; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-ioam-integrity@2024-08-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-ioam-integrity@2025-08-25.yang similarity index 99% rename from experimental/ietf-extracted-YANG-modules/ietf-ioam-integrity@2024-08-31.yang rename to experimental/ietf-extracted-YANG-modules/ietf-ioam-integrity@2025-08-25.yang index 1ffc64ab0..e5fb560f5 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-ioam-integrity@2024-08-31.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-ioam-integrity@2025-08-25.yang @@ -45,7 +45,7 @@ module ietf-ioam-integrity { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-08-31 { + revision 2025-08-25 { description "Initial revision."; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-ipv6-nd@2025-08-27.yang b/experimental/ietf-extracted-YANG-modules/ietf-ipv6-nd@2025-08-27.yang new file mode 100644 index 000000000..c4e64d35e --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-ipv6-nd@2025-08-27.yang @@ -0,0 +1,294 @@ +module ietf-ipv6-nd { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-ipv6-nd"; + prefix v6nd; + + import ietf-inet-types { + prefix inet; + } + import ietf-yang-types { + prefix yang; + reference + "RFC 6991: Common YANG Data Types"; + } + import ietf-interfaces { + prefix if; + reference + "RFC 8343: A Yang Data Model for Interface Management"; + } + import ietf-ip { + prefix ip; + reference + "RFC 8344: A Yang Data Model for IP Management"; + } + + organization + "IETF IPv6 Maintenance Working Group (6man)"; + contact + "WG Web: + WG List: + + Author: Fan Zhang + + Author: Yongqing Zhu + + Author: Bo Wu + + Author: Jiayuan Hu + "; + description + "This YANG module defines a YANG data model to configure and manage + IPv6 Neighbor Discovery (ND) and related functions, including + IPv6 address resolution, redirect function, proxy Neighbor + Advertisement, Neighbor Unreachability Detection (NUD), Duplicate + Address Detection (DAD), and Enhanced Duplicate Address Detection. + + 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 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. + + 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."; + reference + "RFC4861: Neighbor Discovery for IP version 6 (IPv6) + RFC4862: IPv6 Stateless Address Autoconfiguration + RFC7527: Enhanced Duplicate Address Detection"; + + revision 2025-08-27 { + description + "Init revision"; + reference + "RFC XXXX: YANG Data Model for IPv6 Neighbor Discovery"; + } + + /* Data nodes */ + + container nd { + description + "Global parameters for IPv6 ND."; + leaf stale-timeout { + type uint32; + units "second"; + description + "The global timeout for Neighbor Cache entry in the STALE + state."; + reference + "RFC4861: Neighbor Discovery for IP version 6 (IPv6) + Section 5.3"; + } + } + + augment "/if:interfaces/if:interface/ip:ipv6" { + description + "Augments interface configuration and state data with + parameters of IPv6 ND."; + container nd { + description + "Parameters of IPv6 ND."; + leaf dynamic-discovery { + type boolean; + default "true"; + description + "Controls whether dynamic link-layer address resolution + for IPv6 on the interface is enabled or disabled. + true - dynamic link-layer address resolution based on + IPv6 ND is enabled, + false - dynamic link-layer address resolution based on + IPv6 ND is disabled."; + reference + "RFC4861: Neighbor Discovery for IP version 6 (IPv6) + Section 7.2"; + } + leaf nud { + type boolean; + default "true"; + description + "Controls whether Neighbor Unreachability Detection (NUD) + on the interface is enabled or disabled. + true - NUD is enabled, + false - NUD is disabled."; + reference + "RFC4861: Neighbor Discovery for IP version 6 (IPv6) + Section 7.3"; + } + leaf reachable-time { + type uint32 { + range "0..3600000"; + } + units "millisecond"; + description + "The time to confirm a neighbor's reachability for NUD."; + reference + "RFC4861: Neighbor Discovery for IP version 6 (IPv6) + - ReachableTime"; + } + leaf ns-interval { + type uint32; + units "milliseconds"; + description + "The interval of retransmitting Neighbor Solicitations to a + neighbor for address resolution, NUD, or DAD."; + reference + "RFC4861: Neighbor Discovery for IP version 6 (IPv6) + Section 7.3.3"; + } + leaf stale-timeout { + type uint32; + units "second"; + description + "The timeout for Neighbor Cache entry in the STALE state on + the interface."; + reference + "RFC4861: Neighbor Discovery for IP version 6 (IPv6) + Section 5.3"; + } + leaf redirect { + type boolean; + default "false"; + description + "Controls whether sending of ICMP Redirect messages + on the interface is enabled or disabled. + true - Sending of ICMP Redirect messages is enabled, + false - Sending of ICMP Redirect messages is disabled."; + reference + "RFC4861: Neighbor Discovery for IP version 6 (IPv6) + Section 8"; + } + container proxy-na { + description + "Parameters of proxy Neighbor Advertisements."; + leaf inter-vlan-proxy { + type boolean; + default "false"; + description + "Controls whether the router proxies for hosts in the + same subnet with different VLANs"; + } + leaf all-proxy { + type boolean; + default "false"; + description + "Controls whether the router proxies for all hosts, + that is, responds unconditionally to Neighbor + Solicitation with its own Neighbor Advertisement."; + } + reference + "RFC4861: Neighbor Discovery for IP version 6 (IPv6) + Section 7.2.8"; + } + container enhanced-dad { + description + "Parameters of Enhanced DAD algorithm."; + leaf enable { + type boolean; + default "false"; + description + "Controls whether Enhanced DAD algorithm is enabled or + disabled."; + } + leaf enhanced-dad-auto-resolve { + type boolean; + default "false"; + description + "Controls whether the automated action is taken when + detecting duplicates. A trusted router can log a system + management message, drop the received ND message, and + block the untrusted IPv6 host nodes from which the + duplicate NS(DAD) or NA message was received."; + } + reference + "RFC7527: Enhanced Duplicate Address Detection"; + } + container statistics { + config false; + description + "A collection of interface-related statistics about IPv6 + ND messages."; + leaf in-ns-pkts { + type yang:counter32; + description + "The number of received Neighbor Solicitation packets."; + } + leaf in-na-pkts { + type yang:counter32; + description + "The number of received Neighbor Advertisement packets."; + } + leaf in-rs-pkts { + type yang:counter32; + description + "The number of received Router Solicitation packets."; + } + leaf in-ra-pkts { + type yang:counter32; + description + "The number of received Router Advertisement packets."; + } + leaf in-redirect-pkts { + type yang:counter32; + description + "The number of received Redirect packets."; + } + leaf out-ns-pkts { + type yang:counter32; + description + "The number of sent Neighbor Solicitation packets."; + } + leaf out-na-pkts { + type yang:counter32; + description + "The number of sent Neighbor Advertisement packets."; + } + leaf out-rs-pkts { + type yang:counter32; + description + "The number of sent Router Solicitation packets."; + } + leaf out-ra-pkts { + type yang:counter32; + description + "The number of sent Router Advertisement packets."; + } + leaf out-redirect-pkts { + type yang:counter32; + description + "The number of sent Redirect packets."; + } + } + } + } + + augment "/if:interfaces/if:interface/ip:ipv6/ip:neighbor" { + description + "Augments IPv6 neighbor list with parameters of IPv6 address + resolution based on IPv6 ND."; + leaf age { + type uint32; + units "milliseconds"; + config false; + description + "The time that has passed since receipt of the last + reachability confirmation for the neighbor."; + reference + "RFC4861: Neighbor Discovery for IP version 6 (IPv6) + Section 5.1"; + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-isis-flex-algo@2025-07-06.yang b/experimental/ietf-extracted-YANG-modules/ietf-isis-flex-algo@2025-09-11.yang similarity index 74% rename from experimental/ietf-extracted-YANG-modules/ietf-isis-flex-algo@2025-07-06.yang rename to experimental/ietf-extracted-YANG-modules/ietf-isis-flex-algo@2025-09-11.yang index 2887f0601..5a6d5756e 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-isis-flex-algo@2025-07-06.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-isis-flex-algo@2025-09-11.yang @@ -9,27 +9,22 @@ module ietf-isis-flex-algo { "RFC 8349: A YANG Data Model for Routing Management (NMDA Version)"; } - import ietf-te-types { prefix te-types; reference "RFC8776: Common YANG Data Types for Traffic Engineering."; } - import ietf-isis { prefix isis; reference "RFC 9130: YANG Data Model for the IS-IS Protocol"; } - import ietf-te { prefix te; } - import iana-igp-algo-types { - prefix iana-algo-types; + prefix iana-algo-types; } - import iana-igp-metric-types { prefix iana-metric-type; } @@ -38,7 +33,7 @@ module ietf-isis-flex-algo { "IETF LSR - Link State Routing Working Group"; contact "WG Web: - WG List: + WG List: Author: Yingzhen Qu @@ -49,7 +44,6 @@ module ietf-isis-flex-algo { Author: Madhavi Joshi "; - description "The YANG module defines the configuration and operational state for ISIS Flexible Algorithm as defined in RFC 9350. @@ -76,14 +70,12 @@ module ietf-isis-flex-algo { described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here."; - reference - "RFC XXXX: YANG Data Model for ISIS Flexible Algorithm."; - - revision 2025-07-06 { + revision 2025-09-11 { description "Initial Version"; reference - "RFC XXXX: YANG Data Model for ISIS Flexible Algorithm."; + "RFC XXXX: YANG Data Model for IS-IS Application-Specific + Link Attributes and Flexible Algorithm"; } /* Identities */ @@ -102,6 +94,7 @@ module ietf-isis-flex-algo { } /* Groupings */ + grouping fa-ex-ag-sub-tlv { container fa-ex-ag-sub-tlv { leaf-list extended-admin-groups { @@ -186,8 +179,8 @@ module ietf-isis-flex-algo { type identityref { base iana-metric-type:metric-type; } - description - "Type of metric to be used during the calculation."; + description + "Type of metric to be used during the calculation."; } leaf calc-type { type identityref { @@ -195,22 +188,20 @@ module ietf-isis-flex-algo { } description "IGP algorithm types, value from 0 to 127 as - defined under 'Interior Gateway Protocol (IGP) - Parameter' by IANA."; + defined under 'Interior Gateway Protocol (IGP) + Parameter' by IANA."; } leaf priority { type uint8; - description - "Priority of the advertisement."; + description + "Priority of the advertisement."; } - uses fa-ex-ag-sub-tlv; uses fa-in-any-ag-sub-tlv; uses fa-in-all-ag-sub-tlv; uses fad-flags-sub-tlv; uses fa-ex-srlg-sub-tlv; uses isis:unknown-tlvs; - description "List of flex-algo definition TLVs."; } @@ -247,38 +238,34 @@ module ietf-isis-flex-algo { /* Configurations */ - augment "/rt:routing/" + - "rt:control-plane-protocols/rt:control-plane-protocol"+ - "/isis:isis" { - when "/rt:routing/rt:control-plane-protocols/"+ - "rt:control-plane-protocol/rt:type = 'isis:isis'" { + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol" + + "/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 configuration with flexible algorithm."; - container isis-flex-algo { list flex-algo { key "algo-number"; - leaf algo-number { type uint8 { range "128..255"; } description "An identifier in the range 128-255 that's associated - with the Flexible Algorithm Definition."; + with the Flexible Algorithm Definition."; } - leaf advertise-definition { type boolean; - default true; + default "true"; description "Enable to advertise the flex-algo definition."; } - container admin-groups { if-feature "te-types:extended-admin-groups"; if-feature "te-types:named-extended-admin-groups"; @@ -289,7 +276,7 @@ module ietf-isis-flex-algo { } description "Exclude rule used during the flex-algo - path computation."; + path computation."; } leaf-list include-any-admin-groups { type leafref { @@ -298,7 +285,7 @@ module ietf-isis-flex-algo { } description "Include-any rule used during the flex-algo - path computation."; + path computation."; } leaf-list include-all-admin-groups { type leafref { @@ -307,12 +294,11 @@ module ietf-isis-flex-algo { } description "Include-all rule used during the flex-algo - path computation."; + path computation."; } description "Specify links for the flex-algo path computation."; } - leaf-list exclude-srlgs { if-feature "te-types:named-srlg-groups"; type leafref { @@ -321,9 +307,8 @@ module ietf-isis-flex-algo { } description "Shared Risk Link Groups (SRLGs) to be excluded during - the flex-algo path computation."; + the flex-algo path computation."; } - leaf metric-type { type identityref { base iana-metric-type:metric-type; @@ -331,31 +316,26 @@ module ietf-isis-flex-algo { description "Type of metric to be used during the calculation."; } - leaf calc-type { type identityref { base iana-algo-types:algo-type; } - default iana-algo-types:algo-spf; + default "iana-algo-types:algo-spf"; description - "Calcuation-type. Value from 0-127 inclusive from the IANA - 'IGP Algorithm Types' registry defined under the 'Interior - Gateway Protocol (IGP) Parameters' registry."; + "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 { - presence - "Use flex-algo specific prefix metric."; + presence "Use flex-algo specific prefix metric."; description "Use flex-algo prefix metric."; } - leaf priority { type uint8; description "Priority of the advertisement."; } - description "List of flex-algo configurations."; } @@ -366,81 +346,80 @@ module ietf-isis-flex-algo { /* Database */ - 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"; + 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"; } description "This augments ISIS protocol LSDB router capability."; - 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'" { + 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'" { 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'" { + 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'" { 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'" { + 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'" { 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'" { + 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'" { 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 */ diff --git a/experimental/ietf-extracted-YANG-modules/ietf-layer0-types@2025-06-06.yang b/experimental/ietf-extracted-YANG-modules/ietf-layer0-types@2025-06-06.yang deleted file mode 100644 index 5ce78b383..000000000 --- a/experimental/ietf-extracted-YANG-modules/ietf-layer0-types@2025-06-06.yang +++ /dev/null @@ -1,2269 +0,0 @@ -module ietf-layer0-types { - yang-version 1.1; - namespace "urn:ietf:params:xml:ns:yang:ietf-layer0-types"; - prefix l0-types; - - import ietf-te-types { - prefix te-types; - reference - "RFC YYYY: Common YANG Data Types for Traffic Engineering"; - } - // RFC Editor: replace YYYY with actual RFC number assigned to - // [I-D.ietf-teas-rfc8776-update] and remove this note - - organization - "IETF CCAMP Working Group"; - contact - "WG Web: - WG List: - - Editor: Dieter Beller - - - Editor: Sergio Belotti - - - Editor: Italo Busi - - - Editor: Haomian Zheng - "; - description - "This module defines Optical Layer 0 types. This module - provides groupings that can be applicable to Layer 0 - Fixed Optical Networks (e.g., CWDM (Coarse Wavelength - Division Multiplexing) and DWDM (Dense Wavelength Division - Multiplexing)) and flexi-grid optical networks. - - 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.: 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-06 { - description - "To be updated"; - reference - "RFC XXXX: A YANG Data Model for Layer 0 Types"; - } - - revision 2021-08-13 { - description - "Initial version"; - reference - "RFC 9093: A YANG Data Model for Layer 0 Types"; - } - -/* - * Identities - */ - - identity l0-grid-type { - description - "Layer 0 grid type"; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable - (LSC), Label Switching Routers, - - ITU-T G.694.2 (12/2003): Spectral grids for WDM applications: - CWDM wavelength grid"; - } - - identity wson-grid-cwdm { - base l0-grid-type; - description - "CWDM grid"; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) - Label Switching Routers, - - ITU-T G.694.2 (12/2003): Spectral grids for WDM applications: - CWDM wavelength grid"; - } - - identity wson-grid-dwdm { - base l0-grid-type; - description - "DWDM grid"; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable - (LSC), Label Switching Routers, - - ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: - DWDM frequency grid"; - } - - identity flexi-grid-dwdm { - base l0-grid-type; - description - "Flexi-grid"; - reference - "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda - Switch Capable (LSC) Label Switching Routers, - - ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: - DWDM frequency grid"; - } - - identity cwdm-ch-spc-type { - description - "CWDM channel-spacing type"; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) - Label Switching Routers, - - ITU-T G.694.2 (12/2003): Spectral grids for WDM applications: - CWDM wavelength grid"; - } - - identity cwdm-20nm { - base cwdm-ch-spc-type; - description - "20nm channel spacing"; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) - Label Switching Routers, - - ITU-T G.694.2 (12/2003): Spectral grids for WDM applications: - CWDM wavelength grid"; - } - - identity dwdm-ch-spc-type { - description - "DWDM channel-spacing type"; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) - Label Switching Routers, - - ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: - DWDM frequency grid"; - } - - identity dwdm-100ghz { - base dwdm-ch-spc-type; - description - "100 GHz channel spacing"; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) - Label Switching Routers, - - ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: - DWDM frequency grid"; - } - - identity dwdm-50ghz { - base dwdm-ch-spc-type; - description - "50 GHz channel spacing"; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) - Label Switching Routers, - - ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: - DWDM frequency grid"; - } - - identity dwdm-25ghz { - base dwdm-ch-spc-type; - description - "25 GHz channel spacing"; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) - Label Switching Routers, - - ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: - DWDM frequency grid"; - } - - identity dwdm-12p5ghz { - base dwdm-ch-spc-type; - description - "12.5 GHz channel spacing"; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) - Label Switching Routers, - - ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: - DWDM frequency grid"; - } - - identity flexi-ch-spc-type { - status deprecated; - description - "Flexi-grid channel-spacing type"; - } - - identity flexi-ch-spc-6p25ghz { - base flexi-ch-spc-type; - status deprecated; - description - "6.25 GHz channel spacing"; - } - - identity flexi-ncfg-type { - description - "Flexi-grid Nominal Central Frequency Granularity (NCFG) - type"; - reference - "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda - Switch Capable (LSC) Label Switching Routers, - - ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: - DWDM frequency grid"; - } - - identity flexi-ncfg-6p25ghz { - base flexi-ncfg-type; - description - "6.25 GHz Nominal Central Frequency Granularity (NCFG)"; - reference - "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda - Switch Capable (LSC) Label Switching Routers, - - ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: - DWDM frequency grid"; - } - - identity flexi-slot-width-granularity { - description - "Flexi-grid slot width granularity"; - reference - "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda - Switch Capable (LSC) Label Switching Routers, - - ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: - DWDM frequency grid"; - } - - identity flexi-swg-12p5ghz { - base flexi-slot-width-granularity; - description - "12.5 GHz slot width granularity"; - reference - "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda - Switch Capable (LSC) Label Switching Routers, - - ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: - DWDM frequency grid"; - } - - identity modulation { - description "base identity for modulation type"; - } - - identity DPSK { - base modulation; - description - "DPSK (Differential Phase Shift Keying) modulation"; - } - - identity QPSK { - base modulation; - description - "QPSK (Quadrature Phase Shift Keying) modulation"; - } - - identity DP-QPSK { - base modulation; - description - "DP-QPSK (Dual Polarization Quadrature - Phase Shift Keying) modulation"; - } - - identity QAM8 { - base modulation; - description - "8QAM (8 symbols Quadrature Amplitude Modulation)"; - } - - identity DP-QAM8 { - base modulation; - description - "DP-QAM8 (8 symbols Dual Polarization Quadrature Amplitude - Modulation)"; - } - - identity QAM16 { - base modulation; - description - "QAM16 (16 symbols Quadrature Amplitude Modulation)"; - } - - identity DP-QAM16 { - base modulation; - description - "DP-QAM16 (16 symbols Dual Polarization Quadrature Amplitude - Modulation)"; - } - - identity QAM32 { - base modulation; - description - "QAM32 (32 symbols Quadrature Amplitude Modulation)"; - } - - identity DP-QAM32 { - base modulation; - description - "DP-QAM32 (32 symbols Dual Polarization Quadrature Amplitude - Modulation)"; - } - - identity QAM64 { - base modulation; - description - "QAM64 (64 symbols Quadrature Amplitude Modulation)"; - } - - identity DP-QAM64 { - base modulation; - description - "DP-QAM64 (64 symbols Dual Polarization Quadrature Amplitude - Modulation)"; - } - - identity fec-type { - description - "Base identity from which specific FEC - (Forward Error Correction) type identities are derived."; - } - - identity g-fec { - base fec-type; - description - "Generic Forward Error Correction (G-FEC)."; - reference - "ITU-T G.975 v2.0 (10/2000): Forward error correction for - submarine systems."; - } - - identity super-fec { - base fec-type; - description - "Super Forward Error Correction (S-FEC)."; - reference - "ITU-T G.975.1 v1.2 (07/2013): Forward error correction for - high bit-rate DWDM submarine systems."; - } - - identity no-fec { - base fec-type; - description - "No FEC"; - } - - identity sc-fec { - base fec-type; - description - "Staircase Forward Error Correction (SC-FEC)."; - reference - "Annex A of ITU-T G.709.2 v1.1 (09/2020):OTU4 long-reach - interface."; - } - - identity o-fec { - base fec-type; - description - "Open Forward Error Correction (O-FEC) which reuses the - Bose, Chaudhuri and Hocquenghem (BCH) FEC."; - reference - "Clause 16.4.4 of ITU-T G.709.3 v2.1 (11/2022): Flexible OTN - long-reach interfaces; - - Annex E of ITU-T G.709.3 v2.1 (11/2022): Flexible OTN - long-reach interfaces."; - } - - identity c-fec { - base fec-type; - description - "Concatenated FEC (C-FEC) that combines an outer Staircase - Forward Error Correction (SC-FEC) code and an inner - double-extended SD-FEC (128,119) Hamming code. - - More details are provided in clause 15/G.709.3 where it is - called DSH instead of concatenated FEC."; - reference - "Annex A of ITU-T G.709.2 v1.1 (09/2020):OTU4 long-reach - interface; - - Annex D of ITU-T G.709.3 v2.1 (11/2022): Flexible OTN - long-reach interfaces; - - Clause 15 of ITU-T G.709.3 v2.1 (11/2022): Flexible OTN - long-reach interfaces."; - } - - identity line-coding { - description - "Base identity to defined the bit rate/line coding of optical - tributary signals."; - reference - "Section 7.1.2 of ITU-T G.698.2 v3.0 (11/2018)."; - } - - identity line-coding-NRZ-2p5G { - base line-coding; - description - "The non return to zero (NRZ) bit rate/line coding used by - the optical tributary signal class NRZ 2.5G"; - reference - "Section 3.2.6 of ITU-T G.959.1 v8.0 (07/2018)."; - } - - identity line-coding-NRZ-OTU1 { - base line-coding; - description - "The non return to zero (NRZ) bit rate/line coding used by - the Optical channel Transport Unit order 1 (OTU1) optical - tributary signals"; - reference - "Section 7.2.1.2 of ITU-T G.959.1 v8.0 (07/2018)."; - } - - identity line-coding-NRZ-10G { - description - "The non return to zero (NRZ) bit rate/line coding used by - the optical tributary signal class NRZ 10G"; - reference - "Section 3.2.7 of ITU-T G.959.1 v8.0 (07/2018)."; - } - - identity line-coding-NRZ-OTU2 { - base line-coding; - description - "The non return to zero (NRZ) bit rate/line coding used by - the Optical channel Transport Unit order 2 (OTU2) optical - tributary signals"; - reference - "Section 7.2.1.2 of ITU-T G.959.1 v8.0 (07/2018)."; - } - - identity line-coding-OTL4.4-SC { - base line-coding; - description - "The bit rate/line coding used by optical tributary - signals carrying a 100G Optical Transport Unit order 4 - (OTU4) with Staircase Forward Error Correction (SC FEC) - from a group of four Optical Transport Lanes (OTL)."; - reference - "Section 3.2.1 of ITU-T G.698.2 v3.0 (11/2018)."; - } - - identity line-coding-FOIC1.4-SC { - base line-coding; - description - "The bit rate/line coding used by optical tributary signals - carrying a FlexO Interface of order C1 with 4 lanes - (FOIC1.1) with Staircase Forward Error Correction - (SC FEC)."; - reference - "Section 3.2.1 of ITU-T G.698.2 v3.0 (11/2018)."; - } - - identity wavelength-assignment { - description - "Wavelength selection base"; - reference - "RFC 7689: Signaling Extensions for Wavelength Switched - Optical Networks"; - } - - identity first-fit-wavelength-assignment { - base wavelength-assignment; - description - "All the available wavelengths are numbered, - and this WA (Wavelength Assignment) method chooses - the available wavelength with the lowest index"; - reference - "RFC 7689: Signaling Extensions for Wavelength Switched - Optical Networks"; - } - - identity random-wavelength-assignment { - base wavelength-assignment; - description - "This WA method chooses an available - wavelength randomly"; - reference - "RFC 7689: Signaling Extensions for Wavelength Switched - Optical Networks"; - } - - identity least-loaded-wavelength-assignment { - base wavelength-assignment; - description - "This WA method selects the wavelength that - has the largest residual capacity on the most loaded - link along the route (in multi-fiber networks)"; - reference - "RFC 7689: Signaling Extensions for Wavelength Switched - Optical Networks"; - } - - identity lower-first-wavelength-assignment { - base wavelength-assignment; - description - "Allocate wavelengths in ascending order, beginning from the - lowest frequency and progressing toward the highest frequency - within the permissible frequency range."; - } - - identity upper-first-wavelength-assignment { - base wavelength-assignment; - description - "Allocate wavelengths in decending order, beginning from the - highest frequency and progressing toward the lowest frequency - within the permissible frequency range."; - } - - identity type-power-mode { - description - "power equalization mode used within the - OMS and its elements"; - } - - identity power-spectral-density { - base type-power-mode; - description - "all elements must use power spectral density (W/Hz)"; - } - - identity carrier-power { - base type-power-mode; - description - "all elements must use power (dBm)"; - } - - identity switching-wson-lsc { - base te-types:switching-lsc; - description - "Wavelength Switched Optical Network Lambda-Switch Capable - (WSON-LSC)."; - reference - "Section 3 of RFC 7688: GMPLS OSPF Enhancement for Signal and - Network Element Compatibility for Wavelength Switched Optical - Networks"; - } - - identity switching-flexi-grid-lsc { - base te-types:switching-lsc; - description - "Flexi-grid Lambda-Switch Capable (Flexi-Grid-LSC)."; - reference - "Section 4.1 of RFC 8363: GMPLS OSPF-TE Extensions in Support - of Flexi-Grid Dense Wavelength Division Multiplexing (DWDM) - Networks"; - } - -/* - * Typedefs - */ - - typedef dwdm-n { - type int16; - description - "The given value 'N' is used to determine the nominal central - frequency. - - The nominal central frequency, 'f', is defined by: - f = 193100.000 GHz + N x channel spacing (measured in GHz), - - where 193100.000 GHz (193.100000 THz) is the ITU-T 'anchor - frequency' for transmission over the DWDM grid, and where - 'channel spacing' is defined by the dwdm-ch-spc-type."; - reference - "RFC6205: Generalized Labels for Lambda-Switch-Capable (LSC) - Label Switching Routers, - - ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: - DWDM frequency grid"; - } - - typedef cwdm-n { - type int16; - description - "The given value 'N' is used to determine the nominal central - wavelength. - - The nominal central wavelength is defined by: - Wavelength = 1471 nm + N x channel spacing (measured in nm) - - where 1471 nm is the conventional 'anchor wavelength' for - transmission over the CWDM grid, and where 'channel spacing' - is defined by the cwdm-ch-spc-type."; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) - Label Switching Routers, - - ITU-T G.694.2 (12/2003): Spectral grids for WDM applications: - CWDM wavelength grid"; - } - - typedef flexi-n { - type int16; - description - "The given value 'N' is used to determine the nominal central - frequency. - - The nominal central frequency, 'f', is defined by: - f = 193100.000 GHz + N x NCFG (measured in GHz), - - where 193100.000 GHz (193.100000 THz) is the ITU-T 'anchor - frequency' for transmission over the DWDM grid, and where - NCFG is defined by the flexi-ncfg-type, or by the deprecated - flexi-ch-spc-type."; - reference - "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda - Switch Capable (LSC) Label Switching Routers, - - ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: - DWDM frequency grid"; - } - - typedef flexi-m { - type uint16; - description - "The given value 'M' is used to determine the slot width. - - A slot width is defined by: - slot width = M x SWG (measured in GHz), - - where SWG is defined by the flexi-slot-width-granularity."; - reference - "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda - Switch Capable (LSC) Label Switching Routers, - - ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: - DWDM frequency grid"; - } - - typedef standard-mode { - type string; - description - "Identifies an ITU-T G.698.2 standard application code. - - It MUST be a string with a format that follows the - nomenclature defined in section 5.3 of ITU-T G.698.2."; - reference - "ITU-T G.698.2 (11/2018)"; - } - - typedef organization-identifier { - type string; - description - "vendor/organization identifier that uses a private mode - out of already defined in G.698.2 ITU-T application-code"; - reference - "Section 2.5.2 of RFC YYYY: A YANG Data Model for Optical - Impairment-aware Topology."; - } -// RFC Ed.: replace YYYY with actual RFC number and remove -// this note after draft-ietf-ccamp-optical-impairment-topology-yang -// is published as an RFC - - typedef operational-mode { - type string; - description - "Identifies an organization (e.g., vendor) specific mode. - - The format of the string has to be defined by the - organization which is responsible for defining the - corresponding optical interface specification."; - reference - "Section 2.5.2 of RFC YYYY: A YANG Data Model for Optical - Impairment-aware Topology."; - } -// RFC Ed.: replace YYYY with actual RFC number and remove -// this note after draft-ietf-ccamp-optical-impairment-topology-yang -// is published as an RFC - - typedef frequency-thz { - type decimal64 { - fraction-digits 9; - } - units "THz"; - description - "The DWDM frequency in THz, e.g., 193.112500000"; - } - - typedef frequency-ghz { - type decimal64 { - fraction-digits 6; - } - units "GHz"; - description - "The DWDM frequency in GHz, e.g., 193112.500000"; - } - - typedef snr { - type decimal-2; - units "dB@0.1nm"; - description - "(Optical) Signal to Noise Ratio measured over 0.1 nm - resolution bandwidth"; - reference - "ITU-T G.977.1 (02/2021): Transverse compatible dense - wavelength division multiplexing applications for repeatered - optical fibre submarine cable systems"; - } - - typedef snr-or-null { - type union { - type snr; - type empty; - } - description - "(Optical) Signal to Noise Ratio measured over 0.1 nm - resolution bandwidth, when known, or an empty value when - unknown."; - } - - typedef fiber-type { - type enumeration { - enum G.652 { - description - "G.652 Standard Singlemode Fiber"; - } - enum G.654 { - description - "G.654 Cutoff Shifted Fiber"; - } - enum G.653 { - description "G.653 Dispersion Shifted Fiber"; - } - enum G.655 { - description "G.655 Non-Zero Dispersion Shifted Fiber"; - } - enum G.656 { - description - "G.656 Non-Zero Dispersion for Wideband Optical Transport"; - } - enum G.657 { - description - "G.657 Bend-Insensitive Fiber"; - } - } - description - "ITU-T based fiber-types"; - } - - typedef decimal-2 { - type decimal64 { - fraction-digits 2; - } - description - "A decimal64 value with two digits."; - } - - typedef decimal-2-or-null { - type union { - type decimal-2; - type empty; - } - description - "A decimal64 value with two digits, when the value is known or - an empty value when the value is not known."; - } - - typedef power-gain { - type decimal-2 { - range "0..max"; - } - units "dB"; - description - "The gain in dB."; - } - - typedef power-gain-or-null { - type union { - type power-gain; - type empty; - } - description - "The gain in dB, when it is known or an empty - value when the power gain/loss is not known."; - } - - typedef power-loss { - type decimal-2 { - range "0..max"; - } - units "dB"; - description - "The power attenuation in dB."; - } - - typedef power-loss-or-null { - type union { - type power-loss; - type empty; - } - description - "The power attenuation in dB, when it is known or an empty - value when the loss is not known."; - } - - typedef power-ratio { - type decimal-2; - units "dB"; - description - "The power difference in dB."; - } - - typedef power-ratio-or-null { - type union { - type power-ratio; - type empty; - } - description - "The power difference in dB, when it is known or an empty - value when the difference is not known."; - } - - typedef power-dbm { - type decimal-2; - units "dBm"; - description - "The power in dBm."; - } - - typedef power-dbm-or-null { - type union { - type power-dbm; - type empty; - } - description - "The power in dBm, when it is known or an empty value when the - power is not known."; - } - - typedef decimal-5 { - type decimal64 { - fraction-digits 5; - } - description - "A decimal64 value with five digits."; - } - - typedef decimal-5-or-null { - type union { - type decimal-5; - type empty; - } - description - "A decimal64 value with five digits, when the value is known - or an empty value when the value is not known."; - } - - typedef psd { - type decimal64 { - fraction-digits 16; - } - units "W/Hz"; - description - "The power spectral density (PSD). - - Typical value : 3.9 E-14, resolution 0.1nW/MHz."; - reference - "ITU-T G.9700 (07/2019): Fast access to subscriber terminals - (G.fast) - Power spectral density specification"; - } - - typedef psd-or-null { - type union { - type psd; - type empty; - } - description - "The power spectral density (PSD), when it is known or an - empty value when the PSD is not known."; - } - - typedef decimal-18 { - type decimal64 { - fraction-digits 18; - } - description - "A decimal64 value with eighteen digits."; - } - - typedef decimal-18-or-null { - type union { - type decimal-18; - type empty; - } - description - "A decimal64 value with eighteen digits, when the value is - known or an empty value when the value is not known."; - } - -/* - * Groupings - */ - - grouping wdm-label-start-end { - description - "The WDM label-start or label-end used to specify DWDM and - CWDM label range."; - - choice grid-type { - description - "Label for fixed & flexi-DWDM or CWDM grid"; - case fixed-dwdm { - leaf dwdm-n { - when "derived-from-or-self(../../../grid-type, - \"wson-grid-dwdm\")" { - description - "Valid only when grid type is DWDM."; - } - type dwdm-n; - description - "The given value 'N' is used to determine the - nominal central frequency."; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable - (LSC) Label Switching Routers"; - } - } - case cwdm { - leaf cwdm-n { - when "derived-from-or-self(../../../grid-type, - \"wson-grid-cwdm\")" { - description - "Valid only when grid type is CWDM."; - } - type cwdm-n; - description - "The given value 'N' is used to determine the nominal - central wavelength."; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable - (LSC) Label Switching Routers"; - } - } - case flexi-grid { - uses flexi-grid-label-start-end; - } - } - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) - Label Switching Routers"; - } - - grouping wdm-label-step { - description - "Label step information for fixed & flexi-DWDM or CWDM grid"; - choice l0-grid-type { - description - "Grid type: DWDM, CWDM, etc."; - case fixed-dwdm { - leaf wson-dwdm-channel-spacing { - when "derived-from-or-self(../../grid-type, - \"wson-grid-dwdm\")" { - description - "Valid only when grid type is DWDM."; - } - type identityref { - base dwdm-ch-spc-type; - } - description - "Label-step is the channel spacing (GHz), e.g., 100.000, - 50.000, 25.000, or 12.500 GHz for DWDM."; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable - (LSC) Label Switching Routers"; - } - } - case cwdm { - leaf wson-cwdm-channel-spacing { - when "derived-from-or-self(../../grid-type, - \"wson-grid-cwdm\")" { - description - "Valid only when grid type is CWDM."; - } - type identityref { - base cwdm-ch-spc-type; - } - description - "Label-step is the channel spacing (nm), i.e., 20 nm - for CWDM, which is the only value defined for CWDM."; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable - (LSC) Label Switching Routers"; - } - } - case flexi-grid { - uses flexi-grid-label-step; - } - } - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) - Label Switching Routers, - ITU-T G.694.2 (12/2003): Spectral grids for WDM applications: - CWDM wavelength grid, - RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-Grid - Dense Wavelength Division Multiplexing (DWDM) Networks"; - } - - grouping wdm-label-hop { - description - "Generic label-hop information for fixed & flexi-DWDM or - CWDM grid"; - choice grid-type { - description - "Label for DWDM or CWDM grid"; - case fixed-dwdm { - choice fixed-single-or-super-channel { - description - "single or super channel"; - case single { - leaf dwdm-n { - type dwdm-n; - description - "The given value 'N' is used to determine the - nominal central frequency."; - } - } - case multi { - leaf-list subcarrier-dwdm-n { - type dwdm-n; - min-elements 2; - description - "The given values 'N' are used to determine the - nominal central frequency for each subcarrier - channel."; - reference - "ITU-T G.694.1 (10/2020): Spectral grids for WDM - applications: DWDM frequency grid"; - } - } - } - } - case cwdm { - leaf cwdm-n { - type cwdm-n; - description - "The given value 'N' is used to determine the nominal - central wavelength."; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable - (LSC) Label Switching Routers"; - } - } - case flexi-grid { - uses flexi-grid-label-hop; - } - } - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) - Label Switching Routers"; - } - - grouping wdm-label-range-info { - description - "WDM label range related information"; - uses l0-label-range-info; - container flexi-grid { - when "derived-from-or-self(../grid-type, - \"flexi-grid-dwdm\")" { - description - "Applicable only when the grid type is flexi-grid-dwdm."; - } - description - "flexi-grid definition"; - leaf slot-width-granularity { - type identityref { - base flexi-slot-width-granularity; - } - default "flexi-swg-12p5ghz"; - description - "Minimum space between slot widths. Default is 12.500 - GHz."; - reference - "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi- - Grid Dense Wavelength Division Multiplexing (DWDM) - Networks"; - } - leaf min-slot-width-factor { - type uint16 { - range "1..max"; - } - default "1"; - description - "A multiplier of the slot width granularity, indicating - the minimum slot width supported by an optical port. - - Minimum slot width is calculated by: - Minimum slot width (GHz) = - min-slot-width-factor * slot-width-granularity."; - reference - "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi- - Grid Dense Wavelength Division Multiplexing (DWDM) - Networks"; - } - leaf max-slot-width-factor { - type uint16 { - range "1..max"; - } - must '. >= ../min-slot-width-factor' { - error-message - "Maximum slot width must be greater than or equal to - minimum slot width."; - } - description - "A multiplier of the slot width granularity, indicating - the maximum slot width supported by an optical port. - - Maximum slot width is calculated by: - Maximum slot width (GHz) = - max-slot-width-factor * slot-width-granularity - - If specified, maximum slot width must be greater than or - equal to minimum slot width. If not specified, maximum - slot width is equal to minimum slot width."; - reference - "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi- - Grid Dense Wavelength Division Multiplexing (DWDM) - Networks"; - } - } - } - - grouping wson-label-start-end { - description - "The WSON label-start or label-end used to specify WSON label - range."; - choice grid-type { - description - "Label for DWDM or CWDM grid"; - case dwdm { - leaf dwdm-n { - when "derived-from-or-self(../../../grid-type, - \"wson-grid-dwdm\")" { - description - "Valid only when grid type is DWDM."; - } - type dwdm-n; - description - "The central frequency of DWDM."; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable - (LSC) Label Switching Routers"; - } - } - case cwdm { - leaf cwdm-n { - when "derived-from-or-self(../../../grid-type, - \"wson-grid-cwdm\")" { - description - "Valid only when grid type is CWDM."; - } - type cwdm-n; - description - "Channel wavelength computing input."; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable - (LSC) Label Switching Routers"; - } - } - } - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) - Label Switching Routers"; - } - - grouping wson-label-hop { - description - "Generic label-hop information for WSON"; - choice grid-type { - description - "Label for DWDM or CWDM grid"; - case dwdm { - choice single-or-super-channel { - description - "single or super channel"; - case single { - leaf dwdm-n { - type dwdm-n; - description - "The given value 'N' is used to determine the - nominal central frequency."; - } - } - case super { - leaf-list subcarrier-dwdm-n { - type dwdm-n; - description - "The given values 'N' are used to determine the - nominal central frequency for each subcarrier - channel."; - reference - "ITU-T G.694.1 (10/2020): Spectral grids for WDM - applications: DWDM frequency grid"; - } - } - } - } - case cwdm { - leaf cwdm-n { - type cwdm-n; - description - "The given value 'N' is used to determine the nominal - central wavelength."; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable - (LSC) Label Switching Routers"; - } - } - } - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) - Label Switching Routers"; - } - - grouping l0-label-range-info { - description - "Information about Layer 0 label range."; - leaf grid-type { - type identityref { - base l0-grid-type; - } - description - "Grid type"; - } - leaf priority { - type uint8; - description - "Priority in Interface Switching Capability Descriptor - (ISCD)."; - reference - "RFC 4203: OSPF Extensions in Support of Generalized - Multi-Protocol Label Switching (GMPLS)"; - } - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) - Label Switching Routers"; - } - - grouping wson-label-step { - description - "Label step information for WSON"; - choice l0-grid-type { - description - "Grid type: DWDM, CWDM, etc."; - case dwdm { - leaf wson-dwdm-channel-spacing { - when "derived-from-or-self(../../grid-type, - \"wson-grid-dwdm\")" { - description - "Valid only when grid type is DWDM."; - } - type identityref { - base dwdm-ch-spc-type; - } - description - "Label-step is the channel spacing (GHz), e.g., 100.000, - 50.000, 25.000, or 12.500 GHz for DWDM."; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable - (LSC) Label Switching Routers"; - } - } - case cwdm { - leaf wson-cwdm-channel-spacing { - when "derived-from-or-self(../../grid-type, - \"wson-grid-cwdm\")" { - description - "Valid only when grid type is CWDM."; - } - type identityref { - base cwdm-ch-spc-type; - } - description - "Label-step is the channel spacing (nm), i.e., 20 nm - for CWDM, which is the only value defined for CWDM."; - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable - (LSC) Label Switching Routers"; - } - } - } - reference - "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) - Label Switching Routers, - - ITU-T G.694.2 (12/2003): Spectral grids for WDM applications: - CWDM wavelength grid"; - } - - grouping flexi-grid-label-start-end { - description - "The flexi-grid label-start or label-end used to specify - flexi-grid label range."; - leaf flexi-n { - type flexi-n; - description - "The given value 'N' is used to determine the nominal - central frequency. - - As described in section 3.1 of RFC 8363, the range of - available nominal central frequencies are advertised for - m=1, which means that for an available central frequency n, - the frequency slot from central frequency n-1 to central - frequency n+1 is available."; - } - reference - "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda - Switch Capable (LSC) Label Switching Routers, - - RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-Grid - Dense Wavelength Division Multiplexing (DWDM) Networks"; - } - - grouping flexi-grid-frequency-slot { - description - "Flexi-grid frequency slot grouping."; - uses flexi-grid-label-start-end; - leaf flexi-m { - type flexi-m; - description - "The given value 'M' is used to determine the slot width."; - } - reference - "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda - Switch Capable (LSC) Label Switching Routers"; - } - - grouping flexi-grid-label-hop { - description - "Generic label-hop information for flexi-grid"; - choice single-or-super-channel { - description - "single or super channel"; - case single { - uses flexi-grid-frequency-slot; - } - case super { - status deprecated; - list subcarrier-flexi-n { - key "flexi-n"; - status deprecated; - uses flexi-grid-frequency-slot { - status deprecated; - } - description - "List of subcarrier channels for flexi-grid super - channel."; - } - } - case multi { - container frequency-slots { - description - "The top level container for the list of frequency - slots used for flexi-grid super channel."; - list frequency-slot { - key "flexi-n"; - min-elements 2; - uses flexi-grid-frequency-slot; - description - "List of frequency slots used for flexi-grid super - channel."; - } - } - } - } - reference - "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-Grid - Dense Wavelength Division Multiplexing (DWDM) Networks"; - } - - grouping flexi-grid-label-range-info { - description - "Flexi-grid-specific label range related information"; - uses l0-label-range-info; - container flexi-grid { - description - "flexi-grid definition"; - leaf slot-width-granularity { - type identityref { - base flexi-slot-width-granularity; - } - default "flexi-swg-12p5ghz"; - description - "Minimum space between slot widths. Default is 12.500 - GHz."; - reference - "RFC 8363: GMPLS OSPF-TE Extensions in Support of - Flexi-Grid Dense Wavelength Division Multiplexing (DWDM) - Networks"; - } - leaf min-slot-width-factor { - type uint16 { - range "1..max"; - } - default "1"; - description - "A multiplier of the slot width granularity, indicating - the minimum slot width supported by an optical port. - - Minimum slot width is calculated by: - Minimum slot width (GHz) = - min-slot-width-factor * slot-width-granularity."; - reference - "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi- - Grid Dense Wavelength Division Multiplexing (DWDM) - Networks"; - } - leaf max-slot-width-factor { - type uint16 { - range "1..max"; - } - must '. >= ../min-slot-width-factor' { - error-message - "Maximum slot width must be greater than or equal to - minimum slot width."; - } - description - "A multiplier of the slot width granularity, indicating - the maximum slot width supported by an optical port. - - Maximum slot width is calculated by: - Maximum slot width (GHz) = - max-slot-width-factor * slot-width-granularity - - If specified, maximum slot width must be greater than or - equal to minimum slot width. If not specified, maximum - slot width is equal to minimum slot width."; - reference - "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi- - Grid Dense Wavelength Division Multiplexing (DWDM) - Networks"; - } - } - } - - grouping flexi-grid-label-step { - description - "Label step information for flexi-grid"; - leaf flexi-grid-channel-spacing { - type identityref { - base flexi-ch-spc-type; - } - default "flexi-ch-spc-6p25ghz"; - status deprecated; - description - "Label-step is the nominal central frequency granularity - (GHz), e.g., 6.25 GHz."; - reference - "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda - Switch Capable (LSC) Label Switching Routers"; - } - leaf flexi-ncfg { - type identityref { - base flexi-ncfg-type; - } - default "flexi-ncfg-6p25ghz"; - description - "Label-step is the nominal central frequency granularity - (GHz), e.g., 6.25 GHz."; - reference - "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda - Switch Capable (LSC) Label Switching Routers"; - } - leaf flexi-n-step { - type uint8; - description - "This attribute defines the multiplier for the supported - values of 'N'. - - For example, given a grid with a nominal central frequency - granularity of 6.25 GHz, the granularity of the supported - values of the nominal central frequency could be 12.5 GHz. - In this case, the values of flexi-n should be even and this - constraint is reported by setting the flexi-n-step to 2. - - This attribute is also known as central frequency - granularity in RFC 8363."; - reference - "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-Grid - Dense Wavelength Division Multiplexing (DWDM) Networks"; - } - } - - grouping transceiver-capabilities { - description - "This grouping is intended to be used for reporting the - capabilities of a transceiver. - - When this grouping is used, the explicit-mode container shall - be augmented with a leafref to an explicit mode template with - the proper XPath which depends from where this grouping is - actually used. - - See for example the ietf-optical-impairment-topology YANG - module in RFC YYYY."; - reference - "RFC YYYY: A YANG Data Model for Optical Impairment-aware - Topology."; -// RFC Ed.: replace YYYY with actual RFC number and remove -// this note after draft-ietf-ccamp-optical-impairment-topology-yang -// is published as an RFC - container supported-modes { - presence - "When present, it indicates that the modes supported by a - transceiver are reported."; - config false; - description - "The top level container for the list supported - transceiver's modes."; - list supported-mode { - key "mode-id"; - config false; - min-elements 1; - description "The list of supported transceiver's modes."; - leaf mode-id { - type string { - length "1..255"; - } - description "ID for the supported transceiver's mode."; - } - choice mode { - config false; - mandatory true; - description - "Indicates whether the transceiver's mode is a standard - mode, an organizational mode or an explicit mode."; - case G.698.2 { - uses standard-mode; - uses common-standard-organizational-mode; - uses common-all-modes; - } - case organizational-mode { - container organizational-mode { - config false; - description - "The set of attributes for an organizational mode"; - uses organizational-mode; - uses common-standard-organizational-mode; - uses common-all-modes; - } // container organizational-mode - } - case explicit-mode { - container explicit-mode { - config false; - description - "The set of attributes for an explicit mode."; - uses common-all-modes; - container compatible-modes { - description - "Container for all the standard and organizational - modes supported by the transceiver's explicit - mode."; - leaf-list supported-application-code { - type leafref { - path "../../../../supported-mode/mode-id"; - } - must "../../../../" - + "supported-mode[mode-id=current()]/" - + "standard-mode" { - description - "The pointer is only for application codes - supported by transceiver."; - } - description - "List of pointers to the application codes - supported by the transceiver's explicit mode."; - } - leaf-list supported-organizational-mode { - type leafref { - path "../../../../supported-mode/mode-id"; - } - must "../../../../" - + "supported-mode[mode-id=current()]/" - + "organizational-mode" { - description - "The pointer is only for organizational modes - supported by transceiver."; - } - description - "List of pointers to the organizational modes - supported by the transceiver's explicit mode."; - } - } // container compatible-modes - } // container explicit-mode - } // end of case explicit-mode - } // end of choice - } // list supported-mode - } // container supported-modes - } // grouping transceiver-capabilities - - grouping standard-mode { - description - "ITU-T G.698.2 standard mode that guarantees interoperability. - It must be an string with the following format: - B-DScW-ytz(v) where all these attributes are conformant - to the ITU-T recomendation"; - - leaf standard-mode { - type standard-mode; - config false; - description - "G.698.2 standard mode"; - } - } - - grouping organizational-mode { - description - "Transponder operational mode supported by organizations or - vendor"; - - leaf operational-mode { - type operational-mode; - config false; - description - "configured organization- or vendor-specific - application identifiers (AI) supported by the transponder"; - } - leaf organization-identifier { - type organization-identifier; - config false; - description - "organization identifier that uses organizational - mode"; - } - } - - grouping penalty-value { - description - "A common definition of the OSNR penalty value used for - describing multiple penalty types (.e.g, CD, PMD, PDL)."; - - leaf penalty-value { - type union { - type decimal-2 { - range "0..max"; - } - type empty; - } - units "dB"; - config false; - mandatory true; - description - "The OSNR penalty associated with the related optical - impairment at the receiver, when the value is known or an - empty value when the value is not known."; - } - } - - grouping explicit-mode { - description - "Attributes capabilities related to explicit transceiver's - mode. - - This grouping also contains the list of attributes related to - optical impairment limits for explicit mode (min OSNR, max PMD, - max CD, max PDL, Q-factor limit, etc.). - - In case of standard and operational mode the attributes are - implicit."; - leaf line-coding-bitrate { - type identityref { - base line-coding; - } - config false; - description - "Bit rate/line coding of the optical tributary signal."; - reference - "ITU-T G.698.2 section 7.1.2"; - } - leaf bitrate { - type uint16; - units "Gbit/sec"; - config false; - description - "The gross bitrate (e.g., 100, 200) of the optical tributary - signal."; - } - leaf max-diff-group-delay { - type decimal-2; - units "ps"; - config false; - description - "Maximum Differential group delay of this mode for this - lane"; - } - leaf max-chromatic-dispersion { - type decimal-2 { - range "0..max"; - } - units "ps/nm"; - config false; - description - "Maximum acceptable accumulated chromatic dispersion (CD) - on the receiver at Rx-power reference point - (rx-ref-channel-power) and in absence of other impairments"; - reference - "Section 2.6.4 of RFC YYYY: A YANG Data Model for Optical - Impairment-aware Topology."; - } -// RFC Ed.: replace YYYY with actual RFC number and remove -// this note after draft-ietf-ccamp-optical-impairment-topology-yang -// is published as an RFC - list cd-penalty { - key cd-value; - config false; - description - "Optional penalty associated with a given accumulated - chromatic dispersion (CD) value measured in - absence of other impairments. - - This list of pair CD and OSNR penalty can be used to - sample the function OSNR penalty = f(CD)."; - leaf cd-value { - type decimal-2; - units "ps/nm"; - config false; - mandatory true; - description - "The Chromatic Dispersion (CD)."; - } - uses penalty-value; - reference - "Section 2.6.4 of RFC YYYY: A YANG Data Model for Optical - Impairment-aware Topology."; - } -// RFC Ed.: replace YYYY with actual RFC number and remove -// this note after draft-ietf-ccamp-optical-impairment-topology-yang -// is published as an RFC - leaf max-polarization-mode-dispersion { - type decimal-2 { - range "0..max"; - } - units "ps"; - config false; - description - "Maximum acceptable accumulated polarization mode - dispersion (PMD) on the receiver at Rx-power reference point - (rx-ref-channel-power) and in absence of other impairments"; - reference - "ITU-T G.666 (02/2011): Characteristics of polarization - mode dispersion compensators and of receivers that - compensate for polarization mode dispersion - - Section 2.6.4 of RFC YYYY: A YANG Data Model for Optical - Impairment-aware Topology."; - } -// RFC Ed.: replace YYYY with actual RFC number and remove -// this note after draft-ietf-ccamp-optical-impairment-topology-yang -// is published as an RFC - list pmd-penalty { - key pmd-value; - config false; - description - "Optional penalty associated with a given accumulated - polarization mode dispersion (PMD) value measured in - absence of other impairments. - - This list of pair PMD and OSNR penalty can be used to - sample the function OSNR penalty = f(PMD)."; - leaf pmd-value { - type decimal-2 { - range "0..max"; - } - units "ps"; - config false; - mandatory true; - description - "The Polarization Mode Dispersion (PMD)."; - } - uses penalty-value; - reference - "Section 2.6.4 of RFC YYYY: A YANG Data Model for Optical - Impairment-aware Topology."; - } -// RFC Ed.: replace YYYY with actual RFC number and remove -// this note after draft-ietf-ccamp-optical-impairment-topology-yang -// is published as an RFC - leaf max-polarization-dependent-loss { - type power-loss-or-null; - config false; - mandatory true; - description - "Maximum acceptable accumulated polarization dependent - loss (PDL) on the receiver at Rx-power reference point - (rx-ref-channel-power) and in absence of other impairments"; - reference - "Section 2.6.4 of RFC YYYY: A YANG Data Model for Optical - Impairment-aware Topology."; - } -// RFC Ed.: replace YYYY with actual RFC number and remove -// this note after draft-ietf-ccamp-optical-impairment-topology-yang -// is published as an RFC - list pdl-penalty { - key pdl-value; - config false; - description - "Optional penalty associated with a given accumulated - polarization dependent loss (PDL) value, measured in - absence of other impairments. - - This list of pair PDL and OSNR penalty can be used to - sample the function OSNR penalty = f(PDL)."; - leaf pdl-value { - type power-loss; - config false; - mandatory true; - description - "Maximum acceptable accumulated polarization dependent - loss (PDL)."; - } - uses penalty-value; - reference - "Section 2.6.4 of RFC YYYY: A YANG Data Model for Optical - Impairment-aware Topology."; - } -// RFC Ed.: replace YYYY with actual RFC number and remove -// this note after draft-ietf-ccamp-optical-impairment-topology-yang -// is published as an RFC - leaf available-modulation-type { - type identityref { - base modulation; - } - config false; - description - "Modulation type the specific transceiver in the list - can support"; - } - leaf min-OSNR { - type snr; - units "dBm"; - config false; - description - "min OSNR measured over 0.1 nm resolution bandwidth: - if received OSNR at Rx-power reference point - (rx-ref-channel-power) is lower than MIN-OSNR, an increased - level of bit-errors post-FEC needs to be expected"; - } - leaf rx-ref-channel-power { - type power-dbm; - config false; - description - "The channel power used as reference for defining penalties - and min-OSNR"; - } - list rx-channel-power-penalty { - key rx-channel-power-value; - config false; - description - "Optional penalty associated with a received power - lower than rx-ref-channel-power. - - This list of pair power and OSNR penalty can be used to - sample the function OSNR penalty = f(rx-channel-power)."; - leaf rx-channel-power-value { - type power-dbm; - units "dBm"; - config false; - mandatory true; - description - "The Received Power."; - } - uses penalty-value; - } - leaf min-Q-factor { - type decimal-2; - units "dB"; - config false; - description "min Qfactor at FEC threshold"; - } - leaf available-baud-rate { - type decimal64 { - fraction-digits 1; - } - units "Bd"; - config false; - description - "Baud-rate the specific transceiver in - the list can support. - Baud-rate is the unit for - symbol rate or modulation rate - in symbols per second or - pulses per second. - It is the number of distinct symbol - changes (signal events) made to the - transmission medium - per second in a digitally - modulated signal or a line code"; - } - leaf roll-off { - type decimal64 { - fraction-digits 4; - range "0..1"; - } - config false; - description - "the roll-off factor (beta with values from 0 to 1) - identifies how the real signal shape exceed - the baud rate. If=0 it is exactly matching - the baud rate.If=1 the signal exceeds the - 50% of the baud rate at each side."; - } - leaf min-carrier-spacing { - type frequency-ghz; - config false; - description - "This attribute specifies the minimum nominal difference - between the carrier frequencies of two homogeneous OTSis - (which have the same optical characteristics but the central - frequencies) such that if they are placed next to each other - the interference due to spectrum overlap between them can be - considered negligible. - - In case of heterogeneous OTSi it is up to path computation - engine to determine the minimum distance between the carrier - frequency of the two adjacent OTSi."; - } - leaf available-fec-type { - type identityref { - base fec-type; - } - config false; - description "Available FEC"; - } - leaf fec-code-rate { - type decimal64 { - fraction-digits 8; - range "0..max"; - } - config false; - description "FEC-code-rate"; - } - leaf fec-threshold { - type decimal64 { - fraction-digits 8; - range "0..max"; - } - config false; - description - "Threshold on the BER, for which FEC - is able to correct errors"; - } - leaf in-band-osnr { - type snr; - config false; - description - "The OSNR defined within the bandwidth of the transmit - spectral excursion (i.e., between the nominal central - frequency of the channel and the -3.0dB points of the - transmitter spectrum furthest from the nominal central - frequency) measured at reference point Ss. - - The in-band OSNR is referenced to an optical bandwidth of - 0.1nm @ 193.7 THz or 12.5 GHz."; - reference - "OIF-400ZR-01.0: Implementation Agreement 400ZR"; - } - leaf out-of-band-osnr { - type snr; - config false; - description - "The ratio of the peak transmitter power to the integrated - power outside the transmitter spectral excursion. - - The spectral resolution of the measurement shall be better - than the maximum spectral width of the peak. - - The out-of-band OSNR is referenced to an optical bandwidth - of 0.1nm @ 193.7 THz or 12.5 GHz"; - reference - "OIF-400ZR-01.0: Implementation Agreement 400ZR"; - } - leaf tx-polarization-power-difference { - type power-ratio; - config false; - description - "The transmitter polarization dependent power difference - defined as the power difference between X and Y - polarizations"; - reference - "OIF-400ZR-01.0: Implementation Agreement 400ZR"; - } - leaf polarization-skew { - type decimal-2; - units "ps"; - config false; - description - "The X-Y skew, included as a fixed value in the receiver - polarization mode dispersion (PMD) tolerance limits."; - reference - "OIF-400ZR-01.0: Implementation Agreement 400ZR"; - } - } // grouping explicit-mode - - grouping common-standard-organizational-mode { - description - "Common attributes used by standard and organizational - transceiver's modes."; - - leaf-list line-coding-bitrate { - type identityref { - base line-coding; - } - config false; - description - "The list of the bit rate/line coding of the optical - tributary signal supported by the transceiver. - - Reporting this list is optional when the standard or - organization mode supports only one bit rate/line coding."; - reference - "ITU-T G.698.2 section 7.1.2"; - } - } // grouping common-standard-organizational-mode - - grouping transceiver-tuning-range { - description - "Transceiver tuning range (f-min, f-max, f-granularity)"; - - leaf min-central-frequency { - type frequency-thz; - description - "This parameter indicates the minimum frequency for the - transceiver tuning range."; - } - leaf max-central-frequency { - type frequency-thz; - description - "This parameter indicates the maximum frequency for the - transceiver tuning range."; - } - - leaf transceiver-tunability-granularity { - type frequency-ghz; - description - "This parameter indicates the transceiver frequency fine - tuning granularity e.g 3.125GHz or 0.001GHz."; - } - } // grouping transceiver-tuning-range - - grouping common-all-modes { - description - "Common attributes used by all transceiver's modes."; - - container transceiver-tuning-range { - config false; - description - "Transceiver tuning range (f-min, f-max, f-granularity)"; - uses transceiver-tuning-range; - } - - leaf tx-channel-power-min { - type power-dbm; - config false; - description "The minimum output power of this interface"; - } - leaf tx-channel-power-max { - type power-dbm; - config false; - description "The maximum output power of this interface"; - } - leaf rx-channel-power-min { - type power-dbm; - config false; - description "The minimum input power of this interface"; - } - leaf rx-channel-power-max { - type power-dbm; - config false; - description "The maximum input power of this interface"; - } - leaf rx-total-power-max { - type power-dbm; - config false; - description - "Maximum rx optical power for all the channels. - - It is applicable only to multi-channel modes."; - } - } // grouping common-all-modes - - grouping common-transceiver-param { - description - "The common parameters of an optical transceiver, - that supplement the configured mode."; - - uses common-transceiver-configured-param; - uses common-transceiver-readonly-param; - } - - grouping common-transceiver-configured-param { - description - "The configured parameters of an optical transceiver, - that supplement the configured mode."; - - leaf line-coding-bitrate { - type identityref { - base line-coding; - } - description - "Bit rate/line coding of the optical tributary signal. - - Support of this attribute is optional when the configured - mode supports only one bit rate/line coding."; - reference - "ITU-T G.698.2 section 7.1.2"; - } - leaf tx-channel-power { - type power-dbm-or-null; - description - "The current channel transmit power, when the value is - known or an empty value when the value is not known. - - The empty value MUST NOT be used when this attribute is - configured."; - } - } // grouping for configured transceiver attributes out of mode - - grouping common-transceiver-readonly-param { - description - "The common read-only parameters of an optical transceiver, - that supplement the configured mode."; - - leaf rx-channel-power { - type power-dbm-or-null; - config false; - description - "The current channel received power, when the value is - known or an empty value when the value is not known."; - } - leaf rx-total-power { - type power-dbm-or-null; - config false; - description - "The current total received power, when the value is known - or an empty value when the value is not known."; - } - } // grouping for read-only transceiver attributes out of mode - - grouping tunnel-attributes { - description - "Parameters for Layer0 (WSON or Flexi-Grid) Tunnels."; - - leaf wavelength-assignment { - type identityref { - base wavelength-assignment; - } - description "Wavelength Allocation Method"; - } - } - - grouping frequency-range { - description - "This grouping defines the lower and upper bounds of a - frequency range (e.g., a band). - - This grouping SHOULD NOT be used to define a frequency slot, - which SHOULD be defined using the n and m values instead."; - leaf lower-frequency { - type frequency-thz; - mandatory true; - description - "The lower frequency boundary of the - frequency range."; - } - leaf upper-frequency { - type frequency-thz; - must '. > ../lower-frequency' { - error-message - "The upper frequency must be greater than the lower - frequency."; - } - mandatory true; - description - "The upper frequency boundary of the - frequency range."; - } - } - - grouping frequency-range-with-identifier { - description - "This grouping extends the frequency-range defined in - ietf-layer0-types with an identifier, which used as a key when - it is needed to define different properties (e.g., optical - impairments) for different frequency 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 frequency-range; - } - } - - grouping path-constraints { - description - "Common attribute for Layer 0 path constraints to be used by - Layer 0 computation."; - leaf gsnr-extra-margin { - type snr { - range 0..max; - } - default 0; - description - "An additional margin to be added to the OSNR-min of the - transceiver when checking the estimated received Generalized - SNR (GSNR)."; - } - } - - grouping path-properties { - description - "Common attribute for reporting the Layer 0 computed path - properties."; - leaf estimated-gsnr { - type snr; - config false; - description - "The estimate received GSNR for the computed path."; - } - leaf estimated-eol-gsnr { - type snr; - config false; - description - "The estimate received GSNR for the computed path - degraded at the end of life."; - } - leaf estimated-lowest-gsnr { - type snr; - config false; - description - "The estimate lowest received GSNR for the computed path - among all possible wavelength channels along the same - path."; - } - } -} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-layer0-types@2025-08-06.yang b/experimental/ietf-extracted-YANG-modules/ietf-layer0-types@2025-08-06.yang new file mode 100644 index 000000000..a74085dac --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-layer0-types@2025-08-06.yang @@ -0,0 +1,2384 @@ +module ietf-layer0-types { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-layer0-types"; + prefix l0-types; + + import ietf-te-types { + prefix te-types; + reference + "RFC YYYY: Common YANG Data Types for Traffic Engineering"; + } + + organization + "IETF CCAMP Working Group"; + contact + "WG Web: + WG List: + + Editor: Dieter Beller + + + Editor: Sergio Belotti + + + Editor: Italo Busi + + + Editor: Haomian Zheng + "; + description + "This module defines Optical Layer 0 types. This module + provides groupings that can be applicable to Layer 0 + Fixed Optical Networks (e.g., CWDM (Coarse Wavelength + Division Multiplexing) and DWDM (Dense Wavelength Division + Multiplexing)) and flexi-grid optical networks. + + 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). + + All revisions of IETF and IANA published modules can be found + at the YANG Parameters registry group + (https://www.iana.org/assignments/yang-parameters). + + 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-08-06 { + description + "This revision adds the following new identities: + - cwdm-ch-spc-type; + - flexi-ncfg-type; + - flexi-ncfg-6p25gh; + - modulation; + - dpsk; + - qpsk; + - dp-qpsk; + - qam8; + - dp-qam8; + - qam16; + - dp-qam16; + - qam32; + - dp-qam32; + - qam64; + - dp-qam64; + - fec-type; + - g-fec; + - super-fec; + - no-fec; + - sc-fec; + - o-fec; + - c-fec; + - line-coding; + - nrz-2p5g; + - nrz-otu1; + - nrz-10g; + - nrz-otu2; + - otl4.4-sc; + - foic1.4-sc; + - wavelength-assignment; + - first-fit-wavelength-assignment; + - random-wavelength-assignment; + - least-loaded-wavelength-assignment; + - lower-first-wavelength-assignment; + - upper-first-wavelength-assignment; + - type-power-mode; + - power-spectral-density; + - carrier-power; + - switching-wson-lsc; + - switching-flexi-grid-lsc. + + This revision adds the following new data types: + - standard-mode + - organization-identifier + - operational-mode + - frequency-thz + - frequency-ghz + - snr + - snr-or-null + - decimal-2 + - decimal-2-or-null + - power-gain + - power-gain-or-null + - power-loss + - power-loss-or-null + - power-ratio + - power-ratio-or-null + - power-dbm + - power-dbm-or-null + - decimal-5 + - decimal-5-or-null + - psd + - psd-or-null. + + This revision adds the following new groupings: + - wdm-label-start-end; + - wdm-label-step; + - wdm-label-hop; + - wdm-label-range-info; + - transceiver-capabilities; + - standard-mode; + - organizational-mode; + - penalty-value; + - explicit-mode; + - common-standard-organizational-mode; + - transceiver-tuning-range; + - common-all-mode; + - common-transceiver-param; + - common-transceiver-configured-param; + - common-transceiver-readonly-param; + - tunnel-attributes; + - frequency-range; + - frequency-range-with-identifier; + - path-constraints; + - path-properties. + + The default value of the min-slot-width-factor data node + within flexi-grid-label-range-info grouping has been removed + (bug fixing). + "; + reference + "RFC XXXX: Common YANG Data Types for Layer 0 Optical + Networks"; + } + revision 2021-08-13 { + description + "Initial version"; + reference + "RFC 9093: A YANG Data Model for Layer 0 Types"; + } + + /* + * Identities + */ + + identity l0-grid-type { + description + "Base identity for the WDM grid types."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable + (LSC), Label Switching Routers + ITU-T G.694.2 (12/2003): Spectral grids for WDM applications: + CWDM wavelength grid"; + } + + identity wson-grid-cwdm { + base l0-grid-type; + description + "Coarse Wavelength Division Multiplexing (CWDM) grid."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) + Label Switching Routers + ITU-T G.694.2 (12/2003): Spectral grids for WDM applications: + CWDM wavelength grid"; + } + + identity wson-grid-dwdm { + base l0-grid-type; + description + "Fixed Dense Wavelength Division Multiplexing (DWDM) grid."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable + (LSC), Label Switching Routers + ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: + DWDM frequency grid, Clause 7."; + } + + identity flexi-grid-dwdm { + base l0-grid-type; + description + "Flexible Dense Wavelength Division Multiplexing (DWDM) grid + (flexi-grid)."; + reference + "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda + Switch Capable (LSC) Label Switching Routers + ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: + DWDM frequency grid, Clause 8"; + } + + identity cwdm-ch-spc-type { + description + "Base identity for CWDM channel-spacing types."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) + Label Switching Routers, Section 3.3 + ITU-T G.694.2 (12/2003): Spectral grids for WDM applications: + CWDM wavelength grid"; + } + + identity cwdm-20nm { + base cwdm-ch-spc-type; + description + "20nm channel spacing"; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) + Label Switching Routers, Section 3.3 + ITU-T G.694.2 (12/2003): Spectral grids for WDM applications: + CWDM wavelength grid"; + } + + identity dwdm-ch-spc-type { + description + "Base identity for DWDM channel-spacing types."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) + Label Switching Routers, Section 3.2 + ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: + DWDM frequency grid"; + } + + identity dwdm-100ghz { + base dwdm-ch-spc-type; + description + "100 GHz channel spacing."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) + Label Switching Routers, Section 3.2 + ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: + DWDM frequency grid"; + } + + identity dwdm-50ghz { + base dwdm-ch-spc-type; + description + "50 GHz channel spacing."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) + Label Switching Routers, Section 3.2 + ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: + DWDM frequency grid"; + } + + identity dwdm-25ghz { + base dwdm-ch-spc-type; + description + "25 GHz channel spacing."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) + Label Switching Routers, Section 3.2 + ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: + DWDM frequency grid"; + } + + identity dwdm-12p5ghz { + base dwdm-ch-spc-type; + description + "12.5 GHz channel spacing."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) + Label Switching Routers, Section 3.2 + ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: + DWDM frequency grid"; + } + + identity flexi-ch-spc-type { + status obsolete; + description + "Flexi-grid channel-spacing type"; + } + + identity flexi-ch-spc-6p25ghz { + base flexi-ch-spc-type; + status obsolete; + description + "6.25 GHz channel spacing"; + } + + identity flexi-ncfg-type { + description + "Flexi-grid Nominal Central Frequency Granularity (NCFG) + type."; + reference + "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda + Switch Capable (LSC) Label Switching Routers + ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: + DWDM frequency grid"; + } + + identity flexi-ncfg-6p25ghz { + base flexi-ncfg-type; + description + "6.25 GHz Nominal Central Frequency Granularity (NCFG)."; + reference + "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda + Switch Capable (LSC) Label Switching Routers + ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: + DWDM frequency grid"; + } + + identity flexi-slot-width-granularity { + description + "Flexi-grid slot width granularity."; + reference + "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda + Switch Capable (LSC) Label Switching Routers + ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: + DWDM frequency grid"; + } + + identity flexi-swg-12p5ghz { + base flexi-slot-width-granularity; + description + "12.5 GHz slot width granularity."; + reference + "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda + Switch Capable (LSC) Label Switching Routers + ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: + DWDM frequency grid"; + } + + identity modulation { + description + "base identity for modulation type."; + } + + identity dpsk { + base modulation; + description + "Differential Phase Shift Keying (DPSK) modulation."; + } + + identity qpsk { + base modulation; + description + "Quadrature Phase Shift Keying (QPSK) modulation."; + } + + identity dp-qpsk { + base modulation; + description + "Dual Polarization Quadrature Phase Shift Keying + (DP-QPSK) modulation."; + } + + identity qam8 { + base modulation; + description + "8 symbols Quadrature Amplitude Modulation (8QAM)."; + } + + identity dp-qam8 { + base modulation; + description + "8 symbols Dual Polarization Quadrature Amplitude + Modulation (DP-QAM8)."; + } + + identity qam16 { + base modulation; + description + "16 symbols Quadrature Amplitude Modulation (QAM16)."; + } + + identity dp-qam16 { + base modulation; + description + "16 symbols Dual Polarization Quadrature Amplitude + Modulation (DP-QAM16)."; + } + + identity qam32 { + base modulation; + description + "32 symbols Quadrature Amplitude Modulation (QAM32)"; + } + + identity dp-qam32 { + base modulation; + description + "32 symbols Dual Polarization Quadrature Amplitude + Modulation (DP-QAM32)."; + } + + identity qam64 { + base modulation; + description + "64 symbols Quadrature Amplitude Modulation (QAM64)."; + } + + identity dp-qam64 { + base modulation; + description + "64 symbols Dual Polarization Quadrature Amplitude + Modulation (DP-QAM64)."; + } + + identity fec-type { + description + "Base identity from which specific Forward Error Correction + (FEC) type identities are derived."; + } + + identity g-fec { + base fec-type; + description + "Generic Forward Error Correction (G-FEC)."; + reference + "ITU-T G.975 v2.0 (10/2000): Forward error correction for + submarine systems."; + } + + identity super-fec { + base fec-type; + description + "Super Forward Error Correction (S-FEC)."; + reference + "ITU-T G.975.1 v1.2 (07/2013): Forward error correction for + high bit-rate DWDM submarine systems."; + } + + identity no-fec { + base fec-type; + description + "No FEC."; + } + + identity sc-fec { + base fec-type; + description + "Staircase Forward Error Correction (SC-FEC)."; + reference + "Annex A of ITU-T G.709.2 v1.1 (09/2020):OTU4 long-reach + interface."; + } + + identity o-fec { + base fec-type; + description + "Open Forward Error Correction (O-FEC) which reuses the + Bose, Chaudhuri and Hocquenghem (BCH) FEC."; + reference + "ITU-T G.709.3 v2.1 (11/2022): Flexible OTN + long-reach interfaces, Clause 16.4.4 + ITU-T G.709.3 v2.1 (11/2022): Flexible OTN + long-reach interfaces, Annex E"; + } + + identity c-fec { + base fec-type; + description + "Concatenated FEC (C-FEC) that combines an outer Staircase + Forward Error Correction (SC-FEC) code and an inner + double-extended SD-FEC (128,119) Hamming code. + + More details are provided in clause 15/G.709.3 where it is + called DSH instead of concatenated FEC."; + reference + "ITU-T G.709.2 v1.1 (09/2020):OTU4 long-reach + interface, Annex A + ITU-T G.709.3 v2.1 (11/2022): Flexible OTN long-reach + interfaces, Annex D + ITU-T G.709.3 v2.1 (11/2022): Flexible OTN long-reach + interfaces, Clause 15"; + } + + identity line-coding { + description + "Base identity to define the bit rate/line coding of optical + tributary signals."; + reference + "ITU-T G.698.2 v3.0 (11/2018): Amplified multichannel dense + wavelength division multiplexing applications + with single channel optical interfaces Optical + transport network, Clause 7.1.2"; + } + + identity nrz-2p5g { + base line-coding; + description + "The non return to zero (NRZ) bit rate/line coding used by + the optical tributary signal class NRZ 2.5G."; + reference + "ITU-T G.959.1 v8.0 (07/2018): Optical transport network + physical layer interfaces, Clause 3.2.6"; + } + + identity nrz-otu1 { + base line-coding; + description + "The Non-Return to Zero (NRZ) bit rate/line coding used by + the Optical channel Transport Unit order 1 (OTU1) optical + tributary signals."; + reference + "ITU-T G.959.1 v8.0 (07/2018): Optical transport network + physical layer interfaces, Clause 7.2.1.2"; + } + + identity nrz-10g { + description + "The non return to zero (NRZ) bit rate/line coding used by + the optical tributary signal class NRZ 10G."; + reference + "ITU-T G.959.1 v8.0 (07/2018): Optical transport network + physical layer interfaces, Clause 3.2.7"; + } + + identity nrz-otu2 { + base line-coding; + description + "The non return to zero (NRZ) bit rate/line coding used by + the Optical channel Transport Unit order 2 (OTU2) optical + tributary signals."; + reference + "ITU-T G.959.1 v8.0 (07/2018): Optical transport network + physical layer interfaces, Clause 7.2.1.2"; + } + + identity otl4.4-sc { + base line-coding; + description + "The bit rate/line coding used by optical tributary + signals carrying a 100G Optical Transport Unit order 4 + (OTU4) with Staircase Forward Error Correction (SC FEC) + from a group of four Optical Transport Lanes (OTL)."; + reference + "ITU-T G.698.2 v3.0 (11/2018): Amplified multichannel dense + wavelength division multiplexing applications + with single channel optical interfaces Optical + transport network, Clause 3.2.1"; + } + + identity foic1.4-sc { + base line-coding; + description + "The bit rate/line coding used by optical tributary signals + carrying a FlexO Interface of order C1 with 4 lanes + (FOIC1.1) with Staircase Forward Error Correction + (SC FEC)."; + reference + "ITU-T G.698.2 v3.0 (11/2018): Amplified multichannel dense + wavelength division multiplexing applications + with single channel optical interfaces Optical + transport network, Clause 3.2.1"; + } + + identity wavelength-assignment { + description + "Base identity for Wavelength Assignment (WA) method."; + reference + "RFC 7689: Signaling Extensions for Wavelength Switched + Optical Networks"; + } + + identity first-fit-wavelength-assignment { + base wavelength-assignment; + description + "All the available wavelengths are numbered, and this WA + method chooses the available wavelength with the lowest + index."; + reference + "RFC 7689: Signaling Extensions for Wavelength Switched + Optical Networks"; + } + + identity random-wavelength-assignment { + base wavelength-assignment; + description + "This WA method chooses an available wavelength randomly."; + reference + "RFC 7689: Signaling Extensions for Wavelength Switched + Optical Networks"; + } + + identity least-loaded-wavelength-assignment { + base wavelength-assignment; + description + "This WA method selects the wavelength that + has the largest residual capacity on the most loaded + link along the route (in multi-fiber networks)."; + reference + "RFC 7689: Signaling Extensions for Wavelength Switched + Optical Networks"; + } + + identity lower-first-wavelength-assignment { + base wavelength-assignment; + description + "Allocate wavelengths in ascending order, beginning from the + lowest frequency and progressing toward the highest + frequency within the permissible frequency range."; + } + + identity upper-first-wavelength-assignment { + base wavelength-assignment; + description + "Allocate wavelengths in descending order, beginning from the + highest frequency and progressing toward the lowest + frequency within the permissible frequency range."; + } + + identity type-power-mode { + description + "power equalization mode used within the + Optical Multiplex Section (OMS) and its elements."; + } + + identity power-spectral-density { + base type-power-mode; + description + "All elements must use power spectral density (W/Hz)."; + } + + identity carrier-power { + base type-power-mode; + description + "All elements must use power (dBm)."; + } + + identity switching-wson-lsc { + base te-types:switching-lsc; + description + "Wavelength Switched Optical Network Lambda-Switch Capable + (WSON-LSC)."; + reference + "RFC 7688: GMPLS OSPF Enhancement for Signal and Network + Element Compatibility for Wavelength Switched + Optical Networks, Section 3"; + } + + identity switching-flexi-grid-lsc { + base te-types:switching-lsc; + description + "Flexi-grid Lambda-Switch Capable (Flexi-Grid-LSC)."; + reference + "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-Grid + Dense Wavelength Division Multiplexing (DWDM) + Networks, Section 4.1"; + } + + /* + * Typedefs + */ + + typedef dwdm-n { + type int16; + description + "The given value 'N' is used to determine the nominal central + frequency. + + The nominal central frequency, 'f', is defined by: + f = 193100.000 GHz + N x channel spacing (measured in GHz), + + where 193100.000 GHz (193.100000 THz) is the ITU-T 'anchor + frequency' for transmission over the DWDM grid, and where + 'channel spacing' is defined by the dwdm-ch-spc-type."; + reference + "RFC6205: Generalized Labels for Lambda-Switch-Capable (LSC) + Label Switching Routers + ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: + DWDM frequency grid"; + } + + typedef cwdm-n { + type int16; + description + "The given value 'N' is used to determine the nominal central + wavelength. + + The nominal central wavelength is defined by: + Wavelength = 1471 nm + N x channel spacing (measured in nm) + + where 1471 nm is the conventional 'anchor wavelength' for + transmission over the CWDM grid, and where 'channel spacing' + is defined by the cwdm-ch-spc-type."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) + Label Switching Routers + ITU-T G.694.2 (12/2003): Spectral grids for WDM applications: + CWDM wavelength grid"; + } + + typedef flexi-n { + type int16; + description + "The given value 'N' is used to determine the nominal central + frequency. + + The nominal central frequency, 'f', is defined by: + f = 193100.000 GHz + N x NCFG (measured in GHz), + + where 193100.000 GHz (193.100000 THz) is the ITU-T 'anchor + frequency' for transmission over the DWDM grid, and where + NCFG is defined by the flexi-ncfg-type."; + reference + "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda + Switch Capable (LSC) Label Switching Routers + ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: + DWDM frequency grid"; + } + + typedef flexi-m { + type uint16; + description + "The given value 'M' is used to determine the slot width. + + A slot width is defined by: + slot width = M x SWG (measured in GHz), + + where SWG is defined by the flexi-slot-width-granularity."; + reference + "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda + Switch Capable (LSC) Label Switching Routers + ITU-T G.694.1 (10/2020): Spectral grids for WDM applications: + DWDM frequency grid"; + } + + typedef standard-mode { + type string; + description + "Identifies an ITU-T G.698.2 standard application code. + + It MUST be a string with a format that follows the + nomenclature defined in clause 5.3 of ITU-T G.698.2."; + reference + "ITU-T G.698.2 v3.0 (11/2018): Amplified multichannel dense + wavelength division multiplexing applications + with single channel optical interfaces Optical + transport network, Clause 5.3"; + } + + typedef organization-identifier { + type string; + description + "vendor/organization identifier that uses a private mode + out of already defined in G.698.2 ITU-T application-code"; + reference + "RFC ZZZZ: A YANG Data Model for Optical Impairment-aware + Topology, Section 2.5.2"; + } + + typedef operational-mode { + type string; + description + "Identifies an organization (e.g., vendor) specific mode. + + The format of the string has to be defined by the + organization which is responsible for defining the + corresponding optical interface specification."; + reference + "RFC ZZZZ: A YANG Data Model for Optical Impairment-aware + Topology, Section 2.5.2"; + } + + typedef frequency-thz { + type decimal64 { + fraction-digits 9; + } + units "THz"; + description + "The DWDM frequency in THz, e.g., 193.112500000"; + } + + typedef frequency-ghz { + type decimal64 { + fraction-digits 6; + } + units "GHz"; + description + "The DWDM frequency in GHz, e.g., 193112.500000."; + } + + typedef snr { + type decimal-2; + units "dB@0.1nm"; + description + "(Optical) Signal to Noise Ratio measured over 0.1 nm + resolution bandwidth."; + reference + "ITU-T G.977.1 (02/2021): Transverse compatible dense + wavelength division multiplexing applications for + repeatered optical fibre submarine cable systems"; + } + + typedef snr-or-null { + type union { + type snr; + type empty; + } + description + "(Optical) Signal to Noise Ratio measured over 0.1 nm + resolution bandwidth, when known, or an empty value when + unknown."; + } + + typedef decimal-2 { + type decimal64 { + fraction-digits 2; + } + description + "A decimal64 value with two digits."; + } + + typedef decimal-2-or-null { + type union { + type decimal-2; + type empty; + } + description + "A decimal64 value with two digits, when the value is known or + an empty value when the value is not known."; + } + + typedef power-gain { + type decimal-2 { + range "0..max"; + } + units "dB"; + description + "The gain in dB."; + } + + typedef power-gain-or-null { + type union { + type power-gain; + type empty; + } + description + "The gain in dB, when it is known or an empty + value when the power gain/loss is not known."; + } + + typedef power-loss { + type decimal-2 { + range "0..max"; + } + units "dB"; + description + "The power attenuation in dB."; + } + + typedef power-loss-or-null { + type union { + type power-loss; + type empty; + } + description + "The power attenuation in dB, when it is known or an empty + value when the loss is not known."; + } + + typedef power-ratio { + type decimal-2; + units "dB"; + description + "The power difference in dB."; + } + + typedef power-ratio-or-null { + type union { + type power-ratio; + type empty; + } + description + "The power difference in dB, when it is known or an empty + value when the difference is not known."; + } + + typedef power-dbm { + type decimal-2; + units "dBm"; + description + "The power in dBm."; + } + + typedef power-dbm-or-null { + type union { + type power-dbm; + type empty; + } + description + "The power in dBm, when it is known or an empty value when the + power is not known."; + } + + typedef decimal-5 { + type decimal64 { + fraction-digits 5; + } + description + "A decimal64 value with five digits."; + } + + typedef decimal-5-or-null { + type union { + type decimal-5; + type empty; + } + description + "A decimal64 value with five digits, when the value is known + or an empty value when the value is not known."; + } + + typedef psd { + type decimal64 { + fraction-digits 16; + } + units "W/Hz"; + description + "The power spectral density (PSD). + + Typical value : 3.9 E-14, resolution 0.1nW/MHz."; + reference + "ITU-T G.9700 (07/2019): Fast access to subscriber terminals + (G.fast) - Power spectral density specification"; + } + + typedef psd-or-null { + type union { + type psd; + type empty; + } + description + "The PSD, when it is known or an empty value when the PSD is + not known."; + } + + typedef decimal-18 { + type decimal64 { + fraction-digits 18; + } + description + "A decimal64 value with eighteen digits."; + } + + typedef decimal-18-or-null { + type union { + type decimal-18; + type empty; + } + description + "A decimal64 value with eighteen digits, when the value is + known or an empty value when the value is not known."; + } + + /* + * Groupings + */ + + grouping l0-label-range-info { + description + "Common grouping used to define WSON, flexi-grid and WDM label + ranges. + + When used to define a WSON label range, this grouping SHOULD + be used together with the wson-label-start-end and + wson-label-step groupings to provide WSON technology-specific + label information to the models which use the + label-restriction-info grouping defined in the module + ietf-te-types."; + leaf grid-type { + type identityref { + base l0-grid-type; + } + description + "The type of WDM grid."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable + (LSC), Label Switching Routers + ITU-T G.694.2 (12/2003): Spectral grids for WDM + applications: CWDM wavelength grid"; + } + leaf priority { + type uint8; + description + "Priority in Interface Switching Capability Descriptor + (ISCD)."; + reference + "RFC 4203: OSPF Extensions in Support of Generalized + Multi-Protocol Label Switching (GMPLS)"; + } + } + + grouping wson-label-start-end { + description + "The WSON label-start or label-end used to specify WSON label + range. + + This grouping is dependent on the range-type defined in the + l0-label-range-info grouping. + + This grouping SHOULD be used together with the + l0-label-range-info and wson-label-step groupings to provide + WSON technology-specific label information to the models which + use the label-restriction-info grouping defined in the module + ietf-te-types."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) + Label Switching Routers"; + choice grid-type { + description + "Label for DWDM or CWDM grid"; + case dwdm { + leaf dwdm-n { + when 'derived-from-or-self(../../../grid-type, ' + + '"l0-types:wson-grid-dwdm")' { + description + "Valid only when grid type is DWDM."; + } + type dwdm-n; + description + "The central frequency of DWDM."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable + (LSC) Label Switching Routers"; + } + } + case cwdm { + leaf cwdm-n { + when 'derived-from-or-self(../../../grid-type, ' + + '"l0-types:wson-grid-cwdm")' { + description + "Valid only when grid type is CWDM."; + } + type cwdm-n; + description + "Channel wavelength computing input."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable + (LSC) Label Switching Routers"; + } + } + } + } + + grouping wson-label-step { + description + "Label step information for WSON. + + This grouping is dependent on the range-type defined in the + l0-label-range-info grouping. + + This grouping SHOULD be used together with the + l0-label-range-info and wson-label-start-end groupings to + provide WSON technology-specific label information to the + models which use the label-restriction-info grouping defined + in the module ietf-te-types."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) + Label Switching Routers + ITU-T G.694.2 (12/2003): Spectral grids for WDM applications: + CWDM wavelength grid"; + choice l0-grid-type { + description + "Grid type: DWDM, CWDM, etc."; + case dwdm { + leaf wson-dwdm-channel-spacing { + when 'derived-from-or-self(../../grid-type, ' + + '"l0-types:wson-grid-dwdm")' { + description + "Valid only when grid type is DWDM."; + } + type identityref { + base dwdm-ch-spc-type; + } + description + "Label-step is the channel spacing (GHz), e.g., 100.000, + 50.000, 25.000, or 12.500 GHz for DWDM."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable + (LSC) Label Switching Routers"; + } + } + case cwdm { + leaf wson-cwdm-channel-spacing { + when 'derived-from-or-self(../../grid-type, ' + + '"l0-types:wson-grid-cwdm")' { + description + "Valid only when grid type is CWDM."; + } + type identityref { + base cwdm-ch-spc-type; + } + description + "Label-step is the channel spacing (nm), i.e., 20 nm + for CWDM, which is the only value defined for CWDM."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable + (LSC) Label Switching Routers"; + } + } + } + } + + grouping wson-label-hop { + description + "Generic label-hop information for WSON."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) + Label Switching Routers"; + choice grid-type { + description + "Label for DWDM or CWDM grid."; + case dwdm { + choice single-or-super-channel { + description + "Single or super channel."; + case single { + leaf dwdm-n { + type dwdm-n; + description + "The given value 'N' is used to determine the + nominal central frequency."; + reference + "ITU-T G.694.1 (10/2020): Spectral grids for WDM + applications: DWDM frequency grid"; + } + } + case super { + leaf-list subcarrier-dwdm-n { + type dwdm-n; + description + "The given values 'N' are used to determine the + nominal central frequency for each subcarrier + channel."; + reference + "ITU-T G.694.1 (10/2020): Spectral grids for WDM + applications: DWDM frequency grid"; + } + } + } + } + case cwdm { + leaf cwdm-n { + type cwdm-n; + description + "The given value 'N' is used to determine the nominal + central wavelength."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable + (LSC) Label Switching Routers"; + } + } + } + } + + grouping flexi-grid-label-range-info { + description + "Flexi-grid-specific label range related information. + + This grouping SHOULD be used together with the + flexi-grid-label-start-end and flexi-grid-label-step groupings + to provide flexi-grid technology-specific label information to + the models which use the label-restriction-info grouping + defined in the module ietf-te-types."; + uses l0-label-range-info; + container flexi-grid { + description + "flexi-grid definition"; + leaf slot-width-granularity { + type identityref { + base flexi-slot-width-granularity; + } + default "l0-types:flexi-swg-12p5ghz"; + description + "Minimum space between slot widths."; + reference + "RFC 8363: GMPLS OSPF-TE Extensions in Support of + Grid Dense Wavelength Division Multiplexing + (DWDM) Networks"; + } + leaf min-slot-width-factor { + type uint16 { + range "1..max"; + } + description + "A multiplier of the slot width granularity, indicating + the minimum slot width supported by an optical port. + + Minimum slot width is calculated by: + Minimum slot width (GHz) = + min-slot-width-factor * slot-width-granularity."; + reference + "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi- + Grid Dense Wavelength Division Multiplexing + (DWDM) Networks"; + } + leaf max-slot-width-factor { + type uint16 { + range "1..max"; + } + must '. >= ../min-slot-width-factor' { + error-message + "Maximum slot width must be greater than or equal to + minimum slot width."; + } + description + "A multiplier of the slot width granularity, indicating + the maximum slot width supported by an optical port. + + Maximum slot width is calculated by: + Maximum slot width (GHz) = + max-slot-width-factor * slot-width-granularity + + If specified, maximum slot width must be greater than or + equal to minimum slot width. If not specified, maximum + slot width is equal to minimum slot width."; + reference + "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi- + Grid Dense Wavelength Division Multiplexing + (DWDM) Networks"; + } + } + } + + grouping flexi-grid-label-start-end { + description + "Common grouping used to define the value 'N' which is used to + determine the nominal central frequency (e.g., as the + flexi-grid label-start or label-end used to specify flexi-grid + label range). + + When used to define a flexi-grid label range, this grouping + SHOULD be used together with the flexi-grid-label-range-info + and flexi-grid-label-step groupings to provide flexi-grid + technology-specific label information to the models which use + the label-restriction-info grouping defined in the module + ietf-te-types."; + reference + "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda + Switch Capable (LSC) Label Switching Routers"; + leaf flexi-n { + type flexi-n; + description + "The given value 'N' is used to determine the nominal + central frequency. + + As described in Section 3.1 of RFC 8363, the range of + available nominal central frequencies are advertised for + m=1, which means that for an available central frequency n, + the frequency slot from central frequency n-1 to central + frequency n+1 is available."; + } + } + + grouping flexi-grid-label-step { + description + "Label step information for flexi-grid label ranges. + + This grouping SHOULD be used together with the + flexi-grid-label-range-info and flexi-grid-label-start-end + groupings to provide flexi-grid technology-specific label + information to the models which use the label-restriction-info + grouping defined in the module ietf-te-types."; + leaf flexi-grid-channel-spacing { + type identityref { + base flexi-ch-spc-type; + } + default "l0-types:flexi-ch-spc-6p25ghz"; + status obsolete; + description + "Label-step is the nominal central frequency granularity + (GHz), e.g., 6.25 GHz."; + reference + "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda + Switch Capable (LSC) Label Switching Routers"; + } + leaf flexi-ncfg { + type identityref { + base flexi-ncfg-type; + } + default "l0-types:flexi-ncfg-6p25ghz"; + description + "Label-step is the nominal central frequency granularity + (GHz), e.g., 6.25 GHz."; + reference + "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda + Switch Capable (LSC) Label Switching Routers"; + } + leaf flexi-n-step { + type uint8; + description + "This attribute defines the multiplier for the supported + values of 'N'. + + For example, given a grid with a nominal central frequency + granularity of 6.25 GHz, the granularity of the supported + values of the nominal central frequency could be 12.5 GHz. + In this case, the values of flexi-n should be even and this + constraint is reported by setting the flexi-n-step to 2. + + This attribute is also known as central frequency + granularity."; + reference + "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-Grid + Dense Wavelength Division Multiplexing (DWDM) + Networks"; + } + } + + grouping flexi-grid-frequency-slot { + description + "Flexi-grid frequency slot grouping."; + reference + "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda + Switch Capable (LSC) Label Switching Routers"; + uses flexi-grid-label-start-end; + leaf flexi-m { + type flexi-m; + description + "The given value 'M' is used to determine the slot width."; + } + } + + grouping flexi-grid-label-hop { + description + "Generic label-hop information for flexi-grid."; + reference + "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda + Switch Capable (LSC) Label Switching Routers"; + choice single-or-super-channel { + description + "single or super channel"; + case single { + uses flexi-grid-frequency-slot; + } + case super { + status obsolete; + list subcarrier-flexi-n { + key "flexi-n"; + status obsolete; + description + "List of subcarrier channels for flexi-grid super + channel."; + uses flexi-grid-frequency-slot { + status obsolete; + } + } + } + case multi { + container frequency-slots { + description + "The top level container for the list of frequency + slots used for flexi-grid super channel."; + list frequency-slot { + key "flexi-n"; + min-elements 2; + description + "List of frequency slots used for flexi-grid super + channel."; + uses flexi-grid-frequency-slot; + } + } + } + } + } + + grouping wdm-label-range-info { + description + "Label range information for WDM. + + This grouping SHOULD be used together with the + wdm-label-start-end and wdm-label-step groupings to provide + WDM technology-specific label information to the models which + use the label-restriction-info grouping defined in the module + ietf-te-types."; + container wdm-label-range { + description + "Label range information for WDM."; + uses l0-label-range-info; + container flexi-grid { + when 'derived-from-or-self(../grid-type, ' + + '"l0-types:flexi-grid-dwdm")' { + description + "Applicable only when the grid type is flexi-grid-dwdm."; + } + description + "flexi-grid definition."; + leaf slot-width-granularity { + type identityref { + base flexi-slot-width-granularity; + } + default "l0-types:flexi-swg-12p5ghz"; + description + "Minimum space between slot widths."; + reference + "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi- + Grid Dense Wavelength Division Multiplexing + (DWDM) Networks"; + } + leaf min-slot-width-factor { + type uint16 { + range "1..max"; + } + description + "A multiplier of the slot width granularity, indicating + the minimum slot width supported by an optical port. + + Minimum slot width is calculated by: + Minimum slot width (GHz) = + min-slot-width-factor * slot-width-granularity."; + reference + "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi- + Grid Dense Wavelength Division Multiplexing + (DWDM) Networks"; + } + leaf max-slot-width-factor { + type uint16 { + range "1..max"; + } + must '. >= ../min-slot-width-factor' { + error-message + "Maximum slot width must be greater than or equal to + minimum slot width."; + } + description + "A multiplier of the slot width granularity, indicating + the maximum slot width supported by an optical port. + + Maximum slot width is calculated by: + Maximum slot width (GHz) = + max-slot-width-factor * slot-width-granularity + + If specified, maximum slot width must be greater than or + equal to minimum slot width. If not specified, maximum + slot width is equal to minimum slot width."; + reference + "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi- + Grid Dense Wavelength Division Multiplexing + (DWDM) Networks"; + } + } + } + } + + grouping wdm-label-start-end { + description + "The WDM label-start or label-end used to specify DWDM and + CWDM label ranges. + + This grouping is dependent on the range-type defined in the + wdm-label-range-info grouping. + + This grouping SHOULD be used together with the + wdm-label-range-info and wdm-label-step groupings to provide + WDM technology-specific label information to the models which + use the label-restriction-info grouping defined in the module + ietf-te-types."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) + Label Switching Routers + RFC 7699: Generalized Labels for the Flexi-Grid in Lambda + Switch Capable (LSC) Label Switching Routers"; + container wdm-label { + description + "Label start or label end for WDM. + + The format of the label depends on the type of WDM grid + specified in the 'grid-type' leaf defined in the + wdm-label-range-info grouping."; + leaf dwdm-n { + when 'derived-from-or-self(../../../../wdm-label-range' + + '/grid-type, "l0-types:wson-grid-dwdm")' { + description + "Valid only when grid type is a fixed DWDM grid."; + } + type dwdm-n; + description + "The given value 'N' is used to determine the + nominal central frequency on a DWDM fixed grid."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable + (LSC) Label Switching Routers"; + } + leaf cwdm-n { + when 'derived-from-or-self(../../../../wdm-label-range' + + '/grid-type, "l0-types:wson-grid-cwdm")' { + description + "Valid only when grid type is a CWDM grid."; + } + type cwdm-n; + description + "The given value 'N' is used to determine the nominal + central wavelength on a CWDM fixed grid."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable + (LSC) Label Switching Routers"; + } + uses flexi-grid-label-start-end { + when 'derived-from-or-self(../../../wdm-label-range' + + '/grid-type, "l0-types:flexi-grid-dwdm")' { + description + "Valid only when grid type is a flexible DWDM grid."; + } + } + } + } + + grouping wdm-label-step { + description + "The WDM label-step used to specify DWDM and CWDM label + ranges. + + This grouping is dependent on the range-type defined in the + wdm-label-range-info grouping. + + This grouping SHOULD be used together with the + wdm-label-range-info and wdm-label-start-end groupings to + provide WDM technology-specific label information to the + models which use the label-restriction-info grouping defined + in the module ietf-te-types."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC) + Label Switching Routers + RFC 7699: Generalized Labels for the Flexi-Grid in Lambda + Switch Capable (LSC) Label Switching Routers + RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-Grid + Dense Wavelength Division Multiplexing (DWDM) + Networks"; + container wdm-label-step { + description + "Label step for WDM. + + The format of the label depends on the type of WDM grid + specified in the 'grid-type' leaf defined in the + wdm-label-range-info grouping."; + leaf wson-dwdm-channel-spacing { + when 'derived-from-or-self(../../../wdm-label-range' + + '/grid-type, "l0-types:wson-grid-dwdm")' { + description + "Valid only when grid type is a fixed DWDM grid."; + } + type identityref { + base dwdm-ch-spc-type; + } + description + "The channel spacing (GHz) of a fixed DWDM grid, e.g., + 100 GHz, 50 GHz, 25 GHz, or 12.5 GHz."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable + (LSC) Label Switching Routers"; + } + leaf wson-cwdm-channel-spacing { + when 'derived-from-or-self(../../../wdm-label-range' + + '/grid-type, "l0-types:wson-grid-cwdm")' { + description + "Valid only when grid type is a CWDM grid."; + } + type identityref { + base cwdm-ch-spc-type; + } + description + "The channel spacing (nm) of a fixed CWDM grid, e.g., 20nm + (which is the only standardized value)."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable + (LSC) Label Switching Routers"; + } + container flexi-grid-cfg { + when 'derived-from-or-self(../../../wdm-label-range' + + '/grid-type, "l0-types:flexi-grid-dwdm")' { + description + "Valid only when grid type is a flexible DWDM grid."; + } + description + "The Central Frequency Granularity (CFG) of a flexible DWDM + grid (flexi-grid), defined as a multiplier of the Nominal + central frequency granularity (NCFG)."; + uses flexi-grid-label-step; + } + } + } + + grouping wdm-label-hop { + description + "Generic label-hop information for DWDM and CWDM labels."; + container wdm-label { + description + "Label hop for WDM."; + choice grid-type { + description + "Label for DWDM or CWDM grid."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable + (LSC) Label Switching Routers"; + case fixed-dwdm { + choice fixed-single-or-multi-channel { + description + "Single channel or multichannel."; + case single { + leaf dwdm-n { + type dwdm-n; + description + "The given value 'N' is used to determine the + nominal central frequency."; + } + } + case multi { + leaf-list subcarrier-dwdm-n { + type dwdm-n; + min-elements 2; + description + "The given values 'N' are used to determine the + nominal central frequency for each subcarrier + channel."; + reference + "ITU-T G.694.1 (10/2020): Spectral grids for WDM + applications: DWDM frequency grid"; + } + } + } + } + case cwdm { + leaf cwdm-n { + type cwdm-n; + description + "The given value 'N' is used to determine the nominal + central wavelength."; + reference + "RFC 6205: Generalized Labels for Lambda-Switch-Capable + (LSC) Label Switching Routers"; + } + } + case flexi-grid { + uses flexi-grid-label-hop; + } + } + } + } + + grouping transceiver-capabilities { + description + "This grouping is intended to be used for reporting the + capabilities of a transceiver. + + When this grouping is used, the explicit-mode container shall + be augmented with a leafref to an explicit mode template with + the proper XPath which depends on where this grouping is + actually used."; + reference + "RFC ZZZZ: A YANG Data Model for Optical Impairment-aware + Topology."; + container supported-modes { + presence + "When present, it indicates that the modes supported by a + transceiver are reported."; + config false; + description + "The top level container for the list supported + transceiver's modes."; + list supported-mode { + key "mode-id"; + min-elements 1; + description + "The list of supported transceiver's modes."; + leaf mode-id { + type string { + length "1..255"; + } + description + "An identifier for the supported transceiver's mode."; + } + choice mode { + mandatory true; + description + "Indicates whether the transceiver's mode is a standard + mode, an organizational mode or an explicit mode."; + case G.698.2 { + uses standard-mode; + uses common-standard-organizational-mode; + uses common-all-modes; + } + case organizational-mode { + container organizational-mode { + description + "The set of attributes for an organizational mode"; + uses organizational-mode; + uses common-standard-organizational-mode; + uses common-all-modes; + } + } + case explicit-mode { + container explicit-mode { + description + "The set of attributes for an explicit mode."; + uses common-all-modes; + container compatible-modes { + description + "Container for all the standard and organizational + modes supported by the transceiver's explicit + mode."; + leaf-list supported-application-code { + type leafref { + path "../../../../supported-mode/mode-id"; + } + must '../../../../' + + 'supported-mode[mode-id=current()]/' + + 'standard-mode' { + description + "The pointer is only for application codes + supported by transceiver."; + } + description + "List of pointers to the application codes + supported by the transceiver's explicit mode."; + } + leaf-list supported-organizational-mode { + type leafref { + path "../../../../supported-mode/mode-id"; + } + must '../../../../' + + 'supported-mode[mode-id=current()]/' + + 'organizational-mode' { + description + "The pointer is only for organizational modes + supported by transceiver."; + } + description + "List of pointers to the organizational modes + supported by the transceiver's explicit mode."; + } + } + } + } + } + } + } + } + + grouping standard-mode { + description + "Identifies an ITU-T G.698.2 standard application code."; + reference + "ITU-T G.698.2 v3.0 (11/2018): Amplified multichannel dense + wavelength division multiplexing applications + with single channel optical interfaces Optical + transport network, Clause 5.3"; + leaf standard-mode { + type standard-mode; + description + "Identifies an ITU-T G.698.2 standard application code. + + It MUST be a string with a format that follows the + nomenclature defined in clause 5.3 of ITU-T G.698.2."; + } + } + + grouping organizational-mode { + description + "Transponder operational mode supported by organizations or + vendor"; + reference + "RFC ZZZZ: A YANG Data Model for Optical Impairment-aware + Topology, Section 2.6.2"; + leaf operational-mode { + type operational-mode; + description + "configured organization- or vendor-specific + application identifiers (AI) supported by the transponder"; + } + leaf organization-identifier { + type organization-identifier; + description + "The identifier of the organization that defines the + organizational-mode."; + } + } + + grouping penalty-value { + description + "A common definition of the Optical Signal-to-Noise Ratio + (OSNR) penalty value used for describing multiple penalty + types (e.g., CD, PMD, or PDL)."; + leaf penalty-value { + type union { + type decimal-2 { + range "0..max"; + } + type empty; + } + units "dB"; + mandatory true; + description + "The OSNR penalty associated with the related optical + impairment at the receiver, when the value is known or an + empty value when the value is not known."; + } + } + + grouping explicit-mode { + description + "Attributes capabilities related to explicit transceiver's + mode. + + This grouping also contains the list of attributes related to + optical impairment limits for explicit mode (min OSNR, + max PMD, max CD, max PDL, Q-factor limit, etc.). + + In case of standard and operational mode the attributes are + implicit."; + leaf line-coding-bitrate { + type identityref { + base line-coding; + } + config false; + description + "Bit rate/line coding of the optical tributary signal."; + reference + "ITU-T G.698.2 v3.0 (11/2018): Amplified multichannel dense + wavelength division multiplexing applications + with single channel optical interfaces Optical + transport network, Clause 7.1.2"; + } + leaf bitrate { + type uint16; + units "Gbit/sec"; + config false; + description + "The gross bitrate (e.g., 100 or 200) of the optical + tributary signal."; + } + leaf max-diff-group-delay { + type decimal-2; + units "ps"; + config false; + description + "The maximum Differential Group Delay (DGD) the receiver can + tolerate."; + } + leaf max-chromatic-dispersion { + type decimal-2 { + range "0..max"; + } + units "ps/nm"; + config false; + description + "Maximum acceptable accumulated chromatic dispersion (CD) on + the receiver at Rx-power reference point + (rx-ref-channel-power) and in absence of other + impairments."; + reference + "RFC ZZZZ: A YANG Data Model for Optical + Impairment-aware Topology, Section 2.6.4"; + } + list cd-penalty { + key "cd-value"; + config false; + description + "Optional penalty associated with a given accumulated + chromatic dispersion (CD) value measured in + absence of other impairments. + + This list of pair CD and OSNR penalty can be used to + sample the function OSNR penalty = f(CD)."; + reference + "RFC ZZZZ: A YANG Data Model for Optical + Impairment-aware Topology, Section 2.6.4"; + leaf cd-value { + type decimal-2; + units "ps/nm"; + description + "The Chromatic Dispersion (CD)."; + } + uses penalty-value; + } + leaf max-polarization-mode-dispersion { + type decimal-2 { + range "0..max"; + } + units "ps"; + config false; + description + "Maximum acceptable accumulated polarization mode + dispersion (PMD) on the receiver at Rx-power reference point + (rx-ref-channel-power) and in absence of other impairments"; + reference + "ITU-T G.666 (02/2011): Characteristics of polarization + mode dispersion compensators and of receivers that + compensate for polarization mode dispersion + RFC ZZZZ: A YANG Data Model for Optical Impairment-aware + Topology, Section 2.4.6"; + } + list pmd-penalty { + key "pmd-value"; + config false; + description + "Optional penalty associated with a given accumulated + polarization mode dispersion (PMD) value measured in + absence of other impairments. + + This list of pair PMD and OSNR penalty can be used to + sample the function OSNR penalty = f(PMD)."; + reference + "RFC ZZZZ: A YANG Data Model for Optical Impairment-aware + Topology, Section 2.4.6"; + leaf pmd-value { + type decimal-2 { + range "0..max"; + } + units "ps"; + description + "The Polarization Mode Dispersion (PMD)."; + } + uses penalty-value; + } + leaf max-polarization-dependent-loss { + type power-loss-or-null; + config false; + mandatory true; + description + "Maximum acceptable accumulated polarization dependent + loss (PDL) on the receiver at Rx-power reference point + (rx-ref-channel-power) and in absence of other + impairments."; + reference + "RFC ZZZZ: A YANG Data Model for Optical Impairment-aware + Topology, Section 2.4.6"; + } + list pdl-penalty { + key "pdl-value"; + config false; + description + "Optional penalty associated with a given accumulated + polarization dependent loss (PDL) value, measured in + absence of other impairments. + + This list of pair PDL and OSNR penalty can be used to + sample the function OSNR penalty = f(PDL)."; + reference + "RFC ZZZZ: A YANG Data Model for Optical Impairment-aware + Topology, Section 2.4.6"; + leaf pdl-value { + type power-loss; + description + "Maximum acceptable accumulated polarization dependent + loss (PDL)."; + } + uses penalty-value; + } + leaf available-modulation-type { + type identityref { + base modulation; + } + config false; + description + "Modulation type the specific transceiver in the list + can support."; + } + leaf min-OSNR { + type snr; + units "dBm"; + config false; + description + "Minimum OSNR measured over 0.1 nm resolution bandwidth: + if received OSNR at Rx-power reference point + (rx-ref-channel-power) is lower than MIN-OSNR, an increased + level of bit-errors post-FEC needs to be expected."; + } + leaf rx-ref-channel-power { + type power-dbm; + config false; + description + "The channel power used as reference for defining penalties + and min-OSNR."; + } + list rx-channel-power-penalty { + key "rx-channel-power-value"; + config false; + description + "Optional penalty associated with a received power + lower than rx-ref-channel-power. + + This list of pair power and OSNR penalty can be used to + sample the function OSNR penalty = f(rx-channel-power)."; + leaf rx-channel-power-value { + type power-dbm; + units "dBm"; + description + "The Received Power."; + } + uses penalty-value; + } + leaf min-Q-factor { + type decimal-2; + units "dB"; + config false; + description + "The value of the Q factor at the FEC threshold + (fec-threshold)."; + reference + "ITU-T O.201 (07/2003): Q-factor test equipment to estimate + the transmission performance of optical channels"; + } + leaf available-baud-rate { + type decimal64 { + fraction-digits 1; + } + units "Bd"; + config false; + description + "Baud-rate the specific transceiver in + the list can support. + Baud-rate is the unit for symbol rate or modulation rate + in symbols per second or pulses per second. + It is the number of distinct symbol changes (signal events) + made to the transmission medium per second in a digitally + modulated signal or a line code"; + } + leaf roll-off { + type decimal64 { + fraction-digits 4; + range "0..1"; + } + config false; + description + "the roll-off factor (beta with values from 0 to 1) + identifies how the real signal shape exceed + the baud rate. If=0 it is exactly matching + the baud rate.If=1 the signal exceeds the + 50% of the baud rate at each side."; + } + leaf min-carrier-spacing { + type frequency-ghz; + config false; + description + "This attribute specifies the minimum nominal difference + between the carrier frequencies of two homogeneous OTSis + (which have the same optical characteristics but the central + frequencies) such that if they are placed next to each other + the interference due to spectrum overlap between them can be + considered negligible. + + In case of heterogeneous OTSi it is up to path computation + engine to determine the minimum distance between the carrier + frequency of the two adjacent OTSi."; + } + leaf available-fec-type { + type identityref { + base fec-type; + } + config false; + description + "Available FEC."; + } + leaf fec-code-rate { + type decimal64 { + fraction-digits 8; + range "0..max"; + } + config false; + description + "FEC-code-rate"; + } + leaf fec-threshold { + type decimal64 { + fraction-digits 8; + range "0..max"; + } + config false; + description + "Threshold on the BER, for which FEC + is able to correct errors"; + } + leaf in-band-osnr { + type snr; + config false; + description + "The OSNR defined within the bandwidth of the transmit + spectral excursion (i.e., between the nominal central + frequency of the channel and the -3.0dB points of the + transmitter spectrum furthest from the nominal central + frequency) measured at reference point Ss. + + The in-band OSNR is referenced to an optical bandwidth of + 0.1nm @ 193.7 THz or 12.5 GHz."; + reference + "OIF-400ZR-01.0: Implementation Agreement 400ZR"; + } + leaf out-of-band-osnr { + type snr; + config false; + description + "The ratio of the peak transmitter power to the integrated + power outside the transmitter spectral excursion. + + The spectral resolution of the measurement shall be better + than the maximum spectral width of the peak. + + The out-of-band OSNR is referenced to an optical bandwidth + of 0.1nm @ 193.7 THz or 12.5 GHz"; + reference + "OIF-400ZR-01.0: Implementation Agreement 400ZR"; + } + leaf tx-polarization-power-difference { + type power-ratio; + config false; + description + "The transmitter polarization dependent power difference + defined as the power difference between X and Y + polarizations."; + reference + "OIF-400ZR-01.0: Implementation Agreement 400ZR"; + } + leaf polarization-skew { + type decimal-2; + units "ps"; + config false; + description + "The X-Y skew, included as a fixed value in the receiver + polarization mode dispersion (PMD) tolerance limits."; + reference + "OIF-400ZR-01.0: Implementation Agreement 400ZR"; + } + } + + grouping common-standard-organizational-mode { + description + "Common attributes used by standard and organizational + transceiver's modes."; + leaf-list line-coding-bitrate { + type identityref { + base line-coding; + } + config false; + description + "The list of the bit rate/line coding of the optical + tributary signal supported by the transceiver. + + Reporting this list is optional when the standard or + organization mode supports only one bit rate/line coding."; + reference + "ITU-T G.698.2 v3.0 (11/2018): Amplified multichannel dense + wavelength division multiplexing applications + with single channel optical interfaces Optical + transport network, Clause 7.1.2"; + } + } + + grouping transceiver-tuning-range { + description + "Transceiver tuning range (f-min, f-max, f-granularity)"; + leaf min-central-frequency { + type frequency-thz; + description + "This parameter indicates the minimum frequency for the + transceiver tuning range."; + } + leaf max-central-frequency { + type frequency-thz; + description + "This parameter indicates the maximum frequency for the + transceiver tuning range."; + } + leaf transceiver-tunability-granularity { + type frequency-ghz; + description + "This parameter indicates the transceiver frequency + fine-tuning granularity e.g 3.125GHz or 0.001GHz."; + } + } + + grouping common-all-modes { + description + "Common attributes used by all transceiver's modes."; + container transceiver-tuning-range { + config false; + description + "Transceiver tuning range (f-min, f-max, f-granularity)"; + uses transceiver-tuning-range; + } + leaf tx-channel-power-min { + type power-dbm; + config false; + description + "The minimum output power of this interface"; + } + leaf tx-channel-power-max { + type power-dbm; + config false; + description + "The maximum output power of this interface"; + } + leaf rx-channel-power-min { + type power-dbm; + config false; + description + "The minimum input power of this interface"; + } + leaf rx-channel-power-max { + type power-dbm; + config false; + description + "The maximum input power of this interface"; + } + leaf rx-total-power-max { + type power-dbm; + config false; + description + "Maximum rx optical power for all the channels. + + It is applicable only to multichannel modes."; + } + } + + grouping common-transceiver-param { + description + "The common parameters of an optical transceiver, + that supplement the configured mode."; + uses common-transceiver-configured-param; + uses common-transceiver-readonly-param; + } + + grouping common-transceiver-configured-param { + description + "The configured parameters of an optical transceiver, + that supplement the configured mode."; + leaf line-coding-bitrate { + type identityref { + base line-coding; + } + description + "Bit rate/line coding of the optical tributary signal. + + Support of this attribute is optional when the configured + mode supports only one bit rate/line coding."; + reference + "ITU-T G.698.2 v3.0 (11/2018): Amplified multichannel dense + wavelength division multiplexing applications + with single channel optical interfaces Optical + transport network, Clause 7.1.2"; + } + leaf tx-channel-power { + type power-dbm-or-null; + description + "The current channel transmit power, when the value is + known or an empty value when the value is not known. + + The empty value MUST NOT be used when this attribute is + configured."; + } + } + + grouping common-transceiver-readonly-param { + description + "The common read-only parameters of an optical transceiver, + that supplement the configured mode."; + leaf rx-channel-power { + type power-dbm-or-null; + config false; + description + "The current channel received power, when the value is + known or an empty value when the value is not known."; + } + leaf rx-total-power { + type power-dbm-or-null; + config false; + description + "The current total received power, when the value is known + or an empty value when the value is not known."; + } + } + + grouping tunnel-attributes { + description + "Parameters for Layer0 (WSON or Flexi-Grid) Tunnels."; + leaf wavelength-assignment { + type identityref { + base wavelength-assignment; + } + description + "Wavelength Allocation Method."; + } + } + + grouping frequency-range { + description + "This grouping defines the lower and upper bounds of a + frequency range (e.g., a band). + + This grouping SHOULD NOT be used to define a frequency slot, + which SHOULD be defined using the n and m values instead."; + leaf lower-frequency { + type frequency-thz; + mandatory true; + description + "The lower frequency boundary of the + frequency range."; + } + leaf upper-frequency { + type frequency-thz; + must '. > ../lower-frequency' { + error-message + "The upper frequency must be greater than the lower + frequency."; + } + mandatory true; + description + "The upper frequency boundary of the + frequency range."; + } + } + + grouping frequency-range-with-identifier { + description + "This grouping extends the frequency-range with an identifier, + which used as a key when it is needed to define different + properties (e.g., optical impairments) for different + frequency 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 frequency-range; + } + } + + grouping path-constraints { + description + "Common attribute for Layer 0 path constraints to be used by + Layer 0 computation."; + leaf gsnr-extra-margin { + type snr { + range "0..max"; + } + default "0"; + description + "An additional margin to be added to the OSNR-min of the + transceiver when checking the estimated received Generalized + SNR (GSNR)."; + } + } + + grouping path-properties { + description + "Common attribute for reporting the Layer 0 computed path + properties."; + leaf estimated-gsnr { + type snr; + config false; + description + "The estimate received GSNR for the computed path."; + } + leaf estimated-eol-gsnr { + type snr; + config false; + description + "The estimate received GSNR for the computed path + degraded at the end of life."; + } + leaf estimated-lowest-gsnr { + type snr; + config false; + description + "The estimate lowest received GSNR for the computed path + among all possible wavelength channels along the same + path."; + } + } +} 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 index fe4a37cf3..06431396c 100644 --- 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 @@ -3,199 +3,272 @@ module ietf-lm-hierarchy { namespace "urn:ietf:params:xml:ns:yang:ietf-lm-hierarchy"; prefix lm; - import ietf-inet-types { prefix inet; } import ietf-yang-types { prefix yang; } + // NOTE: Removed unused import of ietf-inet-types organization - "IETF Network Modeling (NETMOD) Working Group"; + "IETF NETMOD (Network Modeling) Working Group"; contact "WG Web: WG List: - Author: Keenan Williams - "; + Author: Kevin 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; - } - } -} + "This module defines a YANG data model for hierarchical Language +Model (LM) nodes that coordinate inference, summarization and +escalation across tiny/small/large LM tiers. + +Copyright (c) 2025 IETF Trust and the persons identified as the +document authors. All rights reserved. + +This document is subject to BCP 78 and the IETF Trust's Legal +Provisions Relating to IETF Documents +(https://trustee.ietf.org/license-info) in effect on the date of +publication of this document. Please review these documents +carefully, as they describe your rights and restrictions with +respect to this document. Code Components extracted from this +document must include Revised BSD License text as described in +Section 4.e of the Trust Legal Provisions and are provided without +warranty as described in the Revised BSD License. + +This version of this YANG module is part of draft-williams-netmod-lm-hierarchy-topology-01; +see the Internet-Draft itself for full legal notices."; + reference + "RFC 7950: The YANG 1.1 Data Modeling Language + RFC 8407: Guidelines for Authors and Reviewers of YANG Data Model Documents"; + + revision 2025-07-06 { + description + "Initial revision for I-D draft-williams-netmod-lm-hierarchy-topology-01."; + reference + "I-D: draft-williams-netmod-lm-hierarchy-topology-01"; + } + + feature pluggable-token-validation { + description + "Indicates support for a pluggable token validation mechanism for + requests handled by LM nodes."; + } + + 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."; + } + } + + // Top-level configuration for LM hierarchy + container lm { + presence + "Enable LM hierarchy configuration on this device."; + description + "Presence of this container enables configuration and state for + the Language Model (LM) hierarchy on the device."; + + container node { + description + "Attributes describing this node within the LM hierarchy."; + + leaf node-id { + type string; + description + "Implementation-specific identifier for this LM node."; + } + + leaf node-type { + type identityref { base lm-node-type; } + description + "Classification of this node (tiny, small, large)."; + } + } + + container trust { + if-feature pluggable-token-validation; + description + "Configuration for token validation used to authorize LM + requests and actions."; + + 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 + "Validate a presented token against the active trust policy."; + input { + leaf token { + type string; + description + "Opaque bearer or structured token presented by a caller."; + } + } + output { + leaf valid { + type boolean; + description + "True if the token is valid per current trust policy."; + } + leaf reason { + type string; + description + "Human-readable reason when validation fails, or an + implementation-specific note when it succeeds."; + } + } + } + } + } + + rpc lm-request { + description + "Submit an LM request for processing within the hierarchy."; + + input { + uses auth-token-grouping; + leaf source-node { + type string; + description + "Identifier of the node submitting the request."; + } + leaf target-node { + type string; + description + "Desired target node identifier; implementations may ignore + and route based on policy and availability."; + } + leaf request-type { + type enumeration { + enum inference { + description "Perform inference over provided payload."; + } + enum summarization { + description "Summarize the provided payload."; + } + } + description + "The kind of operation requested."; + } + leaf payload { + type string; + description + "The operation payload. Encoding is implementation-specific + (e.g., JSON)."; + } + } + output { + leaf result { + type string; + description + "The result produced by the LM operation (implementation- + specific encoding, e.g., JSON)."; + } + leaf status { + type enumeration { + enum ok { + description "The request completed successfully."; + } + enum error { + description "The request failed; see result for details."; + } + } + description + "Status of the processed request."; + } + } + } + + rpc model-escalation { + description + "Request an escalation to a different LM tier (e.g., from tiny to + small/large) with rationale."; + + input { + uses auth-token-grouping; + leaf original-payload { + type string; + description + "Original payload requiring escalation."; + } + leaf reason { + type string; + description + "Reason for escalation (e.g., insufficient context, model + limitations, or policy)."; + } + } + output { + leaf resolution { + type string; + description + "Resolution or answer produced after escalation."; + } + leaf downstream-directive { + type string; + description + "Optional directive for downstream workers/coordinators."; + } + } + } + + notification lm-heartbeat { + description + "Periodic heartbeat emitted by LM nodes to advertise presence and + health."; + + leaf sender-node { + type string; + description + "Identifier of the node emitting the heartbeat."; + } + leaf status { + type enumeration { + enum alive { + description "Node is reachable and operating nominally."; + } + enum degraded { + description "Node is reachable but operating with reduced capacity."; + } + enum unreachable { + description "Node is currently unreachable."; + } + } + description + "Operational status reported by the node."; + } + leaf timestamp { + type yang:date-and-time; + description + "Timestamp for the emitted heartbeat."; + } + } + } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-nd@2024-06-27.yang b/experimental/ietf-extracted-YANG-modules/ietf-nd@2025-08-26.yang similarity index 74% rename from experimental/ietf-extracted-YANG-modules/ietf-nd@2024-06-27.yang rename to experimental/ietf-extracted-YANG-modules/ietf-nd@2025-08-26.yang index a210357b5..03b3083b8 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-nd@2024-06-27.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-nd@2025-08-26.yang @@ -1,8 +1,11 @@ module ietf-nd { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-nd"; - prefix v6nd; + prefix nd; + import ietf-inet-types { + prefix inet; + } import ietf-yang-types { prefix yang; reference @@ -20,10 +23,10 @@ module ietf-nd { } organization - "IETF Routing Area Working Group (rtgwg)"; + "IETF IPv6 Maintenance Working Group (6man)"; contact - "WG Web: - WG List: + "WG Web: + WG List: Author: Fan Zhang @@ -33,19 +36,18 @@ module ietf-nd { Author: Jiayuan Hu "; - description - "This YANG module defines a YANG data model to configure and - manage IPv6 address resolution based on IPv6 Neighbor - Discovery (ND) protocol and other related functions, including - proxy Neighbor Advertisement, Neighbor Unreachability - Detection (NUD), and Duplicate Address Detection (DAD). + "This YANG module defines a YANG data model to configure and manage + IPv6 Neighbor Discovery (ND) and related functions, including + IPv6 address resolution, redirect function, proxy Neighbor + Advertisement, Neighbor Unreachability Detection (NUD), Duplicate + Address Detection (DAD), and Enhanced Duplicate Address Detection. 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) 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 @@ -66,20 +68,21 @@ module ietf-nd { they appear in all capitals, as shown here."; reference "RFC4861: Neighbor Discovery for IP version 6 (IPv6) - RFC4862: IPv6 Stateless Address Autoconfiguration"; + RFC4862: IPv6 Stateless Address Autoconfiguration + RFC7527: Enhanced Duplicate Address Detection"; - revision 2024-06-27 { + revision 2025-08-26 { description "Init revision"; reference - "RFC XXXX: YANG Data Model for IPv6 Address Resolution"; + "RFC XXXX: YANG Data Model for IPv6 Neighbor Discovery"; } /* Data nodes */ + container nd { description - "Global parameters for IPv6 address resolution based on IPv6 - ND"; + "Global parameters for IPv6 ND."; leaf stale-timeout { type uint32; units "second"; @@ -95,10 +98,10 @@ module ietf-nd { augment "/if:interfaces/if:interface/ip:ipv6" { description "Augments interface configuration and state data with - parameters of IPv6 address resolution."; + parameters of IPv6 ND."; container nd { description - "Parameters of IPv6 address resolution."; + "Parameters of IPv6 ND."; leaf dynamic-discovery { type boolean; default "true"; @@ -156,7 +159,18 @@ module ietf-nd { "RFC4861: Neighbor Discovery for IP version 6 (IPv6) Section 5.3"; } - + leaf redirect { + type boolean; + default "false"; + description + "Controls whether sending of ICMP Redirect messages + on the interface is enabled or disabled. + true - Sending of ICMP Redirect messages is enabled, + false - Sending of ICMP Redirect messages is disabled."; + reference + "RFC4861: Neighbor Discovery for IP version 6 (IPv6) + Section 8"; + } container proxy-na { description "Parameters of proxy Neighbor Advertisements."; @@ -179,13 +193,34 @@ module ietf-nd { "RFC4861: Neighbor Discovery for IP version 6 (IPv6) Section 7.2.8"; } - + container enhanced-dad { + description + "Parameters of Enhanced DAD algorithm."; + leaf enable { + type boolean; + default "false"; + description + "Controls whether Enhanced DAD algorithm is enabled or + disabled."; + } + leaf enhanced-dad-auto-resolve { + type boolean; + default "false"; + description + "Controls whether the automated action is taken when + detecting duplicates. A trusted router can log a system + management message, drop the received ND message, and + block the untrusted IPv6 host nodes from which the + duplicate NS(DAD) or NA message was received."; + } + reference + "RFC7527: Enhanced Duplicate Address Detection"; + } container statistics { config false; description "A collection of interface-related statistics about IPv6 ND messages."; - leaf in-ns-pkts { type yang:counter32; description @@ -206,6 +241,11 @@ module ietf-nd { description "The number of received Router Advertisement packets."; } + leaf in-redirect-pkts { + type yang:counter32; + description + "The number of received Redirect packets."; + } leaf out-ns-pkts { type yang:counter32; description @@ -226,6 +266,11 @@ module ietf-nd { description "The number of sent Router Advertisement packets."; } + leaf out-redirect-pkts { + type yang:counter32; + description + "The number of sent Redirect packets."; + } } } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid-nmda-compare@2023-05-01.yang b/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid-nmda-compare@2025-08-01.yang similarity index 94% rename from experimental/ietf-extracted-YANG-modules/ietf-netconf-txid-nmda-compare@2023-05-01.yang rename to experimental/ietf-extracted-YANG-modules/ietf-netconf-txid-nmda-compare@2025-08-01.yang index 301cea712..c6ed657c2 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid-nmda-compare@2023-05-01.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid-nmda-compare@2025-08-01.yang @@ -23,11 +23,11 @@ module ietf-netconf-txid-nmda-compare { WG List: Author: Jan Lindblad - "; + "; description "NETCONF Transaction ID aware operations for NMDA Compare. - Copyright (c) 2022 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 @@ -48,7 +48,7 @@ module ietf-netconf-txid-nmda-compare { they appear in all capitals, as shown here. "; - revision 2023-05-01 { + revision 2025-08-01 { description "Initial revision"; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid-yang-push@2022-04-01.yang b/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid-yang-push@2025-08-01.yang similarity index 95% rename from experimental/ietf-extracted-YANG-modules/ietf-netconf-txid-yang-push@2022-04-01.yang rename to experimental/ietf-extracted-YANG-modules/ietf-netconf-txid-yang-push@2025-08-01.yang index a83deefc7..a46f1b364 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid-yang-push@2022-04-01.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid-yang-push@2025-08-01.yang @@ -27,11 +27,11 @@ module ietf-netconf-txid-yang-push { WG List: Author: Jan Lindblad - "; + "; description "NETCONF Transaction ID aware operations for YANG Push. - Copyright (c) 2022 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 @@ -52,7 +52,7 @@ module ietf-netconf-txid-yang-push { they appear in all capitals, as shown here. "; - revision 2022-04-01 { + revision 2025-08-01 { description "Initial revision"; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid@2023-03-01.yang b/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid@2025-08-01.yang similarity index 98% rename from experimental/ietf-extracted-YANG-modules/ietf-netconf-txid@2023-03-01.yang rename to experimental/ietf-extracted-YANG-modules/ietf-netconf-txid@2025-08-01.yang index aabbb0a63..d5adbf985 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid@2023-03-01.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid@2025-08-01.yang @@ -31,7 +31,7 @@ module ietf-netconf-txid { WG List: Author: Jan Lindblad - "; + "; description "NETCONF Transaction ID aware operations for NMDA. @@ -56,7 +56,7 @@ module ietf-netconf-txid { they appear in all capitals, as shown here. "; - revision 2023-03-01 { + revision 2025-08-01 { description "Initial revision"; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-network-base@2025-07-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-network-base@2025-07-03.yang index 89b52dc26..d5f14e848 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-network-base@2025-07-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-network-base@2025-07-03.yang @@ -194,8 +194,8 @@ module ietf-network-base { description "This object defines an abstract base for general purpose network/transport endpoint pattern matching. - Each derived type is expected to match only a single derived - IDENT based on the 'abstract-endpoint' object. + Each derived type is expected to match only a single object + derived from <./IDENT/abstract-endpoint>. Each pattern SHALL specify in its descriptions which types of endpoints can possibly match the pattern."; amm:abstract true; @@ -209,4 +209,25 @@ module ietf-network-base { amm:base "./IDENT/abstract-endpoint-pattern"; } } + + // general-purpose leaf IDENTs + amm:ident uri-regexp-pattern { + amm:enum 2; + description + "This object defines a means to match a full URI using a + regular expression limited to I-Regexp compatibility. + This only allows matching text values, more specifically those that + already match the <./typedef/uri> semantic type."; + reference + "RFC 9485: I-Regexp: An Interoperable Regular Expression Format"; + amm:base "//ietf/network-base/ident/abstract-endpoint-pattern"; + amm:parameter regexp { + description + "The I-Regexp text pattern to match. + In accordance with that definition, this pattern is implicitly + anchored to the start and end of the text being matched + (i.e. it is always a full match)."; + amm:type "/aritype/textstr"; + } + } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-network-inventory-topology@2025-03-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-network-inventory-topology@2025-03-03.yang index 25db1c964..3c6e4f312 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-network-inventory-topology@2025-03-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-network-inventory-topology@2025-03-03.yang @@ -50,16 +50,19 @@ module ietf-network-inventory-topology { 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."; + All revisions of IETF and IANA published modules can be found + at the YANG Parameters registry group + (https://www.iana.org/assignments/yang-parameters). + + This version of this YANG module is part of RFC XXXX; see + the RFC itself for full legal notices."; revision 2025-03-03 { description "Initial revision."; reference - "RFC XXXX: A YANG Data Model for Network Inventory Mapping - Topology"; + "RFC XXXX: A Network Data Model for Inventory Topology + Mapping"; } /* features */ @@ -98,7 +101,7 @@ module ietf-network-inventory-topology { grouping tp-inventory-feature-attributes { description "Network Inventory mapping Termination Point (TP) scope - attributes"; + attributes."; container inventory-mapping-attributes { if-feature "topology-to-inventory-navigate"; description @@ -109,7 +112,7 @@ module ietf-network-inventory-topology { type string; config false; description - "1:1 mapping to physical interface name (e.g., eth0/1)"; + "1:1 mapping to physical interface name (e.g., eth0/1)."; } } } @@ -158,15 +161,14 @@ module ietf-network-inventory-topology { uses tp-inventory-feature-attributes; } - /* Augment the network-inventory to add - topology navigate */ + /* Augment the network-inventory to add topology navigate */ augment "/nwi:network-inventory/nwi:network-elements" + "/nwi:network-element" { if-feature "inventory-to-topology-navigate"; description "Augments the network element with 1:1 mapping with the network - the element is part of."; + the element is part of."; uses nw:node-ref; } } 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 index 57d3894a1..b239eb48e 100644 --- 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 @@ -17,6 +17,7 @@ module ietf-nwi-passive-inventory { //RFC Editor: replace YYYY with actual RFC number //and remove this note } + organization "IETF Network Inventory YANG (ivy) Working Group"; contact @@ -194,7 +195,6 @@ module ietf-nwi-passive-inventory { description "Branch cable."; } - identity passive-port-type { description "Base identity for passive port types."; @@ -339,7 +339,6 @@ module ietf-nwi-passive-inventory { description "Common attributes of cables applicable to the cable and its child cables."; - leaf id { type string; description diff --git a/experimental/ietf-extracted-YANG-modules/ietf-ol@2024-04-26.yang b/experimental/ietf-extracted-YANG-modules/ietf-ol@2024-04-26.yang index 3ef39b837..475c4f32a 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-ol@2024-04-26.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-ol@2024-04-26.yang @@ -25,7 +25,7 @@ module ietf-ol { description "This YANG module to indicate ownership and licensing. - 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 @@ -68,8 +68,9 @@ module ietf-ol { "Either choose a standard license type or point to one of your own."; case spdx-lt { - leaf-list spdx-tags { + leaf-list spdx-tag { type string; + min-elements 1; description "SPDX License Identifier, as indicated at https://spdx.org/licenses/"; @@ -78,6 +79,7 @@ module ietf-ol { case url { leaf-list license-info { type inet:uri; + min-elements 1; description "A URL pointing to licensing information."; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2025-07-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2025-07-03.yang index e47c82b04..066f812b0 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2025-07-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2025-07-03.yang @@ -87,37 +87,37 @@ module ietf-otn-slice-mpi { * Groupings */ - grouping otn-link-slice-profile { + grouping otn-nrp-profile { description - "Profile of an OTN link slice."; - choice otn-slice-granularity { + "Profile of an OTN link Network Resource Partition (NRP)."; + choice otn-nrp-granularity { default "link"; description - "Link slice granularity."; + "Link nrp granularity."; case link { - leaf slice-id { + leaf nrp-id { type uint32; description - "Slice identifier"; + "NRP identifier"; } } case link-resource { - list slices { - key slice-id; + list nrps { + key nrp-id; description - "List of slices."; - leaf slice-id { + "List of NRPs."; + leaf nrp-id { type uint32; description - "Slice identifier"; + "NRP link resource identifier."; } choice technology { description "Data plane technology types."; case otn { - choice slice-bandwidth { + choice nrp-bandwidth { description - "Bandwidth specification for OTN slices."; + "Bandwidth specification for an OTN NRP."; case containers { uses l1-types:otn-link-bandwidth; } @@ -126,21 +126,12 @@ module ietf-otn-slice-mpi { type uint32; description "Number of OTN tributary slots allocated - for the slice."; + for the NRP."; } } } } } - leaf sliced-link-ref { - type leafref { - path "../../../../../nt:link/nt:link-id"; - } - config false; - description - "Relative reference to virtual links generated from - this TE link."; - } } } } @@ -158,7 +149,7 @@ module ietf-otn-slice-mpi { OTN topology type."; } description - "Augment OTN TE link attributes with slicing profile."; - uses otn-link-slice-profile; + "Augment OTN TE link attributes with NRP profile."; + uses otn-nrp-profile; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-petra@2025-05-12.yang b/experimental/ietf-extracted-YANG-modules/ietf-petra@2025-05-12.yang index 3b0de6e21..7722c039d 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-petra@2025-05-12.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-petra@2025-05-12.yang @@ -7,10 +7,16 @@ module ietf-petra { prefix ietf-inet-types; } + import ietf-power-and-energy { + prefix eo; + reference "draft-bcmj-green-power-and-energy-yang"; + } + organization - ""; + "IETF GREEN Working Group"; contact - ""; + "WG Web: + WG List: "; description "Initial YANG rendition of the PETRA Energy API, v1.0.1 @@ -58,8 +64,7 @@ module ietf-petra { { 'output': { 'success': { - 'watts-per-gigabit': '191.855', - 'carbon-intensity': '108' + 'watts-per-gigabit': '191.855' } } } @@ -83,11 +88,16 @@ module ietf-petra { description "Watts consumed per Gigabit transmitted"; } - leaf carbon-intensity { - type uint32; - units gCO2e/kWh; + leaf data-source-accuracy { + type identityref { base eo:data-source-accuracy; } description - "Grams of CO2 per kWh"; + "Accuracy classification of the watts-per-gigabit value, + using the GREEN data-source-accuracy hierarchy. + Implementations SHOULD populate this leaf to enable + consumers to assess reliability. For path-aggregated + values derived from multiple components, the RECOMMENDED + value is the LEAST accurate accuracy class among all + contributing energy objects."; } } @@ -111,7 +121,9 @@ module ietf-petra { "Destination IP address"; } leaf throughput { - type uint32; + type decimal64 { + fraction-digits 3; + } units Gb/s; mandatory true; description diff --git a/experimental/ietf-extracted-YANG-modules/ietf-platform-manifest@2025-02-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-platform-manifest@2025-02-21.yang index b35422ae6..876cc78f0 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-platform-manifest@2025-02-21.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-platform-manifest@2025-02-21.yang @@ -23,12 +23,14 @@ module ietf-platform-manifest { description "This module describes the platform information to be used as context of data collection from a given network element. The - contents of this model must be streamed along with the data - streamed from the network element so that the platform context - of the data collection can be retrieved later. + contents of this model must be streamed and stored along with + the data streamed and stored from the network element so that + the platform context of the data collection can be retrieved + when the data is used for analysis. The data content of this model should not change except on - upgrade or patching of the device. + software upgrade of the device, which might modify the + software or os version or the YANG library. Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. diff --git a/experimental/ietf-extracted-YANG-modules/ietf-rpki-rtr@2022-10-18.yang b/experimental/ietf-extracted-YANG-modules/ietf-rpki-rtr@2022-10-18.yang index 7d6b75afb..4a52b9c9b 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-rpki-rtr@2022-10-18.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-rpki-rtr@2022-10-18.yang @@ -102,7 +102,7 @@ module ietf-rpki-rtr { leaf max-number { type uint64; description - "Configures the maximum number of ROAs that can be + "Configures the maximum number of records that can be received from the RPKI cache server."; } leaf threshold-percentage { @@ -111,7 +111,7 @@ module ietf-rpki-rtr { } units "percent"; description - "Configures the threshold percentage for ROA maximum + "Configures the threshold percentage for record maximum number."; } leaf over-threshold-action { @@ -122,7 +122,7 @@ module ietf-rpki-rtr { } enum discard { description - "Discards excess ROAs."; + "Discards excess records."; } enum reconnect { description @@ -137,7 +137,7 @@ module ietf-rpki-rtr { } } description - "The action to taken when ROA number exceeds + "The action to taken when record number exceeds threshold."; } leaf reconnect-interval { @@ -149,59 +149,6 @@ module ietf-rpki-rtr { "Time interval for the reconnection timer."; } } - grouping aspa-overall-records { - description - "ASPAs received from all RPKI cache servers."; - list aspas { - key "customer-asn"; - description - "An entry of ASPA."; - leaf customer-asn { - type inet:as-number; - description - "The AS number of a customer."; - } - leaf server-address { - type inet:ip-address; - description - "IP address of the RPKI cache server."; - } - list provider-asns { - key "provider-asn"; - description - "Providers of the customer."; - leaf provider-asn { - type inet:as-number; - description - "The AS number of a provider."; - } - } - } - } - grouping aspa-server-records { - description - "ASPAs received from a RPKI cache server."; - list aspas { - key "customer-asn"; - description - "An entry of ASPA."; - leaf customer-asn { - type inet:as-number; - description - "The AS number of a customer."; - } - list provider-asns { - key "provider-asn"; - description - "Providers of the customer."; - leaf provider-asn { - type inet:as-number; - description - "The AS number of a provider."; - } - } - } - } augment "/rt:routing/rt:control-plane-protocols/" + "rt:control-plane-protocol" { when "derived-from-or-self(rt:type, 'rpki-rtr')" { @@ -287,11 +234,11 @@ module ietf-rpki-rtr { } enum ex-incr { description - "Incremental update of ROAs in progress."; + "Incremental update of records in progress."; } enum ex-full { description - "Full update of ROA records in progress."; + "Full update of records in progress."; } } config false; @@ -343,10 +290,10 @@ module ietf-rpki-rtr { } } } - container roa-limit { + container vrp-limit { description - "Limit of ROA records that can be received from the - RPKI cache server."; + "Limit of Validated ROA Payload records that can be + received from the RPKI cache server."; uses records-limit; } container aspa-limit { @@ -359,23 +306,23 @@ module ietf-rpki-rtr { config false; description "Statistics of the RPKI cache server."; - leaf total-roa-records { + leaf total-vrp-records { type yang:zero-based-counter64; description - "The total number of ROAs received - from the RPKI cache server."; + "The total number of Validated ROA Payloads + received from the RPKI cache server."; } - leaf ipv4-roa-records { + leaf ipv4-vrp-records { type yang:zero-based-counter64; description - "The number of ROAs for IPv4 prefixes received - from the RPKI cache server."; + "The number of Validated ROA Payloads for IPv4 + prefixes received from the RPKI cache server."; } - leaf ipv6-roa-records { + leaf ipv6-vrp-records { type yang:zero-based-counter64; description - "The number of ROAs for IPv6 prefixes received - from the RPKI cache server."; + "The number of Validated ROA Payloads for IPv6 + prefixes received from the RPKI cache server."; } leaf router-key-records { type yang:zero-based-counter64; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-rpki-table@2022-10-18.yang b/experimental/ietf-extracted-YANG-modules/ietf-rpki-table@2022-10-18.yang index eb158b084..0dab6e475 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-rpki-table@2022-10-18.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-rpki-table@2022-10-18.yang @@ -70,6 +70,26 @@ module ietf-rpki-table { description "Subject Key Identifier."; } + typedef ccr-hash { + type binary { + length 32; + } + description + "Canonical Cache Representation state hash. + + This represents a 256-bit SHA-256 hash of + the canonical representation of RPKI data as + defined in draft-ietf-sidrops-rpki-ccr. + + The hash provides a compact, verifiable + representation of the complete state of RPKI + validation data, enabling efficient synchronization + and consistency verification between caches."; + reference + "draft-ietf-sidrops-rpki-ccr: Canonical Cache + Representation for the Resource Public Key + Infrastructure (RPKI)"; + } grouping aspa-overall-records { description "ASPAs received from all RPKI cache servers."; @@ -103,36 +123,54 @@ module ietf-rpki-table { augment "/rt:routing" { description "RPKI tables augmentation of ietf-routing module."; - container roa-tables { + container vrp-tables { config false; description - "List of tables containing ROAs received from all RPKI - cache servers."; - list roa-table { + "List of tables containing Validated ROA Payloads + received from all RPKI cache servers."; + list vrp-table { key "name"; description - "Table of ROAs received from all RPKI cache servers."; + "Table of Validated ROA Payloads received from + all RPKI cache servers."; leaf name { type string; description - "Name of the ROA table."; + "Name of the Validated ROA Payload table."; + } + leaf ccr-roapayloadstate-hash { + type ccr-hash; + description + "CCR state hash for the ROA payload. + + This hash represents the canonical state of + this specific ROA entry as defined in the CCR + specification. It can be used to verify + the integrity and consistency of ROA data + between different RPKI cache implementations."; + reference + "draft-ietf-sidrops-rpki-ccr: Canonical Cache + Representation for the Resource Public Key + Infrastructure (RPKI)"; } container ipv4 { config false; description - "Container for IPv4 ROAs table."; - container roas { + "Container for IPv4 Validated ROA Payloads table."; + container vrps { config false; description - "ROAs received from the RPKI cache server."; - list roa { + "Validated ROA Payloads received from the RPKI + cache server."; + list vrp { key "prefix max-len asn source"; description - "An entry of ROA."; + "An entry of Validated ROA Payload."; leaf prefix { type inet:ipv4-prefix; description - "The IPv4 prefix of the ROA."; + "The IPv4 prefix of the Validated ROA + Payload."; } leaf max-len { type ipv4-pfx-len; @@ -143,7 +181,8 @@ module ietf-rpki-table { leaf asn { type inet:as-number; description - "The origin AS number of the ROA."; + "The origin AS number of the Validated + ROA Payload."; } leaf source { type union { @@ -176,19 +215,21 @@ module ietf-rpki-table { container ipv6 { config false; description - "Container for IPv6 ROAs table."; - container roas { + "Container for IPv6 Validated ROA Payloads table."; + container vrps { config false; description - "ROAs received from the RPKI cache server."; - list roa { + "Validated ROA Payloads received from the RPKI + cache server."; + list vrp { key "prefix max-len asn source"; description - "An entry of ROA."; + "An entry of Validated ROA Payload."; leaf prefix { type inet:ipv6-prefix; description - "The IPv6 prefix of the ROA."; + "The IPv6 prefix of the Validated ROA + Payload."; } leaf max-len { type ipv6-pfx-len; @@ -199,7 +240,8 @@ module ietf-rpki-table { leaf asn { type inet:as-number; description - "The origin AS number of the ROA."; + "The origin AS number of the Validated ROA + Payload."; } leaf source { type union { @@ -247,6 +289,21 @@ module ietf-rpki-table { description "Name of the router-key-table."; } + leaf ccr-routerkeystate-hash { + type ccr-hash; + description + "CCR state hash for the Router Key payload. + + This hash represents the canonical state of this + specific Router Key entry as defined in the CCR + specification. It enables efficient verification + of BGPsec router key data consistency across + different cache implementations."; + reference + "draft-ietf-sidrops-rpki-ccr: Canonical Cache + Representation for the Resource Public Key + Infrastructure (RPKI)"; + } container router-keys { config false; description @@ -300,6 +357,21 @@ module ietf-rpki-table { description "Name of the ASPA-table."; } + leaf ccr-aspapayloadstate-hash { + type ccr-hash; + description + "CCR state hash for the ASPA payload. + + This hash represents the canonical state of this + specific ASPA (Autonomous System Provider + Authorization) entry as defined in the CCR + specification. It facilitates consistency + checking for AS path validation data."; + reference + "draft-ietf-sidrops-rpki-ccr: Canonical Cache + Representation for the Resource Public Key + Infrastructure (RPKI)"; + } uses aspa-overall-records; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-schc-opt@2024-12-19.yang b/experimental/ietf-extracted-YANG-modules/ietf-schc-opt@2024-12-19.yang index cc2fda2ab..0a4839c2b 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-schc-opt@2024-12-19.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-schc-opt@2024-12-19.yang @@ -45,7 +45,6 @@ module ietf-schc-opt { It introduces a new leaf for Ack on Error defining the format of the SCHC Ack and add the possibility to send several bitmaps in a single answer."; - revision 2024-12-19 { description "Initial version for RFC YYYY "; 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 index 413cc7ecb..bb34b4e4d 100644 --- 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 @@ -172,24 +172,4 @@ module ietf-srv6-nexthop { 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@2025-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2025-07-07.yang index 9cc722e2c..dd84ee204 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2025-07-07.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2025-07-07.yang @@ -83,6 +83,7 @@ module ietf-srv6-static { "; + description "This YANG module defines the essential elements for the management of Static application for Segment-Routing with @@ -452,7 +453,6 @@ module ietf-srv6-static { (variant: PSP/USP/USD)"; } - container end-t { when "../end-behavior-type = 'srv6-types:End.T'" { description @@ -501,7 +501,6 @@ module ietf-srv6-static { "Table Id for lookup on updated DA (next segment)"; } } - container end-t_usp { when "../end-behavior-type = 'srv6-types:End.T_USP'" { description @@ -598,7 +597,6 @@ module ietf-srv6-static { "Table Id for lookup on updated DA (next segment)"; } } - container end-t_usp_usd { when "../end-behavior-type = 'srv6-types:End.T_USP_USD'" { description @@ -838,7 +836,6 @@ module ietf-srv6-static { packet toward the first hop configured in the policy. This is the SRv6 instantiation of a Binding SID. This behavior also adds an outer IPv6 header"; - // TODO presence "Mandatory child only if container is present"; leaf policy-name { @@ -1089,6 +1086,7 @@ 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 */ } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2025-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2025-07-07.yang index cd419452e..a7a13d96d 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2025-07-07.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2025-07-07.yang @@ -90,7 +90,6 @@ module ietf-srv6-types { // RFC Editor: replace XXXX with actual RFC number and remove // this note } - revision 2024-03-04 { description "Renamed some of End identities"; @@ -135,6 +134,7 @@ 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 @@ -183,6 +183,7 @@ module ietf-srv6-types { reference "RFC 8986"; } + identity End.X_PSP { base srv6-endpoint-type; description @@ -327,6 +328,7 @@ module ietf-srv6-types { reference "RFC 8986"; } + identity End.DT2U { base srv6-endpoint-type; description @@ -615,6 +617,7 @@ module ietf-srv6-types { // RFC Editor: replace with actual RFC number and remove this // note } + identity END.X.NEXT-CSID_USD { base srv6-endpoint-type; description diff --git a/experimental/ietf-extracted-YANG-modules/ietf-telemetry-message@2025-06-10.yang b/experimental/ietf-extracted-YANG-modules/ietf-telemetry-message@2025-06-10.yang index e041e2cf4..e7ca446f7 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-telemetry-message@2025-06-10.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-telemetry-message@2025-06-10.yang @@ -69,17 +69,17 @@ module ietf-telemetry-message { identity netconf { base session-protocol; description - "NETCONF RPC as described in RFC 6241."; + "NETCONF GET RPC as described in RFC 6241."; reference - "RFC 6241: NETCONF RPC."; + "RFC 6241: NETCONF GET RPC."; } identity restconf { base session-protocol; description - "RESTCONF HTTP as described in RFC 8040."; + "RESTCONF HTTP GET as described in RFC 8040."; reference - "RFC 8040."; + "RFC 8040: HTTP GET."; } feature network-node-manifest { diff --git a/experimental/ietf-extracted-YANG-modules/ietf-udp-notif-transport@2025-06-04.yang b/experimental/ietf-extracted-YANG-modules/ietf-udp-notif-transport@2025-06-04.yang index 6db963e11..e1712e15b 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-udp-notif-transport@2025-06-04.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-udp-notif-transport@2025-06-04.yang @@ -32,9 +32,7 @@ module ietf-udp-notif-transport { "WG Web: WG List: - Authors: Guangying Zheng - - Tianran Zhou + Authors: Tianran Zhou Thomas Graf diff --git a/experimental/ietf-extracted-YANG-modules/ietf-voucher-request@2023-01-10.yang b/experimental/ietf-extracted-YANG-modules/ietf-voucher-request@2023-01-10.yang index 5f65cd863..9d8e36640 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-voucher-request@2023-01-10.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-voucher-request@2023-01-10.yang @@ -9,13 +9,13 @@ module ietf-voucher-request { import ietf-voucher { prefix vch; description - "This module defines the format for a voucher, - which is produced by a pledge's manufacturer or - delegate (MASA) to securely assign a pledge to - an 'owner', so that the pledge may establish a secure - connection to the owner's network infrastructure"; + "This module defines the format for a Voucher, + which is produced by a Pledge's manufacturer or + delegate (MASA) to securely assign a Pledge to + an 'Owner', so that the Pledge may establish a secure + connection to the Owner's network infrastructure"; reference - "RFC XXXX: Voucher Artifact for + "RFC XXXX: A Voucher Artifact for Bootstrapping Protocols"; } @@ -33,229 +33,212 @@ module ietf-voucher-request { Author: Toerless Eckert Author: Qiufang Ma - "; + + Author: Esko Dijk + "; description - "This module defines the format for a voucher request. - It is a superset of the voucher itself. + "This module defines the format for a Voucher Request. + It is a superset of the Voucher itself. It provides content to the MASA for consideration - during a voucher request. + during a voucher request procedure and subsequent + Voucher creation. + + 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 + (https://www.rfc-editor.org/info/rfcXXXX); 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. - - Copyright (c) 2024 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. - - RFCEDITOR: please replace XXXX with the RFC number assigned. + they appear in all capitals, as shown here."; - 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."; + // RFCEDITOR: please replace XXXX in this entire code fragment + // with the RFC number assigned and remove this notice. revision 2023-01-10 { + description + "Updates and additions described by RFC XXXX"; + reference + "RFC XXXX: A Voucher Artifact for Bootstrapping Protocols"; + } + revision 2021-05-20 { description "Initial version"; reference - "RFC XXXX: Bootstrapping Remote Secure Key Infrastructure"; + "RFC 8995: Bootstrapping Remote Secure Key Infrastructure + (BRSKI)"; } grouping voucher-request-grouping { description "Grouping to allow reuse/extensions in future work."; uses vch:voucher-artifact-grouping { - refine "voucher/created-on" { - mandatory false; - } - refine "voucher/last-renewal-date" { + refine "last-renewal-date" { description "A last-renewal-date field is not valid in a voucher request, and any occurrence MUST be ignored"; } - refine "voucher/domain-cert-revocation-checks" { + refine "domain-cert-revocation-checks" { description "The domain-cert-revocation-checks field is not valid in a voucher request, and any occurrence MUST be ignored"; } - refine "voucher/assertion" { - mandatory false; + refine "assertion" { description "Any assertion included in registrar voucher requests SHOULD be ignored by the MASA."; } - augment "voucher" { - description - "Adds leaf nodes appropriate for requesting vouchers."; - leaf prior-signed-voucher-request { - type binary; - description - "If it is necessary to change a voucher, or re-sign and - forward a voucher that was previously provided along a - protocol path, then the previously signed voucher SHOULD - be included in this field. - - For example, a pledge might sign a voucher request - with a proximity-registrar-cert, and the registrar - then includes it as the prior-signed-voucher-request - field. This is a simple mechanism for a chain of - trusted parties to change a voucher request, while - maintaining the prior signature information. - - The Registrar and MASA MAY examine the prior signed - voucher information for the - purposes of policy decisions. For example this - information could be useful to a MASA to determine - that both pledge and registrar agree on proximity - assertions. The MASA SHOULD remove all - prior-signed-voucher-request information when - signing a voucher for imprinting so as to minimize - the final voucher size."; - } - choice registrar-identity { - description - "One of these three attributes will be used to pin the \ - registrar identity"; - leaf proximity-registrar-cert { - type binary; - description - "An X.509 v3 certificate structure as specified by - RFC 5280, Section 4 encoded using the ASN.1 - distinguished encoding rules (DER), as specified - in [ITU.X690.1994]. - - The first certificate in the Registrar TLS server - certificate_list sequence (the end-entity TLS - certificate, see [RFC8446]) presented by the Registrar - to the Pledge. - This MUST be populated in a Pledge's voucher request - when a proximity assertion is requested."; - } - leaf proximity-registrar-pubk { - type binary; - description - "The proximity-registrar-pubk replaces - the proximity-registrar-cert in constrained uses of - the voucher-request. - The proximity-registrar-pubk is the - Raw Public Key of the Registrar. This field is encoded - as specified in RFC7250, section 3. - The ECDSA algorithm MUST be supported. - The EdDSA algorithm as specified in - draft-ietf-tls-rfc4492bis-17 SHOULD be supported. - Support for the DSA algorithm is not recommended. - Support for the RSA algorithm is a MAY, but due to - size is discouraged."; - } - leaf proximity-registrar-pubk-sha256 { - type binary; - description - "The proximity-registrar-pubk-sha256 - is an alternative to both - proximity-registrar-pubk and pinned-domain-cert. - In many cases the public key of the domain has already - been transmitted during the key agreement protocol, - and it is wasteful to transmit the public key another - two times. - The use of a hash of public key info, at 32-bytes for - sha256 is a significant savings compared to an RSA - public key, but is only a minor savings compared to - a 256-bit ECDSA public-key. - Algorithm agility is provided by extensions to this - specification which may define a new leaf for another - hash type."; - } - } - leaf agent-signed-data { - type binary; - description - "The agent-signed-data field contains a data artifact \ - provided - by the Registrar-Agent to the Pledge for inclusion \ - into the - voucher request. - - This artifact is signed by the Registrar-Agent and \ - contains - data, which can be verified by the pledge and the \ - registrar. - This data contains the pledge's serial-number and a \ - created-on - information of the agent-signed-data. - - The format is intentionally defined as binary to allow - the document using this leaf to determine the encoding.\ - "; - } - leaf agent-provided-proximity-registrar-cert { - type binary; - description - "An X.509 v3 certificate structure, as specified by - RFC 5280, Section 4, encoded using the ASN.1 - distinguished encoding rules (DER), as specified - in ITU X.690. - The first certificate in the registrar TLS server - certificate_list sequence (the end-entity TLS - certificate; see RFC 8446) presented by the - registrar to the registrar-agent and provided to - the pledge. - This MUST be populated in a pledge's voucher-request - when an agent-proximity assertion is requested."; - reference - "ITU X.690: Information Technology - ASN.1 encoding - rules: Specification of Basic Encoding Rules (BER), - Canonical Encoding Rules (CER) and Distinguished - Encoding Rules (DER) - RFC 5280: Internet X.509 Public Key Infrastructure - Certificate and Certificate Revocation List (CRL) - Profile - RFC 8446: The Transport Layer Security (TLS) - Protocol Version 1.3"; - } - leaf agent-sign-cert { - type binary; - description - "An X.509 v3 certificate structure, as specified by - RFC 5280, Section 4, encoded using the ASN.1 - distinguished encoding rules (DER), as specified - in ITU X.690. - This certificate can be used by the pledge, - the registrar, and the MASA to verify the signature - of agent-signed-data. It is an optional component - for the pledge-voucher request. - This MUST be populated in a registrar's - voucher-request when an agent-proximity assertion - is requested."; - reference - "ITU X.690: Information Technology - ASN.1 encoding - rules: Specification of Basic Encoding Rules (BER), - Canonical Encoding Rules (CER) and Distinguished - Encoding Rules (DER) - RFC 5280: Internet X.509 Public Key Infrastructure - Certificate and Certificate Revocation List (CRL) - Profile"; - } - } + } + leaf prior-signed-voucher-request { + type binary; + description + "If it is necessary to change a voucher, or re-sign and + forward a voucher request that was previously provided + along a protocol path, then the previously signed + voucher SHOULD be included in this field. + + For example, a pledge might sign a voucher request + with a proximity-registrar-cert, and the registrar + then includes it as the prior-signed-voucher-request + field. This is a simple mechanism for a chain of + trusted parties to change a voucher request, while + maintaining the prior signature information. + + The Registrar and MASA MAY examine the prior signed + voucher information for the + purposes of policy decisions. The MASA SHOULD remove + all prior-signed-voucher-request information when + signing a voucher for imprinting so as to minimize + the final voucher size."; + } + leaf proximity-registrar-cert { + type binary; + description + "An X.509 v3 certificate structure as specified by + RFC 5280, Section 4 encoded using the ASN.1 + distinguished encoding rules (DER), as specified + in [ITU.X690.1994]. + + The first certificate in the Registrar TLS server + certificate_list sequence (the end-entity TLS + certificate, see [RFC8446]) presented by the Registrar + to the Pledge. + This MUST be populated in a Pledge's voucher request + when a proximity assertion is requested."; + } + leaf proximity-registrar-pubk { + type binary; + description + "The proximity-registrar-pubk replaces + the proximity-registrar-cert in constrained uses of + the voucher-request. + The proximity-registrar-pubk is the + Raw Public Key of the Registrar. This field is encoded + as specified in RFC7250, section 3. + The ECDSA algorithm MUST be supported. + The EdDSA algorithm as specified in + draft-ietf-tls-rfc4492bis-17 SHOULD be supported. + Support for the DSA algorithm is not recommended. + Support for the RSA algorithm is a MAY, but due to + size is discouraged."; + } + leaf proximity-registrar-pubk-sha256 { + type binary; + description + "The proximity-registrar-pubk-sha256 + is an alternative to both + proximity-registrar-pubk and pinned-domain-cert. + In many cases the public key of the domain has already + been transmitted during the key agreement protocol, + and it is wasteful to transmit the public key another + two times. + The use of a hash of public key info, at 32-bytes for + sha256 is a significant savings compared to an RSA + public key, but is only a minor savings compared to + a 256-bit ECDSA public-key. + Algorithm agility is provided by extensions to this + specification which may define a new leaf for another + hash type."; + } + leaf agent-signed-data { + type binary; + description + "The agent-signed-data field contains a data artifact + provided by the Registrar-Agent to the Pledge for + inclusion into the voucher request. + + This artifact is signed by the Registrar-Agent and contains + data, which can be verified by the pledge and the registrar. + This data contains the pledge's serial-number and a + created-on information of the agent-signed-data. + + The format is intentionally defined as binary to allow + the document using this leaf to determine the encoding."; + } + leaf agent-provided-proximity-registrar-cert { + type binary; + description + "An X.509 v3 certificate structure, as specified by + RFC 5280, Section 4, encoded using the ASN.1 + distinguished encoding rules (DER), as specified + in ITU X.690. + The first certificate in the registrar TLS server + certificate_list sequence (the end-entity TLS + certificate; see RFC 8446) presented by the + registrar to the registrar-agent and provided to + the pledge. + This MUST be populated in a pledge's voucher-request + when an agent-proximity assertion is requested."; + reference + "ITU X.690: Information Technology - ASN.1 encoding + rules: Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER) + RFC 5280: Internet X.509 Public Key Infrastructure + Certificate and Certificate Revocation List (CRL) + Profile + RFC 8446: The Transport Layer Security (TLS) + Protocol Version 1.3"; + } + leaf agent-sign-cert { + type binary; + description + "An X.509 v3 certificate structure, as specified by + RFC 5280, Section 4, encoded using the ASN.1 + distinguished encoding rules (DER), as specified + in ITU X.690. + This certificate can be used by the pledge, + the registrar, and the MASA to verify the signature + of agent-signed-data. It is an optional component + for the pledge-voucher request. + This MUST be populated in a registrar's + voucher-request when an agent-proximity assertion + is requested."; + reference + "ITU X.690: Information Technology - ASN.1 encoding + rules: Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER) + RFC 5280: Internet X.509 Public Key Infrastructure + Certificate and Certificate Revocation List (CRL) + Profile"; } } - // Top-level statement + // Top-level statement: called "voucher" to match RFC8995 sx:structure voucher { uses voucher-request-grouping; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-voucher@2023-01-10.yang b/experimental/ietf-extracted-YANG-modules/ietf-voucher@2023-01-10.yang index 6c8144e5a..943e671c9 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-voucher@2023-01-10.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-voucher@2023-01-10.yang @@ -31,15 +31,17 @@ module ietf-voucher { Author: Toerless Eckert Author: Qiufang Ma - "; + + Author: Esko Dijk + "; description - "This module defines the format for a voucher, which is + "This module defines the format for a Voucher, which is produced by a pledge's manufacturer or delegate (MASA) to securely assign a pledge to an 'owner', so that the pledge may establish a secure connection to the owner's network infrastructure. - Copyright (c) 2024 IETF Trust and the persons identified as + 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 @@ -53,260 +55,268 @@ module ietf-voucher { (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself for full legal notices. - RFCEDITOR: please replace XXXX with the RFC number assigned. - 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."; + // RFCEDITOR: please replace XXXX in this entire code fragment + // with the RFC number assigned and remove this notice. + revision 2023-01-10 { description - "updated to support new assertion enumerated type"; + "Updates and additions described by RFC XXXX"; + reference + "RFC XXXX A Voucher Profile for Bootstrapping Protocols"; + } + revision 2018-05-09 { + description + "Initial version"; reference - "RFC XXXX Voucher Profile for Bootstrapping Protocols"; + "RFC 8366: Voucher Profile for Bootstrapping Protocols"; } grouping voucher-artifact-grouping { description "Grouping to allow reuse/extensions in future work."; - container voucher { + leaf created-on { + type yang:date-and-time; description - "A voucher assigns a pledge to an owner using - the (pinned-domain-cert) value."; - leaf created-on { - type yang:date-and-time; - description - "A value indicating the date this voucher was created. - This node is primarily for human consumption and auditing. - Future work MAY create verification requirements based on - this node."; - } - leaf-list extensions { - type string { - length "1..40"; - } - description - "A list of extension names that are used in this Voucher - file. Each name is registered with the IANA and - described in an RFC."; + "A value indicating the date this voucher was created. + This node is primarily for human consumption and auditing. + Future work MAY create verification requirements based on + this node."; + } + leaf-list extensions { + type union { + type uint64; // when serialized to CBOR with SID + type string; // when serialized to CBOR or JSON } - leaf assertion { - type enumeration { - enum verified { - value 0; - description - "Indicates that the ownership has been positively - verified by the MASA (e.g., through sales channel - integration)."; - } - enum logged { - value 1; - description - "Indicates that the voucher has been issued after - minimal verification of ownership or control. The - issuance has been logged for detection of - potential security issues (e.g., recipients of - vouchers might verify for themselves that unexpected - vouchers are not in the log). This is similar to - unsecured trust-on-first-use principles but with the - logging providing a basis for detecting unexpected - events."; - } - enum proximity { - value 2; - description - "Indicates that the voucher has been issued after - the MASA verified a proximity proof provided by the - device and target domain. The issuance has been - logged for detection of potential security issues."; - } - enum agent-proximity { - value 3; - description - "Mostly identical to proximity, but - indicates that the voucher has been issued - after the MASA has verified a statement that - a registrar agent has made contact with the device."; - } + description + "A list of extension names that are used in this Voucher + file. Each name is registered with the IANA. Standard + extensions are described in an RFC, while vendor proprietary + ones are not."; + } + leaf manufacturer-private { + type binary; + description + "In CBOR serialization, this is a CBOR bstr containing any + valid CBOR that the manufacturer wishes to share with its + pledge. In JSON serializations, this contains additional + JSON instead, and it is base64URL encoded."; + } + leaf assertion { + type enumeration { + enum verified { + value 0; + description + "Indicates that the ownership has been positively + verified by the MASA (e.g., through sales channel + integration)."; } - description - "The assertion is a statement from the MASA regarding how - the owner was verified. This statement enables pledges - to support more detailed policy checks. Pledges MUST - ensure that the assertion provided is acceptable, per - local policy, before processing the voucher."; - } - leaf serial-number { - type string; - mandatory true; - description - "The serial-number of the hardware. When processing a - voucher, a pledge MUST ensure that its serial-number - matches this value. If no match occurs, then the - pledge MUST NOT process this voucher."; - } - leaf idevid-issuer { - type binary; - description - "The Authority Key Identifier OCTET STRING (as defined in - Section 4.2.1.1 of RFC 5280) from the pledge's IDevID - certificate. Optional since some serial-numbers are - already unique within the scope of a MASA. - Inclusion of the statistically unique key identifier - ensures statistically unique identification of the - hardware. - When processing a voucher, a pledge MUST ensure that its - IDevID Authority Key Identifier matches this value. If no - match occurs, then the pledge MUST NOT process this - voucher. - When issuing a voucher, the MASA MUST ensure that this - field is populated for serial-numbers that are not - otherwise unique within the scope of the MASA."; - } - choice pinning { - description - "One of these attributes is used by the pledge to - specify the registrar, and how the pledge would like - the registrar's identity to be pinned"; - leaf pinned-domain-cert { - type binary; + enum logged { + value 1; description - "An X.509 v3 certificate structure, as specified by - RFC 5280, using Distinguished Encoding Rules (DER) - encoding, as defined in ITU-T X.690. - - This certificate is used by a pledge to trust a Public \ - Key - Infrastructure in order to verify a domain certificate - supplied to the pledge separately by the bootstrapping - protocol. The domain certificate MUST have this - certificate somewhere in its chain of certificates. - This certificate MAY be an end-entity certificate, - including a self-signed entity."; - reference - "RFC 5280: - Internet X.509 Public Key Infrastructure Certificate - and Certificate Revocation List (CRL) Profile. - ITU-T X.690: - Information technology - ASN.1 encoding rules: - Specification of Basic Encoding Rules (BER), - Canonical Encoding Rules (CER) and Distinguished - Encoding Rules (DER)."; + "Indicates that the voucher has been issued after + minimal verification of ownership or control. The + issuance has been logged for detection of + potential security issues (e.g., recipients of + vouchers might verify for themselves that unexpected + vouchers are not in the log). This is similar to + unsecured trust-on-first-use principles but with the + logging providing a basis for detecting unexpected + events."; } - leaf pinned-domain-pubk { - type binary; + enum proximity { + value 2; description - "The pinned-domain-pubk may replace the - pinned-domain-cert in constrained uses of - the voucher. The pinned-domain-pubk - is the Raw Public Key of the Registrar. - This field is encoded as a Subject Public Key Info block - as specified in RFC7250, in section 3. - The ECDSA algorithm MUST be supported. - The EdDSA algorithm as specified in - draft-ietf-tls-rfc4492bis-17 SHOULD be supported. - Support for the DSA algorithm is not recommended. - Support for the RSA algorithm is a MAY."; + "Indicates that the voucher has been issued after + the MASA verified a proximity proof provided by the + device and target domain. The issuance has been + logged for detection of potential security issues."; } - leaf pinned-domain-pubk-sha256 { - type binary; + enum agent-proximity { + value 3; description - "The pinned-domain-pubk-sha256 is a second - alternative to pinned-domain-cert. In many cases the - public key of the domain has already been transmitted - during the key agreement process, and it is wasteful - to transmit the public key another two times. - The use of a hash of public key info, at 32-bytes for - sha256 is a significant savings compared to an RSA - public key, but is only a minor savings compared to - a 256-bit ECDSA public-key. - Algorithm agility is provided by extensions to this - specification which can define a new leaf for another - hash type."; + "Mostly identical to proximity, but + indicates that the voucher has been issued + after the MASA has verified a statement that + a registrar agent has made contact with the device."; } } - leaf domain-cert-revocation-checks { - type boolean; - description - "A processing instruction to the pledge that it MUST (true) - or MUST NOT (false) verify the revocation status for the - pinned domain certificate. If this field is not set, then - normal PKIX behavior applies to validation of the domain - certificate."; - } - leaf last-renewal-date { - type yang:date-and-time; - must '../expires-on'; - description - "The date that the MASA projects to be the last date it - will renew a voucher on. This field is merely - informative; it is not processed by pledges. + description + "The assertion is a statement from the MASA regarding how + the owner was verified. This statement enables pledges + to support more detailed policy checks. Pledges MUST + ensure that the assertion provided is acceptable, per + local policy, before processing the voucher."; + } + leaf serial-number { + type string; + mandatory true; + description + "The serial-number of the hardware. When processing a + voucher, a pledge MUST ensure that its serial-number + matches this value. If no match occurs, then the + pledge MUST NOT process this voucher."; + } + leaf idevid-issuer { + type binary; + description + "The Authority Key Identifier OCTET STRING (as defined in + Section 4.2.1.1 of RFC 5280) from the pledge's IDevID + certificate. Optional since some serial-numbers are + already unique within the scope of a MASA. + Inclusion of the statistically unique key identifier + ensures statistically unique identification of the + hardware. + When processing a voucher, a pledge MUST ensure that its + IDevID Authority Key Identifier matches this value. If no + match occurs, then the pledge MUST NOT process this + voucher. + When issuing a voucher, the MASA MUST ensure that this + field is populated for serial-numbers that are not + otherwise unique within the scope of the MASA."; + } + // choice pinning { + // description "One of these attributes is used by the + // MASA to pin the registrar identity"; + leaf pinned-domain-cert { + type binary; + description + "An X.509 v3 certificate structure, as specified by + RFC 5280, using Distinguished Encoding Rules (DER) + encoding, as defined in ITU-T X.690. - Circumstances may occur after a voucher is generated that - may alter a voucher's validity period. For instance, - a vendor may associate validity periods with support - contracts, which may be terminated or extended - over time."; - } + This certificate is used by a pledge to trust a Public Key + Infrastructure in order to verify a domain certificate + supplied to the pledge separately by the bootstrapping + protocol. The domain certificate MUST have this + certificate somewhere in its chain of certificates. + This certificate MAY be an end-entity certificate, + including a self-signed entity."; + reference + "RFC 5280: + Internet X.509 Public Key Infrastructure Certificate + and Certificate Revocation List (CRL) Profile. + ITU-T X.690: + Information technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER)."; + } + leaf pinned-domain-pubk { + type binary; + description + "The pinned-domain-pubk may replace the + pinned-domain-cert in constrained uses of + the voucher. The pinned-domain-pubk + is the Raw Public Key of the registrar. + This field is encoded as a Subject Public Key Info block + as specified in RFC7250, in section 3. + The ECDSA algorithm MUST be supported. + The EdDSA algorithm as specified in + draft-ietf-tls-rfc4492bis-17 SHOULD be supported. + Support for the DSA algorithm is not recommended. + Support for the RSA algorithm is a MAY."; + } + leaf pinned-domain-pubk-sha256 { + type binary; + description + "The pinned-domain-pubk-sha256 is a second + alternative to pinned-domain-cert. In many cases the + public key of the domain has already been transmitted + during the key agreement process, and it is wasteful + to transmit the public key another two times. + The use of a hash of public key info, at 32-bytes for + sha256 is a significant savings compared to an RSA + public key, but is only a minor savings compared to + a 256-bit ECDSA public-key. + Algorithm agility is provided by extensions to this + specification which can define a new leaf for another + hash type."; } - choice nonceless { + // } choice pinning removed + leaf domain-cert-revocation-checks { + type boolean; description - "Either a nonce must be present, or an expires-on header"; - leaf expires-on { - type yang:date-and-time; - description - "A value indicating when this voucher expires. The node is - optional as not all pledges support expirations, such as - pledges lacking a reliable clock. + "A processing instruction to the pledge that it MUST (true) + or MUST NOT (false) verify the revocation status for the + pinned domain certificate. If this field is not set, then + normal PKIX behavior applies to validation of the domain + certificate."; + } + leaf last-renewal-date { + type yang:date-and-time; + must '../expires-on'; + description + "The date that the MASA projects to be the last date + it will renew a voucher on. This field is merely + informative; it is not processed by pledges. - If this field exists, then the pledges MUST ensure that - the expires-on time has not yet passed. A pledge without - an accurate clock cannot meet this requirement. + Circumstances may occur after a voucher is generated that + may alter a voucher's validity period. For instance, + a vendor may associate validity periods with support + contracts, which may be terminated or extended + over time."; + } + //choice nonceless { + // description "Either a nonce must be present, + // or an expires-on header"; + leaf expires-on { + type yang:date-and-time; + description + "A value indicating when this voucher expires. The node is + optional as not all pledges support expirations, such as + pledges lacking a reliable clock. - The expires-on value MUST NOT exceed the expiration date - of any of the listed 'pinned-domain-cert' certificates."; - } - leaf nonce { - type binary { - length "8..32"; - } - description - "A value that can be used by a pledge in some bootstrapping - protocols to enable anti-replay protection. This node is - optional because it is not used by all bootstrapping - protocols. + If this field exists, then the pledges MUST ensure that + the expires-on time has not yet passed. A pledge without + an accurate clock cannot meet this requirement. - When present, the pledge MUST compare the provided nonce - value with another value that the pledge randomly - generated and sent to a bootstrap server in an earlier - bootstrapping message. If the value is present, but - the values do not match, then the pledge MUST NOT process - this voucher."; + The expires-on value MUST NOT exceed the expiration date + of any of the listed 'pinned-domain-cert' certificates."; + } + leaf nonce { + type binary { + length "8..32"; } + description + "A value that can be used by a pledge in some bootstrapping + protocols to enable anti-replay protection. This node is + optional because it is not used by all bootstrapping + protocols. + + When present, the pledge MUST compare the provided nonce + value with another value that the pledge randomly + generated and sent to a bootstrap server in an earlier + bootstrapping message. If the value is present, but + the values do not match, then the pledge MUST NOT process + this voucher."; } + // } choice nonceless leaf est-domain { type ietf:uri; description - "The est-domain is a URL from which the Pledge should - continue doing enrollment rather than with the - Cloud Registrar. - The pinned-domain-cert contains a trust-anchor - which is to be used to authenticate the server - found at this URI. - "; + "The est-domain is a URL from which the pledge should + continue doing enrollment rather than with the + cloud registrar. + The pinned-domain-cert contains a trust-anchor + which is to be used to authenticate the server + found at this URI."; } leaf additional-configuration-url { type ietf:uri; description "The additional-configuration attribute contains a - URL to which the Pledge can retrieve additional - configuration information. - The contents of this URL are manufacturer specific. - This is intended to do things like configure - a VoIP phone to point to the correct hosted - PBX, for example."; + URL to which the pledge can retrieve additional + configuration information. + The contents of this URL are manufacturer specific. + This is intended to do things like configure + a VoIP phone to point to the correct hosted + PBX, for example."; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-library-augmentedby@2025-05-28.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-library-augmentedby@2025-05-28.yang index 2c7b68236..bf1c312a6 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yang-library-augmentedby@2025-05-28.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-library-augmentedby@2025-05-28.yang @@ -1,6 +1,7 @@ module ietf-yang-library-augmentedby { yang-version 1.1; - namespace "urn:ietf:params:xml:ns:yang:ietf-yang-library-augmentedby"; + namespace + "urn:ietf:params:xml:ns:yang:ietf-yang-library-augmentedby"; prefix yanglib-aug; import ietf-yang-library { @@ -15,16 +16,15 @@ module ietf-yang-library-augmentedby { "WG Web: WG List: - Author: Zhuoyao Lin + Authors: Zhuoyao Lin Benoit Claise - + Ignacio Dominguez Martinez-Casanueva - "; - + "; description "This module augments the ietf-yang-library defined in - [RFC8525] to provide not only the deviation list, but also + RFC8525 to provide not only the deviation list, but also the augmented-by list, in order to give sufficient information about the YANG modules reverse dependency. It facilitates the process of obtaining the entire @@ -37,8 +37,8 @@ module ietf-yang-library-augmentedby { (RFC 8174) when, and only when, they appear in all capitals, as shown here. - Copyright (c) 2025 IETF Trust and the persons identified as - authors of the code. All rights reserved. + Copyright (c) 2026 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 @@ -46,82 +46,65 @@ module ietf-yang-library-augmentedby { 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. "; + + All revisions of IETF and IANA published modules can be found + at the YANG Parameters registry group + (https://www.iana.org/assignments/yang-parameters). + + This version of this YANG module is part of RFC XXXX; see + the RFC itself for full legal notices."; + + // RFC Ed.: replace XXXX/YYYY with actual RFC number and remove + // this note + + // replace 'date-revision' with the module publication date + // the format is (YYYY-MM-DD) revision 2025-05-28 { description "Initial revision."; reference - "RFC XXXX: Augmented-by Addition to the YANG Library"; + "RFC XXXX: Augmented-by Addition to the YANG Library (Note to the + RFC-Editor: Please replace this with RFC plus the RFC number when this + document can be published.)"; } grouping augmented-by { description - "Augment the augmented-by leaf-list from module info with the - module-augmented-by grouping" ; - + "Provides augmented-by leaf-list from module info with the + module-augmented-by grouping"; leaf-list augmented-by { type leafref { path "../../yanglib:module/yanglib:name"; } - description - "Leaf-list of the augmentation used by this server to - modify the conformance of the module associated with + "Leaf-list of the augmentations used by this server to + modify the schema tree of the module associated with this entry. Note that the same module can be used for augmented-by for multiple modules, so the same entry MAY appear within multiple 'module' entries. This reference MUST NOT (directly or indirectly) - refer to the module being augmented. + refer to the module being augmented, and MUST NOT + be referenced in the import-only list. Robust clients may want to make sure that they handle a situation where a module augments itself (directly or indirectly) gracefully."; } } - augment "/yanglib:yang-library/yanglib:module-set/yanglib:module" { description "Augments the augmented-by leaf-list from module info with the - augmented-by grouping. - - The 'augmented-by' leaf-list should only consider those YANG - modules that directly augment the YANG module associated - with this entry, and the augmenting and augmented modules - should be defined in the same module-set. - - The 'directly augment' is identified by the relationship - between the augment module and the target node's parent - module that it augments to. Only the direct parent module - of the target node is augmented, and the rest of the parent - modules defined in the schema tree are only indirect - dependencies but not augmented modules. (Refer to - 'Target node' definition in Section 7.17 of RFC7950) - " ; - uses augmented-by; + augmented-by grouping."; + uses augmented-by; } + augment "/yanglib:modules-state/yanglib:module" { status deprecated; description "Augments the augmented-by leaf-list from module info with the - augmented-by grouping. - - The 'augmented-by' leaf-list should only consider those YANG - modules that directly augment the YANG module associated - with this entry, and the augmenting and augmented modules - should be defined in the same module-set. - - The 'directly augment' is identified by the relationship - between the augment module and the target node's parent - module that it augments to. Only the direct parent module - of the target node is augmented, and the rest of the parent - modules defined in the schema tree are only indirect - dependencies but not augmented modules. (Refer to - 'Target node' definition in Section 7.17 of RFC7950) - " ; - uses augmented-by; + augmented-by grouping."; + uses augmented-by; } - } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-library-semver@2025-01-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-library-semver@2025-07-13.yang similarity index 67% rename from experimental/ietf-extracted-YANG-modules/ietf-yang-library-semver@2025-01-21.yang rename to experimental/ietf-extracted-YANG-modules/ietf-yang-library-semver@2025-07-13.yang index a0010f75c..549e107e5 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yang-library-semver@2025-01-21.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-library-semver@2025-07-13.yang @@ -1,7 +1,6 @@ module ietf-yang-library-semver { yang-version 1.1; - namespace - "urn:ietf:params:xml:ns:yang:ietf-yang-library-semver"; + namespace "urn:ietf:params:xml:ns:yang:ietf-yang-library-semver"; prefix yl-semver; import ietf-yang-semver { @@ -65,80 +64,56 @@ module ietf-yang-library-semver { // RFC Ed.: please replace ysv:version with 1.0.0 and // remove this note. - revision 2025-01-21 { - ysv:version "0.20.0"; + revision 2025-07-13 { + ysv:version "0.21.0"; description "Initial revision"; reference "RFC XXXX: YANG Semantic Versioning"; } - // library 1.0 modules-state is not augmented with version - - augment "/yanglib:yang-library/yanglib:module-set/yanglib:module" { + grouping module-version { description - "Add a version to module information"; + "Grouping for module version information."; leaf version { type ysv:version; description - "The version associated with this module revision. - The value MUST match the version value in the - specific revision of the module loaded in this module-set."; + "The version of the module or submodule. + The value MUST match the version value in the specific + revision of the module or submodule loaded in this + module-set."; reference "RFC XXXX: YANG Semantic Versioning; Section 7.1.1, Advertising version"; } } - augment - "/yanglib:yang-library/yanglib:module-set/yanglib:module/" - + "yanglib:submodule" { + // library 1.0 modules-state is not augmented with version + + augment "/yanglib:yang-library/yanglib:module-set/yanglib:module" { + description + "Add a version to module information"; + uses module-version; + } + + augment "/yanglib:yang-library/yanglib:module-set/yanglib:module/" + + "yanglib:submodule" { description "Add a version to submodule information"; - leaf version { - type ysv:version; - description - "The version associated with this submodule revision. - The value MUST match the version value in the - specific revision of the submodule included by the module - loaded in this module-set."; - reference - "RFC XXXX: YANG Semantic Versioning; - Section 7.1.1, Advertising version"; - } + uses module-version; } augment "/yanglib:yang-library/yanglib:module-set/" + "yanglib:import-only-module" { description "Add a version to module information"; - leaf version { - type ysv:version; - description - "The version associated with this module revision. - The value MUST match the version value in the - specific revision of the module included in this - module-set."; - reference - "RFC XXXX: YANG Semantic Versioning; - Section 7.1.1, Advertising version"; - } + uses module-version; } augment "/yanglib:yang-library/yanglib:module-set/" + "yanglib:import-only-module/yanglib:submodule" { description "Add a version to submodule information"; - leaf version { - type ysv:version; - description - "The version associated with this submodule revision. - The value MUST match the version value in the specific - revision of the submodule included by the import-only-module - loaded in this module-set."; - reference - "RFC XXXX: Updated YANG Module Revision Handling; - Section 7.1.1, Advertising version"; - } + uses module-version; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-push-revision@2025-04-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-push-revision@2025-08-29.yang similarity index 80% rename from experimental/ietf-extracted-YANG-modules/ietf-yang-push-revision@2025-04-05.yang rename to experimental/ietf-extracted-YANG-modules/ietf-yang-push-revision@2025-08-29.yang index 04c2c36e7..61a5507bf 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yang-push-revision@2025-04-05.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-push-revision@2025-08-29.yang @@ -11,7 +11,7 @@ module ietf-yang-push-revision { import ietf-yang-revisions { prefix rev; reference - "RFC YYYY: draft-ietf-netmod-yang-module-versioning-11, + "RFC YYYY: draft-ietf-netmod-yang-module-versioning-13, Updated YANG Module Revision Handling"; } import ietf-yang-types { @@ -23,7 +23,7 @@ module ietf-yang-push-revision { import ietf-yang-semver { prefix ysver; reference - "RFC ZZZZ: draft-ietf-netmod-yang-semver-15, YANG Semantic + "RFC ZZZZ: draft-ietf-netmod-yang-semver-23, YANG Semantic Versioning"; } import ietf-yang-library { @@ -57,9 +57,9 @@ module ietf-yang-push-revision { "; description - "Defines YANG-Push event notification header with the revision and - the revision-label. Adds the support of the revision and - revision-label selection in the YANG-Push subscription RPCs. + "Defines YANG-Push event notification header with the revision + and the version. Adds the support of the revision and + version selection in the YANG-Push subscription RPCs. Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. @@ -76,9 +76,15 @@ module ietf-yang-push-revision { (https://www.iana.org/assignments/yang-parameters). This version of this YANG module is part of RFC XXXX; see the RFC - itself for full legal notices."; + itself for full legal notices. - revision 2025-04-05 { + 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-08-29 { description "First revision"; reference @@ -89,8 +95,8 @@ module ietf-yang-push-revision { feature yang-push-revision-supported { description "This feature indicates the YANG Subscription Notifications - supports specifying the list of modules, revisions and - revision-label in the YANG subscription."; + support specifying the list of modules, revisions and + versions in the YANG subscription."; } // Identities @@ -98,36 +104,36 @@ module ietf-yang-push-revision { base sn:establish-subscription-error; base sn:modify-subscription-error; description - "Revision not supported. This failure can be due to subscribing - to a specific revision not supported by the publisher."; + "Revision not supported. This failure can be due to + subscribing to a specific revision not supported by the + publisher."; } - identity revision-label-unsupported { + identity version-unsupported { base sn:establish-subscription-error; base sn:modify-subscription-error; description - "Revision-label not supported. This failure can be due to - subscribing to a specific revision-label not supported by the + "Version not supported. This failure can be due to + subscribing to a specific version not supported by the publisher."; } - identity incompatible-revision-and-revision-label { + identity incompatible-revision-and-version { base sn:establish-subscription-error; base sn:modify-subscription-error; description - "The combination of revision and the revision-label are + "The combination of revision and version are incompatible. This failure happens when the revision and the - revision-label are both specified in the RPC and the YANG - module supported by the publisher does not support one of the - revision or the revision-label."; + version are both specified in the RPC and the YANG + module supported by the publisher does not support one of them."; } grouping yang-push-module-version-config { description "This grouping combines the module name, the revision and - revision-label leaves. This grouping is to be used for + version leaves. This grouping is to be used for configuration and the leaves are not mandatory."; - leaf module-name { + leaf name { type yang:yang-identifier; description "This references the YANG module name."; @@ -138,22 +144,22 @@ module ietf-yang-push-revision { "This references the YANG module revision to be sent in the subscription."; } - leaf revision-label { + leaf version { type ysver:version; description - "This references the YANG module semantic version to be sent in - the subscription."; + "This references the YANG module semantic version to be sent + in the subscription."; } } grouping yang-push-module-version { description "This grouping combines the module name, the revision and - revision-label leaves. This grouping is to be used for + version leaves. This grouping is to be used for read-only cases such as the content of YANG-Push Notifications. - The module-name and revision are mandatory and MUST be present + The name and revision are mandatory and MUST be present in the data."; - leaf module-name { + leaf name { type yang:yang-identifier; config false; mandatory true; @@ -168,11 +174,11 @@ module ietf-yang-push-revision { "This references the YANG module revision of the sent notification message."; } - leaf revision-label { + leaf version { type ysver:version; description - "This references the YANG module semantic version of the sent - notification message."; + "This references the YANG module semantic version of the + sent notification message."; } } @@ -181,7 +187,7 @@ module ietf-yang-push-revision { "This grouping defines a list of yang-push-module-version grouping."; list module-version { - key "module-name"; + key "name"; config false; description "List of yang-push-module-version grouping. The revision is @@ -189,10 +195,10 @@ module ietf-yang-push-revision { uses ypr:yang-push-module-version; } leaf yang-library-content-id { - config false; type leafref { path "/yanglib:yang-library/yanglib:content-id"; } + config false; description "Contains the YANG library content identifier RFC 8525 information."; @@ -204,10 +210,10 @@ module ietf-yang-push-revision { "This grouping defines a list of yang-push-module-version-config grouping."; list module-version-config { - key "module-name"; + key "name"; description - "List of yang-push-module-version-config grouping. The revision - is configurable."; + "List of yang-push-module-version-config grouping. The + revision is configurable."; uses ypr:yang-push-module-version-config; } } @@ -266,8 +272,8 @@ module ietf-yang-push-revision { type boolean; description "Specifies whether the publisher supports exporting - revision and revision-label in YANG-Push subscription state - change notifications."; + revision and version in YANG-Push subscription state change + notifications."; reference "RFC XXXX: Support of Versioning in YANG Notifications Subscription"; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-push-telemetry-message@2025-06-10.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-push-telemetry-message@2025-08-15.yang similarity index 93% rename from experimental/ietf-extracted-YANG-modules/ietf-yang-push-telemetry-message@2025-06-10.yang rename to experimental/ietf-extracted-YANG-modules/ietf-yang-push-telemetry-message@2025-08-15.yang index 92eda060b..c8310d352 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yang-push-telemetry-message@2025-06-10.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-push-telemetry-message@2025-08-15.yang @@ -75,7 +75,7 @@ module ietf-yang-push-telemetry-message { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2025-06-10 { + revision 2025-08-15 { description "Initial revision."; reference @@ -239,30 +239,33 @@ module ietf-yang-push-telemetry-message { } } } - list module-version { - key "module-name"; + list module { + key "name"; config false; description - "List of yang-push-module-version grouping. The revision is - not configurable."; - leaf module-name { + "List of yang-push-module-version grouping defined in + draft-ietf-netconf-yang-notifications-versioning. The + revision is not configurable."; + leaf name { type yang:yang-identifier; config false; description - "This references the YANG module name."; + "This references the YANG module name, section 7.1 of + RFC 7950."; } leaf revision { type rev:revision-date; config false; description - "This references the YANG module revision of the sent - notification message."; + "This references the YANG module revision, section 7.1.2 + of RFC 7950, of the sent notification message."; } - leaf revision-label { + leaf version { type ysver:version; description - "This references the YANG module semantic version of the - sent notification message."; + "This references the YANG module semantic version, + draft-ietf-netmod-yang-semver, of the sent notification + message."; } } leaf yang-library-content-id { diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-semver@2025-01-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-semver@2025-08-12.yang similarity index 91% rename from experimental/ietf-extracted-YANG-modules/ietf-yang-semver@2025-01-21.yang rename to experimental/ietf-extracted-YANG-modules/ietf-yang-semver@2025-08-12.yang index 7fd8bf77c..2514bc3a7 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yang-semver@2025-01-21.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-semver@2025-08-12.yang @@ -6,7 +6,7 @@ module ietf-yang-semver { organization "IETF NETMOD (Network Modeling) Working Group"; contact - "WG Web: + "WG Web: WG List: Author: Joe Clarke @@ -50,8 +50,8 @@ module ietf-yang-semver { // note. // RFC Ed. update the ysv:version to "1.0.0". - revision 2025-01-21 { - ysv:version "0.20.0"; + revision 2025-08-12 { + ysv:version "0.23.0"; description "Initial revision"; reference @@ -65,7 +65,7 @@ module ietf-yang-semver { extension version { argument yang-semantic-version; description - "The version extension can be used to assign a version number + "The version extension is used to assign a version number to a module or submodule revision. The format of the version extension argument MUST conform @@ -79,11 +79,8 @@ module ietf-yang-semver { Versions MUST be unique amongst all revisions of a module or submodule. - Adding a version is a backwards-compatible - change. Changing or removing an existing version in - the revision history is a non-backwards-compatible - change, because it could impact any references to that - version."; + Adding, changing or removing a version is a + backwards-compatible change."; reference "RFC XXXX: YANG Semantic Versioning; Section 4.2, YANG Semantic Version Extension"; @@ -112,7 +109,7 @@ module ietf-yang-semver { the following conditions: * Has the exact same MAJOR, MINOR, PATCH as in the - recommend-min-version value. + recommended-min-version value. * Has the same MAJOR and MINOR version numbers and a greater PATCH number. * Has the same MAJOR version number and greater MINOR number. diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yp-current-period@2025-02-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-yp-current-period@2025-02-21.yang index 4b8735238..73562579d 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yp-current-period@2025-02-21.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yp-current-period@2025-02-21.yang @@ -32,8 +32,8 @@ module ietf-yp-current-period { Author: Thomas Graf "; description "This module augments ietf-subscribed-notification and - ietf-yang-push with the current-period statistics reporting the - actual collection period, as opposed to the configured one. + ietf-yang-push with the current-period leaf reporting the actual + collection period, as opposed to the configured one. Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. @@ -56,7 +56,7 @@ module ietf-yp-current-period { augment "/sn:subscriptions/sn:subscription" { description - "Adds current period statistics"; + "Adds current collection period"; leaf current-period { when '../yp:periodic'; type yp:centiseconds; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yp-lite-capabilities@2024-11-11.yang b/experimental/ietf-extracted-YANG-modules/ietf-yp-lite-capabilities@2024-11-11.yang index 81ea77474..f9be2c522 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yp-lite-capabilities@2024-11-11.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yp-lite-capabilities@2024-11-11.yang @@ -1,7 +1,7 @@ module ietf-yp-lite-capabilities { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-yp-lite-capabilities"; - prefix yplc; + prefix yplca; import ietf-system-capabilities { prefix sysc; @@ -235,7 +235,7 @@ module ietf-yp-lite-capabilities { uses yp-lite-capabilities; } - augment "/sysc:system-capabilities/yplc:datastore-telemetry" { + augment "/sysc:system-capabilities/yplca:datastore-telemetry" { description "Adds system level Yang Push Lite transport capabilities"; uses yp-lite-transport-capabilities; diff --git a/standard/iana/iana-bfd-types@2021-10-21.yang b/standard/iana/iana-bfd-types@2025-11-20.yang similarity index 80% rename from standard/iana/iana-bfd-types@2021-10-21.yang rename to standard/iana/iana-bfd-types@2025-11-20.yang index 3435578cf..32a41ea52 100644 --- a/standard/iana/iana-bfd-types@2021-10-21.yang +++ b/standard/iana/iana-bfd-types@2025-11-20.yang @@ -38,6 +38,17 @@ module iana-bfd-types { "RFC 9127: YANG Data Model for Bidirectional Forwarding Detection (BFD)"; + revision 2025-11-20 { + description + "Added Authentication Types 6-8."; + reference + "https://www.iana.org/assignments/yang-parameters/" + + "iana-bfd-types@2025-11-20.yang + draft-ietf-bfd-stability-21: BFD Stability + draft-ietf-bfd-secure-sequence-numbers-27: Meticulous Keyed + ISAAC for BFD Optimized Authentication"; + } + revision 2021-10-21 { description "Initial revision."; @@ -148,6 +159,27 @@ module iana-bfd-types { description "Meticulous Keyed SHA1."; } + enum null { + value 6; + description + "NULL."; + reference + "draft-ietf-bfd-stability-21: BFD Stability"; + } + enum optimized-md5-meticulous-keyed-isaac-authentication { + value 7; + description + "Optimized MD5 Meticulous Keyed ISAAC Authentication."; + reference + "draft-ietf-bfd-secure-sequence-numbers-27"; + } + enum optimized-sha1-meticulous-keyed-isaac-authentication { + value 8; + description + "Optimized MD5 Meticulous Keyed ISAAC Authentication."; + reference + "draft-ietf-bfd-secure-sequence-numbers-27"; + } } description "BFD authentication type as defined in RFC 5880. Values are diff --git a/standard/iana/iana-dns-class-rr-type@2025-05-20.yang b/standard/iana/iana-dns-class-rr-type@2025-12-29.yang similarity index 95% rename from standard/iana/iana-dns-class-rr-type@2025-05-20.yang rename to standard/iana/iana-dns-class-rr-type@2025-12-29.yang index 13c9a8d51..1c4632ff1 100644 --- a/standard/iana/iana-dns-class-rr-type@2025-05-20.yang +++ b/standard/iana/iana-dns-class-rr-type@2025-12-29.yang @@ -42,6 +42,30 @@ module iana-dns-class-rr-type { "IANA 'Domain Name System (DNS) Parameters' registry https://www.iana.org/assignments/dns-parameters"; + revision 2025-12-29 { + description + "Added missing 67 HHIT, 68 BRID registrations."; + reference + "RFC 9886" + + "iana-dns-class-rr-type@2025-12-29.yang"; + } + + revision 2025-09-30 { + description + "Replaced draft string reference to 66 DSYNC with RFC 9859."; + reference + "RFC 9859" + + "iana-dns-class-rr-type@2025-09-22.yang"; + } + + revision 2025-09-22 { + description + "Replaced draft string reference to 128 NXNAME with RFC 9824."; + reference + "RFC 9824" + + "iana-dns-class-rr-type@2025-09-22.yang"; + } + revision 2025-05-20 { description "Registered RR Types HHIT 67 and BRID 68."; reference @@ -652,7 +676,21 @@ Plan - Name Service, April 1987."; description "Endpoint discovery for delegation synchronization"; reference - "draft-ietf-dnsop-generalized-notify-03"; + "RFC 9859"; + } + enum HHIT { + value 67; + description + "Hierarchical Host Identity Tag"; + reference + "RFC 9886"; + } + enum BRID { + value 68; + description + "UAS Broadcast Remote Identification"; + reference + "RFC 9886"; } enum SPF { value 99; @@ -736,7 +774,7 @@ Plan - Name Service, April 1987."; description "NXDOMAIN indicator for Compact Denial of Existence"; reference - "draft-ietf-dnsop-compact-denial-of-existence-04"; + "RFC 9824"; } enum TKEY { value 249; diff --git a/standard/iana/iana-icmpv4-types@2025-12-22.yang b/standard/iana/iana-icmpv4-types@2025-12-22.yang new file mode 100644 index 000000000..eba46ced3 --- /dev/null +++ b/standard/iana/iana-icmpv4-types@2025-12-22.yang @@ -0,0 +1,314 @@ +module iana-icmpv4-types { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:iana-icmpv4-types"; + prefix iana-icmpv4-types; + + organization + "Internet Assigned Numbers Authority (IANA)"; + + contact + "Internet Assigned Numbers Authority + + ICANN + 12025 Waterfront Drive, Suite 300 + Los Angeles, CA 90094 + + Tel: +1 424 254 5300 + + "; + + description + "This YANG module translates IANA registry 'ICMP Type Numbers' to + YANG derived types. + + 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 was generated from the + corresponding IANA registry using an XSLT stylesheet from the + 'iana-yang' project (https://github.com/llhotka/iana-yang)."; + + reference + "Internet Control Message Protocol (ICMP) Parameters + (https://www.iana.org/assignments/icmp-parameters/)"; + + revision 2025-12-22 { + description + "Initial version."; + reference + "RFC 9899" + + "iana-icmpv4-types@2025-12-22.yang"; + } + + /* Typedefs */ + + typedef icmpv4-type-name { + type enumeration { + enum EchoReply { + value 0; + description + "Echo Reply"; + reference + "RFC 792"; + } + enum DestinationUnreachable { + value 3; + description + "Destination Unreachable"; + reference + "RFC 792"; + } + enum SourceQuench { + value 4; + status deprecated; + description + "Source Quench (Deprecated)"; + reference + "RFC 792 + RFC 6633"; + } + enum Redirect { + value 5; + description + "Redirect"; + reference + "RFC 792"; + } + enum AlternateHostAddress { + value 6; + status deprecated; + description + "Alternate Host Address (Deprecated)"; + reference + "RFC 6918"; + } + enum Echo { + value 8; + description + "Echo"; + reference + "RFC 792"; + } + enum RouterAdvertisement { + value 9; + description + "Router Advertisement"; + reference + "RFC 1256"; + } + enum RouterSolicitation { + value 10; + description + "Router Solicitation"; + reference + "RFC 1256"; + } + enum TimeExceeded { + value 11; + description + "Time Exceeded"; + reference + "RFC 792"; + } + enum ParameterProblem { + value 12; + description + "Parameter Problem"; + reference + "RFC 792"; + } + enum Timestamp { + value 13; + description + "Timestamp"; + reference + "RFC 792"; + } + enum TimestampReply { + value 14; + description + "Timestamp Reply"; + reference + "RFC 792"; + } + enum InformationRequest { + value 15; + status deprecated; + description + "Information Request (Deprecated)"; + reference + "RFC 792 + RFC 6918"; + } + enum InformationReply { + value 16; + status deprecated; + description + "Information Reply (Deprecated)"; + reference + "RFC 792 + RFC 6918"; + } + enum AddressMaskRequest { + value 17; + status deprecated; + description + "Address Mask Request (Deprecated)"; + reference + "RFC 950 + RFC 6918"; + } + enum AddressMaskReply { + value 18; + status deprecated; + description + "Address Mask Reply (Deprecated)"; + reference + "RFC 950 + RFC 6918"; + } + enum Traceroute { + value 30; + status deprecated; + description + "Traceroute (Deprecated)"; + reference + "RFC 1393 + RFC 6918"; + } + enum DatagramConversionError { + value 31; + status deprecated; + description + "Datagram Conversion Error (Deprecated)"; + reference + "RFC 1475 + RFC 6918"; + } + enum MobileHostRedirect { + value 32; + status deprecated; + description + "Mobile Host Redirect (Deprecated)"; + reference + "David Johnson <> + RFC 6918"; + } + enum IPv6Where-Are-You { + value 33; + status deprecated; + description + "IPv6 Where-Are-You (Deprecated)"; + reference + "Bill Simpson + RFC 6918"; + } + enum IPv6I-Am-Here { + value 34; + status deprecated; + description + "IPv6 I-Am-Here (Deprecated)"; + reference + "Bill Simpson + RFC 6918"; + } + enum MobileRegistrationRequest { + value 35; + status deprecated; + description + "Mobile Registration Request (Deprecated)"; + reference + "Bill Simpson + RFC 6918"; + } + enum MobileRegistrationReply { + value 36; + status deprecated; + description + "Mobile Registration Reply (Deprecated)"; + reference + "Bill Simpson + RFC 6918"; + } + enum DomainNameRequest { + value 37; + status deprecated; + description + "Domain Name Request (Deprecated)"; + reference + "RFC 1788 + RFC 6918"; + } + enum DomainNameReply { + value 38; + status deprecated; + description + "Domain Name Reply (Deprecated)"; + reference + "RFC 1788 + RFC 6918"; + } + enum SKIP { + value 39; + status deprecated; + description + "SKIP (Deprecated)"; + reference + "Tom Markson + RFC 6918"; + } + enum Photuris { + value 40; + description + "Photuris"; + reference + "RFC 2521"; + } + enum ICMPmessagesutilizedbyexperimentalmobilityprotocols { + value 41; + description + "ICMP messages utilized by experimental mobility protocols + such as Seamoby"; + reference + "RFC 4065"; + } + enum ExtendedEchoRequest { + value 42; + description + "Extended Echo Request"; + reference + "RFC 8335"; + } + enum ExtendedEchoReply { + value 43; + description + "Extended Echo Reply"; + reference + "RFC 8335"; + } + } + description + "This enumeration type defines mnemonic names and corresponding + numeric values of ICMPv4 types."; + reference + "RFC 2708: IANA Allocation Guidelines For Values In the + Internet Protocol and Related Headers"; + } + + typedef icmpv4-type { + type union { + type uint8; + type icmpv4-type-name; + } + description + "This type allows reference to an ICMPv4 type using either the + assigned mnemonic name or numeric value."; + } +} diff --git a/standard/iana/iana-icmpv6-types@2025-12-22.yang b/standard/iana/iana-icmpv6-types@2025-12-22.yang new file mode 100644 index 000000000..748838710 --- /dev/null +++ b/standard/iana/iana-icmpv6-types@2025-12-22.yang @@ -0,0 +1,339 @@ +module iana-icmpv6-types { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:iana-icmpv6-types"; + prefix iana-icmpv6-types; + + organization + "Internet Assigned Numbers Authority (IANA)"; + + contact + "Internet Assigned Numbers Authority + + ICANN + 12025 Waterfront Drive, Suite 300 + Los Angeles, CA 90094 + + Tel: +1 424 254 5300 + + "; + + description + "This YANG module translates IANA registry 'ICMPv6 \"type\" + Numbers' to YANG derived types. + + 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 was generated from the + corresponding IANA registry using an XSLT stylesheet from the + 'iana-yang' project (https://github.com/llhotka/iana-yang)."; + + reference + "Internet Control Message Protocol version 6 (ICMPv6) Parameters + (https://www.iana.org/assignments/icmpv6-parameters/)"; + + revision 2025-12-22 { + description + "Initial version."; + reference + "RFC 9899" + + "iana-icmpv6-types@2025-12-22.yang"; + } + + /* Typedefs */ + + typedef icmpv6-type-name { + type enumeration { + enum DestinationUnreachable { + value 1; + description + "Destination Unreachable."; + reference + "RFC 4443"; + } + enum PacketTooBig { + value 2; + description + "Packet Too Big."; + reference + "RFC 4443"; + } + enum TimeExceeded { + value 3; + description + "Time Exceeded."; + reference + "RFC 4443"; + } + enum ParameterProblem { + value 4; + description + "Parameter Problem."; + reference + "RFC 4443"; + } + enum EchoRequest { + value 128; + description + "Echo Request."; + reference + "RFC 4443"; + } + enum EchoReply { + value 129; + description + "Echo Reply."; + reference + "RFC 4443"; + } + enum MulticastListenerQuery { + value 130; + description + "Multicast Listener Query."; + reference + "RFC 2710"; + } + enum MulticastListenerReport { + value 131; + description + "Multicast Listener Report."; + reference + "RFC 2710"; + } + enum MulticastListenerDone { + value 132; + description + "Multicast Listener Done."; + reference + "RFC 2710"; + } + enum RouterSolicitation { + value 133; + description + "Router Solicitation."; + reference + "RFC 4861"; + } + enum RouterAdvertisement { + value 134; + description + "Router Advertisement."; + reference + "RFC 4861"; + } + enum NeighborSolicitation { + value 135; + description + "Neighbor Solicitation."; + reference + "RFC 4861"; + } + enum NeighborAdvertisement { + value 136; + description + "Neighbor Advertisement."; + reference + "RFC 4861"; + } + enum RedirectMessage { + value 137; + description + "Redirect Message."; + reference + "RFC 4861"; + } + enum RouterRenumbering { + value 138; + description + "Router Renumbering."; + reference + "RFC 2894"; + } + enum ICMPNodeInformationQuery { + value 139; + description + "ICMP Node Information Query."; + reference + "RFC 4620"; + } + enum ICMPNodeInformationResponse { + value 140; + description + "ICMP Node Information Response."; + reference + "RFC 4620"; + } + enum InverseNeighborDiscoverySolicitationMessage { + value 141; + description + "Inverse Neighbor Discovery Solicitation Message."; + reference + "RFC 3122"; + } + enum InverseNeighborDiscoveryAdvertisementMessage { + value 142; + description + "Inverse Neighbor Discovery Advertisement Message."; + reference + "RFC 3122"; + } + enum Version2MulticastListenerReport { + value 143; + description + "Version 2 Multicast Listener Report."; + reference + "RFC 3810"; + } + enum HomeAgentAddressDiscoveryRequestMessage { + value 144; + description + "Home Agent Address Discovery Request Message."; + reference + "RFC 6275"; + } + enum HomeAgentAddressDiscoveryReplyMessage { + value 145; + description + "Home Agent Address Discovery Reply Message."; + reference + "RFC 6275"; + } + enum MobilePrefixSolicitation { + value 146; + description + "Mobile Prefix Solicitation."; + reference + "RFC 6275"; + } + enum MobilePrefixAdvertisement { + value 147; + description + "Mobile Prefix Advertisement."; + reference + "RFC 6275"; + } + enum CertificationPathSolicitationMessage { + value 148; + description + "Certification Path Solicitation Message."; + reference + "RFC 3971"; + } + enum CertificationPathAdvertisementMessage { + value 149; + description + "Certification Path Advertisement Message."; + reference + "RFC 3971"; + } + enum ICMPmessagesutilizedbyexperimentalmobilityprotocols { + value 150; + description + "ICMP messages utilized by experimental mobility protocols + such as Seamoby."; + reference + "RFC 4065"; + } + enum MulticastRouterAdvertisement { + value 151; + description + "Multicast Router Advertisement."; + reference + "RFC 4286"; + } + enum MulticastRouterSolicitation { + value 152; + description + "Multicast Router Solicitation."; + reference + "RFC 4286"; + } + enum MulticastRouterTermination { + value 153; + description + "Multicast Router Termination."; + reference + "RFC 4286"; + } + enum FMIPv6Messages { + value 154; + description + "FMIPv6 Messages."; + reference + "RFC 5568"; + } + enum RPLControlMessage { + value 155; + description + "RPL Control Message."; + reference + "RFC 6550"; + } + enum ILNPv6LocatorUpdateMessage { + value 156; + description + "ILNPv6 Locator Update Message."; + reference + "RFC 6743"; + } + enum DuplicateAddressRequest { + value 157; + description + "Duplicate Address Request."; + reference + "RFC 6775"; + } + enum DuplicateAddressConfirmation { + value 158; + description + "Duplicate Address Confirmation."; + reference + "RFC 6775"; + } + enum MPLControlMessage { + value 159; + description + "MPL Control Message."; + reference + "RFC 7731"; + } + enum ExtendedEchoRequest { + value 160; + description + "Extended Echo Request."; + reference + "RFC 8335"; + } + enum ExtendedEchoReply { + value 161; + description + "Extended Echo Reply."; + reference + "RFC 8335"; + } + } + description + "This enumeration type defines mnemonic names and corresponding + numeric values of ICMPv6 types."; + reference + "RFC 2708: IANA Allocation Guidelines For Values In the + Internet Protocol and Related Headers"; + } + + typedef icmpv6-type { + type union { + type uint8; + type icmpv6-type-name; + } + description + "This type allows reference to an ICMPv6 type using either the + assigned mnemonic name or numeric value."; + } +} diff --git a/standard/iana/iana-if-type@2026-02-24.yang b/standard/iana/iana-if-type@2026-02-24.yang new file mode 100644 index 000000000..db289f70a --- /dev/null +++ b/standard/iana/iana-if-type@2026-02-24.yang @@ -0,0 +1,1856 @@ +module iana-if-type { + namespace "urn:ietf:params:xml:ns:yang:iana-if-type"; + prefix ianaift; + + import ietf-interfaces { + prefix if; + } + + organization "IANA"; + contact + " Internet Assigned Numbers Authority + + Postal: ICANN + 12025 Waterfront Drive, Suite 300 + Los Angeles, CA 90094-2536 + United States + + Tel: +1 310 301 5800 + "; + description + "This YANG module defines YANG identities for IANA-registered + interface types. + + This YANG module is maintained by IANA and reflects the + 'ifType definitions' registry. + + The latest revision of this YANG module can be obtained from + the IANA web site. + + Requests for new values should be made to IANA via + email (iana@iana.org). + + Copyright (c) 2014 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). + + The initial version of this YANG module is part of RFC 7224; + see the RFC itself for full legal notices."; + reference + "IANA 'ifType definitions' registry. + "; + + revision 2026-02-24 { + description + "Registered ifTypes 304-306."; + } + + revision 2023-01-26 { + description + "Fix incorrect quotation for previous 3 revision statements."; + } + + revision 2022-08-24 { + description + "Updated reference for ifType 303."; + } + + revision 2022-08-17 { + description + "Changed gpon description to refer to G.984."; + } + + revision 2022-03-07 { + description + "Coalesced revision history entries for 2018-06-28."; + } + + revision 2021-06-21 { + description + "Corrected reference for ifType 303."; + } + + revision 2021-05-17 { + description + "Registered ifType 303."; + } + + revision 2021-04-22 { + description + "Registered ifType 302."; + } + + revision 2021-04-01 { + description + "Updated reference for 301."; + } + + revision 2021-02-18 { + description + "Registered ifType 301."; + } + + revision 2020-08-27 { + description + "Added missing references."; + } + + revision 2020-07-13 { + description + "Added identity cpri."; + } + + revision 2020-07-10 { + description + "Registered ifType 300."; + } + + revision 2020-01-10 { + description + "Registered ifType 299."; + } + + revision 2019-10-16 { + description + "Registered ifType 298."; + } + revision 2019-07-16 { + description + "Registered ifType 297."; + } + revision 2019-06-21 { + description + "Updated reference associated with ifTypes 295-296."; + } + + revision 2019-02-08 { + description + "Corrected formatting issue."; + } + + revision 2019-01-31 { + description + "Registered ifTypes 295-296."; + } + + revision 2018-07-03 { + description + "Corrected revision date."; + } + + revision 2018-06-29 { + description + "Corrected formatting issue."; + } + + revision 2018-06-28 { + description + "Registered ifTypes 293 and 294."; + } + + revision 2018-06-22 { + description + "Registered ifType 292."; + } + + revision 2018-06-21 { + description + "Registered ifType 291."; + } + + revision 2017-03-30 { + description + "Registered ifType 290."; + } + + revision 2017-01-19 { + description + "Registered ifType 289."; + } + + revision 2016-11-23 { + description + "Registered ifTypes 283-288."; + } + + revision 2016-06-09 { + description + "Registered ifType 282."; + } + revision 2016-05-03 { + description + "Registered ifType 281."; + } + revision 2015-06-12 { + description + "Corrected formatting issue."; + } + revision 2014-09-24 { + description + "Registered ifType 280."; + } + revision 2014-09-19 { + description + "Registered ifType 279."; + } + revision 2014-07-03 { + description + "Registered ifTypes 277-278."; + } + revision 2014-05-19 { + description + "Updated the contact address."; + } + revision 2014-05-08 { + description + "Initial revision."; + reference + "RFC 7224: IANA Interface Type YANG Module"; + } + + identity iana-interface-type { + base if:interface-type; + description + "This identity is used as a base for all interface types + defined in the 'ifType definitions' registry."; + } + + identity other { + base iana-interface-type; + } + identity regular1822 { + base iana-interface-type; + } + identity hdh1822 { + base iana-interface-type; + } + identity ddnX25 { + base iana-interface-type; + } + identity rfc877x25 { + base iana-interface-type; + reference + "RFC 1382 - SNMP MIB Extension for the X.25 Packet Layer"; + } + identity ethernetCsmacd { + base iana-interface-type; + description + "For all Ethernet-like interfaces, regardless of speed, + as per RFC 3635."; + reference + "RFC 3635 - Definitions of Managed Objects for the + Ethernet-like Interface Types"; + } + identity iso88023Csmacd { + base iana-interface-type; + status deprecated; + description + "Deprecated via RFC 3635. + Use ethernetCsmacd(6) instead."; + reference + "RFC 3635 - Definitions of Managed Objects for the + Ethernet-like Interface Types"; + } + identity iso88024TokenBus { + base iana-interface-type; + } + identity iso88025TokenRing { + base iana-interface-type; + } + identity iso88026Man { + base iana-interface-type; + } + identity starLan { + base iana-interface-type; + status deprecated; + description + "Deprecated via RFC 3635. + Use ethernetCsmacd(6) instead."; + reference + "RFC 3635 - Definitions of Managed Objects for the + Ethernet-like Interface Types"; + } + identity proteon10Mbit { + base iana-interface-type; + } + identity proteon80Mbit { + base iana-interface-type; + } + identity hyperchannel { + base iana-interface-type; + } + identity fddi { + base iana-interface-type; + reference + "RFC 1512 - FDDI Management Information Base"; + } + identity lapb { + base iana-interface-type; + reference + "RFC 1381 - SNMP MIB Extension for X.25 LAPB"; + } + identity sdlc { + base iana-interface-type; + } + identity ds1 { + base iana-interface-type; + description + "DS1-MIB."; + reference + "RFC 4805 - Definitions of Managed Objects for the + DS1, J1, E1, DS2, and E2 Interface Types"; + } + identity e1 { + base iana-interface-type; + status obsolete; + description + "Obsolete; see DS1-MIB."; + reference + "RFC 4805 - Definitions of Managed Objects for the + DS1, J1, E1, DS2, and E2 Interface Types"; + } + identity basicISDN { + base iana-interface-type; + description + "No longer used. See also RFC 2127."; + } + identity primaryISDN { + base iana-interface-type; + description + "No longer used. See also RFC 2127."; + } + identity propPointToPointSerial { + base iana-interface-type; + description + "Proprietary serial."; + } + identity ppp { + base iana-interface-type; + } + identity softwareLoopback { + base iana-interface-type; + } + identity eon { + base iana-interface-type; + description + "CLNP over IP."; + } + identity ethernet3Mbit { + base iana-interface-type; + } + identity nsip { + base iana-interface-type; + description + "XNS over IP."; + } + identity slip { + base iana-interface-type; + description + "Generic SLIP."; + } + identity ultra { + base iana-interface-type; + description + "Ultra Technologies."; + } + identity ds3 { + base iana-interface-type; + description + "DS3-MIB."; + reference + "RFC 3896 - Definitions of Managed Objects for the + DS3/E3 Interface Type"; + } + identity sip { + base iana-interface-type; + description + "SMDS, coffee."; + reference + "RFC 1694 - Definitions of Managed Objects for SMDS + Interfaces using SMIv2"; + } + identity frameRelay { + base iana-interface-type; + description + "DTE only."; + reference + "RFC 2115 - Management Information Base for Frame Relay + DTEs Using SMIv2"; + } + identity rs232 { + base iana-interface-type; + reference + "RFC 1659 - Definitions of Managed Objects for RS-232-like + Hardware Devices using SMIv2"; + } + identity para { + base iana-interface-type; + description + "Parallel-port."; + reference + "RFC 1660 - Definitions of Managed Objects for + Parallel-printer-like Hardware Devices using + SMIv2"; + } + identity arcnet { + base iana-interface-type; + description + "ARCnet."; + } + identity arcnetPlus { + base iana-interface-type; + description + "ARCnet Plus."; + } + identity atm { + base iana-interface-type; + description + "ATM cells."; + } + identity miox25 { + base iana-interface-type; + reference + "RFC 1461 - SNMP MIB extension for Multiprotocol + Interconnect over X.25"; + } + identity sonet { + base iana-interface-type; + description + "SONET or SDH."; + } + identity x25ple { + base iana-interface-type; + reference + "RFC 2127 - ISDN Management Information Base using SMIv2"; + } + identity iso88022llc { + base iana-interface-type; + } + identity localTalk { + base iana-interface-type; + } + identity smdsDxi { + base iana-interface-type; + } + identity frameRelayService { + base iana-interface-type; + description + "FRNETSERV-MIB."; + reference + "RFC 2954 - Definitions of Managed Objects for Frame + Relay Service"; + } + identity v35 { + base iana-interface-type; + } + identity hssi { + base iana-interface-type; + } + identity hippi { + base iana-interface-type; + } + identity modem { + base iana-interface-type; + description + "Generic modem."; + } + identity aal5 { + base iana-interface-type; + description + "AAL5 over ATM."; + } + identity sonetPath { + base iana-interface-type; + } + identity sonetVT { + base iana-interface-type; + } + identity smdsIcip { + base iana-interface-type; + description + "SMDS InterCarrier Interface."; + } + identity propVirtual { + base iana-interface-type; + description + "Proprietary virtual/internal."; + reference + "RFC 2863 - The Interfaces Group MIB"; + } + identity propMultiplexor { + base iana-interface-type; + description + "Proprietary multiplexing."; + reference + "RFC 2863 - The Interfaces Group MIB"; + } + identity ieee80212 { + base iana-interface-type; + description + "100BaseVG."; + } + identity fibreChannel { + base iana-interface-type; + description + "Fibre Channel."; + } + identity hippiInterface { + base iana-interface-type; + description + "HIPPI interfaces."; + } + identity frameRelayInterconnect { + base iana-interface-type; + status obsolete; + description + "Obsolete; use either + frameRelay(32) or frameRelayService(44)."; + } + identity aflane8023 { + base iana-interface-type; + description + "ATM Emulated LAN for 802.3."; + } + identity aflane8025 { + base iana-interface-type; + description + "ATM Emulated LAN for 802.5."; + } + identity cctEmul { + base iana-interface-type; + description + "ATM Emulated circuit."; + } + identity fastEther { + base iana-interface-type; + status deprecated; + description + "Obsoleted via RFC 3635. + ethernetCsmacd(6) should be used instead."; + reference + "RFC 3635 - Definitions of Managed Objects for the + Ethernet-like Interface Types"; + } + identity isdn { + base iana-interface-type; + description + "ISDN and X.25."; + reference + "RFC 1356 - Multiprotocol Interconnect on X.25 and ISDN + in the Packet Mode"; + } + identity v11 { + base iana-interface-type; + description + "CCITT V.11/X.21."; + } + identity v36 { + base iana-interface-type; + description + "CCITT V.36."; + } + identity g703at64k { + base iana-interface-type; + description + "CCITT G703 at 64Kbps."; + } + identity g703at2mb { + base iana-interface-type; + status obsolete; + description + "Obsolete; see DS1-MIB."; + } + identity qllc { + base iana-interface-type; + description + "SNA QLLC."; + } + identity fastEtherFX { + base iana-interface-type; + status deprecated; + description + "Obsoleted via RFC 3635. + ethernetCsmacd(6) should be used instead."; + reference + "RFC 3635 - Definitions of Managed Objects for the + Ethernet-like Interface Types"; + } + identity channel { + base iana-interface-type; + description + "Channel."; + } + identity ieee80211 { + base iana-interface-type; + description + "Radio spread spectrum."; + } + identity ibm370parChan { + base iana-interface-type; + description + "IBM System 360/370 OEMI Channel."; + } + identity escon { + base iana-interface-type; + description + "IBM Enterprise Systems Connection."; + } + identity dlsw { + base iana-interface-type; + description + "Data Link Switching."; + } + identity isdns { + base iana-interface-type; + description + "ISDN S/T interface."; + } + identity isdnu { + base iana-interface-type; + description + "ISDN U interface."; + } + identity lapd { + base iana-interface-type; + description + "Link Access Protocol D."; + } + identity ipSwitch { + base iana-interface-type; + description + "IP Switching Objects."; + } + identity rsrb { + base iana-interface-type; + description + "Remote Source Route Bridging."; + } + identity atmLogical { + base iana-interface-type; + description + "ATM Logical Port."; + reference + "RFC 3606 - Definitions of Supplemental Managed Objects + for ATM Interface"; + } + identity ds0 { + base iana-interface-type; + description + "Digital Signal Level 0."; + reference + "RFC 2494 - Definitions of Managed Objects for the DS0 + and DS0 Bundle Interface Type"; + } + identity ds0Bundle { + base iana-interface-type; + description + "Group of ds0s on the same ds1."; + reference + "RFC 2494 - Definitions of Managed Objects for the DS0 + and DS0 Bundle Interface Type"; + } + identity bsc { + base iana-interface-type; + description + "Bisynchronous Protocol."; + } + identity async { + base iana-interface-type; + description + "Asynchronous Protocol."; + } + identity cnr { + base iana-interface-type; + description + "Combat Net Radio."; + } + identity iso88025Dtr { + base iana-interface-type; + description + "ISO 802.5r DTR."; + } + identity eplrs { + base iana-interface-type; + description + "Ext Pos Loc Report Sys."; + } + identity arap { + base iana-interface-type; + description + "Appletalk Remote Access Protocol."; + } + identity propCnls { + base iana-interface-type; + description + "Proprietary Connectionless Protocol."; + } + identity hostPad { + base iana-interface-type; + description + "CCITT-ITU X.29 PAD Protocol."; + } + identity termPad { + base iana-interface-type; + description + "CCITT-ITU X.3 PAD Facility."; + } + identity frameRelayMPI { + base iana-interface-type; + description + "Multiproto Interconnect over FR."; + } + identity x213 { + base iana-interface-type; + description + "CCITT-ITU X213."; + } + identity adsl { + base iana-interface-type; + description + "Asymmetric Digital Subscriber Loop."; + } + identity radsl { + base iana-interface-type; + description + "Rate-Adapt. Digital Subscriber Loop."; + } + identity sdsl { + base iana-interface-type; + description + "Symmetric Digital Subscriber Loop."; + } + identity vdsl { + base iana-interface-type; + description + "Very H-Speed Digital Subscrib. Loop."; + } + identity iso88025CRFPInt { + base iana-interface-type; + description + "ISO 802.5 CRFP."; + } + identity myrinet { + base iana-interface-type; + description + "Myricom Myrinet."; + } + identity voiceEM { + base iana-interface-type; + description + "Voice recEive and transMit."; + } + identity voiceFXO { + base iana-interface-type; + description + "Voice Foreign Exchange Office."; + } + identity voiceFXS { + base iana-interface-type; + description + "Voice Foreign Exchange Station."; + } + identity voiceEncap { + base iana-interface-type; + description + "Voice encapsulation."; + } + identity voiceOverIp { + base iana-interface-type; + description + "Voice over IP encapsulation."; + } + identity atmDxi { + base iana-interface-type; + description + "ATM DXI."; + } + identity atmFuni { + base iana-interface-type; + description + "ATM FUNI."; + } + identity atmIma { + base iana-interface-type; + description + "ATM IMA."; + } + identity pppMultilinkBundle { + base iana-interface-type; + description + "PPP Multilink Bundle."; + } + identity ipOverCdlc { + base iana-interface-type; + description + "IBM ipOverCdlc."; + } + identity ipOverClaw { + base iana-interface-type; + description + "IBM Common Link Access to Workstn."; + } + identity stackToStack { + base iana-interface-type; + description + "IBM stackToStack."; + } + identity virtualIpAddress { + base iana-interface-type; + description + "IBM VIPA."; + } + identity mpc { + base iana-interface-type; + description + "IBM multi-protocol channel support."; + } + identity ipOverAtm { + base iana-interface-type; + description + "IBM ipOverAtm."; + reference + "RFC 2320 - Definitions of Managed Objects for Classical IP + and ARP Over ATM Using SMIv2 (IPOA-MIB)"; + } + identity iso88025Fiber { + base iana-interface-type; + description + "ISO 802.5j Fiber Token Ring."; + } + identity tdlc { + base iana-interface-type; + description + "IBM twinaxial data link control."; + } + identity gigabitEthernet { + base iana-interface-type; + status deprecated; + description + "Obsoleted via RFC 3635. + ethernetCsmacd(6) should be used instead."; + reference + "RFC 3635 - Definitions of Managed Objects for the + Ethernet-like Interface Types"; + } + identity hdlc { + base iana-interface-type; + description + "HDLC."; + } + identity lapf { + base iana-interface-type; + description + "LAP F."; + } + identity v37 { + base iana-interface-type; + description + "V.37."; + } + identity x25mlp { + base iana-interface-type; + description + "Multi-Link Protocol."; + } + identity x25huntGroup { + base iana-interface-type; + description + "X25 Hunt Group."; + } + identity transpHdlc { + base iana-interface-type; + description + "Transp HDLC."; + } + identity interleave { + base iana-interface-type; + description + "Interleave channel."; + } + identity fast { + base iana-interface-type; + description + "Fast channel."; + } + identity ip { + base iana-interface-type; + description + "IP (for APPN HPR in IP networks)."; + } + identity docsCableMaclayer { + base iana-interface-type; + description + "CATV Mac Layer."; + } + identity docsCableDownstream { + base iana-interface-type; + description + "CATV Downstream interface."; + } + identity docsCableUpstream { + base iana-interface-type; + description + "CATV Upstream interface."; + } + identity a12MppSwitch { + base iana-interface-type; + description + "Avalon Parallel Processor."; + } + identity tunnel { + base iana-interface-type; + description + "Encapsulation interface."; + } + identity coffee { + base iana-interface-type; + description + "Coffee pot."; + reference + "RFC 2325 - Coffee MIB"; + } + identity ces { + base iana-interface-type; + description + "Circuit Emulation Service."; + } + identity atmSubInterface { + base iana-interface-type; + description + "ATM Sub Interface."; + } + identity l2vlan { + base iana-interface-type; + description + "Layer 2 Virtual LAN using 802.1Q."; + } + identity l3ipvlan { + base iana-interface-type; + description + "Layer 3 Virtual LAN using IP."; + } + identity l3ipxvlan { + base iana-interface-type; + description + "Layer 3 Virtual LAN using IPX."; + } + identity digitalPowerline { + base iana-interface-type; + description + "IP over Power Lines."; + } + identity mediaMailOverIp { + base iana-interface-type; + description + "Multimedia Mail over IP."; + } + identity dtm { + base iana-interface-type; + description + "Dynamic synchronous Transfer Mode."; + } + identity dcn { + base iana-interface-type; + description + "Data Communications Network."; + } + identity ipForward { + base iana-interface-type; + description + "IP Forwarding Interface."; + } + identity msdsl { + base iana-interface-type; + description + "Multi-rate Symmetric DSL."; + } + identity ieee1394 { + base iana-interface-type; + + description + "IEEE1394 High Performance Serial Bus."; + } + identity if-gsn { + base iana-interface-type; + description + "HIPPI-6400."; + } + identity dvbRccMacLayer { + base iana-interface-type; + description + "DVB-RCC MAC Layer."; + } + identity dvbRccDownstream { + base iana-interface-type; + description + "DVB-RCC Downstream Channel."; + } + identity dvbRccUpstream { + base iana-interface-type; + description + "DVB-RCC Upstream Channel."; + } + identity atmVirtual { + base iana-interface-type; + description + "ATM Virtual Interface."; + } + identity mplsTunnel { + base iana-interface-type; + description + "MPLS Tunnel Virtual Interface."; + } + identity srp { + base iana-interface-type; + description + "Spatial Reuse Protocol."; + } + identity voiceOverAtm { + base iana-interface-type; + description + "Voice over ATM."; + } + identity voiceOverFrameRelay { + base iana-interface-type; + description + "Voice Over Frame Relay."; + } + identity idsl { + base iana-interface-type; + description + "Digital Subscriber Loop over ISDN."; + } + identity compositeLink { + base iana-interface-type; + description + "Avici Composite Link Interface."; + } + identity ss7SigLink { + base iana-interface-type; + description + "SS7 Signaling Link."; + } + identity propWirelessP2P { + base iana-interface-type; + description + "Prop. P2P wireless interface."; + } + identity frForward { + base iana-interface-type; + description + "Frame Forward Interface."; + } + identity rfc1483 { + base iana-interface-type; + description + "Multiprotocol over ATM AAL5."; + reference + "RFC 1483 - Multiprotocol Encapsulation over ATM + Adaptation Layer 5"; + } + identity usb { + base iana-interface-type; + description + "USB Interface."; + } + identity ieee8023adLag { + base iana-interface-type; + description + "IEEE 802.3ad Link Aggregate."; + } + identity bgppolicyaccounting { + base iana-interface-type; + description + "BGP Policy Accounting."; + } + identity frf16MfrBundle { + base iana-interface-type; + description + "FRF.16 Multilink Frame Relay."; + } + identity h323Gatekeeper { + base iana-interface-type; + description + "H323 Gatekeeper."; + } + identity h323Proxy { + base iana-interface-type; + description + "H323 Voice and Video Proxy."; + } + identity mpls { + base iana-interface-type; + description + "MPLS."; + } + identity mfSigLink { + base iana-interface-type; + description + "Multi-frequency signaling link."; + } + identity hdsl2 { + base iana-interface-type; + description + "High Bit-Rate DSL - 2nd generation."; + } + identity shdsl { + base iana-interface-type; + description + "Multirate HDSL2."; + } + identity ds1FDL { + base iana-interface-type; + description + "Facility Data Link (4Kbps) on a DS1."; + } + identity pos { + base iana-interface-type; + description + "Packet over SONET/SDH Interface."; + } + identity dvbAsiIn { + base iana-interface-type; + description + "DVB-ASI Input."; + } + identity dvbAsiOut { + base iana-interface-type; + description + "DVB-ASI Output."; + } + identity plc { + base iana-interface-type; + description + "Power Line Communications."; + } + identity nfas { + base iana-interface-type; + description + "Non-Facility Associated Signaling."; + } + identity tr008 { + base iana-interface-type; + description + "TR008."; + } + identity gr303RDT { + base iana-interface-type; + description + "Remote Digital Terminal."; + } + identity gr303IDT { + base iana-interface-type; + description + "Integrated Digital Terminal."; + } + identity isup { + base iana-interface-type; + description + "ISUP."; + } + identity propDocsWirelessMaclayer { + base iana-interface-type; + description + "Cisco proprietary Maclayer."; + } + identity propDocsWirelessDownstream { + base iana-interface-type; + description + "Cisco proprietary Downstream."; + } + identity propDocsWirelessUpstream { + base iana-interface-type; + description + "Cisco proprietary Upstream."; + } + identity hiperlan2 { + base iana-interface-type; + description + "HIPERLAN Type 2 Radio Interface."; + } + identity propBWAp2Mp { + base iana-interface-type; + description + "PropBroadbandWirelessAccesspt2Multipt (use of this value + for IEEE 802.16 WMAN interfaces as per IEEE Std 802.16f + is deprecated, and ieee80216WMAN(237) should be used + instead)."; + } + identity sonetOverheadChannel { + base iana-interface-type; + description + "SONET Overhead Channel."; + } + identity digitalWrapperOverheadChannel { + base iana-interface-type; + description + "Digital Wrapper."; + } + identity aal2 { + base iana-interface-type; + description + "ATM adaptation layer 2."; + } + identity radioMAC { + base iana-interface-type; + description + "MAC layer over radio links."; + } + identity atmRadio { + base iana-interface-type; + description + "ATM over radio links."; + } + identity imt { + base iana-interface-type; + description + "Inter-Machine Trunks."; + } + identity mvl { + base iana-interface-type; + description + "Multiple Virtual Lines DSL."; + } + identity reachDSL { + base iana-interface-type; + description + "Long Reach DSL."; + } + identity frDlciEndPt { + base iana-interface-type; + description + "Frame Relay DLCI End Point."; + } + identity atmVciEndPt { + base iana-interface-type; + description + "ATM VCI End Point."; + } + identity opticalChannel { + base iana-interface-type; + description + "Optical Channel."; + } + identity opticalTransport { + base iana-interface-type; + description + "Optical Transport."; + } + identity propAtm { + base iana-interface-type; + description + "Proprietary ATM."; + } + identity voiceOverCable { + base iana-interface-type; + description + "Voice Over Cable Interface."; + } + identity infiniband { + base iana-interface-type; + description + "Infiniband."; + } + identity teLink { + base iana-interface-type; + description + "TE Link."; + } + identity q2931 { + base iana-interface-type; + description + "Q.2931."; + } + identity virtualTg { + base iana-interface-type; + description + "Virtual Trunk Group."; + } + identity sipTg { + base iana-interface-type; + description + "SIP Trunk Group."; + } + identity sipSig { + base iana-interface-type; + description + "SIP Signaling."; + } + identity docsCableUpstreamChannel { + base iana-interface-type; + description + "CATV Upstream Channel."; + } + identity econet { + base iana-interface-type; + description + "Acorn Econet."; + } + identity pon155 { + base iana-interface-type; + description + "FSAN 155Mb Symetrical PON interface."; + } + identity pon622 { + base iana-interface-type; + description + "FSAN 622Mb Symetrical PON interface."; + } + identity bridge { + base iana-interface-type; + description + "Transparent bridge interface."; + } + identity linegroup { + base iana-interface-type; + description + "Interface common to multiple lines."; + } + identity voiceEMFGD { + base iana-interface-type; + description + "Voice E&M Feature Group D."; + } + identity voiceFGDEANA { + base iana-interface-type; + description + "Voice FGD Exchange Access North American."; + } + identity voiceDID { + base iana-interface-type; + description + "Voice Direct Inward Dialing."; + } + identity mpegTransport { + base iana-interface-type; + description + "MPEG transport interface."; + } + identity sixToFour { + base iana-interface-type; + status deprecated; + description + "6to4 interface (DEPRECATED)."; + reference + "RFC 4087 - IP Tunnel MIB"; + } + identity gtp { + base iana-interface-type; + description + "GTP (GPRS Tunneling Protocol)."; + } + identity pdnEtherLoop1 { + base iana-interface-type; + description + "Paradyne EtherLoop 1."; + } + identity pdnEtherLoop2 { + base iana-interface-type; + description + "Paradyne EtherLoop 2."; + } + identity opticalChannelGroup { + base iana-interface-type; + description + "Optical Channel Group."; + } + identity homepna { + base iana-interface-type; + description + "HomePNA ITU-T G.989."; + } + identity gfp { + base iana-interface-type; + description + "Generic Framing Procedure (GFP)."; + } + identity ciscoISLvlan { + base iana-interface-type; + description + "Layer 2 Virtual LAN using Cisco ISL."; + } + identity actelisMetaLOOP { + base iana-interface-type; + description + "Acteleis proprietary MetaLOOP High Speed Link."; + } + identity fcipLink { + base iana-interface-type; + description + "FCIP Link."; + } + identity rpr { + base iana-interface-type; + description + "Resilient Packet Ring Interface Type."; + } + identity qam { + base iana-interface-type; + description + "RF Qam Interface."; + } + identity lmp { + base iana-interface-type; + description + "Link Management Protocol."; + reference + "RFC 4327 - Link Management Protocol (LMP) Management + Information Base (MIB)"; + } + identity cblVectaStar { + base iana-interface-type; + description + "Cambridge Broadband Networks Limited VectaStar."; + } + identity docsCableMCmtsDownstream { + base iana-interface-type; + description + "CATV Modular CMTS Downstream Interface."; + } + identity adsl2 { + base iana-interface-type; + status deprecated; + description + "Asymmetric Digital Subscriber Loop Version 2 + (DEPRECATED/OBSOLETED - please use adsl2plus(238) + instead)."; + reference + "RFC 4706 - Definitions of Managed Objects for Asymmetric + Digital Subscriber Line 2 (ADSL2)"; + } + identity macSecControlledIF { + base iana-interface-type; + description + "MACSecControlled."; + } + identity macSecUncontrolledIF { + base iana-interface-type; + description + "MACSecUncontrolled."; + } + identity aviciOpticalEther { + base iana-interface-type; + description + "Avici Optical Ethernet Aggregate."; + } + identity atmbond { + base iana-interface-type; + description + "atmbond."; + } + identity voiceFGDOS { + base iana-interface-type; + description + "Voice FGD Operator Services."; + } + identity mocaVersion1 { + base iana-interface-type; + description + "MultiMedia over Coax Alliance (MoCA) Interface + as documented in information provided privately to IANA."; + } + identity ieee80216WMAN { + base iana-interface-type; + description + "IEEE 802.16 WMAN interface."; + } + identity adsl2plus { + base iana-interface-type; + description + "Asymmetric Digital Subscriber Loop Version 2 - + Version 2 Plus and all variants."; + } + identity dvbRcsMacLayer { + base iana-interface-type; + description + "DVB-RCS MAC Layer."; + reference + "RFC 5728 - The SatLabs Group DVB-RCS MIB"; + } + identity dvbTdm { + base iana-interface-type; + description + "DVB Satellite TDM."; + reference + "RFC 5728 - The SatLabs Group DVB-RCS MIB"; + } + identity dvbRcsTdma { + base iana-interface-type; + description + "DVB-RCS TDMA."; + reference + "RFC 5728 - The SatLabs Group DVB-RCS MIB"; + } + identity x86Laps { + base iana-interface-type; + description + "LAPS based on ITU-T X.86/Y.1323."; + } + identity wwanPP { + base iana-interface-type; + description + "3GPP WWAN."; + } + identity wwanPP2 { + base iana-interface-type; + description + "3GPP2 WWAN."; + } + identity voiceEBS { + base iana-interface-type; + description + "Voice P-phone EBS physical interface."; + } + identity ifPwType { + base iana-interface-type; + description + "Pseudowire interface type."; + reference + "RFC 5601 - Pseudowire (PW) Management Information Base (MIB)"; + } + identity ilan { + base iana-interface-type; + description + "Internal LAN on a bridge per IEEE 802.1ap."; + } + identity pip { + base iana-interface-type; + description + "Provider Instance Port on a bridge per IEEE 802.1ah PBB."; + } + identity aluELP { + base iana-interface-type; + description + "Alcatel-Lucent Ethernet Link Protection."; + } + identity gpon { + base iana-interface-type; + description + "Gigabit-capable passive optical networks (G-PON) as per + ITU-T G.984."; + } + identity vdsl2 { + base iana-interface-type; + description + "Very high speed digital subscriber line Version 2 + (as per ITU-T Recommendation G.993.2)."; + reference + "RFC 5650 - Definitions of Managed Objects for Very High + Speed Digital Subscriber Line 2 (VDSL2)"; + } + identity capwapDot11Profile { + base iana-interface-type; + description + "WLAN Profile Interface."; + reference + "RFC 5834 - Control and Provisioning of Wireless Access + Points (CAPWAP) Protocol Binding MIB for + IEEE 802.11"; + } + identity capwapDot11Bss { + base iana-interface-type; + description + "WLAN BSS Interface."; + reference + "RFC 5834 - Control and Provisioning of Wireless Access + Points (CAPWAP) Protocol Binding MIB for + IEEE 802.11"; + } + identity capwapWtpVirtualRadio { + base iana-interface-type; + description + "WTP Virtual Radio Interface."; + reference + "RFC 5833 - Control and Provisioning of Wireless Access + Points (CAPWAP) Protocol Base MIB"; + } + identity bits { + base iana-interface-type; + description + "bitsport."; + } + identity docsCableUpstreamRfPort { + base iana-interface-type; + description + "DOCSIS CATV Upstream RF Port."; + } + identity cableDownstreamRfPort { + base iana-interface-type; + description + "CATV downstream RF Port."; + } + identity vmwareVirtualNic { + base iana-interface-type; + description + "VMware Virtual Network Interface."; + } + identity ieee802154 { + base iana-interface-type; + description + "IEEE 802.15.4 WPAN interface."; + reference + "IEEE 802.15.4-2006"; + } + identity otnOdu { + base iana-interface-type; + description + "OTN Optical Data Unit."; + } + identity otnOtu { + base iana-interface-type; + description + "OTN Optical channel Transport Unit."; + } + identity ifVfiType { + base iana-interface-type; + description + "VPLS Forwarding Instance Interface Type."; + } + identity g9981 { + base iana-interface-type; + description + "G.998.1 bonded interface."; + } + identity g9982 { + base iana-interface-type; + description + "G.998.2 bonded interface."; + } + identity g9983 { + base iana-interface-type; + description + "G.998.3 bonded interface."; + } + + identity aluEpon { + base iana-interface-type; + description + "Ethernet Passive Optical Networks (E-PON)."; + } + identity aluEponOnu { + base iana-interface-type; + description + "EPON Optical Network Unit."; + } + identity aluEponPhysicalUni { + base iana-interface-type; + description + "EPON physical User to Network interface."; + } + identity aluEponLogicalLink { + base iana-interface-type; + description + "The emulation of a point-to-point link over the EPON + layer."; + } + identity aluGponOnu { + base iana-interface-type; + description + "GPON Optical Network Unit."; + reference + "ITU-T G.984.2"; + } + identity aluGponPhysicalUni { + base iana-interface-type; + description + "GPON physical User to Network interface."; + reference + "ITU-T G.984.2"; + } + identity vmwareNicTeam { + base iana-interface-type; + description + "VMware NIC Team."; + } + identity docsOfdmDownstream { + base iana-interface-type; + description + "CATV Downstream OFDM interface."; + reference + "Cable Modem Operations Support System Interface + Specification"; + } + identity docsOfdmaUpstream { + base iana-interface-type; + description + "CATV Upstream OFDMA interface."; + reference + "Cable Modem Operations Support System Interface + Specification"; + } + identity gfast { + base iana-interface-type; + description + "G.fast port."; + reference + "ITU-T G.9701"; + } + identity sdci { + base iana-interface-type; + description + "SDCI (IO-Link)."; + reference + "IEC 61131-9 Edition 1.0 2013-09"; + } + identity xboxWireless { + base iana-interface-type; + description + "Xbox wireless."; + } + identity fastdsl { + base iana-interface-type; + description + "FastDSL."; + reference + "BBF TR-355"; + } + identity docsCableScte55d1FwdOob { + base iana-interface-type; + description + "Cable SCTE 55-1 OOB Forward Channel."; + reference + "ANSI/SCTE 55-1 2009"; + } + identity docsCableScte55d1RetOob { + base iana-interface-type; + description + "Cable SCTE 55-1 OOB Return Channel."; + reference + "ANSI/SCTE 55-1 2009"; + } + identity docsCableScte55d2DsOob { + base iana-interface-type; + description + "Cable SCTE 55-2 OOB Downstream Channel."; + reference + "ANSI/SCTE 55-2 2008"; + } + identity docsCableScte55d2UsOob { + base iana-interface-type; + description + "Cable SCTE 55-2 OOB Upstream Channel."; + reference + "ANSI/SCTE 55-2 2008"; + } + identity docsCableNdf { + base iana-interface-type; + description + "Cable Narrowband Digital Forward."; + } + identity docsCableNdr { + base iana-interface-type; + description + "Cable Narrowband Digital Return."; + } + identity ptm { + base iana-interface-type; + description + "Packet Transfer Mode."; + reference + "IEEE G.993.1, Annex H; IEEE G.993.2; IEEE G.9701"; + } + identity ghn { + base iana-interface-type; + description + "G.hn port."; + reference + "IEEE G.9961"; + } + identity otnOtsi { + base iana-interface-type; + description + "Optical Tributary Signal."; + reference + "ITU-T G.959.1"; + } + identity otnOtuc { + base iana-interface-type; + description + "OTN OTUCn."; + reference + "ITU-T G.709/Y.1331"; + } + identity otnOduc { + base iana-interface-type; + description + "OTN ODUC."; + reference + "ITU-T G.709"; + } + identity otnOtsig { + base iana-interface-type; + description + "OTN OTUC Signal."; + reference + "ITU-T G.709"; + } + identity microwaveCarrierTermination { + base iana-interface-type; + description + "air interface of a single microwave carrier."; + reference + "RFC 8561 - A YANG Data Model for Microwave Radio Link"; + } + identity microwaveRadioLinkTerminal { + base iana-interface-type; + description + "radio link interface for one or several aggregated microwave carriers."; + reference + "RFC 8561 - A YANG Data Model for Microwave Radio Link"; + } + identity ieee8021axDrni { + base iana-interface-type; + description + "IEEE 802.1AX Distributed Resilient Network Interface."; + reference + "IEEE 802.1AX-Rev-d2-0"; + } + identity ax25 { + base iana-interface-type; + description + "AX.25 network interfaces."; + reference + "AX.25 Link Access Protocol for Amateur Packet Radio version 2.2"; + } + identity ieee19061nanocom { + base iana-interface-type; + description + "Nanoscale and Molecular Communication."; + reference + "IEEE 1906.1-2015"; + } + identity cpri { + base iana-interface-type; + description + "Common Public Radio Interface."; + reference + "CPRI v7.0"; + } + identity omni { + base iana-interface-type; + description + "Overlay Multilink Network Interface (OMNI)."; + reference + "draft-templin-6man-omni-00"; + } + identity roe { + base iana-interface-type; + description + "Radio over Ethernet Interface."; + reference + "1914.3-2018 - IEEE Standard for Radio over Ethernet Encapsulations and Mappings"; + } + identity p2pOverLan { + base iana-interface-type; + description + "Point to Point over LAN interface."; + reference + "RFC 9296 - ifStackTable for the Point-to-Point (P2P) Interface over a LAN Type: Definition and Examples"; + } +} diff --git a/standard/iana/iana-if-type@2026-03-17.yang b/standard/iana/iana-if-type@2026-03-17.yang new file mode 100644 index 000000000..5b513bc36 --- /dev/null +++ b/standard/iana/iana-if-type@2026-03-17.yang @@ -0,0 +1,1896 @@ +module iana-if-type { + namespace "urn:ietf:params:xml:ns:yang:iana-if-type"; + prefix ianaift; + + import ietf-interfaces { + prefix if; + } + + organization "IANA"; + contact + " Internet Assigned Numbers Authority + + Postal: ICANN + 12025 Waterfront Drive, Suite 300 + Los Angeles, CA 90094-2536 + United States + + Tel: +1 310 301 5800 + "; + description + "This YANG module defines YANG identities for IANA-registered + interface types. + + This YANG module is maintained by IANA and reflects the + 'ifType definitions' registry. + + The latest revision of this YANG module can be obtained from + the IANA web site. + + Requests for new values should be made to IANA via + email (iana@iana.org). + + Copyright (c) 2014 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). + + The initial version of this YANG module is part of RFC 7224; + see the RFC itself for full legal notices."; + reference + "IANA 'ifType definitions' registry. + "; + + revision 2026-03-17 { + description + "Registered ifTypes 307-308 and added missing identity statements for ifTypes 304-306."; + } + + revision 2026-02-24 { + description + "Registered ifTypes 304-306."; + } + + revision 2023-01-26 { + description + "Fix incorrect quotation for previous 3 revision statements."; + } + + revision 2022-08-24 { + description + "Updated reference for ifType 303."; + } + + revision 2022-08-17 { + description + "Changed gpon description to refer to G.984."; + } + + revision 2022-03-07 { + description + "Coalesced revision history entries for 2018-06-28."; + } + + revision 2021-06-21 { + description + "Corrected reference for ifType 303."; + } + + revision 2021-05-17 { + description + "Registered ifType 303."; + } + + revision 2021-04-22 { + description + "Registered ifType 302."; + } + + revision 2021-04-01 { + description + "Updated reference for 301."; + } + + revision 2021-02-18 { + description + "Registered ifType 301."; + } + + revision 2020-08-27 { + description + "Added missing references."; + } + + revision 2020-07-13 { + description + "Added identity cpri."; + } + + revision 2020-07-10 { + description + "Registered ifType 300."; + } + + revision 2020-01-10 { + description + "Registered ifType 299."; + } + + revision 2019-10-16 { + description + "Registered ifType 298."; + } + revision 2019-07-16 { + description + "Registered ifType 297."; + } + revision 2019-06-21 { + description + "Updated reference associated with ifTypes 295-296."; + } + + revision 2019-02-08 { + description + "Corrected formatting issue."; + } + + revision 2019-01-31 { + description + "Registered ifTypes 295-296."; + } + + revision 2018-07-03 { + description + "Corrected revision date."; + } + + revision 2018-06-29 { + description + "Corrected formatting issue."; + } + + revision 2018-06-28 { + description + "Registered ifTypes 293 and 294."; + } + + revision 2018-06-22 { + description + "Registered ifType 292."; + } + + revision 2018-06-21 { + description + "Registered ifType 291."; + } + + revision 2017-03-30 { + description + "Registered ifType 290."; + } + + revision 2017-01-19 { + description + "Registered ifType 289."; + } + + revision 2016-11-23 { + description + "Registered ifTypes 283-288."; + } + + revision 2016-06-09 { + description + "Registered ifType 282."; + } + revision 2016-05-03 { + description + "Registered ifType 281."; + } + revision 2015-06-12 { + description + "Corrected formatting issue."; + } + revision 2014-09-24 { + description + "Registered ifType 280."; + } + revision 2014-09-19 { + description + "Registered ifType 279."; + } + revision 2014-07-03 { + description + "Registered ifTypes 277-278."; + } + revision 2014-05-19 { + description + "Updated the contact address."; + } + revision 2014-05-08 { + description + "Initial revision."; + reference + "RFC 7224: IANA Interface Type YANG Module"; + } + + identity iana-interface-type { + base if:interface-type; + description + "This identity is used as a base for all interface types + defined in the 'ifType definitions' registry."; + } + + identity other { + base iana-interface-type; + } + identity regular1822 { + base iana-interface-type; + } + identity hdh1822 { + base iana-interface-type; + } + identity ddnX25 { + base iana-interface-type; + } + identity rfc877x25 { + base iana-interface-type; + reference + "RFC 1382 - SNMP MIB Extension for the X.25 Packet Layer"; + } + identity ethernetCsmacd { + base iana-interface-type; + description + "For all Ethernet-like interfaces, regardless of speed, + as per RFC 3635."; + reference + "RFC 3635 - Definitions of Managed Objects for the + Ethernet-like Interface Types"; + } + identity iso88023Csmacd { + base iana-interface-type; + status deprecated; + description + "Deprecated via RFC 3635. + Use ethernetCsmacd(6) instead."; + reference + "RFC 3635 - Definitions of Managed Objects for the + Ethernet-like Interface Types"; + } + identity iso88024TokenBus { + base iana-interface-type; + } + identity iso88025TokenRing { + base iana-interface-type; + } + identity iso88026Man { + base iana-interface-type; + } + identity starLan { + base iana-interface-type; + status deprecated; + description + "Deprecated via RFC 3635. + Use ethernetCsmacd(6) instead."; + reference + "RFC 3635 - Definitions of Managed Objects for the + Ethernet-like Interface Types"; + } + identity proteon10Mbit { + base iana-interface-type; + } + identity proteon80Mbit { + base iana-interface-type; + } + identity hyperchannel { + base iana-interface-type; + } + identity fddi { + base iana-interface-type; + reference + "RFC 1512 - FDDI Management Information Base"; + } + identity lapb { + base iana-interface-type; + reference + "RFC 1381 - SNMP MIB Extension for X.25 LAPB"; + } + identity sdlc { + base iana-interface-type; + } + identity ds1 { + base iana-interface-type; + description + "DS1-MIB."; + reference + "RFC 4805 - Definitions of Managed Objects for the + DS1, J1, E1, DS2, and E2 Interface Types"; + } + identity e1 { + base iana-interface-type; + status obsolete; + description + "Obsolete; see DS1-MIB."; + reference + "RFC 4805 - Definitions of Managed Objects for the + DS1, J1, E1, DS2, and E2 Interface Types"; + } + identity basicISDN { + base iana-interface-type; + description + "No longer used. See also RFC 2127."; + } + identity primaryISDN { + base iana-interface-type; + description + "No longer used. See also RFC 2127."; + } + identity propPointToPointSerial { + base iana-interface-type; + description + "Proprietary serial."; + } + identity ppp { + base iana-interface-type; + } + identity softwareLoopback { + base iana-interface-type; + } + identity eon { + base iana-interface-type; + description + "CLNP over IP."; + } + identity ethernet3Mbit { + base iana-interface-type; + } + identity nsip { + base iana-interface-type; + description + "XNS over IP."; + } + identity slip { + base iana-interface-type; + description + "Generic SLIP."; + } + identity ultra { + base iana-interface-type; + description + "Ultra Technologies."; + } + identity ds3 { + base iana-interface-type; + description + "DS3-MIB."; + reference + "RFC 3896 - Definitions of Managed Objects for the + DS3/E3 Interface Type"; + } + identity sip { + base iana-interface-type; + description + "SMDS, coffee."; + reference + "RFC 1694 - Definitions of Managed Objects for SMDS + Interfaces using SMIv2"; + } + identity frameRelay { + base iana-interface-type; + description + "DTE only."; + reference + "RFC 2115 - Management Information Base for Frame Relay + DTEs Using SMIv2"; + } + identity rs232 { + base iana-interface-type; + reference + "RFC 1659 - Definitions of Managed Objects for RS-232-like + Hardware Devices using SMIv2"; + } + identity para { + base iana-interface-type; + description + "Parallel-port."; + reference + "RFC 1660 - Definitions of Managed Objects for + Parallel-printer-like Hardware Devices using + SMIv2"; + } + identity arcnet { + base iana-interface-type; + description + "ARCnet."; + } + identity arcnetPlus { + base iana-interface-type; + description + "ARCnet Plus."; + } + identity atm { + base iana-interface-type; + description + "ATM cells."; + } + identity miox25 { + base iana-interface-type; + reference + "RFC 1461 - SNMP MIB extension for Multiprotocol + Interconnect over X.25"; + } + identity sonet { + base iana-interface-type; + description + "SONET or SDH."; + } + identity x25ple { + base iana-interface-type; + reference + "RFC 2127 - ISDN Management Information Base using SMIv2"; + } + identity iso88022llc { + base iana-interface-type; + } + identity localTalk { + base iana-interface-type; + } + identity smdsDxi { + base iana-interface-type; + } + identity frameRelayService { + base iana-interface-type; + description + "FRNETSERV-MIB."; + reference + "RFC 2954 - Definitions of Managed Objects for Frame + Relay Service"; + } + identity v35 { + base iana-interface-type; + } + identity hssi { + base iana-interface-type; + } + identity hippi { + base iana-interface-type; + } + identity modem { + base iana-interface-type; + description + "Generic modem."; + } + identity aal5 { + base iana-interface-type; + description + "AAL5 over ATM."; + } + identity sonetPath { + base iana-interface-type; + } + identity sonetVT { + base iana-interface-type; + } + identity smdsIcip { + base iana-interface-type; + description + "SMDS InterCarrier Interface."; + } + identity propVirtual { + base iana-interface-type; + description + "Proprietary virtual/internal."; + reference + "RFC 2863 - The Interfaces Group MIB"; + } + identity propMultiplexor { + base iana-interface-type; + description + "Proprietary multiplexing."; + reference + "RFC 2863 - The Interfaces Group MIB"; + } + identity ieee80212 { + base iana-interface-type; + description + "100BaseVG."; + } + identity fibreChannel { + base iana-interface-type; + description + "Fibre Channel."; + } + identity hippiInterface { + base iana-interface-type; + description + "HIPPI interfaces."; + } + identity frameRelayInterconnect { + base iana-interface-type; + status obsolete; + description + "Obsolete; use either + frameRelay(32) or frameRelayService(44)."; + } + identity aflane8023 { + base iana-interface-type; + description + "ATM Emulated LAN for 802.3."; + } + identity aflane8025 { + base iana-interface-type; + description + "ATM Emulated LAN for 802.5."; + } + identity cctEmul { + base iana-interface-type; + description + "ATM Emulated circuit."; + } + identity fastEther { + base iana-interface-type; + status deprecated; + description + "Obsoleted via RFC 3635. + ethernetCsmacd(6) should be used instead."; + reference + "RFC 3635 - Definitions of Managed Objects for the + Ethernet-like Interface Types"; + } + identity isdn { + base iana-interface-type; + description + "ISDN and X.25."; + reference + "RFC 1356 - Multiprotocol Interconnect on X.25 and ISDN + in the Packet Mode"; + } + identity v11 { + base iana-interface-type; + description + "CCITT V.11/X.21."; + } + identity v36 { + base iana-interface-type; + description + "CCITT V.36."; + } + identity g703at64k { + base iana-interface-type; + description + "CCITT G703 at 64Kbps."; + } + identity g703at2mb { + base iana-interface-type; + status obsolete; + description + "Obsolete; see DS1-MIB."; + } + identity qllc { + base iana-interface-type; + description + "SNA QLLC."; + } + identity fastEtherFX { + base iana-interface-type; + status deprecated; + description + "Obsoleted via RFC 3635. + ethernetCsmacd(6) should be used instead."; + reference + "RFC 3635 - Definitions of Managed Objects for the + Ethernet-like Interface Types"; + } + identity channel { + base iana-interface-type; + description + "Channel."; + } + identity ieee80211 { + base iana-interface-type; + description + "Radio spread spectrum."; + } + identity ibm370parChan { + base iana-interface-type; + description + "IBM System 360/370 OEMI Channel."; + } + identity escon { + base iana-interface-type; + description + "IBM Enterprise Systems Connection."; + } + identity dlsw { + base iana-interface-type; + description + "Data Link Switching."; + } + identity isdns { + base iana-interface-type; + description + "ISDN S/T interface."; + } + identity isdnu { + base iana-interface-type; + description + "ISDN U interface."; + } + identity lapd { + base iana-interface-type; + description + "Link Access Protocol D."; + } + identity ipSwitch { + base iana-interface-type; + description + "IP Switching Objects."; + } + identity rsrb { + base iana-interface-type; + description + "Remote Source Route Bridging."; + } + identity atmLogical { + base iana-interface-type; + description + "ATM Logical Port."; + reference + "RFC 3606 - Definitions of Supplemental Managed Objects + for ATM Interface"; + } + identity ds0 { + base iana-interface-type; + description + "Digital Signal Level 0."; + reference + "RFC 2494 - Definitions of Managed Objects for the DS0 + and DS0 Bundle Interface Type"; + } + identity ds0Bundle { + base iana-interface-type; + description + "Group of ds0s on the same ds1."; + reference + "RFC 2494 - Definitions of Managed Objects for the DS0 + and DS0 Bundle Interface Type"; + } + identity bsc { + base iana-interface-type; + description + "Bisynchronous Protocol."; + } + identity async { + base iana-interface-type; + description + "Asynchronous Protocol."; + } + identity cnr { + base iana-interface-type; + description + "Combat Net Radio."; + } + identity iso88025Dtr { + base iana-interface-type; + description + "ISO 802.5r DTR."; + } + identity eplrs { + base iana-interface-type; + description + "Ext Pos Loc Report Sys."; + } + identity arap { + base iana-interface-type; + description + "Appletalk Remote Access Protocol."; + } + identity propCnls { + base iana-interface-type; + description + "Proprietary Connectionless Protocol."; + } + identity hostPad { + base iana-interface-type; + description + "CCITT-ITU X.29 PAD Protocol."; + } + identity termPad { + base iana-interface-type; + description + "CCITT-ITU X.3 PAD Facility."; + } + identity frameRelayMPI { + base iana-interface-type; + description + "Multiproto Interconnect over FR."; + } + identity x213 { + base iana-interface-type; + description + "CCITT-ITU X213."; + } + identity adsl { + base iana-interface-type; + description + "Asymmetric Digital Subscriber Loop."; + } + identity radsl { + base iana-interface-type; + description + "Rate-Adapt. Digital Subscriber Loop."; + } + identity sdsl { + base iana-interface-type; + description + "Symmetric Digital Subscriber Loop."; + } + identity vdsl { + base iana-interface-type; + description + "Very H-Speed Digital Subscrib. Loop."; + } + identity iso88025CRFPInt { + base iana-interface-type; + description + "ISO 802.5 CRFP."; + } + identity myrinet { + base iana-interface-type; + description + "Myricom Myrinet."; + } + identity voiceEM { + base iana-interface-type; + description + "Voice recEive and transMit."; + } + identity voiceFXO { + base iana-interface-type; + description + "Voice Foreign Exchange Office."; + } + identity voiceFXS { + base iana-interface-type; + description + "Voice Foreign Exchange Station."; + } + identity voiceEncap { + base iana-interface-type; + description + "Voice encapsulation."; + } + identity voiceOverIp { + base iana-interface-type; + description + "Voice over IP encapsulation."; + } + identity atmDxi { + base iana-interface-type; + description + "ATM DXI."; + } + identity atmFuni { + base iana-interface-type; + description + "ATM FUNI."; + } + identity atmIma { + base iana-interface-type; + description + "ATM IMA."; + } + identity pppMultilinkBundle { + base iana-interface-type; + description + "PPP Multilink Bundle."; + } + identity ipOverCdlc { + base iana-interface-type; + description + "IBM ipOverCdlc."; + } + identity ipOverClaw { + base iana-interface-type; + description + "IBM Common Link Access to Workstn."; + } + identity stackToStack { + base iana-interface-type; + description + "IBM stackToStack."; + } + identity virtualIpAddress { + base iana-interface-type; + description + "IBM VIPA."; + } + identity mpc { + base iana-interface-type; + description + "IBM multi-protocol channel support."; + } + identity ipOverAtm { + base iana-interface-type; + description + "IBM ipOverAtm."; + reference + "RFC 2320 - Definitions of Managed Objects for Classical IP + and ARP Over ATM Using SMIv2 (IPOA-MIB)"; + } + identity iso88025Fiber { + base iana-interface-type; + description + "ISO 802.5j Fiber Token Ring."; + } + identity tdlc { + base iana-interface-type; + description + "IBM twinaxial data link control."; + } + identity gigabitEthernet { + base iana-interface-type; + status deprecated; + description + "Obsoleted via RFC 3635. + ethernetCsmacd(6) should be used instead."; + reference + "RFC 3635 - Definitions of Managed Objects for the + Ethernet-like Interface Types"; + } + identity hdlc { + base iana-interface-type; + description + "HDLC."; + } + identity lapf { + base iana-interface-type; + description + "LAP F."; + } + identity v37 { + base iana-interface-type; + description + "V.37."; + } + identity x25mlp { + base iana-interface-type; + description + "Multi-Link Protocol."; + } + identity x25huntGroup { + base iana-interface-type; + description + "X25 Hunt Group."; + } + identity transpHdlc { + base iana-interface-type; + description + "Transp HDLC."; + } + identity interleave { + base iana-interface-type; + description + "Interleave channel."; + } + identity fast { + base iana-interface-type; + description + "Fast channel."; + } + identity ip { + base iana-interface-type; + description + "IP (for APPN HPR in IP networks)."; + } + identity docsCableMaclayer { + base iana-interface-type; + description + "CATV Mac Layer."; + } + identity docsCableDownstream { + base iana-interface-type; + description + "CATV Downstream interface."; + } + identity docsCableUpstream { + base iana-interface-type; + description + "CATV Upstream interface."; + } + identity a12MppSwitch { + base iana-interface-type; + description + "Avalon Parallel Processor."; + } + identity tunnel { + base iana-interface-type; + description + "Encapsulation interface."; + } + identity coffee { + base iana-interface-type; + description + "Coffee pot."; + reference + "RFC 2325 - Coffee MIB"; + } + identity ces { + base iana-interface-type; + description + "Circuit Emulation Service."; + } + identity atmSubInterface { + base iana-interface-type; + description + "ATM Sub Interface."; + } + identity l2vlan { + base iana-interface-type; + description + "Layer 2 Virtual LAN using 802.1Q."; + } + identity l3ipvlan { + base iana-interface-type; + description + "Layer 3 Virtual LAN using IP."; + } + identity l3ipxvlan { + base iana-interface-type; + description + "Layer 3 Virtual LAN using IPX."; + } + identity digitalPowerline { + base iana-interface-type; + description + "IP over Power Lines."; + } + identity mediaMailOverIp { + base iana-interface-type; + description + "Multimedia Mail over IP."; + } + identity dtm { + base iana-interface-type; + description + "Dynamic synchronous Transfer Mode."; + } + identity dcn { + base iana-interface-type; + description + "Data Communications Network."; + } + identity ipForward { + base iana-interface-type; + description + "IP Forwarding Interface."; + } + identity msdsl { + base iana-interface-type; + description + "Multi-rate Symmetric DSL."; + } + identity ieee1394 { + base iana-interface-type; + + description + "IEEE1394 High Performance Serial Bus."; + } + identity if-gsn { + base iana-interface-type; + description + "HIPPI-6400."; + } + identity dvbRccMacLayer { + base iana-interface-type; + description + "DVB-RCC MAC Layer."; + } + identity dvbRccDownstream { + base iana-interface-type; + description + "DVB-RCC Downstream Channel."; + } + identity dvbRccUpstream { + base iana-interface-type; + description + "DVB-RCC Upstream Channel."; + } + identity atmVirtual { + base iana-interface-type; + description + "ATM Virtual Interface."; + } + identity mplsTunnel { + base iana-interface-type; + description + "MPLS Tunnel Virtual Interface."; + } + identity srp { + base iana-interface-type; + description + "Spatial Reuse Protocol."; + } + identity voiceOverAtm { + base iana-interface-type; + description + "Voice over ATM."; + } + identity voiceOverFrameRelay { + base iana-interface-type; + description + "Voice Over Frame Relay."; + } + identity idsl { + base iana-interface-type; + description + "Digital Subscriber Loop over ISDN."; + } + identity compositeLink { + base iana-interface-type; + description + "Avici Composite Link Interface."; + } + identity ss7SigLink { + base iana-interface-type; + description + "SS7 Signaling Link."; + } + identity propWirelessP2P { + base iana-interface-type; + description + "Prop. P2P wireless interface."; + } + identity frForward { + base iana-interface-type; + description + "Frame Forward Interface."; + } + identity rfc1483 { + base iana-interface-type; + description + "Multiprotocol over ATM AAL5."; + reference + "RFC 1483 - Multiprotocol Encapsulation over ATM + Adaptation Layer 5"; + } + identity usb { + base iana-interface-type; + description + "USB Interface."; + } + identity ieee8023adLag { + base iana-interface-type; + description + "IEEE 802.3ad Link Aggregate."; + } + identity bgppolicyaccounting { + base iana-interface-type; + description + "BGP Policy Accounting."; + } + identity frf16MfrBundle { + base iana-interface-type; + description + "FRF.16 Multilink Frame Relay."; + } + identity h323Gatekeeper { + base iana-interface-type; + description + "H323 Gatekeeper."; + } + identity h323Proxy { + base iana-interface-type; + description + "H323 Voice and Video Proxy."; + } + identity mpls { + base iana-interface-type; + description + "MPLS."; + } + identity mfSigLink { + base iana-interface-type; + description + "Multi-frequency signaling link."; + } + identity hdsl2 { + base iana-interface-type; + description + "High Bit-Rate DSL - 2nd generation."; + } + identity shdsl { + base iana-interface-type; + description + "Multirate HDSL2."; + } + identity ds1FDL { + base iana-interface-type; + description + "Facility Data Link (4Kbps) on a DS1."; + } + identity pos { + base iana-interface-type; + description + "Packet over SONET/SDH Interface."; + } + identity dvbAsiIn { + base iana-interface-type; + description + "DVB-ASI Input."; + } + identity dvbAsiOut { + base iana-interface-type; + description + "DVB-ASI Output."; + } + identity plc { + base iana-interface-type; + description + "Power Line Communications."; + } + identity nfas { + base iana-interface-type; + description + "Non-Facility Associated Signaling."; + } + identity tr008 { + base iana-interface-type; + description + "TR008."; + } + identity gr303RDT { + base iana-interface-type; + description + "Remote Digital Terminal."; + } + identity gr303IDT { + base iana-interface-type; + description + "Integrated Digital Terminal."; + } + identity isup { + base iana-interface-type; + description + "ISUP."; + } + identity propDocsWirelessMaclayer { + base iana-interface-type; + description + "Cisco proprietary Maclayer."; + } + identity propDocsWirelessDownstream { + base iana-interface-type; + description + "Cisco proprietary Downstream."; + } + identity propDocsWirelessUpstream { + base iana-interface-type; + description + "Cisco proprietary Upstream."; + } + identity hiperlan2 { + base iana-interface-type; + description + "HIPERLAN Type 2 Radio Interface."; + } + identity propBWAp2Mp { + base iana-interface-type; + description + "PropBroadbandWirelessAccesspt2Multipt (use of this value + for IEEE 802.16 WMAN interfaces as per IEEE Std 802.16f + is deprecated, and ieee80216WMAN(237) should be used + instead)."; + } + identity sonetOverheadChannel { + base iana-interface-type; + description + "SONET Overhead Channel."; + } + identity digitalWrapperOverheadChannel { + base iana-interface-type; + description + "Digital Wrapper."; + } + identity aal2 { + base iana-interface-type; + description + "ATM adaptation layer 2."; + } + identity radioMAC { + base iana-interface-type; + description + "MAC layer over radio links."; + } + identity atmRadio { + base iana-interface-type; + description + "ATM over radio links."; + } + identity imt { + base iana-interface-type; + description + "Inter-Machine Trunks."; + } + identity mvl { + base iana-interface-type; + description + "Multiple Virtual Lines DSL."; + } + identity reachDSL { + base iana-interface-type; + description + "Long Reach DSL."; + } + identity frDlciEndPt { + base iana-interface-type; + description + "Frame Relay DLCI End Point."; + } + identity atmVciEndPt { + base iana-interface-type; + description + "ATM VCI End Point."; + } + identity opticalChannel { + base iana-interface-type; + description + "Optical Channel."; + } + identity opticalTransport { + base iana-interface-type; + description + "Optical Transport."; + } + identity propAtm { + base iana-interface-type; + description + "Proprietary ATM."; + } + identity voiceOverCable { + base iana-interface-type; + description + "Voice Over Cable Interface."; + } + identity infiniband { + base iana-interface-type; + description + "Infiniband."; + } + identity teLink { + base iana-interface-type; + description + "TE Link."; + } + identity q2931 { + base iana-interface-type; + description + "Q.2931."; + } + identity virtualTg { + base iana-interface-type; + description + "Virtual Trunk Group."; + } + identity sipTg { + base iana-interface-type; + description + "SIP Trunk Group."; + } + identity sipSig { + base iana-interface-type; + description + "SIP Signaling."; + } + identity docsCableUpstreamChannel { + base iana-interface-type; + description + "CATV Upstream Channel."; + } + identity econet { + base iana-interface-type; + description + "Acorn Econet."; + } + identity pon155 { + base iana-interface-type; + description + "FSAN 155Mb Symetrical PON interface."; + } + identity pon622 { + base iana-interface-type; + description + "FSAN 622Mb Symetrical PON interface."; + } + identity bridge { + base iana-interface-type; + description + "Transparent bridge interface."; + } + identity linegroup { + base iana-interface-type; + description + "Interface common to multiple lines."; + } + identity voiceEMFGD { + base iana-interface-type; + description + "Voice E&M Feature Group D."; + } + identity voiceFGDEANA { + base iana-interface-type; + description + "Voice FGD Exchange Access North American."; + } + identity voiceDID { + base iana-interface-type; + description + "Voice Direct Inward Dialing."; + } + identity mpegTransport { + base iana-interface-type; + description + "MPEG transport interface."; + } + identity sixToFour { + base iana-interface-type; + status deprecated; + description + "6to4 interface (DEPRECATED)."; + reference + "RFC 4087 - IP Tunnel MIB"; + } + identity gtp { + base iana-interface-type; + description + "GTP (GPRS Tunneling Protocol)."; + } + identity pdnEtherLoop1 { + base iana-interface-type; + description + "Paradyne EtherLoop 1."; + } + identity pdnEtherLoop2 { + base iana-interface-type; + description + "Paradyne EtherLoop 2."; + } + identity opticalChannelGroup { + base iana-interface-type; + description + "Optical Channel Group."; + } + identity homepna { + base iana-interface-type; + description + "HomePNA ITU-T G.989."; + } + identity gfp { + base iana-interface-type; + description + "Generic Framing Procedure (GFP)."; + } + identity ciscoISLvlan { + base iana-interface-type; + description + "Layer 2 Virtual LAN using Cisco ISL."; + } + identity actelisMetaLOOP { + base iana-interface-type; + description + "Acteleis proprietary MetaLOOP High Speed Link."; + } + identity fcipLink { + base iana-interface-type; + description + "FCIP Link."; + } + identity rpr { + base iana-interface-type; + description + "Resilient Packet Ring Interface Type."; + } + identity qam { + base iana-interface-type; + description + "RF Qam Interface."; + } + identity lmp { + base iana-interface-type; + description + "Link Management Protocol."; + reference + "RFC 4327 - Link Management Protocol (LMP) Management + Information Base (MIB)"; + } + identity cblVectaStar { + base iana-interface-type; + description + "Cambridge Broadband Networks Limited VectaStar."; + } + identity docsCableMCmtsDownstream { + base iana-interface-type; + description + "CATV Modular CMTS Downstream Interface."; + } + identity adsl2 { + base iana-interface-type; + status deprecated; + description + "Asymmetric Digital Subscriber Loop Version 2 + (DEPRECATED/OBSOLETED - please use adsl2plus(238) + instead)."; + reference + "RFC 4706 - Definitions of Managed Objects for Asymmetric + Digital Subscriber Line 2 (ADSL2)"; + } + identity macSecControlledIF { + base iana-interface-type; + description + "MACSecControlled."; + } + identity macSecUncontrolledIF { + base iana-interface-type; + description + "MACSecUncontrolled."; + } + identity aviciOpticalEther { + base iana-interface-type; + description + "Avici Optical Ethernet Aggregate."; + } + identity atmbond { + base iana-interface-type; + description + "atmbond."; + } + identity voiceFGDOS { + base iana-interface-type; + description + "Voice FGD Operator Services."; + } + identity mocaVersion1 { + base iana-interface-type; + description + "MultiMedia over Coax Alliance (MoCA) Interface + as documented in information provided privately to IANA."; + } + identity ieee80216WMAN { + base iana-interface-type; + description + "IEEE 802.16 WMAN interface."; + } + identity adsl2plus { + base iana-interface-type; + description + "Asymmetric Digital Subscriber Loop Version 2 - + Version 2 Plus and all variants."; + } + identity dvbRcsMacLayer { + base iana-interface-type; + description + "DVB-RCS MAC Layer."; + reference + "RFC 5728 - The SatLabs Group DVB-RCS MIB"; + } + identity dvbTdm { + base iana-interface-type; + description + "DVB Satellite TDM."; + reference + "RFC 5728 - The SatLabs Group DVB-RCS MIB"; + } + identity dvbRcsTdma { + base iana-interface-type; + description + "DVB-RCS TDMA."; + reference + "RFC 5728 - The SatLabs Group DVB-RCS MIB"; + } + identity x86Laps { + base iana-interface-type; + description + "LAPS based on ITU-T X.86/Y.1323."; + } + identity wwanPP { + base iana-interface-type; + description + "3GPP WWAN."; + } + identity wwanPP2 { + base iana-interface-type; + description + "3GPP2 WWAN."; + } + identity voiceEBS { + base iana-interface-type; + description + "Voice P-phone EBS physical interface."; + } + identity ifPwType { + base iana-interface-type; + description + "Pseudowire interface type."; + reference + "RFC 5601 - Pseudowire (PW) Management Information Base (MIB)"; + } + identity ilan { + base iana-interface-type; + description + "Internal LAN on a bridge per IEEE 802.1ap."; + } + identity pip { + base iana-interface-type; + description + "Provider Instance Port on a bridge per IEEE 802.1ah PBB."; + } + identity aluELP { + base iana-interface-type; + description + "Alcatel-Lucent Ethernet Link Protection."; + } + identity gpon { + base iana-interface-type; + description + "Gigabit-capable passive optical networks (G-PON) as per + ITU-T G.984."; + } + identity vdsl2 { + base iana-interface-type; + description + "Very high speed digital subscriber line Version 2 + (as per ITU-T Recommendation G.993.2)."; + reference + "RFC 5650 - Definitions of Managed Objects for Very High + Speed Digital Subscriber Line 2 (VDSL2)"; + } + identity capwapDot11Profile { + base iana-interface-type; + description + "WLAN Profile Interface."; + reference + "RFC 5834 - Control and Provisioning of Wireless Access + Points (CAPWAP) Protocol Binding MIB for + IEEE 802.11"; + } + identity capwapDot11Bss { + base iana-interface-type; + description + "WLAN BSS Interface."; + reference + "RFC 5834 - Control and Provisioning of Wireless Access + Points (CAPWAP) Protocol Binding MIB for + IEEE 802.11"; + } + identity capwapWtpVirtualRadio { + base iana-interface-type; + description + "WTP Virtual Radio Interface."; + reference + "RFC 5833 - Control and Provisioning of Wireless Access + Points (CAPWAP) Protocol Base MIB"; + } + identity bits { + base iana-interface-type; + description + "bitsport."; + } + identity docsCableUpstreamRfPort { + base iana-interface-type; + description + "DOCSIS CATV Upstream RF Port."; + } + identity cableDownstreamRfPort { + base iana-interface-type; + description + "CATV downstream RF Port."; + } + identity vmwareVirtualNic { + base iana-interface-type; + description + "VMware Virtual Network Interface."; + } + identity ieee802154 { + base iana-interface-type; + description + "IEEE 802.15.4 WPAN interface."; + reference + "IEEE 802.15.4-2006"; + } + identity otnOdu { + base iana-interface-type; + description + "OTN Optical Data Unit."; + } + identity otnOtu { + base iana-interface-type; + description + "OTN Optical channel Transport Unit."; + } + identity ifVfiType { + base iana-interface-type; + description + "VPLS Forwarding Instance Interface Type."; + } + identity g9981 { + base iana-interface-type; + description + "G.998.1 bonded interface."; + } + identity g9982 { + base iana-interface-type; + description + "G.998.2 bonded interface."; + } + identity g9983 { + base iana-interface-type; + description + "G.998.3 bonded interface."; + } + + identity aluEpon { + base iana-interface-type; + description + "Ethernet Passive Optical Networks (E-PON)."; + } + identity aluEponOnu { + base iana-interface-type; + description + "EPON Optical Network Unit."; + } + identity aluEponPhysicalUni { + base iana-interface-type; + description + "EPON physical User to Network interface."; + } + identity aluEponLogicalLink { + base iana-interface-type; + description + "The emulation of a point-to-point link over the EPON + layer."; + } + identity aluGponOnu { + base iana-interface-type; + description + "GPON Optical Network Unit."; + reference + "ITU-T G.984.2"; + } + identity aluGponPhysicalUni { + base iana-interface-type; + description + "GPON physical User to Network interface."; + reference + "ITU-T G.984.2"; + } + identity vmwareNicTeam { + base iana-interface-type; + description + "VMware NIC Team."; + } + identity docsOfdmDownstream { + base iana-interface-type; + description + "CATV Downstream OFDM interface."; + reference + "Cable Modem Operations Support System Interface + Specification"; + } + identity docsOfdmaUpstream { + base iana-interface-type; + description + "CATV Upstream OFDMA interface."; + reference + "Cable Modem Operations Support System Interface + Specification"; + } + identity gfast { + base iana-interface-type; + description + "G.fast port."; + reference + "ITU-T G.9701"; + } + identity sdci { + base iana-interface-type; + description + "SDCI (IO-Link)."; + reference + "IEC 61131-9 Edition 1.0 2013-09"; + } + identity xboxWireless { + base iana-interface-type; + description + "Xbox wireless."; + } + identity fastdsl { + base iana-interface-type; + description + "FastDSL."; + reference + "BBF TR-355"; + } + identity docsCableScte55d1FwdOob { + base iana-interface-type; + description + "Cable SCTE 55-1 OOB Forward Channel."; + reference + "ANSI/SCTE 55-1 2009"; + } + identity docsCableScte55d1RetOob { + base iana-interface-type; + description + "Cable SCTE 55-1 OOB Return Channel."; + reference + "ANSI/SCTE 55-1 2009"; + } + identity docsCableScte55d2DsOob { + base iana-interface-type; + description + "Cable SCTE 55-2 OOB Downstream Channel."; + reference + "ANSI/SCTE 55-2 2008"; + } + identity docsCableScte55d2UsOob { + base iana-interface-type; + description + "Cable SCTE 55-2 OOB Upstream Channel."; + reference + "ANSI/SCTE 55-2 2008"; + } + identity docsCableNdf { + base iana-interface-type; + description + "Cable Narrowband Digital Forward."; + } + identity docsCableNdr { + base iana-interface-type; + description + "Cable Narrowband Digital Return."; + } + identity ptm { + base iana-interface-type; + description + "Packet Transfer Mode."; + reference + "IEEE G.993.1, Annex H; IEEE G.993.2; IEEE G.9701"; + } + identity ghn { + base iana-interface-type; + description + "G.hn port."; + reference + "IEEE G.9961"; + } + identity otnOtsi { + base iana-interface-type; + description + "Optical Tributary Signal."; + reference + "ITU-T G.959.1"; + } + identity otnOtuc { + base iana-interface-type; + description + "OTN OTUCn."; + reference + "ITU-T G.709/Y.1331"; + } + identity otnOduc { + base iana-interface-type; + description + "OTN ODUC."; + reference + "ITU-T G.709"; + } + identity otnOtsig { + base iana-interface-type; + description + "OTN OTUC Signal."; + reference + "ITU-T G.709"; + } + identity microwaveCarrierTermination { + base iana-interface-type; + description + "air interface of a single microwave carrier."; + reference + "RFC 8561 - A YANG Data Model for Microwave Radio Link"; + } + identity microwaveRadioLinkTerminal { + base iana-interface-type; + description + "radio link interface for one or several aggregated microwave carriers."; + reference + "RFC 8561 - A YANG Data Model for Microwave Radio Link"; + } + identity ieee8021axDrni { + base iana-interface-type; + description + "IEEE 802.1AX Distributed Resilient Network Interface."; + reference + "IEEE 802.1AX-Rev-d2-0"; + } + identity ax25 { + base iana-interface-type; + description + "AX.25 network interfaces."; + reference + "AX.25 Link Access Protocol for Amateur Packet Radio version 2.2"; + } + identity ieee19061nanocom { + base iana-interface-type; + description + "Nanoscale and Molecular Communication."; + reference + "IEEE 1906.1-2015"; + } + identity cpri { + base iana-interface-type; + description + "Common Public Radio Interface."; + reference + "CPRI v7.0"; + } + identity omni { + base iana-interface-type; + description + "Overlay Multilink Network Interface (OMNI)."; + reference + "draft-templin-6man-omni-00"; + } + identity roe { + base iana-interface-type; + description + "Radio over Ethernet Interface."; + reference + "1914.3-2018 - IEEE Standard for Radio over Ethernet Encapsulations and Mappings"; + } + identity p2pOverLan { + base iana-interface-type; + description + "Point to Point over LAN interface."; + reference + "RFC 9296 - ifStackTable for the Point-to-Point (P2P) Interface over a LAN Type: Definition and Examples"; + } + identity docsCableScte25d1FwdOob { + base iana-interface-type; + description + "Cable SCTE 25-1 OOB Forward Channel."; + reference + "ANSI/SCTE 25-1 2025"; + } + identity docsCableScte25d1RetOob { + base iana-interface-type; + description + "Cable SCTE 25-1 OOB Return Channel."; + reference + "ANSI/SCTE 25-1 2025"; + } + identity docsCableScte25d2MacOob { + base iana-interface-type; + description + "Cable SCTE 25-2 OOB MAC."; + reference + "ANSI/SCTE 25-2 2025"; + } + identity lora { + base iana-interface-type; + description + "LoRa."; + reference + "SX1276"; + } + identity lorawan { + base iana-interface-type; + description + "LoRaWAN."; + reference + "TS001-1.0.4 LoRaWAN L2 1.0.4"; + } +} diff --git a/standard/iana/iana-ipv6-ext-types@2025-12-22.yang b/standard/iana/iana-ipv6-ext-types@2025-12-22.yang new file mode 100644 index 000000000..23994e8fd --- /dev/null +++ b/standard/iana/iana-ipv6-ext-types@2025-12-22.yang @@ -0,0 +1,138 @@ +module iana-ipv6-ext-types { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:iana-ipv6-ext-types"; + prefix iana-ipv6-ext-types; + + organization + "Internet Assigned Numbers Authority (IANA)"; + + contact + "Internet Assigned Numbers Authority + + ICANN + 12025 Waterfront Drive, Suite 300 + Los Angeles, CA 90094 + + Tel: +1 424 254 5300 + + "; + + description + "This YANG module translates IANA registry 'IPv6 Extension Header + Types' to YANG derived types. + + 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 was generated from the + corresponding IANA registry using an XSLT stylesheet from the + 'iana-yang' project (https://github.com/llhotka/iana-yang)."; + + reference + "Internet Protocol Version 6 (IPv6) Parameters + (https://www.iana.org/assignments/ipv6-parameters/)"; + + revision 2025-12-22 { + description + "Initial version."; + reference + "RFC 9899" + + "iana-ipv6-ext-types@2025-12-22.yang"; + } + + /* Typedefs */ + + typedef ipv6-extension-header-type-name { + type enumeration { + enum IPv6Hop-by-HopOption { + value 0; + description + "IPv6 Hop-by-Hop Option"; + reference + "RFC 8200"; + } + enum RoutingHeaderforIPv6 { + value 43; + description + "Routing Header for IPv6"; + reference + "RFC 8200 + RFC 5095"; + } + enum FragmentHeaderforIPv6 { + value 44; + description + "Fragment Header for IPv6"; + reference + "RFC 8200"; + } + enum EncapsulatingSecurityPayload { + value 50; + description + "Encapsulating Security Payload"; + reference + "RFC 4303"; + } + enum AuthenticationHeader { + value 51; + description + "Authentication Header"; + reference + "RFC 4302"; + } + enum DestinationOptionsforIPv6 { + value 60; + description + "Destination Options for IPv6"; + reference + "RFC 8200"; + } + enum MobilityHeader { + value 135; + description + "Mobility Header"; + reference + "RFC 6275"; + } + enum HostIdentityProtocol { + value 139; + description + "Host Identity Protocol"; + reference + "RFC 7401"; + } + enum Shim6Protocol { + value 140; + description + "Shim6 Protocol"; + reference + "RFC 5533"; + } + } + description + "This enumeration type defines mnemonic names and + corresponding numeric values of IPv6 Extension header + types."; + reference + "RFC 2708: IANA Allocation Guidelines For Values In the + Internet Protocol and Related Headers"; + } + + typedef ipv6-extension-header-type { + type union { + type uint8; + type ipv6-extension-header-type-name; + } + description + "This type allows reference to an IPv6 Extension header + type using either the assigned mnemonic name or the + numeric protocol number value."; + } +} diff --git a/standard/iana/iana-routing-types@2025-02-18.yang b/standard/iana/iana-routing-types@2025-09-03.yang similarity index 98% rename from standard/iana/iana-routing-types@2025-02-18.yang rename to standard/iana/iana-routing-types@2025-09-03.yang index b7a9e21b3..3d4a4a278 100644 --- a/standard/iana/iana-routing-types@2025-02-18.yang +++ b/standard/iana/iana-routing-types@2025-09-03.yang @@ -32,6 +32,14 @@ module iana-routing-types { This version of this YANG module is part of RFC 8294; see the RFC itself for full legal notices."; + revision 2025-09-03 { + description + "Modified SAFI value 76."; + reference + "https://www.iana.org/assignments/yang-parameters/" + + "iana-routing-types@2025-09-03.yang"; + } + revision 2025-02-18 { description "Modified SAFI value 73."; } @@ -559,7 +567,7 @@ module iana-routing-types { enum classful-transport-safi { value 76; description - "Classful-Transport SAFI."; + "Classful Transport (CT) SAFI."; } enum tunneled-traffic-flowspec-safi { diff --git a/standard/iana/yang-parameters.xml b/standard/iana/yang-parameters.xml index eed697cfe..63cb1d399 100644 --- a/standard/iana/yang-parameters.xml +++ b/standard/iana/yang-parameters.xml @@ -4,21 +4,23 @@ YANG Parameters 2010-06-10 - 2025-07-01 + 2026-03-18 YANG Module Names - + + RFC Required YANG modules are additionally available for bulk retrieval by Rsync (rsync.iana.org::assignments/yang-parameters/) or FTP (ftp://ftp.iana.org/assignments/yang-parameters/). - + + iana-bfd-types Y - iana-bfd-types@2021-10-21.yang + iana-bfd-types@2025-11-20.yang urn:ietf:params:xml:ns:yang:iana-bfd-types iana-bfd-types @@ -40,7 +42,7 @@ FTP (ftp://ftp.iana.org/assignments/yang-parameters/). BGP Layer 2 encapsulation types must not be directly added to the "iana-bgp-l2-encaps" YANG module. They must instead be added to - the "BGP Layer 2 Encapsulation Types" registry at . + the BGP Layer 2 Encapsulation Types registry. @@ -54,10 +56,10 @@ FTP (ftp://ftp.iana.org/assignments/yang-parameters/). Registration procedure: Expert Review, as described in . Expert(s): Kent Watsen. - + iana-dns-class-rr-type Y - iana-dns-class-rr-type@2025-05-20.yang + iana-dns-class-rr-type@2025-12-29.yang urn:ietf:params:xml:ns:yang:iana-dns-class-rr-type dnsct @@ -65,7 +67,7 @@ FTP (ftp://ftp.iana.org/assignments/yang-parameters/). Classes and types of DNS resource records must not be directly added to the "iana-dns-class-rr-type" YANG module. They must instead be added to the "DNS CLASSes" and "Resource Record (RR) - TYPEs" registries , respectively. + TYPEs" registries, respectively. iana-dots-signal-channel @@ -79,7 +81,7 @@ FTP (ftp://ftp.iana.org/assignments/yang-parameters/). must not be directly added to the iana-dots-signal-channel YANG module. They must instead be respectively added to the "DOTS Status Codes", "DOTS Conflict Status Codes", "DOTS Conflict Cause -Codes", and "DOTS Attack Status Codes" registries . +Codes", and "DOTS Attack Status Codes" registries. iana-hardware @@ -90,62 +92,62 @@ Codes", and "DOTS Attack Status Codes" registries The "iana-hardware" YANG module is intended to reflect the - "IANA-ENTITY-MIB" MIB module so that if a new enumeration is added to + IANA-ENTITY-MIB MIB module so that if a new enumeration is added to the "IANAPhysicalClass" textual convention, the same class is added as an identity derived from "ianahw:hardware-class". - + + iana-http-versions + Y + + urn:ietf:params:xml:ns:yang:iana-http-versions + httpv + + + + 's module file will be posted upon the document's publication as an RFC. + New values must not be directly added to the "iana-http-versions" YANG module. They must instead be added to the TLS Application-Layer Protocol Negotiation (ALPN) Protocol IDs registry. + + + iana-icmpv4-types Y - + iana-icmpv4-types@2025-12-22.yang urn:ietf:params:xml:ns:yang:iana-icmpv4-types iana-icmpv4-types - - - New values must not be directly added to the "iana-icmpv4-types" YANG module. - They must instead be added to the "ICMP Type Numbers" registry . - Note: the initial module file will be posted upon 's - publication as an RFC. + + New values must not be directly added to the iana-icmpv4-types YANG module. They must instead be added to the ICMP Type Numbers registry. - + iana-icmpv6-types Y - + iana-icmpv6-types@2025-12-22.yang urn:ietf:params:xml:ns:yang:iana-icmpv6-types iana-icmpv6-types - - - New values must not be directly added to the "iana-icmpv6-types" YANG module. - They must instead be added to the "ICMPv6 "type" Numbers" registry . - Note: the initial module file will be posted upon 's - publication as an RFC. + + New values must not be directly added to the iana-icmpv6-types YANG module. They must instead be added to the ICMPv6 "type" Numbers registry. - + iana-if-type Y - iana-if-type@2023-01-26.yang + iana-if-type@2026-03-17.yang urn:ietf:params:xml:ns:yang:iana-if-type ianaift Interface types must not be directly added to the iana-if-type YANG - module. They must instead be added to the "Interface Types (ifType)" registry -at . + module. They must instead be added to the Interface Types (ifType) registry. - + iana-ipv6-ext-types Y - + iana-ipv6-ext-types@2025-12-22.yang urn:ietf:params:xml:ns:yang:iana-ipv6-ext-types iana-ipv6-ext-types - - - New values must not be directly added to the "iana-ipv6-ext-types" YANG module. - They must instead be added to the "IPv6 Extension Header Types" registry . - Note: the initial module file will be posted upon 's - publication as an RFC. + + New values must not be directly added to the iana-ipv6-ext-types YANG module. They must instead be added to the IPv6 Extension Header Types registry. iana-msd-types @@ -156,8 +158,7 @@ at . New values must not be directly added to the "iana-msd-types" YANG module. - They must instead be added to the "IGP MSD-Types" registry in the - "Interior Gateway Protocol (IGP) Parameters" registry group . + They must instead be added to the "IGP MSD-Types" registry in the Interior Gateway Protocol (IGP) Parameters registry group. iana-pseudowire-types @@ -169,14 +170,13 @@ at . MPLS pseudowire types must not be directly added to the "iana-pseudowire-types" - YANG module. They must instead be added to the "MPLS Pseudowire Types" - registry at . + YANG module. They must instead be added to the MPLS Pseudowire Types registry. - + iana-routing-types Y - iana-routing-types@2025-02-18.yang + iana-routing-types@2025-09-03.yang urn:ietf:params:xml:ns:yang:iana-routing-types iana-rt-types @@ -186,6 +186,19 @@ directly added to the iana-routing-types YANG module. They must instead be respectively added to the Address Family Numbers and Subsequent Address Family Identifiers (SAFI) Parameters registries. + + iana-sip-option-tags + Y + + urn:ietf:params:xml:ns:yang:iana-sip-option-tags + sip-option-tags + + + + 's module file will be posted upon the document's publication as an RFC. + New values must not be directly added to the "iana-sip-option-tags" YANG module. They must instead be added to the Option Tags registry. + + iana-ssh-encryption-algs Y @@ -194,7 +207,7 @@ and Subsequent Address Family Identi sshea - New values must not be directly added to the "iana-ssh-encryption-algs" YANG module. They must instead be added to the "Encryption Algorithm Names" registry in the "Secure Shell (SSH) Protocol Parameters" registry group . Note: the initial module file will be posted upon 's publication as an RFC. + New values must not be directly added to the "iana-ssh-encryption-algs" YANG module. They must instead be added to the "Encryption Algorithm Names" registry in the Secure Shell (SSH) Protocol Parameters registry group. iana-ssh-key-exchange-algs @@ -204,7 +217,7 @@ and Subsequent Address Family Identi sshkea - New values must not be directly added to the "iana-ssh-key-exchange-algs" YANG module. They must instead be added to the "Key Exchange Method Names" registry in the "Secure Shell (SSH) Protocol Parameters" registry group . Note: the initial module file will be posted upon 's publication as an RFC. + New values must not be directly added to the "iana-ssh-key-exchange-algs" YANG module. They must instead be added to the "Key Exchange Method Names" registry in the Secure Shell (SSH) Protocol Parameters registry group. iana-ssh-mac-algs @@ -214,7 +227,7 @@ and Subsequent Address Family Identi sshma - New values must not be directly added to the "iana-ssh-mac-algs" YANG module. They must instead be added to the "MAC Algorithm Names" registry in the "Secure Shell (SSH) Protocol Parameters" registry group . Note: the initial module file will be posted upon 's publication as an RFC. + New values must not be directly added to the "iana-ssh-mac-algs" YANG module. They must instead be added to the "MAC Algorithm Names" registry in the Secure Shell (SSH) Protocol Parameters registry group. iana-ssh-public-key-algs @@ -224,17 +237,17 @@ and Subsequent Address Family Identi sshpka - New values must not be directly added to the "iana-ssh-public-key-algs" YANG module. They must instead be added to the "Public Key Algorithm Names" registry in the "Secure Shell (SSH) Protocol Parameters" registry group . Note: the initial module file will be posted upon 's publication as an RFC. + New values must not be directly added to the "iana-ssh-public-key-algs" YANG module. They must instead be added to the "Public Key Algorithm Names" registry in the Secure Shell (SSH) Protocol Parameters registry group. - + iana-template N - + iana-template@2023-12-08.yang urn:ietf:params:xml:ns:yang:iana-template iana-foo - - 's module file will be posted upon the document's publication as an RFC. + + iana-tls-cipher-suite-algs @@ -244,7 +257,7 @@ and Subsequent Address Family Identi tlscsa - New values must not be directly added to the "iana-tls-cipher-suite-algs" YANG module. They must instead be added to the "TLS Cipher Suites" registry in the "Transport Layer Security (TLS) Parameters" registry group . + New values must not be directly added to the "iana-tls-cipher-suite-algs" YANG module. They must instead be added to the "TLS Cipher Suites" registry in the Transport Layer Security (TLS) Parameters registry group. iana-tls-profile @@ -254,7 +267,7 @@ and Subsequent Address Family Identi ianatp - tls-version and dtls-version values must not be directly added to the iana-tls-profile YANG module. They must instead be respectively added to the "ACL TLS Version Codes", and "ACL DTLS Version Codes" registries at provided the new (D)TLS version has been standardized by the IETF. It allows new (D)TLS version to be added to the "iana-tls-profile" YANG Module. (D)TLS parameters must not be directly added to the iana-tls-profile YANG module. They must instead be added to the "ACL (D)TLS Parameters" registry at if the new (D)TLS parameters can be used by a middlebox to identify a MUD non-compliant (D)TLS behavior. It allows new (D)TLS parameters to be added to the "iana-tls-profile" YANG Module. + tls-version and dtls-version values must not be directly added to the iana-tls-profile YANG module. They must instead be respectively added to the "ACL TLS Version Codes" and "ACL DTLS Version Codes" registries, provided the new (D)TLS version has been standardized by the IETF. It allows new (D)TLS version to be added to the "iana-tls-profile" YANG Module. (D)TLS parameters must not be directly added to the iana-tls-profile YANG module. They must instead be added to the ACL (D)TLS Parameters registry if the new (D)TLS parameters can be used by a middlebox to identify a MUD non-compliant (D)TLS behavior. It allows new (D)TLS parameters to be added to the "iana-tls-profile" YANG Module. iana-tunnel-type @@ -266,48 +279,47 @@ and Subsequent Address Family Identi Tunnel type values must not be directly added to the iana-tunnel-type YANG module. They must instead be added to the - "Tunnel Types (tunnelType)" subregistry (under the "Interface Types (ifType)" - registry) at . + Tunnel Types (tunnelType) subregistry (under the "Interface Types (ifType)" registry). ietf-ac-common N - + ietf-ac-common@2025-09-29.yang urn:ietf:params:xml:ns:yang:ietf-ac-common ac-common - - 's module file will be posted upon the document's publication as an RFC. + + ietf-ac-glue N - + ietf-ac-glue@2025-09-29.yang urn:ietf:params:xml:ns:yang:ietf-ac-glue ac-glue - - 's module file will be posted upon the document's publication as an RFC. + + ietf-ac-ntw N - + ietf-ac-ntw@2025-09-29.yang urn:ietf:params:xml:ns:yang:ietf-ac-ntw ac-ntw - - 's module file will be posted upon the document's publication as an RFC. + + ietf-ac-svc N - + ietf-ac-svc@2025-09-29.yang urn:ietf:params:xml:ns:yang:ietf-ac-svc ac-svc - - 's module file will be posted upon the document's publication as an RFC. + + ietf-access-control-list @@ -319,15 +331,15 @@ and Subsequent Address Family Identi - + ietf-acl-enh N - + ietf-acl-enh@2025-12-22.yang urn:ietf:params:xml:ns:yang:ietf-acl-enh acl-enh - - 's module file will be posted upon the document's publication as an RFC. + + ietf-acl-tls @@ -403,12 +415,12 @@ and Subsequent Address Family Identi ietf-bearer-svc N - + ietf-bearer-svc@2025-09-29.yang urn:ietf:params:xml:ns:yang:ietf-bearer-svc bearer-svc - - 's module file will be posted upon the document's publication as an RFC. + + ietf-bfd @@ -500,6 +512,16 @@ and Subsequent Address Family Identi + + ietf-bfd-met-keyed-isaac + N + + urn:ietf:params:xml:ns:yang:ietf-bfd-met-keyed-isaac + bfd-mki + + + 's module file will be posted upon the document's publication as an RFC. + ietf-bfd-mpls N @@ -520,6 +542,26 @@ and Subsequent Address Family Identi + + ietf-bfd-opt-auth + N + + urn:ietf:params:xml:ns:yang:ietf-bfd-opt-auth + bfd-oa + + + 's module file will be posted upon the document's publication as an RFC. + + + ietf-bfd-stability + N + + urn:ietf:params:xml:ns:yang:ietf-bfd-stability + bfd-s + + + 's module file will be posted upon the document's publication as an RFC. + ietf-bfd-types N @@ -840,6 +882,26 @@ and Subsequent Address Family Identi + + ietf-http-client + N + + urn:ietf:params:xml:ns:yang:ietf-http-client + httpc + + + 's module file will be posted upon the document's publication as an RFC. + + + ietf-http-server + N + + urn:ietf:params:xml:ns:yang:ietf-http-server + https + + + 's module file will be posted upon the document's publication as an RFC. + ietf-i2nsf-capability N @@ -980,15 +1042,15 @@ and Subsequent Address Family Identi - + ietf-inet-types N - + ietf-inet-types@2025-12-22.yang urn:ietf:params:xml:ns:yang:ietf-inet-types inet - - 's module file will be posted upon the document's publication as an RFC. + + ietf-interface-protection @@ -1150,15 +1212,15 @@ and Subsequent Address Family Identi - + ietf-isis-sr-mpls N - + ietf-isis-sr-mpls@2025-12-09.yang urn:ietf:params:xml:ns:yang:ietf-isis-sr-mpls isis-sr-mpls - - 's module file will be posted upon the document's publication as an RFC. + + ietf-key-chain @@ -1280,6 +1342,16 @@ and Subsequent Address Family Identi + + ietf-layer0-types + N + + urn:ietf:params:xml:ns:yang:ietf-layer0-types + l0-types + + + 's module file will be posted upon the document's publication as an RFC. + ietf-layer1-types N @@ -1340,16 +1412,6 @@ and Subsequent Address Family Identi - - ietf-schc-compound-ack - N - ietf-schc-compound-ack@2023-07-26.yang - urn:ietf:params:xml:ns:yang:ietf-schc-compound-ack - schc-compound-ack - - - - ietf-microwave-radio-link N @@ -1520,6 +1582,16 @@ and Subsequent Address Family Identi + + ietf-netconf-client + N + + urn:ietf:params:xml:ns:yang:ietf-netconf-client + ncc + + + 's module file will be posted upon the document's publication as an RFC. + ietf-netconf-monitoring N @@ -1560,6 +1632,16 @@ and Subsequent Address Family Identi + + ietf-netconf-server + N + + urn:ietf:params:xml:ns:yang:ietf-netconf-server + ncs + + + 's module file will be posted upon the document's publication as an RFC. + ietf-netconf-time N @@ -1700,25 +1782,35 @@ and Subsequent Address Family Identi - + ietf-ospf-admin-tags N - + ietf-ospf-admin-tags@2025-07-31.yang urn:ietf:params:xml:ns:yang:ietf-ospf-admin-tags ospf-admin-tags - - 's module file will be posted upon the document's publication as an RFC. + + - - ietf-ospf-sr-mpls + + ietf-ospf-anycast-flag N + urn:ietf:params:xml:ns:yang:ietf-ospf-anycast-flag + ospf-anycast-flag + + + 's module file will be posted upon the document's publication as an RFC. + + + ietf-ospf-sr-mpls + N + ietf-ospf-sr-mpls@2025-12-09.yang urn:ietf:params:xml:ns:yang:ietf-ospf-sr-mpls ospf-sr-mpls - - 's module file will be posted upon the document's publication as an RFC. + + ietf-ospfv3-extended-lsa @@ -1753,22 +1845,22 @@ and Subsequent Address Family Identi ietf-pcep N - + ietf-pcep@2025-09-12.yang urn:ietf:params:xml:ns:yang:ietf-pcep pcep - - 's module file will be posted upon the document's publication as an RFC. + + ietf-pcep-stats N - + ietf-pcep-stats@2025-09-12.yang urn:ietf:params:xml:ns:yang:ietf-pcep-stats pcep-stats - - 's module file will be posted upon the document's publication as an RFC. + + ietf-pim-base @@ -1840,6 +1932,16 @@ and Subsequent Address Family Identi + + ietf-restconf-client + N + + urn:ietf:params:xml:ns:yang:ietf-restconf-client + rcc + + + 's module file will be posted upon the document's publication as an RFC. + ietf-restconf-monitoring N @@ -1850,6 +1952,16 @@ and Subsequent Address Family Identi + + ietf-restconf-server + N + + urn:ietf:params:xml:ns:yang:ietf-restconf-server + rcs + + + 's module file will be posted upon the document's publication as an RFC. + ietf-restconf-subscribed-notifications N @@ -1950,6 +2062,26 @@ and Subsequent Address Family Identi + + ietf-schc-compound-ack + N + ietf-schc-compound-ack@2023-07-26.yang + urn:ietf:params:xml:ns:yang:ietf-schc-compound-ack + schc-compound-ack + + + + + + ietf-schedule + N + ietf-schedule@2026-03-10.yang + urn:ietf:params:xml:ns:yang:ietf-schedule + schedule + + + + ietf-segment-routing N @@ -2020,6 +2152,18 @@ and Subsequent Address Family Identi + + ietf-sip-auto-peering + N + + urn:ietf:params:xml:ns:yang:ietf-sip-auto-peering + sipap + + + + 's module file will be posted upon the document's publication as an RFC. + + ietf-snmp N @@ -2240,6 +2384,16 @@ and Subsequent Address Family Identi + + ietf-system-datastore + N + + urn:ietf:params:xml:ns:yang:ietf-system-datastore + sysds + + + 's module file will be posted upon the document's publication as an RFC. + ietf-system-tacacs-plus N @@ -2250,6 +2404,16 @@ and Subsequent Address Family Identi + + ietf-system-tacacs-plus + N + + urn:ietf:params:xml:ns:yang:ietf-system-tacacs-plus + sys-tcs-plus + + + 's module file will be posted upon the document's publication as an RFC. + ietf-sztp-bootstrap-server N @@ -2393,12 +2557,12 @@ and Subsequent Address Family Identi ietf-template N - + ietf-template@2023-07-26.yang urn:ietf:params:xml:ns:yang:ietf-template temp - - 's module file will be posted upon the document's publication as an RFC. + + ietf-tls-client @@ -2450,7 +2614,7 @@ and Subsequent Address Family Identi - + ietf-twamp N ietf-twamp@2021-11-17.yang @@ -2460,6 +2624,26 @@ and Subsequent Address Family Identi + + ietf-udp-client + N + + urn:ietf:params:xml:ns:yang:ietf-udp-client + udpc + + + 's module file will be posted upon the document's publication as an RFC. + + + ietf-udp-server + N + + urn:ietf:params:xml:ns:yang:ietf-udp-server + udps + + + 's module file will be posted upon the document's publication as an RFC. + ietf-vn N @@ -2560,6 +2744,16 @@ and Subsequent Address Family Identi + + ietf-yang-library-augmentedby + N + + urn:ietf:params:xml:ns:yang:ietf-yang-library-augmentedby + yanglib-aug + + + 's module file will be posted upon the document's publication as an RFC. + ietf-yang-metadata N @@ -2640,15 +2834,15 @@ and Subsequent Address Family Identi - + ietf-yang-types N - + ietf-yang-types@2025-12-22.yang urn:ietf:params:xml:ns:yang:ietf-yang-types yang - - 's module file will be posted upon the document's publication as an RFC. + + ietf-ztp-types diff --git a/standard/ietf/RFC/ietf-ac-common.yang b/standard/ietf/RFC/ietf-ac-common.yang new file mode 120000 index 000000000..023244691 --- /dev/null +++ b/standard/ietf/RFC/ietf-ac-common.yang @@ -0,0 +1 @@ +ietf-ac-common@2025-09-29.yang \ No newline at end of file diff --git a/standard/ietf/RFC/ietf-ac-common@2025-09-29.yang b/standard/ietf/RFC/ietf-ac-common@2025-09-29.yang new file mode 100644 index 000000000..bc0bbade1 --- /dev/null +++ b/standard/ietf/RFC/ietf-ac-common@2025-09-29.yang @@ -0,0 +1,1676 @@ +module ietf-ac-common { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-ac-common"; + prefix ac-common; + + import ietf-vpn-common { + prefix vpn-common; + reference + "RFC 9181: A Common YANG Data Model for Layer 2 and Layer 3 + VPNs"; + } + import ietf-netconf-acm { + prefix nacm; + reference + "RFC 8341: Network Configuration Access Control Model"; + } + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types, Section 4"; + } + import ietf-yang-types { + prefix yang; + reference + "RFC 6991: Common YANG Data Types, Section 3"; + } + import ietf-key-chain { + prefix key-chain; + reference + "RFC 8177: YANG Data Model for Key Chains"; + } + + organization + "IETF OPSAWG (Operations and Management Area Working Group)"; + contact + "WG Web: + WG List: + + Editor: Mohamed Boucadair + + Editor: Richard Roberts + + Author: Oscar Gonzalez de Dios + + Author: Samier Barguil + + Author: Bo Wu + "; + description + "This YANG module defines a common attachment circuit (AC) + YANG module with a set of reusable features, types, + identities, and groupings. + + 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 9833; see the + RFC itself for full legal notices."; + + revision 2025-09-29 { + description + "Initial revision."; + reference + "RFC 9833: A Common YANG Data Model for Attachment Circuits"; + } + + /****************************Features************************/ + + feature layer2-ac { + description + "Indicates support of Layer 2 ACs."; + } + + feature layer3-ac { + description + "Indicates support of Layer 3 ACs."; + } + + feature server-assigned-reference { + description + "Indicates support for server-generated references and use + of such references to access related resources."; + } + + /****************************Identities************************/ + // IP address allocation types + + identity address-allocation-type { + description + "Base identity for address allocation type on the AC."; + } + + identity provider-dhcp { + base address-allocation-type; + description + "The provider's network provides a DHCP service to the + customer."; + } + + identity provider-dhcp-relay { + base address-allocation-type; + description + "The provider's network provides a DHCP relay service to the + customer."; + } + + identity provider-dhcp-slaac { + if-feature "vpn-common:ipv6"; + base address-allocation-type; + description + "The provider's network provides a DHCP service to the customer + as well as IPv6 Stateless Address Autoconfiguration (SLAAC)."; + reference + "RFC 4862: IPv6 Stateless Address Autoconfiguration"; + } + + identity static-address { + base address-allocation-type; + description + "The provider's network provides static IP addressing to the + customer."; + } + + identity slaac { + if-feature "vpn-common:ipv6"; + base address-allocation-type; + description + "The provider's network uses IPv6 SLAAC to provide addressing + to the customer."; + reference + "RFC 4862: IPv6 Stateless Address Autoconfiguration"; + } + + identity dynamic-infra { + base address-allocation-type; + description + "The IP address is dynamically allocated by the hosting + infrastructure."; + } + + // next-hop actions + + identity local-defined-next-hop { + description + "Base identity of local defined next hops."; + } + + identity discard { + base local-defined-next-hop; + description + "Indicates an action to discard traffic for the corresponding + destination."; + } + + identity local-link { + base local-defined-next-hop; + description + "Treat traffic towards addresses within the specified next-hop + prefix as though they are connected to a local link."; + } + + // Layer 2 tunnel types + + identity l2-tunnel-type { + description + "Base identity for Layer 2 tunnel selection for an AC."; + } + + identity pseudowire { + base l2-tunnel-type; + description + "Pseudowire tunnel termination for the AC."; + } + + identity vpls { + base l2-tunnel-type; + description + "Virtual Private LAN Service (VPLS) tunnel termination for + the AC."; + } + + identity vxlan { + base l2-tunnel-type; + description + "Virtual eXtensible Local Area Network (VXLAN) tunnel + termination for the AC."; + } + + // Layer 3 tunnel types + + identity l3-tunnel-type { + description + "Base identity for Layer 3 tunnel selection for an AC."; + } + + identity ip-in-ip { + base l3-tunnel-type; + description + "IP-in-IP tunneling."; + reference + "RFC 2003: IP Encapsulation within IP"; + } + + identity ipsec { + base l3-tunnel-type; + description + "IP Security (IPsec)."; + reference + "RFC 4301: Security Architecture for the Internet + Protocol"; + } + + identity gre { + base l3-tunnel-type; + description + "Generic Routing Encapsulation (GRE)."; + reference + "RFC 1701: Generic Routing Encapsulation (GRE) + RFC 1702: Generic Routing Encapsulation over IPv4 networks + RFC 7676: IPv6 Support for Generic Routing Encapsulation + (GRE)"; + } + + // Tagging precedence + + identity precedence-type { + description + "Redundancy type. Attachment to a network can be created + with primary and secondary tagging."; + } + + identity primary { + base precedence-type; + description + "Identifies the main AC."; + } + + identity secondary { + base precedence-type; + description + "Identifies a secondary AC."; + } + + // AC type + + identity role { + description + "Base identity for the network role of an AC."; + } + + identity uni { + base role; + description + "User-to-Network Interface (UNI)."; + } + + identity nni { + base role; + description + "Network-to-Network Interface (NNI)."; + } + + identity public-nni { + base role; + description + "Public peering. This is typically set using a shared + network, such as an Internet Exchange Point (IXP)."; + } + + // More Admin status types + + identity awaiting-validation { + base vpn-common:administrative-status; + description + "This administrative status reflects that a request is + pending an administrator approval."; + } + + identity awaiting-processing { + base vpn-common:administrative-status; + description + "This administrative status reflects that a request was + approved and validated but is awaiting more processing + before activation."; + } + + identity admin-prohibited { + base vpn-common:administrative-status; + description + "This administrative status reflects that a request cannot + be handled because of administrative policies."; + } + + identity rejected { + base vpn-common:administrative-status; + description + "This administrative status reflects that a request was + rejected because, e.g., there are no sufficient resources + or other reasons not covered by the other status types."; + } + + // BGP role + + identity bgp-role { + description + "Used to indicate the BGP role when establishing a BGP + session."; + reference + "RFC 9234: Route Leak Prevention and Detection Using + Roles in UPDATE and OPEN Messages, Section 4"; + } + + identity provider { + base bgp-role; + description + "The local AS is a transit provider of the remote AS."; + } + + identity client { + base bgp-role; + description + "The local AS is a transit customer of the remote AS."; + } + + identity rs { + base bgp-role; + description + "The local AS is a Route Server (RS)."; + } + + identity rs-client { + base bgp-role; + description + "The local AS is a client of an RS, and the RS is the + remote AS."; + } + + identity peer { + base bgp-role; + description + "The local and remote ASes have a peering relationship."; + } + + /****************************Typedefs************************/ + + typedef predefined-next-hop { + type identityref { + base local-defined-next-hop; + } + description + "Predefined next-hop designation for locally generated + routes."; + } + + typedef area-address { + type string { + pattern '[0-9A-Fa-f]{2}(\.[0-9A-Fa-f]{4}){0,6}'; + } + description + "This type defines the area address format."; + } + + /************************Reusable groupings********************/ + /**** Service Status ****/ + + grouping service-status { + description + "Service status grouping."; + container status { + description + "Service status."; + container admin-status { + description + "Administrative service status."; + leaf status { + type identityref { + base vpn-common:administrative-status; + } + description + "Administrative service status."; + } + leaf last-change { + type yang:date-and-time; + config false; + description + "Indicates the actual date and time of the service status + change."; + } + } + container oper-status { + config false; + description + "Operational service status."; + uses vpn-common:oper-status-timestamp; + } + } + } + + /**** A set of profiles ****/ + + grouping ac-profile-cfg { + description + "Grouping for AC profile configuration."; + container valid-provider-identifiers { + description + "Container for valid provider profile identifiers. + The profiles only have significance within the service + provider's administrative domain."; + list encryption-profile-identifier { + key "id"; + description + "List of encryption profile identifiers."; + leaf id { + type string; + description + "Identification of the encryption profile to be used."; + } + } + list qos-profile-identifier { + key "id"; + description + "List of QoS profile identifiers."; + leaf id { + type string; + description + "Identification of the QoS profile to be used."; + } + } + list failure-detection-profile-identifier { + key "id"; + description + "List of BFD profile identifiers."; + leaf id { + type string; + description + "Identification of the failure detection (e.g., BFD) + profile to be used."; + } + } + list forwarding-profile-identifier { + key "id"; + description + "List of forwarding profile identifiers."; + leaf id { + type string; + description + "Identification of the forwarding profile to be used."; + } + } + list routing-profile-identifier { + key "id"; + description + "List of routing profile identifiers."; + leaf id { + type string; + description + "Identification of the routing profile to be used by + the routing protocols over an AC."; + } + } + nacm:default-deny-write; + } + } + + /**** Operational instructions ****/ + + grouping op-instructions { + description + "Scheduling instructions."; + leaf requested-start { + type yang:date-and-time; + description + "Indicates the requested date and time when the service is + expected to be active."; + } + leaf requested-stop { + type yang:date-and-time; + description + "Indicates the requested date and time when the service is + expected to be disabled."; + } + leaf actual-start { + type yang:date-and-time; + config false; + description + "Indicates the actual date and time when the service + actually was enabled."; + } + leaf actual-stop { + type yang:date-and-time; + config false; + description + "Indicates the actual date and time when the service + actually was disabled."; + } + } + + /**** Layer 2 encapsulations ****/ + // Dot1q + + grouping dot1q { + description + "Defines a grouping for tagged interfaces."; + leaf tag-type { + type identityref { + base vpn-common:tag-type; + } + description + "Tag type."; + } + leaf cvlan-id { + type uint16 { + range "1..4094"; + } + description + "VLAN identifier."; + } + } + + // priority-tagged + + grouping priority-tagged { + description + "Priority tagged."; + leaf tag-type { + type identityref { + base vpn-common:tag-type; + } + description + "Tag type."; + } + } + + // QinQ + + grouping qinq { + description + "Includes QinQ parameters."; + leaf tag-type { + type identityref { + base vpn-common:tag-type; + } + description + "Tag type."; + } + leaf svlan-id { + type uint16 { + range "1..4094"; + } + description + "Service VLAN (S-VLAN) identifier."; + } + leaf cvlan-id { + type uint16 { + range "1..4094"; + } + description + "Customer VLAN (C-VLAN) identifier."; + } + } + + /**** Layer 2 tunnel services ****/ + // pseudowire (PW) + + grouping pseudowire { + description + "Includes pseudowire termination parameters."; + leaf vcid { + type uint32; + description + "Indicates a PW or virtual circuit (VC) identifier."; + } + leaf far-end { + type union { + type uint32; + type inet:ip-address; + } + description + "Neighbor reference."; + reference + "RFC 8077: Pseudowire Setup and Maintenance Using the Label + Distribution Protocol (LDP), Section 6.1"; + } + } + + // VPLS + + grouping vpls { + description + "VPLS termination parameters."; + leaf vcid { + type uint32; + description + "VC identifier."; + } + leaf-list far-end { + type union { + type uint32; + type inet:ip-address; + } + description + "Neighbor reference."; + } + } + + // VXLAN + + grouping vxlan { + description + "VXLAN termination parameters."; + leaf vni-id { + type uint32; + description + "VXLAN Network Identifier (VNI)."; + } + leaf peer-mode { + type identityref { + base vpn-common:vxlan-peer-mode; + } + description + "Specifies the VXLAN access mode. By default, the peer mode + is set to 'static-mode'."; + } + leaf-list peer-ip-address { + type inet:ip-address; + description + "List of a peer's IP addresses."; + } + } + + // Layer 2 Tunnel service + + grouping l2-tunnel-service { + description + "Defines a Layer 2 tunnel termination."; + leaf type { + type identityref { + base l2-tunnel-type; + } + description + "Selects the tunnel termination type for an AC."; + } + container pseudowire { + when "derived-from-or-self(../type, 'ac-common:pseudowire')" { + description + "Only applies when the Layer 2 service type is + 'pseudowire'."; + } + description + "Includes pseudowire termination parameters."; + uses pseudowire; + } + container vpls { + when "derived-from-or-self(../type, 'ac-common:vpls')" { + description + "Only applies when the Layer 2 service type is 'vpls'."; + } + description + "VPLS termination parameters."; + uses vpls; + } + container vxlan { + when "derived-from-or-self(../type, 'ac-common:vxlan')" { + description + "Only applies when the Layer 2 service type is 'vxlan'."; + } + description + "VXLAN termination parameters."; + uses vxlan; + } + } + + /**** Layer 3 connection *****/ + // IPv4 allocation type + + grouping ipv4-allocation-type { + description + "IPv4-specific parameters."; + leaf prefix-length { + type uint8 { + range "0..32"; + } + description + "Subnet prefix length expressed in bits. It is applied to + both local and customer addresses."; + } + leaf address-allocation-type { + type identityref { + base address-allocation-type; + } + must "not(derived-from-or-self(current(), 'ac-common:slaac') " + + "or derived-from-or-self(current(), " + + "'ac-common:provider-dhcp-slaac'))" { + error-message "SLAAC is only applicable to IPv6."; + } + description + "Defines how IPv4 addresses are allocated to the peer + termination points."; + } + } + + // IPv6 allocation type + + grouping ipv6-allocation-type { + description + "IPv6-specific parameters."; + leaf prefix-length { + type uint8 { + range "0..128"; + } + description + "Subnet prefix length expressed in bits. It is applied to + both local and customer addresses."; + } + leaf address-allocation-type { + type identityref { + base address-allocation-type; + } + description + "Defines how IPv6 addresses are allocated to the peer + termination points."; + } + } + + // Basic parameters for an IPv4 connection + + grouping ipv4-connection-basic { + description + "Basic set for IPv4-specific parameters for the connection."; + uses ipv4-allocation-type; + choice allocation-type { + description + "Choice of the IPv4 address allocation."; + case dynamic { + description + "When the addresses are allocated by DHCP or other dynamic + means local to the infrastructure."; + choice provider-dhcp { + description + "Parameters related to DHCP-allocated addresses. IP + addresses are allocated by DHCP, which is provided by + the operator."; + leaf dhcp-service-type { + type enumeration { + enum server { + description + "Local DHCP server."; + } + enum relay { + description + "Local DHCP relay. DHCP requests are relayed to + a provider's server."; + } + } + description + "Indicates the type of DHCP service to be enabled on + an AC."; + } + } + choice dhcp-relay { + description + "The DHCP relay is provided by the operator."; + container customer-dhcp-servers { + description + "Container for a list of the customer's DHCP servers."; + leaf-list server-ip-address { + type inet:ipv4-address; + description + "IPv4 addresses of the customer's DHCP server."; + } + } + } + } + } + } + + // Basic parameters for an IPv6 connection + + grouping ipv6-connection-basic { + description + "Basic set for IPv6-specific parameters for the connection."; + uses ipv6-allocation-type; + choice allocation-type { + description + "Choice of the IPv6 address allocation."; + case dynamic { + description + "When the addresses are allocated by DHCP or other dynamic + means local to the infrastructure."; + choice provider-dhcp { + description + "Parameters related to DHCP-allocated addresses. + IP addresses are allocated by DHCP, which is provided + by the operator."; + leaf dhcp-service-type { + type enumeration { + enum server { + description + "Local DHCP server."; + } + enum relay { + description + "Local DHCP relay. DHCP requests are relayed to a + provider's server."; + } + } + description + "Indicates the type of DHCP service to be enabled on + the AC."; + } + } + choice dhcp-relay { + description + "The DHCP relay is provided by the operator."; + container customer-dhcp-servers { + description + "Container for a list of the customer's DHCP servers."; + leaf-list server-ip-address { + type inet:ipv6-address; + description + "IPv6 addresses of the customer's DHCP server."; + } + } + } + } + } + } + + // Full parameters for the IPv4 connection + + grouping ipv4-connection { + description + "IPv4-specific connection parameters."; + leaf local-address { + type inet:ipv4-address; + description + "The IP address used at the provider's interface."; + } + leaf virtual-address { + type inet:ipv4-address; + description + "This address may be used for redundancy purposes."; + } + uses ipv4-allocation-type; + choice allocation-type { + description + "Choice of the IPv4 address allocation."; + case dynamic { + description + "When the addresses are allocated by DHCP or other + dynamic means local to the infrastructure."; + choice address-assign { + description + "A choice for how IPv4 addresses are assigned."; + case number { + leaf number-of-dynamic-address { + type uint16; + description + "Specifies the number of IP addresses to be assigned + to the customer on the AC."; + } + } + case explicit { + container customer-addresses { + description + "Container for customer addresses to be allocated + using DHCP."; + list address-pool { + key "pool-id"; + description + "Describes IP addresses to be dynamically + allocated. + + When only 'start-address' is present, it + represents a single address. + + When both 'start-address' and 'end-address' are + specified, it implies a range inclusive of both + addresses."; + leaf pool-id { + type string; + description + "A pool identifier for the address range from + 'start-address' to 'end-address'."; + } + leaf start-address { + type inet:ipv4-address; + mandatory true; + description + "Indicates the first address in the pool."; + } + leaf end-address { + type inet:ipv4-address; + description + "Indicates the last address in the pool."; + } + } + } + } + } + choice provider-dhcp { + description + "Parameters related to DHCP-allocated addresses. IP + addresses are allocated by DHCP, which is provided by + the operator."; + leaf dhcp-service-type { + type enumeration { + enum server { + description + "Local DHCP server."; + } + enum relay { + description + "Local DHCP relay. DHCP requests are relayed to + a provider's server."; + } + } + description + "Indicates the type of DHCP service to be enabled on + this AC."; + } + } + choice dhcp-relay { + description + "The DHCP relay is provided by the operator."; + container customer-dhcp-servers { + description + "Container for a list of the customer's DHCP servers."; + leaf-list server-ip-address { + type inet:ipv4-address; + description + "IPv4 addresses of the customer's DHCP server."; + } + } + } + } + case static-addresses { + description + "Lists the IPv4 addresses that are used."; + list address { + key "address-id"; + ordered-by user; + description + "Lists the IPv4 addresses that are used. The first + address of the list is the primary address of the + connection."; + leaf address-id { + type string; + description + "An identifier of the static IPv4 address."; + } + leaf customer-address { + type inet:ipv4-address; + description + "An IPv4 address of the customer side."; + } + } + } + } + } + + // Full parameters for the IPv6 connection + + grouping ipv6-connection { + description + "IPv6-specific connection parameters."; + leaf local-address { + type inet:ipv6-address; + description + "IPv6 address of the provider side."; + } + leaf virtual-address { + type inet:ipv6-address; + description + "This address may be used for redundancy purposes."; + } + uses ipv6-allocation-type; + choice allocation-type { + description + "Choice of the IPv6 address allocation."; + case dynamic { + description + "When the addresses are allocated by DHCP or other + dynamic means local to the infrastructure."; + choice address-assign { + description + "A choice for how IPv6 addresses are assigned."; + case number { + leaf number-of-dynamic-address { + type uint16; + description + "Specifies the number of IP addresses to be + assigned to the customer on this access."; + } + } + case explicit { + container customer-addresses { + description + "Container for customer addresses to be allocated + using DHCP."; + list address-pool { + key "pool-id"; + description + "Describes IP addresses to be dynamically + allocated. + + When only 'start-address' is present, it + represents a single address. + + When both 'start-address' and 'end-address' are + specified, it implies a range inclusive of both + addresses."; + leaf pool-id { + type string; + description + "A pool identifier for the address range from + 'start-address' to 'end-address'."; + } + leaf start-address { + type inet:ipv6-address; + mandatory true; + description + "Indicates the first address in the pool."; + } + leaf end-address { + type inet:ipv6-address; + description + "Indicates the last address in the pool."; + } + } + } + } + } + choice provider-dhcp { + description + "Parameters related to DHCP-allocated addresses. + IP addresses are allocated by DHCP, which is provided + by the operator."; + leaf dhcp-service-type { + type enumeration { + enum server { + description + "Local DHCP server."; + } + enum relay { + description + "Local DHCP relay. DHCP requests are relayed + to a provider's server."; + } + } + description + "Indicates the type of DHCP service to be enabled + on this access."; + } + } + choice dhcp-relay { + description + "The DHCP relay is provided by the operator."; + container customer-dhcp-servers { + description + "Container for a list of the customer's DHCP servers."; + leaf-list server-ip-address { + type inet:ipv6-address; + description + "IPv6 addresses of the customer's DHCP server."; + } + } + } + } + case static-addresses { + description + "Lists the IPv6 addresses that are used by the customer."; + list address { + key "address-id"; + ordered-by user; + description + "Lists the IPv6 addresses that are used. The first + address of the list is the primary IP address of + the connection."; + leaf address-id { + type string; + description + "An identifier of the static IPv6 address."; + } + leaf customer-address { + type inet:ipv6-address; + description + "An IPv6 address of the customer side."; + } + } + } + } + } + + /**** Routing ****/ + // Routing authentication + + grouping bgp-authentication { + description + "Grouping for BGP authentication parameters."; + container authentication { + description + "Container for BGP authentication parameters."; + leaf enabled { + type boolean; + description + "Enables or disables authentication."; + } + container keying-material { + when "../enabled = 'true'"; + description + "Container for describing how a BGP routing session is to + be secured on an AC."; + choice option { + description + "Choice of authentication options."; + case ao { + description + "Uses the TCP Authentication Option (TCP-AO)."; + reference + "RFC 5925: The TCP Authentication Option"; + leaf enable-ao { + type boolean; + description + "Enables the TCP-AO."; + } + leaf ao-keychain { + type key-chain:key-chain-ref; + description + "Reference to the TCP-AO key chain."; + reference + "RFC 8177: YANG Data Model for Key Chains"; + } + } + case md5 { + description + "Uses MD5 to secure the session."; + reference + "RFC 4364: BGP/MPLS IP Virtual Private Networks + (VPNs), Section 13.2"; + leaf md5-keychain { + type key-chain:key-chain-ref; + description + "Specifies a reference to the MD5 key chain."; + reference + "RFC 8177: YANG Data Model for Key Chains"; + } + } + case explicit { + leaf key-id { + type uint32; + description + "Specifies a key identifier."; + } + leaf key { + type string; + description + "BGP authentication key. + + This model only supports the subset of keys that + are representable as ASCII strings."; + } + leaf crypto-algorithm { + type identityref { + base key-chain:crypto-algorithm; + } + description + "Indicates the cryptographic algorithm associated + with the key."; + } + } + } + } + } + } + + grouping ospf-authentication { + description + "Authentication configuration."; + container authentication { + description + "Container for OSPF authentication parameters."; + leaf enabled { + type boolean; + description + "Enables or disables authentication."; + } + container keying-material { + when "../enabled = 'true'"; + description + "Container for describing how an OSPF session is to be + secured for an AC."; + choice option { + description + "Options for OSPF authentication."; + case auth-key-chain { + leaf key-chain { + type key-chain:key-chain-ref; + description + "Specifies the name of the key chain."; + } + } + case auth-key-explicit { + leaf key-id { + type uint32; + description + "Specifies a key identifier."; + } + leaf key { + type string; + description + "OSPF authentication key. + + This model only supports the subset of keys that + are representable as ASCII strings."; + } + leaf crypto-algorithm { + type identityref { + base key-chain:crypto-algorithm; + } + description + "Indicates the cryptographic algorithm associated + with the key."; + } + } + } + } + } + } + + grouping isis-authentication { + description + "IS-IS authentication configuration."; + container authentication { + description + "Container for IS-IS authentication parameters."; + leaf enabled { + type boolean; + description + "Enables or disables authentication."; + } + container keying-material { + when "../enabled = 'true'"; + description + "Describes how an IS-IS session is secured + over an AC."; + choice option { + description + "Options for IS-IS authentication."; + case auth-key-chain { + leaf key-chain { + type key-chain:key-chain-ref; + description + "Specifies the name of the key chain."; + } + } + case auth-key-explicit { + leaf key-id { + type uint32; + description + "Indicates a key identifier."; + } + leaf key { + type string; + description + "IS-IS authentication key. + + This model only supports the subset of keys that + are representable as ASCII strings."; + } + leaf crypto-algorithm { + type identityref { + base key-chain:crypto-algorithm; + } + description + "Indicates the cryptographic algorithm associated + with the key."; + } + } + } + } + } + } + + grouping rip-authentication { + description + "RIP authentication configuration."; + container authentication { + description + "Includes RIP authentication parameters."; + leaf enabled { + type boolean; + description + "Enables or disables authentication."; + } + container keying-material { + when "../enabled = 'true'"; + description + "Describes how a RIP session is to be secured + on an AC."; + choice option { + description + "Specifies the authentication scheme."; + case auth-key-chain { + leaf key-chain { + type key-chain:key-chain-ref; + description + "Indicates the name of the key chain."; + } + } + case auth-key-explicit { + leaf key { + type string; + description + "Specifies a RIP authentication key. + + This model only supports the subset of keys that + are representable as ASCII strings."; + } + leaf crypto-algorithm { + type identityref { + base key-chain:crypto-algorithm; + } + description + "Indicates the cryptographic algorithm associated + with the key."; + } + } + } + } + } + } + + // Basic routing parameters + + grouping bgp-peer-group-without-name { + description + "Identifies a BGP peer-group configured on the local system."; + leaf local-as { + type inet:as-number; + description + "Indicates a local Autonomous System Number (ASN). This ASN + is exposed to a customer so that it knows which ASN to use + to set up a BGP session."; + } + leaf peer-as { + type inet:as-number; + description + "Indicates the customer's ASN when the customer requests + BGP routing."; + } + leaf address-family { + type identityref { + base vpn-common:address-family; + } + description + "This node contains the address families to be activated. + 'dual-stack' means that both IPv4 and IPv6 will be + activated."; + } + leaf role { + type identityref { + base ac-common:bgp-role; + } + description + "Specifies the BGP role (provider, customer, peer, etc.)."; + reference + "RFC 9234: Route Leak Prevention and Detection Using + Roles in UPDATE and OPEN Messages, Section 4"; + } + } + + grouping bgp-peer-group-with-name { + description + "Identifies a BGP peer-group configured on the local system, + identified by a peer-group name."; + leaf name { + type string; + description + "Specifies the name of the BGP peer-group."; + } + uses bgp-peer-group-without-name; + } + + grouping ospf-basic { + description + "Includes configuration specific to OSPF."; + leaf address-family { + type identityref { + base vpn-common:address-family; + } + description + "Indicates whether IPv4, IPv6, or both are to be activated."; + } + leaf area-id { + type yang:dotted-quad; + mandatory true; + description + "Specifies an area ID."; + reference + "RFC 4577: OSPF as the Provider/Customer Edge Protocol + for BGP/MPLS IP Virtual Private Networks + (VPNs), Section 4.2.3 + RFC 6565: OSPFv3 as a Provider Edge to Customer Edge + (PE-CE) Routing Protocol, Section 4.2"; + } + leaf metric { + type uint16; + description + "Metric of the AC. It is used in the routing state + calculation and path selection."; + } + } + + grouping isis-basic { + description + "Basic configuration specific to IS-IS."; + leaf address-family { + type identityref { + base vpn-common:address-family; + } + description + "Indicates whether IPv4, IPv6, or both are to be activated."; + } + leaf area-address { + type area-address; + mandatory true; + description + "Specifies an area address."; + } + } + + // Static routing + + grouping ipv4-static-rtg-entry { + description + "Parameters to configure a specific IPv4 static routing + entry."; + leaf lan { + type inet:ipv4-prefix; + description + "Indicates an IPv4 LAN prefix."; + } + leaf lan-tag { + type string; + description + "Internal tag to be used in service policies."; + } + leaf next-hop { + type union { + type inet:ip-address; + type predefined-next-hop; + } + description + "The next hop that is to be used for the static route. + This may be specified as an IP address or a predefined + next-hop type (e.g., 'discard' or 'local-link')."; + } + leaf metric { + type uint32; + description + "Indicates the metric associated with the static route."; + } + } + + grouping ipv4-static-rtg { + description + "A set of parameters specific to IPv4 static routing."; + list ipv4-lan-prefixes { + if-feature "vpn-common:ipv4"; + key "lan next-hop"; + description + "List of LAN prefixes for the site."; + uses ipv4-static-rtg-entry; + uses ac-common:service-status; + } + } + + grouping ipv6-static-rtg-entry { + description + "Parameters to configure a specific IPv6 static routing + entry."; + leaf lan { + type inet:ipv6-prefix; + description + "Indicates an IPv6 LAN prefix."; + } + leaf lan-tag { + type string; + description + "Internal tag to be used in service (e.g., VPN) policies."; + } + leaf next-hop { + type union { + type inet:ip-address; + type predefined-next-hop; + } + description + "The next hop that is to be used for the static route. + This may be specified as an IP address or a predefined + next-hop type (e.g., 'discard' or 'local-link')."; + } + leaf metric { + type uint32; + description + "Indicates the metric associated with the static route."; + } + } + + grouping ipv6-static-rtg { + description + "A set of parameters specific to IPv6 static routing."; + list ipv6-lan-prefixes { + if-feature "vpn-common:ipv6"; + key "lan next-hop"; + description + "List of LAN prefixes for the customer-terminating points."; + uses ipv6-static-rtg-entry; + uses ac-common:service-status; + } + } + + // OAM + + grouping bfd { + description + "Groups a set of basic BFD parameters."; + leaf holdtime { + type uint32; + units "milliseconds"; + description + "Specifies the expected BFD holdtime. + + The customer may impose some fixed values for the + holdtime period if the provider allows the customer + to use this function. + + If the provider doesn't allow the customer to use + this function, fixed values will not be set."; + reference + "RFC 5880: Bidirectional Forwarding Detection (BFD), + Section 6.8.18"; + } + } + + // redundancy + + grouping redundancy-group { + description + "A grouping for redundancy group."; + list group { + key "group-id"; + description + "Specifies a list of group identifiers."; + leaf group-id { + type string; + description + "Indicates the group-id to which an AC belongs."; + } + leaf precedence { + type identityref { + base ac-common:precedence-type; + } + description + "Defines redundancy of an AC."; + } + } + } + + // QoS + + grouping bandwidth-parameters { + description + "A grouping for bandwidth parameters."; + leaf cir { + type uint64; + units "bps"; + description + "Committed Information Rate (CIR). The maximum number of + bits that a port can receive or send during one second over + an interface."; + } + leaf cbs { + type uint64; + units "bytes"; + description + "Committed Burst Size (CBS). CBS controls the bursty nature + of the traffic. Traffic that does not use the configured + CIR accumulates credits until the credits reach the + configured CBS."; + } + leaf eir { + type uint64; + units "bps"; + description + "Excess Information Rate (EIR), i.e., excess frame delivery + allowed not subject to a Service Level Agreement (SLA). + The traffic rate can be limited by EIR."; + } + leaf ebs { + type uint64; + units "bytes"; + description + "Excess Burst Size (EBS). The bandwidth available for burst + traffic from the EBS is subject to the amount of bandwidth + that is accumulated during periods when traffic allocated + by the EIR policy is not used."; + } + leaf pir { + type uint64; + units "bps"; + description + "Peak Information Rate (PIR), i.e., maximum frame delivery + allowed. It is equal to or less than the sum of the CIR and + EIR."; + } + leaf pbs { + type uint64; + units "bytes"; + description + "Peak Burst Size (PBS)."; + } + } + + grouping bandwidth-per-type { + description + "Grouping for bandwidth per type."; + list bandwidth { + key "bw-type"; + description + "List for bandwidth per type parameters."; + leaf bw-type { + type identityref { + base vpn-common:bw-type; + } + description + "Indicates the bandwidth type."; + } + choice type { + description + "Choice based upon bandwidth type."; + case per-cos { + description + "Bandwidth per Class of Service (CoS)."; + list cos { + key "cos-id"; + description + "List of CoSes."; + leaf cos-id { + type uint8; + description + "Identifier of the CoS, indicated by a Differentiated + Services Code Point (DSCP) or a CE-CLAN CoS (802.1p) + value in the service frame."; + reference + "IEEE Std 802.1Q: Bridges and Bridged Networks"; + } + uses bandwidth-parameters; + } + } + case other { + description + "Other bandwidth types."; + uses bandwidth-parameters; + } + } + } + } +} diff --git a/standard/ietf/RFC/ietf-ac-glue.yang b/standard/ietf/RFC/ietf-ac-glue.yang new file mode 120000 index 000000000..4f07048e1 --- /dev/null +++ b/standard/ietf/RFC/ietf-ac-glue.yang @@ -0,0 +1 @@ +ietf-ac-glue@2025-09-29.yang \ No newline at end of file diff --git a/standard/ietf/RFC/ietf-ac-glue@2025-09-29.yang b/standard/ietf/RFC/ietf-ac-glue@2025-09-29.yang new file mode 100644 index 000000000..5c962091c --- /dev/null +++ b/standard/ietf/RFC/ietf-ac-glue@2025-09-29.yang @@ -0,0 +1,256 @@ +module ietf-ac-glue { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-ac-glue"; + prefix ac-glue; + + import ietf-l3vpn-svc { + prefix l3vpn-svc; + reference + "RFC 8299: YANG Data Model for L3VPN Service Delivery"; + } + import ietf-l2vpn-svc { + prefix l2vpn-svc; + reference + "RFC 8466: A YANG Data Model for Layer 2 Virtual Private + Network (L2VPN) Service Delivery"; + } + import ietf-l3vpn-ntw { + prefix l3nm; + reference + "RFC 9182: A YANG Network Data Model for Layer 3 VPNs"; + } + import ietf-l2vpn-ntw { + prefix l2nm; + reference + "RFC 9291: A YANG Network Data Model for Layer 2 VPNs"; + } + import ietf-ac-svc { + prefix ac-svc; + reference + "RFC 9834: YANG Data Models for Bearers and Attachment + Circuits as a Service (ACaaS)"; + } + import ietf-ac-ntw { + prefix ac-ntw; + reference + "RFC 9835: A Network YANG Data Model for Attachment Circuits"; + } + + organization + "IETF OPSAWG (Operations and Management Area Working Group)"; + contact + "WG Web: + WG List: + + Editor: Mohamed Boucadair + + Author: Richard Roberts + + Author: Samier Barguil + + Author: Oscar Gonzalez de Dios + "; + description + "This YANG module defines a YANG data model for augmenting the + LxSM and the LxNM with AC references. + + 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 9836; see the + RFC itself for full legal notices."; + + revision 2025-09-29 { + description + "Initial revision."; + reference + "RFC 9836: A YANG Data Model for Augmenting VPN Service + and Network Models with Attachment Circuits"; + } + + feature ac-glue { + description + "The VPN implementation supports binding a specific VPN + network access or site access to an AC."; + } + + grouping single-ac-svc-ref { + description + "A grouping with a single reference to a service AC."; + leaf ac-svc-ref { + type ac-svc:attachment-circuit-reference; + description + "A reference to the AC as exposed at the service that was + provisioned using the ACaaS module."; + } + } + + grouping single-ac-svc-ntw-ref { + description + "A grouping with single AC references."; + leaf ac-svc-ref { + type ac-svc:attachment-circuit-reference; + description + "A reference to the AC as exposed at the service that was + provisioned using the ACaaS module."; + } + container ac-ntw-ref { + description + "A reference to the AC that was provisioned using the AC + network module."; + uses ac-ntw:attachment-circuit-reference; + } + } + + grouping ac-svc-ref { + description + "A set of service-specific AC-related data."; + leaf-list ac-svc-ref { + type ac-svc:attachment-circuit-reference; + description + "A reference to the AC as exposed at the service that was + provisioned using the ACaaS module."; + } + } + + grouping ac-svc-ntw-ref { + description + "A set of AC-related data."; + leaf-list ac-svc-ref { + type ac-svc:attachment-circuit-reference; + description + "A reference to the AC as exposed at the service that was + provisioned using the ACaaS module."; + } + list ac-ntw-ref { + key "ac-ref"; + description + "A reference to the AC that was provisioned using the AC + network module."; + uses ac-ntw:attachment-circuit-reference; + } + } + + augment "/l2vpn-svc:l2vpn-svc" + + "/l2vpn-svc:sites/l2vpn-svc:site" + + "/l2vpn-svc:site-network-accesses" { + description + "Augments VPN site network accesses with AC provisioning + details. Concretely, it binds a site to a set of ACs with + Layer 2 properties that were created using the ACaaS module."; + uses ac-svc-ref; + } + + augment "/l2vpn-svc:l2vpn-svc" + + "/l2vpn-svc:sites/l2vpn-svc:site" + + "/l2vpn-svc:site-network-accesses" + + "/l2vpn-svc:site-network-access" { + if-feature "ac-glue"; + description + "Augments VPN site network access with AC provisioning + details. Concretely, it glues a 'site-network-access' + to an AC with Layer 2 properties that was created using the + ACaaS module. + + The ACaaS information takes precedence over any overlapping + information that is also provided for a site network access."; + uses single-ac-svc-ref; + } + + augment "/l3vpn-svc:l3vpn-svc" + + "/l3vpn-svc:sites/l3vpn-svc:site" + + "/l3vpn-svc:site-network-accesses" { + description + "Augments VPN site network accesses with AC provisioning + details. Concretely, it binds a site to a set of ACs with + both Layer 2 and Layer 3 properties that were created using + the ACaaS module."; + uses ac-svc-ref; + } + + augment "/l3vpn-svc:l3vpn-svc" + + "/l3vpn-svc:sites/l3vpn-svc:site" + + "/l3vpn-svc:site-network-accesses" + + "/l3vpn-svc:site-network-access" { + if-feature "ac-glue"; + description + "Augments VPN site network access with AC provisioning + details. Concretely, it glues a 'site-network-access' to an + AC with both Layer 2 and Layer 3 properties that was created + using the ACaaS module. + + The ACaaS information takes precedence over any overlapping + information that is also provided for a site network access."; + uses single-ac-svc-ref; + } + + augment "/l2nm:l2vpn-ntw/l2nm:vpn-services/l2nm:vpn-service" + + "/l2nm:vpn-nodes/l2nm:vpn-node" + + "/l2nm:vpn-network-accesses" { + description + "Augments VPN network accesses with both service and network + AC provisioning details. Concretely, it binds a site to (1) + a set of ACs with Layer 2 properties that were created using + the ACaaS module and (2) a set of ACs with Layer 2 properties + that were provisioned using the AC network model."; + uses ac-svc-ntw-ref; + } + + augment "/l2nm:l2vpn-ntw/l2nm:vpn-services/l2nm:vpn-service" + + "/l2nm:vpn-nodes/l2nm:vpn-node" + + "/l2nm:vpn-network-accesses" + + "/l2nm:vpn-network-access" { + if-feature "ac-glue"; + description + "Augments VPN network access with service and network + references to an AC. Concretely, it glues a VPN network + access to (1) an AC with Layer 2 properties + that was created using the ACaaS module and (2) an AC with + Layer 2 properties that was created using the AC network + module. + + The AC service and network information takes precedence over + any overlapping information that is also provided for a VPN + network access."; + uses single-ac-svc-ntw-ref; + } + + augment "/l3nm:l3vpn-ntw/l3nm:vpn-services/l3nm:vpn-service" + + "/l3nm:vpn-nodes/l3nm:vpn-node" + + "/l3nm:vpn-network-accesses" { + description + "Augments VPN network accesses with both service and network + AC provisioning details. Concretely, it binds a site to (1) + a set of ACs with both Layer 2 and Layer 3 properties that + were created using the ACaaS module and (2) a set of ACs with + both Layer 2 and Layer 3 properties that were provisioned + using the AC network model."; + uses ac-svc-ntw-ref; + } + + augment "/l3nm:l3vpn-ntw/l3nm:vpn-services/l3nm:vpn-service" + + "/l3nm:vpn-nodes/l3nm:vpn-node" + + "/l3nm:vpn-network-accesses" + + "/l3nm:vpn-network-access" { + if-feature "ac-glue"; + description + "Augments VPN network access with service and network + references to an AC. Concretely, it glues a VPN network + access to (1) an AC with both Layer 2 and Layer 3 properties + that was created using the ACaaS module and (2) an AC with + both Layer 2 and Layer 3 properties that was created using the + AC network module. + + The AC service and network information takes precedence over + any overlapping information that is also provided for a VPN + network access."; + uses single-ac-svc-ntw-ref; + } +} diff --git a/standard/ietf/RFC/ietf-ac-ntw.yang b/standard/ietf/RFC/ietf-ac-ntw.yang new file mode 120000 index 000000000..47568bed5 --- /dev/null +++ b/standard/ietf/RFC/ietf-ac-ntw.yang @@ -0,0 +1 @@ +ietf-ac-ntw@2025-09-29.yang \ No newline at end of file diff --git a/standard/ietf/RFC/ietf-ac-ntw@2025-09-29.yang b/standard/ietf/RFC/ietf-ac-ntw@2025-09-29.yang new file mode 100644 index 000000000..ca0c45370 --- /dev/null +++ b/standard/ietf/RFC/ietf-ac-ntw@2025-09-29.yang @@ -0,0 +1,2014 @@ +module ietf-ac-ntw { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-ac-ntw"; + prefix ac-ntw; + + import ietf-vpn-common { + prefix vpn-common; + reference + "RFC 9181: A Common YANG Data Model for Layer 2 and Layer 3 + VPNs"; + } + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types, Section 4"; + } + import ietf-key-chain { + prefix key-chain; + reference + "RFC 8177: YANG Data Model for Key Chains"; + } + import ietf-routing-types { + prefix rt-types; + reference + "RFC 8294: Common YANG Data Types for the Routing Area"; + } + import ietf-routing-policy { + prefix rt-pol; + reference + "RFC 9067: A YANG Data Model for Routing Policy"; + } + import ietf-interfaces { + prefix if; + reference + "RFC 8343: A YANG Data Model for Interface Management"; + } + import ieee802-dot1q-types { + prefix dot1q-types; + reference + "IEEE Std 802.1Qcp: Bridges and Bridged Networks-- + Amendment 30: YANG Data Model"; + } + import ietf-network { + prefix nw; + reference + "RFC 8345: A YANG Data Model for Network Topologies, + Section 6.1"; + } + import ietf-sap-ntw { + prefix sap; + reference + "RFC 9408: A YANG Network Data Model for Service Attachment + Points (SAPs)"; + } + import ietf-ac-common { + prefix ac-common; + reference + "RFC 9833: A Common YANG Data Model for Attachment Circuits"; + } + import ietf-ac-svc { + prefix ac-svc; + reference + "RFC 9834: YANG Data Models for Bearers and Attachment + Circuits as a Service (ACaaS)"; + } + + organization + "IETF OPSAWG (Operations and Management Area Working Group)"; + contact + "WG Web: + WG List: + + Editor: Mohamed Boucadair + + Author: Richard Roberts + + Author: Oscar Gonzalez de Dios + + Author: Samier Barguil + + Author: Bo Wu + "; + description + "This YANG module defines a YANG network model for the management + of attachment circuits (ACs). + + 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 9835; see the + RFC itself for full legal notices."; + + revision 2025-09-29 { + description + "Initial revision."; + reference + "RFC 9835: A YANG Network Data Model for Attachment Circuits"; + } + + // References + + /* A set of groupings to ease referencing cross-modules */ + + grouping attachment-circuit-reference { + description + "This grouping can be used to reference an AC in a specific + node."; + leaf ac-ref { + type leafref { + path "/nw:networks/nw:network[nw:network-id=current()/../" + + "network-ref]/nw:node[nw:node-id=current()/../" + + "node-ref]/ac-ntw:ac/ac-ntw:name"; + require-instance false; + } + description + "An absolute reference to an AC."; + } + uses nw:node-ref; + } + + grouping attachment-circuit-references { + description + "This grouping can be used to reference a list of ACs in a + specific node."; + leaf-list ac-ref { + type leafref { + path "/nw:networks/nw:network[nw:network-id=current()/../" + + "network-ref]/nw:node[nw:node-id=current()/../" + + "node-ref]/ac-ntw:ac/ac-ntw:name"; + require-instance false; + } + description + "An absolute reference to an AC."; + } + uses nw:node-ref; + } + + grouping ac-profile-reference { + description + "This grouping can be used to reference an AC profile."; + leaf ac-profile-ref { + type leafref { + path "/nw:networks/nw:network[nw:network-id=current()/../" + + "network-ref]/ac-ntw:ac-profile/ac-ntw:name"; + require-instance false; + } + description + "An absolute reference to an AC."; + } + uses nw:network-ref; + } + + grouping encryption-profile-reference { + description + "This grouping can be used to reference an encryption + profile."; + leaf encryption-profile-ref { + type leafref { + path "/nw:networks/nw:network[nw:network-id=current()/../" + + "network-ref]" + + "/ac-ntw:specific-provisioning-profiles" + + "/ac-ntw:valid-provider-identifiers" + + "/ac-ntw:encryption-profile-identifier/ac-ntw:id"; + require-instance false; + } + description + "An absolute reference to an encryption profile."; + } + uses nw:network-ref; + } + + grouping qos-profile-reference { + description + "This grouping can be used to reference a QoS profile."; + leaf qos-profile-ref { + type leafref { + path "/nw:networks/nw:network[nw:network-id=current()/../" + + "network-ref]" + + "/ac-ntw:specific-provisioning-profiles" + + "/ac-ntw:valid-provider-identifiers" + + "/ac-ntw:qos-profile-identifier/ac-ntw:id"; + require-instance false; + } + description + "An absolute reference to a QoS profile."; + } + uses nw:network-ref; + } + + grouping failure-detection-profile-reference { + description + "This grouping can be used to reference a failure detection + profile."; + leaf failure-detection-profile-ref { + type leafref { + path "/nw:networks/nw:network[nw:network-id=current()/../" + + "network-ref]" + + "/ac-ntw:specific-provisioning-profiles" + + "/ac-ntw:valid-provider-identifiers" + + "/ac-ntw:failure-detection-profile-identifier/ac-ntw:id"; + require-instance false; + } + description + "An absolute reference to a failure detection profile."; + } + uses nw:network-ref; + } + + grouping forwarding-profile-reference { + description + "This grouping can be used to reference a forwarding profile."; + leaf forwarding-profile-ref { + type leafref { + path "/nw:networks/nw:network[nw:network-id=current()/../" + + "network-ref]" + + "/ac-ntw:specific-provisioning-profiles" + + "/ac-ntw:valid-provider-identifiers" + + "/ac-ntw:forwarding-profile-identifier/ac-ntw:id"; + require-instance false; + } + description + "An absolute reference to a forwarding profile."; + } + uses nw:network-ref; + } + + grouping routing-profile-reference { + description + "This grouping can be used to reference a routing profile."; + leaf routing-profile-ref { + type leafref { + path "/nw:networks/nw:network[nw:network-id=current()/../" + + "network-ref]" + + "/ac-ntw:specific-provisioning-profiles" + + "/ac-ntw:valid-provider-identifiers" + + "/ac-ntw:routing-profile-identifier/ac-ntw:id"; + require-instance false; + } + description + "An absolute reference to a routing profile."; + } + uses nw:network-ref; + } + + // Layer 2 connection + + grouping l2-connection { + description + "Defines Layer 2 protocols and parameters that are required to + enable AC connectivity on the network side."; + container encapsulation { + description + "Container for Layer 2 encapsulation."; + leaf encap-type { + type identityref { + base vpn-common:encapsulation-type; + } + description + "Tagged interface type."; + } + container dot1q { + when "derived-from-or-self(../encap-type, " + + "'vpn-common:dot1q')" { + description + "Only applies when the type of the tagged interface is + 'dot1q'."; + } + description + "Tagged interface."; + uses ac-common:dot1q; + container tag-operations { + description + "Sets the tag manipulation policy for this AC. It + defines a set of tag manipulations that allow for the + insertion, removal, or rewriting of 802.1Q VLAN tags. + These operations are indicated for the CE-PE direction. + By default, tag operations are symmetric. As such, the + reverse tag operation is assumed on the PE-CE + direction."; + choice op-choice { + description + "Selects the tag rewriting policy for an AC."; + leaf pop { + type empty; + description + "Pop the outer tag."; + } + leaf push { + type empty; + description + "Pushes one or two tags defined by the tag-1 and + tag-2 leaves. It is assumed that, absent any + policy, the default value of 0 will be used for + the Priority Code Point (PCP) setting."; + } + leaf translate { + type empty; + description + "Translates the outer tag to one or two tags. PCP + bits are preserved."; + } + } + leaf tag-1 { + when 'not(../pop)'; + type dot1q-types:vlanid; + description + "A first tag to be used for push or translate + operations. This tag will be used as the outermost + tag as a result of the tag operation."; + } + leaf tag-1-type { + type dot1q-types:dot1q-tag-type; + default "dot1q-types:s-vlan"; + description + "Specifies a specific 802.1Q tag type of tag-1."; + } + leaf tag-2 { + when '(../translate)'; + type dot1q-types:vlanid; + description + "A second tag to be used for translation."; + } + leaf tag-2-type { + type dot1q-types:dot1q-tag-type; + default "dot1q-types:c-vlan"; + description + "Specifies a specific 802.1Q tag type of tag-2."; + } + } + } + container priority-tagged { + when "derived-from-or-self(../encap-type, " + + "'vpn-common:priority-tagged')" { + description + "Only applies when the type of the tagged interface is + 'priority-tagged'."; + } + description + "Priority tagged container."; + uses ac-common:priority-tagged; + } + container qinq { + when "derived-from-or-self(../encap-type, " + + "'vpn-common:qinq')" { + description + "Only applies when the type of the tagged interface is + 'QinQ'."; + } + description + "Includes QinQ parameters."; + uses ac-common:qinq; + container tag-operations { + description + "Sets the tag manipulation policy for this AC. It + defines a set of tag manipulations that allow for the + insertion, removal, or rewriting of 802.1Q VLAN tags. + These operations are indicated for the CE-PE direction. + By default, tag operations are symmetric. As such, the + reverse tag operation is assumed on the PE-CE + direction."; + choice op-choice { + description + "Selects the tag rewriting policy for an AC."; + leaf pop { + type uint8 { + range "1|2"; + } + description + "Pops one or two tags as a function of the indicated + pop value."; + } + leaf push { + type empty; + description + "Pushes one or two tags defined by the tag-1 and + tag-2 leaves. It is assumed that, absent any + policy, the default value of 0 will be used for + PCP setting."; + } + leaf translate { + type uint8 { + range "1|2"; + } + description + "Translates one or two outer tags. PCP bits are + preserved. The following operations are supported: + + - translate 1 with tag-1 leaf is provided: only the + outermost tag is translated to the value in tag-1. + + - translate 2 with both tag-1 and tag-2 leaves are + provided: both outer and inner tags are translated + to the values in tag-1 and tag-2, respectively. + + - translate 2 with tag-1 leaf is provided: the + outer tag is popped while the inner tag is + translated to the value in tag-1."; + } + } + leaf tag-1 { + when 'not(../pop)'; + type dot1q-types:vlanid; + description + "A first tag to be used for push or translate + operations. This tag will be used as the outermost + tag as a result of the tag operation."; + } + leaf tag-1-type { + type dot1q-types:dot1q-tag-type; + default "dot1q-types:s-vlan"; + description + "Specifies a specific 802.1Q tag type of tag-1."; + } + leaf tag-2 { + when 'not(../pop)'; + type dot1q-types:vlanid; + description + "A second tag to be used for push or translate + operations."; + } + leaf tag-2-type { + type dot1q-types:dot1q-tag-type; + default "dot1q-types:c-vlan"; + description + "Specifies a specific 802.1Q tag type of tag-2."; + } + } + } + } + choice l2-service { + description + "The Layer 2 connectivity service can be provided by + indicating a pointer to an L2VPN or by specifying a Layer 2 + tunnel service."; + container l2-tunnel-service { + description + "Defines a Layer 2 tunnel termination."; + uses ac-common:l2-tunnel-service; + } + case l2vpn { + leaf l2vpn-id { + type vpn-common:vpn-id; + description + "Indicates the L2VPN service associated with an + Integrated Routing and Bridging (IRB) interface."; + } + } + } + } + + grouping l2-connection-if-ref { + description + "Specifies Layer 2 connection parameters with interface + references."; + uses l2-connection; + leaf l2-termination-point { + type string; + description + "Specifies a reference to a local Layer 2 termination point, + such as a Layer 2 sub-interface."; + } + leaf local-bridge-reference { + type string; + description + "Specifies a local bridge reference to accommodate, e.g., + implementations that require internal bridging. + A reference may be a local bridge domain."; + } + leaf bearer-reference { + if-feature "ac-common:server-assigned-reference"; + type string; + description + "This is an internal reference for the service provider to + identify the bearer associated with this AC."; + } + container lag-interface { + if-feature "vpn-common:lag-interface"; + description + "Container for configuration of Link Aggregation Group (LAG) + interface attributes."; + leaf lag-interface-id { + type string; + description + "LAG interface identifier."; + } + container member-link-list { + description + "Container for the member link list."; + list member-link { + key "name"; + description + "Member link."; + leaf name { + type string; + description + "Member link name."; + } + } + } + } + } + + // IPv4 connection + + grouping ipv4-connection { + description + "IPv4-specific connection parameters."; + leaf local-address { + type inet:ipv4-address; + description + "The IPv4 address used at the provider's interface."; + } + uses ac-common:ipv4-allocation-type; + choice allocation-type { + description + "Choice of the IPv4 address allocation."; + case dynamic { + description + "When the addresses are allocated by DHCP or other + dynamic means local to the infrastructure."; + choice address-assign { + description + "A choice for how IPv4 addresses are assigned."; + case number { + leaf number-of-dynamic-address { + type uint16; + description + "Specifies the number of IP addresses to be + assigned to the customer on this access."; + } + } + case explicit { + container customer-addresses { + description + "Container for customer addresses to be allocated + using DHCP."; + list address-pool { + key "pool-id"; + description + "Describes IP addresses to be dynamically + allocated. + + When only 'start-address' is present, it + represents a single address. + + When both 'start-address' and 'end-address' are + specified, it implies a range inclusive of both + addresses."; + leaf pool-id { + type string; + description + "A pool identifier for the address range from + 'start-address' to 'end-address'."; + } + leaf start-address { + type inet:ipv4-address; + mandatory true; + description + "Indicates the first address in the pool."; + } + leaf end-address { + type inet:ipv4-address; + description + "Indicates the last address in the pool."; + } + } + } + } + } + choice provider-dhcp { + description + "Parameters related to DHCP-allocated addresses. + IP addresses are allocated by DHCP, which is provided + by the operator."; + leaf dhcp-service-type { + type enumeration { + enum server { + description + "Local DHCP server."; + } + enum relay { + description + "Local DHCP relay. DHCP requests are relayed to a + provider's server."; + } + } + description + "Indicates the type of DHCP service to be enabled on + this access."; + } + choice service-type { + description + "Choice based on the DHCP service type."; + case relay { + description + "Container for a list of the provider's DHCP servers + (i.e., 'dhcp-service-type' is set to 'relay')."; + leaf-list server-ip-address { + type inet:ipv4-address; + description + "IPv4 addresses of the provider's DHCP server, for + use by the local DHCP relay."; + } + } + } + } + choice dhcp-relay { + description + "The DHCP relay is provided by the operator."; + container customer-dhcp-servers { + description + "Container for a list of the customer's DHCP servers."; + leaf-list server-ip-address { + type inet:ipv4-address; + description + "IPv4 addresses of the customer's DHCP server."; + } + } + } + } + case static-addresses { + description + "Lists the static IPv4 addresses that are used."; + list address { + key "address-id"; + ordered-by user; + description + "Lists the IPv4 addresses that are used. The first + address of the list is the primary address of the + connection."; + leaf address-id { + type string; + description + "An identifier of the static IPv4 address."; + } + leaf customer-address { + type inet:ipv4-address; + description + "An IPv4 address of the customer side."; + } + uses failure-detection-profile-reference; + } + } + } + } + + grouping ipv6-connection { + description + "IPv6-specific connection parameters."; + leaf local-address { + type inet:ipv6-address; + description + "IPv6 address of the provider side."; + } + uses ac-common:ipv6-allocation-type; + choice allocation-type { + description + "Choice of the IPv6 address allocation."; + case dynamic { + description + "When the addresses are allocated by DHCP or other + dynamic means local to the infrastructure."; + choice address-assign { + description + "A choice for how IPv6 addresses are assigned."; + case number { + leaf number-of-dynamic-address { + type uint16; + description + "Specifies the number of IP addresses to be + assigned to the customer on this access."; + } + } + case explicit { + container customer-addresses { + description + "Container for customer addresses to be allocated + using DHCP."; + list address-pool { + key "pool-id"; + description + "Describes IPv6 addresses to be dynamically + allocated. + + When only 'start-address' is present, it + represents a single address. + + When both 'start-address' and 'end-address' are + specified, it implies a range inclusive of both + addresses."; + leaf pool-id { + type string; + description + "A pool identifier for the address range from + 'start-address' to 'end-address'."; + } + leaf start-address { + type inet:ipv6-address; + mandatory true; + description + "Indicates the first address in the pool."; + } + leaf end-address { + type inet:ipv6-address; + description + "Indicates the last address in the pool."; + } + } + } + } + } + choice provider-dhcp { + description + "Parameters related to DHCP-allocated addresses. + IP addresses are allocated by DHCP, which is provided + by the operator."; + leaf dhcp-service-type { + type enumeration { + enum server { + description + "Local DHCP server."; + } + enum relay { + description + "Local DHCP relay. DHCP requests are relayed to + a provider's server."; + } + } + description + "Indicates the type of DHCP service to be enabled on + this access."; + } + choice service-type { + description + "Choice based on the DHCP service type."; + case relay { + description + "Container for a list of the provider's DHCP servers + (i.e., 'dhcp-service-type' is set to 'relay')."; + leaf-list server-ip-address { + type inet:ipv6-address; + description + "IPv6 addresses of the provider's DHCP server, for + use by the local DHCP relay."; + } + } + } + } + choice dhcp-relay { + description + "The DHCP relay is provided by the operator."; + container customer-dhcp-servers { + description + "Container for a list of the customer's DHCP servers."; + leaf-list server-ip-address { + type inet:ipv6-address; + description + "IPv6 addresses of the customer's DHCP servers."; + } + } + } + } + case static-addresses { + description + "Lists the static IPv6 addresses that are used."; + list address { + key "address-id"; + ordered-by user; + description + "Lists the IPv6 addresses that are used. The first + address of the list is the primary address of + the connection."; + leaf address-id { + type string; + description + "An identifier of the static IPv6 address."; + } + leaf customer-address { + type inet:ipv6-address; + description + "An IPv6 address of the customer side."; + } + uses failure-detection-profile-reference; + } + } + } + } + + grouping ip-connection { + description + "Defines IP connection parameters."; + leaf l3-termination-point { + type string; + description + "Specifies a reference to a local Layer 3 termination point, + such as a bridge domain interface."; + } + container ipv4 { + if-feature "vpn-common:ipv4"; + description + "IPv4-specific connection parameters."; + uses ipv4-connection; + } + container ipv6 { + if-feature "vpn-common:ipv6"; + description + "IPv6-specific connection parameters."; + uses ipv6-connection; + } + } + + /* Routing */ + //BGP base parameters + + grouping bgp-base { + description + "Configuration specific to BGP."; + leaf description { + type string; + description + "Includes a description of the BGP session. This description + is meant to be used for diagnostic purposes. The semantics + of the description are local to an implementation."; + } + uses rt-pol:apply-policy-group; + leaf local-as { + type inet:as-number; + description + "Indicates a local Autonomous System Number (ASN), if an ASN + distinct from the ASN configured at the AC level is + needed."; + } + leaf peer-as { + type inet:as-number; + mandatory true; + description + "Indicates the customer's ASN when the customer requests BGP + routing."; + } + leaf address-family { + type identityref { + base vpn-common:address-family; + } + description + "This node contains the address families to be activated. + 'dual-stack' means that both IPv4 and IPv6 will be + activated."; + } + leaf role { + type identityref { + base ac-common:bgp-role; + } + description + "Specifies the BGP role (provider, customer, peer, etc.)."; + } + leaf multihop { + type uint8; + description + "Describes the number of IP hops allowed between a given BGP + neighbor and the PE."; + } + leaf as-override { + type boolean; + description + "Defines whether ASN override is enabled, i.e., replacing the + ASN of the customer specified in the AS_PATH attribute with + the local ASN."; + } + leaf allow-own-as { + type uint8; + description + "If set, specifies the maximum number of occurrences of the + provider's ASN that are permitted within the AS_PATH + before it is rejected."; + } + leaf prepend-global-as { + type boolean; + description + "In some situations, the ASN that is provided at the node + level may be distinct from the ASN configured at the AC. + When such ASNs are provided, they are both prepended to the + BGP route updates for this AC. To disable that behavior, + 'prepend-global-as' must be set to 'false'. In such a + case, the ASN that is provided at the node level is not + prepended to the BGP route updates for this access."; + } + leaf send-default-route { + type boolean; + description + "Defines whether default routes can be advertised to a peer. + If set to 'true', the default routes are advertised to + a peer."; + } + leaf site-of-origin { + when "derived-from-or-self(../address-family, " + + "'vpn-common:ipv4' or 'vpn-common:dual-stack')" { + description + "Only applies if IPv4 is activated."; + } + type rt-types:route-origin; + description + "The Site of Origin attribute is encoded as a Route Origin + Extended Community. It is meant to uniquely identify the + set of routes learned from a site via a particular AC and + is used to prevent routing loops."; + reference + "RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs), + Section 7"; + } + leaf ipv6-site-of-origin { + when "derived-from-or-self(../address-family, " + + "'vpn-common:ipv6' or 'vpn-common:dual-stack')" { + description + "Only applies if IPv6 is activated."; + } + type rt-types:ipv6-route-origin; + description + "The IPv6 Site of Origin attribute is encoded as an IPv6 + Route Origin Extended Community. It is meant to uniquely + identify the set of routes learned from a site."; + reference + "RFC 5701: IPv6 Address Specific BGP Extended Community + Attribute"; + } + list redistribute-connected { + key "address-family"; + description + "Indicates, per address family, the policy to follow for + connected routes."; + leaf address-family { + type identityref { + base vpn-common:address-family; + } + description + "Indicates the address family."; + } + leaf enabled { + type boolean; + description + "Enables, when set to 'true', the redistribution of + connected routes."; + } + } + container bgp-max-prefix { + description + "Controls the behavior when a prefix maximum is reached."; + leaf max-prefix { + type uint32; + description + "Indicates the maximum number of BGP prefixes allowed in + the BGP session. + + It allows control of how many prefixes can be received + from a neighbor. + + If the limit is exceeded, the action indicated in + 'violate-action' will be followed."; + reference + "RFC 4271: A Border Gateway Protocol 4 (BGP-4), + Section 8.2.2"; + } + leaf warning-threshold { + type decimal64 { + fraction-digits 5; + range "0..100"; + } + units "percent"; + description + "When this value is reached, a warning notification will be + triggered."; + } + leaf violate-action { + type enumeration { + enum warning { + description + "Only a warning message is sent to the peer when the + limit is exceeded."; + } + enum discard-extra-paths { + description + "Discards extra paths when the limit is exceeded."; + } + enum restart { + description + "The BGP session restarts after the indicated time + interval."; + } + } + description + "If the BGP neighbor 'max-prefix' limit is reached, the + action indicated in 'violate-action' will be followed."; + } + leaf restart-timer { + type uint32; + units "seconds"; + description + "Time interval after which the BGP session will be + reestablished."; + } + } + container bgp-timers { + description + "Includes two BGP timers."; + leaf keepalive { + type uint16 { + range "0..21845"; + } + units "seconds"; + description + "This timer indicates the KEEPALIVE messages' frequency + between a PE and a BGP peer. + + If set to '0', it indicates that KEEPALIVE messages are + disabled. + + It is suggested that the maximum time between KEEPALIVE + messages be one-third of the Hold Time interval."; + reference + "RFC 4271: A Border Gateway Protocol 4 (BGP-4), + Section 4.4"; + } + leaf hold-time { + type uint16 { + range "0 | 3..65535"; + } + units "seconds"; + description + "Indicates the maximum number of seconds that may elapse + between the receipt of successive KEEPALIVE and/or UPDATE + messages from the peer. + + The Hold Time must be either zero or at least three + seconds."; + reference + "RFC 4271: A Border Gateway Protocol 4 (BGP-4), + Section 4.2"; + } + } + } + + grouping bgp-base-peer-group { + description + "Grouping for a basic BGP peer group."; + leaf name { + type string; + description + "Name of the BGP peer group."; + } + uses bgp-base; + } + + grouping bgp-base-peer-group-list { + description + "Grouping for a list of basic BGP peer groups."; + list peer-group { + key "name"; + description + "List of BGP peer groups uniquely identified by a name."; + uses bgp-base-peer-group; + } + } + + grouping bgp-peer-group { + description + "Grouping for BGP peer group."; + leaf name { + type string; + description + "Name of the BGP peer group"; + } + leaf local-address { + type union { + type inet:ip-address; + type if:interface-ref; + } + description + "Sets the local IP address to use for the BGP transport + session. This may be expressed as either an IP + address or a reference to an interface."; + } + uses bgp-base; + uses ac-common:bgp-authentication; + } + + grouping bgp-peer-group-list { + description + "Grouping for a list of BGP peer groups."; + list peer-group { + key "name"; + description + "List of BGP peer groups uniquely identified by a name."; + uses bgp-peer-group; + } + } + + // RIP base parameters + + grouping rip-base { + description + "Configuration specific to RIP routing."; + leaf address-family { + type identityref { + base vpn-common:address-family; + } + description + "Indicates whether IPv4, IPv6, or both address families are + to be activated."; + } + container timers { + description + "Indicates the RIP timers."; + reference + "RFC 2080: RIPng for IPv6 + RFC 2453: RIP Version 2"; + leaf update-interval { + type uint16 { + range "1..32767"; + } + units "seconds"; + description + "Indicates the RIP update time, i.e., the amount of time + for which RIP updates are sent."; + } + leaf invalid-interval { + type uint16 { + range "1..32767"; + } + units "seconds"; + description + "The interval before a route is declared invalid after no + updates are received. This value is at least three times + the value for the 'update-interval' argument."; + } + leaf holddown-interval { + type uint16 { + range "1..32767"; + } + units "seconds"; + description + "Specifies the interval before better routes are + released."; + } + leaf flush-interval { + type uint16 { + range "1..32767"; + } + units "seconds"; + description + "Indicates the RIP flush timer, i.e., the amount of time + that must elapse before a route is removed from the + routing table."; + } + } + leaf default-metric { + type uint8 { + range "0..16"; + } + description + "Sets the default metric."; + } + } + + // Routing profile + + grouping routing-profile { + description + "Defines profiles for routing protocols."; + list routing-protocol { + key "id"; + description + "List of routing protocols used on the AC."; + leaf id { + type string; + description + "Unique identifier for the routing protocol."; + } + leaf type { + type identityref { + base vpn-common:routing-protocol-type; + } + description + "Type of routing protocol."; + } + container bgp { + when "derived-from-or-self(../type, " + + "'vpn-common:bgp-routing')" { + description + "Only applies when the protocol is BGP."; + } + if-feature "vpn-common:rtg-bgp"; + description + "Configuration specific to BGP."; + container peer-groups { + description + "Lists a set of BGP peer groups."; + uses bgp-base-peer-group-list; + } + } + container ospf { + when "derived-from-or-self(../type, " + + "'vpn-common:ospf-routing')" { + description + "Only applies when the protocol is OSPF."; + } + if-feature "vpn-common:rtg-ospf"; + description + "Configuration specific to OSPF."; + uses ac-common:ospf-basic; + leaf max-lsa { + type uint32 { + range "1..4294967294"; + } + description + "Maximum number of allowed Link State Advertisements + (LSAs) that the OSPF instance will accept."; + } + leaf passive { + type boolean; + description + "When set to 'true', enables a passive interface. It is + active when set to 'false'. A passive interface's + prefix will be advertised, but no neighbor adjacencies + will be formed on the interface."; + } + } + container isis { + when "derived-from-or-self(../type, " + + "'vpn-common:isis-routing')" { + description + "Only applies when the protocol is IS-IS."; + } + if-feature "vpn-common:rtg-isis"; + description + "Configuration specific to IS-IS."; + uses ac-common:isis-basic; + leaf level { + type identityref { + base vpn-common:isis-level; + } + description + "Can be 'level-1', 'level-2', or 'level-1-2'."; + reference + "RFC 9181: A Common YANG Data Model for Layer 2 + and Layer 3 VPNs"; + } + leaf metric { + type uint32 { + range "0 .. 16777215"; + } + description + "Metric of the AC. It is used in the routing state + calculation and path selection."; + } + leaf passive { + type boolean; + description + "When set to 'false', the interface is active. In such + mode, the interface sends or receives IS-IS protocol + control packets. + + When set to 'true', the interface is passive. That + is, it suppresses the sending of IS-IS updates through + the specified interface."; + } + } + container rip { + when "derived-from-or-self(../type, " + + "'vpn-common:rip-routing')" { + description + "Only applies when the protocol is RIP."; + } + if-feature "vpn-common:rtg-rip"; + description + "Configuration specific to RIP routing."; + uses rip-base; + } + container vrrp { + when "derived-from-or-self(../type, " + + "'vpn-common:vrrp-routing')" { + description + "Only applies when the protocol is the Virtual Router + Redundancy Protocol (VRRP)."; + } + if-feature "vpn-common:rtg-vrrp"; + description + "Configuration specific to VRRP."; + reference + "RFC 9568: Virtual Router Redundancy Protocol (VRRP) + Version 3 for IPv4 and IPv6"; + leaf address-family { + type identityref { + base vpn-common:address-family; + } + description + "Indicates whether IPv4, IPv6, or both address families + are to be enabled."; + } + leaf ping-reply { + type boolean; + description + "Controls whether the VRRP speaker should reply to ping + requests. Such behavior is enabled, if set to 'true'."; + } + } + } + } + + grouping routing { + description + "Defines routing protocols."; + list routing-protocol { + key "id"; + description + "List of routing protocols used on the AC."; + leaf id { + type string; + description + "Unique identifier for the routing protocol."; + } + leaf type { + type identityref { + base vpn-common:routing-protocol-type; + } + description + "Type of routing protocol."; + } + list routing-profile { + key "routing-profile-ref"; + description + "Routing profiles."; + uses routing-profile-reference; + leaf type { + type identityref { + base vpn-common:ie-type; + } + description + "Import, export, or both."; + } + } + container static { + when "derived-from-or-self(../type, " + + "'vpn-common:static-routing')" { + description + "Only applies when the protocol is static routing."; + } + description + "Configuration specific to static routing."; + container cascaded-lan-prefixes { + description + "LAN prefixes from the customer."; + list ipv4-lan-prefix { + if-feature "vpn-common:ipv4"; + key "lan next-hop"; + description + "List of LAN prefixes for the site."; + uses ac-common:ipv4-static-rtg-entry; + uses bfd-routing; + leaf preference { + type uint32; + description + "Indicates the preference associated with the static + route."; + } + uses ac-common:service-status; + } + list ipv6-lan-prefix { + if-feature "vpn-common:ipv6"; + key "lan next-hop"; + description + "List of LAN prefixes for the site."; + uses ac-common:ipv6-static-rtg-entry; + uses bfd-routing; + leaf preference { + type uint32; + description + "Indicates the preference associated with the static + route."; + } + uses ac-common:service-status; + } + } + } + container bgp { + when "derived-from-or-self(../type, " + + "'vpn-common:bgp-routing')" { + description + "Only applies when the protocol is BGP."; + } + if-feature "vpn-common:rtg-bgp"; + description + "Configuration specific to BGP."; + container peer-groups { + description + "Configuration for BGP peer groups"; + uses bgp-peer-group-list; + } + list neighbor { + key "remote-address"; + description + "List of BGP neighbors."; + leaf remote-address { + type inet:ip-address; + description + "The remote IP address of this entry's BGP peer."; + } + leaf local-address { + type union { + type inet:ip-address; + type if:interface-ref; + } + description + "Sets the local IP address to use for the BGP transport + session. This may be expressed as either an IP + address or a reference to an interface."; + } + leaf peer-group { + type leafref { + path "../../peer-groups/peer-group/name"; + } + description + "The peer group with which this neighbor is + associated."; + } + uses bgp-base; + uses bfd-routing; + uses ac-common:bgp-authentication; + uses ac-common:service-status; + } + } + container ospf { + when "derived-from-or-self(../type, " + + "'vpn-common:ospf-routing')" { + description + "Only applies when the protocol is OSPF."; + } + if-feature "vpn-common:rtg-ospf"; + description + "Configuration specific to OSPF."; + uses ac-common:ospf-basic; + container sham-links { + if-feature "vpn-common:rtg-ospf-sham-link"; + description + "List of sham links."; + reference + "RFC 4577: OSPF as the Provider/Customer Edge Protocol + for BGP/MPLS IP Virtual Private Networks + (VPNs), Section 4.2.7 + RFC 6565: OSPFv3 as a Provider Edge to Customer Edge + (PE-CE) Routing Protocol, Section 5"; + list sham-link { + key "target-site"; + description + "Creates a sham link with another site."; + leaf target-site { + type string; + description + "Target site for the sham link connection. The site + is referred to by its identifier."; + } + leaf metric { + type uint16; + description + "Metric of the sham link. It is used in the routing + state calculation and path selection."; + reference + "RFC 4577: OSPF as the Provider/Customer Edge + Protocol for BGP/MPLS IP Virtual Private + Networks (VPNs), Section 4.2.7.3 + RFC 6565: OSPFv3 as a Provider Edge to Customer Edge + (PE-CE) Routing Protocol, Section 5.2"; + } + } + } + leaf max-lsa { + type uint32 { + range "1..4294967294"; + } + description + "Maximum number of allowed Link State Advertisements + (LSAs) that the OSPF instance will accept."; + } + leaf passive { + type boolean; + description + "When set to 'true', enables a passive interface. It is + active when set to 'false'. A passive interface's + prefix will be advertised, but no neighbor adjacencies + will be formed on the interface."; + } + uses ac-common:ospf-authentication; + uses ac-common:service-status; + } + container isis { + when "derived-from-or-self(../type, " + + "'vpn-common:isis-routing')" { + description + "Only applies when the protocol is IS-IS."; + } + if-feature "vpn-common:rtg-isis"; + description + "Configuration specific to IS-IS."; + uses ac-common:isis-basic; + leaf level { + type identityref { + base vpn-common:isis-level; + } + description + "Can be 'level-1', 'level-2', or 'level-1-2'."; + reference + "RFC 9181: A Common YANG Data Model for Layer 2 and + Layer 3 VPNs"; + } + leaf metric { + type uint32 { + range "0 .. 16777215"; + } + description + "Metric of the AC. It is used in the routing state + calculation and path selection."; + } + leaf passive { + type boolean; + description + "When set to 'false', the interface is active. In such + mode, the interface sends or receives IS-IS protocol + control packets. + + When set to 'true', the interface is passive. That + is, it suppresses the sending of IS-IS updates through + the specified interface."; + } + uses ac-common:isis-authentication; + uses ac-common:service-status; + } + container rip { + when "derived-from-or-self(../type, " + + "'vpn-common:rip-routing')" { + description + "Only applies when the protocol is RIP. + For IPv4, the model assumes that RIP version 2 + is used."; + } + if-feature "vpn-common:rtg-rip"; + description + "Configuration specific to RIP routing."; + uses rip-base; + uses ac-common:rip-authentication; + uses ac-common:service-status; + } + container vrrp { + when "derived-from-or-self(../type, " + + "'vpn-common:vrrp-routing')" { + description + "Only applies when the protocol is VRRP."; + } + if-feature "vpn-common:rtg-vrrp"; + description + "Configuration specific to VRRP."; + reference + "RFC 9568: Virtual Router Redundancy Protocol (VRRP) + Version 3 for IPv4 and IPv6"; + leaf address-family { + type identityref { + base vpn-common:address-family; + } + description + "Indicates whether IPv4, IPv6, or both address families + are to be enabled."; + } + leaf vrrp-group { + type uint8 { + range "1..255"; + } + description + "Includes the VRRP group identifier."; + } + leaf backup-peer { + type inet:ip-address; + description + "Indicates the IP address of the peer."; + } + leaf-list virtual-ip-address { + type inet:ip-address; + description + "Virtual IP addresses for a single VRRP group."; + reference + "RFC 9568: Virtual Router Redundancy Protocol (VRRP) + Version 3 for IPv4 and IPv6, Sections 1.2 + and 1.3"; + } + leaf priority { + type uint8 { + range "1..254"; + } + description + "Sets the local priority of the VRRP speaker."; + } + leaf ping-reply { + type boolean; + description + "Controls whether the VRRP speaker should reply to ping + requests."; + } + uses ac-common:service-status; + } + } + } + + // OAM + + grouping bfd { + description + "Grouping for BFD."; + leaf session-type { + type identityref { + base vpn-common:bfd-session-type; + } + description + "Specifies the BFD session type."; + } + leaf desired-min-tx-interval { + type uint32; + units "microseconds"; + description + "The minimum interval between transmissions of BFD Control + packets, as desired by the operator."; + reference + "RFC 5880: Bidirectional Forwarding Detection (BFD), + Section 6.8.7"; + } + leaf required-min-rx-interval { + type uint32; + units "microseconds"; + description + "The minimum interval between received BFD Control packets + that the PE should support."; + reference + "RFC 5880: Bidirectional Forwarding Detection (BFD), + Section 6.8.7"; + } + leaf local-multiplier { + type uint8 { + range "1..255"; + } + description + "Specifies the detection multiplier that is transmitted to a + BFD peer. + + The detection interval for the receiving BFD peer is + calculated by multiplying the value of the negotiated + transmission interval by the received detection multiplier + value."; + reference + "RFC 5880: Bidirectional Forwarding Detection (BFD), + Section 6.8.7"; + } + leaf holdtime { + type uint32; + units "milliseconds"; + description + "Expected BFD holdtime. + + The customer may impose some fixed values for the holdtime + period if the provider allows the customer to use this + function."; + reference + "RFC 5880: Bidirectional Forwarding Detection (BFD), + Section 6.8.18"; + } + } + + grouping bfd-routing { + description + "Defines a basic BFD grouping for routing configuration."; + container bfd { + if-feature "vpn-common:bfd"; + description + "BFD control for this neighbor."; + leaf enabled { + type boolean; + description + "Enables BFD if set to 'true'. BFD is disabled if set to + 'false'."; + } + uses failure-detection-profile-reference; + } + } + + grouping oam { + description + "Defines the Operations, Administration, and Maintenance + (OAM) mechanisms used."; + container bfd { + if-feature "vpn-common:bfd"; + description + "Container for BFD."; + list session { + key "dest-addr"; + description + "List of IP sessions."; + leaf dest-addr { + type inet:ip-address; + description + "IP address of the peer."; + } + leaf source-address { + type union { + type inet:ip-address; + type if:interface-ref; + } + description + "Sets the local IP address to use for the BFD session. + This may be expressed as either an IP address or + a reference to an interface."; + } + uses failure-detection-profile-reference; + uses bfd; + container authentication { + presence "Enables BFD authentication"; + description + "Parameters for BFD authentication."; + leaf key-chain { + type key-chain:key-chain-ref; + description + "Name of the key chain."; + } + leaf meticulous { + type boolean; + description + "Enables meticulous mode, if set to 'true'."; + reference + "RFC 5880: Bidirectional Forwarding Detection (BFD), + Section 6.7"; + } + } + uses ac-common:service-status; + } + } + } + + // Security + + grouping security { + description + "Security parameters for an AC."; + container encryption { + if-feature "vpn-common:encryption"; + description + "Container for AC encryption."; + leaf enabled { + type boolean; + description + "If set to 'true', traffic encryption on the connection is + required. Otherwise, it is disabled."; + } + leaf layer { + when "../enabled = 'true'" { + description + "Included only when encryption is enabled."; + } + type enumeration { + enum layer2 { + description + "Encryption occurs at Layer 2."; + } + enum layer3 { + description + "Encryption occurs at Layer 3. For example, IPsec + may be used when a customer requests Layer 3 + encryption."; + } + } + description + "Indicates the layer on which encryption is applied."; + } + } + container encryption-profile { + when "../encryption/enabled = 'true'" { + description + "Indicates the layer on which encryption is enabled."; + } + description + "Container for the encryption profile."; + choice profile { + description + "Choice for the encryption profile."; + case provider-profile { + uses encryption-profile-reference; + } + case customer-profile { + leaf customer-key-chain { + type key-chain:key-chain-ref; + description + "Customer-supplied key chain."; + } + } + } + } + } + + // AC profile + + grouping ac-profile { + description + "Grouping for AC profiles."; + container routing-protocols { + description + "Defines routing protocols."; + uses routing-profile; + } + container oam { + description + "Defines the OAM mechanisms used for the AC profile."; + container bfd { + if-feature "vpn-common:bfd"; + description + "Container for BFD."; + uses bfd; + } + } + } + + // Parent and Child ACs + + grouping ac-hierarchy { + description + "Container for Parent and Child AC references."; + container parent-ref { + description + "Specifies the Parent AC that is inherited by an AC. + Parent ACs are used, e.g., in contexts where multiple + CEs are terminating the same AC, but some specific + information is required for each peer SAP."; + uses ac-ntw:attachment-circuit-reference; + } + container child-ref { + config false; + description + "Specifies a Child AC that relies upon a Parent AC."; + uses ac-ntw:attachment-circuit-references; + } + } + + // AC network provisioning + + grouping ac { + description + "Grouping for ACs."; + leaf description { + type string; + description + "Associates a description with an AC."; + } + container l2-connection { + if-feature "ac-common:layer2-ac"; + description + "Defines Layer 2 protocols and parameters that are required + to enable AC connectivity."; + uses l2-connection-if-ref; + } + container ip-connection { + if-feature "ac-common:layer3-ac"; + description + "Defines IP connection parameters."; + uses ip-connection; + } + container routing-protocols { + description + "Defines routing protocols."; + uses routing; + } + container oam { + description + "Defines the OAM mechanisms used for the AC."; + uses oam; + } + container security { + description + "AC-specific security parameters."; + uses security; + } + container service { + description + "AC-specific bandwidth parameters."; + leaf mtu { + type uint32; + units "bytes"; + description + "Layer 2 MTU."; + } + uses ac-svc:bandwidth; + container qos { + if-feature "vpn-common:qos"; + description + "QoS configuration."; + container qos-profiles { + description + "QoS profile configuration."; + list qos-profile { + key "qos-profile-ref"; + description + "Points to a QoS profile."; + uses qos-profile-reference; + leaf direction { + type identityref { + base vpn-common:qos-profile-direction; + } + description + "The direction to which the QoS profile is applied."; + } + } + } + } + container access-control-list { + description + "Container for the Access Control List (ACL)."; + container acl-profiles { + description + "ACL profile configuration."; + list acl-profile { + key "forwarding-profile-ref"; + description + "Points to an ACL profile."; + uses forwarding-profile-reference; + } + } + } + } + } + + augment "/nw:networks/nw:network" { + description + "Add a list of profiles."; + container specific-provisioning-profiles { + description + "Contains a set of valid profiles to reference in the AC + activation."; + uses ac-common:ac-profile-cfg; + } + list ac-profile { + key "name"; + description + "Specifies a list of AC profiles."; + leaf name { + type string; + description + "Name of the AC."; + } + uses ac-ntw:ac-profile; + } + } + + augment "/nw:networks/nw:network/nw:node" { + when '../nw:network-types/sap:sap-network' { + description + "Augmentation parameters apply only for SAP networks."; + } + description + "Augments nodes with AC provisioning details."; + list ac { + key "name"; + description + "List of ACs."; + leaf name { + type string; + description + "A name that identifies the AC locally."; + } + leaf svc-ref { + type ac-svc:attachment-circuit-reference; + description + "A reference to the AC as exposed at the service level."; + } + list profile { + key "ac-profile-ref"; + description + "List of AC profiles."; + uses ac-profile-reference; + } + uses ac-hierarchy; + leaf-list peer-sap-id { + type string; + description + "One or more peer SAPs can be indicated."; + } + uses ac-common:redundancy-group; + uses ac-common:service-status; + uses ac-ntw:ac; + } + } + + augment "/nw:networks/nw:network/nw:node" + + "/sap:service/sap:sap" { + when '../../../nw:network-types/sap:sap-network' { + description + "Augmentation parameters apply only for SAP networks."; + } + description + "Augments SAPs with AC provisioning details."; + list ac { + key "ac-ref"; + description + "Specifies the ACs that are terminated by the SAP."; + uses ac-ntw:attachment-circuit-reference; + } + } +} diff --git a/standard/ietf/RFC/ietf-ac-svc.yang b/standard/ietf/RFC/ietf-ac-svc.yang new file mode 120000 index 000000000..32516d685 --- /dev/null +++ b/standard/ietf/RFC/ietf-ac-svc.yang @@ -0,0 +1 @@ +ietf-ac-svc@2025-09-29.yang \ No newline at end of file diff --git a/standard/ietf/RFC/ietf-ac-svc@2025-09-29.yang b/standard/ietf/RFC/ietf-ac-svc@2025-09-29.yang new file mode 100644 index 000000000..13364ab58 --- /dev/null +++ b/standard/ietf/RFC/ietf-ac-svc@2025-09-29.yang @@ -0,0 +1,1246 @@ +module ietf-ac-svc { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-ac-svc"; + prefix ac-svc; + + import ietf-ac-common { + prefix ac-common; + reference + "RFC 9833: A Common YANG Data Model for Attachment Circuits"; + } + import ietf-vpn-common { + prefix vpn-common; + reference + "RFC 9181: A Common YANG Data Model for Layer 2 and Layer 3 + VPNs"; + } + import ietf-netconf-acm { + prefix nacm; + reference + "RFC 8341: Network Configuration Access Control Model"; + } + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types, Section 4"; + } + import ietf-key-chain { + prefix key-chain; + reference + "RFC 8177: YANG Data Model for Key Chains"; + } + + organization + "IETF OPSAWG (Operations and Management Area Working Group)"; + contact + "WG Web: + WG List: + + Editor: Mohamed Boucadair + + Editor: Richard Roberts + + Author: Oscar Gonzalez de Dios + + Author: Samier Barguil + + Author: Bo Wu + "; + description + "This YANG module defines a YANG module for exposing + Attachment Circuits as a Service (ACaaS). + + 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 9834; see the + RFC itself for full legal notices."; + + revision 2025-09-29 { + description + "Initial revision."; + reference + "RFC 9834: YANG Data Models for Bearers and Attachment + Circuits as a Service (ACaaS)"; + } + + /* A set of typedefs to ease referencing cross-modules */ + + typedef attachment-circuit-reference { + type leafref { + path "/ac-svc:attachment-circuits/ac-svc:ac/ac-svc:name"; + } + description + "Defines a reference to an AC that can be used by other + modules."; + } + + typedef ac-group-reference { + type leafref { + path "/ac-svc:attachment-circuits/ac-svc:ac-group-profile" + + "/ac-svc:name"; + } + description + "Defines a reference to an AC profile."; + } + + typedef encryption-profile-reference { + type leafref { + path "/ac-svc:specific-provisioning-profiles" + + "/ac-svc:valid-provider-identifiers" + + "/ac-svc:encryption-profile-identifier/ac-svc:id"; + } + description + "Defines a reference to an encryption profile."; + } + + typedef qos-profile-reference { + type leafref { + path "/ac-svc:specific-provisioning-profiles" + + "/ac-svc:valid-provider-identifiers" + + "/ac-svc:qos-profile-identifier/ac-svc:id"; + } + description + "Defines a reference to a QoS profile."; + } + + typedef failure-detection-profile-reference { + type leafref { + path "/ac-svc:specific-provisioning-profiles" + + "/ac-svc:valid-provider-identifiers" + + "/ac-svc:failure-detection-profile-identifier" + + "/ac-svc:id"; + } + description + "Defines a reference to a BFD profile."; + } + + typedef forwarding-profile-reference { + type leafref { + path "/ac-svc:specific-provisioning-profiles" + + "/ac-svc:valid-provider-identifiers" + + "/ac-svc:forwarding-profile-identifier/ac-svc:id"; + } + description + "Defines a reference to a forwarding profile."; + } + + typedef routing-profile-reference { + type leafref { + path "/ac-svc:specific-provisioning-profiles" + + "/ac-svc:valid-provider-identifiers" + + "/ac-svc:routing-profile-identifier/ac-svc:id"; + } + description + "Defines a reference to a routing profile."; + } + + typedef service-profile-reference { + type leafref { + path "/ac-svc:service-provisioning-profiles" + + "/ac-svc:service-profile-identifier" + + "/ac-svc:id"; + } + description + "Defines a reference to a service profile."; + } + + /******************** Reusable groupings ********************/ + // Basic Layer 2 connection + + grouping l2-connection-basic { + description + "Defines Layer 2 protocols and parameters that can be + factorized when provisioning Layer 2 connectivity + among multiple ACs."; + container encapsulation { + description + "Container for Layer 2 encapsulation."; + leaf type { + type identityref { + base vpn-common:encapsulation-type; + } + description + "Encapsulation type."; + } + container dot1q { + when "derived-from-or-self(../type, 'vpn-common:dot1q')" { + description + "Only applies when the type of the tagged interface + is 'dot1q'."; + } + description + "Tagged interface."; + uses ac-common:dot1q; + } + container qinq { + when "derived-from-or-self(../type, 'vpn-common:qinq')" { + description + "Only applies when the type of the tagged interface + is 'qinq'."; + } + description + "Includes QinQ parameters."; + uses ac-common:qinq; + } + } + } + + // Full Layer 2 connection + + grouping l2-connection { + description + "Defines Layer 2 protocols and parameters that are used to + enable AC connectivity."; + container encapsulation { + description + "Container for Layer 2 encapsulation."; + leaf type { + type identityref { + base vpn-common:encapsulation-type; + } + description + "Indicates the encapsulation type."; + } + container dot1q { + when "derived-from-or-self(../type, 'vpn-common:dot1q')" { + description + "Only applies when the type of the tagged interface + is 'dot1q'."; + } + description + "Tagged interface."; + uses ac-common:dot1q; + } + container priority-tagged { + when "derived-from-or-self(../type, " + + "'vpn-common:priority-tagged')" { + description + "Only applies when the type of the tagged interface is + 'priority-tagged'."; + } + description + "Priority-tagged interface."; + uses ac-common:priority-tagged; + } + container qinq { + when "derived-from-or-self(../type, 'vpn-common:qinq')" { + description + "Only applies when the type of the tagged interface + is 'qinq'."; + } + description + "Includes QinQ parameters."; + uses ac-common:qinq; + } + } + choice l2-service { + description + "The Layer 2 connectivity service can be provided by + indicating a pointer to an L2VPN or by specifying a + Layer 2 tunnel service."; + container l2-tunnel-service { + description + "Defines a Layer 2 tunnel termination. + It is only applicable when a tunnel is required."; + uses ac-common:l2-tunnel-service; + } + case l2vpn { + leaf l2vpn-id { + type vpn-common:vpn-id; + description + "Indicates the L2VPN service associated with an + Integrated Routing and Bridging (IRB) interface."; + } + } + } + leaf bearer-reference { + if-feature "ac-common:server-assigned-reference"; + type string; + description + "This is an internal reference for the service provider + to identify the bearer associated with this AC."; + } + } + + // Basic IP connection + + grouping ip-connection-basic { + description + "Defines basic IP connection parameters."; + container ipv4 { + if-feature "vpn-common:ipv4"; + description + "IPv4-specific parameters."; + uses ac-common:ipv4-connection-basic; + } + container ipv6 { + if-feature "vpn-common:ipv6"; + description + "IPv6-specific parameters."; + uses ac-common:ipv6-connection-basic; + } + } + + // Full IP connection + + grouping ip-connection { + description + "Defines IP connection parameters."; + container ipv4 { + if-feature "vpn-common:ipv4"; + description + "IPv4-specific parameters."; + uses ac-common:ipv4-connection { + augment "ac-svc:allocation-type/static-addresses/address" { + leaf failure-detection-profile { + if-feature "vpn-common:bfd"; + type failure-detection-profile-reference; + description + "Points to a failure detection profile."; + } + description + "Adds a failure detection profile."; + } + } + } + container ipv6 { + if-feature "vpn-common:ipv6"; + description + "IPv6-specific parameters."; + uses ac-common:ipv6-connection { + augment "ac-svc:allocation-type/static-addresses/address" { + leaf failure-detection-profile { + if-feature "vpn-common:bfd"; + type failure-detection-profile-reference; + description + "Points to a failure detection profile."; + } + description + "Adds a failure detection profile."; + } + } + } + choice l3-service { + description + "The Layer 3 connectivity service can be provided by + specifying a Layer 3 tunnel service."; + container l3-tunnel-service { + description + "Defines a Layer 3 tunnel termination. + It is only applicable when a tunnel is required."; + leaf type { + type identityref { + base ac-common:l3-tunnel-type; + } + description + "Selects the tunnel termination type for an AC."; + } + } + } + } + + // Routing protocol list + + grouping routing-protocol-list { + description + "List of routing protocols used on the AC."; + leaf type { + type identityref { + base vpn-common:routing-protocol-type; + } + description + "Type of routing protocol."; + } + list routing-profiles { + key "id"; + description + "Routing profiles."; + leaf id { + type routing-profile-reference; + description + "Reference to the routing profile to be used."; + } + leaf type { + type identityref { + base vpn-common:ie-type; + } + description + "Import, export, or both."; + } + } + } + + // Static routing with BFD + + grouping ipv4-static-rtg-with-bfd { + description + "Configuration specific to IPv4 static routing with + failure protection (e.g., BFD)."; + list ipv4-lan-prefix { + if-feature "vpn-common:ipv4"; + key "lan next-hop"; + description + "List of LAN prefixes for the site."; + uses ac-common:ipv4-static-rtg-entry; + leaf failure-detection-profile { + if-feature "vpn-common:bfd"; + type failure-detection-profile-reference; + description + "Points to a failure detection profile."; + } + uses ac-common:service-status; + } + } + + grouping ipv6-static-rtg-with-bfd { + description + "Configuration specific to IPv6 static routing with + failure protection (e.g., BFD)."; + list ipv6-lan-prefix { + if-feature "vpn-common:ipv6"; + key "lan next-hop"; + description + "List of LAN prefixes for the site."; + uses ac-common:ipv6-static-rtg-entry; + leaf failure-detection-profile { + if-feature "vpn-common:bfd"; + type failure-detection-profile-reference; + description + "Points to a failure detection profile."; + } + uses ac-common:service-status; + } + } + + // BGP Service + + grouping bgp-neighbor-without-name { + description + "A grouping with generic parameters for configuring a BGP + neighbor."; + leaf remote-address { + type inet:ip-address; + description + "The remote IP address of this entry's BGP peer. This is + a customer IP address. + + If this leaf is not present, this means that the primary + customer IP address is used as the remote IP address."; + } + leaf local-address { + type inet:ip-address; + description + "The provider's IP address that will be used to establish + the BGP session."; + } + uses ac-common:bgp-peer-group-without-name; + container bgp-max-prefix { + description + "A container for the maximum number of BGP prefixes + allowed in the BGP session."; + leaf max-prefix { + type uint32; + description + "Indicates the maximum number of BGP prefixes allowed + in the BGP session. + + It allows control of how many prefixes can be received + from a neighbor."; + reference + "RFC 4271: A Border Gateway Protocol 4 (BGP-4), + Section 8.2.2"; + } + } + uses ac-common:bgp-authentication; + uses ac-common:op-instructions; + uses ac-common:service-status; + } + + grouping bgp-neighbor-with-name { + description + "A grouping with generic parameters for configuring a BGP + neighbor with an identifier."; + leaf id { + type string; + description + "An identifier that uniquely identifies a neighbor."; + } + uses ac-svc:bgp-neighbor-without-name; + } + + grouping bgp-neighbor-with-server-reference { + description + "A grouping with generic parameters for configuring a BGP + neighbor with a reference generated by the provider."; + leaf server-reference { + if-feature "ac-common:server-assigned-reference"; + type string; + config false; + description + "This is an internal reference for the service provider + to identify the BGP session."; + } + uses ac-svc:bgp-neighbor-without-name; + } + + grouping bgp-neighbor-with-name-server-reference { + description + "A grouping with generic parameters for configuring a BGP + neighbor with an identifier and a reference generated by + the provider."; + leaf id { + type string; + description + "An identifier that uniquely identifiers a neighbor."; + } + uses ac-svc:bgp-neighbor-with-server-reference; + } + + grouping bgp-svc { + description + "Configuration specific to BGP."; + container peer-groups { + description + "Configuration for BGP peer-groups"; + list peer-group { + key "name"; + description + "List of BGP peer-groups configured on the local + system -- uniquely identified by peer-group name."; + uses ac-common:bgp-peer-group-with-name; + leaf local-address { + type inet:ip-address; + description + "The provider's local IP address that will be used to + establish the BGP session."; + } + container bgp-max-prefix { + description + "A container for the maximum number of BGP prefixes + allowed in the BGP session."; + leaf max-prefix { + type uint32; + description + "Indicates the maximum number of BGP prefixes allowed + in the BGP session. + + It allows control of how many prefixes can be received + from a neighbor."; + reference + "RFC 4271: A Border Gateway Protocol 4 (BGP-4), + Section 8.2.2"; + } + } + uses ac-common:bgp-authentication; + } + } + list neighbor { + key "id"; + description + "List of BGP neighbors."; + uses ac-svc:bgp-neighbor-with-name-server-reference; + leaf peer-group { + type leafref { + path "../../peer-groups/peer-group/name"; + } + description + "The peer-group with which this neighbor is associated."; + } + leaf failure-detection-profile { + if-feature "vpn-common:bfd"; + type failure-detection-profile-reference; + description + "Points to a failure detection profile."; + } + } + } + + // OSPF Service + + grouping ospf-svc { + description + "Service configuration specific to OSPF."; + uses ac-common:ospf-basic; + uses ac-common:ospf-authentication; + uses ac-common:service-status; + } + + // IS-IS Service + + grouping isis-svc { + description + "Service configuration specific to IS-IS."; + uses ac-common:isis-basic; + uses ac-common:isis-authentication; + uses ac-common:service-status; + } + + // RIP Service + + grouping rip-svc { + description + "Service configuration specific to RIP routing."; + leaf address-family { + type identityref { + base vpn-common:address-family; + } + description + "Indicates whether IPv4, IPv6, or both address families + are to be activated."; + } + uses ac-common:rip-authentication; + uses ac-common:service-status; + } + + // VRRP Service + + grouping vrrp-svc { + description + "Service configuration specific to VRRP."; + reference + "RFC 9568: Virtual Router Redundancy Protocol (VRRP) + Version 3 for IPv4 and IPv6"; + leaf address-family { + type identityref { + base vpn-common:address-family; + } + description + "Indicates whether IPv4, IPv6, or both + address families are to be enabled."; + } + uses ac-common:service-status; + } + + // Basic routing parameters + + grouping routing-basic { + description + "Defines basic parameters for routing protocols."; + list routing-protocol { + key "id"; + description + "List of routing protocols used on the AC."; + leaf id { + type string; + description + "Unique identifier for the routing protocol."; + } + uses routing-protocol-list; + container bgp { + when + "derived-from-or-self(../type, 'vpn-common:bgp-routing')" { + description + "Only applies when the protocol is BGP."; + } + if-feature "vpn-common:rtg-bgp"; + description + "Configuration specific to BGP."; + container peer-groups { + description + "Configuration for BGP peer-groups"; + list peer-group { + key "name"; + description + "List of BGP peer-groups configured on the local + system -- uniquely identified by peer-group + name."; + uses ac-common:bgp-peer-group-with-name; + } + } + } + container ospf { + when "derived-from-or-self(../type, " + + "'vpn-common:ospf-routing')" { + description + "Only applies when the protocol is OSPF."; + } + if-feature "vpn-common:rtg-ospf"; + description + "Configuration specific to OSPF."; + uses ac-common:ospf-basic; + } + container isis { + when "derived-from-or-self(../type, " + + "'vpn-common:isis-routing')" { + description + "Only applies when the protocol is IS-IS."; + } + if-feature "vpn-common:rtg-isis"; + description + "Configuration specific to IS-IS."; + uses ac-common:isis-basic; + } + container rip { + when "derived-from-or-self(../type, " + + "'vpn-common:rip-routing')" { + description + "Only applies when the protocol is RIP. + For IPv4, the model assumes that RIP version 2 is + used."; + } + if-feature "vpn-common:rtg-rip"; + description + "Configuration specific to RIP routing."; + leaf address-family { + type identityref { + base vpn-common:address-family; + } + description + "Indicates whether IPv4, IPv6, or both address families + are to be activated."; + } + } + container vrrp { + when "derived-from-or-self(../type, " + + "'vpn-common:vrrp-routing')" { + description + "Only applies when the protocol is the Virtual Router + Redundancy Protocol (VRRP)."; + } + if-feature "vpn-common:rtg-vrrp"; + description + "Configuration specific to VRRP."; + leaf address-family { + type identityref { + base vpn-common:address-family; + } + description + "Indicates whether IPv4, IPv6, or both address families + are to be enabled."; + } + } + } + } + + // Full routing parameters + + grouping routing { + description + "Defines routing protocols."; + list routing-protocol { + key "id"; + description + "List of routing protocols used on the AC."; + leaf id { + type string; + description + "Unique identifier for the routing protocol."; + } + uses routing-protocol-list; + container static { + when "derived-from-or-self(../type, " + + "'vpn-common:static-routing')" { + description + "Only applies when the protocol is the static + routing protocol."; + } + description + "Configuration specific to static routing."; + container cascaded-lan-prefixes { + description + "LAN prefixes from the customer."; + uses ipv4-static-rtg-with-bfd; + uses ipv6-static-rtg-with-bfd; + } + } + container bgp { + when "derived-from-or-self(../type, " + + "'vpn-common:bgp-routing')" { + description + "Only applies when the protocol is BGP."; + } + if-feature "vpn-common:rtg-bgp"; + description + "Configuration specific to BGP."; + uses bgp-svc; + } + container ospf { + when "derived-from-or-self(../type, " + + "'vpn-common:ospf-routing')" { + description + "Only applies when the protocol is OSPF."; + } + if-feature "vpn-common:rtg-ospf"; + description + "Configuration specific to OSPF."; + uses ospf-svc; + } + container isis { + when "derived-from-or-self(../type, " + + "'vpn-common:isis-routing')" { + description + "Only applies when the protocol is IS-IS."; + } + if-feature "vpn-common:rtg-isis"; + description + "Configuration specific to IS-IS."; + uses isis-svc; + } + container rip { + when "derived-from-or-self(../type, " + + "'vpn-common:rip-routing')" { + description + "Only applies when the protocol is RIP. + For IPv4, the model assumes that RIP version 2 is + used."; + } + if-feature "vpn-common:rtg-rip"; + description + "Configuration specific to RIP routing."; + uses rip-svc; + } + container vrrp { + when "derived-from-or-self(../type, " + + "'vpn-common:vrrp-routing')" { + description + "Only applies when the protocol is the Virtual Router + Redundancy Protocol (VRRP)."; + } + if-feature "vpn-common:rtg-vrrp"; + description + "Configuration specific to VRRP."; + uses vrrp-svc; + } + } + } + + // Encryption choice + + grouping encryption-choice { + description + "Container for the encryption profile."; + choice profile { + description + "Choice for the encryption profile."; + case provider-profile { + leaf provider-profile { + type encryption-profile-reference; + description + "Reference to a provider encryption profile."; + } + } + case customer-profile { + leaf customer-key-chain { + type key-chain:key-chain-ref; + description + "Customer-supplied key chain."; + } + } + } + } + + // Basic security parameters + + grouping ac-security-basic { + description + "AC-specific security parameters."; + container encryption { + if-feature "vpn-common:encryption"; + description + "Container for AC security encryption."; + leaf enabled { + type boolean; + description + "If set to 'true', traffic encryption on the connection + is required. Otherwise, it is disabled."; + } + leaf layer { + when "../enabled = 'true'" { + description + "Included only when encryption is enabled."; + } + type enumeration { + enum layer2 { + description + "Encryption occurs at Layer 2."; + } + enum layer3 { + description + "Encryption occurs at Layer 3. + For example, IPsec may be used when a customer + requests Layer 3 encryption."; + } + } + description + "Indicates the layer on which encryption is applied."; + } + } + container encryption-profile { + when "../encryption/enabled = 'true'" { + description + "Indicates the layer on which encryption is enabled."; + } + description + "Container for the encryption profile."; + uses encryption-choice; + } + } + + // Bandwidth parameters + + grouping bandwidth { + description + "Container for bandwidth."; + container svc-pe-to-ce-bandwidth { + if-feature "vpn-common:inbound-bw"; + description + "From the customer site's perspective, the inbound + bandwidth of the AC or download bandwidth from the + service provider to the site."; + uses ac-common:bandwidth-per-type; + } + container svc-ce-to-pe-bandwidth { + if-feature "vpn-common:outbound-bw"; + description + "From the customer site's perspective, the outbound + bandwidth of the AC or upload bandwidth from + the CE to the PE."; + uses ac-common:bandwidth-per-type; + } + } + + // Basic AC parameters + + grouping ac-basic { + description + "Grouping for basic parameters for an AC."; + leaf name { + type string; + description + "A name that uniquely identifies the AC."; + } + container l2-connection { + if-feature "ac-common:layer2-ac"; + description + "Defines Layer 2 protocols and parameters that are required + to enable AC connectivity."; + uses l2-connection-basic; + } + container ip-connection { + if-feature "ac-common:layer3-ac"; + description + "Defines IP connection parameters."; + uses ip-connection-basic; + } + container routing-protocols { + description + "Defines routing protocols."; + uses routing-basic; + } + container oam { + description + "Defines the Operations, Administration, and Maintenance + (OAM) mechanisms used."; + container bfd { + if-feature "vpn-common:bfd"; + description + "Container for BFD."; + uses ac-common:bfd; + } + } + container security { + description + "AC-specific security parameters."; + uses ac-security-basic; + } + container service { + description + "AC-specific bandwidth parameters."; + leaf mtu { + type uint32; + units "bytes"; + description + "Layer 2 MTU."; + } + uses bandwidth; + } + } + + // Full AC parameters + + grouping ac { + description + "Grouping for an AC."; + leaf name { + type string; + description + "A name of the AC. Data models that need to reference + an AC should use 'attachment-circuit-reference'."; + } + leaf-list service-profile { + type service-profile-reference; + description + "A reference to a service profile."; + } + container l2-connection { + if-feature "ac-common:layer2-ac"; + description + "Defines Layer 2 protocols and parameters that are required + to enable AC connectivity."; + uses l2-connection; + } + container ip-connection { + if-feature "ac-common:layer3-ac"; + description + "Defines IP connection parameters."; + uses ip-connection; + } + container routing-protocols { + description + "Defines routing protocols."; + uses routing; + } + container oam { + description + "Defines the OAM mechanisms used."; + container bfd { + if-feature "vpn-common:bfd"; + description + "Container for BFD."; + list session { + key "id"; + description + "List of BFD sessions."; + leaf id { + type string; + description + "A unique identifier for the BFD session."; + } + leaf local-address { + type inet:ip-address; + description + "Provider's IP address of the BFD session."; + } + leaf remote-address { + type inet:ip-address; + description + "Customer's IP address of the BFD session."; + } + leaf profile { + type failure-detection-profile-reference; + description + "Points to a BFD profile."; + } + uses ac-common:bfd; + uses ac-common:service-status; + } + } + } + container security { + description + "AC-specific security parameters."; + uses ac-security-basic; + } + container service { + description + "AC-specific bandwidth parameters."; + leaf mtu { + type uint32; + units "bytes"; + description + "Layer 2 MTU."; + } + uses bandwidth; + container qos { + if-feature "vpn-common:qos"; + description + "QoS configuration."; + container qos-profiles { + description + "QoS profile configuration."; + list qos-profile { + key "profile"; + description + "Points to a QoS profile."; + leaf profile { + type qos-profile-reference; + description + "QoS profile to be used."; + } + leaf direction { + type identityref { + base vpn-common:qos-profile-direction; + } + description + "The direction to which the QoS profile is applied."; + } + } + } + } + container access-control-list { + description + "Container for the Access Control List (ACL)."; + container acl-profiles { + description + "ACL profile configuration."; + list acl-profile { + key "profile"; + description + "Points to an ACL profile."; + leaf profile { + type forwarding-profile-reference; + description + "Forwarding profile to be used."; + } + } + } + } + } + } + + // Parent and Child ACs + + grouping ac-hierarchy { + description + "Container for parent and Child AC references."; + leaf-list parent-ref { + type ac-svc:attachment-circuit-reference; + description + "Specifies a Parent AC that is inherited by an AC. + In contexts where dynamic termination points are + bound to the same AC, a Parent AC with stable + information is created with a set of Child ACs + to track dynamic AC information."; + } + leaf-list child-ref { + type ac-svc:attachment-circuit-reference; + config false; + description + "Specifies a Child AC that relies upon a Parent AC."; + } + } + + /******************** Main AC containers ********************/ + + container specific-provisioning-profiles { + description + "Contains a set of valid profiles to reference for an AC."; + uses ac-common:ac-profile-cfg; + } + container service-provisioning-profiles { + description + "Contains a set of valid profiles to reference for an AC."; + list service-profile-identifier { + key "id"; + description + "List of generic service profile identifiers."; + leaf id { + type string; + description + "Identification of the service profile to be used. + The profile only has significance within the service + provider's administrative domain."; + } + } + nacm:default-deny-write; + } + container attachment-circuits { + description + "Main container for the ACs. + The timing constraints indicated at the 'ac' level take + precedence over the values indicated at the + 'attachment-circuits' level."; + list ac-group-profile { + key "name"; + description + "Maintains a list of profiles that are shared among + a set of ACs."; + uses ac; + } + container placement-constraints { + description + "Diversity constraint type."; + uses vpn-common:placement-constraints; + } + leaf customer-name { + type string; + description + "Indicates the name of the customer that requested these + ACs."; + } + uses ac-common:op-instructions; + list ac { + key "name"; + description + "Provisioning of an AC."; + leaf customer-name { + type string; + description + "Indicates the name of the customer that requested this + AC."; + } + leaf description { + type string; + description + "Associates a description with an AC."; + } + leaf test-only { + type empty; + description + "When present, this indicates that this is a feasibility + check request. No resources are committed for such AC + requests."; + } + uses ac-common:op-instructions; + leaf role { + type identityref { + base ac-common:role; + } + description + "Indicates whether this AC is used as UNI, NNI, etc."; + } + leaf-list peer-sap-id { + type string; + description + "One or more peer SAPs can be indicated."; + } + leaf-list group-profile-ref { + type ac-group-reference; + description + "A reference to an AC profile."; + } + uses ac-hierarchy; + uses ac-common:redundancy-group; + list service-ref { + key "service-type service-id"; + config false; + description + "Reports the set of services that are bound to the AC."; + leaf service-type { + type identityref { + base vpn-common:service-type; + } + description + "Indicates the service type (e.g., L3VPN or RFC 9543 + Network Slice Service)."; + reference + "RFC 9408: A YANG Network Data Model for Service + Attachment Points (SAPs), Section 5"; + } + leaf service-id { + type string; + description + "Indicates an identifier of a service instance + of a given type that uses the AC."; + } + } + leaf server-reference { + if-feature "ac-common:server-assigned-reference"; + type string; + config false; + description + "Reports an internal reference for the service provider + to identify the AC."; + } + uses ac; + } + } +} diff --git a/standard/ietf/RFC/ietf-acl-enh.yang b/standard/ietf/RFC/ietf-acl-enh.yang new file mode 120000 index 000000000..ebf727732 --- /dev/null +++ b/standard/ietf/RFC/ietf-acl-enh.yang @@ -0,0 +1 @@ +ietf-acl-enh@2025-12-22.yang \ No newline at end of file diff --git a/standard/ietf/RFC/ietf-acl-enh@2025-12-22.yang b/standard/ietf/RFC/ietf-acl-enh@2025-12-22.yang new file mode 100644 index 000000000..93b5f4141 --- /dev/null +++ b/standard/ietf/RFC/ietf-acl-enh@2025-12-22.yang @@ -0,0 +1,1241 @@ +module ietf-acl-enh { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-acl-enh"; + prefix acl-enh; + + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types"; + } + import ietf-netconf-acm { + prefix nacm; + reference + "RFC 8341: Network Configuration Access Control Model"; + } + import ietf-access-control-list { + prefix acl; + reference + "RFC 8519: YANG Data Model for Network Access + Control Lists (ACLs), Section 4.1"; + } + import ietf-packet-fields { + prefix packet-fields; + reference + "RFC 8519: YANG Data Model for Network Access + Control Lists (ACLs), Section 4.2"; + } + import ietf-routing-types { + prefix rt-types; + reference + "RFC 8294: Common YANG Data Types for the Routing Area"; + } + import iana-icmpv4-types { + prefix iana-icmpv4-types; + reference + "RFC 9899: Extensions to the YANG Data Model for Access + Control Lists (ACLs)"; + } + import iana-icmpv6-types { + prefix iana-icmpv6-types; + reference + "RFC 9899: Extensions to the YANG Data Model for Access + Control Lists (ACLs)"; + } + import iana-ipv6-ext-types { + prefix iana-ipv6-ext-types; + reference + "RFC 9899: Extensions to the YANG Data Model for Access + Control Lists (ACLs)"; + } + + organization + "IETF NETMOD Working Group"; + contact + "WG Web: + WG List: + + Author: Mohamed Boucadair + + Author: Samier Barguil + + Author: Oscar Gonzalez de Dios + "; + description + + "This module contains YANG definitions for enhanced ACLs. + + 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 9899; see the + RFC itself for full legal notices."; + + revision 2025-12-22 { + description + "Initial revision."; + reference + "RFC 9899: Extensions to the YANG Data Model for Access + Control Lists (ACLs)"; + } + + feature match-on-payload { + description + "Match based on a pattern is supported."; + } + + feature match-on-vlan-filter { + description + "Match based on a VLAN range is supported."; + } + + feature match-on-isid-filter { + description + "Match based on an I-SID range is supported."; + } + + feature match-on-alias { + description + "Match based on aliases."; + } + + feature match-on-mpls { + description + "Match based on MPLS headers."; + } + + identity offset-type { + description + "Base identity for payload offset type."; + } + + identity layer2 { + base offset-type; + description + "The offset starts at the beginning of the Data Link Layer + header."; + } + + identity layer3 { + base offset-type; + description + "The offset starts at the beginning of the IP header."; + } + + identity layer4 { + base offset-type; + description + "The offset starts right after the IP header (including + any options or headers pertaining to that IP layer, e.g., + IPv6 Extension Headers and the Authentication Header (AH)). + + This can be typically the beginning of transport header + (e.g., UDP, TCP, the Stream Control Transmission Protocol + (SCTP), and the Datagram Congestion Control Protocol (DCCP)) + or any encapsulation scheme over IP such as IP-in-IP."; + } + + identity payload { + base offset-type; + description + "The offset starts right after the end of the transport + header. For example, this represents the beginning of the + TCP data right after any TCP options or the beginning of + the UDP payload right after the UDP header. + + This type may be used for matches against any data in + the transport payload and/or any surplus area (if any, + such as in UDP)."; + } + + identity tcp-flag { + description + "Base identity for the TCP Flags."; + reference + "RFC 9293: Transmission Control Protocol (TCP), Section 3.1"; + } + + identity ack { + base tcp-flag; + description + "Acknowledgment TCP flag bit."; + reference + "RFC 9293: Transmission Control Protocol (TCP), Section 3.1"; + } + + identity syn { + base tcp-flag; + description + "Synchronize sequence numbers."; + reference + "RFC 9293: Transmission Control Protocol (TCP), Section 3.1"; + } + + identity fin { + base tcp-flag; + description + "No more data from the sender."; + reference + "RFC 9293: Transmission Control Protocol (TCP), Section 3.1"; + } + + identity urg { + base tcp-flag; + description + "Urgent pointer TCP flag bit."; + reference + "RFC 9293: Transmission Control Protocol (TCP), Section 3.1"; + } + + identity psh { + base tcp-flag; + description + "The Push function flag is similar to the URG flag and tells + the receiver to process these packets as they are received + instead of buffering them."; + reference + "RFC 9293: Transmission Control Protocol (TCP), Section 3.1"; + } + + identity rst { + base tcp-flag; + description + "Reset TCP flag bit."; + reference + "RFC 9293: Transmission Control Protocol (TCP), Section 3.1"; + } + + identity ece { + base tcp-flag; + description + "ECN-Echo TCP flag bit."; + reference + "RFC 9293: Transmission Control Protocol (TCP), Section 3.1"; + } + + identity cwr { + base tcp-flag; + description + "Congestion Window Reduced flag bit."; + reference + "RFC 9293: Transmission Control Protocol (TCP), Section 3.1"; + } + + identity ae { + base tcp-flag; + description + "Accurate Explicit Congestion Notification (ECN). + + Previously used as Nonce Sum (NS), which is now + historic."; + } + + identity mpls-acl-type { + base acl:acl-base; + description + "An ACL that matches on fields from the MPLS header."; + } + + identity label-position { + description + "Base identity for deriving MPLS label position."; + } + + identity top { + base label-position; + description + "Top of the label stack."; + } + + identity bottom { + base label-position; + description + "Bottom of the label stack."; + } + + identity log-types { + description + "Base identity for deriving the log actions."; + } + + identity local-log { + base log-types; + description + "A local log is used to record the ACL results."; + } + + identity counter-type { + description + "Base identity for deriving the counter actions."; + } + + identity counter-name { + base counter-type; + description + "Identity for counter name to be updated based on + the ACL match actions."; + } + + typedef operator { + type bits { + bit not { + position 0; + description + "If set, the logical negation of operation."; + } + bit match { + position 1; + description + "Match bit. This is a bitwise match operation defined as + '(data & value) == value'."; + } + bit any { + position 2; + description + "Any bit. This is a match on any of the bits in bitmask. + It evaluates to 'true' if any of the bits in the + value mask are set in the data, i.e., + '(data & value) != 0'."; + } + } + description + "Specifies how to apply the defined bitmask. The + 'any' and 'match' bits must not be set simultaneously."; + } + + typedef fragment-type { + type bits { + bit df { + position 0; + description + "Don't fragment bit for IPv4. Must be set to 0 when it + appears in an IPv6 filter."; + } + bit isf { + position 1; + description + "Is a fragment."; + } + bit ff { + position 2; + description + "First fragment."; + } + bit lf { + position 3; + description + "Last fragment."; + } + } + description + "Different fragment types to match against."; + } + + typedef ipv4-prefix-set-ref { + type leafref { + path "/acl:acls/acl-enh:defined-sets/acl-enh:ipv4-prefix-sets" + + "/acl-enh:prefix-set/acl-enh:name"; + } + description + "Defines a reference to an IPv4 prefix set."; + } + + typedef ipv6-prefix-set-ref { + type leafref { + path "/acl:acls/acl-enh:defined-sets/acl-enh:ipv6-prefix-sets" + + "/acl-enh:prefix-set/acl-enh:name"; + } + description + "Defines a reference to an IPv6 prefix set."; + } + + typedef port-set-ref { + type leafref { + path "/acl:acls/acl-enh:defined-sets/acl-enh:port-sets" + + "/acl-enh:port-set/acl-enh:name"; + } + description + "Defines a reference to a port set."; + } + + typedef protocol-set-ref { + type leafref { + path "/acl:acls/acl-enh:defined-sets/acl-enh:protocol-sets" + + "/acl-enh:protocol-set/acl-enh:name"; + } + description + "Defines a reference to a protocol set."; + } + + typedef icmpv4-type-set-ref { + type leafref { + path "/acl:acls/acl-enh:defined-sets/acl-enh:icmpv4-type-sets" + + "/acl-enh:set/acl-enh:name"; + } + description + "Defines a reference to an ICMPv4 type set."; + } + + typedef icmpv6-type-set-ref { + type leafref { + path "/acl:acls/acl-enh:defined-sets/acl-enh:icmpv6-type-sets" + + "/acl-enh:set/acl-enh:name"; + } + description + "Defines a reference to an ICMPv6 type set."; + } + + typedef alias-ref { + type leafref { + path "/acl:acls/acl-enh:defined-sets/acl-enh:aliases" + + "/acl-enh:alias/acl-enh:name"; + } + description + "Defines a reference to an alias."; + } + + grouping tcp-flags { + description + "Operations on TCP flags."; + leaf operator { + type operator; + description + "How to interpret the TCP flags."; + } + choice mode { + description + "Choice of how flags are indicated."; + case explicit { + leaf-list explicit-tcp-flag { + type identityref { + base acl-enh:tcp-flag; + } + description + "An explicit list of the TCP flags that are to be + matched."; + } + } + case builtin { + leaf bitmask { + type uint16; + description + "The bitmask matches the last 4 bits of byte 13 + and byte 14 of the TCP header. + For clarity, the 4 bits of byte 12 + corresponding to the TCP data offset field are not + included in any matching. Assigned TCP flags + and their position are maintained in the IANA + 'Transmission Control Protocol (TCP) Parameters' + registry group."; + reference + "RFC 9293: Transmission Control Protocol (TCP), + Section 3.1 + IANA: Transmission Control Protocol (TCP) Parameters, + "; + } + } + } + } + + grouping fragment-fields { + description + "Operations on fragment types."; + leaf operator { + type operator; + default "match"; + description + "How to interpret the fragment type."; + } + leaf type { + type fragment-type; + description + "Specifies what fragment type to look for."; + } + } + + grouping mpls-match-parameters-config { + description + "Parameters for the configuration of MPLS match rules."; + leaf traffic-class { + type uint8 { + range "0..7"; + } + description + "The value of the MPLS Traffic Class (TC) bits, + formerly known as the EXP bits."; + } + leaf label-position { + type identityref { + base acl-enh:label-position; + } + description + "Position of the label."; + } + leaf upper-label-range { + type rt-types:mpls-label; + description + "Match MPLS label value on the MPLS header. + The usage of this field indicates the upper + range value in the top of the stack. This + label value does not include the encodings + of TC and Time-to-Live (TTL)."; + reference + "RFC 3032: MPLS Label Stack Encoding"; + } + leaf lower-label-range { + type rt-types:mpls-label; + description + "Match MPLS label value on the MPLS header. + The usage of this field indicates the lower + range value in the top of the stack. + This label value does not include the + encodings of TC and TTL."; + reference + "RFC 3032: MPLS Label Stack Encoding"; + } + leaf label-block-name { + type string; + description + "Reference to a label block predefined in the + implementation."; + } + leaf ttl-value { + type uint8; + description + "TTL MPLS packet value match."; + reference + "RFC 3032: MPLS Label Stack Encoding"; + } + } + + grouping payload-match { + description + "Operations on payload match."; + leaf offset { + type identityref { + base acl-enh:offset-type; + } + description + "Indicates the payload offset. This will indicate + the position of the data in the packet to use for + the match."; + } + leaf length { + type uint16; + units "bytes"; + description + "Indicates the number of bytes to ignore, starting from + the offset, to perform the pattern match."; + } + leaf operator { + type operator; + default "match"; + description + "How to interpret the pattern match."; + } + leaf pattern { + type binary; + description + "The binary pattern to match against starting. + The match starts from the byte indicated by + 'offset' + length'."; + } + } + + grouping alias { + description + "Specifies an alias."; + leaf-list vlan { + type uint16; + description + "VLAN of the alias."; + reference + "IEEE Std 802.1Q: Bridges and Bridged Networks"; + } + leaf-list prefix { + type inet:ip-prefix; + description + "IPv4 or IPv6 prefix of the alias."; + } + list port-range { + key "lower-port"; + description + "Port range. When only lower-port is + present, it represents a single port number."; + leaf lower-port { + type inet:port-number; + mandatory true; + description + "Lower port number of the port range."; + } + leaf upper-port { + type inet:port-number; + must '. >= ../lower-port' { + error-message + "The upper-port number must be greater than + or equal to the lower-port number."; + } + description + "Upper port number of the port range."; + } + } + leaf-list protocol { + type uint8; + description + "Identifies the target protocol number. + For example, 6 for TCP or 17 for UDP."; + } + leaf-list fqdn { + type inet:domain-name; + description + "Fully Qualified Domain Name (FQDN) identifying the target."; + } + leaf-list uri { + type inet:uri; + description + "URI identifying the target."; + } + } + + grouping icmpv4-header-fields { + description + "Collection of ICMPv4 header fields that can be + used to set up a match filter."; + leaf type { + type iana-icmpv4-types:icmpv4-type; + description + "Also known as control messages."; + reference + "RFC 792: Internet Control Message Protocol."; + } + leaf code { + type uint8; + description + "ICMP subtype."; + reference + "RFC 792: Internet Control Message Protocol."; + } + leaf rest-of-header { + type binary; + description + "Unbounded in length, the contents vary based on the + ICMP type and code."; + reference + "RFC 792: Internet Control Message Protocol"; + } + } + + grouping icmpv6-header-fields { + description + "Collection of ICMPv6 header fields that can be + used to set up a match filter."; + leaf type { + type iana-icmpv6-types:icmpv6-type; + description + "Also known as control messages."; + reference + "RFC 4443: Internet Control Message Protocol (ICMPv6) + for Internet Protocol Version 6 (IPv6) + Specification."; + } + leaf code { + type uint8; + description + "ICMP code."; + reference + "RFC 4443: Internet Control Message Protocol (ICMPv6) + for Internet Protocol Version 6 (IPv6) + Specification."; + } + leaf rest-of-header { + type binary; + description + "Unbounded in length, the contents vary based on the + ICMP type and code. Also referred to as 'Message Body' + in ICMPv6."; + reference + "RFC 4443: Internet Control Message Protocol (ICMPv6) + for Internet Protocol Version 6 (IPv6) + Specification."; + } + } + + grouping acl-complementary-actions { + description + "Collection of complementary ACL actions."; + container log-action { + description + "Container for defining log actions."; + leaf log-type { + type identityref { + base acl-enh:log-types; + } + description + "The type of log action to be performed."; + } + leaf log-id { + when "derived-from-or-self(../log-type, " + + "'acl-enh:local-log')" { + description + "Name of the log file updated when type is 'local-log'."; + } + type string; + description + "The name of the counter action."; + } + } + container counter-action { + description + "Container for defining counter actions."; + leaf counter-type { + type identityref { + base acl-enh:counter-type; + } + description + "The type of counter action to be performed."; + } + leaf-list counter-name { + when "derived-from-or-self(../counter-type, " + + "'acl-enh:counter-name')" { + description + "Name for the counter or variable to update when + 'counter-type' is 'counter-name'."; + } + type string; + description + "List of possible variables or counter names to + update based on match criteria."; + } + } + } + + grouping ipv4-prefix-sets { + description + "Data definitions for a list of IPv4 prefixes, + which are matched as part of a policy."; + list prefix-set { + key "name"; + description + "List of the defined prefix sets."; + leaf name { + type string; + description + "Name of the prefix set -- this is used as a label to + reference the set in match conditions."; + } + leaf description { + type string; + description + "Defined set description."; + } + leaf-list prefix { + type inet:ipv4-prefix; + description + "List of IPv4 prefixes to be used in match + conditions."; + } + } + } + + grouping ipv6-prefix-sets { + description + "Data definitions for a list of IPv6 prefixes, which are + matched as part of a policy."; + list prefix-set { + key "name"; + description + "List of the defined prefix sets."; + leaf name { + type string; + description + "Name of the prefix set -- this is used as a label to + reference the set in match conditions."; + } + leaf description { + type string; + description + "A textual description of the prefix list."; + } + leaf-list prefix { + type inet:ipv6-prefix; + description + "List of IPv6 prefixes to be used in match conditions."; + } + } + } + + grouping port-sets { + description + "Data definitions for a list of ports, which can + be matched in policies."; + list port-set { + key "name"; + description + "List of port set definitions."; + leaf name { + type string; + description + "Name of the port set -- this is used as a label to + reference the set in match conditions."; + } + list port { + key "id"; + description + "Port numbers along with the operator on which to + match."; + leaf id { + type string; + description + "Identifier of the list of port numbers."; + } + choice port { + description + "Choice of specifying the port number or referring to a + group of port numbers."; + container port-range-or-operator { + description + "Indicates a set of ports."; + uses packet-fields:port-range-or-operator; + } + } + } + } + } + + grouping protocol-sets { + description + "Data definitions for a list of protocols, which can be + matched in policies."; + list protocol-set { + key "name"; + description + "List of protocol set definitions."; + leaf name { + type string; + description + "Name of the protocols set -- this is used as a + label to reference the set in match conditions."; + } + leaf-list protocol { + type union { + type uint8; + type string; + } + description + "Value of the protocol set."; + } + } + } + + grouping icmpv4-type-sets { + description + "Data definitions for a list of ICMPv4 types, which can be + matched in policies."; + list set { + key "name"; + description + "List of ICMPv4 type set definitions."; + leaf name { + type string; + description + "Name of the ICMPv4 type set -- this is used as a label + to reference the set in match conditions."; + } + list icmpv4-type { + key "type"; + description + "Includes a list of ICMPv4 types."; + uses icmpv4-header-fields; + } + } + } + + grouping icmpv6-type-sets { + description + "Data definitions for a list of ICMPv6 types, which can be + matched in policies."; + list set { + key "name"; + description + "List of ICMP type set definitions."; + leaf name { + type string; + description + "Name of the ICMPv6 type set -- this is used as a label + to reference the set in match conditions."; + } + list icmpv6-type { + key "type"; + description + "Includes a list of ICMPv6 types."; + uses icmpv6-header-fields; + } + } + } + + grouping aliases { + description + "Grouping for a set of aliases."; + list alias { + key "name"; + description + "List of aliases."; + leaf name { + type string; + description + "The name of the alias."; + } + uses alias; + } + } + + grouping defined-sets { + description + "Predefined sets of attributes used in policy match + statements."; + container ipv4-prefix-sets { + description + "Data definitions for a list of IPv4 or IPv6 + prefixes, which are matched as part of a policy."; + uses ipv4-prefix-sets; + } + container ipv6-prefix-sets { + description + "Data definitions for a list of IPv6 prefixes, which are + matched as part of a policy."; + uses ipv6-prefix-sets; + } + container port-sets { + description + "Data definitions for a list of ports, which can + be matched in policies."; + uses port-sets; + } + container protocol-sets { + description + "Data definitions for a list of protocols, which can be + matched in policies."; + uses protocol-sets; + } + container icmpv4-type-sets { + description + "Data definitions for a list of ICMPv4 types, which can be + matched in policies."; + uses icmpv4-type-sets; + } + container icmpv6-type-sets { + description + "Data definitions for a list of ICMPv6 types, which can be + matched in policies."; + uses icmpv6-type-sets; + } + container aliases { + description + "Top-level container for aliases."; + uses aliases; + } + } + + augment "/acl:acls" { + description + "predefined sets."; + container defined-sets { + description + "Predefined sets of attributes used in policy match + statements."; + uses defined-sets; + nacm:default-deny-write; + } + } + + augment "/acl:acls/acl:acl/acl:aces/acl:ace" + + "/acl:matches" { + description + "Adds a match type based on the payload."; + choice payload { + description + "Matches based upon a prefix pattern."; + container pattern { + if-feature "match-on-payload"; + description + "Indicates the rule to perform the payload-based match."; + uses payload-match; + } + } + choice alias { + description + "Matches based upon aliases."; + leaf-list alias-name { + type alias-ref; + description + "Indicates one or more aliases."; + } + } + choice mpls { + description + "Matches against MPLS headers, for example, label + values."; + container mpls-values { + if-feature "match-on-mpls"; + description + "Provides the rule set that matches MPLS headers."; + uses mpls-match-parameters-config; + } + } + } + + augment "/acl:acls/acl:acl/acl:aces" + + "/acl:ace/acl:matches/acl:l2" { + description + "Adds a match type based on MAC VLAN and I-SID filters."; + container vlan-filter { + if-feature "match-on-vlan-filter"; + description + "Indicates how to handle MAC VLANs."; + leaf frame-type { + type string; + description + "Entering the frame type allows the + filter to match a specific type of frame format."; + } + choice vlan-type { + description + "VLAN definition from range or operator."; + case range { + leaf lower-vlan { + type uint16; + must '. <= ../upper-vlan' { + error-message + "The lower-vlan must be less than or equal to + the upper-vlan."; + } + mandatory true; + description + "Lower boundary for a VLAN."; + } + leaf upper-vlan { + type uint16; + mandatory true; + description + "Upper boundary for a VLAN."; + } + } + case operator { + leaf operator { + type packet-fields:operator; + default "eq"; + description + "Operator to be applied on the VLAN below."; + } + leaf-list vlan { + type uint16; + description + "VLAN number along with the operator on which to + match."; + reference + "IEEE Std 802.1Q: Bridges and Bridged Networks"; + } + } + } + } + container isid-filter { + if-feature "match-on-isid-filter"; + description + "Indicates how to handle I-SID filters. The + I-component is responsible for mapping customer + Ethernet traffic to the appropriate I-SID."; + choice isid-type { + description + "I-SID definition from range or operator."; + case range { + leaf lower-isid { + type uint16; + must '. <= ../upper-isid' { + error-message + "The lower-isid must be less than or equal to + the upper-isid."; + } + mandatory true; + description + "Lower boundary for an I-SID."; + } + leaf upper-isid { + type uint16; + mandatory true; + description + "Upper boundary for an I-SID."; + } + } + case operator { + leaf operator { + type packet-fields:operator; + default "eq"; + description + "Operator to be applied on the I-SID below."; + } + leaf-list isid { + type uint16; + description + "I-SID number along with the operator on which to + match."; + reference + "IEEE 802.1ah: Provider Backbone Bridges"; + } + } + } + } + } + + augment "/acl:acls/acl:acl/acl:aces" + + "/acl:ace/acl:matches/acl:l3/acl:ipv4/acl:ipv4" { + description + "Handle non-initial and initial fragments for IPv4 packets."; + container ipv4-fragment { + must 'not(../acl:flags)' { + error-message + "Either flags or fragment should be provided, but not + both."; + } + description + "Indicates how to handle IPv4 fragments."; + uses fragment-fields; + } + leaf source-ipv4-prefix-list { + type ipv4-prefix-set-ref; + description + "A reference to an IPv4 prefix list to match the source + address."; + } + leaf destination-ipv4-prefix-list { + type ipv4-prefix-set-ref; + description + "A reference to a prefix list to match the destination + address."; + } + leaf protocol-set { + type protocol-set-ref; + description + "A reference to a protocol set to match the protocol + field."; + } + } + + augment "/acl:acls/acl:acl/acl:aces" + + "/acl:ace/acl:matches/acl:l3/acl:ipv6/acl:ipv6" { + description + "Handles non-initial and initial fragments for IPv6 packets."; + container ipv6-fragment { + description + "Indicates how to handle IPv6 fragments."; + uses fragment-fields; + } + leaf source-ipv6-prefix-list { + type ipv6-prefix-set-ref; + description + "A reference to a prefix list to match the source address."; + } + leaf destination-ipv6-prefix-list { + type ipv6-prefix-set-ref; + description + "A reference to a prefix list to match the destination + address."; + } + leaf protocol-set { + type protocol-set-ref; + description + "A reference to a protocol set to match the next-header + field."; + } + leaf extension-header { + type iana-ipv6-ext-types:ipv6-extension-header-type; + description + "IPv6 extension header value."; + } + } + + augment "/acl:acls/acl:acl/acl:aces" + + "/acl:ace/acl:matches/acl:l4/acl:tcp/acl:tcp" { + description + "Handles TCP flags and port sets."; + container flags-bitmask { + must 'not(../acl:flags)' { + error-message + "Either flags or flags-bitmask should be provided, but not + both."; + } + description + "Indicates how to handle TCP flags."; + uses tcp-flags; + } + leaf source-tcp-port-set { + type port-set-ref; + description + "A reference to a port set to match the source port."; + } + leaf destination-tcp-port-set { + type port-set-ref; + description + "A reference to a port set to match the destination port."; + } + } + + augment "/acl:acls/acl:acl/acl:aces" + + "/acl:ace/acl:matches/acl:l4/acl:udp/acl:udp" { + description + "Handle UDP port sets."; + leaf source-udp-port-set { + type port-set-ref; + description + "A reference to a port set to match the source port."; + } + leaf destination-udp-port-set { + type port-set-ref; + description + "A reference to a port set to match the destination port."; + } + } + + augment "/acl:acls/acl:acl/acl:aces" + + "/acl:ace/acl:matches/acl:l4/acl:icmp/acl:icmp" { + description + "Handle ICMP type sets."; + leaf icmpv4-set { + type icmpv4-type-set-ref; + description + "A reference to an ICMPv4 type set to match the ICMPv4 type + field."; + } + leaf icmpv6-set { + type icmpv6-type-set-ref; + description + "A reference to an ICMPv6 type set to match the ICMPv6 type + field."; + } + } + + augment "/acl:acls/acl:acl/acl:aces" + + "/acl:ace/acl:actions" { + description + "Complementary actions including rate-limit action."; + uses acl-complementary-actions; + leaf rate-limit { + when "../acl:forwarding = 'acl:accept'" { + description + "Rate-limit valid only when the accept action is used."; + } + type decimal64 { + fraction-digits 2; + } + units "bytes per second"; + description + "Indicates a rate-limit for the matched traffic."; + } + } +} diff --git a/standard/ietf/RFC/ietf-bearer-svc.yang b/standard/ietf/RFC/ietf-bearer-svc.yang new file mode 120000 index 000000000..cae82d9c8 --- /dev/null +++ b/standard/ietf/RFC/ietf-bearer-svc.yang @@ -0,0 +1 @@ +ietf-bearer-svc@2025-09-29.yang \ No newline at end of file diff --git a/standard/ietf/RFC/ietf-bearer-svc@2025-09-29.yang b/standard/ietf/RFC/ietf-bearer-svc@2025-09-29.yang new file mode 100644 index 000000000..61a4cddfc --- /dev/null +++ b/standard/ietf/RFC/ietf-bearer-svc@2025-09-29.yang @@ -0,0 +1,471 @@ +module ietf-bearer-svc { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-bearer-svc"; + prefix bearer-svc; + + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types, Section 4"; + } + import ietf-vpn-common { + prefix vpn-common; + reference + "RFC 9181: A Common YANG Data Model for Layer 2 and Layer 3 + VPNs"; + } + import ietf-ac-common { + prefix ac-common; + reference + "RFC 9833: A Common YANG Data Model for Attachment Circuits"; + } + import ietf-ac-svc { + prefix ac-svc; + reference + "RFC 9834: YANG Data Models for Bearers and Attachment + Circuits as a Service (ACaaS)"; + } + + organization + "IETF OPSAWG (Operations and Management Area Working Group)"; + contact + "WG Web: + WG List: + + Editor: Mohamed Boucadair + + Editor: Richard Roberts + + Author: Oscar Gonzalez de Dios + + Author: Samier Barguil + + Author: Bo Wu + "; + description + "This YANG module defines a generic YANG module for exposing + network bearers as a service. + + 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 xxx; see the + RFC itself for full legal notices."; + + revision 2025-09-29 { + description + "Initial revision."; + reference + "RFC 9834: YANG Data Models for Bearers and Attachment + Circuits as a Service (ACaaS)"; + } + + // Identities + + identity identification-type { + description + "Base identity for identification of bearers."; + } + + identity device-id { + base identification-type; + description + "Identification of bearers based on device."; + } + + identity site-id { + base identification-type; + description + "Identification of bearers based on site."; + } + + identity site-and-device-id { + base identification-type; + description + "Identification of bearers based on site and device."; + } + + identity custom { + base identification-type; + description + "Identification of bearers based on other custom criteria."; + } + + identity bearer-type { + description + "Base identity for bearers type."; + } + + identity ethernet { + base bearer-type; + description + "Ethernet."; + } + + identity wireless { + base bearer-type; + description + "Wireless."; + } + + identity lag { + base bearer-type; + description + "Link Aggregation Group (LAG)."; + } + + identity network-termination-hint { + base vpn-common:placement-diversity; + description + "A hint about the termination at the network side + is provided (e.g., geoproximity)."; + } + + identity sync-phy-type { + description + "Base identity for physical layer synchronization."; + } + + identity sync-e { + base sync-phy-type; + description + "Sync Ethernet (SyncE)."; + reference + "ITU-T G.781: Synchronization layer functions for frequency + synchronization based on the physical layer"; + } + + // Typedef to ease referencing cross-modules + + typedef bearer-ref { + type leafref { + path "/bearer-svc:bearers/bearer-svc:bearer/bearer-svc:name"; + } + description + "Defines a type to reference a bearer."; + } + + // Reusable groupings + + grouping location-information { + description + "Basic location information."; + leaf name { + type string; + description + "Provides a location name. This data node can be mapped, + e.g., to the 3GPP NRM IOC ManagedElement."; + } + leaf address { + type string; + description + "Address (number and street) of the device/site."; + } + leaf city { + type string; + description + "City of the device/site."; + } + leaf postal-code { + type string; + description + "Postal code of the device/site."; + } + leaf state { + type string; + description + "State of the device/site. This leaf can also be used to + describe a region for a country that does not have + states."; + } + leaf country-code { + type string { + pattern '[A-Z]{2}'; + } + description + "Country of the device/site. + Expressed as ISO ALPHA-2 code."; + } + } + + grouping placement-constraints { + description + "Constraints related to placement of a bearer."; + list constraint { + if-feature "vpn-common:placement-diversity"; + key "constraint-type"; + description + "List of constraints."; + leaf constraint-type { + type identityref { + base vpn-common:placement-diversity; + } + must "not(derived-from-or-self(current(), " + + "'vpn-common:bearer-diverse') or " + + "derived-from-or-self(current(), " + + "'vpn-common:same-bearer'))" { + error-message "Only bearer-specific diversity" + + "constraints must be provided."; + } + description + "Diversity constraint type for bearers."; + } + container target { + description + "The constraint will apply against this list of + groups."; + choice target-flavor { + description + "Choice for the group definition."; + case id { + list group { + key "group-id"; + description + "List of groups."; + leaf group-id { + type string; + description + "The constraint will apply against this + particular group ID."; + } + } + } + case all-bearers { + leaf all-other-bearers { + type empty; + description + "The constraint will apply against all other + bearers of a site."; + } + } + case all-groups { + leaf all-other-groups { + type empty; + description + "The constraint will apply against all other + groups managed by the customer."; + } + } + } + } + } + } + + container locations { + description + "Retrieves the available provider locations for terminating + bearers for a given customer."; + + list customer { + key "name peer-as"; + description + "List of locations per customer."; + leaf name { + type string; + description + "Indicates the name of the customer."; + } + leaf peer-as { + type inet:as-number; + description + "Indicates the customer's ASN. + 0 is used when the customer does not have an ASN."; + reference + "RFC 7607: Codification of AS 0 Processing"; + } + list location { + key "name"; + config false; + description + "Reports the list of available locations."; + uses location-information; + } + } + } + container bearers { + description + "Main container for the bearers. The timing constraints + indicated at the bearer level take precedence over the + global values indicated at the bearers level."; + uses ac-common:op-instructions; + container placement-constraints { + description + "Diversity constraint type."; + uses placement-constraints; + } + list bearer { + key "name"; + description + "Maintains a list of bearers."; + leaf name { + type string; + description + "A name that uniquely identifies a bearer for + a given customer."; + } + leaf description { + type string; + description + "A description of this bearer."; + } + leaf customer-name { + type string; + description + "Indicates the name of the customer that requested this + bearer."; + } + uses vpn-common:vpn-components-group; + leaf op-comment { + type string; + description + "Includes comments that can be shared with operational + teams and that may be useful for the activation of a + bearer. This may include, for example, information + about the building, level, etc."; + } + leaf bearer-parent-ref { + type bearer-svc:bearer-ref; + description + "Specifies the parent bearer. This can be used, e.g., + for a Link Aggregation Group (LAG)."; + } + leaf-list bearer-lag-member { + type bearer-svc:bearer-ref; + config false; + description + "Reports LAG members."; + } + leaf sync-phy-capable { + type boolean; + config false; + description + "Indicates, when set to true, that a mechanism for physical + layer synchronization is supported for this bearer. + No such mechanism is supported if set to false."; + } + leaf sync-phy-enabled { + type boolean; + description + "Indicates, when set to true, that a mechanism for physical + layer synchronization is enabled for this bearer. No such + mechanism is enabled if set to false."; + } + leaf sync-phy-type { + when "../sync-phy-enabled='true'"; + type identityref { + base sync-phy-type; + } + description + "Type of the physical layer synchronization that is enabled + for this bearer."; + } + leaf provider-location-reference { + type string; + description + "Specifies the provider's location reference."; + } + container customer-point { + description + "Base container to link the bearer existence."; + leaf identified-by { + type identityref { + base identification-type; + } + description + "Specifies how the customer point is identified."; + } + container device { + when "derived-from-or-self(../identified-by, " + + "'bearer-svc:device-id') or " + + "derived-from-or-self(../identified-by, " + + "'bearer-svc:site-and-device-id')" { + description + "Only applicable if identified-by is device."; + } + description + "Bearer is linked to device."; + leaf device-id { + type string; + description + "Identifier for the device where that bearer belongs."; + } + container location { + description + "Location of the node."; + uses location-information; + } + } + container site { + when "derived-from-or-self(../identified-by, " + + "'bearer-svc:site-id') or " + + "derived-from-or-self(../identified-by, " + + "'bearer-svc:site-and-device-id')" { + description + "Only applicable if identified-by is site."; + } + description + "Bearer is linked to a site."; + leaf site-id { + type string; + description + "Identifier for the site or sites where that bearer + belongs."; + } + container location { + description + "Location of the node."; + uses location-information; + } + } + leaf custom-id { + when "derived-from-or-self(../identified-by, " + + "'bearer-svc:custom')" { + description + "Only enabled if identified-by is custom."; + } + type string; + description + "The semantics of this identifier is shared between the + customer/provider using out-of-band means."; + } + } + leaf type { + type identityref { + base bearer-type; + } + description + "Type of the bearer (e.g., Ethernet or wireless)."; + } + leaf test-only { + type empty; + description + "When present, this indicates that this is a feasibility + check request. No resources are committed for such bearer + requests."; + } + leaf bearer-reference { + if-feature "ac-common:server-assigned-reference"; + type string; + config false; + description + "This is an internal reference for the service provider + to identify the bearers."; + } + leaf-list ac-svc-ref { + type ac-svc:attachment-circuit-reference; + config false; + description + "Specifies the set of ACs that are bound to the bearer."; + } + uses ac-common:op-instructions; + uses ac-common:service-status; + } + } +} diff --git a/standard/ietf/RFC/ietf-foo@2016-03-20.yang b/standard/ietf/RFC/ietf-foo@2016-03-20.yang index 8e0e3e871..9d7f0767c 100644 --- a/standard/ietf/RFC/ietf-foo@2016-03-20.yang +++ b/standard/ietf/RFC/ietf-foo@2016-03-20.yang @@ -6,7 +6,7 @@ module ietf-foo { description "..."; revision 2016-03-20 { description "Latest revision"; - reference "RFC XXXX: Foo Protocol"; + reference "RFC FFFF: Foo Protocol"; } // ... more statements } diff --git a/standard/ietf/RFC/ietf-inet-types.yang b/standard/ietf/RFC/ietf-inet-types.yang index f2c4cfeed..f476dba7d 120000 --- a/standard/ietf/RFC/ietf-inet-types.yang +++ b/standard/ietf/RFC/ietf-inet-types.yang @@ -1 +1 @@ -ietf-inet-types@2013-07-15.yang \ No newline at end of file +ietf-inet-types@2025-12-22.yang \ No newline at end of file diff --git a/standard/ietf/RFC/ietf-inet-types@2025-12-22.yang b/standard/ietf/RFC/ietf-inet-types@2025-12-22.yang new file mode 100644 index 000000000..e56e67df3 --- /dev/null +++ b/standard/ietf/RFC/ietf-inet-types@2025-12-22.yang @@ -0,0 +1,666 @@ +module ietf-inet-types { + namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types"; + prefix inet; + + organization + "IETF Network Modeling (NETMOD) Working Group"; + contact + "WG Web: + WG List: + + Editor: Jürgen Schönwälder + "; + description + "This module contains a collection of generally useful derived + YANG data types for Internet addresses and related things. + + 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. + + 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 9911; + see the RFC itself for full legal notices."; + + revision 2025-12-22 { + description + "This revision adds the following new data types: + - inet:ip-address-and-prefix + - inet:ipv4-address-and-prefix + - inet:ipv6-address-and-prefix + - inet:protocol-number + - inet:upper-layer-protocol-number + - inet:host-name + - inet:email-address + - inet:ip-address-link-local + - inet:ipv4-address-link-local + - inet:ipv6-address-link-local + The inet:host union was changed to use inet:host-name instead + of inet:domain-name. Several pattern statements have been + improved."; + reference + "RFC 9911: Common YANG Data Types"; + } + revision 2013-07-15 { + description + "This revision adds the following new data types: + - inet:ip-address-no-zone + - inet:ipv4-address-no-zone + - inet:ipv6-address-no-zone"; + reference + "RFC 6991: Common YANG Data Types"; + } + revision 2010-09-24 { + description + "Initial revision."; + reference + "RFC 6021: Common YANG Data Types"; + } + + /*** collection of types related to protocol fields ***/ + + typedef ip-version { + type enumeration { + enum unknown { + value 0; + description + "An unknown or unspecified version of the Internet + Protocol."; + } + enum ipv4 { + value 1; + description + "The IPv4 protocol as defined in RFC 791."; + } + enum ipv6 { + value 2; + description + "The IPv6 protocol as defined in RFC 8200."; + } + } + description + "This value represents the version of the Internet Protocol. + + In the value set and its semantics, this type is equivalent + to the InetVersion textual convention of the SMIv2."; + reference + "RFC 791: Internet Protocol + RFC 8200: Internet Protocol, Version 6 (IPv6) Specification + RFC 4001: Textual Conventions for Internet Network Addresses"; + } + + typedef dscp { + type uint8 { + range "0..63"; + } + description + "The dscp type represents a Differentiated Services Code Point + that may be used for marking packets in a traffic stream. + + In the value set and its semantics, this type is equivalent + to the Dscp textual convention of the SMIv2."; + reference + "RFC 3289: Management Information Base for the Differentiated + Services Architecture + RFC 2474: Definition of the Differentiated Services Field + (DS Field) in the IPv4 and IPv6 Headers + RFC 2780: IANA Allocation Guidelines For Values In + the Internet Protocol and Related Headers"; + } + + typedef ipv6-flow-label { + type uint32 { + range "0..1048575"; + } + description + "The ipv6-flow-label type represents the flow identifier or + Flow Label in an IPv6 packet header that may be used to + discriminate traffic flows. + + In the value set and its semantics, this type is equivalent + to the IPv6FlowLabel textual convention of the SMIv2."; + reference + "RFC 3595: Textual Conventions for IPv6 Flow Label + RFC 8200: Internet Protocol, Version 6 (IPv6) Specification"; + } + + typedef port-number { + type uint16 { + range "0..65535"; + } + description + "The port-number type represents a 16-bit port number of an + Internet transport-layer protocol such as UDP, TCP, DCCP, or + SCTP. + + Port numbers are assigned by IANA. The current list of + all assignments is available from . + + Note that the port number value zero is reserved by IANA. In + situations where the value zero does not make sense, it can + be excluded by subtyping the port-number type. + + In the value set and its semantics, this type is equivalent + to the InetPortNumber textual convention of the SMIv2."; + reference + "RFC 768: User Datagram Protocol + RFC 9293: Transmission Control Protocol (TCP) + RFC 9260: Stream Control Transmission Protocol + RFC 4340: Datagram Congestion Control Protocol (DCCP) + RFC 4001: Textual Conventions for Internet Network Addresses"; + } + + typedef protocol-number { + type uint8; + description + "The protocol-number type represents an 8-bit Internet + Protocol number, carried in the 'protocol' field of the + IPv4 header or in the 'next header' field of the IPv6 + header. + + Protocol numbers are assigned by IANA. The current list of + all assignments is available from ."; + reference + "RFC 791: Internet Protocol + RFC 8200: Internet Protocol, Version 6 (IPv6) Specification"; + } + + typedef upper-layer-protocol-number { + type protocol-number; + description + "The upper-layer-protocol-number represents the upper-layer + protocol number carried in an IP packet. For IPv6 packets + with extension headers, this is the protocol number carried + in the last 'next header' field of the chain of IPv6 extension + headers."; + reference + "RFC 791: Internet Protocol + RFC 8200: Internet Protocol, Version 6 (IPv6) Specification"; + } + + /*** collection of types related to autonomous systems ***/ + + typedef as-number { + type uint32; + description + "The as-number type represents autonomous system numbers + that identify an Autonomous System (AS). An AS is a set + of routers under a single technical administration, using + an interior gateway protocol and common metrics to route + packets within the AS, and using an exterior gateway + protocol to route packets to other ASes. IANA maintains + the autonomous system number space and has delegated large + parts to the regional registries. + + Autonomous system numbers were originally limited to 16 + bits. BGP extensions have enlarged the autonomous system + number space to 32 bits. This type therefore uses an uint32 + base type without a range restriction in order to support + a larger autonomous system number space. + + In the value set and its semantics, this type is equivalent + to the InetAutonomousSystemNumber textual convention of + the SMIv2."; + reference + "RFC 1930: Guidelines for creation, selection, and registration + of an Autonomous System (AS) + RFC 4271: A Border Gateway Protocol 4 (BGP-4) + RFC 4001: Textual Conventions for Internet Network Addresses + RFC 6793: BGP Support for Four-Octet Autonomous System (AS) + Number Space"; + } + + /*** collection of types related to IP addresses and hostnames ***/ + + typedef ip-address { + type union { + type ipv4-address; + type ipv6-address; + } + description + "The ip-address type represents an IP address and is IP + version neutral. The format of the textual representation + implies the IP version. This type supports scoped addresses + by allowing zone identifiers in the address format."; + reference + "RFC 4007: IPv6 Scoped Address Architecture"; + } + + typedef ipv4-address { + type string { + pattern + '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}' + + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])' + + '(%.+)?'; + } + description + "The ipv4-address type represents an IPv4 address in + dotted-quad notation. The IPv4 address may include a zone + index, separated by a % sign. If a system uses zone names + that are not represented in UTF-8, then an implementation + needs to use some mechanism to transform the local name + into UTF-8. The definition of such a mechanism is outside + the scope of this document. + + The zone index is used to disambiguate identical address + values. For link-local addresses, the zone index will + typically be the interface index number or the name of an + interface. If the zone index is not present, the default + zone of the device will be used. + + The canonical format for the zone index is the numerical + format"; + } + + typedef ipv6-address { + type string { + pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}' + + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|' + + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}' + + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))' + + '(%[A-Za-z0-9][A-Za-z0-9\-\._~/]*)?'; + pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|' + + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)' + + '(%.+)?'; + } + description + "The ipv6-address type represents an IPv6 address in full, + mixed, shortened, and shortened-mixed notation. The IPv6 + address may include a zone index, separated by a % sign. + If a system uses zone names that are not represented in + UTF-8, then an implementation needs to use some mechanism + to transform the local name into UTF-8. The definition of + such a mechanism is outside the scope of this document. + + The zone index is used to disambiguate identical address + values. For link-local addresses, the zone index will + typically be the interface index number or the name of an + interface. If the zone index is not present, the default + zone of the device will be used. + + The canonical format of IPv6 addresses uses the textual + representation defined in Section 4 of RFC 5952. The + canonical format for the zone index is the numerical + format as described in Section 11.2 of RFC 4007."; + reference + "RFC 4291: IP Version 6 Addressing Architecture + RFC 4007: IPv6 Scoped Address Architecture + RFC 5952: A Recommendation for IPv6 Address Text + Representation"; + } + + typedef ip-address-no-zone { + type union { + type ipv4-address-no-zone; + type ipv6-address-no-zone; + } + description + "The ip-address-no-zone type represents an IP address and is + IP version neutral. The format of the textual representation + implies the IP version. This type does not support scoped + addresses since it does not allow zone identifiers in the + address format."; + reference + "RFC 4007: IPv6 Scoped Address Architecture"; + } + + typedef ipv4-address-no-zone { + type ipv4-address { + pattern '[0-9\.]*'; + } + description + "An IPv4 address without a zone index. This type, derived + from the type ipv4-address, may be used in situations where + the zone is known from the context and no zone index is + needed."; + } + + typedef ipv6-address-no-zone { + type ipv6-address { + pattern '[0-9a-fA-F:\.]*'; + } + description + "An IPv6 address without a zone index. This type, derived + from the type ipv6-address, may be used in situations where + the zone is known from the context and no zone index is + needed."; + reference + "RFC 4291: IP Version 6 Addressing Architecture + RFC 4007: IPv6 Scoped Address Architecture + RFC 5952: A Recommendation for IPv6 Address Text + Representation"; + } + + typedef ip-address-link-local { + type union { + type ipv4-address-link-local; + type ipv6-address-link-local; + } + description + "The ip-address-link-local type represents a link-local IP + address and is IP version neutral. The format of the textual + representation implies the IP version."; + } + + typedef ipv4-address-link-local { + type ipv4-address { + pattern '169\.254\..*'; + } + description + "The ipv4-address-link-local type represents a link-local IPv4 + address in the prefix 169.254.0.0/16 as defined in Section 2.1 + of RFC 3927."; + reference + "RFC 3927: Dynamic Configuration of IPv4 Link-Local Addresses"; + } + + typedef ipv6-address-link-local { + type ipv6-address { + pattern '[fF][eE][89aAbB][0-9a-fA-F]:.*'; + } + description + "The ipv6-address-link-local type represents a link-local IPv6 + address in the prefix fe80::/10 as defined in Section 2.4 of + RFC 4291."; + reference + "RFC 4291: IP Version 6 Addressing Architecture"; + } + + typedef ip-prefix { + type union { + type ipv4-prefix; + type ipv6-prefix; + } + description + "The ip-prefix type represents an IP prefix and is IP + version neutral. The format of the textual representations + implies the IP version."; + } + + typedef ipv4-prefix { + type string { + pattern + '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}' + + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])' + + '/(([0-9])|([1-2][0-9])|(3[0-2]))'; + } + description + "The ipv4-prefix type represents an IPv4 prefix. + The prefix length is given by the number following the + slash character and must be less than or equal to 32. + + A prefix length value of n corresponds to an IP address + mask that has n contiguous 1-bits from the most + significant bit (MSB) and all other bits set to 0. + + The canonical format of an IPv4 prefix has all bits of + the IPv4 address set to zero that are not part of the + IPv4 prefix. + + The definition of ipv4-prefix does not require that bits + that are not part of the prefix be set to zero. However, + implementations have to return values in canonical format, + which requires non-prefix bits to be set to zero. This means + that 192.0.2.1/24 must be accepted as a valid value, but it + will be converted into the canonical format 192.0.2.0/24."; + } + + typedef ipv6-prefix { + type string { + pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}' + + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|' + + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}' + + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))' + + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))'; + pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|' + + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)' + + '(/.+)'; + } + description + "The ipv6-prefix type represents an IPv6 prefix. + The prefix length is given by the number following the + slash character and must be less than or equal to 128. + + A prefix length value of n corresponds to an IP address + mask that has n contiguous 1-bits from the most + significant bit (MSB) and all other bits set to 0. + + The canonical format of an IPv6 prefix has all bits of + the IPv6 address set to zero that are not part of the + IPv6 prefix. Furthermore, the IPv6 address is represented + as defined in Section 4 of RFC 5952. + + The definition of ipv6-prefix does not require that bits + that are not part of the prefix be set to zero. However, + implementations have to return values in canonical format, + which requires non-prefix bits to be set to zero. This means + that 2001:db8::1/64 must be accepted as a valid value, but it + will be converted into the canonical format 2001:db8::/64."; + reference + "RFC 5952: A Recommendation for IPv6 Address Text + Representation"; + } + + typedef ip-address-and-prefix { + type union { + type ipv4-address-and-prefix; + type ipv6-address-and-prefix; + } + description + "The ip-address-and-prefix type represents an IP address and + prefix and is IP version neutral. The format of the textual + representations implies the IP version."; + } + + typedef ipv4-address-and-prefix { + type string { + pattern + '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}' + + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])' + + '/(([0-9])|([1-2][0-9])|(3[0-2]))'; + } + description + "The ipv4-address-and-prefix type represents an IPv4 + address and an associated IPv4 prefix. + The prefix length is given by the number following the + slash character and must be less than or equal to 32. + + A prefix length value of n corresponds to an IP address + mask that has n contiguous 1-bits from the most + significant bit (MSB) and all other bits set to 0."; + } + + typedef ipv6-address-and-prefix { + type string { + pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}' + + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|' + + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}' + + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))' + + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))'; + pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|' + + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)' + + '(/.+)'; + } + description + "The ipv6-address-and-prefix type represents an IPv6 + address and an associated IPv6 prefix. + The prefix length is given by the number following the + slash character and must be less than or equal to 128. + + A prefix length value of n corresponds to an IP address + mask that has n contiguous 1-bits from the most + significant bit (MSB) and all other bits set to 0. + + The canonical format requires that the IPv6 address is + represented as defined in Section 4 of RFC 5952."; + reference + "RFC 5952: A Recommendation for IPv6 Address Text + Representation"; + } + + /*** collection of domain name and URI types ***/ + + typedef domain-name { + type string { + length "1..253"; + pattern + '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*' + + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)' + + '|\.'; + } + description + "The domain-name type represents a DNS domain name. The + name SHOULD be fully qualified whenever possible. This + type does not support wildcards (see RFC 4592) or + classless in-addr.arpa delegations (see RFC 2317). + + Internet domain names are only loosely specified. Section + 3.5 of RFC 1034 recommends a syntax (modified in Section + 2.1 of RFC 1123). The pattern above is intended to allow + for current practice in domain name use and some possible + future expansion. Note that Internet host names have a + stricter syntax (described in RFC 952) than the DNS + recommendations in RFCs 1034 and 1123. Schema nodes + representing host names should use the host-name type + instead of the domain-type. + + The encoding of DNS names in the DNS protocol is limited + to 255 characters. Since the encoding consists of labels + prefixed by a length byte and there is a trailing NUL + byte, only 253 characters can appear in the textual dotted + notation. + + The description clause of schema nodes using the domain-name + type MUST describe when and how these names are resolved to + IP addresses. Note that the resolution of a domain-name value + may require to query multiple DNS records (e.g., A for IPv4 + and AAAA for IPv6). The order of the resolution process and + which DNS record takes precedence can either be defined + explicitly or depend on the configuration of the + resolver. + + Domain-name values use the ASCII encoding. Their canonical + format uses lowercase ASCII characters. Internationalized + domain names MUST be A-labels as per RFC 5890."; + reference + "RFC 952: DoD Internet Host Table Specification + RFC 1034: Domain Names - Concepts and Facilities + RFC 1123: Requirements for Internet Hosts -- Application + and Support + RFC 2317: Classless IN-ADDR.ARPA delegation + RFC 2782: A DNS RR for specifying the location of services + (DNS SRV) + RFC 4592: The Role of Wildcards in the Domain Name System + RFC 5890: Internationalized Domain Names in Applications + (IDNA): Definitions and Document Framework + RFC 9499: DNS Terminology"; + } + + typedef host-name { + type domain-name { + length "2..max"; + pattern '[a-zA-Z0-9\-\.]+'; + } + description + "The host-name type represents fully qualified host names. + Host names must be at least two characters long (see RFC 952), + and they are restricted to labels consisting of letters, + digits, and hyphens separated by dots (see RFCs 1123 and + 952)."; + reference + "RFC 952: DoD Internet Host Table Specification + RFC 1123: Requirements for Internet Hosts -- Application + and Support"; + } + + typedef host { + type union { + type ip-address; + type host-name; + } + description + "The host type represents either an IP address or a fully + qualified host name."; + } + + typedef uri { + type string { + pattern '[a-z][a-z0-9+.-]*:.*'; + } + description + "The uri type represents a Uniform Resource Identifier + (URI) as defined by the rule 'URI' in RFC 3986. + + Objects using the uri type MUST be in ASCII encoding + and MUST be normalized as described in Sections 6.2.1, + 6.2.2.1, and 6.2.2.2 of RFC 3986. Characters that can be + represented without using percent-encoding are represented + as characters (without percent-encoding), and all + case-insensitive characters are set to lowercase except + for hexadecimal digits within a percent-encoded triplet, + which are normalized to uppercase as described in + Section 6.2.2.1 of RFC 3986. + + The purpose of this normalization is to help provide + unique URIs. Note that this normalization is not + sufficient to provide uniqueness. Two URIs that are + textually distinct after this normalization may still be + equivalent. + + Objects using the uri type may restrict the schemes that + they permit. For example, 'data:' and 'urn:' schemes + might not be appropriate. + + A zero-length URI is not a valid URI. This can be used to + express 'URI absent' where required. + + In the value set and its semantics, this type is equivalent + to the Uri SMIv2 textual convention defined in RFC 5017."; + reference + "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax + RFC 3305: Report from the Joint W3C/IETF URI Planning Interest + Group: Uniform Resource Identifiers (URIs), URLs, + and Uniform Resource Names (URNs): Clarifications + and Recommendations + RFC 5017: MIB Textual Conventions for Uniform Resource + Identifiers (URIs)"; + } + + typedef email-address { + type string { + pattern '.+@.+'; + } + description + "The email-address type represents an internationalized + email address. + + The email address format is defined by the addr-spec + ABNF rule in Section 3.4.1 of RFC 5322. This format has + been extended by RFC 6532 to support internationalized + email addresses. Implementations MUST support the + internationalization extensions of RFC 6532. Support + for the obsolete obs-local-part, obs-domain, and + obs-qtext in RFC 5322 is not required. + + The domain part may use both A-labels and U-labels + (see RFC 5890). The canonical format of the domain part + uses lowercase characters and U-labels (RFC 5890) where + applicable."; + reference + "RFC 5322: Internet Message Format + RFC 5890: Internationalized Domain Names in Applications + (IDNA): Definitions and Document Framework + RFC 6532: Internationalized Email Headers"; + } +} diff --git a/standard/ietf/RFC/ietf-isis-sr-mpls.yang b/standard/ietf/RFC/ietf-isis-sr-mpls.yang new file mode 120000 index 000000000..d9538bbc6 --- /dev/null +++ b/standard/ietf/RFC/ietf-isis-sr-mpls.yang @@ -0,0 +1 @@ +ietf-isis-sr-mpls@2025-12-09.yang \ No newline at end of file diff --git a/standard/ietf/RFC/ietf-isis-sr-mpls@2025-12-09.yang b/standard/ietf/RFC/ietf-isis-sr-mpls@2025-12-09.yang new file mode 100644 index 000000000..f60fe5356 --- /dev/null +++ b/standard/ietf/RFC/ietf-isis-sr-mpls@2025-12-09.yang @@ -0,0 +1,933 @@ +module ietf-isis-sr-mpls { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-isis-sr-mpls"; + prefix isis-sr-mpls; + + import ietf-routing { + prefix rt; + reference + "RFC 8349: A YANG Data Model for Routing + Management (NMDA Version)"; + } + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types"; + } + import ietf-segment-routing-common { + prefix sr-cmn; + reference + "RFC 9020: YANG Data Model for Segment Routing"; + } + import ietf-segment-routing-mpls { + prefix sr-mpls; + reference + "RFC 9020: YANG Data Model for Segment Routing"; + } + import ietf-isis { + prefix isis; + reference + "RFC 9130: YANG Data Model for IS-IS Protocol"; + } + import iana-routing-types { + prefix iana-rt-types; + reference + "RFC 8294: Common YANG Data Types for the Routing Area"; + } + import ietf-routing-types { + prefix rt-types; + reference + "RFC 8294: Common YANG Data Types for the Routing Area"; + } + + organization + "IETF LSR - Link State Routing Working Group"; + contact + "WG Web: + WG List: + + Author: Stephane Litkowski + + Author: Yingzhen Qu + + Author: Acee Lindem + + Author: Ing-Wher Chen + + Author: Jeff Tantsura + + "; + description + "This YANG module defines the generic configuration and + operational state for SR IS-IS extensions for the + MPLS data plane. + + 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 9902; + see the RFC itself for full legal notices."; + + revision 2025-12-09 { + description + "Initial revision."; + reference + "RFC 9902: A YANG Data Model for IS-IS Segment Routing over + the MPLS Data Plane"; + } + + /* Features */ + + feature remote-lfa-sr { + description + "Enhance RLFA to use SR path."; + reference + "RFC 8102: Remote-LFA Node Protection and Manageability"; + } + + feature ti-lfa { + description + "Topology Independent Loop-Free Alternate (TI-LFA) + computation using SR."; + reference + "RFC 9855: Topology Independent Fast Reroute Using Segment + Routing"; + } + + /* Identities */ + + identity sr-capability { + description + "Base identity for IS-IS SR-Capabilities sub-TLV flags."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing"; + } + + identity mpls-ipv4 { + base sr-capability; + description + "If set, then the router is capable of + processing SR-MPLS-encapsulated IPv4 packets + on all interfaces."; + } + + identity mpls-ipv6 { + base sr-capability; + description + "If set, then the router is capable of + processing SR-MPLS-encapsulated IPv6 packets + on all interfaces."; + } + + identity prefix-sid-flag { + description + "Base identity for Prefix Segment Identifier (Prefix-SID) + sub-TLV flags."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.1"; + } + + identity r-flag { + base prefix-sid-flag; + description + "Re-advertisement Flag."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.1"; + } + + identity n-flag { + base prefix-sid-flag; + description + "Node-SID Flag."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.1"; + } + + identity p-flag { + base prefix-sid-flag; + description + "No-PHP (No Penultimate Hop-Popping) Flag."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.1"; + } + + identity e-flag { + base prefix-sid-flag; + description + "Explicit NULL Flag."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.1"; + } + + identity v-flag { + base prefix-sid-flag; + description + "Value Flag."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.1"; + } + + identity l-flag { + base prefix-sid-flag; + description + "Local Flag."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.1"; + } + + identity adj-sid-flag { + description + "Base identity for Adjacency Segment Identifier (Adj-SID) + sub-TLV flags."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.2"; + } + + identity f-flag { + base adj-sid-flag; + description + "Address-Family Flag."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.2"; + } + + identity b-flag { + base adj-sid-flag; + description + "Backup Flag."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.2"; + } + + identity vi-flag { + base adj-sid-flag; + description + "Value/Index Flag - corresponds to V-Flag in reference."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.2"; + } + + identity lg-flag { + base adj-sid-flag; + description + "Local/Global Flag - corresponds to L-Flag in reference."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.2"; + } + + identity s-flag { + base adj-sid-flag; + description + "Set Flag - corresponds to S-Flag in reference."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.2"; + } + + identity pe-flag { + base adj-sid-flag; + description + "Persistent Flag - corresponds to P-Flag in reference."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.2"; + } + + identity sid-binding-flag { + description + "Base identity for SID Binding TLV flags."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.4"; + } + + identity af-flag { + base sid-binding-flag; + description + "Address-Family Flag - corresponds to F-Flag in reference."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.4"; + } + + identity m-flag { + base sid-binding-flag; + description + "Mirror Context Flag."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.4"; + } + + identity sf-flag { + base sid-binding-flag; + description + "S-Flag. If set, the Label Binding TLV should be flooded + across the entire routing domain - corresponds to S-Flag in + reference."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.4"; + } + + identity d-flag { + base sid-binding-flag; + description + "Leaking Flag."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.4"; + } + + identity a-flag { + base sid-binding-flag; + description + "Attached Flag."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.4"; + } + + /* Groupings */ + + grouping sid-tlv-encoding { + description + "SID TLV Encoding - 20-bit label or 32-bit SID index whose + interpretation is dependent on the TLV length (3 for an + MPLS label or 4 for a 32-bit value) or the TLV V-Flag and + L-Flag settings: + + If the V-Flag is set to 0 and L-Flag is set to 0: + The SID/Index/Label field is a 4-octet index defining + the offset in the SID/Label space advertised by this + router. + + If the V-Flag is set to 1 and L-Flag is set to 1: + The SID/Index/Label field is a 3-octet local label where the + 20 rightmost bits are used for encoding the label value."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, + Section 2.1.1.1"; + choice sid { + case sid-label { + leaf label-value { + type uint32 { + range "0 .. 1048575"; + } + description + "A 20-bit MPLS label."; + } + } + case sid-index { + leaf index-value { + type uint32; + description + "Index into a label space advertised by this router."; + } + } + description + "Choice of either a 20-bit MPLS label or 32-bit index into + an advertised label space."; + } + } + + grouping sr-capability { + description + "SR-Capability grouping."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 3.1"; + container sr-capability { + description + "SR-Capability flags."; + leaf-list sr-capability-flag { + type identityref { + base sr-capability; + } + description + "SR-Capability sub-TLV flags."; + } + container global-blocks { + description + "Segment Routing Global Blocks (SRGBs)."; + list global-block { + description + "Segment Routing Global Block."; + leaf range-size { + type rt-types:uint24; + description + "The SID range."; + } + uses sid-tlv-encoding; + } + } + } + } + + grouping sr-algorithm { + description + "SR algorithm grouping."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 3.2"; + container sr-algorithms { + description + "All SR algorithms."; + leaf-list sr-algorithm { + type identityref { + base sr-cmn:prefix-sid-algorithm; + } + description + "The SR algorithms that the router is + currently using."; + } + } + } + + grouping srlb { + description + "SR Local Block grouping."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 3.3"; + container local-blocks { + description + "List of Segment Routing Local Blocks (SRLBs)."; + list local-block { + description + "Segment Routing Local Block."; + leaf range-size { + type rt-types:uint24; + description + "The SID range."; + } + uses sid-tlv-encoding; + } + } + } + + grouping srms-preference { + description + "The SR Mapping Server (SRMS) Preference TLV is used to + advertise a preference associated with the node that acts as + an SRMS."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 3.4"; + container srms-preference { + description + "SRMS Preference TLV."; + leaf preference { + type uint8; + description + "SRMS Preference TLV, value from 0 to 255 with + 255 being the most preferred."; + } + } + } + + grouping adjacency-state { + description + "This grouping extends adjacency state."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.2"; + list adjacency-sid { + config false; + description + "List of Adj-SIDs."; + leaf value { + type uint32; + description + "Value of the Adj-SID."; + } + leaf address-family { + type iana-rt-types:address-family; + description + "Address-family associated with the + segment ID."; + } + leaf weight { + type uint8; + description + "Weight associated with + the Adj-SID."; + } + leaf protection-requested { + type boolean; + description + "Describe if the Adj-SID + must be protected."; + } + } + } + + grouping prefix-sid-sub-tlv { + description + "This grouping defines the SR Prefix Segment + Identifier (Prefix-SID) sub-TLV."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.1"; + container prefix-sid-sub-tlvs { + description + "Prefix-SID sub-TLVs."; + list prefix-sid-sub-tlv { + description + "List of Prefix-SID sub-TLVs."; + container prefix-sid-flags { + description + "Describes flags associated with the + segment ID."; + leaf-list flag { + type identityref { + base prefix-sid-flag; + } + description + "Prefix-SID sub-TLV flags."; + } + } + leaf algorithm { + type identityref { + base sr-cmn:prefix-sid-algorithm; + } + description + "Algorithm to be used for path computation."; + } + uses sid-tlv-encoding; + } + } + } + + grouping adjacency-segment-id { + description + "This grouping defines SR extensions + for adjacencies."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, Section 2.2"; + container adj-sid-sub-tlvs { + description + "Adj-SID optional sub-TLVs."; + list adj-sid-sub-tlv { + description + "List of segments."; + container adj-sid-flags { + description + "Adj-SID sub-TLV flags."; + leaf-list flag { + type identityref { + base adj-sid-flag; + } + description + "Adj-SID sub-TLV flags list."; + } + } + leaf weight { + type uint8; + description + "The value represents the weight of the Adj-SID + for the purpose of load balancing."; + } + leaf neighbor-id { + type isis:system-id; + description + "Describes the system ID of the neighbor + associated with the SID value. This is only + used on LAN adjacencies."; + } + uses sid-tlv-encoding; + } + } + } + + grouping sid-binding-tlv { + description + "SID/Label Binding TLV, type 149."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, + Section 2.4"; + leaf prefix { + type inet:ip-prefix; + description + "The prefix represents the Forwarding Equivalence + Class (FEC) at the tail end of the advertised path."; + } + leaf range { + type uint16; + description + "Provides the ability to specify a range of addresses + and their associated Prefix-SIDs."; + } + container sid-binding-flags { + description + "Binding TLV flags."; + leaf-list flag { + type identityref { + base sid-binding-flag; + } + description + "SID Binding TLV flags."; + } + } + list prefix-sid-sub-tlvs { + description + "List of Prefix-SID sub-TLVs."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, + Section 2.4.4"; + uses prefix-sid-sub-tlv; + } + list sid-sub-tlv { + description + "List of Prefix-SID sub-TLVs."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, + Section 2.4.5"; + uses sid-tlv-encoding; + } + uses isis:unknown-tlvs; + } + + /* Configuration */ + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol" + + "/isis:isis" { + when "derived-from-or-self(../rt:type, 'isis:isis')" { + description + "This augments the IS-IS routing protocol when used."; + } + description + "This augments the IS-IS protocol configuration + with SR for the MPLS data plane."; + uses sr-mpls:sr-control-plane; + container protocol-srgb { + if-feature "sr-mpls:protocol-srgb"; + description + "Per-protocol SRGB."; + reference + "RFC 8402: Segment Routing Architecture, Section 2"; + uses sr-cmn:srgb; + } + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol" + + "/isis:isis/isis:interfaces/isis:interface" { + when "derived-from-or-self(../../../rt:type, 'isis:isis')" { + description + "This augments the IS-IS routing protocol when used."; + } + description + "This augments the IS-IS protocol configuration + with SR."; + uses sr-mpls:igp-interface { + augment "segment-routing/adjacency-sid/adj-sids" { + when "../../../isis:interface-type = 'broadcast'" { + description + "This augments the broadcast interface."; + } + description + "This augments the LAN interface adj-sid with system-id."; + leaf neighbor-system-id { + type isis:system-id; + mandatory true; + description + "Neighbor system ID."; + } + } + } + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol" + + "/isis:isis/isis:interfaces/isis:interface" + + "/isis:fast-reroute/isis:lfa" { + when "derived-from-or-self(../../../../../rt:type," + + "'isis:isis')" { + description + "This augments the IS-IS routing protocol when used."; + } + description + "This augments the IS-IS interface IP Fast Reroute (IP-FRR) + with TI-LFA."; + container ti-lfa { + if-feature "ti-lfa"; + description + "Topology Independent Loop-Free Alternate + (TI-LFA) support."; + leaf enabled { + type boolean; + default "false"; + description + "Enables TI-LFA computation."; + } + container selection-tie-breakers { + description + "Configure path selection tie-breakers and their + respective priorities for the TI-LFA computation."; + container node-protection { + presence "Presence of container enables the node + protection tie-breaker."; + description + "Enable node protection as a TI-LFA path + selection tie-breaker. A path providing node + protection will be selected over one that + doesn't provide node protection."; + leaf priority { + type uint8; + default "128"; + description + "Priority for node protection tie-breaker with + a lower priority being more preferred."; + } + } + container srlg-disjoint { + presence "Presence of container enables the SRLG + disjoint tie-breaker."; + description + "Enable Shared Risk Link Group (SRLG) + disjoint as a TI-LFA path selection tie-breaker. + A path providing a node with a disjoint path for SRLG + links from the primary path will be selected over + a path that doesn't provide an SRLG disjoint path."; + leaf priority { + type uint8; + default "128"; + description + "Priority for SRLG disjoint tie-breaker with + a lower priority being more preferred."; + } + } + } + } + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol" + + "/isis:isis/isis:interfaces/isis:interface" + + "/isis:fast-reroute/isis:lfa/isis:level-1" { + when "derived-from-or-self(../../../../../../rt:type," + + "'isis:isis')" { + description + "This augments the IS-IS routing protocol when used."; + } + description + "This augments the IS-IS interface level-1 IP FRR with + TI-LFA."; + container ti-lfa { + if-feature "ti-lfa"; + description + "TI-LFA configuration."; + leaf enabled { + type boolean; + default "false"; + description + "Enables TI-LFA computation."; + } + } + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol" + + "/isis:isis/isis:interfaces/isis:interface" + + "/isis:fast-reroute/isis:lfa/isis:level-2" { + when "derived-from-or-self(../../../../../../rt:type," + + "'isis:isis')" { + description + "This augments the IS-IS routing protocol when used."; + } + description + "This augments the IS-IS interface level-2 IP FRR with + TI-LFA."; + container ti-lfa { + if-feature "ti-lfa"; + description + "TI-LFA configuration."; + leaf enabled { + type boolean; + default "false"; + description + "Enables TI-LFA computation."; + } + } + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol" + + "/isis:isis/isis:interfaces/isis:interface" + + "/isis:fast-reroute/isis:lfa/isis:remote-lfa" { + when "derived-from-or-self(../../../../../../rt:type," + + "'isis:isis')" { + description + "This augments the IS-IS routing protocol when used."; + } + description + "This augments the IS-IS RLFA configuration with + use of the SR path."; + leaf use-segment-routing-path { + if-feature "remote-lfa-sr"; + type boolean; + default "false"; + description + "Force RLFA to use the SR path instead of + LDP path. The value of this leaf is in effect only when + remote-lfa is enabled."; + } + } + + /* Operational states */ + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol" + + "/isis:isis/isis:interfaces/isis:interface" + + "/isis:adjacencies/isis:adjacency" { + when "derived-from-or-self(../../../../../rt:type," + + "'isis:isis')" { + description + "This augments the IS-IS routing protocol when used."; + } + description + "This augments the IS-IS protocol configuration + with SR."; + uses adjacency-state; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol" + + "/isis:isis/isis:database/isis:levels/isis:lsp" + + "/isis:router-capabilities/isis:router-capability" { + when "derived-from-or-self(../../../../../../rt:type," + + "'isis:isis')" { + description + "This augments the IS-IS routing protocol when used."; + } + description + "This augments the IS-IS protocol Link State Database (LSDB) + router capability."; + uses sr-capability; + uses sr-algorithm; + uses srlb; + uses srms-preference; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol" + + "/isis:isis/isis:database/isis:levels/isis:lsp" + + "/isis:extended-is-neighbor/isis:neighbor/isis:instances" + + "/isis:instance" { + when "derived-from-or-self(../../../../../../../../rt:type," + + "'isis:isis')" { + description + "This augments the IS-IS routing protocol when used."; + } + description + "This augments the IS-IS protocol LSDB neighbor."; + uses adjacency-segment-id; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol" + + "/isis:isis/isis:database/isis:levels/isis:lsp" + + "/isis:mt-is-neighbor/isis:neighbor/isis:instances" + + "/isis:instance" { + when "derived-from-or-self(../../../../../../../../rt:type," + + "'isis:isis')" { + description + "This augments the IS-IS routing protocol when used."; + } + description + "This augments the IS-IS protocol LSDB neighbor."; + uses adjacency-segment-id; + } + + 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 "derived-from-or-self(../../../../../../rt:type," + + "'isis:isis')" { + description + "This augments the IS-IS routing protocol when used."; + } + description + "This augments the IS-IS protocol LSDB prefix."; + uses prefix-sid-sub-tlv; + } + + 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 "derived-from-or-self(../../../../../../rt:type," + + "'isis:isis')" { + description + "This augments the IS-IS routing protocol when used."; + } + description + "This augments the IS-IS protocol LSDB prefix."; + uses prefix-sid-sub-tlv; + } + + 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 "derived-from-or-self(../../../../../../rt:type," + + "'isis:isis')" { + description + "This augments the IS-IS routing protocol when used."; + } + description + "This augments the IS-IS protocol LSDB prefix."; + uses prefix-sid-sub-tlv; + } + + 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 "derived-from-or-self(../../../../../../rt:type," + + "'isis:isis')" { + description + "This augments the IS-IS routing protocol when used."; + } + description + "This augments the IS-IS protocol LSDB prefix."; + uses prefix-sid-sub-tlv; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol" + + "/isis:isis/isis:database/isis:levels/isis:lsp" { + when "derived-from-or-self(../../../../rt:type," + + "'isis:isis')" { + description + "This augments the IS-IS routing protocol when used."; + } + description + "This augments the IS-IS protocol LSDB."; + container sid-binding-tlvs { + description + "List of SID/Label Binding TLVs."; + list sid-binding-tlv { + key "prefix"; + description + "SID/Label Binding TLV, type 149."; + uses sid-binding-tlv; + } + } + container mt-sid-binding-tlvs { + description + "List of Multi-Topology SID/Label Binding TLVs."; + list mt-sid-binding-tlv { + key "prefix mt-id"; + description + "Multi-Topology SID/Label Binding TLV, type 150."; + reference + "RFC 8667: IS-IS Extensions for Segment Routing, + Section 2.5"; + uses sid-binding-tlv; + leaf mt-id { + type uint16; + description + "A 12-bit field containing the non-zero ID + of the topology."; + } + } + } + } +} diff --git a/standard/ietf/RFC/ietf-ospf-admin-tags.yang b/standard/ietf/RFC/ietf-ospf-admin-tags.yang new file mode 120000 index 000000000..ff8f50cfa --- /dev/null +++ b/standard/ietf/RFC/ietf-ospf-admin-tags.yang @@ -0,0 +1 @@ +ietf-ospf-admin-tags@2025-07-31.yang \ No newline at end of file diff --git a/standard/ietf/RFC/ietf-ospf-admin-tags@2025-07-31.yang b/standard/ietf/RFC/ietf-ospf-admin-tags@2025-07-31.yang new file mode 100644 index 000000000..71f494c15 --- /dev/null +++ b/standard/ietf/RFC/ietf-ospf-admin-tags@2025-07-31.yang @@ -0,0 +1,307 @@ +module ietf-ospf-admin-tags { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-ospf-admin-tags"; + prefix ospf-admin-tags; + + import ietf-routing { + prefix rt; + reference + "RFC 8349: A YANG Data Model for Routing + Management (NMDA Version)"; + } + import ietf-ospf { + prefix ospf; + reference + "RFC 9129: YANG Data Model for the OSPF Protocol"; + } + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types"; + } + import ietf-ospfv3-extended-lsa { + prefix ospfv3-e-lsa; + reference + "RFC 9587: YANG Data Model for OSPFv3 Extended Link + State Advertisements (LSAs)"; + } + + organization + "IETF LSR - Link State Routing Working Group"; + contact + "WG Web: + WG List: + + Author: Yingzhen Qu + + Author: Acee Lindem + + Author: Peter Psenak + "; + description + "This YANG module defines the configuration + and operational state for OSPF administrative tags. + + This YANG data 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 9825; + see the RFC itself for full legal notices."; + reference + "RFC 9825: Extensions to OSPF for Advertising Prefix + Administrative Tags."; + + revision 2025-07-31 { + description + "Initial revision."; + reference + "RFC 9825: Extensions to OSPF for Advertising Prefix + Administrative Tags."; + } + + grouping prefix-admin-tag-sub-tlv { + description + "Prefix Administrative Tag Sub-TLVs."; + container prefix-admin-tag-sub-tlv { + config false; + description + "Prefix Administrative Tag Sub-TLV."; + leaf-list admin-tag { + type uint32; + description + "Administrative tags."; + } + } + } + + /* Configuration */ + + augment "/rt:routing/rt:control-plane-protocols" + + "/rt:control-plane-protocol/ospf:ospf" + + "/ospf:areas/ospf:area/ospf:ranges/ospf:range" { + when "derived-from-or-self(../../../../.." + + "/rt:type, 'ospf:ospf')" { + description + "This augments the OSPF routing protocol area range + configuration."; + } + description + "This augments the OSPF protocol area range configuration + with administrative tags. The configured tags will be + advertised with summary prefix when it is active."; + container admin-tags { + when "../ospf:advertise = 'true'"; + leaf-list admin-tag { + type uint32; + description + "Administrative tags."; + } + description + "OSPF prefix administrative tags."; + } + } + + augment "/rt:routing/rt:control-plane-protocols" + + "/rt:control-plane-protocol/ospf:ospf" + + "/ospf:areas/ospf:area/ospf:interfaces/ospf:interface" { + when "derived-from-or-self(../../../../.." + + "/rt:type, 'ospf:ospf')" { + description + "This augments the OSPF routing protocol interface + configuration."; + } + description + "This augments the OSPF protocol interface configuration + with Administrative Tags. The configured tags will be + advertised with local prefixes configured for the interface."; + container local-prefix-admin-tags { + leaf-list default-admin-tag { + type uint32; + description + "Administrative tags that will be associated with + local prefixes if the prefix is not specified explicitly. + If omitted, no administrative tags are associated with + local prefixes by default."; + } + list specific-prefix-admin-tag { + key "prefix"; + leaf prefix { + type inet:ip-prefix; + description + "IPv4 or IPv6 prefix."; + } + leaf-list admin-tag { + type uint32; + description + "Administrative tags that will be associated with + the specified local prefix. If omitted, no + administrative tags are associated with the specified + local prefix."; + } + description + "Administrative tags that are explicitly associated with + the specified prefix."; + } + description + "List of administrative tags that are to be advertised + with interface local prefixes."; + } + } + + /* Local-RIB */ + + augment "/rt:routing" + + "/rt:control-plane-protocols/rt:control-plane-protocol" + + "/ospf:ospf/ospf:local-rib/ospf:route/ospf:next-hops" + + "/ospf:next-hop" { + description + "This augments local-rib next-hop with administrative tags."; + leaf-list admin-tag { + type uint32; + description + "Administrative tags."; + } + } + + /* Database */ + + augment "/rt:routing" + + "/rt:control-plane-protocols/rt:control-plane-protocol" + + "/ospf:ospf/ospf:areas/ospf:area" + + "/ospf:interfaces/ospf:interface/ospf:database" + + "/ospf:link-scope-lsa-type/ospf:link-scope-lsas" + + "/ospf:link-scope-lsa/ospf:version/ospf:ospfv2" + + "/ospf:ospfv2/ospf:body/ospf:opaque" + + "/ospf:extended-prefix-opaque/ospf:extended-prefix-tlv" { + when "derived-from-or-self(../../../../../../../../../.." + + "/../../../../rt:type, 'ospf:ospfv2')" { + description + "This augmentation is only valid for OSPFv2."; + } + description + "Prefix Administrative Tag Sub-TLVs for OSPFv2 extended prefix + TLV in type 9 opaque LSA."; + uses prefix-admin-tag-sub-tlv; + } + + augment "/rt:routing" + + "/rt:control-plane-protocols/rt:control-plane-protocol" + + "/ospf:ospf/ospf:areas" + + "/ospf:area/ospf:database" + + "/ospf:area-scope-lsa-type/ospf:area-scope-lsas" + + "/ospf:area-scope-lsa/ospf:version/ospf:ospfv2" + + "/ospf:ospfv2/ospf:body/ospf:opaque" + + "/ospf:extended-prefix-opaque/ospf:extended-prefix-tlv" { + when "derived-from-or-self(../../../../../../../../../.." + + "/../../rt:type, 'ospf:ospfv2')" { + description + "This augmentation is only valid for OSPFv2."; + } + description + "Prefix Administrative Tag Sub-TLVs for OSPFv2 extended prefix + TLV in type 10 opaque LSA."; + uses prefix-admin-tag-sub-tlv; + } + + augment "/rt:routing" + + "/rt:control-plane-protocols/rt:control-plane-protocol" + + "/ospf:ospf/ospf:database" + + "/ospf:as-scope-lsa-type/ospf:as-scope-lsas" + + "/ospf:as-scope-lsa/ospf:version/ospf:ospfv2" + + "/ospf:ospfv2/ospf:body/ospf:opaque" + + "/ospf:extended-prefix-opaque/ospf:extended-prefix-tlv" { + when "derived-from-or-self(../../../../../../../.." + + "/../../rt:type, 'ospf:ospfv2')" { + description + "This augmentation is only valid for OSPFv2."; + } + description + "Prefix Administrative Tag Sub-TLVs for OSPFv2 extended prefix + TLV in type 11 opaque LSA."; + uses prefix-admin-tag-sub-tlv; + } + + augment "/rt:routing" + + "/rt:control-plane-protocols/rt:control-plane-protocol" + + "/ospf:ospf/ospf:areas/ospf:area/ospf:database" + + "/ospf:area-scope-lsa-type/ospf:area-scope-lsas" + + "/ospf:area-scope-lsa/ospf:version/ospf:ospfv3" + + "/ospf:ospfv3/ospf:body/ospfv3-e-lsa:e-inter-area-prefix" + + "/ospfv3-e-lsa:e-inter-prefix-tlvs" + + "/ospfv3-e-lsa:inter-prefix-tlv" { + when "derived-from-or-self(../../../../../../../../../.." + + "/../../rt:type, 'ospf:ospfv3')" { + description + "This augmentation is only valid for OSPFv3."; + } + description + "Augment OSPFv3 Inter-Area-Prefix TLV in the + E-Inter-Area-Prefix-LSA."; + uses prefix-admin-tag-sub-tlv; + } + + augment "/rt:routing" + + "/rt:control-plane-protocols/rt:control-plane-protocol" + + "/ospf:ospf/ospf:areas/ospf:area/ospf:database" + + "/ospf:area-scope-lsa-type/ospf:area-scope-lsas" + + "/ospf:area-scope-lsa/ospf:version/ospf:ospfv3" + + "/ospf:ospfv3/ospf:body/ospfv3-e-lsa:e-intra-area-prefix" + + "/ospfv3-e-lsa:e-intra-prefix-tlvs" + + "/ospfv3-e-lsa:intra-prefix-tlv" { + when "/rt:routing/rt:control-plane-protocols" + + "/rt:control-plane-protocol/rt:type = 'ospf:ospfv3'" { + description + "This augmentation is only valid for OSPFv3."; + } + description + "Augment OSPFv3 Intra-Area-Prefix TLV in the + E-Intra-Area-Prefix-LSA."; + uses prefix-admin-tag-sub-tlv; + } + + augment "/rt:routing" + + "/rt:control-plane-protocols/rt:control-plane-protocol" + + "/ospf:ospf/ospf:database" + + "/ospf:as-scope-lsa-type/ospf:as-scope-lsas" + + "/ospf:as-scope-lsa/ospf:version/ospf:ospfv3" + + "/ospf:ospfv3/ospf:body/ospfv3-e-lsa:e-as-external" + + "/ospfv3-e-lsa:e-external-tlvs" + + "/ospfv3-e-lsa:external-prefix-tlv" { + when "derived-from-or-self(../../../../../../../.." + + "/../../rt:type, 'ospf:ospfv3')" { + description + "This augmentation is only valid for OSPFv3."; + } + description + "Augment OSPFv3 External-Prefix TLV in the E-AS-External-LSA."; + uses prefix-admin-tag-sub-tlv; + } + + augment "/rt:routing" + + "/rt:control-plane-protocols/rt:control-plane-protocol" + + "/ospf:ospf/ospf:areas/ospf:area/ospf:database" + + "/ospf:area-scope-lsa-type/ospf:area-scope-lsas" + + "/ospf:area-scope-lsa/ospf:version/ospf:ospfv3" + + "/ospf:ospfv3/ospf:body/ospfv3-e-lsa:e-nssa" + + "/ospfv3-e-lsa:e-external-tlvs" + + "/ospfv3-e-lsa:external-prefix-tlv" { + when "/rt:routing/rt:control-plane-protocols" + + "/rt:control-plane-protocol/rt:type = 'ospf:ospfv3'" { + description + "This augmentation is only valid for OSPFv3."; + } + description + "Augment OSPFv3 External-Prefix TLV in the E-NSSA-LSA."; + uses prefix-admin-tag-sub-tlv; + } +} \ No newline at end of file diff --git a/standard/ietf/RFC/ietf-ospf-sr-mpls.yang b/standard/ietf/RFC/ietf-ospf-sr-mpls.yang new file mode 120000 index 000000000..bcae1e725 --- /dev/null +++ b/standard/ietf/RFC/ietf-ospf-sr-mpls.yang @@ -0,0 +1 @@ +ietf-ospf-sr-mpls@2025-12-09.yang \ No newline at end of file diff --git a/standard/ietf/RFC/ietf-ospf-sr-mpls@2025-12-09.yang b/standard/ietf/RFC/ietf-ospf-sr-mpls@2025-12-09.yang new file mode 100644 index 000000000..a85cdf48e --- /dev/null +++ b/standard/ietf/RFC/ietf-ospf-sr-mpls@2025-12-09.yang @@ -0,0 +1,1321 @@ +module ietf-ospf-sr-mpls { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-ospf-sr-mpls"; + prefix ospf-sr-mpls; + + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types"; + } + import ietf-routing-types { + prefix rt-types; + reference + "RFC 8294: Common YANG Data Types for the Routing Area"; + } + import iana-routing-types { + prefix iana-rt-types; + reference + "RFC 8294: Common YANG Data Types for the Routing Area"; + } + import ietf-routing { + prefix rt; + reference + "RFC 8349: A YANG Data Model for Routing + Management (NMDA Version)"; + } + import ietf-segment-routing-common { + prefix sr-cmn; + reference + "RFC 9020: YANG Data Model for Segment Routing"; + } + import ietf-segment-routing-mpls { + prefix sr-mpls; + reference + "RFC 9020: YANG Data Model for Segment Routing"; + } + import ietf-ospf { + prefix ospf; + reference + "RFC 9129: YANG Data Model for the OSPF Protocol"; + } + import ietf-ospfv3-extended-lsa { + prefix ospfv3-e-lsa; + reference + "RFC 9587: YANG Data Model for OSPFv3 Extended LSAs"; + } + + organization + "IETF LSR - Link State Routing Working Group"; + contact + "WG Web: + WG List: + + Author: Yingzhen Qu + + Author: Acee Lindem + + Author: Jeffrey Zhang + + Author: Ing-Wher Chen + "; + description + "This YANG module defines the generic configuration + and operational state for OSPF Segment Routing (SR). + + 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. + + 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). + + All revisions of IETF and IANA published modules can be found + at the YANG Parameters registry + (https://www.iana.org/assignments/yang-parameters). + + This version of this YANG module is part of RFC 9903; see + the RFC itself for full legal notices."; + + revision 2025-12-09 { + description + "Initial revision."; + reference + "RFC 9903: A YANG Data Model for OSPF Segment Routing + over the MPLS Data Plane"; + } + + feature remote-lfa-sr { + description + "Enhance Remote Loop-Free Alternate (RLFA) to use an SR path."; + reference + "RFC 8102: Remote-LFA Node Protection and Manageability"; + } + + feature ti-lfa { + description + "Topology Independent Loop-Free Alternate (TI-LFA) + computation using Segment Routing."; + reference + "RFC 9855: Topology Independent Fast Reroute Using Segment + Routing"; + } + + identity prefix-sid-flag { + description + "Base identity for Prefix-SID Sub-TLV flags."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 5 + RFC 8666: OSPFv3 Extensions for Segment Routing, Section 6"; + } + + identity np-flag { + base prefix-sid-flag; + description + "No-PHP (No Penultimate Hop-Popping) flag."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 5 + RFC 8666: OSPFv3 Extensions for Segment Routing, Section 6"; + } + + identity m-flag { + base prefix-sid-flag; + description + "Mapping server flag."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 5 + RFC 8666: OSPFv3 Extensions for Segment Routing, Section 6"; + } + + identity e-flag { + base prefix-sid-flag; + description + "Explicit-NULL flag."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 5 + RFC 8666: OSPFv3 Extensions for Segment Routing, Section 6"; + } + + identity v-flag { + base prefix-sid-flag; + description + "Value/Index flag."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 5 + RFC 8666: OSPFv3 Extensions for Segment Routing, Section 6"; + } + + identity l-flag { + base prefix-sid-flag; + description + "Local flag."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 5 + RFC 8666: OSPFv3 Extensions for Segment Routing, Section 6"; + } + + identity extended-prefix-range-flag { + description + "Base identity for Extended Prefix Range TLV flags."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 4 + RFC 8666: OSPFv3 Extensions for Segment Routing, Section 5"; + } + + identity ia-flag { + base extended-prefix-range-flag; + description + "Inter-Area flag. Note that this is only applicable to OSPFv2 + since OSPFv3 advertises separate Inter-Area extended-LSAs."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 4"; + } + + identity adj-sid-flag { + description + "Base identity for Adj-SID Sub-TLV flags."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 6 + RFC 8666: OSPFv3 Extensions for Segment Routing, Section 7"; + } + + identity b-flag { + base adj-sid-flag; + description + "Backup flag."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 6 + RFC 8666: OSPFv3 Extensions for Segment Routing, Section 7"; + } + + identity vi-flag { + base adj-sid-flag; + description + "Value/Index flag - corresponds to V-Flag in references."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 6 + RFC 8666: OSPFv3 Extensions for Segment Routing, Section 7"; + } + + identity lg-flag { + base adj-sid-flag; + description + "Local/Global flag - corresponds to L-Flag in references."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 6 + RFC 8666: OSPFv3 Extensions for Segment Routing, Section 7"; + } + + identity g-flag { + base adj-sid-flag; + description + "Group flag."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 6 + RFC 8666: OSPFv3 Extensions for Segment Routing, Section 7"; + } + + identity p-flag { + base adj-sid-flag; + description + "Persistent flag."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 6 + RFC 8666: OSPFv3 Extensions for Segment Routing, Section 7"; + } + + /* Groupings */ + + grouping sid-tlv-encoding { + description + "SID TLV Encoding - 20-bit label or 32-bit SID index whose + interpretation is dependent on the TLV length (3 for an + MPLS label or 4 for a 32-bit value) or the TLV V-Flag and + L-Flag settings: + + If the V-Flag is set to 0 and L-Flag is set to 0: + The SID/Index/Label field is a 4-octet index defining + the offset in the SID/Label space advertised by this + router. + + If the V-Flag is set to 1 and L-Flag is set to 1: + The SID/Index/Label field is a 3-octet local label where the + 20 rightmost bits are used for encoding the label value."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 2.1 + RFC 8665: OSPF Extensions for Segment Routing, Section 5 + RFC 8666: OSPFv3 Extensions for Segment Routing, Section 3"; + choice sid { + case sid-label { + leaf label-value { + type uint32 { + range "0 .. 1048575"; + } + description + "A 20-bit MPLS label."; + } + } + case sid-index { + leaf index-value { + type uint32; + description + "Index into a label space advertised by this router."; + } + } + description + "Choice of either a 20-bit MPLS label or 32-bit index into + an advertised label space."; + } + } + + grouping ospfv2-prefix-sid-sub-tlvs { + description + "OSPFv2 Prefix Segment ID (SID) Sub-TLVs."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 5"; + container prefix-sid-sub-tlvs { + description + "Prefix-SID Sub-TLV."; + list prefix-sid-sub-tlv { + description + "Prefix-SID Sub-TLV."; + container prefix-sid-flags { + leaf-list flag { + type identityref { + base prefix-sid-flag; + } + description + "Prefix-SID Sub-TLV flags."; + } + description + "SID flags."; + } + leaf mt-id { + type uint8 { + range "0 .. 127"; + } + description + "Multi-topology ID."; + reference + "RFC 4915: Multi-Topology (MT) Routing in OSPF"; + } + leaf algorithm { + type identityref { + base sr-cmn:prefix-sid-algorithm; + } + description + "Algorithm associated with the Prefix-SID."; + } + uses sid-tlv-encoding; + } + } + } + + grouping ospfv2-extended-prefix-range-tlvs { + description + "OSPFv2 Extended Prefix Range TLV grouping."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 4"; + container extended-prefix-range-tlvs { + description + "List of prefix ranges."; + list extended-prefix-range-tlv { + description + "Range of prefixes."; + leaf prefix-length { + type uint8; + description + "Length of prefix in bits."; + } + leaf af { + type iana-rt-types:address-family; + description + "Address family for the prefix."; + } + leaf range-size { + type uint16; + description + "Number of prefixes covered by the + advertisement."; + } + container extended-prefix-range-flags { + leaf-list flag { + type identityref { + base extended-prefix-range-flag; + } + description + "Extended Prefix Range TLV flags."; + } + description + "Extended Prefix Range TLV flags."; + } + leaf prefix { + type inet:ipv4-prefix; + description + "IPv4 prefix."; + } + uses ospfv2-prefix-sid-sub-tlvs; + uses ospf:unknown-tlvs; + } + } + } + + grouping ospfv2-adj-sid-sub-tlvs { + description + "OSPFv2 Adj-SID Sub-TLV grouping."; + container adj-sid-sub-tlvs { + description + "Adj-SID optional sub-TLVs."; + list adj-sid-sub-tlv { + description + "List of Adj-SID Sub-TLVs."; + container adj-sid-flags { + leaf-list flag { + type identityref { + base adj-sid-flag; + } + description + "Adj-SID Sub-TLV flags."; + } + description + "Adj-SID Sub-TLV flags."; + } + leaf mt-id { + type uint8 { + range "0 .. 127"; + } + description + "Multi-topology ID. Topologies range from 0-127 and + return of any other value would indicate an error."; + reference + "RFC 4915: Multi-Topology (MT) Routing in OSPF"; + } + leaf weight { + type uint8; + description + "Weight used for load-balancing."; + } + uses sid-tlv-encoding; + } + } + } + + grouping ospfv2-lan-adj-sid-sub-tlvs { + description + "OSPFv2 LAN Adj-SID Sub-TLV grouping."; + container lan-adj-sid-sub-tlvs { + description + "LAN Adj-SID optional sub-TLVs."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 6"; + list lan-adj-sid-sub-tlv { + description + "List of LAN Adj-SID Sub-TLVs."; + container lan-adj-sid-flags { + leaf-list flag { + type identityref { + base adj-sid-flag; + } + description + "LAN Adj-SID Sub-TLV flags."; + } + description + "LAN Adj-SID Sub-TLV flags."; + } + leaf mt-id { + type uint8 { + range "0 .. 127"; + } + description + "Multi-topology ID. Topologies range from 0-127 and + return of any other value would indicate an error."; + reference + "RFC 4915: Multi-Topology (MT) Routing in OSPF"; + } + leaf weight { + type uint8; + description + "Weight used for load-balancing."; + } + leaf neighbor-router-id { + type rt-types:router-id; + description + "Neighbor router ID."; + } + uses sid-tlv-encoding; + } + } + } + + grouping sr-algorithm-tlv { + description + "SR-Algorithm TLV grouping."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 3.1"; + container sr-algorithm-tlv { + description + "All SR-Algorithm TLVs."; + leaf-list sr-algorithm { + type identityref { + base sr-cmn:prefix-sid-algorithm; + } + description + "Segment Routing (SR) algorithms that the router is + currently using."; + } + } + } + + grouping sid-range-tlvs { + description + "SID Range TLV grouping."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 3.2"; + container sid-range-tlvs { + description + "List of SID Range TLVs."; + list sid-range-tlv { + description + "SID Range TLV."; + leaf range-size { + type rt-types:uint24; + description + "SID range. The return of a zero value would indicate + an error."; + } + uses sid-tlv-encoding; + } + } + } + + grouping local-block-tlvs { + description + "The SR Local Block TLV contains the + range of labels reserved for local SIDs."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 3.3"; + container local-block-tlvs { + description + "List of Segment Routing Local Block (SRLB) TLVs."; + list local-block-tlv { + description + "SRLB TLV."; + leaf range-size { + type rt-types:uint24; + description + "SID range. The return of a zero value would indicate + an error."; + } + uses sid-tlv-encoding; + } + } + } + + grouping srms-preference-tlv { + description + "The Segment Routing Mapping Server (SRMS) Preference TLV is + used to advertise a preference associated with the node that + acts as an SRMS. SRMS advertisements with a higher + preference value are preferred over those with a lower + preference value."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 3.4"; + container srms-preference-tlv { + description + "SRMS Preference TLV."; + leaf preference { + type uint8; + description + "SRMS Preference TLV, value from 0 to 255 with + 255 being the most preferred."; + } + } + } + + grouping ospfv3-prefix-sid-sub-tlvs { + description + "OSPFv3 Prefix-SID Sub-TLVs."; + reference + "RFC 8666: OSPFv3 Extensions for Segment Routing, Section 6"; + container prefix-sid-sub-tlvs { + description + "Prefix-SID Sub-TLV."; + list prefix-sid-sub-tlv { + description + "Prefix-SID Sub-TLV."; + container ospfv3-prefix-sid-flags { + leaf-list flag { + type identityref { + base prefix-sid-flag; + } + description + "Prefix-SID Sub-TLV flags."; + } + description + "SID flags."; + } + leaf algorithm { + type identityref { + base sr-cmn:prefix-sid-algorithm; + } + description + "Algorithm associated with the Prefix-SID."; + } + uses sid-tlv-encoding; + } + } + } + + grouping ospfv3-extended-prefix-range-tlvs { + description + "OSPFv3 Extended Prefix Range TLV grouping."; + reference + "RFC 8666: OSPFv3 Extensions for Segment Routing, Section 5"; + container ospfv3-extended-prefix-range-tlvs { + description + "List of Extended Prefix Range TLVs."; + list extended-prefix-range-tlv { + description + "Range of prefixes."; + leaf prefix-length { + type uint8; + description + "Length of prefix in bits."; + } + leaf af { + type iana-rt-types:address-family; + description + "Address family for the prefix."; + } + leaf range-size { + type uint16; + description + "Number of prefixes covered by the advertisement. + The return of a value of zero would indicate an error."; + } + leaf prefix { + type inet:ip-prefix; + description + "IPv4 or IPv6 prefix."; + } + uses ospfv3-prefix-sid-sub-tlvs; + uses ospf:unknown-tlvs; + } + } + } + + grouping ospfv3-adj-sid-sub-tlvs { + description + "OSPFv3 Adj-SID Sub-TLV grouping."; + reference + "RFC 8666: OSPFv3 Extensions for Segment Routing, Section 7"; + container adj-sid-sub-tlvs { + description + "Adj-SID optional sub-TLVs."; + list adj-sid-sub-tlv { + description + "List of Adj-SID Sub-TLVs."; + container adj-sid-flags { + leaf-list flag { + type identityref { + base adj-sid-flag; + } + description + "Adj-SID Sub-TLV flags."; + } + description + "Adj-SID Sub-TLV flags."; + } + leaf weight { + type uint8; + description + "Weight used for load-balancing."; + } + uses sid-tlv-encoding; + } + } + } + + grouping ospfv3-lan-adj-sid-sub-tlvs { + description + "OSPFv3 LAN Adj-SID Sub-TLV grouping."; + reference + "RFC 8666: OSPFv3 Extensions for Segment Routing, Section 7"; + container lan-adj-sid-sub-tlvs { + description + "LAN Adj-SID optional sub-TLVs."; + list lan-adj-sid-sub-tlv { + description + "List of LAN Adj-SID Sub-TLVs."; + container lan-adj-sid-flags { + leaf-list flag { + type identityref { + base adj-sid-flag; + } + description + "LAN Adj-SID Sub-TLV flags."; + } + description + "LAN Adj-SID Sub-TLV flags."; + } + leaf weight { + type uint8; + description + "Weight used for load-balancing."; + } + leaf neighbor-router-id { + type rt-types:router-id; + description + "Neighbor router ID."; + } + uses sid-tlv-encoding; + } + } + } + + /* + * Augmentations for OSPF SR-MPLS Configuration (read-write) + * data nodes. + */ + + augment "/rt:routing/rt:control-plane-protocols" + + "/rt:control-plane-protocol/ospf:ospf" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospf')" { + description + "This augments the OSPF routing protocol when used."; + } + description + "This augments the OSPF protocol configuration with Segment + Routing over the MPLS data plane. The following semantic + validation is to be performed for the configuration data: + - Assure prefixes specified in binding policies do not + overlap."; + reference + "RFC 9020: YANG Data Model for Segment Routing"; + uses sr-mpls:sr-control-plane; + container protocol-srgb { + if-feature "sr-mpls:protocol-srgb"; + uses sr-cmn:srgb; + description + "Per-protocol SRGB."; + } + } + + augment "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/ospf:ospf/" + + "ospf:areas/ospf:area" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospf') and " + + "/rt:routing/rt:control-plane-protocols" + + "/rt:control-plane-protocol/ospf:ospf" + + "/ospf-sr-mpls:segment-routing/" + + "ospf-sr-mpls:enabled = 'true'" { + description + "This augments the OSPF area configuration when Segment + Routing is enabled at the OSPF instance level."; + } + container segment-routing { + presence "When present, SR-MPLS is enabled + for the area."; + description + "OSPF area level Segment Routing configuration. Enables + SR-MPLS on all interfaces, and enables advertisement of + Link State Advertisements (LSAs) and TLVs supporting + SR-MPLS."; + } + description + "This augments the OSPF protocol area configuration with + Segment Routing."; + } + + augment "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/ospf:ospf/" + + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospf') and " + + "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/ospf:ospf/" + + "ospf:areas/ospf:area/ospf-sr-mpls:segment-routing" { + description + "This augments the OSPF interface configuration when used."; + } + description + "This augments the OSPF protocol interface + configuration with Segment Routing."; + reference + "RFC 9020: YANG Data Model for Segment Routing"; + uses sr-mpls:igp-interface { + augment "segment-routing/adjacency-sid/adj-sids" { + when "((../../../ospf:interface-type = 'broadcast') or + (../../../ospf:interface-type = 'non-broadcast'))" { + description + "This augments broadcast and non-broadcast multi-access + interface with Segment Routing interface + configuration."; + } + description + "This augments multi-access interface adj-sids with a + neighbor-id."; + leaf neighbor-id { + type inet:ip-address; + mandatory true; + description + "Neighbor's Router ID, IPv4 address, or IPv6 address. + Specification is optional and, if specified, SHOULD + specify a neighbor reachable via the interface."; + } + } + } + } + + augment "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/ospf:ospf/" + + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface/" + + "ospf:fast-reroute/ospf:lfa" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospf')" { + description + "This augments the OSPF routing protocol when used."; + } + description + "This augments the OSPF protocol IP Fast Reroute (IP-FRR) with + TI-LFA."; + container ti-lfa { + if-feature "ti-lfa"; + description + "Topology Independent Loop Free Alternate + (TI-LFA) support."; + reference + "RFC 9855: Topology Independent Fast Reroute Using Segment + Routing"; + leaf enabled { + type boolean; + default "false"; + description + "Enable TI-LFA computation."; + } + container selection-tie-breakers { + container node-protection { + presence "Presence of container enables the node + protection tie-breaker."; + leaf priority { + type uint8; + default "128"; + description + "Priority for node protection tie-breaker with + a lower priority being more preferred. By default, + the priority is in the middle of the priority range."; + } + description + "Enable node protection as a TI-LFA path + selection tie-breaker. A path providing node + protection will be selected over one that + doesn't provide node protection."; + } + container srlg-disjoint { + presence "Presence of container enables the SRLG + disjoint tie-breaker."; + leaf priority { + type uint8; + default "128"; + description + "Priority for Shared Risk Link Group (SRLG) + disjoint tie-breaker with a lower priority being + more preferred. By default, the priority is in the + middle of the priority range."; + } + description + "Enable SRLG disjoint as a TI-LFA path selection + tie-breaker. A path providing a node with a disjoint + path for SRLG links from the primary path will be + selected over a path that doesn't provide an SRLG + disjoint path."; + } + description + "Configure path selection tie-breakers and their + respective priorities for the TI-LFA computation. + Multiple tie-breakers and priorities may be configured."; + } + } + } + + augment "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/ospf:ospf/" + + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface/" + + "ospf:fast-reroute/ospf:lfa/ospf:remote-lfa" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospf')" { + description + "This augments the OSPF routing protocol when used."; + } + description + "This augments the OSPF protocol IP-FRR with RLFA."; + reference + "RFC 9855: Topology Independent Fast Reroute Using Segment + Routing"; + leaf use-segment-routing-path { + if-feature "remote-lfa-sr"; + type boolean; + default "false"; + description + "Force RLFA to use a Segment Routing path instead of an + LDP path. The value of this leaf is in effect only when + remote-lfa is enabled."; + } + } + + /* Operational states */ + + augment "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/ospf:ospf/" + + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface/" + + "ospf:neighbors/ospf:neighbor" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospf')" { + description + "This augments the OSPF routing protocol when used."; + } + description + "This augments the OSPF interface adjacency-sid state."; + list adjacency-sid { + description + "List of Adj-SIDs."; + leaf value { + type uint32; + description + "Value of the Adj-SID."; + } + leaf weight { + type uint8; + description + "Weight associated with the Adj-SID."; + } + leaf protection-requested { + type boolean; + description + "Indicate if the Adj-SID is protected."; + } + } + } + + /* + * Augmentations for read-only data nodes corresponding to Segment + * Routing encodings in OSPFv2 and OSPFv3 Link State Advertisements + * (LSAs) in OSPF Link State Databases (LSDBs) at the instance, + * area, and interface level. + */ + /* Augmentations for OSPFv2 LSAs. */ + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:areas/" + + "ospf:area/ospf:database/" + + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" + + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" + + "ospf:ospfv2/ospf:body/ospf:opaque/" + + "ospf:extended-prefix-opaque" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospfv2')" { + description + "This augmentation is only valid for OSPFv2."; + } + description + "SR Extended Prefix Range TLV in OSPFv2 Type 10 (area-scoped) + Extended Prefix Opaque LSAs."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 4"; + uses ospfv2-extended-prefix-range-tlvs; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:database/" + + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" + + "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/" + + "ospf:ospfv2/ospf:body/ospf:opaque/" + + "ospf:extended-prefix-opaque" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospfv2')" { + description + "This augmentation is only valid for OSPFv2."; + } + description + "SR Extended Prefix Range TLV in OSPFv2 Type 11 (AS-scoped) + Extended Prefix Opaque LSAs."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 4"; + uses ospfv2-extended-prefix-range-tlvs; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:areas/" + + "ospf:area/ospf:database/" + + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" + + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" + + "ospf:ospfv2/ospf:body/ospf:opaque/" + + "ospf:extended-prefix-opaque/ospf:extended-prefix-tlv" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospfv2')" { + description + "This augmentation is only valid for OSPFv2."; + } + description + "SR Prefix-SID Sub-TLVs for OSPFv2 Extended Prefix TLVs + in OSPFv2 Type 10 (area-scoped) Extended Prefix Opaque LSAs."; + uses ospfv2-prefix-sid-sub-tlvs; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 5"; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:database/" + + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" + + "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/" + + "ospf:ospfv2/ospf:body/ospf:opaque/" + + "ospf:extended-prefix-opaque/ospf:extended-prefix-tlv" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospfv2')" { + description + "This augmentation is only valid for OSPFv2."; + } + description + "SR Prefix-SID Sub-TLVs for OSPFv2 Extended Prefix TLVs + in OSPFv2 Type 11 (AS-scoped) Extended Prefix Opaque LSAs."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 5"; + uses ospfv2-prefix-sid-sub-tlvs; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:areas/" + + "ospf:area/ospf:database/" + + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" + + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" + + "ospf:ospfv2/ospf:body/ospf:opaque/" + + "ospf:extended-link-opaque/ospf:extended-link-tlv" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospfv2')" { + description + "This augmentation is only valid for OSPFv2."; + } + description + "SR TLVs for OSPFv2 Extended Link TLV in OSPFv2 Type 10 + (area-scoped) Extended Link Opaque LSAs."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 6"; + uses ospfv2-adj-sid-sub-tlvs; + uses ospfv2-lan-adj-sid-sub-tlvs; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:areas/" + + "ospf:area/ospf:database/" + + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" + + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" + + "ospf:ospfv2/ospf:body/ospf:opaque/ospf:ri-opaque" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospfv2')" { + description + "This augmentation is only valid for OSPFv2."; + } + description + "SR TLVs for OSPFv2 Router Information Type 10 (area-scoped) + Opaque LSAs"; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 3"; + uses sr-algorithm-tlv; + uses sid-range-tlvs; + uses local-block-tlvs; + uses srms-preference-tlv; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:database/" + + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" + + "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/" + + "ospf:ospfv2/ospf:body/ospf:opaque/ospf:ri-opaque" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospfv2')" { + description + "This augmentation is only valid for OSPFv2."; + } + description + "SR TLVs for OSPFv2 Router Information Type 11 (AS-scoped) + Opaque LSAs."; + reference + "RFC 8665: OSPF Extensions for Segment Routing, Section 3"; + uses sr-algorithm-tlv; + uses sid-range-tlvs; + uses local-block-tlvs; + uses srms-preference-tlv; + } + + /* Augmentations for OSPFv3 LSAs. */ + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:database/" + + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" + + "ospf:as-scope-lsa/ospf:version/ospf:ospfv3/" + + "ospf:ospfv3/ospf:body/ospf:router-information" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospfv3')" { + description + "This augmentation is only valid for OSPFv3."; + } + description + "SR-specific TLVs for OSPFv3 Router Information LSA + (area-scoped)."; + reference + "RFC 8666: OSPFv3 Extensions for Segment Routing, Section 4"; + uses sr-algorithm-tlv; + uses sid-range-tlvs; + uses local-block-tlvs; + uses srms-preference-tlv; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:areas/" + + "ospf:area/ospf:database/" + + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" + + "ospf:area-scope-lsa/ospf:version/ospf:ospfv3/" + + "ospf:ospfv3/ospf:body/ospf:router-information" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospfv3')" { + description + "This augmentation is only valid for OSPFv3."; + } + description + "SR-specific TLVs for OSPFv3 Router Information LSA + (AS-scoped)."; + reference + "RFC 8666: OSPFv3 Extensions for Segment Routing, Section 4"; + uses sr-algorithm-tlv; + uses sid-range-tlvs; + uses local-block-tlvs; + uses srms-preference-tlv; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:areas/ospf:area/ospf:database/" + + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" + + "ospf:area-scope-lsa/ospf:version/ospf:ospfv3/" + + "ospf:ospfv3/ospf:body/ospfv3-e-lsa:e-intra-area-prefix" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospfv3')" { + description + "This augmentation is only valid for OSPFv3."; + } + uses ospfv3-extended-prefix-range-tlvs; + description + "SR Extended Prefix Range TLVs in OSPFv3 + E-Intra-Area-Prefix LSAs."; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:areas/ospf:area/ospf:database/" + + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" + + "ospf:area-scope-lsa/ospf:version/ospf:ospfv3/" + + "ospf:ospfv3/ospf:body/ospfv3-e-lsa:e-inter-area-prefix" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospfv3')" { + description + "This augmentation is only valid for OSPFv3."; + } + description + "SR Extended Prefix Range TLVs in OSPFv3 + E-Inter-Area-Prefix LSAs."; + reference + "RFC 8666: OSPFv3 Extensions for Segment Routing, Section 5"; + uses ospfv3-extended-prefix-range-tlvs; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:database/" + + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" + + "ospf:as-scope-lsa/ospf:version/ospf:ospfv3/" + + "ospf:ospfv3/ospf:body/ospfv3-e-lsa:e-as-external" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospfv3')" { + description + "This augmentation is only valid for OSPFv3."; + } + description + "SR Extended Prefix Range TLVs in OSPFv3 E-AS-External LSAs."; + reference + "RFC 8666: OSPFv3 Extensions for Segment Routing, Section 5"; + uses ospfv3-extended-prefix-range-tlvs; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:areas/ospf:area/ospf:database/" + + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" + + "ospf:area-scope-lsa/ospf:version/ospf:ospfv3/" + + "ospf:ospfv3/ospf:body/ospfv3-e-lsa:e-nssa" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospfv3')" { + description + "This augmentation is only valid for OSPFv3."; + } + description + "SR Extended Prefix Range TLVs in OSPFv3 E-NSSA LSAs."; + reference + "RFC 8666: OSPFv3 Extensions for Segment Routing, Section 5"; + uses ospfv3-extended-prefix-range-tlvs; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:areas/ospf:area/ospf:interfaces/" + + "ospf:interface/" + + "ospf:database/ospf:link-scope-lsa-type/" + + "ospf:link-scope-lsas/ospf:link-scope-lsa/" + + "ospf:version/ospf:ospfv3/ospf:ospfv3/" + + "ospf:body/ospfv3-e-lsa:e-link/" + + "ospfv3-e-lsa:e-link-tlvs/ospfv3-e-lsa:intra-prefix-tlv/" + + "ospfv3-e-lsa:sub-tlvs" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospfv3')" { + description + "This augmentation is only valid for OSPFv3."; + } + description + "SR Prefix-SID Sub-TLV in OSPFv3 Intra-Area-Prefix + TLV for OSPFv3 E-Link LSAs."; + reference + "RFC 8666: OSPFv3 Extensions for Segment Routing, Section 6"; + uses ospfv3-prefix-sid-sub-tlvs; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:areas/ospf:area/ospf:database/" + + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" + + "ospf:area-scope-lsa/ospf:version/ospf:ospfv3/" + + "ospf:ospfv3/ospf:body/ospfv3-e-lsa:e-intra-area-prefix/" + + "ospfv3-e-lsa:e-intra-prefix-tlvs/" + + "ospfv3-e-lsa:intra-prefix-tlv/" + + "ospfv3-e-lsa:sub-tlvs" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospfv3')" { + description + "This augmentation is only valid for OSPFv3 + E-Router LSAs."; + } + description + "SR Prefix-SID Sub-TLV in OSPFv3 Intra-Area-Prefix + TLV for OSPFv3 E-Intra-Area-Prefix LSAs."; + reference + "RFC 8666: OSPFv3 Extensions for Segment Routing, Section 6"; + uses ospfv3-prefix-sid-sub-tlvs; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:areas/ospf:area/ospf:database/" + + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" + + "ospf:area-scope-lsa/ospf:version/ospf:ospfv3/" + + "ospf:ospfv3/ospf:body/ospfv3-e-lsa:e-inter-area-prefix/" + + "ospfv3-e-lsa:e-inter-prefix-tlvs/" + + "ospfv3-e-lsa:inter-prefix-tlv/" + + "ospfv3-e-lsa:sub-tlvs" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospfv3')" { + description + "This augmentation is only valid for OSPFv3."; + } + description + "SR Prefix-SID Sub-TLV in OSPFv3 Intra-Area-Prefix + TLV for OSPFv3 E-Inter-Area-Prefix LSAs."; + reference + "RFC 8666: OSPFv3 Extensions for Segment Routing, Section 6"; + uses ospfv3-prefix-sid-sub-tlvs; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:database/" + + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" + + "ospf:as-scope-lsa/ospf:version/ospf:ospfv3/" + + "ospf:ospfv3/ospf:body/ospfv3-e-lsa:e-as-external/" + + "ospfv3-e-lsa:e-external-tlvs/" + + "ospfv3-e-lsa:external-prefix-tlv/" + + "ospfv3-e-lsa:sub-tlvs" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospfv3')" { + description + "This augmentation is only valid for OSPFv3."; + } + description + "SR Prefix-SID Sub-TLV in OSPFv3 External-Prefix TLV + for OSPFv3 E-AS-External LSAs."; + reference + "RFC 8666: OSPFv3 Extensions for Segment Routing, Section 6"; + uses ospfv3-prefix-sid-sub-tlvs; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:areas/ospf:area/ospf:database/" + + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" + + "ospf:area-scope-lsa/ospf:version/ospf:ospfv3/" + + "ospf:ospfv3/ospf:body/ospfv3-e-lsa:e-nssa/" + + "ospfv3-e-lsa:e-external-tlvs/" + + "ospfv3-e-lsa:external-prefix-tlv/" + + "ospfv3-e-lsa:sub-tlvs" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospfv3')" { + description + "This augmentation is only valid for OSPFv3."; + } + description + "SR Prefix-SID Sub-TLV in OSPFv3 External-Prefix TLV + for OSPFv3 E-NSSA LSAs."; + reference + "RFC 8666: OSPFv3 Extensions for Segment Routing, Section 6"; + uses ospfv3-prefix-sid-sub-tlvs; + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:areas/ospf:area/ospf:database/" + + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" + + "ospf:area-scope-lsa/ospf:version/ospf:ospfv3/" + + "ospf:ospfv3/ospf:body/ospfv3-e-lsa:e-router/" + + "ospfv3-e-lsa:e-router-tlvs/ospfv3-e-lsa:link-tlv/" + + "ospfv3-e-lsa:sub-tlvs" { + when "derived-from(/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:type, 'ospf:ospfv3')" { + description + "This augmentation is only valid for OSPFv3 + E-Router LSAs."; + } + description + "SR Sub-TLVs in OSPFv3 Router-Link TLV for OSPFv3 E-Router + LSAs."; + reference + "RFC 8666: OSPFv3 Extensions for Segment Routing, Section 7"; + uses ospfv3-adj-sid-sub-tlvs; + uses ospfv3-lan-adj-sid-sub-tlvs; + } +} diff --git a/standard/ietf/RFC/ietf-pcep-stats.yang b/standard/ietf/RFC/ietf-pcep-stats.yang new file mode 120000 index 000000000..7b26ab64b --- /dev/null +++ b/standard/ietf/RFC/ietf-pcep-stats.yang @@ -0,0 +1 @@ +ietf-pcep-stats@2025-09-12.yang \ No newline at end of file diff --git a/standard/ietf/RFC/ietf-pcep-stats@2025-09-12.yang b/standard/ietf/RFC/ietf-pcep-stats@2025-09-12.yang new file mode 100644 index 000000000..4412e0771 --- /dev/null +++ b/standard/ietf/RFC/ietf-pcep-stats@2025-09-12.yang @@ -0,0 +1,698 @@ +module ietf-pcep-stats { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-pcep-stats"; + prefix pcep-stats; + + import ietf-pcep { + prefix pcep; + reference + "RFC 9826: A YANG Data Model for the Path Computation + Element Communication Protocol (PCEP)"; + } + import ietf-yang-types { + prefix yang; + reference + "RFC 6991: Common YANG Data Types"; + } + + organization + "IETF PCE (Path Computation Element) Working Group"; + contact + "WG Web: + WG List: + Editor: Dhruv Dhody + "; + description + "The YANG module augments the Path Computation Element + Communication Protocol (PCEP) YANG operational + model with statistics, counters and telemetry data. + + 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 9826; see the + RFC itself for full legal notices."; + + revision 2025-09-12 { + description + "Initial revision."; + reference + "RFC 9826: A YANG Data Model for the Path Computation + Element Communication Protocol (PCEP)"; + } + + /* + * Features + */ + + feature reset-all { + description + "Support resetting of all PCEP statistics."; + } + + /* + * Groupings + */ + + grouping stats { + description + "This grouping defines statistics for PCEP. It is used + for both peer and current sessions. Since this grouping + includes a relative path, care needs to be taken while + using it."; + leaf discontinuity-time { + type yang:timestamp; + description + "The timestamp value of the time when the + statistics were last reset."; + } + container pce { + when "../../pcep:role = 'pce'" + + "or " + + "../../pcep:role = 'pcc-and-pce'" { + description + "Valid for PCEP peer as PCE."; + } + leaf rsp-time-avg { + type uint32; + units "milliseconds"; + description + "The average response time. If an average response time + has not been calculated, then this leaf has the value + zero."; + } + leaf rsp-time-lwm { + type uint32; + units "milliseconds"; + description + "The smallest (low-water mark) response time seen. + If no responses have been received, then this leaf has + the value zero."; + } + leaf rsp-time-hwm { + type uint32; + units "milliseconds"; + description + "The greatest (high-water mark) response time seen. + If no responses have been received, then this object + has the value zero."; + } + leaf pcreq-sent { + type yang:counter32; + description + "The number of PCReq messages sent."; + } + leaf pcreq-rcvd { + type yang:counter32; + description + "The number of PCReq messages received."; + } + leaf pcrep-sent { + type yang:counter32; + description + "The number of PCRep messages sent."; + } + leaf pcrep-rcvd { + type yang:counter32; + description + "The number of PCRep messages received."; + } + leaf req-sent { + type yang:counter32; + description + "The number of requests sent. A request corresponds + 1:1 with an RP object in a PCReq message. This might + be greater than pcreq-sent because multiple + requests can be batched into a single PCReq + message."; + } + leaf req-sent-pend-rep { + type yang:counter32; + description + "The number of requests that have been sent for + which a response is still pending."; + } + leaf req-sent-ero-rcvd { + type yang:counter32; + description + "The number of requests that have been sent for + which a response with an ERO object was received. + Such responses indicate that a path was + successfully computed by the peer."; + } + leaf req-sent-nopath-rcvd { + type yang:counter32; + description + "The number of requests that have been sent for + which a response with a NO-PATH object was + received. Such responses indicate that the peer + could not find a path to satisfy the + request."; + } + leaf req-sent-cancel-rcvd { + type yang:counter32; + description + "The number of requests that were cancelled with + a PCNtf message. This might be different than + pcntf-rcvd because not all PCNtf messages are + used to cancel requests, and a single PCNtf message + can cancel multiple requests."; + } + leaf req-sent-error-rcvd { + type yang:counter32; + description + "The number of requests that were rejected with a + PCErr message. This might be different than + pcerr-rcvd because not all PCErr messages are + used to reject requests, and a single PCErr message + can reject multiple requests."; + } + leaf req-sent-timeout { + type yang:counter32; + description + "The number of requests that have been sent to a peer + and have been abandoned because the peer has taken too + long to respond to them."; + } + leaf req-sent-cancel-sent { + type yang:counter32; + description + "The number of requests that were sent to the peer and + explicitly cancelled by the local PCEP entity sending + a PCNtf."; + } + leaf rep-rcvd-unknown { + type yang:counter32; + description + "The number of responses to unknown requests + received. A response to an unknown request is a + response whose RP object does not contain the + request ID of any request that is currently + outstanding on the session."; + } + description + "The stats related to PCE as peer."; + } + leaf pcerr-sent { + type yang:counter32; + description + "The number of PCErr messages sent."; + } + leaf pcerr-rcvd { + type yang:counter32; + description + "The number of PCErr messages received."; + } + leaf pcntf-sent { + type yang:counter32; + description + "The number of PCNtf messages sent."; + } + leaf pcntf-rcvd { + type yang:counter32; + description + "The number of PCNtf messages received."; + } + leaf keepalive-sent { + type yang:counter32; + description + "The number of Keepalive messages sent."; + } + leaf keepalive-rcvd { + type yang:counter32; + description + "The number of Keepalive messages received."; + } + leaf unknown-rcvd { + type yang:counter32; + description + "The number of unknown messages received."; + } + leaf corrupt-rcvd { + type yang:counter32; + description + "The number of corrupted PCEP messages received."; + } + container pcc { + when "../../pcep:role = 'pcc'" + + "or " + + "../../pcep:role = 'pcc-and-pce'" { + description + "Valid for PCEP peer as PCC."; + } + leaf req-rcvd { + type yang:counter32; + description + "The number of requests received. A request + corresponds 1:1 with an RP object in a PCReq + message. + This might be greater than pcreq-rcvd because + multiple requests can be batched into a single + PCReq message."; + } + leaf req-rcvd-pend-rep { + type yang:counter32; + description + "The number of requests that have been received for + which a response is still pending."; + } + leaf req-rcvd-ero-sent { + type yang:counter32; + description + "The number of requests that have been received for + which a response with an ERO object was sent. Such + responses indicate that a path was successfully + computed by the local PCEP entity."; + } + leaf req-rcvd-nopath-sent { + type yang:counter32; + description + "The number of requests that have been received for + which a response with a NO-PATH object was sent. Such + responses indicate that the local PCEP entity could + not find a path to satisfy the request."; + } + leaf req-rcvd-cancel-sent { + type yang:counter32; + description + "The number of requests received that were cancelled + by the local PCEP entity sending a PCNtf message. + This might be different than pcntf-sent because + not all PCNtf messages are used to cancel requests, + and a single PCNtf message can cancel multiple + requests."; + } + leaf req-rcvd-error-sent { + type yang:counter32; + description + "The number of requests received that were cancelled + by the local PCEP entity sending a PCErr message. + This might be different than pcerr-sent because + not all PCErr messages are used to cancel requests, + and a single PCErr message can cancel multiple + requests."; + } + leaf req-rcvd-cancel-rcvd { + type yang:counter32; + description + "The number of requests that were received from the + peer and explicitly cancelled by the peer sending + a PCNtf."; + } + leaf req-rcvd-unknown { + type yang:counter32; + description + "The number of unknown requests that have been + received. An unknown request is a request + whose RP object contains a request ID of zero."; + } + description + "The stats related to PCC as peer."; + } + container svec { + if-feature "pcep:svec"; + description + "If synchronized path computation is supported."; + container pce { + when "../../../pcep:role = 'pce'" + + "or " + + "../../../pcep:role = 'pcc-and-pce'" { + description + "Valid for PCEP peer as PCE."; + } + leaf svec-sent { + type yang:counter32; + description + "The number of SVEC objects sent in PCReq messages. + An SVEC object represents a set of synchronized + requests."; + } + leaf svec-req-sent { + type yang:counter32; + description + "The number of requests sent that appeared in one + or more SVEC objects."; + } + description + "The SVEC stats related to PCE."; + } + container pcc { + when "../../../pcep:role = 'pcc'" + + "or " + + "../../../pcep:role = 'pcc-and-pce'" { + description + "Valid for PCEP peer as PCC."; + } + leaf svec-rcvd { + type yang:counter32; + description + "The number of SVEC objects received in PCReq + messages. An SVEC object represents a set of + synchronized requests."; + } + leaf svec-req-rcvd { + type yang:counter32; + description + "The number of requests received that appeared + in one or more SVEC objects."; + } + description + "The SVEC stats related to PCC as peer."; + } + } + container stateful { + if-feature "pcep:stateful"; + description + "Stateful PCE-related statistics."; + container pce { + when "../../../pcep:role = 'pce'" + + "or " + + "../../../pcep:role = 'pcc-and-pce'" { + description + "Valid for PCEP peer as PCE."; + } + leaf pcrpt-sent { + type yang:counter32; + description + "The number of PCRpt messages sent."; + } + leaf pcupd-rcvd { + type yang:counter32; + description + "The number of PCUpd messages received."; + } + leaf rpt-sent { + type yang:counter32; + description + "The number of LSP reports sent. An LSP report + corresponds 1:1 with an LSP object in a PCRpt + message. This might be greater than + pcrpt-sent because multiple reports can + be batched into a single PCRpt message."; + } + leaf upd-rcvd { + type yang:counter32; + description + "The number of LSP updates received. An LSP update + corresponds 1:1 with an LSP object in a PCUpd + message. + This might be greater than pcupd-rcvd because + multiple updates can be batched into a single + PCUpd message."; + } + leaf upd-rcvd-unknown { + type yang:counter32; + description + "The number of updates to unknown LSPs + received. An update to an unknown LSP is a + update whose LSP object does not contain the + PLSP-ID of any LSP that is currently + present."; + } + leaf upd-rcvd-undelegated { + type yang:counter32; + description + "The number of updates to not delegated LSPs + received. An update to an undelegated LSP is a + update whose LSP object does not contain the + PLSP-ID of any LSP that is currently + delegated to the current PCEP session."; + } + leaf upd-rcvd-error-sent { + type yang:counter32; + description + "The number of updates to LSPs received that were + responded by the local PCEP entity by sending a + PCErr message."; + } + description + "The stateful stats related to PCE as peer"; + } + container pcc { + when "../../../pcep:role = 'pcc'" + + "or " + + "../../../pcep:role = 'pcc-and-pce'" { + description + "Valid for PCEP peer as PCC."; + } + leaf pcrpt-rcvd { + type yang:counter32; + description + "The number of PCRpt messages received."; + } + leaf pcupd-sent { + type yang:counter32; + description + "The number of PCUpd messages sent."; + } + leaf rpt-rcvd { + type yang:counter32; + description + "The number of LSP reports received. An LSP report + corresponds 1:1 with an LSP object in a PCRpt + message. + This might be greater than pcrpt-rcvd because + multiple reports can be batched into a single + PCRpt message."; + } + leaf rpt-rcvd-error-sent { + type yang:counter32; + description + "The number of reports of LSPs received that were + responded by the local PCEP entity by sending a + PCErr message."; + } + leaf upd-sent { + type yang:counter32; + description + "The number of LSP updates sent. An LSP update + corresponds 1:1 with an LSP object in a PCUpd + message. This might be greater than + pcupd-sent because multiple updates can + be batched into a single PCUpd message."; + } + description + "The stateful stats related to PCC as peer."; + } + container initiation { + if-feature "pcep:pce-initiated"; + description + "PCE-initiated related statistics."; + container pcc { + when "../../../../pcep:role = 'pcc'" + + "or " + + "../../../../pcep:role = 'pcc-and-pce'" { + description + "Valid for PCEP peer as PCC."; + } + leaf pcinitiate-sent { + type yang:counter32; + description + "The number of PCInitiate messages sent."; + } + leaf initiate-sent { + type yang:counter32; + description + "The number of LSP initiations sent via PCE. + An LSP initiation corresponds 1:1 with an LSP + object in a PCInitiate message. This might be + greater than pcinitiate-sent because + multiple initiations can be batched into a + single PCInitiate message."; + } + description + "The initiation stats related to PCC as peer."; + } + container pce { + when "../../../../pcep:role = 'pce'" + + "or " + + "../../../../pcep:role = 'pcc-and-pce'" { + description + "Valid for PCEP peer as PCE."; + } + leaf pcinitiate-rcvd { + type yang:counter32; + description + "The number of PCInitiate messages received."; + } + leaf initiate-rcvd { + type yang:counter32; + description + "The number of LSP initiations received from + PCE. An LSP initiation corresponds 1:1 with + an LSP object in a PCInitiate message. This + might be greater than pcinitiate-rcvd + because multiple initiations can be batched + into a single PCInitiate message."; + } + leaf initiate-rcvd-error-sent { + type yang:counter32; + description + "The number of initiations of LSPs received + that were responded to by the local PCEP entity + by sending a PCErr message."; + } + description + "The initiation stats related to PCE as peer."; + } + } + } + container path-key { + when "../../pcep:role = 'pcc'" + + "or " + + "../../pcep:role = 'pcc-and-pce'" { + description + "Valid for PCEP peer as PCC."; + } + if-feature "pcep:path-key"; + description + "If path-key is supported."; + leaf unknown-path-key { + type yang:counter32; + description + "The number of attempts to expand an unknown + path-key."; + } + leaf exp-path-key { + type yang:counter32; + description + "The number of attempts to expand an expired + path-key."; + } + leaf dup-path-key { + type yang:counter32; + description + "The number of duplicate attempts to expand the same + path-key."; + } + leaf path-key-no-attempt { + type yang:counter32; + description + "The number of expired path-keys with no attempt to + expand it."; + } + } + action reset-statistics { + description + "The reset action will clear the statistics at the + associated container."; + input { + leaf reset-at { + type yang:date-and-time; + description + "The time when the reset was issued."; + } + } + output { + leaf reset-finished-at { + type yang:date-and-time; + description + "The time when the reset finished."; + } + } + } + } + + /* + * Augment modules to add statistics + */ + + augment "/pcep:pcep/pcep:entity/pcep:peers/pcep:peer" { + description + "Augmenting the statistics."; + container stats { + config false; + description + "The container for all statistics at peer level."; + uses stats { + description + "Since PCEP sessions can be ephemeral, the peer statistics + tracks a peer even when no PCEP session currently exists + to that peer. The statistics contained are an aggregate + of the statistics for all successive sessions to that + peer."; + } + leaf sess-setup-ok { + type yang:counter32; + config false; + description + "The number of PCEP sessions successfully established with + the peer, including any current session. This counter is + incremented each time a session with this peer is + successfully established."; + } + leaf sess-setup-fail { + type yang:counter32; + config false; + description + "The number of PCEP sessions with the peer + that have been attempted but failed + before being fully established. This + counter is incremented each time a + session retry to this peer fails."; + } + leaf req-sent-closed { + when "../../pcep:role = 'pce'" + + "or " + + "../../pcep:role = 'pcc-and-pce'" { + description + "Valid for PCEP peer as PCE."; + } + type yang:counter32; + description + "The number of requests that were sent to the peer and + implicitly cancelled when the session they were sent + over was closed."; + } + leaf req-rcvd-closed { + when "../../pcep:role = 'pcc'" + + "or " + + "../../pcep:role = 'pcc-and-pce'" { + description + "Valid for PCEP peer as PCC."; + } + type yang:counter32; + description + "The number of requests that were received from the peer + and implicitly cancelled when the session they were + received over was closed."; + } + } + } + + augment "/pcep:pcep/pcep:entity/pcep:peers/pcep:peer/" + + "pcep:sessions/pcep:session" { + description + "Augmenting the statistics."; + container stats { + description + "The container for all statistics at session level."; + uses stats { + description + "The statistics contained are for the current sessions to + that peer. These are lost when the session goes down."; + } + } + } + + rpc reset-pcep-statistics-all { + if-feature "reset-all"; + description + "Reset all the PCEP statistics collected across all peers + and sessions. This RPC is used if the implementation + supports a mechanism to reset all PCEP statistics across + all peers and sessions through mechanisms such as by + walking a list of pointers to those peers and sessions. + + If this mechanism is not supported, implementations must + reset PCEP statistics individually by invoking the action + for each peer and session."; + } +} diff --git a/standard/ietf/RFC/ietf-pcep.yang b/standard/ietf/RFC/ietf-pcep.yang new file mode 120000 index 000000000..8ed4c3711 --- /dev/null +++ b/standard/ietf/RFC/ietf-pcep.yang @@ -0,0 +1 @@ +ietf-pcep@2025-09-12.yang \ No newline at end of file diff --git a/standard/ietf/RFC/ietf-pcep@2025-09-12.yang b/standard/ietf/RFC/ietf-pcep@2025-09-12.yang new file mode 100644 index 000000000..ae1ae7a2d --- /dev/null +++ b/standard/ietf/RFC/ietf-pcep@2025-09-12.yang @@ -0,0 +1,2834 @@ +module ietf-pcep { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-pcep"; + prefix pcep; + + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types"; + } + import ietf-yang-types { + prefix yang; + reference + "RFC 6991: Common YANG Data Types"; + } + import ietf-te-types { + prefix te-types; + reference + "RFC 8776: Common YANG Data Types for Traffic Engineering"; + } + import ietf-key-chain { + prefix key-chain; + reference + "RFC 8177: YANG Data Model for Key Chains"; + } + import ietf-netconf-acm { + prefix nacm; + reference + "RFC 8341: Network Configuration Access Control Model"; + } + import ietf-tls-server { + prefix tlss; + reference + "RFC 9645: YANG Groupings for TLS Clients and TLS Servers"; + } + import ietf-tls-client { + prefix tlsc; + reference + "RFC 9645: YANG Groupings for TLS Clients and TLS Servers"; + } + import ietf-ospf { + prefix ospf; + reference + "RFC 9129: YANG Data Model for the OSPF Protocol"; + } + import ietf-isis { + prefix isis; + reference + "RFC 9130: YANG Data Model for the IS-IS Protocol"; + } + + organization + "IETF PCE (Path Computation Element) Working Group"; + contact + "WG Web: + WG List: + Editor: Dhruv Dhody + "; + description + "The YANG module defines a generic configuration and + operational model for the Path Computation Element + Communication Protocol (PCEP). + + 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. + + 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 9826; see the + RFC itself for full legal notices."; + + revision 2025-09-12 { + description + "Initial revision."; + reference + "RFC 9826: A YANG Data Model for the Path Computation + Element Communication Protocol (PCEP)"; + } + + /* + * Typedefs + */ + + typedef role { + type enumeration { + enum unknown { + value 0; + description + "An unknown role."; + } + enum pcc { + value 1; + description + "The role of a Path Computation Client (PCC)."; + } + enum pce { + value 2; + description + "The role of a Path Computation Element (PCE)."; + } + enum pcc-and-pce { + value 3; + description + "The role of both Path Computation Client (PCC) and + Path Computation Element (PCE)."; + } + } + description + "The role of a PCEP speaker. + Takes one of the following values: + - unknown(0): the role is not known, + - pcc(1): the role is of a Path Computation + Client (PCC), + - pce(2): the role is of a Path Computation + Element (PCE), + - pcc-and-pce(3): the role is of both a PCC and + a PCE."; + reference + "RFC 5440: Path Computation Element (PCE) Communication + Protocol (PCEP)"; + } + + typedef oper-status { + type enumeration { + enum oper-status-up { + value 1; + description + "The PCEP entity is active."; + } + enum oper-status-down { + value 2; + description + "The PCEP entity is inactive."; + } + enum oper-status-going-up { + value 3; + description + "The PCEP entity is activating."; + } + enum oper-status-going-down { + value 4; + description + "The PCEP entity is deactivating."; + } + enum oper-status-failed { + value 5; + description + "The PCEP entity has failed and will recover + when possible."; + } + enum oper-status-failed-perm { + value 6; + description + "The PCEP entity has failed and will not recover + without operator intervention."; + } + } + description + "The operational status of the PCEP entity. + Takes one of the following values: + - oper-status-up(1): Active, + - oper-status-down(2): Inactive, + - oper-status-going-up(3): Activating, + - oper-status-going-down(4): Deactivating, + - oper-status-failed(5): Failed, + - oper-status-failed-perm(6): Failed Permanently."; + reference + "RFC 5440: Path Computation Element (PCE) Communication + Protocol (PCEP)"; + } + + typedef initiator { + type enumeration { + enum local { + value 1; + description + "The local PCEP entity initiated the session."; + } + enum remote { + value 2; + description + "The remote PCEP peer initiated the session."; + } + } + description + "The initiator of the session, that is, whether the TCP + connection was initiated by the local PCEP entity or + the remote peer. + Takes one of the following values: + - local(1): Initiated locally, + - remote(2): Initiated remotely."; + } + + typedef sess-state { + type enumeration { + enum tcp-pending { + value 1; + description + "The TCPPending state of PCEP session."; + } + enum open-wait { + value 2; + description + "The OpenWait state of PCEP session."; + } + enum keep-wait { + value 3; + description + "The KeepWait state of PCEP session."; + } + enum session-up { + value 4; + description + "The SessionUP state of PCEP session."; + } + } + description + "The current state of the session. + The set of possible states excludes the idle state + since entries do not exist in the idle state. + Takes one of the following values: + - tcp-pending(1): PCEP TCPPending state, + - open-wait(2): PCEP OpenWait state, + - keep-wait(3): PCEP KeepWait state, + - session-up(4): PCEP SessionUP state."; + reference + "RFC 5440: Path Computation Element (PCE) Communication + Protocol (PCEP)"; + } + + typedef domain { + type union { + type ospf:area-id-type; + type isis:area-address; + type inet:as-number; + } + description + "The domain information."; + } + + typedef operational-state { + type enumeration { + enum down { + value 0; + description + "Not active."; + } + enum up { + value 1; + description + "Signaled."; + } + enum active { + value 2; + description + "Up and carrying traffic."; + } + enum going-down { + value 3; + description + "LSP is being torn down; resources are + being released."; + } + enum going-up { + value 4; + description + "LSP is being signaled."; + } + } + description + "The operational status of the LSP."; + reference + "RFC 8231: Path Computation Element Communication Protocol + (PCEP) Extensions for Stateful PCE"; + } + + typedef sync-state { + type enumeration { + enum pending { + value 0; + description + "The state synchronization + has not started."; + } + enum ongoing { + value 1; + description + "The state synchronization + is ongoing."; + } + enum finished { + value 2; + description + "The state synchronization + is finished."; + } + } + description + "The LSP-DB state synchronization operational + status."; + reference + "RFC 8231: Path Computation Element Communication Protocol + (PCEP) Extensions for Stateful PCE"; + } + + typedef hpce-role { + type enumeration { + enum unknown { + value 0; + description + "An unknown role."; + } + enum child { + value 1; + description + "The PCE is acting as child PCE."; + } + enum parent { + value 2; + description + "The PCE is acting as parent PCE."; + } + } + description + "The H-PCE role of the PCE."; + reference + "RFC 8685: Path Computation Element Communication Protocol + (PCEP) Extensions for the Hierarchical Path Computation + Element (H-PCE) Architecture"; + } + + /* + * Features + */ + + feature svec { + description + "Support synchronized path computation."; + reference + "RFC 5440: Path Computation Element (PCE) Communication + Protocol (PCEP)"; + } + + feature gmpls { + description + "Support GMPLS."; + reference + "RFC 8779: Path Computation Element Communication Protocol + (PCEP) Extensions for GMPLS"; + } + + feature objective-function { + description + "Support OF as per RFC 5541."; + reference + "RFC 5541: Encoding of Objective Functions in the Path + Computation Element Communication Protocol (PCEP)"; + } + + feature global-concurrent { + description + "Support Global Concurrent Optimization (GCO) as per RFC + 5557."; + reference + "RFC 5557: Path Computation Element Communication Protocol + (PCEP) Requirements and Protocol Extensions in Support of + Global Concurrent Optimization"; + } + + feature path-key { + description + "Support path-key as per RFC 5520."; + reference + "RFC 5520: Preserving Topology Confidentiality in Inter- + Domain Path Computation Using a Path-Key-Based Mechanism"; + } + + feature p2mp { + description + "Support Point-to-Multipoint (P2MP) as per RFC 8306."; + reference + "RFC 8306: Extensions to the Path Computation Element + Communication Protocol (PCEP) for Point-to-Multipoint + Traffic Engineering Label Switched Paths"; + } + + feature stateful { + description + "Support stateful PCE as per RFC 8231."; + reference + "RFC 8231: Path Computation Element Communication Protocol + (PCEP) Extensions for Stateful PCE"; + } + + feature sync-opt { + description + "Support stateful state synchronization optimization + as per RFC 8232."; + reference + "RFC 8232: Optimizations of Label Switched Path State + Synchronization Procedures for a Stateful PCE"; + } + + feature pce-initiated { + description + "Support PCE-initiated LSP as per + RFC 8281."; + reference + "RFC 8281: Path Computation Element Communication Protocol + (PCEP) Extensions for PCE-Initiated LSP Setup in a Stateful + PCE Model"; + } + + feature tls { + description + "Support PCEP over TLS as per RFC 8253."; + reference + "RFC 8253: PCEPS: Usage of TLS to Provide a Secure Transport + for the Path Computation Element Communication Protocol + (PCEP)"; + } + + feature sr-mpls { + description + "Support Segment Routing (SR) for MPLS in PCEP."; + reference + "RFC 8664: Path Computation Element Communication Protocol + (PCEP) Extensions for Segment Routing"; + } + + feature association { + description + "Support Association in PCEP."; + reference + "RFC 8697: Path Computation Element Communication Protocol + (PCEP) Extensions for Establishing Relationships between + Sets of Label Switched Paths (LSPs)"; + } + + feature flowspec { + description + "Support Flow Specification in PCEP."; + reference + "RFC 9168: Path Computation Element Communication Protocol + (PCEP) Extension for Flow Specification"; + } + + feature h-pce { + description + "Support Hierarchical PCE (H-PCE)."; + reference + "RFC 8685: Path Computation Element Communication + Protocol (PCEP) Extensions for the Hierarchical Path + Computation Element (H-PCE) Architecture"; + } + + feature inter-layer { + description + "Support inter-layer path computation."; + reference + "RFC 8282: Extensions to the Path Computation + Element Communication Protocol (PCEP) for Inter- + Layer MPLS and GMPLS Traffic Engineering"; + } + + /* + * Identities + */ + + identity domain-type { + description + "Base domain type for PCE."; + } + + identity ospf-area { + base domain-type; + description + "The OSPF area."; + } + + identity isis-area { + base domain-type; + description + "The IS-IS area."; + } + + identity autonomous-system { + base domain-type; + description + "The Autonomous System (AS)."; + } + + identity lsp-error { + if-feature "stateful"; + description + "Base LSP error."; + reference + "RFC 8231: Path Computation Element Communication Protocol + (PCEP) Extensions for Stateful PCE"; + } + + identity no-error-lsp-error { + if-feature "stateful"; + base lsp-error; + description + "No error; LSP is fine."; + reference + "RFC 8231: Path Computation Element Communication Protocol + (PCEP) Extensions for Stateful PCE"; + } + + identity unknown-lsp-error { + if-feature "stateful"; + base lsp-error; + description + "Unknown reason. LSP Error Code value = 1."; + reference + "RFC 8231: Path Computation Element Communication Protocol + (PCEP) Extensions for Stateful PCE"; + } + + identity limit-lsp-error { + if-feature "stateful"; + base lsp-error; + description + "Limit reached for PCE-controlled LSPs. LSP Error Code + value = 2."; + reference + "RFC 8231: Path Computation Element Communication Protocol + (PCEP) Extensions for Stateful PCE"; + } + + identity pending-lsp-error { + if-feature "stateful"; + base lsp-error; + description + "Too many pending LSP update requests. LSP Error Code + value = 3."; + reference + "RFC 8231: Path Computation Element Communication Protocol + (PCEP) Extensions for Stateful PCE"; + } + + identity unacceptable-lsp-error { + if-feature "stateful"; + base lsp-error; + description + "Unacceptable parameters. LSP Error Code value = 4."; + reference + "RFC 8231: Path Computation Element Communication Protocol + (PCEP) Extensions for Stateful PCE"; + } + + identity internal-lsp-error { + if-feature "stateful"; + base lsp-error; + description + "Internal error. LSP Error Code value = 5."; + reference + "RFC 8231: Path Computation Element Communication Protocol + (PCEP) Extensions for Stateful PCE"; + } + + identity admin-lsp-error { + if-feature "stateful"; + base lsp-error; + description + "LSP administratively brought down. LSP Error Code value + = 6."; + reference + "RFC 8231: Path Computation Element Communication Protocol + (PCEP) Extensions for Stateful PCE"; + } + + identity preempted-lsp-error { + if-feature "stateful"; + base lsp-error; + description + "LSP preempted. LSP Error Code value = 7."; + reference + "RFC 8231: Path Computation Element Communication Protocol + (PCEP) Extensions for Stateful PCE"; + } + + identity rsvp-lsp-error { + if-feature "stateful"; + base lsp-error; + description + "RSVP signaling error. LSP Error Code value = 8."; + reference + "RFC 8231: Path Computation Element Communication Protocol + (PCEP) Extensions for Stateful PCE"; + } + + identity path-protection { + base te-types:association-type; + description + "Path Protection Association."; + reference + "RFC 8745: Path Computation Element Communication Protocol + (PCEP) Extensions for Associating Working and Protection + Label Switched Paths (LSPs) with Stateful PCE"; + } + + identity disjoint { + base te-types:association-type; + description + "Disjoint Association."; + reference + "RFC 8800: Path Computation Element Communication Protocol + (PCEP) Extension for Label Switched Path (LSP) Diversity + Constraint Signaling"; + } + + identity policy { + base te-types:association-type; + description + "Policy Association."; + reference + "RFC 9005: Path Computation Element Communication Protocol + (PCEP) Extension for Associating Policies and Label Switched + Paths (LSPs)"; + } + + identity virtual-network { + base te-types:association-type; + description + "Virtual Network (VN) Association."; + reference + "RFC 9358: Path Computation Element Communication Protocol + (PCEP) Extensions for Establishing Relationships between + Sets of Label Switched Paths and Virtual Networks"; + } + + /* + * Groupings + */ + + grouping domain { + description + "This grouping specifies a domain where the + PCEP speaker has topology visibility."; + leaf type { + type identityref { + base domain-type; + } + description + "The domain type."; + } + leaf domain { + type domain; + description + "The domain information."; + } + } + + grouping domain-info { + description + "This grouping specifies all information that + may be relevant to both PCC and PCE. + This information corresponds to PCE auto-discovery + information. + The scope relates to either a local entity or a peer."; + container domains { + description + "The domain for the local PCEP entity or a peer."; + list domain { + key "type domain"; + description + "The domain information."; + uses domain { + description + "The domain for the local PCEP entity or a peer."; + } + } + } + container capabilities { + description + "The PCEP entity or peer capability information. + This may be relevant to PCE selection as well. + This information corresponds to PCE auto- + discovery information."; + reference + "IANA IGP: Path Computation Element (PCE) Capability + Flags in Interior Gateway Protocol (IGP) Parameters + RFC 5088: OSPF Protocol Extensions for Path + Computation Element (PCE) Discovery + RFC 5089: IS-IS Protocol Extensions for Path + Computation Element (PCE) Discovery + RFC 9353: IGP Extension for Path Computation Element + Communication Protocol (PCEP) Security Capability + Support in PCE Discovery (PCED)"; + leaf capability { + type bits { + bit gmpls { + if-feature "gmpls"; + description + "Path computation with GMPLS link + constraints."; + } + bit bi-dir { + description + "Bidirectional path computation."; + } + bit diverse { + description + "Diverse path computation."; + } + bit load-balance { + description + "Load-balanced path computation."; + } + bit synchronize { + if-feature "svec"; + description + "Synchronized paths computation."; + } + bit objective-function { + if-feature "objective-function"; + description + "Support for multiple objective functions."; + } + bit add-path-constraint { + description + "Support for additive path constraints (max + hop count, etc.)."; + } + bit prioritization { + description + "Support for request prioritization."; + } + bit multi-request { + description + "Support for multiple requests per message."; + } + bit global-concurrent { + if-feature "global-concurrent"; + description + "Support for Global Concurrent Optimization + (GCO)."; + reference + "RFC 5557: Path Computation Element Communication + Protocol (PCEP) Requirements and Protocol + Extensions in Support of Global Concurrent + Optimization"; + } + bit p2mp { + if-feature "p2mp"; + description + "Support for P2MP path computation."; + reference + "RFC 8306: Extensions to the Path Computation + Element Communication Protocol (PCEP) for + Point-to-Multipoint Traffic Engineering Label + Switched Paths"; + } + bit active { + if-feature "stateful"; + description + "Support for active stateful PCE."; + reference + "RFC 8231: Path Computation Element + Communication Protocol (PCEP) Extensions + for Stateful PCE"; + } + bit passive { + if-feature "stateful"; + description + "Support for passive stateful PCE."; + reference + "RFC 8231: Path Computation Element + Communication Protocol (PCEP) Extensions + for Stateful PCE"; + } + bit p2mp-active { + if-feature "stateful"; + if-feature "p2mp"; + description + "Support for active stateful PCE for P2MP."; + reference + "RFC 8623: Stateful Path Computation Element + (PCE) Protocol Extensions for Usage with + Point-to-Multipoint TE Label Switched Paths + (LSPs)"; + } + bit p2mp-passive { + if-feature "stateful"; + if-feature "p2mp"; + description + "Support for passive stateful PCE for P2MP."; + reference + "RFC 8623: Stateful Path Computation Element + (PCE) Protocol Extensions for Usage with + Point-to-Multipoint TE Label Switched Paths + (LSPs)"; + } + bit p2mp-pce-initiated { + if-feature "stateful"; + if-feature "pce-initiated"; + if-feature "p2mp"; + description + "Support for PCE-initiated LSP for P2MP."; + reference + "RFC 8623: Stateful Path Computation Element + (PCE) Protocol Extensions for Usage with + Point-to-Multipoint TE Label Switched Paths + (LSPs)"; + } + bit flowspec { + if-feature "flowspec"; + description + "Support for Flow Specification."; + reference + "RFC 9168: Path Computation Element Communication + Protocol (PCEP) Extension for Flow Specification"; + } + bit tcp-ao { + description + "Support for the TCP Authentication Option + (TCP-AO)."; + reference + "RFC 5440: Path Computation Element (PCE) + Communication Protocol (PCEP) + RFC 5925: The TCP Authentication Option"; + } + bit tls { + if-feature "tls"; + description + "Support for TLS."; + reference + "RFC 8253: PCEPS: Usage of TLS to Provide a + Secure Transport for the Path Computation + Element Communication Protocol (PCEP)"; + } + } + description + "The bits string indicating the capabilities."; + reference + "IANA IGP: Path Computation Element (PCE) Capability + Flags in Interior Gateway Protocol (IGP) Parameters + RFC 5088: OSPF Protocol Extensions for Path + Computation Element (PCE) Discovery + RFC 5089: IS-IS Protocol Extensions for Path + Computation Element (PCE) Discovery + RFC 9353: IGP Extension for Path Computation Element + Communication Protocol (PCEP) Security Capability + Support in PCE Discovery (PCED)"; + } + leaf pce-initiated { + if-feature "pce-initiated"; + type boolean; + default "false"; + description + "Set to true if PCE-initiated LSP capability is + enabled."; + reference + "RFC 8281: Path Computation Element Communication + Protocol (PCEP) Extensions for PCE-Initiated LSP + Setup in a Stateful PCE Model"; + } + leaf include-db-ver { + if-feature "stateful"; + if-feature "sync-opt"; + type boolean; + default "true"; + description + "Support inclusion of LSP-DB-VERSION + in LSP object."; + reference + "RFC 8232: Optimizations of Label Switched Path State + Synchronization Procedures for a Stateful PCE"; + } + leaf trigger-resync { + if-feature "stateful"; + if-feature "sync-opt"; + type boolean; + default "true"; + description + "Support PCE-triggered resynchronization."; + reference + "RFC 8232: Optimizations of Label Switched Path State + Synchronization Procedures for a Stateful PCE"; + } + leaf trigger-initial-sync { + if-feature "stateful"; + if-feature "sync-opt"; + type boolean; + default "true"; + description + "PCE-triggered initial synchronization."; + reference + "RFC 8232: Optimizations of Label Switched Path State + Synchronization Procedures for a Stateful PCE"; + } + leaf incremental-sync { + if-feature "stateful"; + if-feature "sync-opt"; + type boolean; + default "true"; + description + "Support incremental (delta) synchronization."; + reference + "RFC 8232: Optimizations of Label Switched Path State + Synchronization Procedures for a Stateful PCE"; + } + container sr-mpls { + if-feature "sr-mpls"; + description + "If segment routing for MPLS is supported at the local + entity or a peer."; + reference + "RFC 8664: Path Computation Element Communication Protocol + (PCEP) Extensions for Segment Routing"; + leaf enabled { + type boolean; + default "false"; + description + "Set to true if SR-MPLS is enabled."; + } + leaf no-msd-limit { + type boolean; + default "false"; + description + "True indicates no limit on Maximum SID Depth (MSD); the + leaf msd is ignored."; + } + leaf nai { + type boolean; + default "false"; + description + "True indicates the capability to resolve Node or + Adjacency Identifier (NAI) to Segment + Identifier (SID)."; + } + } + container stateful-gmpls { + if-feature "stateful"; + if-feature "gmpls"; + description + "If stateful GMPLS is supported for a local entity + or a peer."; + reference + "RFC 8779: Path Computation Element Communication Protocol + (PCEP) Extensions for GMPLS"; + leaf enabled { + type boolean; + default "false"; + description + "Set to true if stateful GMPLS is enabled."; + } + } + leaf inter-layer { + if-feature "inter-layer"; + type boolean; + default "false"; + description + "If inter-layer path computation is supported for + local entity or a peer."; + reference + "RFC 8282: Extensions to the Path Computation + Element Communication Protocol (PCEP) for Inter- + Layer MPLS and GMPLS Traffic Engineering"; + } + container h-pce { + if-feature "h-pce"; + description + "If Hierarchical PCE (H-PCE) is supported for local + entity or a peer."; + reference + "RFC 8685: Path Computation Element Communication + Protocol (PCEP) Extensions for the Hierarchical Path + Computation Element (H-PCE) Architecture"; + leaf enabled { + type boolean; + default "false"; + description + "Set to true if H-PCE is enabled."; + } + leaf stateful { + if-feature "stateful"; + type boolean; + default "false"; + description + "Set to true if stateful H-PCE is enabled."; + reference + "RFC 8751: Hierarchical Stateful Path Computation + Element (PCE)"; + } + leaf role { + when "../../../role = 'pce'" + + "or " + + "../../../role = 'pcc-and-pce'" { + description + "These fields are applicable when the role is PCE."; + } + type hpce-role; + description + "The H-PCE role of the PCE."; + } + } + } + leaf msd { + if-feature "sr-mpls"; + type uint8; + config false; + description + "Maximum SID Depth (MSD) for SR-MPLS (i.e., the label stack + depth that a PCC is capable of imposing on a packet)."; + reference + "RFC 8664: Path Computation Element Communication Protocol + (PCEP) Extensions for Segment Routing"; + } + } + + grouping pce-info { + description + "This grouping specifies all PCE information + that may be relevant to the PCE selection. + This information corresponds to PCE auto-discovery + information."; + container scope { + description + "This container defines PCE path computation scope + information that may be relevant to PCE selection. + This information corresponds to PCE auto-discovery + information."; + leaf path-scope { + type bits { + bit intra-area-scope { + description + "PCE can compute intra-area paths (L bit)."; + } + bit inter-area-scope { + description + "PCE can compute inter-area paths (R bit)."; + } + bit inter-area-scope-default { + description + "PCE can act as a default PCE for inter-area + path computation (Rd bit)."; + } + bit inter-as-scope { + description + "PCE can compute inter-AS paths (S bit)."; + } + bit inter-as-scope-default { + description + "PCE can act as a default PCE for inter-AS + path computation (Sd bit)."; + } + bit inter-layer-scope { + description + "PCE can compute inter-layer paths (Y bit)."; + } + } + description + "The field corresponding to the path scope bits."; + } + leaf intra-area-pref { + type uint8 { + range "0..7"; + } + description + "The PCE's preference for intra-area TE LSP + computation (PrefL field), where 7 reflects + the highest preference."; + } + leaf inter-area-pref { + type uint8 { + range "0..7"; + } + description + "The PCE's preference for inter-area TE LSP + computation (PrefR field), where 7 reflects + the highest preference."; + } + leaf inter-as-pref { + type uint8 { + range "0..7"; + } + description + "The PCE's preference for inter-AS TE LSP + computation (PrefS field), where 7 reflects + the highest preference."; + } + leaf inter-layer-pref { + type uint8 { + range "0..7"; + } + description + "The PCE's preference for inter-layer TE LSP + computation (PrefY field), where 7 reflects + the highest preference."; + } + reference + "RFC 5088: OSPF Protocol Extensions for Path + Computation Element (PCE) Discovery + RFC 5089: IS-IS Protocol Extensions for Path + Computation Element (PCE) Discovery"; + } + container neighbor-domains { + description + "The list of neighbor PCE domains + toward which a PCE can compute + paths."; + list domain { + key "type domain"; + description + "The neighbor domain."; + uses domain { + description + "The PCE neighbor domain."; + } + } + } + } + + grouping notification-instance-hdr { + description + "This group describes common instance-specific data + for notifications."; + leaf peer-addr { + type leafref { + path "/pcep/entity/peers/peer/addr"; + } + description + "Reference to peer address."; + } + } + + grouping notification-session-hdr { + description + "This group describes common session instance-specific + data for notifications."; + uses notification-instance-hdr; + leaf session-initiator { + type leafref { + path "/pcep/entity/peers/peer[addr=current()/../peer-addr]/" + + "sessions/session/initiator"; + } + description + "Reference to pcep session initiator leaf."; + } + } + + grouping of-list { + description + "List of Objective Functions (OF)."; + reference + "RFC 5541: Encoding of Objective Functions in the Path + Computation Element Communication Protocol (PCEP)"; + list objective-function { + key "of"; + description + "The list of authorized OF."; + leaf of { + type identityref { + base te-types:objective-function-type; + } + description + "The OF authorized."; + } + } + } + + grouping auth { + description + "The authentication options."; + container auth { + description + "The authentication options."; + choice auth-type-selection { + description + "Options for expressing authentication + setting."; + case auth-key-chain { + leaf key-chain { + type key-chain:key-chain-ref; + description + "Key-chain name."; + } + } + case auth-key { + leaf crypto-algorithm { + type identityref { + base key-chain:crypto-algorithm; + } + mandatory true; + description + "Cryptographic algorithm associated + with key."; + } + choice key-string-style { + description + "Key string styles."; + case keystring { + leaf keystring { + nacm:default-deny-all; + type string; + description + "Key string in ASCII format."; + } + } + case hexadecimal { + if-feature "key-chain:hex-key-string"; + leaf hexadecimal-string { + nacm:default-deny-all; + type yang:hex-string; + description + "Key in hexadecimal string format. When + compared to ASCII, specification in + hexadecimal affords greater key entropy + with the same number of internal + key-string octets. Additionally, it + discourages usage of well-known words or + numbers."; + } + } + } + } + case auth-tls { + if-feature "tls"; + choice role { + description + "The role of the local entity."; + case server { + container tls-server { + uses tlss:tls-server-grouping { + description + "Server TLS information."; + } + description + "TLS-related information."; + } + } + case client { + container tls-client { + uses tlsc:tls-client-grouping { + description + "Client TLS information."; + } + description + "TLS-related information."; + } + } + } + } + } + } + } + + /* + * Configuration data nodes + */ + + container pcep { + presence "The PCEP is enabled"; + description + "Parameters for list of configured PCEP entities + on the device."; + container entity { + description + "The configured PCEP entity on the device."; + leaf-list addr { + type inet:ip-address-no-zone; + min-elements 1; + ordered-by user; + description + "The local Internet address of this PCEP entity. + If operating as a PCE server, the PCEP entity + listens on this address. If operating as a PCC, + the PCEP entity binds outgoing TCP connections + to this address based on the address family. It is + possible for the PCEP entity to operate as both a + PCC and a PCE server, in which case it uses this + address both to listen for incoming TCP connections + and to bind outgoing TCP connections."; + } + leaf enabled { + type boolean; + default "true"; + description + "The administrative status of this PCEP + entity; set to true when UP."; + } + leaf role { + type role; + must '(. != "unknown")' { + error-message "The PCEP entity role cannot be unknown"; + } + mandatory true; + description + "The role that this entity can play. + Takes one of the following values: + - pcc(1): this PCEP entity is a PCC, + - pce(2): this PCEP entity is a PCE, + - pcc-and-pce(3): this PCEP entity is both + a PCC and a PCE."; + } + leaf description { + type string; + description + "Description of the PCEP entity configured + by the user."; + } + leaf speaker-entity-id { + if-feature "sync-opt"; + type string; + description + "The Speaker Entity Identifier."; + reference + "RFC 8232: Optimizations of Label Switched + Path State Synchronization Procedures for + a Stateful PCE"; + } + leaf admin-status { + type boolean; + default "true"; + description + "The administrative status of this PCEP entity. + The value true represents admin status as up. + This is the desired operational status as + currently set by an operator or by default in + the implementation. The value of oper-status + represents the current status of an attempt to + reach this desired status."; + } + leaf index { + type uint32; + config false; + description + "The index of the operational PECP entity."; + } + leaf oper-status { + type oper-status; + config false; + description + "The operational status of the PCEP entity. + Takes one of the following values: + - oper-status-up(1): the PCEP entity is active, + - oper-status-down(2): the PCEP entity is inactive, + - oper-status-going-up(3): the PCEP entity is + activating, + - oper-status-going-down(4): the PCEP entity is + deactivating, + - oper-status-failed(5): the PCEP entity has + failed and will recover when possible, + - oper-status-failed-perm(6): the PCEP entity + has failed and will not recover without + operator intervention."; + } + uses domain-info { + description + "Local PCEP entity information."; + } + uses auth { + description + "Local authorization and security parameters."; + } + container pce-info { + when "../role = 'pce'" + + "or " + + "../role = 'pcc-and-pce'" { + description + "These fields are applicable when the role is PCE."; + } + description + "The local PCE entity PCE information."; + uses pce-info { + description + "Local PCE information."; + } + container path-key { + if-feature "path-key"; + description + "Path-key configuration."; + reference + "RFC 5520: Preserving Topology Confidentiality in + Inter-Domain Path Computation Using a Path-Key- + Based Mechanism"; + leaf enabled { + type boolean; + default "false"; + description + "Enabled or disabled; set to true when enabled."; + } + leaf discard-timer { + type uint32; + units "minutes"; + default "10"; + description + "A timer to discard unwanted path-keys."; + } + leaf reuse-time { + type uint32 { + range "30..max"; + } + units "minutes"; + default "30"; + description + "A time after which the path-keys could be reused."; + } + leaf pce-id { + type inet:ip-address-no-zone; + description + "PCE address to be used in each Path-Key Subobject + (PKS), same as local PCE entity IP address."; + } + } + } + leaf connect-timer { + type uint16 { + range "1..max"; + } + units "seconds"; + default "60"; + description + "The time in seconds that the PCEP entity will wait + to establish a TCP connection with a peer. If a + TCP connection is not established within this time, + then PCEP aborts the session setup attempt."; + reference + "RFC 5440: Path Computation Element (PCE) Communication + Protocol (PCEP)"; + } + leaf connect-max-retry { + type uint32; + default "5"; + description + "The maximum number of times the system tries to + establish a TCP connection to a peer before the + session with the peer transitions to the idle + state."; + reference + "RFC 5440: Path Computation Element (PCE) Communication + Protocol (PCEP)"; + } + leaf init-back-off-timer { + type uint16 { + range "1..max"; + } + units "seconds"; + mandatory true; + description + "The initial back-off time in seconds for retrying + a failed session setup attempt to a peer. + The back-off time increases for each failed + session setup attempt, until a maximum back-off + time is reached. The maximum back-off time is the + max-back-off-timer leaf."; + reference + "RFC 5440: Path Computation Element (PCE) Communication + Protocol (PCEP)"; + } + leaf max-back-off-timer { + type uint32; + units "seconds"; + mandatory true; + description + "The maximum back-off time in seconds for retrying + a failed session setup attempt to a peer. + The back-off time increases for each failed session + setup attempt, until this maximum value is reached. + Session setup attempts then repeat periodically + without any further increase in back-off time."; + reference + "RFC 5440: Path Computation Element (PCE) Communication + Protocol (PCEP)"; + } + leaf open-wait-timer { + type uint16; + units "seconds"; + config false; + description + "The time in seconds that the PCEP entity will wait + to receive an Open message from a peer after the + TCP connection has come up. + If no Open message is received within this time, then + PCEP terminates the TCP connection and deletes the + associated sessions."; + reference + "RFC 5440: Path Computation Element (PCE) Communication + Protocol (PCEP)"; + } + leaf keep-wait-timer { + type uint16; + units "seconds"; + config false; + description + "The time in seconds that the PCEP entity will wait + to receive a Keepalive or PCErr message from a peer + during session initialization after receiving an + Open message. If no Keepalive or PCErr message is + received within this time, then PCEP terminates the + TCP connection and deletes the associated + sessions."; + reference + "RFC 5440: Path Computation Element (PCE) Communication + Protocol (PCEP)"; + } + leaf keepalive-timer { + type uint8; + units "seconds"; + default "30"; + description + "The Keepalive timer that this PCEP + entity will propose in the initial Open message of + each session it is involved in. This is the + maximum time between two consecutive messages sent + to a peer. Zero means that the PCEP entity prefers + not to send Keepalives at all. + Note that the actual Keepalive transmission + intervals, in either direction of an active PCEP + session, are determined by negotiation between the + peers as specified by RFC 5440 and thus may differ + from this configured value."; + reference + "RFC 5440: Path Computation Element (PCE) Communication + Protocol (PCEP)"; + } + leaf dead-timer { + type uint8; + units "seconds"; + must '(. > ../keepalive-timer)' { + error-message "The DeadTimer must be " + + "larger than the Keepalive timer"; + } + default "120"; + description + "The DeadTimer that this PCEP entity will propose + in the initial Open message of each session it is + involved in. This is the time after which a peer + should declare a session down if it does not + receive any PCEP messages. Zero suggests that the + peer does not run a DeadTimer at all."; + reference + "RFC 5440: Path Computation Element (PCE) Communication + Protocol (PCEP)"; + } + leaf allow-negotiation { + type boolean; + default "true"; + description + "Whether the PCEP entity will permit the negotiation + of session parameters."; + } + leaf max-keepalive-timer { + type uint8; + units "seconds"; + mandatory true; + description + "The maximum value that this PCEP entity will + accept from a peer for the interval between + Keepalive transmissions. Zero means that the PCEP + entity will allow no Keepalive transmission at + all."; + } + leaf max-dead-timer { + type uint8; + units "seconds"; + mandatory true; + description + "The maximum value in seconds that this PCEP + entity will accept from a peer for the DeadTimer. + Zero means that the PCEP entity will allow not + running a DeadTimer."; + } + leaf min-keepalive-timer { + type uint8; + units "seconds"; + mandatory true; + description + "The minimum value in seconds that this PCEP + entity will accept for the interval between + Keepalive transmissions. Zero means that the + PCEP entity insists on no Keepalive + transmission at all."; + } + leaf min-dead-timer { + type uint8; + units "seconds"; + mandatory true; + description + "The minimum value in seconds that this PCEP + entity will accept for the DeadTimer. Zero + means that the PCEP entity insists on not + running a DeadTimer."; + } + leaf sync-timer { + if-feature "svec"; + type uint16; + units "seconds"; + default "60"; + description + "The value of SyncTimer in seconds is used in the + case of synchronized path computation request + using the SVEC object. If after the expiration of + the SyncTimer all the path computation requests + have not been received, a protocol error is + triggered, and the PCE must cancel the whole set + of path computation requests. + Zero means that the PCEP entity does not use the + SyncTimer."; + reference + "RFC 5440: Path Computation Element (PCE) + Communication Protocol (PCEP)"; + } + leaf request-timer { + type uint16 { + range "1..max"; + } + units "seconds"; + mandatory true; + description + "The maximum time that the PCEP entity will wait + for a response to a PCReq message."; + } + leaf max-sessions { + type uint32; + mandatory true; + description + "Maximum number of sessions involving this PCEP + entity that can exist at any time."; + } + leaf max-unknown-reqs { + type uint32; + default "5"; + description + "The maximum number of unrecognized requests and + replies that any session on this PCEP entity is + willing to accept per minute before terminating + the session. + A PCRep message contains an unrecognized reply + if it contains an RP object whose request ID + does not correspond to any in-progress request + sent by this PCEP entity. + A PCReq message contains an unrecognized request + if it contains an RP object whose request ID is + zero."; + reference + "RFC 5440: Path Computation Element (PCE) + Communication Protocol (PCEP)"; + } + leaf max-unknown-msgs { + type uint32; + default "5"; + description + "The maximum number of unknown messages that any + session on this PCEP entity is willing to accept + per minute before terminating the session."; + reference + "RFC 5440: Path Computation Element (PCE) + Communication Protocol (PCEP)"; + } + leaf pcep-notification-max-rate { + type uint32; + mandatory true; + description + "This variable indicates the maximum number of + notifications issued per second. If events + occur more rapidly, the implementation may + simply fail to emit these notifications during + that period or may queue them until an + appropriate time. A value of 0 means no + notifications are emitted and all should be + discarded (that is, not queued)."; + } + container stateful-parameter { + if-feature "stateful"; + description + "The configured stateful PCE parameters."; + leaf state-timeout { + type uint32; + units "seconds"; + mandatory true; + description + "When a PCEP session is terminated, a PCC + waits for this time period before flushing + LSP state associated with that PCEP session + and reverting to operator-defined default + parameters or behaviors. The max value + represents infinity."; + reference + "RFC 8231: Path Computation Element Communication + Protocol (PCEP) Extensions for Stateful PCE"; + } + leaf redelegation-timeout { + when "../../role = 'pcc'" + + "or " + + "../../role = 'pcc-and-pce'" { + description + "This field is applicable when the role is + PCC."; + } + type uint32; + units "seconds"; + must '(. < ../state-timeout)' { + error-message "The Redelegation Timeout must be " + + "less than the State Timeout"; + } + mandatory true; + description + "When a PCEP session is terminated, a PCC + waits for this time period before revoking + LSP delegation to a PCE and attempting to + redelegate LSPs associated with the + terminated PCEP session to an alternate + PCE."; + reference + "RFC 8231: Path Computation Element Communication + Protocol (PCEP) Extensions for Stateful PCE"; + } + leaf rpt-non-pcep-lsp { + when "../../role = 'pcc'" + + "or " + + "../../role = 'pcc-and-pce'" { + description + "This field is applicable when the role is + PCC."; + } + type boolean; + default "true"; + description + "If set, a PCC reports LSPs that are not + controlled by any PCE (for example, LSPs + that are statically configured at the + PCC)."; + } + reference + "RFC 8231: Path Computation Element Communication Protocol + (PCEP) Extensions for Stateful PCE"; + } + container of-list { + when "../role = 'pce'" + + "or " + + "../role = 'pcc-and-pce'" { + description + "These fields are applicable when the role is + PCE."; + } + if-feature "objective-function"; + uses of-list; + description + "The authorized OF-List at PCE for all peers."; + } + container lsp-db { + if-feature "stateful"; + config false; + description + "The LSP-DB."; + leaf db-ver { + when "../../role = 'pcc'" + + "or " + + "../../role = 'pcc-and-pce'" { + description + "This field is applicable when the role is + PCC."; + } + if-feature "sync-opt"; + type uint64; + description + "The LSP State Database Version Number."; + } + list association-list { + if-feature "association"; + key "type id source global-source extended-id"; + description + "List of all PCEP associations."; + reference + "RFC 8697: Path Computation Element Communication + Protocol (PCEP) Extensions for Establishing + Relationships between Sets of Label Switched + Paths (LSPs)"; + leaf type { + type identityref { + base te-types:association-type; + } + description + "The PCEP Association Type."; + reference + "IANA PCEP: ASSOCIATION Type Field in Path + Computation Element Protocol (PCEP) Numbers + RFC 8697: Path Computation Element Communication + Protocol (PCEP) Extensions for Establishing + Relationships between Sets of Label Switched + Paths (LSPs)"; + } + leaf id { + type uint16; + description + "PCEP Association ID."; + } + leaf source { + type inet:ip-address-no-zone; + description + "PCEP Association Source."; + } + leaf global-source { + type uint32; + description + "PCEP Global Association Source."; + } + leaf extended-id { + type string; + description + "Additional information to support unique + identification (Extended Association ID)."; + } + list lsp { + key "plsp-id pcc-id lsp-id"; + description + "List of all LSP in this association."; + leaf plsp-id { + type leafref { + path "/pcep/entity/lsp-db/" + + "lsp/plsp-id"; + } + description + "Reference to PLSP-ID in LSP-DB."; + } + leaf pcc-id { + type leafref { + path "/pcep/entity/lsp-db/" + + "lsp[plsp-id=current()/" + + "../plsp-id]/pcc-id"; + } + description + "Reference to PCC-ID in LSP-DB."; + } + leaf lsp-id { + type leafref { + path "/pcep/entity/lsp-db/" + + "lsp[plsp-id=current()/../plsp-id]" + + "[pcc-id=current()/../pcc-id]/lsp-id"; + } + description + "Reference to LSP-ID in LSP-DB."; + } + } + } + list lsp { + key "plsp-id pcc-id lsp-id"; + description + "List of all LSPs in LSP-DB."; + leaf plsp-id { + type uint32 { + range "1..1048575"; + } + description + "A PCEP-specific identifier for the LSP. A PCC + creates a unique PLSP-ID for each LSP that is + constant for the lifetime of a PCEP session. + PLSP-ID is 20 bits with 0 and 0xFFFFF + reserved."; + } + leaf pcc-id { + type inet:ip-address-no-zone; + description + "The local IP address of the PCC that + generated the PLSP-ID."; + } + leaf source { + type inet:ip-address-no-zone; + description + "Tunnel sender address extracted from + LSP-IDENTIFIERS TLV."; + reference + "RFC 8231: Path Computation Element + Communication Protocol (PCEP) Extensions + for Stateful PCE"; + } + leaf destination { + type inet:ip-address-no-zone; + description + "Tunnel endpoint address extracted from + LSP-IDENTIFIERS TLV."; + reference + "RFC 8231: Path Computation Element + Communication Protocol (PCEP) Extensions + for Stateful PCE"; + } + leaf tunnel-id { + type uint16; + description + "Tunnel identifier used in the LSP-IDENTIFIERS + TLV that remains constant over the life + of the tunnel."; + reference + "RFC 8231: Path Computation Element + Communication Protocol (PCEP) Extensions + for Stateful PCE"; + } + leaf lsp-id { + type uint16; + description + "Identifier used in the LSP-IDENTIFIERS TLV + that can be changed to allow a sender to share + resources with itself."; + reference + "RFC 8231: Path Computation Element + Communication Protocol (PCEP) Extensions + for Stateful PCE"; + } + leaf extended-tunnel-id { + type inet:ip-address-no-zone; + description + "Extended tunnel ID of the LSP in LSP-IDENTIFIERS + TLV. The all-zeros format is represented as + 0.0.0.0 and ::."; + reference + "RFC 8231: Path Computation Element + Communication Protocol (PCEP) Extensions + for Stateful PCE"; + } + leaf admin-state { + type boolean; + default "true"; + description + "The desired operational state."; + } + leaf operational-state { + type operational-state; + description + "The operational status of the LSP."; + } + container delegated { + description + "The delegation-related parameters."; + leaf enabled { + type boolean; + default "false"; + description + "LSP is delegated or not; set to true when + delegated."; + } + leaf peer { + when '../enabled' { + description + "The LSP must be delegated."; + } + type leafref { + path "/pcep/entity/peers/peer/addr"; + } + description + "At the PCC, the reference to the PCEP peer to + which LSP is delegated; at the PCE, the + reference to the PCEP peer that delegated this + LSP."; + } + leaf srp-id { + type uint32 { + range "1..4294967294"; + } + description + "The last SRP-ID-number associated with this + LSP. The values 0x00000000 and 0xFFFFFFFF + are reserved."; + } + } + container initiation { + if-feature "pce-initiated"; + description + "The parameters related to PCE initiation."; + reference + "RFC 8281: Path Computation Element Communication + Protocol (PCEP) Extensions for PCE-Initiated LSP + Setup in a Stateful PCE Model"; + leaf enabled { + type boolean; + default "false"; + description + "Set to true if this LSP is initiated by a PCE."; + } + leaf peer { + when '../enabled' { + description + "The LSP must be PCE-initiated."; + } + type leafref { + path "/pcep/entity/peers/peer/addr"; + } + description + "If the role is PCC, this leaf refers to the PCEP + peer (PCE) that initiated this LSP. If the role + is PCE, this leaf refers to the PCEP peer (PCC) + where the LSP is initiated."; + } + } + leaf symbolic-path-name { + type string; + description + "The symbolic path name associated with the LSP."; + reference + "RFC 8231: Path Computation Element Communication + Protocol (PCEP) Extensions for Stateful PCE"; + } + leaf last-error { + type identityref { + base lsp-error; + } + description + "The last error for the LSP."; + } + leaf pst { + type identityref { + base te-types:path-signaling-type; + } + default "te-types:path-setup-rsvp"; + description + "The Path Setup Type (PST). Note that the + te-types model uses the term Path Signaling + Type."; + reference + "RFC 8408: Conveying Path Setup Type in PCE + Communication Protocol (PCEP) Messages"; + } + list association-list { + if-feature "association"; + key "type id source global-source extended-id"; + description + "List of all PCEP associations."; + leaf type { + type leafref { + path "/pcep/entity/lsp-db/" + + "association-list/type"; + } + description + "PCEP Association Type."; + } + leaf id { + type leafref { + path "/pcep/entity/lsp-db/" + + "association-list[type=current()/" + + "../type]/id"; + } + description + "PCEP Association ID."; + } + leaf source { + type leafref { + path "/pcep/entity/lsp-db/" + + "association-list[type=current()/../type]" + + "[id=current()/../id]/source"; + } + description + "PCEP Association Source."; + } + leaf global-source { + type leafref { + path "/pcep/entity/lsp-db/" + + "association-list[type=current()/../type]" + + "[id=current()/../id]" + + "[source=current()/../source]" + + "/global-source"; + } + description + "PCEP Global Association Source."; + } + leaf extended-id { + type leafref { + path "/pcep/entity/lsp-db/" + + "association-list[type=current()/../type]" + + "[id=current()/../id]" + + "[source=current()/../source]" + + "[global-source=current()/../global-source]" + + "/extended-id"; + } + description + "Additional information to + support unique identification."; + } + reference + "RFC 8697: Path Computation Element Communication + Protocol (PCEP) Extensions for Establishing + Relationships between Sets of Label Switched + Paths (LSPs)"; + } + } + } + container path-keys { + when "../role = 'pce' or ../role = 'pcc-and-pce'" { + description + "These fields are applicable when the role is + PCE."; + } + if-feature "path-key"; + config false; + description + "The path-keys generated by the PCE."; + reference + "RFC 5520: Preserving Topology Confidentiality + in Inter-Domain Path Computation Using a Path- + Key-Based Mechanism"; + list path-key { + key "key"; + description + "The list of path-keys generated by the PCE."; + leaf key { + type uint16; + description + "The identifier or token used to represent + the Confidential Path Segment (CPS) within + the context of the PCE."; + } + container cps { + description + "The Confidential Path Segment (CPS)."; + list explicit-route-objects { + key "index"; + description + "List of Explicit Route Objects (EROs)."; + leaf index { + type uint32; + description + "ERO subobject index."; + } + uses te-types:explicit-route-hop; + } + } + leaf pcc-requester { + type leafref { + path "/pcep/entity/peers/peer/addr"; + } + description + "Reference to PCC peer address that + issued the original request that led + to the creation of the path-key."; + } + leaf req-id { + type uint32; + description + "The request ID of the original PCReq."; + } + leaf retrieved { + type boolean; + description + "If path-key has been retrieved yet."; + } + leaf pcc-retrieved { + when '../retrieved' { + description + "The path-key should be retrieved."; + } + type leafref { + path "/pcep/entity/peers/peer/addr"; + } + description + "Reference to PCC peer address that + retrieved the path-key."; + } + leaf creation-time { + type yang:timestamp; + description + "The timestamp value at the time this path-key + was created."; + } + leaf discard-time { + type uint32; + units "minutes"; + description + "A time after which this path-key will be + discarded."; + } + leaf reuse-time { + type uint32; + units "minutes"; + description + "A time after which this path-key could be + reused."; + } + } + } + container peers { + description + "The list of configured peers for the + entity (remote PCE)."; + list peer { + key "addr"; + description + "The peer configured for the entity. + (remote PCE)."; + leaf addr { + type inet:ip-address-no-zone; + description + "The local Internet address of this + PCEP peer."; + } + leaf role { + type role; + must '(. != "pcc-and-pce")' { + error-message + "The PCEP peer cannot be both + PCE and PCC at the same time"; + } + mandatory true; + description + "The role of the PCEP peer. + Takes one of the following values: + - unknown(0): this PCEP peer role is not + known, + - pcc(1): this PCEP peer is a PCC, + - pce(2): this PCEP peer is a PCE, + - pcc-and-pce(3): is not allowed as PCEP + peer cannot be acting as both a PCC and a + PCE at the same time."; + } + leaf description { + type string; + description + "Description of the PCEP peer + configured by the user."; + } + uses domain-info { + description + "PCE peer information."; + } + container pce-info { + uses pce-info { + description + "Using the PCE peer information grouping."; + } + description + "The PCE peer information."; + } + leaf delegation-pref { + if-feature "stateful"; + type uint8 { + range "0..7"; + } + mandatory true; + description + "The PCE peer delegation preference, where + 7 reflects the highest preference."; + } + uses auth { + description + "The PCE peer authorization and security + parameters."; + } + leaf discontinuity-time { + type yang:timestamp; + config false; + description + "The timestamp of the time when the information and + statistics were last reset."; + } + leaf initiate-session { + type boolean; + config false; + description + "Indicates whether the local PCEP entity initiates + sessions to this peer or waits for the peer to + initiate a session."; + } + leaf session-exists { + type boolean; + config false; + description + "Indicates whether a session with + this peer currently exists."; + } + leaf session-up-time { + type yang:timestamp; + config false; + description + "The timestamp value of the last time a + session with this peer was successfully + established."; + } + leaf session-fail-time { + type yang:timestamp; + config false; + description + "The timestamp value of the last time a + session with this peer failed to be + established."; + } + leaf session-fail-up-time { + type yang:timestamp; + config false; + description + "The timestamp value of the last time a + session with this peer failed from + active."; + } + container sessions { + config false; + description + "This entry represents a single PCEP + session in which the local PCEP entity participates. + This entry exists only if the corresponding PCEP + session has been initialized by some event, such as + manual user configuration, auto-discovery of a peer, + or an incoming TCP connection."; + list session { + key "initiator"; + description + "The list of sessions; note that for a time being + two sessions may exist for a peer."; + leaf initiator { + type initiator; + description + "The initiator of the session, that is, whether + the TCP connection was initiated by the local + PCEP entity or the peer. + There is a window during session + initialization where two sessions can exist + between a pair of PCEP speakers, each + initiated by one of the speakers. One of + these sessions is always discarded before it + leaves OpenWait state. However, before it is + discarded, two sessions to the given peer + appear transiently in this YANG module. The + sessions are distinguished by who initiated + them, and so this field is the key."; + } + leaf role { + type leafref { + path "../../../role"; + } + description + "The peer role."; + } + leaf state-last-change { + type yang:timestamp; + description + "The timestamp value at the time this + session entered its current state as + denoted by the state leaf."; + } + leaf state { + type sess-state; + description + "The current state of the session. + The set of possible states excludes the + idle state since entries do not exist + in the idle state."; + } + leaf session-creation { + type yang:timestamp; + description + "The timestamp value at the time this + session was created."; + } + leaf connect-retry { + type yang:counter32; + description + "The number of times that the local PCEP + entity has attempted to establish a TCP + connection for this session without + success. The PCEP entity gives up when + this reaches connect-max-retry."; + } + leaf local-id { + type uint8; + description + "The value of the PCEP session ID used by + the local PCEP entity in the Open message + for this session. If the state is tcp-pending, + then this is the session ID that will be + used in the Open message. Otherwise, this + is the session ID that was sent in the + Open message."; + reference + "RFC 5440: Path Computation Element (PCE) + Communication Protocol (PCEP)"; + } + leaf remote-id { + type uint8; + description + "The value of the PCEP session ID used by the + peer in its Open message for this session. + + If the state is TCPPending or OpenWait, then + this leaf is not used and MUST be set to + zero."; + reference + "RFC 5440: Path Computation Element (PCE) + Communication Protocol (PCEP)"; + } + leaf keepalive-timer { + type uint8; + units "seconds"; + description + "The agreed maximum interval at which the local + PCEP entity transmits PCEP messages on this PCEP + session. Zero means that the local PCEP entity + never sends Keepalives on this session. + + This field is used if and only if the state + is session-up. Otherwise, it is not used and + MUST be set to zero."; + reference + "RFC 5440: Path Computation Element (PCE) + Communication Protocol (PCEP)"; + } + leaf peer-keepalive-timer { + type uint8; + units "seconds"; + description + "The agreed maximum interval at which the peer + transmits PCEP messages on this PCEP session. + Zero means that the peer never sends Keepalives + on this session. + + This field is used if and only if state is + session-up. Otherwise, it is not used and MUST + be set to zero."; + reference + "RFC 5440: Path Computation Element (PCE) + Communication Protocol (PCEP)"; + } + leaf dead-timer { + type uint8; + units "seconds"; + description + "The DeadTimer interval for this PCEP session."; + reference + "RFC 5440: Path Computation Element (PCE) + Communication Protocol (PCEP)"; + } + leaf peer-dead-timer { + type uint8; + units "seconds"; + description + "The peer's DeadTimer interval for this PCEP + session. + + If the state is TCPPending or OpenWait, then + this leaf is not used and MUST be set to zero."; + reference + "RFC 5440: Path Computation Element (PCE) + Communication Protocol (PCEP)"; + } + leaf ka-hold-time-rem { + type uint8; + units "seconds"; + description + "The Keepalive hold time remaining for this + session. + + If the state is TCPPending or OpenWait, then + this field is not used and MUST be set to + zero."; + } + leaf overloaded { + type boolean; + description + "If the local PCEP entity has informed the peer + that it is currently overloaded, then this is + set to true. Otherwise, it is set to false."; + reference + "RFC 5440: Path Computation Element (PCE) + Communication Protocol (PCEP)"; + } + leaf overloaded-timestamp { + when '../overloaded' { + description + "Valid when overloaded."; + } + type yang:timestamp; + description + "The timestamp value of the time when the + overloaded field was set to true."; + } + leaf overload-time { + type uint32; + units "seconds"; + description + "The interval of time that is remaining until the + local PCEP entity will cease to be overloaded on + this session. + + This field is only used if overloaded is set to + true. Otherwise, it is not used and MUST be set + to zero."; + reference + "RFC 5440: Path Computation Element (PCE) + Communication Protocol (PCEP)"; + } + leaf peer-overloaded { + type boolean; + description + "If the peer has informed the local PCEP entity + that it is currently overloaded, then this is + set to true. Otherwise, it is set to false."; + reference + "RFC 5440: Path Computation Element (PCE) + Communication Protocol (PCEP)"; + } + leaf peer-overloaded-timestamp { + when '../peer-overloaded' { + description + "Valid when peer is overloaded."; + } + type yang:timestamp; + description + "The timestamp value of the time when the + peer-overloaded field was set to true."; + } + leaf peer-overload-time { + type uint32; + units "seconds"; + description + "The interval of time that is remaining until + the peer will cease to be overloaded. If it + is not known how long the peer will stay in + overloaded state, this leaf is set to zero. + + This field is only used if peer-overloaded + is set to true. Otherwise, it is not used + and MUST be set to zero."; + reference + "RFC 5440: Path Computation Element (PCE) + Communication Protocol (PCEP)"; + } + leaf lspdb-sync { + if-feature "stateful"; + type sync-state; + description + "The LSP-DB state synchronization status."; + reference + "RFC 8231: Path Computation Element Communication + Protocol (PCEP) Extensions for Stateful PCE"; + } + leaf recv-db-ver { + when "../role = 'pcc'" + + "or " + + "../role = 'pcc-and-pce'" { + description + "This field is applicable when the role is + PCC."; + } + if-feature "stateful"; + if-feature "sync-opt"; + type uint64; + description + "The last received LSP State Database Version + Number."; + reference + "RFC 8231: Path Computation Element Communication + Protocol (PCEP) Extensions for Stateful PCE"; + } + container of-list { + when "../role = 'pce'" + + "or " + + "../role = 'pcc-and-pce'" { + description + "These fields are applicable when the role is + PCE."; + } + if-feature "objective-function"; + uses of-list; + description + "Indicate the list of supported OF on this + session."; + reference + "RFC 5541: Encoding of Objective Functions in + the Path Computation Element Communication + Protocol (PCEP)"; + } + container pst-list { + when "../role = 'pce'" + + "or " + + "../role = 'pcc-and-pce'" { + description + "These fields are applicable when the role is + PCE."; + } + description + "Indicate the list of supported + PST on this session."; + reference + "RFC 8408: Conveying Path Setup Type in PCE + Communication Protocol (PCEP) Messages"; + list path-setup-type { + key "pst"; + description + "The list of PST."; + leaf pst { + type identityref { + base te-types:path-signaling-type; + } + description + "The PST supported."; + } + } + } + container assoc-type-list { + if-feature "association"; + description + "Indicate the list of supported association types + on this session."; + reference + "RFC 8697: Path Computation Element Communication + Protocol (PCEP) Extensions for Establishing + Relationships between Sets of Label Switched + Paths (LSPs)"; + list assoc-type { + key "at"; + description + "The list of authorized association types."; + leaf at { + type identityref { + base te-types:association-type; + } + description + "The association type authorized."; + } + } + } + leaf speaker-entity-id { + if-feature "sync-opt"; + type string; + description + "The Speaker Entity Identifier."; + reference + "RFC 8232: Optimizations of Label Switched + Path State Synchronization Procedures for + a Stateful PCE"; + } + } + } + } + } + } + } + + /* + * Notifications + */ + + notification pcep-session-up { + description + "This notification is sent when the value of + '/pcep/peers/peer/sessions/session/state' + enters the 'session-up' state."; + uses notification-session-hdr; + leaf state-last-change { + type yang:timestamp; + description + "The timestamp value at the time this session + entered its current state as denoted by the state + leaf."; + } + leaf state { + type sess-state; + description + "The current state of the session. + The set of possible states excludes the idle state + since entries do not exist in the idle state."; + } + reference + "RFC 5440: Path Computation Element (PCE) Communication + Protocol (PCEP)"; + } + + notification pcep-session-down { + description + "This notification is sent when the value of + '/pcep/peers/peer/sessions/session/state' + leaves the 'session-up' state."; + uses notification-instance-hdr; + leaf session-initiator { + type initiator; + description + "The initiator of the session."; + } + leaf state-last-change { + type yang:timestamp; + description + "The timestamp value at the time this session + entered its current state as denoted by the state + leaf."; + } + leaf state { + type sess-state; + description + "The current state of the session. + The set of possible states excludes the idle state + since entries do not exist in the idle state."; + } + reference + "RFC 5440: Path Computation Element (PCE) Communication + Protocol (PCEP)"; + } + + notification pcep-session-local-overload { + description + "This notification is sent when the local PCEP entity + enters overload state for a peer."; + uses notification-session-hdr; + leaf overloaded { + type boolean; + description + "If the local PCEP entity has informed the peer + that it is currently overloaded, then this is set + to true. Otherwise, it is set to false."; + } + leaf overloaded-timestamp { + type yang:timestamp; + description + "The timestamp value of the time when the + overloaded field was set to true."; + } + leaf overload-time { + type uint32; + units "seconds"; + description + "The interval of time that is remaining until the + local PCEP entity will cease to be overloaded on + this session."; + } + reference + "RFC 5440: Path Computation Element (PCE) Communication + Protocol (PCEP)"; + } + + notification pcep-session-local-overload-clear { + description + "This notification is sent when the local PCEP entity + leaves overload state for a peer."; + uses notification-instance-hdr; + leaf overloaded { + type boolean; + description + "If the local PCEP entity has informed the peer + that it is currently overloaded, then this is set + to true. Otherwise, it is set to false."; + } + leaf overloaded-clear-timestamp { + type yang:timestamp; + description + "The timestamp value of the time when the + overloaded field was set to false."; + } + reference + "RFC 5440: Path Computation Element (PCE) Communication + Protocol (PCEP)"; + } + + notification pcep-session-peer-overload { + description + "This notification is sent when a peer enters overload + state."; + uses notification-session-hdr; + leaf peer-overloaded { + type boolean; + description + "If the peer has informed the local PCEP entity that + it is currently overloaded, then this is set to + true. Otherwise, it is set to false."; + } + leaf peer-overloaded-timestamp { + type yang:timestamp; + description + "The timestamp value of the time when the + peer-overloaded field was set to true."; + } + leaf peer-overload-time { + type uint32; + units "seconds"; + description + "The interval of time that is remaining until the + peer will cease to be overloaded. If it is not + known how long the peer will stay in overloaded + state, this leaf is set to zero."; + } + reference + "RFC 5440: Path Computation Element (PCE) Communication + Protocol (PCEP)"; + } + + notification pcep-session-peer-overload-clear { + description + "This notification is sent when a peer leaves overload + state."; + uses notification-instance-hdr; + leaf peer-overloaded { + type boolean; + description + "If the peer has informed the local PCEP entity that + it is currently overloaded, then this is set to + true. Otherwise, it is set to false."; + } + leaf peer-overloaded-clear-timestamp { + type yang:timestamp; + description + "The timestamp value of the time when the + peer-overloaded field was set to false."; + } + reference + "RFC 5440: Path Computation Element (PCE) Communication + Protocol (PCEP)"; + } + + /* + * RPC + */ + + rpc trigger-resync { + if-feature "stateful"; + if-feature "sync-opt"; + nacm:default-deny-all; + description + "Trigger the resynchronization at the PCE."; + reference + "RFC 8232: Optimizations of Label Switched Path State + Synchronization Procedures for a Stateful PCE"; + input { + leaf pcc { + type leafref { + path "/pcep/entity/peers/peer/addr"; + } + mandatory true; + description + "The IP address to identify the PCC. The state + synchronization is re-triggered for all LSPs from + the PCC. The rpc on the PCC will be ignored."; + } + } + } +} diff --git a/standard/ietf/RFC/ietf-schedule.yang b/standard/ietf/RFC/ietf-schedule.yang new file mode 120000 index 000000000..c9103ca9b --- /dev/null +++ b/standard/ietf/RFC/ietf-schedule.yang @@ -0,0 +1 @@ +ietf-schedule@2026-03-10.yang \ No newline at end of file diff --git a/standard/ietf/RFC/ietf-schedule@2026-03-10.yang b/standard/ietf/RFC/ietf-schedule@2026-03-10.yang new file mode 100644 index 000000000..76f94f306 --- /dev/null +++ b/standard/ietf/RFC/ietf-schedule@2026-03-10.yang @@ -0,0 +1,868 @@ +module ietf-schedule { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-schedule"; + prefix schedule; + + import ietf-yang-types { + prefix yang; + reference + "RFC 9911: Common YANG Data Types"; + } + + import ietf-system { + prefix sys; + reference + "RFC 7317: A YANG Data Model for System Management"; + } + + organization + "IETF NETMOD Working Group"; + contact + "WG Web: + WG List: + + Editor: Qiufang Ma + + Author: Qin Wu + + Editor: Mohamed Boucadair + + Author: Daniel King + "; + description + "This YANG module defines a set of common types and groupings + that are applicable for scheduling purposes, such as events, + policies, services, or resources based on date and time. + + 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. + + Copyright (c) 2026 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 9922; see + the RFC itself for full legal notices. + + All revisions of IETF and IANA-maintained modules can be found + in the 'YANG Parameters' registry group + (https://www.iana.org/assignments/yang-parameters)."; + + revision 2026-03-10 { + description + "Initial revision."; + reference + "RFC 9922: A Common YANG Data Model for Scheduling"; + } + + feature basic-recurrence { + description + "Indicates that the server supports configuring a basic + scheduled recurrence."; + } + + feature icalendar-recurrence { + description + "Indicates that the server supports configuring a comprehensive + scheduled iCalendar recurrence."; + reference + "RFC 5545: Internet Calendaring and Scheduling Core Object + Specification (iCalendar), + Sections 3.3.10 and 3.8.5"; + } + + typedef weekday { + type enumeration { + enum sunday { + value 0; + description + "Sunday of the week."; + } + enum monday { + value 1; + description + "Monday of the week."; + } + enum tuesday { + value 2; + description + "Tuesday of the week."; + } + enum wednesday { + value 3; + description + "Wednesday of the week."; + } + enum thursday { + value 4; + description + "Thursday of the week."; + } + enum friday { + value 5; + description + "Friday of the week."; + } + enum saturday { + value 6; + description + "Saturday of the week."; + } + } + description + "Seven days of the week."; + } + + typedef duration { + type string { + pattern '((\+)?|\-)P((([0-9]+)D)?(T(0[0-9]|1[0-9]|2[0-3])' + + ':[0-5][0-9]:[0-5][0-9]))|P([0-9]+)W'; + } + description + "Duration of the time. The format can represent nominal + durations (weeks designated by 'W' and days designated by 'D') + and accurate durations (hours:minutes:seconds follows the + designator 'T'). + + Note that this value type doesn't support the 'Y' and 'M' + designators to specify durations in terms of years and months. + + Negative durations are typically used to schedule an alarm to + trigger before an associated time."; + reference + "RFC 5545: Internet Calendaring and Scheduling Core Object + Specification (iCalendar), Sections 3.3.6 and + 3.8.6.3"; + } + + identity schedule-type { + description + "Base identity for schedule type."; + } + + identity one-shot { + base schedule-type; + description + "Indicates a one-shot schedule. That is a schedule that + will trigger an action with the duration being specified as + 0 or end time being specified as the same as the start time, + and then the schedule will disable itself."; + } + + identity period { + base schedule-type; + description + "Indicates a period-based schedule consisting of either a + start and end or a start and positive duration of time. If + neither an end nor a duration is indicated, the period is + considered to last forever."; + } + + identity recurrence { + base schedule-type; + description + "Indicates a recurrence-based schedule."; + } + + identity frequency-type { + description + "Base identity for frequency type."; + } + + identity secondly { + base frequency-type; + description + "Indicates a repeating rule based on an interval of + a second or more."; + } + + identity minutely { + base frequency-type; + description + "Indicates a repeating rule based on an interval of + a minute or more."; + } + + identity hourly { + base frequency-type; + description + "Indicates a repeating rule based on an interval of + an hour or more."; + } + + identity daily { + base frequency-type; + description + "Indicates a repeating rule based on an interval of + a day or more."; + } + + identity weekly { + base frequency-type; + description + "Indicates a repeating rule based on an interval of + a week or more."; + } + + identity monthly { + base frequency-type; + description + "Indicates a repeating rule based on an interval of + a month or more."; + } + + identity yearly { + base frequency-type; + description + "Indicates a repeating rule based on an interval of + a year or more."; + } + + identity schedule-state { + description + "Base identity for schedule state."; + } + + identity enabled { + base schedule-state; + description + "Indicates a schedule with an enabled state."; + } + + identity finished { + base schedule-state; + description + "Indicates a schedule with a finished state. + The finished state indicates that the schedule has ended."; + } + + identity disabled { + base schedule-state; + description + "Indicates a schedule with a disabled state."; + } + + identity out-of-date { + base schedule-state; + description + "Indicates a schedule that is received out-of-date."; + } + + identity conflicted { + base schedule-state; + description + "Indicates a schedule with a conflicted state with other + schedules."; + } + + identity discard-action-type { + description + "Base identity for the action for the responder to take + when a requested schedule cannot be accepted for any + reason and is discarded."; + } + + identity warning { + base discard-action-type; + description + "Indicates that a warning message is generated + when a schedule is discarded."; + } + + identity error { + base discard-action-type; + description + "Indicates that an error message is generated + when a schedule is discarded."; + } + + identity silently-discard { + base discard-action-type; + description + "Indicates that a schedule that is not valid is silently + discarded."; + } + + grouping generic-schedule-params { + description + "Includes a set of generic parameters that are followed by + the entity that supports schedules. + + Such parameters are used as guards to prevent, e.g., stale + configuration."; + leaf description { + type string; + description + "Provides a description of the schedule."; + } + leaf time-zone-identifier { + type sys:timezone-name; + description + "Indicates the identifier for the time zone. This parameter + MUST be specified if any of the date and time values are + in the format of local time. It MUST NOT be applied to + date and time values that are specified in the format of + UTC or time zone offset to UTC."; + } + leaf validity { + type yang:date-and-time; + description + "Specifies the date and time after which a schedule will not + be considered as valid. This parameter takes precedence + over similar attributes that are provided at the schedule + instance itself."; + } + leaf max-allowed-start { + type yang:date-and-time; + description + "Specifies the maximum scheduled start date and time. + A requested schedule whose first instance occurs after + this value cannot be accepted by the entity. Specifically, + a requested schedule will be rejected if the first + occurrence of that schedule exceeds 'max-allowed-start'."; + } + leaf min-allowed-start { + type yang:date-and-time; + description + "Specifies the minimum scheduled start date and time. + A requested schedule whose first instance occurs before + this value cannot be accepted by the entity. Specifically, + a requested schedule will be rejected if the first + occurrence of that schedule is scheduled before + 'min-allowed-start'."; + } + leaf max-allowed-end { + type yang:date-and-time; + description + "A requested schedule will be rejected if the end time of + the last occurrence exceeds 'max-allowed-end'."; + } + leaf discard-action { + type identityref { + base discard-action-type; + } + description + "Specifies the behavior when a schedule is discarded for + any reason, e.g., failing to satisfy the guards in this + grouping or being received out-of-date."; + } + } + + grouping period-of-time { + description + "This grouping is defined for the period of time property."; + reference + "RFC 5545: Internet Calendaring and Scheduling Core Object + Specification (iCalendar), Section 3.3.9"; + leaf period-description { + type string; + description + "Provides a description of the period."; + } + leaf period-start { + type yang:date-and-time; + description + "Period start time."; + } + leaf time-zone-identifier { + type sys:timezone-name; + description + "Indicates the identifier for the time zone. This parameter + MUST be specified if either the 'period-start' or + 'period-end' value is reported in local time format. + It MUST NOT be applied to date and time values that are + specified in the format of UTC or time zone offset + to UTC."; + } + choice period-type { + description + "Indicates the type of the time period. Two types are + supported. If no choice is indicated, the period is + considered to last forever."; + case explicit { + description + "A period of time is identified by its start and its end. + 'period-start' indicates the period start."; + leaf period-end { + type yang:date-and-time; + description + "A period of time is defined by a start and end time. + The start MUST be no later than the end. The period + is considered as a one-shot schedule if the end time + is the same as the start time."; + } + } + case duration { + description + "A period of time is defined by a start and a non-negative + duration of time."; + leaf duration { + type duration { + pattern 'P((([0-9]+)D)?(T(0[0-9]|1[0-9]|2[0-3])' + + ':[0-5][0-9]:[0-5][0-9]))|P([0-9]+)W'; + } + description + "A non-negative duration of time. This value is + equivalent to the format of 'duration' type except that + the value cannot be negative. The period is considered + to be a one-shot schedule if the value is 0."; + } + } + } + } + + grouping recurrence-basic { + description + "A simple definition of recurrence."; + leaf recurrence-description { + type string; + description + "Provides a description of the recurrence."; + } + leaf frequency { + type identityref { + base frequency-type; + } + description + "Specifies the frequency type of the recurrence rule."; + } + leaf interval { + type uint32 { + range "1..max"; + } + must '../frequency' { + error-message "Frequency must be provided."; + } + description + "A positive integer representing the interval at which the + recurrence rule repeats. For example, within a 'daily' + recurrence rule, a value of '8' means every eight days."; + } + } + + grouping recurrence-utc { + description + "A simple definition of recurrence with time specified in + UTC format."; + container recurrence-first { + description + "Specifies the first instance of the recurrence. If + unspecified, the recurrence is considered to start from + the date and time when the recurrence pattern is first + satisfied."; + leaf start-time-utc { + type yang:date-and-time; + description + "Defines the date and time of the first instance + in the recurrence set. A UTC format MUST be used."; + } + leaf duration { + type uint32; + units "seconds"; + description + "When specified, it indicates how long the first occurrence + lasts. Unless specified otherwise, it also applies to all + the other instances in the recurrence set."; + } + } + choice recurrence-end { + description + "Modes to control the end of a recurrence rule. If no + choice is indicated, the recurrence rule is considered + to repeat forever."; + case until { + description + "This case defines a way that limits the end of + a recurrence rule in an inclusive manner."; + leaf utc-until { + type yang:date-and-time; + description + "This parameter specifies a date and time value to + inclusively terminate the recurrence in UTC format. + That is, if the value specified by this parameter is + synchronized with the specified recurrence rule, it + becomes the last instance of the recurrence rule."; + } + } + case count { + description + "This case defines the number of occurrences at which + to terminate the recurrence rule."; + leaf count { + type uint32 { + range "1..max"; + } + description + "The positive number of occurrences at which to + terminate the recurrence rule."; + } + } + } + uses recurrence-basic; + } + + grouping recurrence-with-time-zone { + description + "A simple definition of recurrence to specify a recurrence + rule with a time zone."; + container recurrence-first { + description + "Specifies the first instance of the recurrence. If + unspecified, the recurrence is considered to start from + the date and time when the recurrence pattern is first + satisfied."; + leaf start-time { + type yang:date-and-time; + description + "Defines the date and time of the first instance + in the recurrence set."; + } + leaf duration { + type duration; + description + "When specified, it indicates how long the first + occurrence lasts. Unless specified otherwise, it also + applies to all the other instances in the recurrence + set."; + } + } + leaf time-zone-identifier { + type sys:timezone-name; + description + "Indicates the identifier for the time zone in a time + zone database. This parameter MUST be specified if either + the 'start-time' or 'until' value is reported in local + time format. It MUST NOT be applied to date and time + values that are specified in the format of UTC or time + zone offset to UTC."; + } + choice recurrence-end { + description + "Modes to terminate the recurrence rule. If no choice is + indicated, the recurrence rule is considered to repeat + forever."; + case until { + description + "The end of the recurrence rule is indicated by a specific + date-and-time value in an inclusive manner."; + leaf until { + type yang:date-and-time; + description + "Specifies a date and time value to inclusively terminate + the recurrence. That is, if the value specified by + this parameter is synchronized with the specified + recurrence, it becomes the last instance of the + recurrence."; + } + } + case count { + description + "The end of the recurrence is indicated by the number + of occurrences."; + leaf count { + type uint32 { + range "1..max"; + } + description + "The positive number of occurrences at which to + terminate the recurrence."; + } + } + } + uses recurrence-basic; + } + + grouping recurrence-utc-with-periods { + description + "This grouping defines an aggregate set of repeating + occurrences with UTC time format. The recurrence instances + are specified by the occurrences defined by both the + recurrence rule and 'period-timeticks' list. Duplicate + instances are ignored."; + uses recurrence-utc; + list period-timeticks { + key "period-start"; + description + "A list of periods with timeticks formats."; + leaf period-start { + type yang:timeticks; + must "(not(derived-from-or-self(../../frequency," + + "'schedule:secondly')) or (current() < 100)) and " + + "(not(derived-from-or-self(../../frequency," + + "'schedule:minutely')) or (current() < 6000)) and " + + "(not(derived-from-or-self(../../frequency," + + "'schedule:hourly')) or (current() < 360000)) and " + + "(not(derived-from-or-self(../../frequency," + + "'schedule:daily')) or (current() < 8640000)) and " + + "(not(derived-from-or-self(../../frequency," + + "'schedule:weekly')) or (current() < 60480000)) and " + + "(not(derived-from-or-self(../../frequency," + + "'schedule:monthly')) or (current() < 267840000)) and " + + "(not(derived-from-or-self(../../frequency," + + "'schedule:yearly')) or (current() < 3162240000))" { + error-message + "The 'period-start' must not exceed the frequency + interval."; + } + description + "Start time of the schedule within one recurrence. + + Given that the value is in timeticks format + (i.e., 1/100 of a second), the values in the must + statement translate to 100 = 1 s (secondly), + 6000 = 60 s = 1 min (minutely), and so on for all + instances in the must statement invariant."; + } + leaf period-end { + type yang:timeticks; + description + "End time of the schedule within one recurrence. + The period start MUST be no later than the period + end."; + } + } + } + + grouping recurrence-time-zone-with-periods { + description + "This grouping defines an aggregate set of repeating + occurrences with local time format and time zone specified. + The recurrence instances are specified by the occurrences + defined by both the recurrence rule and 'period' list. + Duplicate instances are ignored."; + uses recurrence-with-time-zone; + list period { + key "period-start"; + description + "A list of periods with date-and-time formats."; + uses period-of-time; + } + } + + grouping icalendar-recurrence { + description + "This grouping specifies properties of a recurrence rule."; + reference + "RFC 5545: Internet Calendaring and Scheduling Core Object + Specification (iCalendar), Section 3.8.5"; + uses recurrence-time-zone-with-periods; + leaf-list bysecond { + type uint32 { + range "0..60"; + } + description + "Specifies a list of seconds within a minute."; + } + leaf-list byminute { + type uint32 { + range "0..59"; + } + description + "Specifies a list of minutes within an hour."; + } + leaf-list byhour { + type uint32 { + range "0..23"; + } + description + "Specifies a list of hours of the day."; + } + list byday { + key "weekday"; + description + "Specifies a list of days of the week."; + leaf-list direction { + when "derived-from-or-self(../../frequency, " + + "'schedule:monthly') or " + + "(derived-from-or-self(../../frequency," + + "'schedule:yearly') and not(../../byyearweek))"; + + type int32 { + range "-53..-1|1..53"; + } + description + "When specified, it indicates the nth occurrence of a + specific day within the monthly or yearly recurrence + rule. For example, within a monthly rule, +1 monday + represents the first Monday within the month, whereas + -1 monday represents the last Monday of the month."; + } + leaf weekday { + type schedule:weekday; + description + "Corresponds to seven days of the week."; + } + } + leaf-list bymonthday { + type int32 { + range "-31..-1|1..31"; + } + description + "Specifies a list of days of the month."; + } + leaf-list byyearday { + type int32 { + range "-366..-1|1..366"; + } + description + "Specifies a list of days of the year."; + } + leaf-list byyearweek { + when "derived-from-or-self(../frequency, 'schedule:yearly')"; + type int32 { + range "-53..-1|1..53"; + } + description + "Specifies a list of weeks of the year."; + } + leaf-list byyearmonth { + type uint32 { + range "1..12"; + } + description + "Specifies a list of months of the year."; + } + leaf-list bysetpos { + type int32 { + range "-366..-1|1..366"; + } + description + "Specifies a list of values that corresponds to the nth + occurrence within the set of recurrence instances + specified by the rule. It must only be used in conjunction + with another 'byxxx' (bysecond, byminute, etc.) rule + part."; + } + leaf workweek-start { + type schedule:weekday; + description + "Specifies the day on which the workweek starts."; + } + leaf-list exception-dates { + type yang:date-and-time; + description + "Defines a list of exceptions for recurrence."; + } + } + + grouping schedule-status { + description + "This grouping defines common properties of scheduling + status."; + leaf state { + type identityref { + base schedule-state; + } + description + "Indicates the current state of the schedule."; + } + leaf version { + type uint16; + description + "Indicates the version number of the schedule."; + } + leaf schedule-type { + type identityref { + base schedule-type; + } + description + "Indicates the schedule type."; + } + leaf local-time { + type yang:date-and-time; + config false; + description + "Reports the local time as used by the entity that + hosts the schedule."; + } + leaf last-update { + type yang:date-and-time; + config false; + description + "Reports the timestamp of when the schedule is last + updated."; + } + leaf counter { + when "derived-from-or-self(../schedule-type, " + + "'schedule:recurrence')"; + type yang:counter32; + config false; + description + "The number of occurrences while invoking the scheduled + action successfully. The count wraps around when it reaches + the maximum value."; + } + leaf last-occurrence { + when "derived-from-or-self(../schedule-type, " + + "'schedule:recurrence')"; + type yang:date-and-time; + config false; + description + "Indicates the timestamp of last occurrence."; + } + leaf upcoming-occurrence { + when "derived-from-or-self(../schedule-type, " + + "'schedule:recurrence')" + + "and derived-from-or-self(../state, 'schedule:enabled')"; + type yang:date-and-time; + config false; + description + "Indicates the timestamp of next occurrence."; + } + leaf last-failed-occurrence { + when "derived-from-or-self(../schedule-type, " + + "'schedule:recurrence')"; + type yang:date-and-time; + config false; + description + "Indicates the timestamp of last failed action triggered by + the schedule."; + } + leaf failure-counter { + when "derived-from-or-self(../schedule-type, " + + "'schedule:recurrence')"; + type yang:counter32; + config false; + description + "Counts the number of failures while invoking the scheduled + action."; + } + } + + grouping schedule-status-with-time-zone { + description + "This grouping defines common properties of scheduling + status, including timezone."; + leaf time-zone-identifier { + type sys:timezone-name; + config false; + description + "Indicates the identifier for the time zone in a time + zone database."; + } + uses schedule-status; + } + + grouping schedule-status-with-name { + description + "This grouping defines common properties of scheduling + status, including a schedule name."; + leaf schedule-name { + type string; + description + "The schedule identifier that uniquely identifies a + schedule within a device, controller, network, etc. + The unicity scope depends on the implementation."; + } + uses schedule-status; + } +} diff --git a/standard/ietf/RFC/ietf-template.yang b/standard/ietf/RFC/ietf-template.yang index 68b4c5988..a51186370 120000 --- a/standard/ietf/RFC/ietf-template.yang +++ b/standard/ietf/RFC/ietf-template.yang @@ -1 +1 @@ -ietf-template@2016-03-20.yang \ No newline at end of file +ietf-template@2023-07-26.yang \ No newline at end of file diff --git a/standard/ietf/RFC/ietf-template@2023-07-26.yang b/standard/ietf/RFC/ietf-template@2023-07-26.yang new file mode 100644 index 000000000..844545a75 --- /dev/null +++ b/standard/ietf/RFC/ietf-template@2023-07-26.yang @@ -0,0 +1,88 @@ +module ietf-template { + yang-version 1.1; + + // replace this string with a unique namespace URN value + + namespace "urn:ietf:params:xml:ns:yang:ietf-template"; + + // replace this string, and try to pick a unique prefix + + prefix temp; + + // import statements here: e.g., + // import ietf-yang-types { prefix yang; } + // import ietf-inet-types { prefix inet; } + // identify the IETF working group if applicable + + organization + "IETF your-wg-name (Expanded WG Name) Working Group"; + + // update this contact statement with your info + + contact + "WG Web: https://datatracker.ietf.org/wg/your-wg-name + WG List: YOUR-WG-NAME + + Editor: your-name + "; + + // replace the first sentence in this "description" statement. + // replace the copyright notice with the most recent + // version, if it has been updated since the publication + // of this document. + + description + "This module defines a template for other YANG modules. + + Copyright (c) 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). + + All revisions of IETF and IANA published modules can be found + at the YANG Parameters registry group + (https://www.iana.org/assignments/yang-parameters). + + This version of this YANG module is part of RFC XXXX; see + the RFC itself for full legal notices."; + + // RFC Ed: replace 'date-revision' with the module publication date + // the format is (YYYY-MM-DD) + + // replace XXXX with actual RFC number and remove + // this note + + revision date-revision { + description + "What changed in this revision."; + reference + "RFC XXXX: "; + } + + // Authors: Replace RFC IIII with the RFC number and title + // of the RFC that defined the initial version of + // the module and remove this note + + revision date-initial { + description + "Initial version."; + reference + "RFC IIII: "; + } + + // extension statements + // feature statements + // identity statements + // typedef statements + // grouping statements + // data definition statements + // augment statements + // rpc statements + // notification statements + // DO NOT put deviation statements in a published module +} \ No newline at end of file diff --git a/standard/ietf/RFC/ietf-yang-types.yang b/standard/ietf/RFC/ietf-yang-types.yang index a9d02a25f..00a90d0d3 120000 --- a/standard/ietf/RFC/ietf-yang-types.yang +++ b/standard/ietf/RFC/ietf-yang-types.yang @@ -1 +1 @@ -ietf-yang-types@2013-07-15.yang \ No newline at end of file +ietf-yang-types@2025-12-22.yang \ No newline at end of file diff --git a/standard/ietf/RFC/ietf-yang-types@2025-12-22.yang b/standard/ietf/RFC/ietf-yang-types@2025-12-22.yang new file mode 100644 index 000000000..09218bbd4 --- /dev/null +++ b/standard/ietf/RFC/ietf-yang-types@2025-12-22.yang @@ -0,0 +1,764 @@ +module ietf-yang-types { + namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types"; + prefix yang; + + organization + "IETF Network Modeling (NETMOD) Working Group"; + contact + "WG Web: + WG List: + + Editor: Jürgen Schönwälder + "; + description + "This module contains a collection of generally useful derived + YANG data types. + + 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. + + 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 9911; + see the RFC itself for full legal notices."; + + revision 2025-12-22 { + description + "This revision adds the following new data types: + - yang:date + - yang:date-no-zone + - yang:time + - yang:time-no-zone + - yang:hours32 + - yang:minutes32 + - yang:seconds32 + - yang:centiseconds32 + - yang:milliseconds32 + - yang:microseconds32 + - yang:microseconds64 + - yang:nanoseconds32 + - yang:nanoseconds64 + - yang:language-tag + The yang-identifier definition has been aligned with YANG + 1.1, and types representing time support the representation + of leap seconds. The representation of time zone offsets + has been aligned with RFC 9557. Several description and + pattern statements have been improved."; + reference + "RFC 9911: Common YANG Data Types"; + } + revision 2013-07-15 { + description + "This revision adds the following new data types: + - yang:yang-identifier + - yang:hex-string + - yang:uuid + - yang:dotted-quad"; + reference + "RFC 6991: Common YANG Data Types"; + } + revision 2010-09-24 { + description + "Initial revision."; + reference + "RFC 6021: Common YANG Data Types"; + } + + /*** collection of counter and gauge types ***/ + + typedef counter32 { + type uint32; + description + "The counter32 type represents a non-negative integer + that monotonically increases until it reaches a + maximum value of 2^32-1 (4294967295 decimal), when it + wraps around and starts increasing again from zero. + + Counters have no defined 'initial' value, and thus, a + single value of a counter has (in general) no information + content. Discontinuities in the monotonically increasing + value normally occur at re-initialization of the + management system and at other times as specified in the + description of a schema node using this type. If + discontinuities occur at times other than re-initialization + (for example, at the instantiation of a schema node of type + counter32), then a corresponding schema node should be + defined, with an appropriate type, to indicate the last + discontinuity. + + The counter32 type should not be used for configuration + schema nodes. A default statement SHOULD NOT be used in + combination with the type counter32. + + In the value set and its semantics, this type is equivalent + to the Counter32 type of the SMIv2."; + reference + "RFC 2578: Structure of Management Information Version 2 + (SMIv2)"; + } + + typedef zero-based-counter32 { + type counter32; + default "0"; + description + "The zero-based-counter32 type represents a counter32 + that has the defined 'initial' value zero. + + A data tree node using this type will be set to zero (0) + on creation and will thereafter increase monotonically until + it reaches a maximum value of 2^32-1 (4294967295 decimal), + when it wraps around and starts increasing again from zero. + + Provided that an application discovers a new data tree node + using this type within the minimum time to wrap, it can use + the 'initial' value as a delta. It is important for a + management station to be aware of this minimum time and the + actual time between polls, and to discard data if the actual + time is too long or there is no defined minimum time. + + In the value set and its semantics, this type is equivalent + to the ZeroBasedCounter32 textual convention of the SMIv2."; + reference + "RFC 4502: Remote Network Monitoring Management Information + Base Version 2"; + } + + typedef counter64 { + type uint64; + description + "The counter64 type represents a non-negative integer + that monotonically increases until it reaches a + maximum value of 2^64-1 (18446744073709551615 decimal), + when it wraps around and starts increasing again from zero. + + Counters have no defined 'initial' value, and thus, a + single value of a counter has (in general) no information + content. Discontinuities in the monotonically increasing + value normally occur at re-initialization of the + management system and at other times as specified in the + description of a schema node using this type. If + discontinuities occur at times other than re-initialization + (for example, at the instantiation of a schema node of type + counter64), then a corresponding schema node should be + defined, with an appropriate type, to indicate the last + discontinuity. + + The counter64 type should not be used for configuration + schema nodes. A default statement SHOULD NOT be used in + combination with the type counter64. + + In the value set and its semantics, this type is equivalent + to the Counter64 type of the SMIv2."; + reference + "RFC 2578: Structure of Management Information Version 2 + (SMIv2)"; + } + + typedef zero-based-counter64 { + type counter64; + default "0"; + description + "The zero-based-counter64 type represents a counter64 that + has the defined 'initial' value zero. + + A data tree node using this type will be set to zero (0) + on creation and will thereafter increase monotonically until + it reaches a maximum value of 2^64-1 (18446744073709551615 + decimal), when it wraps around and starts increasing again + from zero. + + Provided that an application discovers a new data tree node + using this type within the minimum time to wrap, it can use + the 'initial' value as a delta. It is important for a + management station to be aware of this minimum time and the + actual time between polls, and to discard data if the actual + time is too long or there is no defined minimum time. + + In the value set and its semantics, this type is equivalent + to the ZeroBasedCounter64 textual convention of the SMIv2."; + reference + "RFC 2856: Textual Conventions for Additional High Capacity + Data Types"; + } + + typedef gauge32 { + type uint32; + description + "The gauge32 type represents a non-negative integer, which + may increase or decrease, but shall never exceed a maximum + value, nor fall below a minimum value. The maximum value + cannot be greater than 2^32-1 (4294967295 decimal), and + the minimum value cannot be smaller than 0. The value of + a gauge32 has its maximum value whenever the information + being modeled is greater than or equal to its maximum + value, and has its minimum value whenever the information + being modeled is smaller than or equal to its minimum value. + If the information being modeled subsequently decreases below + the maximum value, the gauge32 also decreases; likewise, if + the information increases above the minimum value, the + gauge32 also increases. + + In the value set and its semantics, this type is equivalent + to the Gauge32 type of the SMIv2."; + reference + "RFC 2578: Structure of Management Information Version 2 + (SMIv2)"; + } + + typedef gauge64 { + type uint64; + description + "The gauge64 type represents a non-negative integer, which + may increase or decrease, but shall never exceed a maximum + value, nor fall below a minimum value. The maximum value + cannot be greater than 2^64-1 (18446744073709551615), and + the minimum value cannot be smaller than 0. The value of + a gauge64 has its maximum value whenever the information + being modeled is greater than or equal to its maximum + value, and has its minimum value whenever the information + being modeled is smaller than or equal to its minimum value. + If the information being modeled subsequently decreases + below (increases above) the maximum (minimum) value, the + gauge64 also decreases (increases). + + In the value set and its semantics, this type is equivalent + to the CounterBasedGauge64 SMIv2 textual convention defined + in RFC 2856"; + reference + "RFC 2856: Textual Conventions for Additional High Capacity + Data Types"; + } + + /*** collection of identifier-related types ***/ + + typedef object-identifier { + type string { + pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9][0-9]*))))' + + '(\.(0|([1-9][0-9]*)))*'; + } + description + "The object-identifier type represents administratively + assigned names in a registration-hierarchical-name tree. + + Values of this type are denoted as a sequence of numerical + non-negative sub-identifier values. Each sub-identifier + value MUST NOT exceed 2^32-1 (4294967295). Sub-identifiers + are separated by single dots and without any intermediate + whitespace. + + The ASN.1 standard restricts the value space of the first + sub-identifier to 0, 1, or 2. Furthermore, the value space + of the second sub-identifier is restricted to the range + 0 to 39 if the first sub-identifier is 0 or 1. Finally, + the ASN.1 standard requires that an object identifier + has always at least two sub-identifiers. The pattern + captures these restrictions. + + Although the number of sub-identifiers is not limited, + module designers should realize that there may be + implementations that stick with the SMIv2 limit of 128 + sub-identifiers. + + This type is a superset of the SMIv2 OBJECT IDENTIFIER type + since it is not restricted to 128 sub-identifiers. Hence, + this type SHOULD NOT be used to represent the SMIv2 OBJECT + IDENTIFIER type; the object-identifier-128 type SHOULD be + used instead."; + reference + "ISO 9834-1: Information technology -- Procedures for the + operation of object identifier registration authorities -- + Part 1: General procedures and top arcs of the international + object identifier tree"; + } + + typedef object-identifier-128 { + type object-identifier { + pattern '[0-9]*(\.[0-9]*){1,127}'; + } + description + "This type represents object-identifiers restricted to 128 + sub-identifiers. + + In the value set and its semantics, this type is equivalent + to the OBJECT IDENTIFIER type of the SMIv2."; + reference + "RFC 2578: Structure of Management Information Version 2 + (SMIv2)"; + } + + /*** collection of types related to date and time ***/ + + typedef date-and-time { + type string { + pattern + '[0-9]{4}-(1[0-2]|0[1-9])-(0[1-9]|[1-2][0-9]|3[0-1])' + + 'T(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)' + + '(\.[0-9]+)?' + + '(Z|[\+\-]((1[0-3]|0[0-9]):([0-5][0-9])|14:00))?'; + } + description + "The date-and-time type is a profile of the ISO 8601 + standard for representation of dates and times using the + Gregorian calendar. The profile is defined by the + date-time production in Section 5.6 of RFC 3339 and the + update defined in Section 2 of RFC 9557. The value of + 60 for seconds is allowed only in the case of leap seconds. + + The date-and-time type is compatible with the dateTime XML + schema dateTime type with the following notable exceptions: + + (a) The date-and-time type does not allow negative years. + + (b) The time-offset Z indicates that the date-and-time + value is reported in UTC and that the local time zone + reference point is unknown. The time-offset +00:00 + indicates that the date-and-time value is reported in + UTC and that the local time zone reference point is UTC + (see Section 2 of RFC 9557). + + This type is not equivalent to the DateAndTime textual + convention of the SMIv2 since RFC 3339 uses a different + separator between full-date and full-time and provides + higher resolution of time-secfrac. + + The canonical format for date-and-time values with a known + time zone uses a numeric time zone offset that is calculated + using the device's configured known offset to UTC time. A + change of the device's offset to UTC time will cause + date-and-time values to change accordingly. Such changes + might happen periodically if a server automatically follows + daylight saving time (DST) time zone offset changes. The + canonical format for date-and-time values reported in UTC + with an unknown local time zone offset SHOULD use the + time-offset Z and MAY use -00:00 for backwards + compatibility."; + reference + "ISO 8601: Data elements and interchange formats -- Information + interchange -- Representation of dates and times + RFC 3339: Date and Time on the Internet: Timestamps + RFC 9557: Date and Time on the Internet: Timestamps + with Additional Information + RFC 2579: Textual Conventions for SMIv2 + XSD-TYPES: XML Schema Definition Language (XSD) 1.1 + Part 2: Datatypes"; + } + + typedef date { + type string { + pattern '[0-9]{4}-(1[0-2]|0[1-9])-(0[1-9]|[1-2][0-9]|3[0-1])' + + '(Z|[\+\-]((1[0-3]|0[0-9]):([0-5][0-9])|14:00))?'; + } + description + "The date type represents a time-interval of the length + of a day, i.e., 24 hours. It includes an optional time + zone offset. + + The date type is compatible with the XML schema date + type with the following notable exceptions: + + (a) The date type does not allow negative years. + + (b) The time-offset Z indicates that the date value is + reported in UTC and that the local time zone reference + point is unknown. The time-offset +00:00 indicates that + the date value is reported in UTC and that the local + time zone reference point is UTC (see Section 2 of + RFC 9557). + + The canonical format for date values with a known time + zone uses a numeric time zone offset that is calculated using + the device's configured known offset to UTC time. A change of + the device's offset to UTC time will cause date values + to change accordingly. Such changes might happen periodically + if a server automatically follows daylight saving time + (DST) time zone offset changes. The canonical format for + date values reported in UTC with an unknown local time zone + offset uses the time-offset Z."; + reference + "RFC 3339: Date and Time on the Internet: Timestamps + RFC 9557: Date and Time on the Internet: Timestamps + with Additional Information + XSD-TYPES: XML Schema Definition Language (XSD) 1.1 + Part 2: Datatypes"; + } + + typedef date-no-zone { + type date { + pattern '[0-9]{4}-(1[0-2]|0[1-9])-(0[1-9]|[1-2][0-9]|3[0-1])'; + } + description + "The date-no-zone type represents a date without the optional + time zone offset information."; + } + + typedef time { + type string { + pattern + '(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)' + + '(\.[0-9]+)?' + + '(Z|[\+\-]((1[0-3]|0[0-9]):([0-5][0-9])|14:00))?'; + } + description + "The time type represents an instance of time of zero duration + that recurs every day. It includes an optional time zone + offset. The value of 60 for seconds is allowed only in the + case of leap seconds. + + The time type is compatible with the XML schema time + type with the following notable exception: + + (a) The time-offset Z indicates that the time value is + reported in UTC and that the local time zone reference + point is unknown. The time-offset +00:00 indicates that + the time value is reported in UTC and that the local + time zone reference point is UTC (see Section 2 of + RFC 9557). + + The canonical format for time values with a known time + zone uses a numeric time zone offset that is calculated using + the device's configured known offset to UTC time. A change of + the device's offset to UTC time will cause time values + to change accordingly. Such changes might happen periodically + if a server automatically follows daylight saving time + (DST) time zone offset changes. The canonical format for + time values reported in UTC with an unknown local time zone + offset uses the time-offset Z."; + reference + "RFC 3339: Date and Time on the Internet: Timestamps + RFC 9557: Date and Time on the Internet: Timestamps + with Additional Information + XSD-TYPES: XML Schema Definition Language (XSD) 1.1 + Part 2: Datatypes"; + } + + typedef time-no-zone { + type time { + pattern + '(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)' + + '(\.[0-9]+)?'; + } + description + "The time-no-zone type represents a time without the optional + time zone offset information."; + } + + typedef hours32 { + type int32; + units "hours"; + description + "A period of time measured in units of hours. + + The maximum time period that can be expressed is in the + range [-89478485 days 08:00:00 to 89478485 days 07:00:00]. + + This type should be range-restricted in situations + where only non-negative time periods are desirable + (i.e., range '0..max')."; + } + + typedef minutes32 { + type int32; + units "minutes"; + description + "A period of time measured in units of minutes. + + The maximum time period that can be expressed is in the + range [-1491308 days 2:08:00 to 1491308 days 2:07:00]. + + This type should be range-restricted in situations + where only non-negative time periods are desirable + (i.e., range '0..max')."; + } + + typedef seconds32 { + type int32; + units "seconds"; + description + "A period of time measured in units of seconds. + + The maximum time period that can be expressed is in the + range [-24855 days 03:14:08 to 24855 days 03:14:07]. + + This type should be range-restricted in situations + where only non-negative time periods are desirable + (i.e., range '0..max')."; + } + + typedef centiseconds32 { + type int32; + units "centiseconds"; + description + "A period of time measured in units of 10^-2 seconds. + + The maximum time period that can be expressed is in the + range [-248 days 13:13:56 to 248 days 13:13:56]. + + This type should be range-restricted in situations + where only non-negative time periods are desirable + (i.e., range '0..max')."; + } + + typedef milliseconds32 { + type int32; + units "milliseconds"; + description + "A period of time measured in units of 10^-3 seconds. + + The maximum time period that can be expressed is in the + range [-24 days 20:31:23 to 24 days 20:31:23]. + + This type should be range-restricted in situations + where only non-negative time periods are desirable + (i.e., range '0..max')."; + } + + typedef microseconds32 { + type int32; + units "microseconds"; + description + "A period of time measured in units of 10^-6 seconds. + + The maximum time period that can be expressed is in the + range [-00:35:47 to 00:35:47]. + + This type should be range-restricted in situations + where only non-negative time periods are desirable + (i.e., range '0..max')."; + } + + typedef microseconds64 { + type int64; + units "microseconds"; + description + "A period of time measured in units of 10^-6 seconds. + + The maximum time period that can be expressed is in the + range [-106751991 days 04:00:54 to 106751991 days 04:00:54]. + + This type should be range-restricted in situations + where only non-negative time periods are desirable + (i.e., range '0..max')."; + } + + typedef nanoseconds32 { + type int32; + units "nanoseconds"; + description + "A period of time measured in units of 10^-9 seconds. + + The maximum time period that can be expressed is in the + range [-00:00:02 to 00:00:02]. + + This type should be range-restricted in situations + where only non-negative time periods are desirable + (i.e., range '0..max')."; + } + + typedef nanoseconds64 { + type int64; + units "nanoseconds"; + description + "A period of time measured in units of 10^-9 seconds. + + The maximum time period that can be expressed is in the + range [-106753 days 23:12:44 to 106752 days 0:47:16]. + + This type should be range-restricted in situations + where only non-negative time periods are desirable + (i.e., range '0..max')."; + } + + typedef timeticks { + type uint32; + description + "The timeticks type represents a non-negative integer that + represents the time, modulo 2^32 (4294967296 decimal), in + hundredths of a second between two epochs. When a schema + node is defined that uses this type, the description of + the schema node identifies both of the reference epochs. + + In the value set and its semantics, this type is equivalent + to the TimeTicks type of the SMIv2."; + reference + "RFC 2578: Structure of Management Information Version 2 + (SMIv2)"; + } + + typedef timestamp { + type timeticks; + description + "The timestamp type represents the value of an associated + timeticks schema node instance at which a specific occurrence + happened. The specific occurrence must be defined in the + description of any schema node defined using this type. When + the specific occurrence occurred prior to the last time the + associated timeticks schema node instance was zero, then the + timestamp value is zero. + + Note that this requires all timestamp values to be reset to + zero when the value of the associated timeticks schema node + instance reaches 497+ days and wraps around to zero. + + The associated timeticks schema node must be specified + in the description of any schema node using this type. + + In the value set and its semantics, this type is equivalent + to the TimeStamp textual convention of the SMIv2."; + reference + "RFC 2579: Textual Conventions for SMIv2"; + } + + /*** collection of generic address types ***/ + + typedef phys-address { + type string { + pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?'; + } + description + "Represents media- or physical-level addresses represented + as a sequence of octets, each octet represented by two + hexadecimal numbers. Octets are separated by colons. The + canonical representation uses lowercase characters. + + In the value set and its semantics, this type is equivalent + to the PhysAddress textual convention of the SMIv2."; + reference + "RFC 2579: Textual Conventions for SMIv2"; + } + + typedef mac-address { + type string { + pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'; + } + description + "The mac-address type represents a 48-bit IEEE 802 Media + Access Control (MAC) address. The canonical representation + uses lowercase characters. Note that there are IEEE 802 MAC + addresses with a different length that this type cannot + represent. The phys-address type may be used to represent + physical addresses of varying length. + + In the value set and its semantics, this type is equivalent + to the MacAddress textual convention of the SMIv2."; + reference + "IEEE 802: IEEE Standard for Local and Metropolitan Area + Networks: Overview and Architecture + RFC 2579: Textual Conventions for SMIv2"; + } + + /*** collection of XML-specific types ***/ + + typedef xpath1.0 { + type string; + description + "This type represents an XPATH 1.0 expression. + + When a schema node is defined that uses this type, the + description of the schema node MUST specify the XPath + context in which the XPath expression is evaluated."; + reference + "XPATH: XML Path Language (XPath) Version 1.0"; + } + + /*** collection of string types ***/ + + typedef hex-string { + type string { + pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?'; + } + description + "A hexadecimal string with octets represented as hex digits + separated by colons. The canonical representation uses + lowercase characters."; + } + + typedef uuid { + type string { + pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}'; + } + description + "A Universally Unique IDentifier in the string representation + defined in RFC 9562. The canonical representation uses + lowercase characters. + + The following is an example of a UUID in string + representation: + f81d4fae-7dec-11d0-a765-00a0c91e6bf6. + "; + reference + "RFC 9562: Universally Unique IDentifiers (UUIDs)"; + } + + typedef dotted-quad { + type string { + pattern + '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}' + + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'; + } + description + "An unsigned 32-bit number expressed in the dotted-quad + notation, i.e., four octets written as decimal numbers + and separated with the '.' (full stop) character."; + } + + typedef language-tag { + type string; + description + "A language tag according to RFC 5646 (BCP 47). The + canonical representation uses lowercase characters. + + Values of this type must be well-formed language tags, + in conformance with the definition of well-formed tags + in BCP 47. Implementations MAY further limit the values + they accept to those permitted by a 'validating' + processor, as defined in BCP 47. + + The canonical representation of values of this type is + aligned with the SMIv2 LangTag textual convention for + language tags fitting the length constraints imposed + by the LangTag textual convention."; + reference + "RFC 5646: Tags for Identifying Languages + RFC 5131: A MIB Textual Convention for Language Tags"; + } + + /*** collection of YANG-specific types ***/ + + typedef yang-identifier { + type string { + length "1..max"; + pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*'; + } + description + "A YANG identifier string as defined by the 'identifier' + rule in Section 14 of RFC 7950. An identifier must + start with an alphabetic character or an underscore + followed by an arbitrary sequence of alphabetic or + numeric characters, underscores, hyphens, or dots. + + This definition conforms to YANG 1.1 defined in RFC + 7950. In RFC 6991, this definition excluded + all identifiers starting with any possible combination + of the lowercase or uppercase character sequence 'xml', + as required by YANG 1 defined in RFC 6020. If this type + is used in a YANG 1 context, then this restriction still + applies."; + reference + "RFC 7950: The YANG 1.1 Data Modeling Language + RFC 6991: Common YANG Data Types + RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } +}