From 6123e4380a9fc552146ef87255d5e3458b97be5e Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Mon, 16 Jun 2025 14:05:24 +0000 Subject: [PATCH 01/34] Cronjob - daily check of IANA modules. --- standard/iana/iana-dns-class-rr-type.yang | 1 - 1 file changed, 1 deletion(-) delete mode 120000 standard/iana/iana-dns-class-rr-type.yang diff --git a/standard/iana/iana-dns-class-rr-type.yang b/standard/iana/iana-dns-class-rr-type.yang deleted file mode 120000 index 709f6cba3..000000000 --- a/standard/iana/iana-dns-class-rr-type.yang +++ /dev/null @@ -1 +0,0 @@ -iana-dns-class-rr-type@2025-05-20.yang \ No newline at end of file From 82f1d417e4859a109588f6ae08c2b121a07440fc Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Mon, 16 Jun 2025 18:05:35 +0000 Subject: [PATCH 02/34] Cronjob - daily check of IETF modules. --- .../ietf-incident@2024-06-06.yang | 50 +++--- .../ietf-schc-icmpv6@2024-11-20.yang | 146 ++++++++++++++++++ ...=> ietf-telemetry-message@2025-06-10.yang} | 111 +++++++------ ...ng-push-telemetry-message@2025-06-10.yang} | 23 +-- 4 files changed, 243 insertions(+), 87 deletions(-) create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-schc-icmpv6@2024-11-20.yang rename experimental/ietf-extracted-YANG-modules/{ietf-telemetry-message@2025-04-17.yang => ietf-telemetry-message@2025-06-10.yang} (63%) rename experimental/ietf-extracted-YANG-modules/{ietf-yang-push-telemetry-message@2025-04-17.yang => ietf-yang-push-telemetry-message@2025-06-10.yang} (94%) diff --git a/experimental/ietf-extracted-YANG-modules/ietf-incident@2024-06-06.yang b/experimental/ietf-extracted-YANG-modules/ietf-incident@2024-06-06.yang index be7288c2a..df3f81622 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-incident@2024-06-06.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-incident@2024-06-06.yang @@ -280,18 +280,18 @@ module ietf-incident { "The incident referred to has already been acknowledged."; } - identity root-cause-unlocated { + identity probable-cause-unlocated { base diagnose-error; description - "Fails to locate the root causes when performing the + "Fails to locate the probable causes when performing the diagnosis operation. The detailed reason MUST be included in the 'description'."; } - identity root-cause-unresolved { + identity probable-cause-unresolved { base resolve-error; description - "Fails to resolve the root causes when performing the + "Fails to resolve the probable causes when performing the resolution operation. The detailed reason MUST be included in the 'description'"; } @@ -364,9 +364,9 @@ module ietf-incident { //groupings - grouping root-cause-info { + grouping probable-cause-info { description - "The information of root cause."; + "The information of probable cause."; leaf cause-name { type identityref{ base cause-name; @@ -543,32 +543,32 @@ module ietf-incident { uses resources-info; } } - container root-causes { + container probable-causes { description - "The root cause objects."; - list root-cause { + "The probable cause objects."; + list probable-cause { key "node-ref"; description - "the root causes of incident."; + "the probable causes of incident."; uses resources-info { augment "resource" { description - "augment root cause information."; - //if root cause object is a resource of a node - uses root-cause-info; + "augment probable cause information."; + //if probable cause object is a resource of a node + uses probable-cause-info; } } - //if root cause object is a node - uses root-cause-info; + //if probable cause object is a node + uses probable-cause-info; } } - container root-events { + container probable-events { description - "the root cause related events of the incident."; - list root-event { + "the probable cause related events of the incident."; + list probable-event { key "type event-id"; description - "the root cause related event of the incident."; + "the probable cause related event of the incident."; leaf type { type leafref { path "../../../events/event/type"; @@ -656,18 +656,6 @@ module ietf-incident { } } } - case notification { - //TODO - } - case log { - //TODO - } - case KPI { - //TODO - } - case unknown { - //TODO - } } } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-schc-icmpv6@2024-11-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-schc-icmpv6@2024-11-20.yang new file mode 100644 index 000000000..9a74bf056 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-schc-icmpv6@2024-11-20.yang @@ -0,0 +1,146 @@ +module ietf-schc-icmpv6 { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-schc-icmpv6"; + prefix schc-icmpv6; + + import ietf-schc { + prefix schc; + } + + organization + "IETF Static Context Header Compression (schc) working group"; + contact + "WG Web: + WG List: + Editor: Laurent Toutain + + Editor: Ana Minaburo + "; + description + " + Copyright (c) 2021 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject to + the license terms contained in, the Simplified BSD License set + forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC XXXX + (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. + + ******************************************************************* + + This module extends the ietf-schc module to include the + describe ICMPv6 Field IDs, MO and CDA described in RFC YYYY. + It does not introduce new leaf in the Data Model."; + + revision 2024-11-20 { + description + "Initial version for RFC YYYY "; + reference + "RFC YYYY: ICMPv6"; + } + + identity fid-icmpv6-base-type { + base schc:fid-base-type; + description + "Field IP base type for ICMPv6 headers described in RFC 4443"; + reference + "RFC 4443 Internet Control Message Protocol (ICMPv6) + for the Internet Protocol Version 6 (IPv6) + Specification"; + } + + // ICMPv6 Fields + + identity fid-icmpv6-type { + base fid-icmpv6-base-type; + description + "ICMPv6 code field present in all ICMPv6 messages."; + } + + identity fid-icmpv6-code { + base fid-icmpv6-base-type; + description + "ICMPv6 code field present in all ICMPv6 messages."; + } + + identity fid-icmpv6-checksum { + base fid-icmpv6-base-type; + description + "ICMPv6 checksum field present in all ICMPv6 messages."; + } + + identity fid-icmpv6-mtu { + base fid-icmpv6-base-type; + description + "ICMPv6 MTU, present in Packet Too Big message."; + } + + identity fid-icmpv6-pointer { + base fid-icmpv6-base-type; + description + "ICMPv6 Pointer, present in Parameter Problem message."; + } + + identity fid-icmpv6-identifier { + base fid-icmpv6-base-type; + description + "ICMPv6 identifier field, present in Echo Request/Reply + message."; + } + + identity fid-icmpv6-sequence { + base fid-icmpv6-base-type; + description + "ICMPv6 sequence number field, present in Echo Request/Reply + message."; + } + + identity fid-icmpv6-payload { + base fid-icmpv6-base-type; + description + "ICMPv6 payload following ICMPv6 header. + If payload is empty, this field exists with a length of 0."; + } + + // MO and CDA + + identity mo-rule-match { + base schc:mo-base-type; + description + "Macthing operator return true, if the TV matches a rule + keeping UP and DOWN direction."; + } + + identity mo-rev-rule-match { + base schc:mo-base-type; + description + "Macthing operator return true, if the TV matches a rule + reversing UP and DOWN direction."; + } + + identity cda-compress-sent { + base schc:mo-base-type; + description + "Send a compressed version of TV keeping UP and + DOWN direction."; + } + + identity cda-rev-compress-sent { + base schc:mo-base-type; + description + "Send a compressed version of TV reversing UP and + DOWN direction."; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-telemetry-message@2025-04-17.yang b/experimental/ietf-extracted-YANG-modules/ietf-telemetry-message@2025-06-10.yang similarity index 63% rename from experimental/ietf-extracted-YANG-modules/ietf-telemetry-message@2025-04-17.yang rename to experimental/ietf-extracted-YANG-modules/ietf-telemetry-message@2025-06-10.yang index 27b734898..9a4d5a731 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-telemetry-message@2025-04-17.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-telemetry-message@2025-06-10.yang @@ -10,6 +10,8 @@ module ietf-telemetry-message { } import ietf-inet-types { prefix inet; + reference + "RFC 6991: Common YANG Data Types"; } import ietf-platform-manifest { prefix p-mf; @@ -27,8 +29,9 @@ module ietf-telemetry-message { Thomas Graf "; description - "This YANG modules defines a model for a telemetry collector to send - collected YANG data from the network. + "This YANG module defines an extensible message schema to be used at + the data collection to transform Network Telemetry messages into + external systems such as Message Brokers. Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. @@ -42,7 +45,7 @@ module ietf-telemetry-message { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2025-04-17 { + revision 2025-06-10 { description "Initial revision."; reference @@ -79,6 +82,16 @@ module ietf-telemetry-message { "RFC 8040."; } + feature network-node-manifest { + description + "This feature indicates the network node manifest support."; + } + + feature data-collection-manifest { + description + "This feature indicates the data collection manifest support."; + } + typedef telemetry-notification-event-type { type enumeration { enum log { @@ -108,78 +121,86 @@ module ietf-telemetry-message { base session-protocol; } description - "Notification protocol used to deliver the notification to the - data collection."; + "Network Telemetry protocol used to deliver the notification + between the network node and the data collection."; } container message { config false; description - "Telemetry message used in Data Mesh"; - leaf timestamp { - type yang:date-and-time; - mandatory true; - description - "Timestamp when the data collection collected the payload - from the network element or an update or delete event is - triggered."; - } - leaf session-protocol { - type telemetry-session-protocol-type; - mandatory true; - description - "Session protocol used to collect the payload of this message - from the network"; - } + "Telemetry message used within the Data Mesh"; container network-node-manifest { + if-feature "network-node-manifest"; description - "Address of network element from which the payload is - collected."; - uses p-mf:platform-details; - } - container data-collection-manifest { - description - "Address of the telemetry data collection."; + "Contains the Data Manifest about the network node that + exported Network Telemetry data."; uses p-mf:platform-details; } container telemetry-message-metadata { description - "Extensible message and protocol specific metadata"; - leaf event-time { + "contains the session information about the session between the + collector and the network node."; + leaf node-export-timestamp { type yang:date-and-time; description - "NETCONF eventTime. Redefined in here since NETCONF header is - XML not YANG."; + "Timestamp when the Network Telemetry data has been exported + from network element."; } - } - container data-collection-metadata { - description - "Metadata added by data collection."; - leaf remote-address { + leaf collection-timestamp { + type yang:date-and-time; + mandatory true; + description + "Timestamp when the data collection collected the Network + Telemetry data from the network element."; + } + leaf session-protocol { + type telemetry-session-protocol-type; + mandatory true; + description + "Session protocol used to collect the Network Telemetry data + from the network node."; + } + leaf export-address { type inet:host; mandatory true; description - "Network node IP address."; + "Network node IP address from where the Network Telemetry data + was exported from."; } - leaf remote-port { + leaf export-port { type inet:port-number; description - "Network node transport port number."; + "Network node transport port number from where the Network + Telemetry data was exported."; } - leaf local-address { + leaf collection-address { type inet:host; description - "Data collection IP address."; + "Data collection IP address at which the Network Telemetry + data was collected."; } - leaf local-port { + leaf collection-port { type inet:port-number; description - "Data collection transport port number."; + "Data collection transport port number at which the Network + Telemetry data was collected."; } + } + container data-collection-manifest { + if-feature "data-collection-manifest"; + description + "Contains the Data Manifest of the data collection which + collected the Network Telemetry data."; + uses p-mf:platform-details; + } + container network-operator-metadata { + description + "Network operator specific metadata added by the Network + Telemetry data collection."; list labels { key "name"; description - "Arbiterary labels assinged by the data collection."; + "Abritrary labels assinged by the data collection."; leaf name { type string { length "1..max"; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-push-telemetry-message@2025-04-17.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-push-telemetry-message@2025-06-10.yang similarity index 94% rename from experimental/ietf-extracted-YANG-modules/ietf-yang-push-telemetry-message@2025-04-17.yang rename to experimental/ietf-extracted-YANG-modules/ietf-yang-push-telemetry-message@2025-06-10.yang index 2ae26ee06..92eda060b 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yang-push-telemetry-message@2025-04-17.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-push-telemetry-message@2025-06-10.yang @@ -12,7 +12,8 @@ module ietf-yang-push-telemetry-message { import ietf-telemetry-message { prefix tm; reference - "XXX"; + "draft-netana-nmop-message-broker-telemetry-message: Extensible + YANG Model for Network Telemetry Messages"; } import ietf-yang-push { prefix yp; @@ -33,14 +34,13 @@ module ietf-yang-push-telemetry-message { import ietf-yang-revisions { prefix rev; reference - "RFC YYYY: draft-ietf-netmod-yang-module-versioning-11, - Updated YANG Module Revision Handling"; + "draft-ietf-netmod-yang-module-versioning: Updated YANG Module + Revision Handling"; } import ietf-yang-semver { prefix ysver; reference - "RFC ZZZZ: draft-ietf-netmod-yang-semver-15, YANG Semantic - Versioning"; + "draft-ietf-netmod-yang-semver: YANG Semantic Versioning"; } organization @@ -52,8 +52,9 @@ module ietf-yang-push-telemetry-message { Thomas Graf "; description - "Augments the ietf-telemetry-message with YANG Push specific - fields. + "Adds YANG-Push specific subscription metadata to the data + collection protocol provenance of the ietf-telemetry-message + envelope. The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', @@ -74,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-04-17 { + revision 2025-06-10 { description "Initial revision."; reference @@ -84,11 +85,11 @@ module ietf-yang-push-telemetry-message { augment "/tm:message/tm:telemetry-message-metadata" { description "Augments telemetry-message-metadata with YANG-Push specific - metadata"; + subscription metadata"; container yang-push-subscription { config false; description - "YANG-Push specific metadata"; + "YANG-Push specific subscription metadata"; leaf id { type sn:subscription-id; description @@ -105,7 +106,7 @@ module ietf-yang-push-telemetry-message { Section 6."; reference "RFC 6241: Network Configuration Protocol (NETCONF), - Section 6."; + Section 6."; } leaf xpath-filter { type yang:xpath1.0; From 54d6261916acf21844336060330e43cc46f227e2 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Wed, 18 Jun 2025 18:05:36 +0000 Subject: [PATCH 03/34] Cronjob - daily check of IETF modules. --- ...g => ietf-yp-notification@2025-06-04.yang} | 109 +++++++++--------- ...ng => ietf-yp-observation@2025-06-04.yang} | 76 ++++++------ 2 files changed, 96 insertions(+), 89 deletions(-) rename experimental/ietf-extracted-YANG-modules/{ietf-yp-notification@2025-02-24.yang => ietf-yp-notification@2025-06-04.yang} (56%) rename experimental/ietf-extracted-YANG-modules/{ietf-yp-observation@2025-02-24.yang => ietf-yp-observation@2025-06-04.yang} (53%) diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yp-notification@2025-02-24.yang b/experimental/ietf-extracted-YANG-modules/ietf-yp-notification@2025-06-04.yang similarity index 56% rename from experimental/ietf-extracted-YANG-modules/ietf-yp-notification@2025-02-24.yang rename to experimental/ietf-extracted-YANG-modules/ietf-yp-notification@2025-06-04.yang index e87502ba0..b28706b75 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yp-notification@2025-02-24.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yp-notification@2025-06-04.yang @@ -1,7 +1,8 @@ module ietf-yp-notification { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-yp-notification"; - prefix inotenv; + prefix iypn; + import ietf-yang-types { prefix yang; reference @@ -35,7 +36,8 @@ module ietf-yp-notification { "RFC 8791: YANG Data Structure Extensions"; } - organization "IETF NETCONF (Network Configuration) Working Group"; + organization + "IETF NETCONF (Network Configuration) Working Group"; contact "WG Web: WG List: @@ -48,33 +50,32 @@ module ietf-yp-notification { Benoit Claise "; - description "Defines a notification header for Subscribed Notifications - [RFC8639] and YANG-Push [RFC8641]. When this notification header - is enabled through configuration, the root container of the - notification is encoded as defined in RFCXXX. + [RFC8639] and YANG-Push [RFC8641]. When this notification header + is enabled through configuration, the root container of the + notification is encoded as defined in RFCXXX. - This module can be used to validate XML encoded notifications - [RFC7950], JSON encoded messages [RFC7951] and CBOR encoded - messages [RFC9254]. Refer to Section Y of RFC XXXX for more - details. + This module can be used to validate XML-encoded notifications + [RFC7950], JSON-encoded messages [RFC7951], and CBOR-encoded + messages [RFC9254]. Refer to Section Y of RFC XXXX for more + details. - Copyright (c) 2025 IETF Trust and the persons identified as - authors of the code. All rights reserved. + 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). + 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."; + 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-02-24 { + revision 2025-06-04 { description "First revision"; reference @@ -82,34 +83,34 @@ module ietf-yp-notification { } identity notif-envelope-error { - description - "Base identify for errors found while attempting to - change the value of the leaf 'enable-notification-envelope'."; + description + "Base identity for errors found while attempting to + change the value of the leaf 'enable-notification-envelope'."; } grouping notif-env-capabilities { description "This grouping defines the capabilities for - the notification-envelope defined in RFC XXXX - and the different supported metadata."; + the notification-envelope defined in RFC XXXX + and the different supported metadata."; leaf notification-envelope { type boolean; - default false; + default "false"; description - "Supports YANG-Push to use the notification-envelope - defined in RFC XXXX."; + "Supports YANG-Push to use the notification-envelope + defined in RFC XXXX."; } container metadata { - description + description "Container with the supported optional metadata by the - YANG-Push publisher."; + YANG-Push publisher."; leaf hostname-sequence-number { type boolean; - default false; + default "false"; description "Supports hostname and sequence-number - in the YANG-Push notifications as defined in the - YANG-Push notification-envelope in RFC XXXX."; + in the YANG-Push notifications as defined in the + YANG-Push notification-envelope in RFC XXXX."; } } } @@ -120,27 +121,27 @@ module ietf-yp-notification { mandatory true; description "The date and time the event was generated by the event - source. This parameter is of type dateTime and compliant - to [RFC3339]."; + source. This parameter is of type dateTime and compliant + to [RFC3339]."; } leaf hostname { type inet:host; description "The hostname of the network node according to - [RFC1213]. This value is usually configured on the node - by the administrator to uniquely identify the node in - the network."; + [RFC1213]. This value is usually configured on the node + by the administrator to identify the node in + the network uniquely."; } leaf sequence-number { type yang:counter32; description "Unique sequence number as described in [RFC9187] for each - published message."; + published message."; } anydata contents { - description + description "This contains the values defined by the 'notification' - statement unchanged."; + statement unchanged."; } } @@ -148,31 +149,31 @@ module ietf-yp-notification { augment "/sn:subscriptions" { description "This augmentation adds the configuration switches for - enabling the notification envelope and metadatas."; + enabling the notification envelope and metadata."; leaf enable-notification-envelope { type boolean; - default false; + default "false"; description - "Enables YANG-Push to use the notification-envelope - defined in RFC XXXX."; + "Enables YANG-Push to use the notification-envelope + defined in RFC XXXX."; } container metadata { - description + description "Container for configuring optional metadata."; } } // YANG-Push Capabilities extension - augment "/sysc:system-capabilities/notc:subscription-capabilities" { + augment "/sysc:system-capabilities" + + "/notc:subscription-capabilities" { description "Extension to the subscription-capabilities model to enable - clients to learn whether the publisher supports the - notification-envelope"; - + clients to learn whether the publisher supports the + notification-envelope"; container notification-metadata { - description + description "Adds the notification metadata capabilities to subscription - capabilities."; + capabilities."; uses notif-env-capabilities; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yp-observation@2025-02-24.yang b/experimental/ietf-extracted-YANG-modules/ietf-yp-observation@2025-06-04.yang similarity index 53% rename from experimental/ietf-extracted-YANG-modules/ietf-yp-observation@2025-02-24.yang rename to experimental/ietf-extracted-YANG-modules/ietf-yp-observation@2025-06-04.yang index 5f511f390..9788076b7 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yp-observation@2025-02-24.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yp-observation@2025-06-04.yang @@ -1,8 +1,8 @@ module ietf-yp-observation { yang-version 1.1; - namespace - "urn:ietf:params:xml:ns:yang:ietf-yp-observation"; + namespace "urn:ietf:params:xml:ns:yang:ietf-yp-observation"; prefix ypot; + import ietf-yang-types { prefix yang; reference @@ -25,7 +25,9 @@ module ietf-yp-observation { "RFC 9196: YANG Modules Describing Capabilities for Systems and Datastore Update Notifications"; } - organization "IETF NETCONF (Network Configuration) Working Group"; + + organization + "IETF NETCONF (Network Configuration) Working Group"; contact "WG Web: WG List: @@ -36,34 +38,33 @@ module ietf-yp-observation { Alex Huang Feng "; - description "Defines YANG-Push event notification header with the observation - time in streaming update notifications. + time in streaming update notifications. - Copyright (c) 2025 IETF Trust and the persons identified as - authors of the code. All rights reserved. + 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). + 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."; + This version of this YANG module is part of RFC XXXX; see the RFC + itself for full legal notices."; - revision 2025-02-24 { + revision 2025-06-04 { description "First revision"; reference - "RFC XXXX: Support of YANG-Push Notifications Observation Time"; + "RFC XXXX: Extensible YANG Model for Network Telemetry Notifications"; } feature yang-push-observation-timestamp { description "This feature indicates the YANG-push Notifications support - the observation timestamps in streaming update notifications."; + the observation timestamps in streaming update notifications."; } grouping yang-push-observation { @@ -77,52 +78,57 @@ module ietf-yp-observation { leaf point-in-time { type enumeration { enum current-accounting { - description "For periodical subscriptions, the point-in-time - where the metrics are being polled and observed."; + description + "For periodical subscriptions, the point-in-time + where the metrics are being polled and observed."; } enum initial-state { - description "For 'on-change sync on start' subscriptions, the - initial point in time when the subscription was established - and the state was observed."; + description + "For 'on-change sync on start' subscriptions, the + initial point in time when the subscription was established + and the state was observed."; } enum state-changed { - description "For 'on-change sync on start' subscriptions, the - point in time when the state change was observed after the - subscription was established."; + description + "For 'on-change sync on start' subscriptions, the + point in time when the state change was observed after the + subscription was established."; } } description - "This describes at which point in time the metrics were observed"; + "This describes at which point in time the metrics were observed"; } } // Event notifications augment "/yp:push-update" { description - "This augmentation adds the observation timestamp of the accounted metrics - in the push-update notification."; + "This augmentation adds the observation timestamp of the accounted + metrics in the push-update notification."; uses ypot:yang-push-observation; } augment "/yp:push-change-update" { description - "This augmentation adds the observation timestamp of the event - in the push-change-update notification."; - uses ypot:yang-push-observation; + "This augmentation adds the observation timestamp of the event + in the push-change-update notification."; + uses ypot:yang-push-observation; } // Event capabilities - augment "/sysc:system-capabilities/notc:subscription-capabilities" { + augment "/sysc:system-capabilities" + + "/notc:subscription-capabilities" { description - "Add system level capabilities"; + "Add YANG-Push notification capabilities to system-level capability + container."; leaf yang-push-observation-supported { if-feature "yang-push-observation-timestamp"; type boolean; description "Specifies whether the publisher supports exporting - observation-timestamp and point-in-time in notifications."; + observation-timestamp and point-in-time in notifications."; reference - "RFC XXXX: YANG Notifications Observation Time"; + "RFC XXXX: Extensible YANG Model for YANG-Push Notifications"; } } } From b590f6e93e9a308932dec05d9ca13df918bc4aa6 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Fri, 20 Jun 2025 18:05:35 +0000 Subject: [PATCH 04/34] Cronjob - daily check of IETF modules. --- ...-netconf-private-candidate@2024-09-12.yang | 43 ++++++++++++++----- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/experimental/ietf-extracted-YANG-modules/ietf-netconf-private-candidate@2024-09-12.yang b/experimental/ietf-extracted-YANG-modules/ietf-netconf-private-candidate@2024-09-12.yang index c44243195..44d1c1288 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-netconf-private-candidate@2024-09-12.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-netconf-private-candidate@2024-09-12.yang @@ -13,12 +13,6 @@ module ietf-netconf-private-candidate { "WG Web: WG List: - WG Chair: Kent Watsen - - - WG Chair: Per Andersson - - Editor: James Cumming @@ -74,9 +68,25 @@ module ietf-netconf-private-candidate { private-candidate configurations."; default revert-on-conflict; type enumeration { - enum revert-on-conflict; - enum prefer-candidate; - enum prefer-running; + enum revert-on-conflict { + description + "Reject update when any conflicting + node is found and revert the private + candidate configuration datastore to its + state prior to issuing the update."; + } + enum prefer-candidate { + description + "Resolve conflicted node by selecting + the private candidate configuration + datastore version."; + } + enum prefer-running { + description + "Resolve conflicted node by selecting + the running configuration datastore + version."; + } } } } @@ -95,8 +105,19 @@ module ietf-netconf-private-candidate { the private candidate."; default last-update; type enumeration { - enum last-update; - enum creation-point; + enum last-update { + description + "Compare using the point the private + candidate configuration datastore was + last updated using the update or commit + RPCs."; + } + enum creation-point { + description + "Compare using the point the private + candidate configuration datastore was + initially created."; + } } } } From 7c1c6043e46353fba26d91b4748c2a67ff732d69 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Sun, 22 Jun 2025 18:05:36 +0000 Subject: [PATCH 05/34] Cronjob - daily check of IETF modules. --- ...etf-cmis-control-primitive@2025-04-21.yang | 139 ++++++++++++ .../ietf-cmis-control@2025-04-21.yang | 205 ++++++++++++++++++ 2 files changed, 344 insertions(+) create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-cmis-control-primitive@2025-04-21.yang create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-cmis-control@2025-04-21.yang diff --git a/experimental/ietf-extracted-YANG-modules/ietf-cmis-control-primitive@2025-04-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-cmis-control-primitive@2025-04-21.yang new file mode 100644 index 000000000..223093010 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-cmis-control-primitive@2025-04-21.yang @@ -0,0 +1,139 @@ +module ietf-cmis-control-primitive { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-cmis-control-primitive"; + prefix cmis-ctrl-pm; + + import ietf-interfaces { + prefix if; + } + + organization + "IETF CCAMP Working Group"; + + contact + "WG Web: + WG List: + + Editor: Shunsuke Homma + + + Editor: Hitoshi Irino + "; + + description + "This YANG module defines a primitive data model for the + management of CMIS (Common Management Interface Specification) + pages as specified by OIF. It enables configuration and + retrieval of CMIS page data, including access types and value + fields, to support the management of pluggable optical modules + via NETCONF or RESTCONF. + 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 + (http://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC XXXX + (https://www.rfc-editor.org/info/rfc YYYY); see the RFC itself + for full legal notices."; + +// RFC Ed.: replace XXXX with actual RFC number and remove this note + + revision "2025-04-21" { + description + "Initial revision."; + reference + "I-D.hi-ccamp-cmis-control-yang-00"; + } + + /* + * Primitive Mode of CMIS control data nodes + */ + + grouping primitive-cmis-page { + description + "Parameters stored in the CMIS page as flat data structure"; + + leaf page-num{ + type uint8 { + range "0 .. 255"; + } + mandatory true; + description + "The number of the CMIS page."; + } + + leaf bank { + type uint8; + mandatory true; + description + "The banks corresponding to the CMIS page."; + } + + leaf offset { + type uint8; + mandatory true; + description + "The memory address of the value."; + } + + leaf size { + type uint8 { + range "1 .. 128"; + } + mandatory true; + description + "The memory size of the value."; + } + + leaf value { + type binary; + mandatory true; + description + "The actual data to write to the CMIS memory."; + } + } + + grouping cmis-control-primitive { + description + "Parameters for primitive CMIS control of the pluggable + device equipped in the interface."; + + leaf cmis-enabled { + type boolean; + default "false"; + config false; + description + "The availability of the CMIS for control the pluggable + device equipped in the interface. If the device does not + support CMIS, this value is false."; + } + + leaf cmis-version { + type string; + config false; + description + "The version of the CMIS by the pluggable device."; + } + + list primitive-cmis-page { + key "page-num"; + config true; + uses primitive-cmis-page; + } + } + + /* + * Augment Interface + */ + + augment "/if:interfaces/if:interface" { + container cmis-control-primitive { + uses cmis-control-primitive; + } + } +} 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 new file mode 100644 index 000000000..1ba889058 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-cmis-control@2025-04-21.yang @@ -0,0 +1,205 @@ +module ietf-cmis-control { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-cmis-control"; + prefix cmis-ctrl; + + import ietf-interfaces { + prefix if; + } + organization + "IETF CCAMP Working Group"; + + contact + "WG Web: + WG List: + + Editor: Shunsuke Homma + + + Editor: Hitoshi Irino + "; + + description + "This YANG module defines a data model for the management + of CMIS (Common Management Interface Specification) pages + as specified by OIF. It enables configuration and retrieval + of CMIS page data, including access types and value fields, + to support the management of pluggable optical modules via + NETCONF or RESTCONF. + + 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 + (http://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."; + +// RFC Ed.: replace XXXX with actual RFC number and remove this note + + revision "2025-04-21" { + description + "Initial revision."; + reference + "I-D.hi-ccamp-cmis-control-yang-00"; + } + + /* + * CMIS control data nodes + */ + + typedef access-type { + type enumeration { + enum rw { + description "A readable and writable element."; + } + enum rww { + description "A readable and writable element that can be + modified by the module."; + } + enum ro { + description "A read-only element."; + } + enum wo { + description "A write-only element."; + } + enum wo/sc { + description "A write-only element with self-clearing side + effect."; + } + enum ro/cor { + description "A write-only element with celan-on-read side + effect."; + } + } + description "Defines access types for CMIS elements."; + } + + grouping cmis-page { + description + "Parameters stored in the CMIS page"; + + leaf page-num{ + type uint8 { + range "0 .. 255"; + } + mandatory true; + description + "The number of the CMIS page."; + } + + leaf bank { + type uint8; + mandatory true; + description + "The banks corresponding to the CMIS page."; + } + + leaf page-access-type { + type access-type; + config false; + description "Access type of the CMIS page."; + } + + leaf description { + type string; + description + "The description of the CMIS page."; + } + + list value { + key "offset"; + description + "The value contained in the CMIS page."; + + leaf offset { + type uint8; + mandatory true; + description + "The memory address of the value."; + } + + leaf size { + type uint8 { + range "1 .. 128"; + } + mandatory true; + description + "The memory size of the value."; + } + + leaf value-access-type { + type access-type; + config false; + description "Access type of the target value."; + } + + leaf value-data { + type binary; + mandatory true; + description + "The data contained in the value. It is writable only + when the access-type is not Read-Only or Read-Only with + clean-on-read side effect."; + } + + leaf description { + type string; + description + "The description of the value."; + } + } + } + + grouping cmis-pages { + description + "The list of the accessible CMIS pages supported by the + pluggable device accommodated into the interface."; + + list cmis-page { + key "page-num"; + uses cmis-page; + } + } + + grouping cmis-control { + description + "Parameters for primitive CMIS control of the pluggable device + equipped in the interface."; + + leaf cmis-enabled { + type boolean; + default "false"; + config false; + description + "The availability of the CMIS for control the pluggable + device equipped in the interface. If the device does not + support CMIS, this value is false."; + } + + leaf cmis-version { + type string; + config false; + description + "The version of the CMIS by the pluggable device."; + } + + uses cmis-pages; + + } + + /* + * Augment Interface + */ + augment "/if:interfaces/if:interface" { + container cmis-control { + uses cmis-control; + } + } +} From 841d4c734240e10cb3d804e240679e01e17d7915 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Tue, 24 Jun 2025 18:05:35 +0000 Subject: [PATCH 06/34] Cronjob - daily check of IETF modules. --- ...1.yang => ietf-inet-types@2025-06-23.yang} | 36 ++++++---- ...1.yang => ietf-yang-types@2025-06-23.yang} | 65 ++++++++++++------- 2 files changed, 65 insertions(+), 36 deletions(-) rename experimental/ietf-extracted-YANG-modules/{ietf-inet-types@2024-10-21.yang => ietf-inet-types@2025-06-23.yang} (95%) rename experimental/ietf-extracted-YANG-modules/{ietf-yang-types@2024-10-21.yang => ietf-yang-types@2025-06-23.yang} (92%) diff --git a/experimental/ietf-extracted-YANG-modules/ietf-inet-types@2024-10-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-inet-types@2025-06-23.yang similarity index 95% rename from experimental/ietf-extracted-YANG-modules/ietf-inet-types@2024-10-21.yang rename to experimental/ietf-extracted-YANG-modules/ietf-inet-types@2025-06-23.yang index 78c5201ba..b28621b9f 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-inet-types@2024-10-21.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-inet-types@2025-06-23.yang @@ -23,7 +23,7 @@ module ietf-inet-types { 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 + 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 @@ -36,13 +36,14 @@ module ietf-inet-types { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-10-21 { + revision 2025-06-23 { 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 @@ -171,10 +172,7 @@ module ietf-inet-types { "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. If IPv6 extension headers are present, then the - protocol number type represents the upper layer protocol - number, i.e., the number of the last 'next header' field - of the IPv6 extension headers. + header. Protocol numbers are assigned by IANA. The current list of all assignments is available from ."; @@ -183,6 +181,19 @@ module ietf-inet-types { 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 { @@ -595,12 +606,13 @@ module ietf-inet-types { Objects using the uri type MUST be in US-ASCII encoding, and MUST be normalized as described by RFC 3986 Sections - 6.2.1, 6.2.2.1, and 6.2.2.2. All unnecessary - percent-encoding is removed, 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. + 6.2.1, 6.2.2.1, and 6.2.2.2. 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 diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-types@2024-10-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-types@2025-06-23.yang similarity index 92% rename from experimental/ietf-extracted-YANG-modules/ietf-yang-types@2024-10-21.yang rename to experimental/ietf-extracted-YANG-modules/ietf-yang-types@2025-06-23.yang index 8fe6281e9..b125a1691 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yang-types@2024-10-21.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-types@2025-06-23.yang @@ -23,7 +23,7 @@ module ietf-yang-types { 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 + 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 @@ -36,7 +36,7 @@ module ietf-yang-types { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-10-21 { + revision 2025-06-23 { description "This revision adds the following new data types: - yang:date @@ -53,8 +53,11 @@ module ietf-yang-types { - yang:nanoseconds32 - yang:nanoseconds64 - yang:language-tag - The yang-identifier definition has been aligned with YANG 1.1. - Several pattern statements have been improved."; + 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 XXXX: Common YANG Data Types"; } @@ -302,27 +305,30 @@ module ietf-yang-types { 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](\.[0-9]+)?' - + '(Z|[\+\-]((1[0-3]|0[0-9]):([0-5][0-9])|14:00))?'; + 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. + 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 -00:00 indicates that the date-and-time + (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-offsets +00:00 and Z - both indicate that the date-and-time value is reported in - UTC and that the local time reference point is UTC (see RFC - 3339 section 4.3). + reference point is unknown. The time-offsets +00:00 + indicates that the date-and-time value is reported in + UTC and that the local time reference point is UTC + (see RFC 9557 section 2). This type is not equivalent to the DateAndTime textual convention of the SMIv2 since RFC 3339 uses a different @@ -337,9 +343,12 @@ module ietf-yang-types { in case a server follows automatically 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 uses the time-offset -00:00."; + time zone offset SHOULD use the time-offset Z and MAY use + -00:00 for backwards compatibility."; reference "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"; @@ -347,8 +356,9 @@ module ietf-yang-types { 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))?'; + 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 @@ -394,21 +404,23 @@ module ietf-yang-types { typedef time { type string { - pattern '(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\.[0-9]+)?' - + '(Z|[\+\-]((1[0-3]|0[0-9]):([0-5][0-9])|14:00))?'; + 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. + 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 date value is + (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 date value is reported in UTC and that the local + the time value is reported in UTC and that the local time reference point is UTC (see RFC 9557 section 2). The canonical format for time values with a known time @@ -430,7 +442,8 @@ module ietf-yang-types { typedef time-no-zone { type time { - pattern '(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\.[0-9]+)?'; + 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 @@ -626,8 +639,12 @@ module ietf-yang-types { pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'; } description - "The mac-address type represents an IEEE 802 MAC address. - The canonical representation uses lowercase characters. + "The mac-address type represents a 48-bit IEEE 802 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."; From 65aa0679fb8b106c9d7ea227e64c711f206c57f4 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Thu, 26 Jun 2025 18:05:37 +0000 Subject: [PATCH 07/34] Cronjob - daily check of IETF modules. --- ...f-yang-library-augmentedby@2025-05-28.yang | 43 +++++++++++++++---- 1 file changed, 35 insertions(+), 8 deletions(-) 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 e35747133..ee4b75670 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 @@ -19,7 +19,7 @@ module ietf-yang-library-augmentedby { Benoit Claise - IGNACIO DOMINGUEZ MARTINEZ-CASANUEVA + Ignacio Dominguez Martinez-Casanueva "; description @@ -37,7 +37,7 @@ module ietf-yang-library-augmentedby { (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 @@ -58,7 +58,7 @@ module ietf-yang-library-augmentedby { grouping augmented-by { description - "Augment the augmented-by list from module info with the + "Augment the augmented-by leaf-list from module info with the module-augmented-by grouping" ; leaf-list augmented-by { @@ -81,19 +81,46 @@ module ietf-yang-library-augmentedby { indirectly) gracefully."; } } - augment "/yanglib:yang-library/yanglib:module-set/yanglib:module" { description - "Augment the augmented-by list from module info with the - augmented-by grouping" ; + "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; } augment "/yanglib:modules-state/yanglib:module" { status deprecated; description - "Augment the augmented-by list from module info with the - augmented-by grouping" ; + "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; } From 7c6a397425838d4e31efa9012fb9919f03b90d49 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Fri, 27 Jun 2025 18:05:36 +0000 Subject: [PATCH 08/34] Cronjob - daily check of IETF modules. --- ...g => ietf-bgp-communities@2025-06-13.yang} | 73 +++++++++++++------ .../ietf-rpki-rtr@2022-10-18.yang | 10 +-- .../ietf-rpki-table@2022-10-18.yang | 13 +--- 3 files changed, 55 insertions(+), 41 deletions(-) rename experimental/ietf-extracted-YANG-modules/{ietf-bgp-communities@2025-03-13.yang => ietf-bgp-communities@2025-06-13.yang} (79%) diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-03-13.yang b/experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-06-13.yang similarity index 79% rename from experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-03-13.yang rename to experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-06-13.yang index b6581364b..bc84fa8fc 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-03-13.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-06-13.yang @@ -8,7 +8,7 @@ module ietf-bgp-communities { import ietf-inet-types { prefix inet; reference - "draft-ietf-netmod-rfc6991-bis-17: Common YANG Data Types"; + "draft-ietf-netmod-rfc6991-bis-18: Common YANG Data Types"; } organization @@ -35,9 +35,15 @@ module ietf-bgp-communities { This version of this YANG module is part of RFC YYYY; see the RFC itself for full legal notices. - // RFC-EDITOR: please update YYYY with this RFC ID"; + 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-03-13 { + // RFC-EDITOR: please update YYYY with this RFC ID + + revision 2025-06-13 { description "Initial revision."; reference @@ -64,7 +70,7 @@ module ietf-bgp-communities { typedef community-name { type string { length "1..255"; - pattern '[^ \t\r\n\p{C}]+'; + pattern '[^\s]+'; } description "This type restricts values for the name of a BGP community."; @@ -96,7 +102,6 @@ module ietf-bgp-communities { typedef community-description { type string { length "1..65535"; - pattern '[^\p{C}]+'; } description "This type restricts values for the description of a BGP @@ -130,7 +135,7 @@ module ietf-bgp-communities { typedef field-name { type string { length "1..255"; - pattern '[^ \t\r\n\p{C}]+'; + pattern '[^\s]+'; } description "This type restricts values for the name leaf of a BGP @@ -158,11 +163,13 @@ module ietf-bgp-communities { typedef field-description { type string { length "1..65535"; - pattern '[^\p{C}]+'; + pattern '(\*)|([^*]+)'; } description "This type restricts values for the description leaf of a BGP - community Local Administrator/Local Data field."; + community Local Administrator/Local Data field. The string + containing a single asterisk '*' indicates that the value of + the field should be used as description."; reference "RFC YYYY: A YANG Data Model for BGP Communities RFC-EDITOR: please update YYYY with this RFC ID"; @@ -185,31 +192,50 @@ module ietf-bgp-communities { leaf length { type uint8; description - "Length of the field"; + "Length of the field. If local-admin-format is 'decimal', + this is a number of digits. In case local-admin-format is + 'binary', it is a number of bits. + + Parsers use the field length to determine how many + decimals or bits from the Local Administrator part of the + community are used by this field. If this leaf is not + defined, the length is assumed to be the maximum allowed + length of the entire field list. In this case the field + list MUST NOT contain more than one element."; } leaf pattern { type field-pattern; mandatory true; description - "Regular Expression describing the expected contents of - the field"; + "Used by parsers to match on the content of the field. + This could be a single value or a regular expression + pattern matching multiple values."; } leaf description { type field-description; description - "A text description of the field contents"; + "A text description of the field pattern. This description + can be used to provide meaning to specific values for a + field."; } } } container bgp-communities { + config false; description "A community set"; leaf serial { type uint32; must "boolean(.)"; description - "Version number of the community set"; + "Version number of the community set. This value wraps and + should be compared using sequence space arithmetic. + Publishing implementations are free to decide how to + generate this value. One example method is to use the + YYYYMMDDnn syntax as commonly used inside the DNS."; + reference + "RFC 1912: Common DNS Operational and Configuration Errors"; } leaf uri { type inet:uri; @@ -219,7 +245,6 @@ module ietf-bgp-communities { leaf description { type string { length "1..65535"; - pattern '[^\p{C}]+'; } description "A description for the community set"; @@ -242,7 +267,6 @@ module ietf-bgp-communities { leaf name { type string { length "1..255"; - pattern '[^\p{C}]+'; } description "Maintainer contact name"; @@ -250,7 +274,6 @@ module ietf-bgp-communities { leaf role { type string { length "1..255"; - pattern '[^\p{C}]+'; } description "Maintainer contact role"; @@ -258,7 +281,6 @@ module ietf-bgp-communities { leaf organization { type string { length "1..255"; - pattern '[^\p{C}]+'; } description "Maintainer contact organization"; @@ -266,7 +288,6 @@ module ietf-bgp-communities { leaf organizational-unit { type string { length "1..255"; - pattern '[^\p{C}]+'; } description "Maintainer contact organizational unit"; @@ -274,6 +295,7 @@ module ietf-bgp-communities { } list regular { key "name"; + ordered-by user; description "A list of objects describing RFC 1997 BGP Communities"; leaf name { @@ -313,9 +335,11 @@ module ietf-bgp-communities { } list extended { key "name"; + ordered-by user; description "A list of objects describing RFC 4360 Extended BGP - Communities"; + Communities. Two-Octet and Four-Octet AS Specific + communities are supported by this model."; leaf name { type community-name; description @@ -335,13 +359,19 @@ module ietf-bgp-communities { type uint8; mandatory true; description - "Type Field"; + "High-order Type of the community. Supported values are 0 + (0x00) for Transitive Two-Octet AS-Specific Extended + Communities, 2 (0x02) for Transitive Four-Octet + AS-Specific Extended Communities, 64 (0x40) for + Non-Transitive Two-Octet AS-Specific Extended Communities + and 66 (0x42) for Non-Transitive Four-Octet AS-Specific + Extended Communities."; } leaf subtype { type uint8; mandatory true; description - "Sub-Type Field"; + "Low-order Sub-Type of the community"; } choice global-admin { mandatory true; @@ -380,6 +410,7 @@ module ietf-bgp-communities { } list large { key "name"; + ordered-by user; description "A list of objects describing RFC 8092 Large BGP Communities"; 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 86344e971..7d6b75afb 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 @@ -383,16 +383,10 @@ module ietf-rpki-rtr { "The number of router keys received from the RPKI cache server."; } - leaf ipv4-aspa-records { + leaf aspa-records { type yang:zero-based-counter64; description - "The number of IPv4 ASPAs received from the RPKI - cache server."; - } - leaf ipv6-aspa-records { - type yang:zero-based-counter64; - description - "The number of IPv6 ASPAs received from the RPKI + "The number of ASPAs received from the RPKI cache server."; } } 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 199f2aa43..eb158b084 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 @@ -300,18 +300,7 @@ module ietf-rpki-table { description "Name of the ASPA-table."; } - container ipv4 { - config false; - description - "Container for IPv4 ASPAs table."; - uses aspa-overall-records; - } - container ipv6 { - config false; - description - "Container for IPv6 ASPAs table."; - uses aspa-overall-records; - } + uses aspa-overall-records; } } } From 6e8e2245e709fbe6c5fe5b0cd5b7ec4c3055cc80 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Sat, 28 Jun 2025 14:05:26 +0000 Subject: [PATCH 09/34] Cronjob - daily check of IANA modules. --- standard/iana/yang-parameters.xml | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/standard/iana/yang-parameters.xml b/standard/iana/yang-parameters.xml index 9b1c77116..718489f31 100644 --- a/standard/iana/yang-parameters.xml +++ b/standard/iana/yang-parameters.xml @@ -4,7 +4,7 @@ YANG Parameters 2010-06-10 - 2025-06-11 + 2025-06-27 YANG Module Names @@ -970,6 +970,16 @@ and Subsequent Address Family Identi + + ietf-inet-types + N + + 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 N @@ -2610,6 +2620,16 @@ and Subsequent Address Family Identi + + ietf-yang-types + N + + 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 N From 22462210bb7185182656c1d8b1de97e78720124a Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Wed, 2 Jul 2025 14:05:26 +0000 Subject: [PATCH 10/34] Cronjob - daily check of IANA modules. --- standard/iana/yang-parameters.xml | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/standard/iana/yang-parameters.xml b/standard/iana/yang-parameters.xml index 718489f31..eed697cfe 100644 --- a/standard/iana/yang-parameters.xml +++ b/standard/iana/yang-parameters.xml @@ -4,12 +4,12 @@ YANG Parameters 2010-06-10 - 2025-06-27 + 2025-07-01 YANG Module Names - + RFC Required YANG modules are additionally available for bulk retrieval by Rsync (rsync.iana.org::assignments/yang-parameters/) or @@ -226,6 +226,16 @@ and Subsequent Address Family Identi 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. + + iana-template + N + + 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 Y @@ -2380,6 +2390,16 @@ and Subsequent Address Family Identi + + ietf-template + N + + 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 N From 470309fd1213947df6a1e89b47e0e4014f8b1e60 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Wed, 2 Jul 2025 18:05:40 +0000 Subject: [PATCH 11/34] Cronjob - daily check of IETF modules. --- .../ietf-cats@2024-06-20.yang | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) 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 57b73def9..b2e6cab7b 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 @@ -231,20 +231,31 @@ module ietf-cats { transmission delay, where the metric value is the delay time in milliseconds."; } - enum service-ratio { + enum service-capacity { value 1; description "Calculate the metric based on - business capacity, where the metric value is - the current capacity percentage."; + service capacity, where the metric value is + the service capacity."; } - enum memory-ratio { + enum service-availability-ratio { value 2; - description " Calculate the metric based on - memory utilization percentage, where the + 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"; + } + enum memory-ratio { + value 4; + description "Calculate the metric based on + memory utilization percentage, where the metric value is the current memory utilization percentage"; } - } } leaf metric { From 5c2113217bf46a0430ec06c910533da11a03dfa9 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Thu, 3 Jul 2025 18:05:38 +0000 Subject: [PATCH 12/34] Cronjob - daily check of IETF modules. --- ...1-08.yang => ietf-altmark@2025-06-30.yang} | 82 ++++---- .../ietf-config-template@2025-05-28.yang | 82 ++++++++ ...-netconf-txid-nmda-compare@2023-05-01.yang | 25 ++- ...etf-netconf-txid-yang-push@2022-04-01.yang | 19 +- .../ietf-netconf-txid@2023-03-01.yang | 157 +++++++-------- ...=> ietf-on-path-telemetry@2025-06-30.yang} | 179 ++++++++---------- .../ietf-telemetry-message@2025-06-10.yang | 20 +- 7 files changed, 322 insertions(+), 242 deletions(-) rename experimental/ietf-extracted-YANG-modules/{ietf-altmark@2025-01-08.yang => ietf-altmark@2025-06-30.yang} (84%) create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-config-template@2025-05-28.yang rename experimental/ietf-extracted-YANG-modules/{ietf-on-path-telemetry@2025-01-09.yang => ietf-on-path-telemetry@2025-06-30.yang} (81%) diff --git a/experimental/ietf-extracted-YANG-modules/ietf-altmark@2025-01-08.yang b/experimental/ietf-extracted-YANG-modules/ietf-altmark@2025-06-30.yang similarity index 84% rename from experimental/ietf-extracted-YANG-modules/ietf-altmark@2025-01-08.yang rename to experimental/ietf-extracted-YANG-modules/ietf-altmark@2025-06-30.yang index 4fde0ca6a..099234c27 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-altmark@2025-01-08.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-altmark@2025-06-30.yang @@ -31,10 +31,10 @@ module ietf-altmark { "WG Web: WG List: Author: thomas.graf@swisscom.com - Author: wangminxue@chinamobile.com + Author: wangminxue@chinamobile.com Author: giuseppe.fioccola@huawei.com Author: zhoutianran@huawei.com - Author: xiao.min2@zte.com.cn"; + Author: xiao.min2@zte.com.cn"; description "This YANG module specifies a vendor-independent data @@ -60,7 +60,7 @@ module ietf-altmark { (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself for full legal notices."; - revision 2025-01-08 { + revision 2025-06-30 { description "First revision."; reference "RFC XXXX: A YANG Data Model for Alternate-Marking"; } @@ -73,10 +73,10 @@ module ietf-altmark { { description "This feature indicated that the Alternate-Marking Method is - supported."; + supported."; reference - "RFC 9341: Alternate-Marking Method; - RFC 9342: Clustered Alternate-Marking Method"; + "RFC 9341: Alternate-Marking Method; + RFC 9342: Clustered Alternate-Marking Method"; } /* @@ -116,7 +116,7 @@ module ietf-altmark { description "Base identity to represent the protocol. It's used to indicate the protocol for the application of the AltMark - method."; + method."; } identity ipv6 { @@ -133,7 +133,7 @@ module ietf-altmark { "The AltMark method is applied to SRH."; reference "[I-D.fz-spring-srv6-alt-mark]: Application of the - Alternate Marking Method to the Segment Routing Header"; + Alternate Marking Method to the Segment Routing Header"; } identity mpls { @@ -142,7 +142,7 @@ module ietf-altmark { "The AltMark method is applied to MPLS."; reference "[I-D.ietf-mpls-inband-pm-encapsulation]: Application of the - Alternate Marking Method to the MPLS Label Stack"; + Alternate Marking Method to the MPLS Label Stack"; } identity node-action { @@ -155,27 +155,27 @@ module ietf-altmark { base node-action; description "It indicates that the node must mark the AltMark data field, - according to the operations described in RFC 9341 and - RFC 9342"; + according to the operations described in RFC 9341 and + RFC 9342"; } identity action-unmarking { base node-action; description "It indicates that the node must unmark the AltMark data field, - according to the operations described in RFC 9341 and - RFC 9342"; + according to the operations described in RFC 9341 and + RFC 9342"; } identity action-read { base node-action; description "It indicates the node only reads the AltMark data, - according to the operations described in RFC 9341 and - RFC 9342"; + according to the operations described in RFC 9341 and + RFC 9342"; } - identity period { + identity measurement-period { description "It indicates the AltMark Period."; } @@ -271,7 +271,7 @@ module ietf-altmark { leaf ace-name { when "derived-from-or-self(../filter-type, - 'altmark:acl-filter')"; + 'altmark:acl-filter')"; type leafref { path "/acl:acls/acl:acl/acl:aces/acl:ace/acl:name"; } @@ -289,7 +289,7 @@ module ietf-altmark { default false; description "This object indicates that hop-by-hop measurements can be - enabled."; + enabled."; } leaf e2e-measurement { @@ -297,7 +297,7 @@ module ietf-altmark { default false; description "This object indicates that end-to-end measurements can be - enabled."; + enabled."; } } @@ -313,28 +313,28 @@ module ietf-altmark { take, i.e. marking/read/unmarking."; } - leaf period { + leaf measurement-period { type uint64; description "It specifies the AltMark marking period."; } - leaf altmark-flowmonid { + leaf flow-mon-id { type uint32; description "It specifies the FlowMonID. - A 20-bit flow identifier. The field is set at the marking node. - The FlowMonID can be uniformly assigned by a central controller - or algorithmically generated by the marking node. - The latter approach cannot guarantee the uniqueness of the - FlowMonID, yet the conflict probability is small due to the - large space. - FlowMonID is used to identify the flow and to correlate the - exported data of the same flow from multiple nodes and from - multiple packets."; + A 20-bit flow identifier. The field is set at the marking node. + The FlowMonID can be uniformly assigned by a central controller + or algorithmically generated by the marking node. + The latter approach cannot guarantee the uniqueness of the + FlowMonID, yet the conflict probability is small due to the + large space. + FlowMonID is used to identify the flow and to correlate the + exported data of the same flow from multiple nodes and from + multiple packets."; } - } + } grouping altmark-admin-config { description @@ -362,8 +362,8 @@ module ietf-altmark { config false; description "Describes information such as units or timestamp format - that assists monitoring systems in the interpretation of the - AltMark data."; + that assists monitoring systems in the interpretation of the + AltMark data."; leaf timestamp-type { type identityref { @@ -376,7 +376,7 @@ module ietf-altmark { key "if-name"; description "A list of available interfaces that support - Alternate-Marking."; + Alternate-Marking."; leaf if-name { type if:interface-ref; description "This is a reference to the Interface name."; @@ -401,7 +401,7 @@ module ietf-altmark { key "profile-name"; description "It describes the list of the AltMark profiles configured - on the node"; + on the node"; leaf profile-name { type string{ length "1..300"; @@ -414,7 +414,7 @@ module ietf-altmark { uses altmark-filter; description "The filter which is used to indicate the flow where - the AltMark is applied."; + the AltMark is applied."; } leaf method-type { @@ -432,22 +432,22 @@ module ietf-altmark { uses altmark-setup; - uses measurement-mode; + uses measurement-mode; leaf enable-loss-measurement { type boolean; - default false; + default false; description "If true, it indicates that loss measurements are - enabled."; + enabled."; } leaf enable-delay-measurement { type boolean; default false; - description + description "If true, it indicates that delay measurements are - enabled."; + enabled."; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-config-template@2025-05-28.yang b/experimental/ietf-extracted-YANG-modules/ietf-config-template@2025-05-28.yang new file mode 100644 index 000000000..cc6986268 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-config-template@2025-05-28.yang @@ -0,0 +1,82 @@ +module ietf-config-template { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-config-template"; + prefix ct; + + import ietf-yang-types { + prefix yang; + reference + "RFC 6991: Common YANG Data Types"; + } + + organization + "IETF NETMOD (Network Modeling) Working Group"; + contact + "WG Web: + WG List: + Author: Qiufang Ma + "; + + description + "This module defines a template list with a RPC to expand + the template. + + 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."; + + revision 2025-05-28 { + description + "Initial revision."; + reference + "RFC XXXX: YANG Templates"; + } + + container templates { + description + "Specifies the template parameters."; + list template { + key id; + description + "The list of templates managed on this device."; + leaf id { + type string; + description + "The identifier of the template that uniquely identifies a + template."; + } + leaf description { + type string; + description + "A textual description of the template."; + } + anydata content { + description + "inline template content."; + } + leaf last-modified { + type yang:timestamp; + config false; + description + "Timestamp when the template is modified last time."; + } + } + } +} 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@2023-05-01.yang index d816ea18b..301cea712 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@2023-05-01.yang @@ -1,16 +1,15 @@ module ietf-netconf-txid-nmda-compare { yang-version 1.1; - namespace - 'urn:ietf:params:xml:ns:yang:ietf-netconf-txid-nmda-compare'; + namespace + "urn:ietf:params:xml:ns:yang:ietf-netconf-txid-nmda-compare"; prefix ietf-netconf-txid-nmda-compare; import ietf-nmda-compare { prefix cmp; reference - "RFC 9144: Comparison of Network Management Datastore + "RFC 9144: Comparison of Network Management Datastore Architecture (NMDA) Datastores"; } - import ietf-netconf-txid { prefix ietf-netconf-txid; reference @@ -19,14 +18,12 @@ module ietf-netconf-txid-nmda-compare { organization "IETF NETCONF (Network Configuration) Working Group"; - contact "WG Web: WG List: Author: Jan Lindblad "; - description "NETCONF Transaction ID aware operations for NMDA Compare. @@ -49,7 +46,7 @@ module ietf-netconf-txid-nmda-compare { '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 2023-05-01 { description @@ -64,15 +61,17 @@ module ietf-netconf-txid-nmda-compare { txids to be returned."; uses ietf-netconf-txid:txid-grouping; } - augment "/cmp:compare/cmp:output/cmp:compare-response/" + - "cmp:differences/cmp:differences/cmp:yang-patch/cmp:edit" { + + augment "/cmp:compare/cmp:output/cmp:compare-response/" + + "cmp:differences/cmp:differences/cmp:yang-patch/cmp:edit" { description "This augmentation makes it possible for servers to return - txid-values."; + txid-values."; container most-recent { - description "The txid value returned by the server MUST be the - txid value pertaining to the target node in the source or - target datastores that is the most recent."; + description + "The txid value returned by the server MUST be the + txid value pertaining to the target node in the source or + target datastores that is the most recent."; uses ietf-netconf-txid:txid-value-grouping; } } 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@2022-04-01.yang index cb202b892..a83deefc7 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@2022-04-01.yang @@ -1,7 +1,7 @@ module ietf-netconf-txid-yang-push { yang-version 1.1; - namespace - 'urn:ietf:params:xml:ns:yang:ietf-netconf-txid-yang-push'; + namespace + "urn:ietf:params:xml:ns:yang:ietf-netconf-txid-yang-push"; prefix ietf-netconf-txid-yp; import ietf-subscribed-notifications { @@ -9,13 +9,11 @@ module ietf-netconf-txid-yang-push { reference "RFC 8639: Subscription to YANG Notifications"; } - import ietf-yang-push { prefix yp; reference "RFC 8641: Subscriptions to YANG Datastores"; } - import ietf-netconf-txid { prefix ietf-netconf-txid; reference @@ -24,14 +22,12 @@ module ietf-netconf-txid-yang-push { organization "IETF NETCONF (Network Configuration) Working Group"; - contact "WG Web: WG List: Author: Jan Lindblad "; - description "NETCONF Transaction ID aware operations for YANG Push. @@ -54,7 +50,7 @@ module ietf-netconf-txid-yang-push { '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-04-01 { description @@ -69,23 +65,26 @@ module ietf-netconf-txid-yang-push { that apply specifically to datastore updates to RPC input."; uses ietf-netconf-txid:txid-grouping; } + augment "/sn:modify-subscription/sn:input" { description "This augmentation adds additional subscription parameters specific to datastore updates."; uses ietf-netconf-txid:txid-grouping; } + augment "/sn:subscriptions/sn:subscription" { description "This augmentation adds additional subscription parameters specific to datastore updates."; uses ietf-netconf-txid:txid-grouping; } - augment "/yp:push-change-update/yp:datastore-changes/" + - "yp:yang-patch" { + + augment "/yp:push-change-update/yp:datastore-changes/" + + "yp:yang-patch" { description "This augmentation makes it possible for servers to return - txid-values."; + txid-values."; uses ietf-netconf-txid:txid-value-grouping; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid@2023-03-01.yang b/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid@2023-03-01.yang index 413dd2b74..aabbb0a63 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid@2023-03-01.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid@2023-03-01.yang @@ -1,39 +1,41 @@ module ietf-netconf-txid { yang-version 1.1; - namespace - 'urn:ietf:params:xml:ns:yang:ietf-netconf-txid'; + namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-txid"; prefix ietf-netconf-txid; import ietf-netconf { prefix nc; + reference + "RFC 6241: Network Configuration Protocol (NETCONF)"; } - import ietf-netconf-nmda { prefix ncds; + reference + "RFC 8342: Network Management Datastore Architecture (NMDA)"; } - import ietf-yang-structure-ext { prefix sx; + reference + "RFC 8791: YANG Data Structure Extensions."; } - import ietf-yang-types { prefix yang; + reference + "RFC 6991: Common YANG Data Types"; } organization "IETF NETCONF (Network Configuration) Working Group"; - contact "WG Web: WG List: Author: Jan Lindblad "; - description "NETCONF Transaction ID aware operations for NMDA. - 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 +54,7 @@ module ietf-netconf-txid { '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 2023-03-01 { description @@ -62,58 +64,60 @@ module ietf-netconf-txid { } feature last-modified { - description "Servers implementing this module MUST support the - etag txid mechanism. Servers MAY also support the - last-modified txid mechanism. Support is shown by announcing - this feature."; + description + "Servers implementing this module MUST support the + etag txid mechanism. Servers MAY also support the + last-modified txid mechanism. Support is shown by announcing + this feature."; } extension versioned-node { - description "This statement is used by servers to declare that a - the server is maintaining a Txid for the YANG node with this - statement. Which YANG nodes are versioned nodes may be useful - information for clients (especially during development). + description + "This statement is used by servers to declare that a + the server is maintaining a Txid for the YANG node with this + statement. Which YANG nodes are versioned nodes may be useful + information for clients (especially during development). - Servers are not required to use this statement to declare - which nodes are versioned nodes. + Servers are not required to use this statement to declare + which nodes are versioned nodes. - Example of use: + Example of use: - container interfaces { - ietf-netconf-txid:versioned-node; - ... - } + container interfaces { + ietf-netconf-txid:versioned-node; + ... + } "; } typedef etag-t { type string { - pattern ".* .*" { - modifier invert-match; + pattern '.* .*' { + modifier "invert-match"; } pattern '.*".*' { - modifier invert-match; + modifier "invert-match"; } - pattern ".*\\.*" { - modifier invert-match; + pattern '.*\.*' { + modifier "invert-match"; } } - description - "Unique Entity-tag txid value representing a specific - transaction. Could be any string that does not contain - spaces, double quotes or backslash. + description + "Unique Entity-tag txid value representing a specific + transaction. Could be any string that does not contain + spaces, double quotes or backslash. - The txid values '?', '!' and '=' have special meaning: + The txid values '?', '!' and '=' have special meaning: - '?' This txid value is used by clients and is + '?' This txid value is used by clients and is guaranteed not to match any txid on the server. - '!' This txid value used by servers to indicate + '!' This txid value used by servers to indicate the node in the candidate datastore has changed relative to the running datastore, but not yet received a new txid value on the server. - '=' This txid value used by servers to indicate + '=' This txid value used by servers to indicate that contents has been pruned due to txid match between client and server. "; @@ -124,19 +128,22 @@ module ietf-netconf-txid { type yang:date-and-time; type enumeration { enum ? { - description "Txid value used by clients that is - guaranteed not to match any txid on the server."; + description + "Txid value used by clients that is + guaranteed not to match any txid on the server."; } enum ! { - description "Txid value used by servers to indicate - the node in the candidate datastore has changed - relative to the running datastore, but not yet received - a new txid value on the server."; + description + "Txid value used by servers to indicate + the node in the candidate datastore has changed + relative to the running datastore, but not yet received + a new txid value on the server."; } enum = { - description "Txid value used by servers to indicate - that contents has been pruned due to txid match - between client and server."; + description + "Txid value used by servers to indicate + that contents has been pruned due to txid match + between client and server."; } } } @@ -150,20 +157,20 @@ module ietf-netconf-txid { type boolean; description "Indicates whether the client requests the server to include - a txid:etag txid attribute when the configuration has + a txid:etag txid attribute when the configuration has changed."; } leaf with-last-modified { - if-feature last-modified; + if-feature "last-modified"; type boolean; - description + description "Indicates whether the client requests the server to include - a txid:last-modified attribute when the configuration has + a txid:last-modified attribute when the configuration has changed."; } description - "Grouping for txid mechanisms, to be augmented into - rpcs that modify configuration data stores."; + "Grouping for txid mechanisms, to be augmented into + RPCs that modify configuration data stores."; } grouping txid-value-grouping { @@ -173,47 +180,47 @@ module ietf-netconf-txid { "Indicates server's txid value for a YANG node."; } leaf last-modified-value { - if-feature last-modified; + if-feature "last-modified"; type last-modified-t; description "Indicates server's txid value for a YANG node."; } description - "Grouping for txid mechanisms, to be augmented into - output of rpcs that return txid metadata for configuration + "Grouping for txid mechanisms, to be augmented into + output of RPCs that return txid metadata for configuration data stores."; } - augment /nc:edit-config/nc:input { + augment "/nc:edit-config/nc:input" { uses txid-grouping; description - "Injects the txid mechanisms into the - edit-config operation"; + "Injects the txid mechanisms into the + edit-config operation"; } - augment /nc:commit/nc:input { + augment "/nc:commit/nc:input" { uses txid-grouping; description - "Injects the txid mechanisms into the - commit operation"; + "Injects the txid mechanisms into the + commit operation"; } - augment /ncds:edit-data/ncds:input { + augment "/ncds:edit-data/ncds:input" { uses txid-grouping; description - "Injects the txid mechanisms into the - edit-data operation"; + "Injects the txid mechanisms into the + edit-data operation"; } sx:structure txid-value-mismatch-error-info { container txid-value-mismatch-error-info { description - "This error is returned by a NETCONF server when a client - sends a configuration change request, with the additional - condition that the server aborts the transaction if the - server's configuration has changed from what the client - expects, and the configuration is found not to actually - not match the client's expectation."; + "This error is returned by a NETCONF server when a client + sends a configuration change request, with the additional + condition that the server aborts the transaction if the + server's configuration has changed from what the client + expects, and the configuration is found not to actually + not match the client's expectation."; leaf mismatch-path { type instance-identifier; description @@ -223,15 +230,15 @@ module ietf-netconf-txid { leaf mismatch-etag-value { type etag-t; description - "Indicates server's txid value of the etag - attribute for one mismatching element."; + "Indicates server's txid value of the etag + attribute for one mismatching element."; } leaf mismatch-last-modified-value { - if-feature last-modified; + if-feature "last-modified"; type last-modified-t; description - "Indicates server's txid value of the last-modified - attribute for one mismatching element."; + "Indicates server's txid value of the last-modified + attribute for one mismatching element."; } } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-on-path-telemetry@2025-01-09.yang b/experimental/ietf-extracted-YANG-modules/ietf-on-path-telemetry@2025-06-30.yang similarity index 81% rename from experimental/ietf-extracted-YANG-modules/ietf-on-path-telemetry@2025-01-09.yang rename to experimental/ietf-extracted-YANG-modules/ietf-on-path-telemetry@2025-06-30.yang index 25aa836a9..a48556bb8 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-on-path-telemetry@2025-01-09.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-on-path-telemetry@2025-06-30.yang @@ -29,7 +29,10 @@ module ietf-on-path-telemetry { "WG Web: WG List: Author: giuseppe.fioccola@huawei.com - Author: zhoutianran@huawei.com"; + Author: zhoutianran@huawei.com + Author: zhuyq8@chinatelecom.cn + Author: zhangwq@chinatelecom.cn + Author: zhukeyi@huawei.com"; description "This YANG module specifies a vendor-independent data @@ -40,7 +43,6 @@ module ietf-on-path-telemetry { '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. @@ -55,7 +57,7 @@ module ietf-on-path-telemetry { (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself for full legal notices."; - revision 2025-01-09 { + revision 2025-06-30 { description "First revision."; reference "RFC XXXX: A YANG Data Model for On-path Telemetry"; } @@ -68,19 +70,19 @@ module ietf-on-path-telemetry { { description "This feature indicated that the Alternate-Marking Method is - supported."; + supported."; reference - "RFC 9341: Alternate-Marking Method; - RFC 9342: Clustered Alternate-Marking Method"; + "RFC 9341: Alternate-Marking Method; + RFC 9342: Clustered Alternate-Marking Method"; } feature pathdelay { description "This feature indicated that the Path Delay is - supported."; + supported."; reference - "[I-D.ietf-opsawg-ipfix-on-path-telemetry]"; + "[I-D.ietf-opsawg-ipfix-on-path-telemetry]"; } feature incremental-trace @@ -142,8 +144,8 @@ module ietf-on-path-telemetry { identity protocol { description "Base identity to represent the protocol. It's used to - indicate the protocol for the application of the On-Path Telemetry - method."; + indicate the protocol for the application of the On-Path Telemetry + method."; } identity ipv6 { @@ -152,7 +154,7 @@ module ietf-on-path-telemetry { "The On-Path Telemetry method is applied to IPv6 protocol."; reference "RFC 9343: IPv6 Application of the Alternate-Marking Method, - RFC 9486: In-situ OAM IPv6 Options"; + RFC 9486: In-situ OAM IPv6 Options"; } identity srh { @@ -161,7 +163,7 @@ module ietf-on-path-telemetry { "The On-Path Telemetry method is applied to SRH."; reference "[I-D.fz-spring-srv6-alt-mark]: Application of the - Alternate Marking Method to the Segment Routing Header"; + Alternate Marking Method to the Segment Routing Header"; } identity mpls { @@ -170,7 +172,7 @@ module ietf-on-path-telemetry { "The On-Path Telemetry method is applied to MPLS."; reference "[I-D.ietf-mpls-inband-pm-encapsulation]: Application of the - Alternate Marking Method to the MPLS Label Stack"; + Alternate Marking Method to the MPLS Label Stack"; } identity nsh { @@ -192,24 +194,24 @@ module ietf-on-path-telemetry { base node-action; description "It indicates that the node must mark the AltMark data field, - according to the operations described in RFC 9341 and - RFC 9342"; + according to the operations described in RFC 9341 and + RFC 9342"; } identity action-unmarking { base node-action; description "It indicates that the node must unmark the AltMark data field, - according to the operations described in RFC 9341 and - RFC 9342"; + according to the operations described in RFC 9341 and + RFC 9342"; } identity action-read { base node-action; description "It indicates the node only reads the AltMark data, - according to the operations described in RFC 9341 and - RFC 9342"; + according to the operations described in RFC 9341 and + RFC 9342"; } identity action-encapsulate { @@ -230,12 +232,12 @@ module ietf-on-path-telemetry { "It indicates the node is to transit the IOAM packet"; } - identity period { + identity measurement-period { description "It indicates the On-Path Telemetry Period."; } - identity period-number { + identity measurement-period-number { description "It indicates the Period Number."; } @@ -281,7 +283,6 @@ module ietf-on-path-telemetry { description "To specify timestamps for delay according to RFC 9341"; } - /* * TYPE DEFINITIONS */ @@ -347,16 +348,6 @@ module ietf-on-path-telemetry { * GROUP DEFINITIONS */ - grouping timestamp { - description - "Grouping for identifying the time."; - leaf timestamp { - type yang:date-and-time; - description - "Specify the time."; - } - } - grouping telemetry-filter { description "A grouping for On-path Telemetry filter definition"; @@ -367,7 +358,7 @@ module ietf-on-path-telemetry { leaf ace-name { when "derived-from-or-self(../filter-type, - 'on-path-telemetry:acl-filter')"; + 'on-path-telemetry:acl-filter')"; type leafref { path "/acl:acls/acl:acl/acl:aces/acl:ace/acl:name"; } @@ -387,31 +378,32 @@ module ietf-on-path-telemetry { take, i.e. marking/read/unmarking/encapsulate/transit/decapsulate."; } - leaf period { + leaf measurement-period { type uint64; description "It specifies the On-path Telemetry period. - It is the marking period for AltMark."; + It is the marking period for AltMark."; } - leaf period-number { + leaf measurement-period-number { type uint64; description "It specifies the On-path Telemetry period number."; } - leaf flowmonid { + leaf flow-mon-id { type uint32; description "It specifies the 20-bit FlowMonID."; } + leaf method-type { type altmark-method-type; description "It specifies the AltMark method type."; } - } + } grouping loss-counters { description @@ -440,7 +432,7 @@ module ietf-on-path-telemetry { "Total outbound bytes of the period according to RFC 9341"; } - } + } grouping delay-timestamps { description @@ -461,7 +453,7 @@ module ietf-on-path-telemetry { "To specify the sequence number of the delay packet for delay measurements"; } } - } + } grouping path-delay-metrics { description @@ -483,66 +475,70 @@ module ietf-on-path-telemetry { description "max path delay as per [I-D.ietf-opsawg-ipfix-on-path-telemetry]"; } - leaf path-delay-sum { type uint64; description "sum of the path delay as per [I-D.ietf-opsawg-ipfix-on-path-telemetry]"; } - } + } - grouping ioam-incremental-tracing-data { + grouping ioam-incremental-tracing-data-list { description "A grouping for incremental tracing data."; - leaf incremental-tracing-data { - type ioam-trace-data; - description - "This object indicates the incremental tracing data."; + container ioam-incremental-tracing { + description + "The list of incremental tracing data"; + leaf-list incremental-tracing { + type ioam-trace-data; + description + "This object indicates the incremental tracing data."; + } } } - grouping ioam-preallocated-tracing-data { + + grouping ioam-preallocated-tracing-data-list { description - "A grouping for pre-allocated tracing data."; + "A grouping for the list of pre-allocated tracing data."; - leaf preallocated-tracing-data { - type ioam-trace-data; - description - "This object indicates the preallocated-tracing-data."; - } + leaf-list preallocated-tracing { + type ioam-trace-data; + description + "This object indicates the preallocated tracing data."; + } } - grouping ioam-direct-export-tracing-data { + grouping ioam-direct-export-tracing-data-list { description - "A grouping for direct export data."; + "A grouping for the list of direct export data."; - leaf direct-export-data { - type ioam-trace-data; - description - "This object indicates the direct export data."; - } + leaf-list direct-export { + type ioam-trace-data; + description + "This object indicates the direct export data."; + } } - grouping ioam-edge-to-edge-data { + grouping ioam-proof-of-transit-data-list { description - "A grouping for edge-to-edge data."; + "A grouping for the list of proof of transit data."; - leaf e2e-data { - type ioam-e2e-data; - description - "This object indicates the edge-to-edge data."; - } + leaf-list proof-of-transit { + type ioam-pot-data; + description + "This object indicates the proof of transit data."; + } } - grouping ioam-proof-of-transit-data { + grouping ioam-edge-to-edge-data-list { description - "A grouping for proof of transit data."; + "A grouping for the list of edge-to-edge data."; - leaf pot-data { - type ioam-pot-data; - description - "This object indicates the proof of transit data."; - } + leaf-list edge-to-edge { + type ioam-e2e-data; + description + "This object indicates the edge to edge data."; + } } /* @@ -550,25 +546,19 @@ module ietf-on-path-telemetry { */ container on-path-telemetry-data { + config false; description "On-path Telemetry top level container"; - uses timestamp; - - container interfaces { - description - "Contains the list of available interfaces that support - Alternate-Marking."; - list interface { key "if-name"; description - "It describes the list of the interfaces activated for AltMark"; + "It contains the list of the interfaces activated for AltMark and IOAM"; leaf if-name { type if:interface-ref; description "This is a reference to the Interface name."; } - leaf profile-name { + leaf profile-name { type string{ length "1..300"; } @@ -580,7 +570,7 @@ module ietf-on-path-telemetry { uses telemetry-filter; description "The filter which is used to indicate the flow where - the On-path Telemetry is applied."; + the On-path Telemetry is applied."; } leaf protocol-type { @@ -593,7 +583,7 @@ module ietf-on-path-telemetry { uses telemetry-setup; container altmark-loss-measurement { - if-feature altmark; + if-feature altmark; description "It reports the loss measurement data."; @@ -601,7 +591,7 @@ module ietf-on-path-telemetry { } container altmark-delay-measurement { - if-feature altmark; + if-feature altmark; description "It reports the delay measurement data."; @@ -609,7 +599,7 @@ module ietf-on-path-telemetry { } container path-delay { - if-feature pathdelay; + if-feature pathdelay; description "It reports the path delay measurements."; @@ -622,7 +612,7 @@ module ietf-on-path-telemetry { description "It reports the incremental tracing option data."; - uses ioam-incremental-tracing-data; + uses ioam-incremental-tracing-data-list; } container ioam-preallocated-tracing { @@ -631,7 +621,7 @@ module ietf-on-path-telemetry { description "It reports the preallocated tracing option data."; - uses ioam-preallocated-tracing-data; + uses ioam-preallocated-tracing-data-list; } container ioam-direct-export { @@ -640,7 +630,7 @@ module ietf-on-path-telemetry { description "It reports the direct-export option data"; - uses ioam-direct-export-tracing-data; + uses ioam-direct-export-tracing-data-list; } container ioam-proof-of-transit { @@ -649,7 +639,7 @@ module ietf-on-path-telemetry { description "It reports the PoT option data."; - uses ioam-proof-of-transit-data; + uses ioam-proof-of-transit-data-list; } container ioam-edge-to-edge { @@ -658,9 +648,8 @@ module ietf-on-path-telemetry { description "It reports the edge-to-edge option data."; - uses ioam-edge-to-edge-data; + uses ioam-edge-to-edge-data-list; } } - } - } + } } 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 9a4d5a731..e041e2cf4 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 @@ -30,7 +30,7 @@ module ietf-telemetry-message { "; description "This YANG module defines an extensible message schema to be used at - the data collection to transform Network Telemetry messages into + data collection to transform Network Telemetry messages towards external systems such as Message Brokers. Copyright (c) 2025 IETF Trust and the persons identified as @@ -122,7 +122,7 @@ module ietf-telemetry-message { } description "Network Telemetry protocol used to deliver the notification - between the network node and the data collection."; + between the network node and the data collector."; } container message { @@ -144,13 +144,17 @@ module ietf-telemetry-message { type yang:date-and-time; description "Timestamp when the Network Telemetry data has been exported - from network element."; + from network element. This can be obtained in YANG-Push from + event-time defined in draft-ietf-netconf-notif-envelope or + in IPFIX from the export time in the message header as + defined in RFC 7011 or in BMP from the timestamp in The + per-peer header as defined in RFC 7854."; } leaf collection-timestamp { type yang:date-and-time; mandatory true; description - "Timestamp when the data collection collected the Network + "Timestamp when the data collector collected the Network Telemetry data from the network element."; } leaf session-protocol { @@ -176,20 +180,20 @@ module ietf-telemetry-message { leaf collection-address { type inet:host; description - "Data collection IP address at which the Network Telemetry + "Data collector IP address at which the Network Telemetry data was collected."; } leaf collection-port { type inet:port-number; description - "Data collection transport port number at which the Network + "Data collector transport port number at which the Network Telemetry data was collected."; } } container data-collection-manifest { if-feature "data-collection-manifest"; description - "Contains the Data Manifest of the data collection which + "Contains the Data Manifest of the data collector which collected the Network Telemetry data."; uses p-mf:platform-details; } @@ -200,7 +204,7 @@ module ietf-telemetry-message { list labels { key "name"; description - "Abritrary labels assinged by the data collection."; + "Abritrary labels assigned by the data collector."; leaf name { type string { length "1..max"; From 2c4460bbf15a500e7db2de37e2ec63f22d6f43c1 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Fri, 4 Jul 2025 18:05:35 +0000 Subject: [PATCH 13/34] Cronjob - daily check of IETF modules. --- ...ang => iana-display-hints@2025-07-03.yang} | 99 +-- .../ietf-amm-base@2025-07-03.yang | 431 +++++++++++ .../ietf-amm-semtype@2025-07-03.yang | 263 +++++++ .../ietf-amm@2025-01-31.yang | 714 ------------------ .../ietf-amm@2025-07-03.yang | 337 +++++++++ .../ietf-bfd-met-keyed-isaac@2025-07-03.yang | 76 ++ ...g => ietf-dtnma-agent-acl@2025-07-03.yang} | 57 +- ....yang => ietf-dtnma-agent@2025-07-03.yang} | 521 +++++++++---- ...ng => ietf-fgotn-topology@2025-06-18.yang} | 22 +- ...yang => ietf-fgotn-tunnel@2025-06-18.yang} | 26 +- .../ietf-network-base@2025-07-03.yang | 212 ++++++ ...7-02.yang => ietf-ns-topo@2025-07-03.yang} | 6 +- ... => ietf-ns-underlay-path@2025-07-03.yang} | 6 +- ...ang => ietf-otn-slice-mpi@2025-07-03.yang} | 13 +- ...07.yang => ietf-otn-slice@2025-07-03.yang} | 18 +- ... ietf-udp-notif-transport@2025-06-04.yang} | 15 +- .../ietf-wdm-tunnel@2024-07-02.yang | 36 +- ...f-yang-library-augmentedby@2025-05-28.yang | 4 +- 18 files changed, 1829 insertions(+), 1027 deletions(-) rename experimental/ietf-extracted-YANG-modules/{iana-display-hints@2025-01-31.yang => iana-display-hints@2025-07-03.yang} (51%) create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-amm-base@2025-07-03.yang create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-amm-semtype@2025-07-03.yang delete mode 100644 experimental/ietf-extracted-YANG-modules/ietf-amm@2025-01-31.yang create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-amm@2025-07-03.yang create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-03.yang rename experimental/ietf-extracted-YANG-modules/{ietf-dtnma-agent-acl@2025-01-31.yang => ietf-dtnma-agent-acl@2025-07-03.yang} (86%) rename experimental/ietf-extracted-YANG-modules/{ietf-dtnma-agent@2025-01-31.yang => ietf-dtnma-agent@2025-07-03.yang} (57%) rename experimental/ietf-extracted-YANG-modules/{ietf-fgotn-topology@2025-04-08.yang => ietf-fgotn-topology@2025-06-18.yang} (91%) rename experimental/ietf-extracted-YANG-modules/{ietf-fgotn-tunnel@2025-04-08.yang => ietf-fgotn-tunnel@2025-06-18.yang} (92%) create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-network-base@2025-07-03.yang rename experimental/ietf-extracted-YANG-modules/{ietf-ns-topo@2024-07-02.yang => ietf-ns-topo@2025-07-03.yang} (96%) rename experimental/ietf-extracted-YANG-modules/{ietf-ns-underlay-path@2024-07-02.yang => ietf-ns-underlay-path@2025-07-03.yang} (97%) rename experimental/ietf-extracted-YANG-modules/{ietf-otn-slice-mpi@2024-07-07.yang => ietf-otn-slice-mpi@2025-07-03.yang} (92%) rename experimental/ietf-extracted-YANG-modules/{ietf-otn-slice@2024-07-07.yang => ietf-otn-slice@2025-07-03.yang} (95%) rename experimental/ietf-extracted-YANG-modules/{ietf-udp-notif-transport@2025-04-27.yang => ietf-udp-notif-transport@2025-06-04.yang} (92%) diff --git a/experimental/ietf-extracted-YANG-modules/iana-display-hints@2025-01-31.yang b/experimental/ietf-extracted-YANG-modules/iana-display-hints@2025-07-03.yang similarity index 51% rename from experimental/ietf-extracted-YANG-modules/iana-display-hints@2025-01-31.yang rename to experimental/ietf-extracted-YANG-modules/iana-display-hints@2025-07-03.yang index 693bb12dd..4d997075e 100644 --- a/experimental/ietf-extracted-YANG-modules/iana-display-hints@2025-01-31.yang +++ b/experimental/ietf-extracted-YANG-modules/iana-display-hints@2025-07-03.yang @@ -6,9 +6,12 @@ module iana-display-hints { import ietf-amm { prefix amm; } + import ietf-amm-base { + prefix amm-base; + } organization - "IANA" { + "Internet Assigned Numbers Authority (IANA)" { amm:enum 2; } contact @@ -21,9 +24,9 @@ module iana-display-hints { Tel: +1 310 301 5800 "; description - "This module defines intermediate and leaf IDENT objects usable as - display-hint annotations derived from the base - object. + "This module defines leaf IDENT objects usable as 'display-hint' + semantic type annotations derived from the base + object. The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', @@ -31,7 +34,7 @@ module iana-display-hints { 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 + 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 @@ -41,13 +44,13 @@ module iana-display-hints { Relating to IETF Documents (https://trustee.ietf.org/license-info). - The initial version of this YANG module is part of RFC XXXX + 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."; reference "https://www.iana.org/assignments/DTNMA-TBA"; - revision 2025-01-31 { + revision 2025-07-03 { description "Updated for latest ADM document."; reference @@ -56,70 +59,47 @@ module iana-display-hints { amm:enum 0; // Integer number hints - amm:ident base-integer { - amm:enum 1; - description - "Intermediate base IDENT of display hints for integer values. - Hints derived from this object SHALL only apply to built-in types - BYTE, INT, UINT, VAST, and UVAST."; - amm:base "//ietf/amm/IDENT/display-hint"; - } amm:ident display-int-dec { amm:enum 2; description "Display integers as decimal (base 10)."; - amm:base "//ietf/amm/IDENT/base-integer"; + amm:base "//ietf/amm-base/ident/display-hint-integer"; } amm:ident display-int-bin { amm:enum 3; description "Display integers as binary (base 2)."; - amm:base "//ietf/amm/IDENT/base-integer"; + amm:base "//ietf/amm-base/ident/display-hint-integer"; } amm:ident display-int-hex { amm:enum 4; description "Display integers as hexadecimal (base 16)."; - amm:base "//ietf/amm/IDENT/base-integer"; + amm:base "//ietf/amm-base/ident/display-hint-integer"; } // Floating-point number hints - amm:ident base-float { - amm:enum 5; - description - "Intermediate base IDENT of display hints for floating point values. - Hints derived from this object SHALL only apply to built-in types - REAL32 and REAL64."; - amm:base "//ietf/amm/IDENT/display-hint"; - } amm:ident display-float-dec { amm:enum 6; description "Display floating point values as decimal fraction."; - amm:base "//ietf/amm/IDENT/base-float"; + amm:base "//ietf/amm-base/ident/display-hint-float"; } amm:ident display-float-exp { amm:enum 7; description "Display floating point values as decimal exponential form."; - amm:base "//ietf/amm/IDENT/base-float"; + amm:base "//ietf/amm-base/ident/display-hint-float"; } amm:ident display-float-hex { amm:enum 8; description - "Display floating point values as hexadecimal exponential form."; - amm:base "//ietf/amm/IDENT/base-float"; + "Display floating point values as hexadecimal exponential + form."; + amm:base "//ietf/amm-base/ident/display-hint-float"; } // Byte-string hints - amm:ident base-bstr { - amm:enum 9; - description - "Intermediate base IDENT of display hints for byte string values. - Hints derived from this object SHALL only apply to built-in type - BYTESTR."; - amm:base "//ietf/amm/IDENT/display-hint"; - } amm:ident display-bstr-text { amm:enum 10; description @@ -127,7 +107,7 @@ module iana-display-hints { The base16 encoding is used otherwise."; reference "draft-ietf-dtn-ari"; - amm:base "//ietf/amm/IDENT/base-bstr"; + amm:base "//ietf/amm-base/ident/display-hint-bstr"; } amm:ident display-bstr-base16 { amm:enum 11; @@ -135,7 +115,7 @@ module iana-display-hints { "Display byte string values as base16-encoded."; reference "draft-ietf-dtn-ari"; - amm:base "//ietf/amm/IDENT/base-bstr"; + amm:base "//ietf/amm-base/ident/display-hint-bstr"; } amm:ident display-bstr-base64 { amm:enum 12; @@ -143,51 +123,26 @@ module iana-display-hints { "Display byte string values as base64url-encoded."; reference "draft-ietf-dtn-ari"; - amm:base "//ietf/amm/IDENT/base-bstr"; - } - amm:ident display-bstr-ipaddress { - amm:enum 16; - description - "Interpret byte string values as either IPv4 address (4-octet length) - or IPv6 address (16-octet length) and display as human-friendly text - according to RFC 4001 conventions."; - reference - "RFC 4001: Textual Conventions for Internet Network Addresses"; - amm:base "//ietf/amm/IDENT/base-bstr"; - } - amm:ident display-bstr-uuid { - amm:enum 17; - description - "Interpret byte string values as UUID and display as human-friendly text - according to RFC 4122 conventions."; - reference - "RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace"; - amm:base "//ietf/amm/IDENT/base-bstr"; + amm:base "//ietf/amm-base/ident/display-hint-bstr"; } // TIME type (TP or TD built-ins) hints - amm:ident base-time { - amm:enum 13; - description - "Intermediate base IDENT of display hints for time values. - Hints derived from this object SHALL only apply to built-in types - TP and TD."; - amm:base "//ietf/amm/IDENT/display-hint"; - } amm:ident display-time-text { amm:enum 14; description - "Display TP and TD values as text in accordance with RFC 3339."; + "Display TP and TD values as text in accordance with + RFC 3339 not using separator characters."; reference "draft-ietf-dtn-ari"; - amm:base "//ietf/amm/IDENT/base-time"; + amm:base "//ietf/amm-base/ident/display-hint-time"; } amm:ident display-time-dec { amm:enum 15; description - "Display TP and TD values as decimal fraction."; + "Display TP and TD values as decimal fraction with units of + seconds, which may or may not include a fractional part."; reference "draft-ietf-dtn-ari"; - amm:base "//ietf/amm/IDENT/base-time"; + amm:base "//ietf/amm-base/ident/display-hint-time"; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-amm-base@2025-07-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-amm-base@2025-07-03.yang new file mode 100644 index 000000000..593d6a907 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-amm-base@2025-07-03.yang @@ -0,0 +1,431 @@ +module ietf-amm-base { + yang-version 1.1; + namespace "ari://ietf/amm-base/"; + prefix amm-type; + + import ietf-amm { + prefix amm; + } + + organization + "Internet Engineering Task Force (IETF)" { + amm:enum 1; + } + contact + "WG Web: + WG List: + + Editor: Brian Sipos + "; + description + "This module defines base IDENT objects and base TYPEDEF + objects for the AMM. + + 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 XXXX + (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself + for full legal notices."; + reference + "draft-ietf-dtn-adm-yang"; + + revision 2025-07-03 { + description + "Updated for latest ADM document."; + reference + "draft-ietf-dtn-adm-yang"; + } + amm:enum 25; + + // abstract display hint hierarchy + amm:ident display-hint { + amm:enum 0; + description + "The base IDENT for objects usable as arguments for the + 'amm:display-hint' extension. + This object itself provides no display hint purpose."; + amm:abstract true; + } + amm:ident display-hint-integer { + amm:enum 1; + description + "Intermediate base IDENT of display hints for integer values. + Hints derived from this object SHALL only apply to built-in + types BYTE, INT, UINT, VAST, and UVAST."; + amm:abstract true; + amm:base "./IDENT/display-hint"; + } + amm:ident display-hint-float { + amm:enum 2; + description + "Intermediate base IDENT of display hints for floating point + values. + Hints derived from this object SHALL only apply to built-in + types REAL32 and REAL64."; + amm:abstract true; + amm:base "./IDENT/display-hint"; + } + amm:ident display-hint-bstr { + amm:enum 3; + description + "Intermediate base IDENT of display hints for byte string + values. + Hints derived from this object SHALL only apply to built-in + type BYTESTR."; + amm:abstract true; + amm:base "./IDENT/display-hint"; + } + amm:ident display-hint-time { + amm:enum 4; + description + "Intermediate base IDENT of display hints for time values. + Hints derived from this object SHALL only apply to built-in + types TP and TD."; + amm:abstract true; + amm:base "./IDENT/display-hint"; + } + + // Named type unions + amm:typedef type-ref { + amm:enum 0; + description + "Reference to either a built-in type or a TYPEDEF object."; + amm:union { + amm:type "/ARITYPE/aritype"; + amm:type "/ARITYPE/typedef"; + } + } + amm:typedef integer { + amm:enum 1; + description + "Any type which represents a discrete integer + This union order prefers smaller range and signed types."; + amm:union { + amm:type "/ARITYPE/byte"; + amm:type "/ARITYPE/int"; + amm:type "/ARITYPE/uint"; + amm:type "/ARITYPE/vast"; + amm:type "/ARITYPE/uvast"; + } + } + amm:typedef float { + amm:enum 2; + description + "Any type which represents a floating point number."; + amm:union { + amm:type "/ARITYPE/real32"; + amm:type "/ARITYPE/real64"; + } + } + amm:typedef numeric { + amm:enum 3; + description + "Any type which can be used with numeric expressions."; + amm:union { + amm:type "./TYPEDEF/integer"; + amm:type "./TYPEDEF/float"; + } + } + amm:typedef primitive { + amm:enum 4; + description + "Any primitive type."; + amm:union { + amm:type "/ARITYPE/null"; + amm:type "/ARITYPE/bool"; + amm:type "./TYPEDEF/numeric"; + amm:type "/ARITYPE/textstr"; + amm:type "/ARITYPE/bytestr"; + } + } + amm:typedef time { + amm:enum 5; + description + "Any type which can be used with time expressions."; + amm:union { + amm:type "/ARITYPE/TP"; + amm:type "/ARITYPE/TD"; + } + } + amm:typedef simple { + amm:enum 6; + description + "Any type which contains a single literal value (not nested)."; + amm:union { + amm:type "./TYPEDEF/PRIMITIVE"; + amm:type "./TYPEDEF/TIME"; + } + } + amm:typedef nested { + amm:enum 7; + description + "A literal type which contains other ARI values."; + amm:union { + amm:type "/ARITYPE/AC"; + amm:type "/ARITYPE/AM"; + amm:type "/ARITYPE/TBL"; + } + } + amm:typedef any { + amm:enum 8; + description + "Any value representable by an ARI."; + // These type names are built-in + amm:union { + amm:type "/ARITYPE/literal"; + amm:type "/ARITYPE/object"; + } + } + amm:typedef value-obj { + amm:enum 9; + description + "A reference to an object which can produce a value."; + amm:union { + amm:type "/ARITYPE/const"; + amm:type "/ARITYPE/edd"; + amm:type "/ARITYPE/var"; + } + } + amm:typedef nonce { + amm:enum 10; + description + "This type union is used to correlate Agent-Manager messages. + The union is defined in Section 4.2.5 of draft-ietf-dtn-amm."; + reference + "draft-ietf-dtn-amm"; + amm:union { + amm:type "/ARITYPE/bytestr"; + amm:type "/ARITYPE/uvast"; + amm:type "/ARITYPE/null"; + } + } + amm:typedef id-text { + amm:enum 25; + description + "This type is used to define and match object text names. + The type is defined in Section 4.2.5 of draft-ietf-dtn-amm."; + reference + "draft-ietf-dtn-amm"; + amm:type "/ARITYPE/textstr" { + pattern '[A-Za-z_][0-9A-Za-z_\-\.]*'; + } + } + amm:typedef id-int { + amm:enum 26; + description + "This type is used to define and match object integer + enumerations. + The type is defined in Section 4.2.5 of draft-ietf-dtn-amm."; + reference + "draft-ietf-dtn-amm"; + amm:type "/ARITYPE/int"; + } + + // operational semantic types + amm:typedef counter32 { + amm:enum 11; + description + "A 32-bit counter with an arbitrary initial value which can + only increment and never decrement. + When the value reaches the upper limit of the type it wraps + around to zero. + At least two samples of this value need to be compared over + time to be meaningful. + This type is consistent with the SMIv2 and YANG data types + of the same name."; + reference + "RFC 2578: Structure of Management Information Version 2 + RFC 6021: Common YANG Data Types"; + amm:type "/ARITYPE/uint"; + } + amm:typedef counter64 { + amm:enum 12; + description + "A 64-bit counter with an arbitrary initial value which can + only increment and never decrement. + When the value reaches the upper limit of the type it wraps + around to zero. + At least two samples of this value need to be compared over + time to be meaningful. + This type is consistent with the SMIv2 and YANG data types + of the same name."; + reference + "RFC 2578: Structure of Management Information Version 2 + RFC 6021: Common YANG Data Types"; + amm:type "/ARITYPE/uvast"; + } + amm:typedef gauge32 { + amm:enum 13; + description + "A 32-bit value sampling some quantized measurement. + The value can increase or decrease arbitrarily over time. + This type is consistent with the SMIv2 and YANG data types + of the same name."; + reference + "RFC 2578: Structure of Management Information Version 2 + RFC 6021: Common YANG Data Types"; + amm:type "/ARITYPE/int"; + } + amm:typedef gauge64 { + amm:enum 14; + description + "A 64-bit value sampling some quantized measurement. + The value can increase or decrease arbitrarily over time. + This type is consistent with the SMIv2 and YANG data types + of the same name."; + reference + "RFC 2578: Structure of Management Information Version 2 + RFC 6021: Common YANG Data Types"; + amm:type "/ARITYPE/vast"; + } + amm:typedef timestamp { + amm:enum 15; + description + "A time point representing the system clock at which a specific + occurrence happened. + The specific occurrence must be defined in the description + of any node defined using this type. + This type is consistent with the SMIv2 and YANG data types + of the same name."; + reference + "RFC 2579: Textual Conventions for SMIv2 + RFC 6021: Common YANG Data Types"; + amm:type "/ARITYPE/tp"; + } + + // Restrictions on AC item types for Evaluation and EXPR + amm:typedef eval-tgt { + amm:enum 16; + description + "A value which can be the target of an evaluation."; + amm:union { + // special case of literal value result + amm:type "./TYPEDEF/simple"; + // produces an eval-tgt + amm:type "./TYPEDEF/value-obj"; + amm:type "./TYPEDEF/expr"; + } + } + amm:typedef expr-item { + amm:enum 17; + description + "Each item of an EXPR list."; + amm:union { + amm:type "./TYPEDEF/simple"; + // produces an eval-tgt + amm:type "./TYPEDEF/value-obj"; + // treated as unary operator + amm:type "./TYPEDEF/type-ref"; + // substitutable label of an external context value + amm:type "/ARITYPE/label"; + amm:type "/ARITYPE/oper"; + } + } + amm:typedef expr { + amm:enum 18; + description + "The contents of an EXPR container."; + amm:ulist { + amm:type "./TYPEDEF/expr-item"; + } + } + + // Restrictions on AC item types for Execution and MAC + amm:typedef exec-tgt { + amm:enum 19; + description + "A value which can be the target of an execution."; + amm:union { + amm:type "./TYPEDEF/exec-item"; + amm:type "./TYPEDEF/mac"; + } + } + amm:typedef exec-item { + amm:enum 20; + description + "A reference to an object which can be executed. + The value-object must be typed to contain an exec-tgt."; + amm:union { + amm:type "/ARITYPE/ctrl"; + amm:type "./TYPEDEF/value-obj"; // produces an exec-tgt + } + } + amm:typedef mac { + amm:enum 21; + description + "The contents of a MAC container are an ordered list of + executable values."; + amm:ulist { + amm:type "./TYPEDEF/exec-item"; + } + } + + // Restrictions on AC item types for Reporting and RPTT + amm:typedef rpt-tgt { + amm:enum 22; + description + "A value which can be the target of reporting."; + amm:union { + amm:type "./TYPEDEF/value-obj"; // produces an RPTT + amm:type "./TYPEDEF/rptt"; + } + } + amm:typedef rptt-item { + amm:enum 23; + description + "Each item of a RPTT. + Each item references a value-producing object or contains an + expression to be evaluated."; + amm:union { + // produces the report item + amm:type "./TYPEDEF/value-obj"; + // evaluates to the report item + amm:type "./TYPEDEF/expr"; + } + } + amm:typedef rptt { + amm:enum 24; + description + "The contents of a report template, encoded as the sequence + of template items."; + amm:ulist { + amm:type "./TYPEDEF/rptt-item"; + } + } + + // Representation of ARI patterns as values + amm:ident bstr-ari-pattern { + amm:enum 5; + description + "Represent a binary form of ARI Pattern as human-friendly + text form, converting identifiers if possible based on ADM + and ODM contents."; + reference + "draft-ietf-dtn-adm-yang"; + amm:base "./ident/display-hint-bstr"; + } + amm:typedef ari-pattern { + amm:enum 27; + description + "The value type for an ARI pattern in binary form."; + reference + "draft-ietf-dtn-adm-yang"; + amm:type "/aritype/cbor" { + amm:display-hint "./ident/bstr-ari-pattern"; + } + } +} 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 new file mode 100644 index 000000000..c64eb2765 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-amm-semtype@2025-07-03.yang @@ -0,0 +1,263 @@ +module ietf-amm-semtype { + yang-version 1.1; + namespace "ari://ietf/amm-semtype/"; + prefix amm-semtype; + + import ietf-amm { + prefix amm; + } + + organization + "Internet Engineering Task Force (IETF)" { + amm:enum 1; + } + contact + "WG Web: + WG List: + + Editor: Brian Sipos + "; + description + "This module defines base and derived IDENT objects which + allow introspection of AMM semantic 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 XXXX + (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself + for full legal notices."; + reference + "draft-ietf-dtn-adm-yang"; + + revision 2025-07-03 { + description + "Updated for latest ADM document."; + reference + "draft-ietf-dtn-adm-yang"; + } + amm:enum 24; + + // Base IDENT objects + amm:ident semtype { + amm:enum 1; + description + "The base IDENT for semantic type introspection. + This object itself provides no type information."; + } + + // Semantic-type leaf IDENT objects + amm:ident type-use { + amm:enum 2; + description + "A named type use with possibe annotations and/or + constraints."; + amm:base "./IDENT/semtype"; + amm:parameter name { + description + "A built-in ARITYPE or reference to TYPEDEF object being + used."; + amm:type "//ietf/amm-base/TYPEDEF/type-ref"; + } + // FIXME include constraints and annotations also? + } + amm:ident ulist { + amm:enum 3; + description + "A uniformly-typed list within an AC."; + amm:base "./IDENT/semtype"; + amm:parameter item-type { + description + "The semantic type for all items."; + amm:type "./TYPEDEF/semtype"; + } + amm:parameter min-elements { + description + "The smallest valid item count for the AC."; + amm:default "null"; + amm:union { + amm:type "/ARITYPE/uvast"; + amm:type "/ARITYPE/null"; + } + } + amm:parameter max-elements { + description + "The largest valid item count for the AC."; + amm:default "null"; + amm:union { + amm:type "/ARITYPE/uvast"; + amm:type "/ARITYPE/null"; + } + } + } + amm:ident dlist { + amm:enum 4; + description + "A diverse-typed list within an AC."; + amm:base "./IDENT/semtype"; + amm:parameter item-types { + description + "The list of semantic type for each item in sequence within + the list. + The list itself is encoded as an AC in this parameter."; + amm:ulist { + amm:type "./TYPEDEF/semtype"; + } + } + } + amm:ident umap { + amm:enum 5; + description + "A uniformly-typed map within an AM."; + amm:base "./IDENT/semtype"; + amm:parameter key-type { + description + "The semantic type for each key."; + amm:type "./TYPEDEF/semtype"; + } + amm:parameter value-type { + description + "The semantic type for each value."; + amm:type "./TYPEDEF/semtype"; + } + } + amm:ident tblt { + amm:enum 6; + description + "A parameterized table template for data within a TBL."; + 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"; + } + } + amm:parameter min-elements { + description + "The smallest valid row count for the TBL."; + amm:default "null"; + amm:union { + amm:type "/ARITYPE/uvast"; + amm:type "/ARITYPE/null"; + } + } + amm:parameter max-elements { + description + "The largest valid row count for the TBL."; + amm:default "null"; + amm:union { + amm:type "/ARITYPE/uvast"; + amm:type "/ARITYPE/null"; + } + } + amm:parameter key { + description + "The primary key column names tuples in this table, + space-separated labels."; + amm:default "null"; + amm:union { + amm:type "/ARITYPE/textstr"; + amm:type "/ARITYPE/null"; + } + } + amm:parameter unique { + description + "The set of unique column name tuples in this table, as + space-separated labels. + The set itself is encoded as an AC in this parameter."; + amm:default "/AC/()"; + amm:ulist { + amm:type "/ARITYPE/textstr"; + } + } + } + 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 + "A list of alternative type choices."; + amm:base "./IDENT/semtype"; + amm:parameter choices { + description + "The semantic type for each choice. + The list itself is encoded as an AC in this parameter."; + amm:ulist { + amm:type "./TYPEDEF/semtype"; + } + } + } + amm:ident seq { + amm:enum 9; + description + "A sequence of similarly-typed items as a sub-sequence of an + AC value. + This is only usable in specific contexts, such as within a + ./IDENT/dlist parameter."; + amm:base "./IDENT/semtype"; + amm:parameter item-type { + description + "The semantic type for all items in the sequence."; + amm:type "./TYPEDEF/semtype"; + } + amm:parameter min-elements { + description + "The smallest valid item count for the sequence."; + amm:default "null"; + amm:union { + amm:type "/ARITYPE/uvast"; + amm:type "/ARITYPE/null"; + } + } + amm:parameter max-elements { + description + "The largest valid item count for the sequence."; + amm:default "null"; + amm:union { + amm:type "/ARITYPE/uvast"; + amm:type "/ARITYPE/null"; + } + } + } + + // Named types + amm:typedef semtype { + amm:enum 25; + description + "A parameterized reference to a semantic type object. + This is used for introspection of AMM objects."; + amm:type "/ARITYPE/ident" { + amm:base "./IDENT/semtype"; + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-amm@2025-01-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-amm@2025-01-31.yang deleted file mode 100644 index e86368953..000000000 --- a/experimental/ietf-extracted-YANG-modules/ietf-amm@2025-01-31.yang +++ /dev/null @@ -1,714 +0,0 @@ -module ietf-amm { - yang-version 1.1; - namespace "ari://ietf/amm/"; - prefix amm; - - organization - "IETF Delay Tolerant Networking (DTN) Working Group" { - amm:enum 1; - } - contact - "WG Web: - WG List: - - Editor: Brian Sipos - "; - description - "This module defines the DTN Management Architecture (DTNMA) - Application Management Model (AMM) extensions within YANG. - It also defines the base IDENT and TYPEDEF objects for the AMM. - - 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."; - reference - "draft-ietf-dtn-adm-yang"; - - revision 2025-01-31 { - description - "Updated for latest ADM document."; - reference - "draft-ietf-dtn-adm-yang"; - } - - /* - * This section contains extensions for common behavior of AMM objects. - */ - - extension enum { - argument value; - description - "An enumeration identifies an object within a namespace. - The argument to this statement is the integer value."; - } - - extension parameter { - argument name; - description - "The schema for a formal parameter of an object. - Order of parameters is significant within this statement."; - } - - extension default { - argument value; - description - "The literal value default for a parameter or result. - The argument is the text form of the ARI"; - } - - extension init-value { - argument value; - description - "The literal value of a CONST object, - initial state for a VAR object. - The argument is the text form of the ARI"; - } - - extension init-expr { - argument expr; - description - "An expression evaluated to initialize a VAR object. - The argument is the text form of the EXPR AC"; - } - - /* - * This section contains extensions for AMM object definitions. - */ - - extension typedef { - argument name; - description - "Definition of a TYPEDEF within an ADM. - The argument to this statement is the object name. - One of the type use substatements must be present."; - } - - extension ident { - argument name; - description - "Definition of an IDENT within an ADM. - The argument to this statement is the object name. - An 'base' substatement must be present."; - } - - extension base { - argument name; - description - "The argument is the base of an IDENT object."; - } - - extension const { - argument name; - description - "Definition of a CONST within an ADM. - The argument to this statement is the object name. - An 'init-value' substatement must be present."; - } - - extension ctrl { - argument name; - description - "Definition of a CTRL within an ADM. - The argument to this statement is the object name."; - } - - extension result { - argument name; - description - "A result value reported as a response to a control. - The substatement is the result type. - Each CTRL can have a single optional result."; - } - - extension edd { - argument name; - description - "Definition of an EDD within an ADM. - The argument to this statement is the object name."; - } - - extension oper { - argument name; - description - "Definition of an OPER within an ADM. - The argument to this statement is the object name."; - } - - extension operand { - argument name; - description - "An individual operand taken from the expression stack - during evaluation of the OPER. - Each substatement is an operand as a leaf (ARI). - Order of operands is significant within an object definition."; - } - - extension var { - argument name; - description - "Definition of a VAR within an ADM. - The argument to this statement is the object name."; - } - - /* - * This section contains extensions for defining semantic type instances. - */ - - extension type { - argument name; - description - "A reference to a built-in type or prefix-qualified typedef."; - } - - extension display-hint { - argument ident; - description - "Reference an IDENT object which indicates how a value should be - displayed for human consumption. - The base of the IDENT SHALL be the ./IDENT/display-hint object."; - } - - extension int-labels { - description - "Type narrowing for an integer to label enum values or bit positions."; - } - - extension cddl { - argument text; - description - "Type narrowing for a CBOR item in the form of CDDL syntax. - The argument to this statement is the actual CDDL text."; - } - - extension ulist { - description - "Type for an AC containing a list of uniform-typed values."; - } - - extension dlist { - description - "Type for an AC containing a list of diverse-typed sequences."; - } - - extension seq { - description - "A sequence of uniform-typed values within a 'dlist'."; - } - - extension umap { - description - "Type for an AM containing a set of uniform-typed key-value pairs."; - } - - extension keys { - description - "The type restriction for 'umap' keys."; - } - - extension values { - description - "The type restriction for 'umap' values."; - } - - extension tblt { - description - "Type for a table of values with a column schema."; - } - - extension column { - argument name; - description - "An individual column within a 'tblt' definition."; - } - - extension key { - argument columns; - description - "Names of columns composing the row key, separated by spaces, - within a 'tblt' definition."; - } - - extension unique { - argument columns; - description - "Names of columns composing a uniqueness constraint, separated by - spaces, within a 'tblt' definition."; - } - - extension union { - description - "Type for a union of other types."; - } - - amm:enum 0; - - // Base IDENT objects - amm:ident display-hint { - amm:enum 0; - description - "The base IDENT for objects usable as arguments for the - 'amm:display-hint' extension. - This object itself provides no display hint purpose."; - } - amm:ident semtype { - amm:enum 1; - description - "The base IDENT for semantic type introspection. - This object itself provides no type information."; - } - - // Semantic-type leaf IDENT objects - amm:ident semtype-use { - amm:enum 2; - description - "A named type use and possibly augment."; - amm:base "./IDENT/semtype"; - amm:parameter name { - description - "A built-in ARITYPE or reference to TYPEDEF object being used."; - amm:type "./TYPEDEF/type-ref"; - } - // FIXME include constraints and annotations also? - } - amm:ident semtype-ulist { - amm:enum 3; - description - "A uniformly-typed list within an AC."; - amm:base "./IDENT/semtype"; - amm:parameter item-type { - description - "The semantic type for all items."; - amm:type "./TYPEDEF/semtype"; - } - amm:parameter min-elements { - description - "The smallest valid item count for the AC."; - amm:default "null"; - amm:union { - amm:type "/ARITYPE/uvast"; - amm:type "/ARITYPE/null"; - } - } - amm:parameter max-elements { - description - "The largest valid item count for the AC."; - amm:default "null"; - amm:union { - amm:type "/ARITYPE/uvast"; - amm:type "/ARITYPE/null"; - } - } - } - amm:ident semtype-dlist { - amm:enum 4; - description - "A diverse-typed list within an AC."; - amm:base "./IDENT/semtype"; - amm:parameter item-types { - description - "The list of semantic type for each item in sequence within the list. - The list itself is encoded as an AC in this parameter."; - amm:ulist { - amm:type "./TYPEDEF/semtype"; - } - } - } - amm:ident semtype-umap { - amm:enum 5; - description - "A uniformly-typed map within an AM."; - amm:base "./IDENT/semtype"; - amm:parameter key-type { - description - "The semantic type for each key."; - amm:type "./TYPEDEF/semtype"; - } - amm:parameter value-type { - description - "The semantic type for each value."; - amm:type "./TYPEDEF/semtype"; - } - } - amm:ident semtype-tblt { - amm:enum 6; - description - "A parameterized table template for data within a TBL."; - 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/semtype-tblt-col"; - } - } - amm:parameter min-elements { - description - "The smallest valid row count for the TBL."; - amm:default "null"; - amm:union { - amm:type "/ARITYPE/uvast"; - amm:type "/ARITYPE/null"; - } - } - amm:parameter max-elements { - description - "The largest valid row count for the TBL."; - amm:default "null"; - amm:union { - amm:type "/ARITYPE/uvast"; - amm:type "/ARITYPE/null"; - } - } - amm:parameter key { - description - "The primary key column names in this table, as comma-separated labels."; - amm:default "null"; - amm:union { - amm:type "/ARITYPE/textstr"; - amm:type "/ARITYPE/null"; - } - } - amm:parameter unique { - description - "The set of unique column names in this table, as comma-separated labels. - The set itself is encoded as an AC in this parameter."; - amm:default "/AC/()"; - amm:ulist { - amm:type "/ARITYPE/textstr"; - } - } - } - amm:ident semtype-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 semtype-union { - amm:enum 8; - description - "A list of alternative type choices."; - amm:base "./IDENT/semtype"; - amm:parameter choices { - description - "The semantic type for each choice. - The list itself is encoded as an AC in this parameter."; - amm:ulist { - amm:type "./TYPEDEF/semtype"; - } - } - } - amm:ident semtype-seq { - amm:enum 9; - description - "A sequence of similarly-typed items as a sub-sequence of an AC. - This is only usable in specific contexts, such as within a - ./IDENT/semtype-dlist parameter."; - amm:base "./IDENT/semtype"; - amm:parameter item-type { - description - "The semantic type for all items in the sequence."; - amm:type "./TYPEDEF/semtype"; - } - amm:parameter min-elements { - description - "The smallest valid item count for the sequence."; - amm:default "null"; - amm:union { - amm:type "/ARITYPE/uvast"; - amm:type "/ARITYPE/null"; - } - } - amm:parameter max-elements { - description - "The largest valid item count for the sequence."; - amm:default "null"; - amm:union { - amm:type "/ARITYPE/uvast"; - amm:type "/ARITYPE/null"; - } - } - } - - // Named type unions - amm:typedef type-ref { - amm:enum 0; - description - "Reference to either a built-in type or a TYPEDEF object."; - amm:union { - amm:type "/ARITYPE/aritype"; - amm:type "/ARITYPE/typedef"; - } - } - amm:typedef semtype { - amm:enum 25; - description - "A parameterized reference to a semantic type object. - This is used for introspection of AMM objects."; - amm:type "/ARITYPE/ident" { - amm:base "./IDENT/semtype"; - } - } - amm:typedef integer { - amm:enum 1; - description - "Any type which represents a discrete integer - This union order prefers smaller range and signed types."; - amm:union { - amm:type "/ARITYPE/byte"; - amm:type "/ARITYPE/int"; - amm:type "/ARITYPE/uint"; - amm:type "/ARITYPE/vast"; - amm:type "/ARITYPE/uvast"; - } - } - amm:typedef float { - amm:enum 2; - description - "Any type which represents a floating point number."; - amm:union { - amm:type "/ARITYPE/real32"; - amm:type "/ARITYPE/real64"; - } - } - amm:typedef numeric { - amm:enum 3; - description - "Any type which can be used with numeric expressions."; - amm:union { - amm:type "./TYPEDEF/integer"; - amm:type "./TYPEDEF/float"; - } - } - amm:typedef primitive { - amm:enum 4; - description - "Any primitive type."; - amm:union { - amm:type "/ARITYPE/null"; - amm:type "/ARITYPE/bool"; - amm:type "./TYPEDEF/numeric"; - amm:type "/ARITYPE/textstr"; - amm:type "/ARITYPE/bytestr"; - } - } - amm:typedef time { - amm:enum 5; - description - "Any type which can be used with time expressions."; - amm:union { - amm:type "/ARITYPE/TP"; - amm:type "/ARITYPE/TD"; - } - } - amm:typedef simple { - amm:enum 6; - description - "Any type which contains a single literal value (not nested)."; - amm:union { - amm:type "./TYPEDEF/PRIMITIVE"; - amm:type "./TYPEDEF/TIME"; - } - } - amm:typedef nested { - amm:enum 7; - description - "A literal type which contains other ARI values."; - amm:union { - amm:type "/ARITYPE/AC"; - amm:type "/ARITYPE/AM"; - amm:type "/ARITYPE/TBL"; - } - } - amm:typedef any { - amm:enum 8; - description - "Any value representable by an ARI."; - // These type names are built-in - amm:union { - amm:type "/ARITYPE/literal"; - amm:type "/ARITYPE/object"; - } - } - amm:typedef value-obj { - amm:enum 9; - description - "A reference to an object which can produce a value."; - amm:union { - amm:type "/ARITYPE/const"; - amm:type "/ARITYPE/edd"; - amm:type "/ARITYPE/var"; - } - } - amm:typedef nonce { - amm:enum 10; - description - "This type union is used to correlate Agent-Manager messages."; - amm:union { - amm:type "/ARITYPE/bytestr"; - amm:type "/ARITYPE/uvast"; - amm:type "/ARITYPE/null"; - } - } - - // operational semantic types - amm:typedef counter32 { - amm:enum 11; - description - "A 32-bit counter with an arbitrary initial value that only increments. - When the value reaches the upper range it wraps around to zero. - At least two samples of this value need to be compared over time."; - amm:type "/ARITYPE/uint"; - } - amm:typedef counter64 { - amm:enum 12; - description - "A 64-bit counter with an arbitrary initial value that only increments. - When the value reaches the upper range it wraps around to zero. - At least two samples of this value need to be compared over time."; - amm:type "/ARITYPE/uvast"; - } - amm:typedef gauge32 { - amm:enum 13; - description - "A 32-bit value sampling some quantized measurement. - The value can increase or decrease arbitrarily over time."; - amm:type "/ARITYPE/int"; - } - amm:typedef gauge64 { - amm:enum 14; - description - "A 64-bit value sampling some quantized measurement. - The value can increase or decrease arbitrarily over time."; - amm:type "/ARITYPE/vast"; - } - amm:typedef timestamp { - amm:enum 15; - description - "A time point representing the system clock at which a specific - occurrence happened. - The specific occurrence must be defined in the description - of any node defined using this type."; - amm:type "/ARITYPE/tp"; - } - - // Restrictions on AC item types for Evaluation and EXPR - amm:typedef eval-tgt { - amm:enum 16; - description - "A value which can be the target of an evaluation."; - amm:union { - amm:type "./TYPEDEF/simple"; // special case of literal value result - amm:type "./TYPEDEF/value-obj"; // produces an eval-tgt - amm:type "./TYPEDEF/expr"; - } - } - amm:typedef expr-item { - amm:enum 17; - description - "Each item of an EXPR list."; - amm:union { - amm:type "./TYPEDEF/simple"; - amm:type "./TYPEDEF/value-obj"; // produces an eval-tgt - amm:type "./TYPEDEF/type-ref"; // treated as unary operator - amm:type "/ARITYPE/label"; // substitutable label - amm:type "/ARITYPE/oper"; - } - } - amm:typedef expr { - amm:enum 18; - description - "The contents of an EXPR container."; - amm:ulist { - amm:type "./TYPEDEF/expr-item"; - } - } - - // Restrictions on AC item types for Execution and MAC - amm:typedef exec-tgt { - amm:enum 19; - description - "A value which can be the target of an execution."; - amm:union { - amm:type "./TYPEDEF/exec-item"; - amm:type "./TYPEDEF/mac"; - } - } - amm:typedef exec-item { - amm:enum 20; - description - "A reference to an object which can be executed. - The value-object must be typed to contain an exec-tgt."; - amm:union { - amm:type "/ARITYPE/ctrl"; - amm:type "./TYPEDEF/value-obj"; // produces an exec-tgt - } - } - amm:typedef mac { - amm:enum 21; - description - "The contents of a MAC container are an ordered list of - executable values."; - amm:ulist { - amm:type "./TYPEDEF/exec-item"; - } - } - - // Restrictions on AC item types for Reporting and RPTT - amm:typedef rpt-tgt { - amm:enum 22; - description - "A value which can be the target of reporting."; - amm:union { - amm:type "./TYPEDEF/value-obj"; // produces an RPTT - amm:type "./TYPEDEF/rptt"; - } - } - amm:typedef rptt-item { - amm:enum 23; - description - "Each item of a RPTT. - Each item references a value-producing object or contains an - expression to be evaluated."; - amm:union { - amm:type "./TYPEDEF/value-obj"; - amm:type "./TYPEDEF/expr"; - } - } - amm:typedef rptt { - amm:enum 24; - description - "The contents of a report template, encoded as the sequence of items."; - amm:ulist { - amm:type "./TYPEDEF/rptt-item"; - } - } -} 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 new file mode 100644 index 000000000..9d19eafc4 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-amm@2025-07-03.yang @@ -0,0 +1,337 @@ +module ietf-amm { + yang-version 1.1; + namespace "ari://ietf/amm/"; + prefix amm; + + organization + "Internet Engineering Task Force (IETF)" { + amm:enum 1; + } + contact + "WG Web: + WG List: + + Editor: Brian Sipos + "; + description + "This module defines the DTN Management Architecture (DTNMA) + Application Management Model (AMM) extensions within YANG. + It also defines the base IDENT and TYPEDEF objects for the AMM. + + 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 XXXX + (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself + for full legal notices."; + reference + "draft-ietf-dtn-adm-yang"; + + revision 2025-07-03 { + description + "Updated for latest ADM document."; + reference + "draft-ietf-dtn-adm-yang"; + } + + /* + * This section contains extensions for common behavior of AMM + * objects. + */ + + extension enum { + argument value; + description + "An enumeration identifies an object within a namespace. + The argument to this statement is the integer value."; + } + + extension parameter { + argument name; + description + "The schema for a formal parameter of an object. + Order of parameters is significant within this statement."; + } + + extension default { + argument value; + description + "The literal value default for a parameter or result. + The argument is the text form of the ARI"; + } + + extension init-value { + argument value; + description + "The literal value of a CONST object, + initial state for a VAR object. + The argument is the text form of the ARI"; + } + + extension init-expr { + argument expr; + description + "An expression evaluated to initialize a VAR object. + The argument is the text form of the EXPR AC"; + } + + /* + * This section contains extensions for AMM object definitions. + */ + + extension typedef { + argument name; + description + "Definition of a TYPEDEF within an ADM. + The argument to this statement is the object name. + One of the type use substatements must be present."; + } + + extension ident { + argument name; + description + "Definition of an IDENT within an ADM. + The argument to this statement is the object name. + An 'base' substatement must be present."; + } + + extension abstract { + argument is-abstract; + description + "The boolean abstract marking of an IDENT object."; + } + + extension base { + argument name; + description + "The argument is the base of an IDENT object."; + } + + extension const { + argument name; + description + "Definition of a CONST within an ADM. + The argument to this statement is the object name. + An 'init-value' substatement must be present."; + } + + extension ctrl { + argument name; + description + "Definition of a CTRL within an ADM. + The argument to this statement is the object name."; + } + + extension result { + argument name; + description + "A result value reported as a response to a control. + The substatement is the result type. + Each CTRL can have a single optional result."; + } + + extension edd { + argument name; + description + "Definition of an EDD within an ADM. + The argument to this statement is the object name."; + } + + extension oper { + argument name; + description + "Definition of an OPER within an ADM. + The argument to this statement is the object name."; + } + + extension operand { + argument name; + description + "An individual operand taken from the expression stack + during evaluation of the OPER. + Each substatement is an operand as a leaf (ARI). + The order of operands is significant within an object + definition."; + } + + extension var { + argument name; + description + "Definition of a VAR within an ADM. + The argument to this statement is the object name."; + } + + extension sbr { + argument name; + description + "Definition of a SBR within an ADM. + The argument to this statement is the object name."; + } + + extension action { + argument exec-tgt; + description + "Definition of the action executed by a rule object. + The argument to this statement is the exec-tgt to execute."; + } + + extension condition { + argument expr; + description + "Condition evaluated by an SBR object to determine whether to + execute its action. + The argument to this statement is the expr to evaluate."; + } + + extension min-interval { + argument relative-time; + description + "The argument to this statement is a time-based ARI specifying + the minimum amount of time between condition evaluations + for an SBR object."; + } + + extension max-count { + argument count; + description + "The argument to this statement is the integer maximum + execution count for a rule object."; + } + + extension init-enabled { + argument state; + description + "The argument to this statement is the boolean initial enabled + state for a rule object."; + } + + extension tbr { + argument name; + description + "Definition of a TBR within an ADM. + The argument to this statement is the object name."; + } + + extension start { + argument time; + description + "The argument to this statement is the start time ARI for a + TBR object."; + } + + extension period { + argument relative-time; + description + "The argument to this statement is an ARI defining the period + for a TBR object."; + } + + /* + * This section contains extensions for defining semantic type + * instances. + */ + + extension type { + argument name; + description + "A reference to a built-in type or prefix-qualified typedef."; + } + + extension display-hint { + argument ident; + description + "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."; + } + + extension int-labels { + description + "Type narrowing for an integer to label enum values or bit + positions."; + } + + extension cddl { + argument text; + description + "Type narrowing for a CBOR item in the form of CDDL syntax. + The argument to this statement is the actual CDDL text."; + } + + extension ulist { + description + "Type for an AC containing a list of uniform-typed values."; + } + + extension dlist { + description + "Type for an AC containing a list of diverse-typed sequences."; + } + + extension seq { + description + "A sequence of uniform-typed values within a 'dlist'."; + } + + extension umap { + description + "Type for an AM containing a set of uniform-typed key-value + pairs."; + } + + extension keys { + description + "The type restriction for 'umap' keys."; + } + + extension values { + description + "The type restriction for 'umap' values."; + } + + extension tblt { + description + "Type for a table of values with a column schema."; + } + + extension column { + argument name; + description + "An individual column within a 'tblt' definition."; + } + + extension key { + argument columns; + description + "Names of columns composing the row key, separated by spaces, + within a 'tblt' definition."; + } + + extension unique { + argument columns; + description + "Names of columns composing a uniqueness constraint, separated + by spaces, within a 'tblt' definition."; + } + + extension union { + description + "Semantic type for a union of other types in substatements."; + } + + amm:enum 0; +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-03.yang new file mode 100644 index 000000000..236043e81 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-03.yang @@ -0,0 +1,76 @@ +module ietf-bfd-met-keyed-isaac { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-bfd-met-keyed-isaac"; + prefix "bfdmia"; + + import ietf-key-chain { + prefix key-chain; + reference + "RFC 8177: YANG Data Model for Key Chains."; + } + + organization + "IETF BFD Working Group"; + + contact + "WG Web: + WG List: + + Authors: Mahesh Jethanandani (mjethanandani@gmail.com) + Ashesh Mishra (ashesh@aalyria.com) + Jeffrey Haas (jhaas@juniper.net) + Alan Dekok (alan.dekok@inkbridge.io) + 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. + + 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."; + + revision "2025-07-03" { + description + "Initial Version."; + reference + "RFC XXXX: Meticulous Keyed ISAAC for BFD Authentication."; + } + + 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."; + reference + "RFC XXXX: Meticulous Keyed ISAAC for BFD Authentication."; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent-acl@2025-01-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent-acl@2025-07-03.yang similarity index 86% rename from experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent-acl@2025-01-31.yang rename to experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent-acl@2025-07-03.yang index b05285229..97db545f1 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent-acl@2025-01-31.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent-acl@2025-07-03.yang @@ -9,9 +9,12 @@ module ietf-dtnma-agent-acl { import ietf-dtnma-agent { prefix da; } + import ietf-network-base { + prefix network-base; + } organization - "IETF Delay Tolerant Networking (DTN) Working Group" { + "Internet Engineering Task Force (IETF)" { amm:enum 1; } contact @@ -24,7 +27,13 @@ module ietf-dtnma-agent-acl { "This module implements the DTN Management Architecture (DTNMA) Agent Access Control List (ACL) functionality. - Copyright (c) 2024 IETF Trust and the persons identified as + 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 @@ -40,7 +49,7 @@ module ietf-dtnma-agent-acl { reference "draft-ietf-dtn-adm-yang"; - revision 2025-01-31 { + revision 2025-07-03 { description "Updated for latest ADM document."; reference @@ -117,8 +126,8 @@ module ietf-dtnma-agent-acl { 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."; + "The default permission for any object if no specific access + are present in the ./EDD/access-list table."; amm:type "./TYPEDEF/tag"; } @@ -134,17 +143,20 @@ module ietf-dtnma-agent-acl { } amm:column group { description - "A cross-reference to the group getting access, or null to match all groups."; + "A cross-reference to the group getting access, or null to + match all groups."; amm:type "./TYPEDEF/optional-entry-id"; } amm:column object-pattern { description - "A pattern for objects being accessed, which may match all objects."; + "A pattern for objects being accessed, which may match + all objects."; amm:type "/ARITYPE/TEXTSTR"; } amm:column tag { description - "A pattern for objects being accessed, which may match all objects."; + "A pattern for objects being accessed, which may match + all objects."; amm:type "./TYPEDEF/tag"; } } @@ -152,7 +164,8 @@ module ietf-dtnma-agent-acl { amm:ctrl ensure-access { amm:enum 3; description - "Ensures that an access control permission is set for the given group and ARI pattern."; + "Ensures that an access control permission is set for the + given group and ARI pattern."; amm:parameter group { description "Identify the group being assigned the permission"; @@ -160,7 +173,8 @@ module ietf-dtnma-agent-acl { } amm:parameter object-pattern { description - "ARI pattern to determine which objects shall be assigned the permission"; + "ARI pattern to determine which objects shall be assigned + the permission"; amm:type "/ARITYPE/TEXTSTR"; } amm:parameter tag { @@ -199,17 +213,11 @@ module ietf-dtnma-agent-acl { // // Group management // - amm:typedef transport-endpoint-pattern { - amm:enum 5; - amm:type "/ARITYPE/IDENT" { - amm:base "//ietf/dtnma-agent/IDENT/transport-endpoint-pattern"; - } - } amm:edd current-group-id { amm:enum 3; description - "Get the group ID for the current execution context, which may be - the implicit Agent group ID zero."; + "Get the group ID for the current execution context, which may + be the implicit Agent group ID zero."; amm:type "./TYPEDEF/entry-id"; } amm:edd group-list { @@ -231,9 +239,10 @@ module ietf-dtnma-agent-acl { } amm:column members { description - "The list of members of the group, identified by matching transport endpoint."; + "The list of members of the group, identified by matching + transport endpoint."; amm:ulist { - amm:type "./TYPEDEF/transport-endpoint-pattern"; + amm:type "//ietf/network-base/TYPEDEF/endpoint-pattern"; } } } @@ -241,7 +250,8 @@ module ietf-dtnma-agent-acl { amm:ctrl ensure-group { amm:enum 5; description - "Ensure that after the control completes a group exists with the given information"; + "Ensure that after the control completes a group exists with + the given information"; amm:parameter id { description "Uniquely identify the group"; @@ -261,7 +271,8 @@ module ietf-dtnma-agent-acl { amm:ctrl ensure-group-members { amm:enum 7; description - "Ensure that the membership of a group has a specific set of endpoint patterns."; + "Ensure that the membership of a group has a specific set of + endpoint patterns."; amm:parameter id { description "Uniquely identify the group"; @@ -269,7 +280,7 @@ module ietf-dtnma-agent-acl { } amm:parameter members { amm:ulist { - amm:type "./TYPEDEF/transport-endpoint-pattern"; + amm:type "//ietf/network-base/TYPEDEF/endpoint-pattern"; } } amm:result error-code { diff --git a/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent@2025-01-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent@2025-07-03.yang similarity index 57% rename from experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent@2025-01-31.yang rename to experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent@2025-07-03.yang index 5a48fa2b6..6baf4ef8c 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent@2025-01-31.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent@2025-07-03.yang @@ -6,9 +6,18 @@ module ietf-dtnma-agent { import ietf-amm { prefix amm; } + import ietf-amm-semtype { + prefix amm-semtype; + } + import ietf-amm-base { + prefix amm-base; + } + import ietf-network-base { + prefix network-base; + } organization - "IETF Delay Tolerant Networking (DTN) Working Group" { + "Internet Engineering Task Force (IETF)" { amm:enum 1; } contact @@ -21,7 +30,13 @@ module ietf-dtnma-agent { "This module implements the DTN Management Architecture (DTNMA) Agent core functionality. - Copyright (c) 2024 IETF Trust and the persons identified as + 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 @@ -37,7 +52,7 @@ module ietf-dtnma-agent { reference "draft-ietf-dtn-adm-yang"; - revision 2025-01-31 { + revision 2025-07-03 { description "Updated for latest ADM document."; reference @@ -57,7 +72,36 @@ module ietf-dtnma-agent { description "If true, listings will include objects from ADMs"; amm:default "false"; - amm:type "/ARITYPE/BOOL"; + amm:type "/aritype/BOOL"; + } + } + + grouping ensure-object-id { + description + "Common parameters for providing object reference to + ensure an object exists in an ODM. + + When this grouping is used, the logic operates according + to the following in order to succeed. + The parent 'namespace' SHALL refer to an existing ODM. + Both the text 'obj-name' and integer 'obj-enum' SHALL + either both not exist, in which case the object will be + created, or both are allocated to the same object, in + which case the object will be modified as needed."; + amm:parameter namespace { + description + "The parent ODM namespace."; + amm:type "/aritype/namespace"; + } + amm:parameter obj-name { + description + "Text name for the desired object."; + amm:type "//ietf/amm-base/typedef/id-text"; + } + amm:parameter obj-enum { + description + "Integer enumeration for the desired object."; + amm:type "//ietf/amm-base/typedef/id-int"; } } @@ -67,12 +111,12 @@ module ietf-dtnma-agent { amm:operand left { description "The left-side operand."; - amm:type "//ietf/amm/TYPEDEF/ANY"; + amm:type "//ietf/amm-base/typedef/ANY"; } amm:operand right { description "The left-side operand."; - amm:type "//ietf/amm/TYPEDEF/ANY"; + amm:type "//ietf/amm-base/typedef/ANY"; } } @@ -82,7 +126,7 @@ module ietf-dtnma-agent { amm:operand val { description "The single value."; - amm:type "//ietf/amm/TYPEDEF/NUMERIC"; + amm:type "//ietf/amm-base/typedef/NUMERIC"; } } @@ -92,12 +136,12 @@ module ietf-dtnma-agent { amm:operand left { description "The left-side operand."; - amm:type "//ietf/amm/TYPEDEF/NUMERIC"; + amm:type "//ietf/amm-base/typedef/NUMERIC"; } amm:operand right { description "The left-side operand."; - amm:type "//ietf/amm/TYPEDEF/NUMERIC"; + amm:type "//ietf/amm-base/typedef/NUMERIC"; } } @@ -107,7 +151,7 @@ module ietf-dtnma-agent { amm:result result { description "The single value."; - amm:type "//ietf/amm/TYPEDEF/NUMERIC"; + amm:type "//ietf/amm-base/typedef/NUMERIC"; } } @@ -117,7 +161,7 @@ module ietf-dtnma-agent { amm:operand val { description "The single value."; - amm:type "//ietf/amm/TYPEDEF/INTEGER"; + amm:type "//ietf/amm-base/typedef/INTEGER"; } } @@ -127,12 +171,12 @@ module ietf-dtnma-agent { amm:operand left { description "The left-side operand."; - amm:type "//ietf/amm/TYPEDEF/INTEGER"; + amm:type "//ietf/amm-base/typedef/INTEGER"; } amm:operand right { description "The left-side operand."; - amm:type "//ietf/amm/TYPEDEF/INTEGER"; + amm:type "//ietf/amm-base/typedef/INTEGER"; } } @@ -142,7 +186,7 @@ module ietf-dtnma-agent { amm:result result { description "The single value."; - amm:type "//ietf/amm/TYPEDEF/INTEGER"; + amm:type "//ietf/amm-base/typedef/INTEGER"; } } @@ -152,7 +196,7 @@ module ietf-dtnma-agent { amm:operand val { description "The single value."; - amm:type "/ARITYPE/BOOL"; + amm:type "/aritype/BOOL"; } } @@ -162,12 +206,12 @@ module ietf-dtnma-agent { amm:operand left { description "The left-side operand."; - amm:type "/ARITYPE/BOOL"; + amm:type "/aritype/BOOL"; } amm:operand right { description "The left-side operand."; - amm:type "/ARITYPE/BOOL"; + amm:type "/aritype/BOOL"; } } @@ -177,7 +221,7 @@ module ietf-dtnma-agent { amm:result result { description "The single value."; - amm:type "/ARITYPE/BOOL"; + amm:type "/aritype/BOOL"; } } @@ -186,13 +230,13 @@ module ietf-dtnma-agent { amm:enum 0; description "The vendor for this Agent implementation."; - amm:type "/ARITYPE/TEXTSTR"; + amm:type "/aritype/TEXTSTR"; } amm:edd sw-version { amm:enum 1; description "The version for this Agent implementation."; - amm:type "/ARITYPE/TEXTSTR"; + amm:type "/aritype/TEXTSTR"; } amm:edd capability { amm:enum 2; @@ -203,33 +247,33 @@ module ietf-dtnma-agent { amm:column org-name { description "The organization name containing the ADM"; - amm:type "/ARITYPE/TEXTSTR"; + amm:type "/aritype/TEXTSTR"; } amm:column org-enum { description "The organization enumeration containing the ADM"; - amm:type "/ARITYPE/VAST"; + amm:type "/aritype/VAST"; } amm:column model-name { description "The model name of the ADM"; - amm:type "/ARITYPE/TEXTSTR"; + amm:type "/aritype/TEXTSTR"; } amm:column model-enum { description "The model enumeration of the ADM"; - amm:type "/ARITYPE/VAST"; + amm:type "/aritype/VAST"; } amm:column revision { description "The specific revision the agent supports."; - amm:type "/ARITYPE/TEXTSTR"; + amm:type "/aritype/TEXTSTR"; } amm:column features { description "The features of the ADM which the agent supports."; amm:ulist { - amm:type "/ARITYPE/TEXTSTR"; + amm:type "/aritype/TEXTSTR"; } } } @@ -239,54 +283,60 @@ module ietf-dtnma-agent { description "A report template to indicate the presence of an agent on a network."; - amm:init-value "/AC/(./EDD/sw-vendor,./EDD/sw-version,./EDD/capability)"; - amm:type "//ietf/amm/TYPEDEF/RPTT"; + amm:init-value "/AC/(./EDD/sw-vendor,./EDD/sw-version," + + "./EDD/capability)"; + amm:type "//ietf/amm-base/typedef/RPTT"; } // Messaging counters amm:edd num-msg-rx { amm:enum 3; - amm:type "//ietf/amm/TYPEDEF/counter64"; + amm:type "//ietf/amm-base/typedef/counter64"; } amm:edd num-msg-rx-failed { amm:enum 4; - amm:type "//ietf/amm/TYPEDEF/counter64"; + amm:type "//ietf/amm-base/typedef/counter64"; } amm:edd num-msg-tx { amm:enum 5; - amm:type "//ietf/amm/TYPEDEF/counter64"; + amm:type "//ietf/amm-base/typedef/counter64"; + } + amm:edd num-msg-tx-failed { + amm:enum 15; + amm:type "//ietf/amm-base/typedef/counter64"; } // Execution counters and states amm:edd num-exec-started { amm:enum 6; - amm:type "//ietf/amm/TYPEDEF/counter64"; + amm:type "//ietf/amm-base/typedef/counter64"; } amm:edd num-exec-succeeded { amm:enum 7; - amm:type "//ietf/amm/TYPEDEF/counter64"; + amm:type "//ietf/amm-base/typedef/counter64"; } amm:edd num-exec-failed { amm:enum 8; - amm:type "//ietf/amm/TYPEDEF/counter64"; + amm:type "//ietf/amm-base/typedef/counter64"; } amm:edd exec-running { amm:enum 9; amm:tblt { amm:key "pid"; amm:column pid { - amm:type "/ARITYPE/UVAST"; + amm:type "/aritype/UVAST"; } amm:column target { - amm:type "//ietf/amm/TYPEDEF/ANY"; + amm:type "//ietf/amm-base/typedef/ANY"; } amm:column state { - amm:type "/ARITYPE/BYTE" { + amm:type "/aritype/BYTE" { amm:int-labels { enum waiting { value 0; description - "The execution is waiting on a condition or timer to continue."; + "The execution is waiting on a condition or timer + to continue."; } enum running { value 1; @@ -308,15 +358,15 @@ module ietf-dtnma-agent { amm:parameter condition { description "The condition to evaluate."; - amm:type "//ietf/amm/TYPEDEF/eval-tgt"; + amm:type "//ietf/amm-base/typedef/eval-tgt"; } amm:parameter on-truthy { description "The object to execute when the condition is truthy."; amm:default "null"; amm:union { - amm:type "//ietf/amm/TYPEDEF/exec-tgt"; - amm:type "/ARITYPE/NULL"; + amm:type "//ietf/amm-base/typedef/exec-tgt"; + amm:type "/aritype/NULL"; } } amm:parameter on-falsy { @@ -324,73 +374,74 @@ module ietf-dtnma-agent { "An optional execution when the condition is falsey."; amm:default "null"; amm:union { - amm:type "//ietf/amm/TYPEDEF/exec-tgt"; - amm:type "/ARITYPE/NULL"; + amm:type "//ietf/amm-base/typedef/exec-tgt"; + amm:type "/aritype/NULL"; } } amm:result branch { description "Indication of which branch was executed."; - amm:type "/ARITYPE/BOOL"; + amm:type "/aritype/BOOL"; } } amm:ctrl catch { amm:enum 1; description - "Attempt to execute a target, and if there is some failure catch it - and execute an alternative target."; + "Attempt to execute a target, and if there is some failure + catch it and execute an alternative target."; amm:parameter try { description "The object to execute."; - amm:type "//ietf/amm/TYPEDEF/exec-tgt"; + amm:type "//ietf/amm-base/typedef/exec-tgt"; } amm:parameter on-failure { description "An optional execution after failure."; amm:default "null"; amm:union { - amm:type "//ietf/amm/TYPEDEF/exec-tgt"; - amm:type "/ARITYPE/NULL"; + amm:type "//ietf/amm-base/typedef/exec-tgt"; + amm:type "/aritype/NULL"; } } amm:result try-success { description "True if the try target succeeded without exception."; - amm:type "/ARITYPE/BOOL"; + amm:type "/aritype/BOOL"; } } amm:ctrl wait-for { amm:enum 2; description - "This control causes the execution to pause for a given amount of time. - This is intended to be used within a macro to separate controls - in time."; + "This control causes the execution to pause for a given + amount of time. + This is intended to be used within a macro to separate + controls in time."; amm:parameter duration { - amm:type "/ARITYPE/TD"; + amm:type "/aritype/TD"; } } amm:ctrl wait-until { amm:enum 3; description - "This control causes the execution to pause until a specific absolute - time point. - This is intended to be used within a macro to separate controls - in time or as a first macro item to delay execution after the time - of reception."; + "This control causes the execution to pause until a specific + absolute time point. + This is intended to be used within a macro to separate + controls in time or as a first macro item to delay execution + after the time of reception."; amm:parameter time { - amm:type "/ARITYPE/TP"; + amm:type "/aritype/TP"; } } amm:ctrl wait-cond { amm:enum 4; description - "This control causes the execution to pause until a condition expression - evaluates to truthy. - This is intended to be used within a macro to separate controls - in time or as a first macro item to delay execution until the - condition is met."; + "This control causes the execution to pause until a condition + expression evaluates to truthy. + This is intended to be used within a macro to separate + controls in time or as a first macro item to delay execution + until the condition is met."; amm:parameter condition { - amm:type "//ietf/amm/TYPEDEF/eval-tgt"; + amm:type "//ietf/amm-base/typedef/eval-tgt"; } } @@ -403,28 +454,31 @@ module ietf-dtnma-agent { amm:parameter ref { description "An object to produce a value from."; - amm:type "//ietf/amm/TYPEDEF/VALUE-OBJ"; + amm:type "//ietf/amm-base/typedef/VALUE-OBJ"; } amm:result val { description "The produced value."; - amm:type "//ietf/amm/TYPEDEF/ANY"; + amm:type "//ietf/amm-base/typedef/ANY"; } } amm:ctrl report-on { amm:enum 6; description - "Agent-wide control to generate a report from a report template (RPTT). - The parameter is a single RPTT list that would be produced by an object. + "Agent-wide control to generate a report from a report + template (RPTT) value. + The parameter is a single RPTT list that would be produced + by an object. If used for more than one-shot diagnostics, defining a RPTT - (e.g. in a CONST within an ODM) is more efficient because the RPTT - value would not need be present in the EXECSET or RPTSET."; + (e.g. in a CONST within an ODM) is more efficient because + the RPTT value would not need be present in the EXECSET or + corresponding RPTSET."; amm:parameter template { description - "The reporting template, either as a RPTT value directly or as - a reference to a value-producing object (possibly parameterized) - which itself produces an RPTT value."; - amm:type "//ietf/amm/TYPEDEF/rpt-tgt"; + "The reporting template, either as a RPTT value directly or + as a reference to a value-producing object (possibly + parameterized) which itself produces an RPTT value."; + amm:type "//ietf/amm-base/typedef/rpt-tgt"; } amm:parameter destinations { description @@ -433,13 +487,82 @@ module ietf-dtnma-agent { limitations so each destination might see different report contents."; amm:union { - // FIXME: decide on whether this is a URI or a more complex ident hierarchy - amm:type "/ARITYPE/textstr"; - amm:type "/ARITYPE/null"; + amm:type "//ietf/network-base/typedef/endpoint-or-uri"; + amm:type "/aritype/null"; } } } + // Objects related to ODM handling + amm:edd odm-list { + amm:enum 16; + description + "A table of ODM within the agent."; + amm:tblt { + amm:key "org-name odm-name"; + amm:column org-name { + description + "The organization name containing the ODM"; + amm:type "//ietf/amm-base/typedef/id-text"; + } + amm:column org-enum { + description + "The organization enumeration containing the ODM"; + amm:type "//ietf/amm-base/typedef/id-int"; + } + amm:column model-name { + description + "The model name of the ODM"; + amm:type "//ietf/amm-base/typedef/id-text"; + } + amm:column model-enum { + description + "The model enumeration of the ODM"; + amm:type "//ietf/amm-base/typedef/id-int"; + } + amm:column revision { + description + "The specific revision the agent supports."; + amm:type "/aritype/TEXTSTR"; + } + } + } + amm:ctrl ensure-odm { + amm:enum 18; + description + "Ensure a specific ODM is present."; + amm:parameter org-name { + description + "The organization name containing the ODM"; + amm:type "//ietf/amm-base/typedef/id-text"; + } + amm:parameter org-id { + description + "The organization enumeration ID containing the ODM"; + amm:type "//ietf/amm-base/typedef/id-int"; + } + amm:parameter model-name { + description + "The model name containing the ODM"; + amm:type "//ietf/amm-base/typedef/id-text"; + } + amm:parameter model-id { + description + "The model enumeration ID containing the ODM"; + amm:type "//ietf/amm-base/typedef/id-int"; + } + } + amm:ctrl obsolete-odm { + amm:enum 19; + description + "Mark a specific ODM as obsolete if it is present."; + amm:parameter odm-ns { + description + "Namespace of the ODM"; + amm:type "/aritype/namespace"; + } + } + // Helpers for VAR amm:ctrl var-reset { amm:enum 7; @@ -448,7 +571,7 @@ module ietf-dtnma-agent { amm:parameter target { description "The VAR object to affect."; - amm:type "/ARITYPE/VAR"; + amm:type "/aritype/VAR"; } } amm:ctrl var-store { @@ -458,12 +581,12 @@ module ietf-dtnma-agent { amm:parameter target { description "The VAR object to affect."; - amm:type "/ARITYPE/VAR"; + amm:type "/aritype/VAR"; } amm:parameter value { description "The exact value to store in the VAR."; - amm:type "//ietf/amm/TYPEDEF/ANY"; + amm:type "//ietf/amm-base/typedef/ANY"; } } @@ -476,7 +599,7 @@ module ietf-dtnma-agent { amm:tblt { amm:key "obj"; amm:column obj { - amm:type "/ARITYPE/TYPEDEF"; + amm:type "/aritype/typedef"; } } } @@ -490,42 +613,40 @@ module ietf-dtnma-agent { amm:tblt { amm:key "obj"; amm:column obj { - amm:type "/ARITYPE/CONST"; + amm:type "/aritype/CONST"; } amm:column type { - amm:type "//ietf/amm/TYPEDEF/semtype"; + amm:type "//ietf/amm-semtype/typedef/semtype"; } } } amm:ctrl ensure-const { amm:enum 11; description - "Ensure a specific CONST is present."; - amm:parameter obj { - description - "A reference to a CONST within an ODM only."; - amm:type "/ARITYPE/CONST"; - } + "Ensure a specific CONST is present in an ODM."; + uses ensure-object-id; amm:parameter type { description "The type for the CONST object."; - amm:type "//ietf/amm/TYPEDEF/semtype"; + amm:type "//ietf/amm-semtype/typedef/semtype"; } amm:parameter init { description "A required initializer expression. - This expression is evaluated once at the time of object creation."; - amm:type "//ietf/amm/TYPEDEF/EXPR"; + This expression is evaluated once at the time of object + creation."; + amm:type "//ietf/amm-base/typedef/EXPR"; } } - amm:ctrl discard-const { + amm:ctrl obsolete-const { amm:enum 12; description - "Discard a specific CONST if it is present."; + "Mark a specific CONST as obsolete if it is present in an + ODM."; amm:parameter obj { description "A reference to a CONST within an ODM only."; - amm:type "/ARITYPE/CONST"; + amm:type "/aritype/CONST"; } } @@ -538,46 +659,43 @@ module ietf-dtnma-agent { amm:tblt { amm:key "obj"; amm:column obj { - amm:type "/ARITYPE/VAR"; + amm:type "/aritype/VAR"; } amm:column type { - amm:type "//ietf/amm/TYPEDEF/semtype"; + amm:type "//ietf/amm-semtype/typedef/semtype"; } } } amm:ctrl ensure-var { amm:enum 9; description - "Ensure a specific VAR is present."; - amm:parameter obj { - description - "A reference to a VAR within an ODM only."; - amm:type "/ARITYPE/VAR"; - } + "Ensure a specific VAR is present in an ODM."; + uses ensure-object-id; amm:parameter type { description "The type for the VAR object."; - amm:type "//ietf/amm/TYPEDEF/semtype"; + amm:type "//ietf/amm-semtype/typedef/semtype"; } amm:parameter init { description "An optional initializer expression. - This expression is evaluated once at the time of object creation."; + This expression is evaluated once at the time of object + creation."; amm:default "null"; amm:union { - amm:type "/ARITYPE/NULL"; - amm:type "//ietf/amm/TYPEDEF/EXPR"; + amm:type "/aritype/NULL"; + amm:type "//ietf/amm-base/typedef/EXPR"; } } } - amm:ctrl discard-var { + amm:ctrl obsolete-var { amm:enum 10; description - "Discard a specific VAR if it is present."; + "Mark a specific VAR as obsolete if it is present in an ODM."; amm:parameter obj { description "A reference to a VAR within an ODM only."; - amm:type "/ARITYPE/VAR"; + amm:type "/aritype/VAR"; } } @@ -587,27 +705,31 @@ module ietf-dtnma-agent { amm:enum 12; description "A table of SBR within the agent."; + uses obj-list-params; amm:tblt { amm:key "obj"; amm:column obj { - amm:type "/ARITYPE/SBR"; + amm:type "/aritype/SBR"; } amm:column action { description "The execution when this rule triggers."; - amm:type "//ietf/amm/TYPEDEF/MAC"; - } - amm:column start-time { - amm:type "//ietf/amm/TYPEDEF/TIME"; + amm:type "//ietf/amm-base/typedef/MAC"; } amm:column condition { - amm:type "//ietf/amm/TYPEDEF/EXPR"; + amm:type "//ietf/amm-base/typedef/EXPR"; } amm:column min-interval { - amm:type "/ARITYPE/TD"; + amm:type "/aritype/TD"; } amm:column max-count { - amm:type "/ARITYPE/UVAST"; + amm:type "/aritype/UVAST"; + } + amm:column init-enabled { + amm:type "/ARITYPE/BOOL"; + } + amm:column enabled { + amm:type "/ARITYPE/BOOL"; } } } @@ -616,28 +738,154 @@ module ietf-dtnma-agent { amm:enum 13; description "A table of TBR within the agent."; + uses obj-list-params; amm:tblt { amm:key "obj"; amm:column obj { - amm:type "/ARITYPE/TBR"; + amm:type "/aritype/TBR"; } amm:column action { description "The execution when this rule triggers."; - amm:type "//ietf/amm/TYPEDEF/MAC"; + amm:type "//ietf/amm-base/typedef/MAC"; } amm:column start-time { - amm:type "//ietf/amm/TYPEDEF/TIME"; + amm:type "//ietf/amm-base/typedef/TIME"; } amm:column period { - amm:type "/ARITYPE/TD"; + amm:type "/aritype/TD"; } amm:column max-count { - amm:type "/ARITYPE/UVAST"; + amm:type "/aritype/UVAST"; + } + amm:column init-enabled { + amm:type "/ARITYPE/BOOL"; + } + amm:column enabled { + amm:type "/ARITYPE/BOOL"; } } } + // CTRLs related to rules + amm:ctrl ensure-sbr { + if-feature "rules"; + amm:enum 13; + description + "Ensure that a state-based rule with the given identifiers + exists within an ODM."; + uses ensure-object-id; + amm:parameter action { + description + "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"; + } + amm:parameter min-interval { + amm:type "/ARITYPE/TD"; + } + amm:parameter max-count { + amm:type "/ARITYPE/UVAST"; + } + amm:parameter init-enabled { + amm:type "/ARITYPE/BOOL"; + } + amm:result res { + amm:type "/ARITYPE/UINT"; + } + } + amm:ctrl ensure-tbr { + if-feature "rules"; + amm:enum 14; + description + "Ensure that a time-based rule with the given identifiers + exists within an ODM."; + uses ensure-object-id; + amm:parameter action { + description + "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 period { + amm:type "/ARITYPE/TD"; + } + amm:parameter max-count { + amm:type "/ARITYPE/UVAST"; + } + amm:parameter max-count { + amm:type "/ARITYPE/UVAST"; + } + amm:parameter init-enabled { + amm:type "/ARITYPE/BOOL"; + } + amm:result res { + amm:type "/ARITYPE/UINT"; + } + } + amm:ctrl ensure-rule-enabled { + if-feature "rules"; + amm:enum 15; + description + "Ensure rule is enabled or disabled."; + amm:parameter obj-id { + description + "The rule to ensure enabled setting for."; + amm:union { + amm:type "/ARITYPE/SBR"; + amm:type "/ARITYPE/TBR"; + } + } + amm:parameter enabled { + amm:type "/ARITYPE/BOOL"; + } + amm:result res { + amm:type "/ARITYPE/uint"; + } + } + amm:ctrl reset-rule-enabled { + if-feature "rules"; + amm:enum 16; + description + "Reset rule enabled to initial setting."; + amm:parameter obj-id { + description + "The rule to reset enabled seetting for."; + amm:union { + amm:type "/ARITYPE/SBR"; + amm:type "/ARITYPE/TBR"; + } + } + amm:result res { + amm:type "/ARITYPE/UINT"; + } + } + amm:ctrl obsolete-rule { + if-feature "rules"; + amm:enum 17; + description + "Mark a specific SBR or TBR as obsolete if it is present in + an ODM."; + amm:parameter obj-id { + description + "A reference to a rule within an ODM only."; + amm:union { + amm:type "/ARITYPE/SBR"; + amm:type "/ARITYPE/TBR"; + } + } + amm:result success { + amm:type "/ARITYPE/BOOL"; + } + } + // Numeric operators amm:oper negate { amm:enum 0; @@ -739,7 +987,8 @@ module ietf-dtnma-agent { amm:enum 16; description "Compare two numbers by value. - The result is true if the left value is greater than the right. + The result is true if the left value is greater than the + right value. The operands are cast to the least compatible numeric type before the comparison."; uses numeric-binary-operands; @@ -784,8 +1033,8 @@ module ietf-dtnma-agent { description "Name or index of an individual column in a table."; amm:union { - amm:type "/ARITYPE/UVAST"; - amm:type "/ARITYPE/TEXTSTR"; + amm:type "/aritype/UVAST"; + amm:type "/aritype/TEXTSTR"; } } amm:oper tbl-filter { @@ -795,30 +1044,30 @@ module ietf-dtnma-agent { 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."; + 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/TYPEDEF/EXPR"; + 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."; + Each key is a column to compare and each value is an + expression with LABEL values substituted by column names."; amm:ulist { - amm:type "./TYPEDEF/column-id"; + amm:type "./typedef/column-id"; } } amm:operand in { description "Table to filter."; - amm:type "/ARITYPE/TBL"; + amm:type "/aritype/TBL"; } amm:result out { description "The filtered table."; - amm:type "/ARITYPE/TBL"; + amm:type "/aritype/TBL"; } } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-fgotn-topology@2025-04-08.yang b/experimental/ietf-extracted-YANG-modules/ietf-fgotn-topology@2025-06-18.yang similarity index 91% rename from experimental/ietf-extracted-YANG-modules/ietf-fgotn-topology@2025-04-08.yang rename to experimental/ietf-extracted-YANG-modules/ietf-fgotn-topology@2025-06-18.yang index 94433c5f7..58125ab36 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-fgotn-topology@2025-04-08.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-fgotn-topology@2025-06-18.yang @@ -79,7 +79,7 @@ module ietf-fgotn-topology { // RFC Ed.: update the date below with the date of RFC publication // and remove this note. - revision 2025-04-08 { + revision 2025-06-18 { description "initial version"; reference @@ -87,18 +87,6 @@ module ietf-fgotn-topology { Network"; } - augment "/nw:networks/nw:network/nw:node/nt:termination-point" + - "/tet:te" { - description - "specific augmentation of fgOTN termination point"; - leaf supported-fgotn-tp { - type boolean; - description - "It is used to indicate whether the TP can support fgOTN - switching capability."; - } - } - augment "/nw:networks/nw:network/nt:link/tet:te" + "/tet:te-link-attributes/tet:max-link-bandwidth" + "/tet:te-bandwidth/otnt:otn-bandwidth/otnt:odulist" { @@ -106,7 +94,7 @@ module ietf-fgotn-topology { "specific augmentation of fgOTN link on maximum link bandwidth"; leaf fgotn-bandwidth { - type string; + type uint16; description "It is used to indicate how much of the bandwidth has been allocated for the usage of fgOTN."; @@ -133,13 +121,13 @@ module ietf-fgotn-topology { } leaf odu-ts-number { - type string; + type uint16; description "The index of server ODUk channel"; } leaf fgotn-bandwidth { - type string; + type uint16; description "The unsreserved bandwidth of fgOTN in this server ODUk"; } @@ -165,7 +153,7 @@ module ietf-fgotn-topology { } leaf odu-ts-number { - type string; + type uint16; description "The index of server ODUk channel"; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-fgotn-tunnel@2025-04-08.yang b/experimental/ietf-extracted-YANG-modules/ietf-fgotn-tunnel@2025-06-18.yang similarity index 92% rename from experimental/ietf-extracted-YANG-modules/ietf-fgotn-tunnel@2025-04-08.yang rename to experimental/ietf-extracted-YANG-modules/ietf-fgotn-tunnel@2025-06-18.yang index 09b3095f8..1dd95c836 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-fgotn-tunnel@2025-04-08.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-fgotn-tunnel@2025-06-18.yang @@ -60,25 +60,13 @@ module ietf-fgotn-tunnel { // RFC Ed.: update the date below with the date of RFC publication // and remove this note. - revision 2025-04-08 { + revision 2025-06-18 { description "initial version"; reference "RFC XXXX: YANG Data Models for fine grain Optical Transport Network"; - } - - /** - augment "/te:te/te:tunnels/te:tunnel/te:primary-paths" + - "/te:primary-path/te:te-bandwidth/te:technology" + - "/otn-tnl:otn/otn-tnl:otn-bandwidth" { - leaf fgoduflex-bandwidth { - type string; - description - "The bandwidth of this fgOTN tunnel"; - } - } -**/ + } augment "/te:te/te:tunnels/te:tunnel/" + "te:te-bandwidth/te:technology/otn-tnl:otn" { @@ -100,7 +88,7 @@ module ietf-fgotn-tunnel { description "augmentation of fgOTN label"; leaf fgts-numbers { - type uint16; + type string; description "Augment fgOTN timeslot information of this label hop"; } @@ -115,7 +103,7 @@ module ietf-fgotn-tunnel { description "augmentation of fgOTN label"; leaf fgts-numbers { - type uint16; + type string; description "Augment fgOTN timeslot information of this label hop"; } @@ -129,7 +117,7 @@ module ietf-fgotn-tunnel { description "augmentation of fgOTN label"; leaf fgts-numbers { - type uint16; + type string; description "fgOTN timeslot information of this label hop"; } @@ -143,7 +131,7 @@ module ietf-fgotn-tunnel { description "augmentation of fgOTN label"; leaf fgts-numbers { - type uint16; + type string; description "fgOTN timeslot information of this label hop"; } @@ -156,7 +144,7 @@ module ietf-fgotn-tunnel { description "augmentation of fgOTN label"; leaf fgts-numbers { - type uint16; + type string; description "fgOTN timeslot information of this label hop"; } 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 new file mode 100644 index 000000000..89b52dc26 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-network-base@2025-07-03.yang @@ -0,0 +1,212 @@ +module ietf-network-base { + yang-version 1.1; + namespace "ari://ietf/network-base/"; + prefix network-base; + + import ietf-amm { + prefix amm; + } + import ietf-amm-base { + prefix amm-base; + } + + organization + "Internet Engineering Task Force (IETF)" { + amm:enum 1; + } + contact + "WG Web: + WG List: + + Editor: Brian Sipos + "; + description + "This module defines base IDENT objects for network-related + entities such as protocol endpoints. The base objects are + general purpose, and all derived objects are layer- and/or + protocol-specific with appropriate parameters. + + 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 XXXX + (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself + for full legal notices."; + reference + "draft-ietf-dtn-adm-yang"; + + revision 2025-07-03 { + description + "Updated for latest ADM document."; + reference + "draft-ietf-dtn-adm-yang"; + } + amm:enum 26; + + // General purpose network data types and forms + amm:typedef uri { + amm:enum 0; + description + "A specialization of the textstr type to only contain a single + Uniform Resource Identifier (URI) as defined by STD 66. + + Objects using the uri type MUST be in US-ASCII encoding, + and MUST be normalized as described by RFC 3986 Sections + 6.2.1, 6.2.2.1, and 6.2.2.2. All unnecessary + percent-encoding is removed, and all case-insensitive + characters are set to lowercase except for hexadecimal + digits, which are normalized to uppercase as described in + Section 6.2.2.1. + + 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)"; + amm:type "/aritype/textstr" { + // This pattern is on the normalized scheme + pattern '[a-z][a-z0-9+-.]*:.*'; + } + } + amm:ident display-bstr-uuid { + amm:enum 17; + description + "Interpret byte string values as UUID and display as + human-friendly text according to RFC 9562 conventions."; + reference + "RFC 9562: Universally Unique IDentifiers (UUIDs)"; + amm:base "//ietf/amm-base/IDENT/display-hint-bstr"; + } + amm:typedef uuid { + amm:enum 5; + description + "A specialization of the bytestr type to contain a binary + encoded UUID value. + Values of this type SHALL contain a valid UUID value + as defined in Section 4 of RFC 9562."; + reference + "RFC 9562: Universally Unique IDentifiers (UUIDs)"; + amm:type "/aritype/bytestr" { + length "16"; + } + } + amm:ident display-bstr-oid { + amm:enum 18; + description + "Interpret byte string values as ASN.1 BER-encoded OIDs + and display as human-friendly dotted-decimal form of + ITU-T X.660."; + reference + "ITU-T X.660-2011: General procedures and top arcs of the + international object identifier tree"; + amm:base "//ietf/amm-base/IDENT/display-hint-bstr"; + } + amm:typedef oid { + amm:enum 4; + description + "A specialization of the bytestr type to contain an ASN.1 + BER-encoded object identifier (OID) value. + This typedef gives no more specific AMM constraints on + the byte string value but does constrain it by these + requirements. + Values of this type SHALL contain valid BER-encoded OID + contents consistent with the definiton of CBOR tag 111 + but without the actual tag, as defined in Section 2.1 of + RFC 9090. + Values of this type always contain an absolute OID."; + reference + "RFC 9090: Concise Binary Object Representation (CBOR) Tags + for Object Identifiers + ITU-T X.660-2011: General procedures and top arcs of the + international object identifier tree + ITU-T X.690-2021: ASN.1 encoding rules: Specification of + Basic Encoding Rules (BER), Canonical Encoding + Rules (CER) and Distinguished Encoding Rules (DER)"; + amm:type "/aritype/bytestr" { + length "2..max"; + } + } + + // Abstract base IDENTs and types + amm:ident abstract-endpoint { + amm:enum 0; + description + "This object defines an abstract base for all general purpose + network/transport endpoint identifiers as seen from outside + the endpoint node. + Uses where the endpoint is being bound to from inside the + node might require additional parameters outside of what is + present in this object hierarchy."; + amm:abstract true; + } + amm:typedef endpoint { + amm:enum 1; + description + "A value which references a non-abstract derived object + for specific types of network or transport endpoints."; + amm:type "/aritype/ident" { + amm:base "./IDENT/abstract-endpoint"; + } + } + amm:typedef endpoint-or-uri { + amm:enum 3; + description + "A value which is either a specific parameterized endpoint + IDENT reference or a text URI value identifying an endpoint."; + amm:union { + amm:type "./typedef/endpoint"; + amm:type "./typedef/uri"; + } + } + amm:ident abstract-endpoint-pattern { + amm:enum 1; + 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 pattern SHALL specify in its descriptions which types + of endpoints can possibly match the pattern."; + amm:abstract true; + } + amm:typedef endpoint-pattern { + amm:enum 2; + description + "A value which references a non-abstract derived pattern object + for specific types of network or transport endpoints."; + amm:type "/aritype/ident" { + amm:base "./IDENT/abstract-endpoint-pattern"; + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-ns-topo@2024-07-02.yang b/experimental/ietf-extracted-YANG-modules/ietf-ns-topo@2025-07-03.yang similarity index 96% rename from experimental/ietf-extracted-YANG-modules/ietf-ns-topo@2024-07-02.yang rename to experimental/ietf-extracted-YANG-modules/ietf-ns-topo@2025-07-03.yang index f646c80c6..343dba837 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-ns-topo@2024-07-02.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-ns-topo@2025-07-03.yang @@ -18,8 +18,8 @@ module ietf-ns-topo { import ietf-network-slice-service { prefix "ietf-nss"; reference - "draft-ietf-teas-ietf-network-slice-nbi-yang-10: - IETF Network Slice Service YANG Model"; + "draft-ietf-teas-ietf-network-slice-nbi-yang-25: + A YANG Data Model for the RFC 9543 Network Slice Service"; } organization @@ -63,7 +63,7 @@ module ietf-ns-topo { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-07-02 { + revision 2025-07-03 { description "Initial revision"; reference "RFC XXXX: IETF Network Slice Topology YANG Data Model"; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-ns-underlay-path@2024-07-02.yang b/experimental/ietf-extracted-YANG-modules/ietf-ns-underlay-path@2025-07-03.yang similarity index 97% rename from experimental/ietf-extracted-YANG-modules/ietf-ns-underlay-path@2024-07-02.yang rename to experimental/ietf-extracted-YANG-modules/ietf-ns-underlay-path@2025-07-03.yang index e71708811..233e4ab64 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-ns-underlay-path@2024-07-02.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-ns-underlay-path@2025-07-03.yang @@ -18,8 +18,8 @@ module ietf-ns-underlay-path { import ietf-network-slice-service { prefix "ietf-nss"; reference - "draft-ietf-teas-ietf-network-slice-nbi-yang-05: - IETF Network Slice Service YANG Model"; + "draft-ietf-teas-ietf-network-slice-nbi-yang-25: + A YANG Data Model for the RFC 9543 Network Slice Service"; } organization @@ -63,7 +63,7 @@ module ietf-ns-underlay-path { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-07-02 { + revision 2025-07-03 { description "Initial revision"; reference "RFC XXXX: IETF Network Slice Topology YANG Data Model"; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2024-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2025-07-03.yang similarity index 92% rename from experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2024-07-07.yang rename to experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2025-07-03.yang index 963147938..e47c82b04 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2024-07-07.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2025-07-03.yang @@ -25,15 +25,16 @@ module ietf-otn-slice-mpi { import ietf-otn-topology { prefix "otnt"; reference - "I-D.ietf-ccamp-otn-topo-yang: A YANG Data Model - for Optical Transport Network Topology"; + "draft-ietf-ccamp-otn-topo-yang-20: + RFC YYYY: A YANG Data Model for Optical Transport + Network Topology"; } import ietf-layer1-types { prefix "l1-types"; reference - "I-D.ietf-ccamp-layer1-types: A YANG Data Model - for Layer 1 Types"; + "draft-ietf-ccamp-layer1-types-18: + RFC ZZZZ: A YANG Data Model for Layer 1 Types"; } organization @@ -74,11 +75,11 @@ module ietf-otn-slice-mpi { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision "2024-07-07" { + revision "2025-07-03" { description "Latest revision of MPI YANG model for OTN slicing."; reference - "draft-ietf-ccamp-yang-otn-slicing-08: Framework and Data + "draft-ietf-ccamp-yang-otn-slicing-09: Framework and Data Model for OTN Network Slicing"; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-otn-slice@2024-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-otn-slice@2025-07-03.yang similarity index 95% rename from experimental/ietf-extracted-YANG-modules/ietf-otn-slice@2024-07-07.yang rename to experimental/ietf-extracted-YANG-modules/ietf-otn-slice@2025-07-03.yang index e1bc4b43d..19f66304b 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-otn-slice@2024-07-07.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-otn-slice@2025-07-03.yang @@ -18,22 +18,23 @@ module ietf-otn-slice { import ietf-layer1-types { prefix "l1-types"; reference - "draft-ietf-ccamp-layer1-types-14: - A YANG Data Model for Layer 1 Types"; + "draft-ietf-ccamp-layer1-types-18: + RFC ZZZZ: A YANG Data Model for Layer 1 Types"; } import ietf-network-slice-service { prefix "ietf-nss"; reference - "draft-ietf-teas-ietf-network-slice-nbi-yang-05: - IETF Network Slice Service YANG Model"; + "draft-ietf-teas-ietf-network-slice-nbi-yang-25: + RFC VVVV: A YANG Data Model for the RFC 9543 Network Slice + Service"; } import ietf-ns-topo { prefix "ns-topo"; reference - "draft-liu-teas-transport-network-slice-yang-06: - IETF Network Slice YANG Model"; + "draft-ietf-teas-network-slice-topology-yang-01: + RFC WWWW: IETF Network Slice Topology YANG Data Model"; } organization @@ -75,11 +76,11 @@ module ietf-otn-slice { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision "2024-07-07" { + revision "2025-07-03" { description "Latest revision of NBI YANG model for OTN slicing."; reference - "draft-ietf-ccamp-yang-otn-slicing-08: Framework and Data + "draft-ietf-ccamp-yang-otn-slicing-09: Framework and Data Model for OTN Network Slicing"; } @@ -114,6 +115,7 @@ module ietf-otn-slice { description "ODU Severely Errored Seconds (SES) threshold"; } + identity odu-uas { base odu-tca-threshold-type; description diff --git a/experimental/ietf-extracted-YANG-modules/ietf-udp-notif-transport@2025-04-27.yang b/experimental/ietf-extracted-YANG-modules/ietf-udp-notif-transport@2025-06-04.yang similarity index 92% rename from experimental/ietf-extracted-YANG-modules/ietf-udp-notif-transport@2025-04-27.yang rename to experimental/ietf-extracted-YANG-modules/ietf-udp-notif-transport@2025-06-04.yang index 8e2ddeff0..6db963e11 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-udp-notif-transport@2025-04-27.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-udp-notif-transport@2025-06-04.yang @@ -11,13 +11,14 @@ module ietf-udp-notif-transport { import ietf-subscribed-notif-receivers { prefix snr; reference - "RFC YYYY: An HTTPS-based Transport for - Configured Subscriptions"; + "draft-ietf-netconf-https-notif: An HTTPS-based Transport + for Configured Subscriptions"; } import ietf-udp-client { prefix udpc; reference - "RFC ZZZZ: YANG Grouping for UDP Clients and UDP Servers"; + "draft-ietf-netconf-udp-client-server: YANG Grouping for + UDP Clients and UDP Servers"; } import ietf-tls-client { prefix tlsc; @@ -67,7 +68,7 @@ module ietf-udp-notif-transport { described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here."; - revision 2025-04-27 { + revision 2025-06-04 { description "Initial revision"; reference @@ -155,8 +156,10 @@ module ietf-udp-notif-transport { default "true"; description "When disabled, the publisher will not segment UDP-Notif - messages and large messages may be fragmented at the IP - layer."; + messages. This may cause IP-layer fragmentation when + messages are larger than the MTU. IP fragmentation is + discouraged (RFC 8085, RFC 8900) and generally unsafe. + Disabling is not recommended."; } leaf max-segment-size { type uint16; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-wdm-tunnel@2024-07-02.yang b/experimental/ietf-extracted-YANG-modules/ietf-wdm-tunnel@2024-07-02.yang index fb54797a9..0b747d3da 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-wdm-tunnel@2024-07-02.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-wdm-tunnel@2024-07-02.yang @@ -142,7 +142,7 @@ module ietf-wdm-tunnel { } */ - uses l0-types:l0-path-constraints; + uses l0-types:path-constraints; } grouping transceiver-constraints { @@ -495,7 +495,7 @@ module ietf-wdm-tunnel { regeneration is enabled."; } - uses l0-types:l0-tunnel-attributes; + uses l0-types:tunnel-attributes; leaf guard-band-size { type l0-types:frequency-thz; @@ -663,7 +663,7 @@ module ietf-wdm-tunnel { "Augment source transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:primary-paths/" @@ -677,7 +677,7 @@ module ietf-wdm-tunnel { "Augment destination transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:primary-paths/" @@ -692,7 +692,7 @@ module ietf-wdm-tunnel { "Augment regen incoming transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:primary-paths/" @@ -707,7 +707,7 @@ module ietf-wdm-tunnel { "Augment regen outgoing transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } /* @@ -738,7 +738,7 @@ module ietf-wdm-tunnel { "Augment source transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:primary-paths/" @@ -753,7 +753,7 @@ module ietf-wdm-tunnel { "Augment destination transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:primary-paths/" @@ -769,7 +769,7 @@ module ietf-wdm-tunnel { "Augment regen incoming transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:primary-paths/" @@ -785,7 +785,7 @@ module ietf-wdm-tunnel { "Augment regen outgoing transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } /* @@ -814,7 +814,7 @@ module ietf-wdm-tunnel { "Augment source transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:secondary-paths/" @@ -828,7 +828,7 @@ module ietf-wdm-tunnel { "Augment destination transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:secondary-paths/" @@ -843,7 +843,7 @@ module ietf-wdm-tunnel { "Augment regen incoming transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:secondary-paths/" @@ -858,7 +858,7 @@ module ietf-wdm-tunnel { "Augment regen outgoing transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } /* @@ -887,7 +887,7 @@ module ietf-wdm-tunnel { "Augment source transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:secondary-reverse-paths/" @@ -901,7 +901,7 @@ module ietf-wdm-tunnel { "Augment destination transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:secondary-reverse-paths/" @@ -916,7 +916,7 @@ module ietf-wdm-tunnel { "Augment regen incoming transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:secondary-reverse-paths/" @@ -931,7 +931,7 @@ module ietf-wdm-tunnel { "Augment regen outgoing transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } /* 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 ee4b75670..2c7b68236 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 @@ -53,7 +53,7 @@ module ietf-yang-library-augmentedby { description "Initial revision."; reference - "RFC XXXX: Support of augmentedby in ietf-yang-library"; + "RFC XXXX: Augmented-by Addition to the YANG Library"; } grouping augmented-by { @@ -81,6 +81,7 @@ module ietf-yang-library-augmentedby { indirectly) gracefully."; } } + augment "/yanglib:yang-library/yanglib:module-set/yanglib:module" { description "Augments the augmented-by leaf-list from module info with the @@ -101,7 +102,6 @@ module ietf-yang-library-augmentedby { " ; uses augmented-by; } - augment "/yanglib:modules-state/yanglib:module" { status deprecated; description From 2d4d41af9f01a6e0c3e6bd4b7e1e0af00d9e769a Mon Sep 17 00:00:00 2001 From: William Lupton Date: Fri, 4 Jul 2025 21:09:26 +0100 Subject: [PATCH 14/34] TR-383a9 YANG modules (#1656) --- standard/bbf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/standard/bbf b/standard/bbf index 335a99ea6..1b0554914 160000 --- a/standard/bbf +++ b/standard/bbf @@ -1 +1 @@ -Subproject commit 335a99ea68b17fad83a80250febb0ded053646d7 +Subproject commit 1b0554914570f95cb7d49fca53c1816345bdc29a From 53babbbc67bcd5daafd8823f6f14accc5a25c3b8 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Mon, 16 Jun 2025 14:05:24 +0000 Subject: [PATCH 15/34] Cronjob - daily check of IANA modules. --- standard/iana/iana-dns-class-rr-type.yang | 1 - 1 file changed, 1 deletion(-) delete mode 120000 standard/iana/iana-dns-class-rr-type.yang diff --git a/standard/iana/iana-dns-class-rr-type.yang b/standard/iana/iana-dns-class-rr-type.yang deleted file mode 120000 index 709f6cba3..000000000 --- a/standard/iana/iana-dns-class-rr-type.yang +++ /dev/null @@ -1 +0,0 @@ -iana-dns-class-rr-type@2025-05-20.yang \ No newline at end of file From 55e494d8243005b27709893cce3febc44bcffa5f Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Mon, 16 Jun 2025 18:05:35 +0000 Subject: [PATCH 16/34] Cronjob - daily check of IETF modules. --- .../ietf-incident@2024-06-06.yang | 50 +++++++------------ 1 file changed, 19 insertions(+), 31 deletions(-) diff --git a/experimental/ietf-extracted-YANG-modules/ietf-incident@2024-06-06.yang b/experimental/ietf-extracted-YANG-modules/ietf-incident@2024-06-06.yang index be7288c2a..df3f81622 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-incident@2024-06-06.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-incident@2024-06-06.yang @@ -280,18 +280,18 @@ module ietf-incident { "The incident referred to has already been acknowledged."; } - identity root-cause-unlocated { + identity probable-cause-unlocated { base diagnose-error; description - "Fails to locate the root causes when performing the + "Fails to locate the probable causes when performing the diagnosis operation. The detailed reason MUST be included in the 'description'."; } - identity root-cause-unresolved { + identity probable-cause-unresolved { base resolve-error; description - "Fails to resolve the root causes when performing the + "Fails to resolve the probable causes when performing the resolution operation. The detailed reason MUST be included in the 'description'"; } @@ -364,9 +364,9 @@ module ietf-incident { //groupings - grouping root-cause-info { + grouping probable-cause-info { description - "The information of root cause."; + "The information of probable cause."; leaf cause-name { type identityref{ base cause-name; @@ -543,32 +543,32 @@ module ietf-incident { uses resources-info; } } - container root-causes { + container probable-causes { description - "The root cause objects."; - list root-cause { + "The probable cause objects."; + list probable-cause { key "node-ref"; description - "the root causes of incident."; + "the probable causes of incident."; uses resources-info { augment "resource" { description - "augment root cause information."; - //if root cause object is a resource of a node - uses root-cause-info; + "augment probable cause information."; + //if probable cause object is a resource of a node + uses probable-cause-info; } } - //if root cause object is a node - uses root-cause-info; + //if probable cause object is a node + uses probable-cause-info; } } - container root-events { + container probable-events { description - "the root cause related events of the incident."; - list root-event { + "the probable cause related events of the incident."; + list probable-event { key "type event-id"; description - "the root cause related event of the incident."; + "the probable cause related event of the incident."; leaf type { type leafref { path "../../../events/event/type"; @@ -656,18 +656,6 @@ module ietf-incident { } } } - case notification { - //TODO - } - case log { - //TODO - } - case KPI { - //TODO - } - case unknown { - //TODO - } } } } From 9a9805d81105b38e86e6a1b42cbf10c7857ed946 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Wed, 18 Jun 2025 18:05:36 +0000 Subject: [PATCH 17/34] Cronjob - daily check of IETF modules. --- ...g => ietf-yp-notification@2025-06-04.yang} | 109 +++++++++--------- ...ng => ietf-yp-observation@2025-06-04.yang} | 76 ++++++------ 2 files changed, 96 insertions(+), 89 deletions(-) rename experimental/ietf-extracted-YANG-modules/{ietf-yp-notification@2025-02-24.yang => ietf-yp-notification@2025-06-04.yang} (56%) rename experimental/ietf-extracted-YANG-modules/{ietf-yp-observation@2025-02-24.yang => ietf-yp-observation@2025-06-04.yang} (53%) diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yp-notification@2025-02-24.yang b/experimental/ietf-extracted-YANG-modules/ietf-yp-notification@2025-06-04.yang similarity index 56% rename from experimental/ietf-extracted-YANG-modules/ietf-yp-notification@2025-02-24.yang rename to experimental/ietf-extracted-YANG-modules/ietf-yp-notification@2025-06-04.yang index e87502ba0..b28706b75 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yp-notification@2025-02-24.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yp-notification@2025-06-04.yang @@ -1,7 +1,8 @@ module ietf-yp-notification { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-yp-notification"; - prefix inotenv; + prefix iypn; + import ietf-yang-types { prefix yang; reference @@ -35,7 +36,8 @@ module ietf-yp-notification { "RFC 8791: YANG Data Structure Extensions"; } - organization "IETF NETCONF (Network Configuration) Working Group"; + organization + "IETF NETCONF (Network Configuration) Working Group"; contact "WG Web: WG List: @@ -48,33 +50,32 @@ module ietf-yp-notification { Benoit Claise "; - description "Defines a notification header for Subscribed Notifications - [RFC8639] and YANG-Push [RFC8641]. When this notification header - is enabled through configuration, the root container of the - notification is encoded as defined in RFCXXX. + [RFC8639] and YANG-Push [RFC8641]. When this notification header + is enabled through configuration, the root container of the + notification is encoded as defined in RFCXXX. - This module can be used to validate XML encoded notifications - [RFC7950], JSON encoded messages [RFC7951] and CBOR encoded - messages [RFC9254]. Refer to Section Y of RFC XXXX for more - details. + This module can be used to validate XML-encoded notifications + [RFC7950], JSON-encoded messages [RFC7951], and CBOR-encoded + messages [RFC9254]. Refer to Section Y of RFC XXXX for more + details. - Copyright (c) 2025 IETF Trust and the persons identified as - authors of the code. All rights reserved. + 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). + 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."; + 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-02-24 { + revision 2025-06-04 { description "First revision"; reference @@ -82,34 +83,34 @@ module ietf-yp-notification { } identity notif-envelope-error { - description - "Base identify for errors found while attempting to - change the value of the leaf 'enable-notification-envelope'."; + description + "Base identity for errors found while attempting to + change the value of the leaf 'enable-notification-envelope'."; } grouping notif-env-capabilities { description "This grouping defines the capabilities for - the notification-envelope defined in RFC XXXX - and the different supported metadata."; + the notification-envelope defined in RFC XXXX + and the different supported metadata."; leaf notification-envelope { type boolean; - default false; + default "false"; description - "Supports YANG-Push to use the notification-envelope - defined in RFC XXXX."; + "Supports YANG-Push to use the notification-envelope + defined in RFC XXXX."; } container metadata { - description + description "Container with the supported optional metadata by the - YANG-Push publisher."; + YANG-Push publisher."; leaf hostname-sequence-number { type boolean; - default false; + default "false"; description "Supports hostname and sequence-number - in the YANG-Push notifications as defined in the - YANG-Push notification-envelope in RFC XXXX."; + in the YANG-Push notifications as defined in the + YANG-Push notification-envelope in RFC XXXX."; } } } @@ -120,27 +121,27 @@ module ietf-yp-notification { mandatory true; description "The date and time the event was generated by the event - source. This parameter is of type dateTime and compliant - to [RFC3339]."; + source. This parameter is of type dateTime and compliant + to [RFC3339]."; } leaf hostname { type inet:host; description "The hostname of the network node according to - [RFC1213]. This value is usually configured on the node - by the administrator to uniquely identify the node in - the network."; + [RFC1213]. This value is usually configured on the node + by the administrator to identify the node in + the network uniquely."; } leaf sequence-number { type yang:counter32; description "Unique sequence number as described in [RFC9187] for each - published message."; + published message."; } anydata contents { - description + description "This contains the values defined by the 'notification' - statement unchanged."; + statement unchanged."; } } @@ -148,31 +149,31 @@ module ietf-yp-notification { augment "/sn:subscriptions" { description "This augmentation adds the configuration switches for - enabling the notification envelope and metadatas."; + enabling the notification envelope and metadata."; leaf enable-notification-envelope { type boolean; - default false; + default "false"; description - "Enables YANG-Push to use the notification-envelope - defined in RFC XXXX."; + "Enables YANG-Push to use the notification-envelope + defined in RFC XXXX."; } container metadata { - description + description "Container for configuring optional metadata."; } } // YANG-Push Capabilities extension - augment "/sysc:system-capabilities/notc:subscription-capabilities" { + augment "/sysc:system-capabilities" + + "/notc:subscription-capabilities" { description "Extension to the subscription-capabilities model to enable - clients to learn whether the publisher supports the - notification-envelope"; - + clients to learn whether the publisher supports the + notification-envelope"; container notification-metadata { - description + description "Adds the notification metadata capabilities to subscription - capabilities."; + capabilities."; uses notif-env-capabilities; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yp-observation@2025-02-24.yang b/experimental/ietf-extracted-YANG-modules/ietf-yp-observation@2025-06-04.yang similarity index 53% rename from experimental/ietf-extracted-YANG-modules/ietf-yp-observation@2025-02-24.yang rename to experimental/ietf-extracted-YANG-modules/ietf-yp-observation@2025-06-04.yang index 5f511f390..9788076b7 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yp-observation@2025-02-24.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yp-observation@2025-06-04.yang @@ -1,8 +1,8 @@ module ietf-yp-observation { yang-version 1.1; - namespace - "urn:ietf:params:xml:ns:yang:ietf-yp-observation"; + namespace "urn:ietf:params:xml:ns:yang:ietf-yp-observation"; prefix ypot; + import ietf-yang-types { prefix yang; reference @@ -25,7 +25,9 @@ module ietf-yp-observation { "RFC 9196: YANG Modules Describing Capabilities for Systems and Datastore Update Notifications"; } - organization "IETF NETCONF (Network Configuration) Working Group"; + + organization + "IETF NETCONF (Network Configuration) Working Group"; contact "WG Web: WG List: @@ -36,34 +38,33 @@ module ietf-yp-observation { Alex Huang Feng "; - description "Defines YANG-Push event notification header with the observation - time in streaming update notifications. + time in streaming update notifications. - Copyright (c) 2025 IETF Trust and the persons identified as - authors of the code. All rights reserved. + 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). + 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."; + This version of this YANG module is part of RFC XXXX; see the RFC + itself for full legal notices."; - revision 2025-02-24 { + revision 2025-06-04 { description "First revision"; reference - "RFC XXXX: Support of YANG-Push Notifications Observation Time"; + "RFC XXXX: Extensible YANG Model for Network Telemetry Notifications"; } feature yang-push-observation-timestamp { description "This feature indicates the YANG-push Notifications support - the observation timestamps in streaming update notifications."; + the observation timestamps in streaming update notifications."; } grouping yang-push-observation { @@ -77,52 +78,57 @@ module ietf-yp-observation { leaf point-in-time { type enumeration { enum current-accounting { - description "For periodical subscriptions, the point-in-time - where the metrics are being polled and observed."; + description + "For periodical subscriptions, the point-in-time + where the metrics are being polled and observed."; } enum initial-state { - description "For 'on-change sync on start' subscriptions, the - initial point in time when the subscription was established - and the state was observed."; + description + "For 'on-change sync on start' subscriptions, the + initial point in time when the subscription was established + and the state was observed."; } enum state-changed { - description "For 'on-change sync on start' subscriptions, the - point in time when the state change was observed after the - subscription was established."; + description + "For 'on-change sync on start' subscriptions, the + point in time when the state change was observed after the + subscription was established."; } } description - "This describes at which point in time the metrics were observed"; + "This describes at which point in time the metrics were observed"; } } // Event notifications augment "/yp:push-update" { description - "This augmentation adds the observation timestamp of the accounted metrics - in the push-update notification."; + "This augmentation adds the observation timestamp of the accounted + metrics in the push-update notification."; uses ypot:yang-push-observation; } augment "/yp:push-change-update" { description - "This augmentation adds the observation timestamp of the event - in the push-change-update notification."; - uses ypot:yang-push-observation; + "This augmentation adds the observation timestamp of the event + in the push-change-update notification."; + uses ypot:yang-push-observation; } // Event capabilities - augment "/sysc:system-capabilities/notc:subscription-capabilities" { + augment "/sysc:system-capabilities" + + "/notc:subscription-capabilities" { description - "Add system level capabilities"; + "Add YANG-Push notification capabilities to system-level capability + container."; leaf yang-push-observation-supported { if-feature "yang-push-observation-timestamp"; type boolean; description "Specifies whether the publisher supports exporting - observation-timestamp and point-in-time in notifications."; + observation-timestamp and point-in-time in notifications."; reference - "RFC XXXX: YANG Notifications Observation Time"; + "RFC XXXX: Extensible YANG Model for YANG-Push Notifications"; } } } From a5c94aa98ab95ce352334420f53bdfbafb5977c5 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Fri, 20 Jun 2025 18:05:35 +0000 Subject: [PATCH 18/34] Cronjob - daily check of IETF modules. --- ...-netconf-private-candidate@2024-09-12.yang | 43 ++++++++++++++----- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/experimental/ietf-extracted-YANG-modules/ietf-netconf-private-candidate@2024-09-12.yang b/experimental/ietf-extracted-YANG-modules/ietf-netconf-private-candidate@2024-09-12.yang index c44243195..44d1c1288 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-netconf-private-candidate@2024-09-12.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-netconf-private-candidate@2024-09-12.yang @@ -13,12 +13,6 @@ module ietf-netconf-private-candidate { "WG Web: WG List: - WG Chair: Kent Watsen - - - WG Chair: Per Andersson - - Editor: James Cumming @@ -74,9 +68,25 @@ module ietf-netconf-private-candidate { private-candidate configurations."; default revert-on-conflict; type enumeration { - enum revert-on-conflict; - enum prefer-candidate; - enum prefer-running; + enum revert-on-conflict { + description + "Reject update when any conflicting + node is found and revert the private + candidate configuration datastore to its + state prior to issuing the update."; + } + enum prefer-candidate { + description + "Resolve conflicted node by selecting + the private candidate configuration + datastore version."; + } + enum prefer-running { + description + "Resolve conflicted node by selecting + the running configuration datastore + version."; + } } } } @@ -95,8 +105,19 @@ module ietf-netconf-private-candidate { the private candidate."; default last-update; type enumeration { - enum last-update; - enum creation-point; + enum last-update { + description + "Compare using the point the private + candidate configuration datastore was + last updated using the update or commit + RPCs."; + } + enum creation-point { + description + "Compare using the point the private + candidate configuration datastore was + initially created."; + } } } } From aa1ebaf6a9a700e0e82c338368f8b0fc1b6ac688 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Sun, 22 Jun 2025 18:05:36 +0000 Subject: [PATCH 19/34] Cronjob - daily check of IETF modules. --- ...etf-cmis-control-primitive@2025-04-21.yang | 139 ++++++++++++ .../ietf-cmis-control@2025-04-21.yang | 205 ++++++++++++++++++ 2 files changed, 344 insertions(+) create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-cmis-control-primitive@2025-04-21.yang create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-cmis-control@2025-04-21.yang diff --git a/experimental/ietf-extracted-YANG-modules/ietf-cmis-control-primitive@2025-04-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-cmis-control-primitive@2025-04-21.yang new file mode 100644 index 000000000..223093010 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-cmis-control-primitive@2025-04-21.yang @@ -0,0 +1,139 @@ +module ietf-cmis-control-primitive { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-cmis-control-primitive"; + prefix cmis-ctrl-pm; + + import ietf-interfaces { + prefix if; + } + + organization + "IETF CCAMP Working Group"; + + contact + "WG Web: + WG List: + + Editor: Shunsuke Homma + + + Editor: Hitoshi Irino + "; + + description + "This YANG module defines a primitive data model for the + management of CMIS (Common Management Interface Specification) + pages as specified by OIF. It enables configuration and + retrieval of CMIS page data, including access types and value + fields, to support the management of pluggable optical modules + via NETCONF or RESTCONF. + 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 + (http://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC XXXX + (https://www.rfc-editor.org/info/rfc YYYY); see the RFC itself + for full legal notices."; + +// RFC Ed.: replace XXXX with actual RFC number and remove this note + + revision "2025-04-21" { + description + "Initial revision."; + reference + "I-D.hi-ccamp-cmis-control-yang-00"; + } + + /* + * Primitive Mode of CMIS control data nodes + */ + + grouping primitive-cmis-page { + description + "Parameters stored in the CMIS page as flat data structure"; + + leaf page-num{ + type uint8 { + range "0 .. 255"; + } + mandatory true; + description + "The number of the CMIS page."; + } + + leaf bank { + type uint8; + mandatory true; + description + "The banks corresponding to the CMIS page."; + } + + leaf offset { + type uint8; + mandatory true; + description + "The memory address of the value."; + } + + leaf size { + type uint8 { + range "1 .. 128"; + } + mandatory true; + description + "The memory size of the value."; + } + + leaf value { + type binary; + mandatory true; + description + "The actual data to write to the CMIS memory."; + } + } + + grouping cmis-control-primitive { + description + "Parameters for primitive CMIS control of the pluggable + device equipped in the interface."; + + leaf cmis-enabled { + type boolean; + default "false"; + config false; + description + "The availability of the CMIS for control the pluggable + device equipped in the interface. If the device does not + support CMIS, this value is false."; + } + + leaf cmis-version { + type string; + config false; + description + "The version of the CMIS by the pluggable device."; + } + + list primitive-cmis-page { + key "page-num"; + config true; + uses primitive-cmis-page; + } + } + + /* + * Augment Interface + */ + + augment "/if:interfaces/if:interface" { + container cmis-control-primitive { + uses cmis-control-primitive; + } + } +} 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 new file mode 100644 index 000000000..1ba889058 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-cmis-control@2025-04-21.yang @@ -0,0 +1,205 @@ +module ietf-cmis-control { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-cmis-control"; + prefix cmis-ctrl; + + import ietf-interfaces { + prefix if; + } + organization + "IETF CCAMP Working Group"; + + contact + "WG Web: + WG List: + + Editor: Shunsuke Homma + + + Editor: Hitoshi Irino + "; + + description + "This YANG module defines a data model for the management + of CMIS (Common Management Interface Specification) pages + as specified by OIF. It enables configuration and retrieval + of CMIS page data, including access types and value fields, + to support the management of pluggable optical modules via + NETCONF or RESTCONF. + + 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 + (http://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."; + +// RFC Ed.: replace XXXX with actual RFC number and remove this note + + revision "2025-04-21" { + description + "Initial revision."; + reference + "I-D.hi-ccamp-cmis-control-yang-00"; + } + + /* + * CMIS control data nodes + */ + + typedef access-type { + type enumeration { + enum rw { + description "A readable and writable element."; + } + enum rww { + description "A readable and writable element that can be + modified by the module."; + } + enum ro { + description "A read-only element."; + } + enum wo { + description "A write-only element."; + } + enum wo/sc { + description "A write-only element with self-clearing side + effect."; + } + enum ro/cor { + description "A write-only element with celan-on-read side + effect."; + } + } + description "Defines access types for CMIS elements."; + } + + grouping cmis-page { + description + "Parameters stored in the CMIS page"; + + leaf page-num{ + type uint8 { + range "0 .. 255"; + } + mandatory true; + description + "The number of the CMIS page."; + } + + leaf bank { + type uint8; + mandatory true; + description + "The banks corresponding to the CMIS page."; + } + + leaf page-access-type { + type access-type; + config false; + description "Access type of the CMIS page."; + } + + leaf description { + type string; + description + "The description of the CMIS page."; + } + + list value { + key "offset"; + description + "The value contained in the CMIS page."; + + leaf offset { + type uint8; + mandatory true; + description + "The memory address of the value."; + } + + leaf size { + type uint8 { + range "1 .. 128"; + } + mandatory true; + description + "The memory size of the value."; + } + + leaf value-access-type { + type access-type; + config false; + description "Access type of the target value."; + } + + leaf value-data { + type binary; + mandatory true; + description + "The data contained in the value. It is writable only + when the access-type is not Read-Only or Read-Only with + clean-on-read side effect."; + } + + leaf description { + type string; + description + "The description of the value."; + } + } + } + + grouping cmis-pages { + description + "The list of the accessible CMIS pages supported by the + pluggable device accommodated into the interface."; + + list cmis-page { + key "page-num"; + uses cmis-page; + } + } + + grouping cmis-control { + description + "Parameters for primitive CMIS control of the pluggable device + equipped in the interface."; + + leaf cmis-enabled { + type boolean; + default "false"; + config false; + description + "The availability of the CMIS for control the pluggable + device equipped in the interface. If the device does not + support CMIS, this value is false."; + } + + leaf cmis-version { + type string; + config false; + description + "The version of the CMIS by the pluggable device."; + } + + uses cmis-pages; + + } + + /* + * Augment Interface + */ + augment "/if:interfaces/if:interface" { + container cmis-control { + uses cmis-control; + } + } +} From 46efd2ae0ab93bc3cf3a63ef99620c08aadfa743 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Tue, 24 Jun 2025 18:05:35 +0000 Subject: [PATCH 20/34] Cronjob - daily check of IETF modules. --- ...1.yang => ietf-inet-types@2025-06-23.yang} | 36 ++++++---- ...1.yang => ietf-yang-types@2025-06-23.yang} | 65 ++++++++++++------- 2 files changed, 65 insertions(+), 36 deletions(-) rename experimental/ietf-extracted-YANG-modules/{ietf-inet-types@2024-10-21.yang => ietf-inet-types@2025-06-23.yang} (95%) rename experimental/ietf-extracted-YANG-modules/{ietf-yang-types@2024-10-21.yang => ietf-yang-types@2025-06-23.yang} (92%) diff --git a/experimental/ietf-extracted-YANG-modules/ietf-inet-types@2024-10-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-inet-types@2025-06-23.yang similarity index 95% rename from experimental/ietf-extracted-YANG-modules/ietf-inet-types@2024-10-21.yang rename to experimental/ietf-extracted-YANG-modules/ietf-inet-types@2025-06-23.yang index 78c5201ba..b28621b9f 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-inet-types@2024-10-21.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-inet-types@2025-06-23.yang @@ -23,7 +23,7 @@ module ietf-inet-types { 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 + 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 @@ -36,13 +36,14 @@ module ietf-inet-types { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-10-21 { + revision 2025-06-23 { 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 @@ -171,10 +172,7 @@ module ietf-inet-types { "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. If IPv6 extension headers are present, then the - protocol number type represents the upper layer protocol - number, i.e., the number of the last 'next header' field - of the IPv6 extension headers. + header. Protocol numbers are assigned by IANA. The current list of all assignments is available from ."; @@ -183,6 +181,19 @@ module ietf-inet-types { 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 { @@ -595,12 +606,13 @@ module ietf-inet-types { Objects using the uri type MUST be in US-ASCII encoding, and MUST be normalized as described by RFC 3986 Sections - 6.2.1, 6.2.2.1, and 6.2.2.2. All unnecessary - percent-encoding is removed, 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. + 6.2.1, 6.2.2.1, and 6.2.2.2. 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 diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-types@2024-10-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-types@2025-06-23.yang similarity index 92% rename from experimental/ietf-extracted-YANG-modules/ietf-yang-types@2024-10-21.yang rename to experimental/ietf-extracted-YANG-modules/ietf-yang-types@2025-06-23.yang index 8fe6281e9..b125a1691 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yang-types@2024-10-21.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-types@2025-06-23.yang @@ -23,7 +23,7 @@ module ietf-yang-types { 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 + 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 @@ -36,7 +36,7 @@ module ietf-yang-types { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-10-21 { + revision 2025-06-23 { description "This revision adds the following new data types: - yang:date @@ -53,8 +53,11 @@ module ietf-yang-types { - yang:nanoseconds32 - yang:nanoseconds64 - yang:language-tag - The yang-identifier definition has been aligned with YANG 1.1. - Several pattern statements have been improved."; + 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 XXXX: Common YANG Data Types"; } @@ -302,27 +305,30 @@ module ietf-yang-types { 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](\.[0-9]+)?' - + '(Z|[\+\-]((1[0-3]|0[0-9]):([0-5][0-9])|14:00))?'; + 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. + 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 -00:00 indicates that the date-and-time + (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-offsets +00:00 and Z - both indicate that the date-and-time value is reported in - UTC and that the local time reference point is UTC (see RFC - 3339 section 4.3). + reference point is unknown. The time-offsets +00:00 + indicates that the date-and-time value is reported in + UTC and that the local time reference point is UTC + (see RFC 9557 section 2). This type is not equivalent to the DateAndTime textual convention of the SMIv2 since RFC 3339 uses a different @@ -337,9 +343,12 @@ module ietf-yang-types { in case a server follows automatically 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 uses the time-offset -00:00."; + time zone offset SHOULD use the time-offset Z and MAY use + -00:00 for backwards compatibility."; reference "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"; @@ -347,8 +356,9 @@ module ietf-yang-types { 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))?'; + 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 @@ -394,21 +404,23 @@ module ietf-yang-types { typedef time { type string { - pattern '(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\.[0-9]+)?' - + '(Z|[\+\-]((1[0-3]|0[0-9]):([0-5][0-9])|14:00))?'; + 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. + 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 date value is + (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 date value is reported in UTC and that the local + the time value is reported in UTC and that the local time reference point is UTC (see RFC 9557 section 2). The canonical format for time values with a known time @@ -430,7 +442,8 @@ module ietf-yang-types { typedef time-no-zone { type time { - pattern '(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\.[0-9]+)?'; + 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 @@ -626,8 +639,12 @@ module ietf-yang-types { pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'; } description - "The mac-address type represents an IEEE 802 MAC address. - The canonical representation uses lowercase characters. + "The mac-address type represents a 48-bit IEEE 802 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."; From 660376770065a2c7f20c5e5b330b8a36160b7671 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Thu, 26 Jun 2025 18:05:37 +0000 Subject: [PATCH 21/34] Cronjob - daily check of IETF modules. --- ...f-yang-library-augmentedby@2025-05-28.yang | 43 +++++++++++++++---- 1 file changed, 35 insertions(+), 8 deletions(-) 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 e35747133..ee4b75670 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 @@ -19,7 +19,7 @@ module ietf-yang-library-augmentedby { Benoit Claise - IGNACIO DOMINGUEZ MARTINEZ-CASANUEVA + Ignacio Dominguez Martinez-Casanueva "; description @@ -37,7 +37,7 @@ module ietf-yang-library-augmentedby { (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 @@ -58,7 +58,7 @@ module ietf-yang-library-augmentedby { grouping augmented-by { description - "Augment the augmented-by list from module info with the + "Augment the augmented-by leaf-list from module info with the module-augmented-by grouping" ; leaf-list augmented-by { @@ -81,19 +81,46 @@ module ietf-yang-library-augmentedby { indirectly) gracefully."; } } - augment "/yanglib:yang-library/yanglib:module-set/yanglib:module" { description - "Augment the augmented-by list from module info with the - augmented-by grouping" ; + "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; } augment "/yanglib:modules-state/yanglib:module" { status deprecated; description - "Augment the augmented-by list from module info with the - augmented-by grouping" ; + "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; } From 46df0e71eee6617f6b7768c5d76093c0b6353599 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Fri, 27 Jun 2025 18:05:36 +0000 Subject: [PATCH 22/34] Cronjob - daily check of IETF modules. --- ...g => ietf-bgp-communities@2025-06-13.yang} | 73 +++++++++++++------ .../ietf-rpki-rtr@2022-10-18.yang | 10 +-- .../ietf-rpki-table@2022-10-18.yang | 13 +--- 3 files changed, 55 insertions(+), 41 deletions(-) rename experimental/ietf-extracted-YANG-modules/{ietf-bgp-communities@2025-03-13.yang => ietf-bgp-communities@2025-06-13.yang} (79%) diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-03-13.yang b/experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-06-13.yang similarity index 79% rename from experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-03-13.yang rename to experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-06-13.yang index b6581364b..bc84fa8fc 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-03-13.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-06-13.yang @@ -8,7 +8,7 @@ module ietf-bgp-communities { import ietf-inet-types { prefix inet; reference - "draft-ietf-netmod-rfc6991-bis-17: Common YANG Data Types"; + "draft-ietf-netmod-rfc6991-bis-18: Common YANG Data Types"; } organization @@ -35,9 +35,15 @@ module ietf-bgp-communities { This version of this YANG module is part of RFC YYYY; see the RFC itself for full legal notices. - // RFC-EDITOR: please update YYYY with this RFC ID"; + 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-03-13 { + // RFC-EDITOR: please update YYYY with this RFC ID + + revision 2025-06-13 { description "Initial revision."; reference @@ -64,7 +70,7 @@ module ietf-bgp-communities { typedef community-name { type string { length "1..255"; - pattern '[^ \t\r\n\p{C}]+'; + pattern '[^\s]+'; } description "This type restricts values for the name of a BGP community."; @@ -96,7 +102,6 @@ module ietf-bgp-communities { typedef community-description { type string { length "1..65535"; - pattern '[^\p{C}]+'; } description "This type restricts values for the description of a BGP @@ -130,7 +135,7 @@ module ietf-bgp-communities { typedef field-name { type string { length "1..255"; - pattern '[^ \t\r\n\p{C}]+'; + pattern '[^\s]+'; } description "This type restricts values for the name leaf of a BGP @@ -158,11 +163,13 @@ module ietf-bgp-communities { typedef field-description { type string { length "1..65535"; - pattern '[^\p{C}]+'; + pattern '(\*)|([^*]+)'; } description "This type restricts values for the description leaf of a BGP - community Local Administrator/Local Data field."; + community Local Administrator/Local Data field. The string + containing a single asterisk '*' indicates that the value of + the field should be used as description."; reference "RFC YYYY: A YANG Data Model for BGP Communities RFC-EDITOR: please update YYYY with this RFC ID"; @@ -185,31 +192,50 @@ module ietf-bgp-communities { leaf length { type uint8; description - "Length of the field"; + "Length of the field. If local-admin-format is 'decimal', + this is a number of digits. In case local-admin-format is + 'binary', it is a number of bits. + + Parsers use the field length to determine how many + decimals or bits from the Local Administrator part of the + community are used by this field. If this leaf is not + defined, the length is assumed to be the maximum allowed + length of the entire field list. In this case the field + list MUST NOT contain more than one element."; } leaf pattern { type field-pattern; mandatory true; description - "Regular Expression describing the expected contents of - the field"; + "Used by parsers to match on the content of the field. + This could be a single value or a regular expression + pattern matching multiple values."; } leaf description { type field-description; description - "A text description of the field contents"; + "A text description of the field pattern. This description + can be used to provide meaning to specific values for a + field."; } } } container bgp-communities { + config false; description "A community set"; leaf serial { type uint32; must "boolean(.)"; description - "Version number of the community set"; + "Version number of the community set. This value wraps and + should be compared using sequence space arithmetic. + Publishing implementations are free to decide how to + generate this value. One example method is to use the + YYYYMMDDnn syntax as commonly used inside the DNS."; + reference + "RFC 1912: Common DNS Operational and Configuration Errors"; } leaf uri { type inet:uri; @@ -219,7 +245,6 @@ module ietf-bgp-communities { leaf description { type string { length "1..65535"; - pattern '[^\p{C}]+'; } description "A description for the community set"; @@ -242,7 +267,6 @@ module ietf-bgp-communities { leaf name { type string { length "1..255"; - pattern '[^\p{C}]+'; } description "Maintainer contact name"; @@ -250,7 +274,6 @@ module ietf-bgp-communities { leaf role { type string { length "1..255"; - pattern '[^\p{C}]+'; } description "Maintainer contact role"; @@ -258,7 +281,6 @@ module ietf-bgp-communities { leaf organization { type string { length "1..255"; - pattern '[^\p{C}]+'; } description "Maintainer contact organization"; @@ -266,7 +288,6 @@ module ietf-bgp-communities { leaf organizational-unit { type string { length "1..255"; - pattern '[^\p{C}]+'; } description "Maintainer contact organizational unit"; @@ -274,6 +295,7 @@ module ietf-bgp-communities { } list regular { key "name"; + ordered-by user; description "A list of objects describing RFC 1997 BGP Communities"; leaf name { @@ -313,9 +335,11 @@ module ietf-bgp-communities { } list extended { key "name"; + ordered-by user; description "A list of objects describing RFC 4360 Extended BGP - Communities"; + Communities. Two-Octet and Four-Octet AS Specific + communities are supported by this model."; leaf name { type community-name; description @@ -335,13 +359,19 @@ module ietf-bgp-communities { type uint8; mandatory true; description - "Type Field"; + "High-order Type of the community. Supported values are 0 + (0x00) for Transitive Two-Octet AS-Specific Extended + Communities, 2 (0x02) for Transitive Four-Octet + AS-Specific Extended Communities, 64 (0x40) for + Non-Transitive Two-Octet AS-Specific Extended Communities + and 66 (0x42) for Non-Transitive Four-Octet AS-Specific + Extended Communities."; } leaf subtype { type uint8; mandatory true; description - "Sub-Type Field"; + "Low-order Sub-Type of the community"; } choice global-admin { mandatory true; @@ -380,6 +410,7 @@ module ietf-bgp-communities { } list large { key "name"; + ordered-by user; description "A list of objects describing RFC 8092 Large BGP Communities"; 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 86344e971..7d6b75afb 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 @@ -383,16 +383,10 @@ module ietf-rpki-rtr { "The number of router keys received from the RPKI cache server."; } - leaf ipv4-aspa-records { + leaf aspa-records { type yang:zero-based-counter64; description - "The number of IPv4 ASPAs received from the RPKI - cache server."; - } - leaf ipv6-aspa-records { - type yang:zero-based-counter64; - description - "The number of IPv6 ASPAs received from the RPKI + "The number of ASPAs received from the RPKI cache server."; } } 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 199f2aa43..eb158b084 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 @@ -300,18 +300,7 @@ module ietf-rpki-table { description "Name of the ASPA-table."; } - container ipv4 { - config false; - description - "Container for IPv4 ASPAs table."; - uses aspa-overall-records; - } - container ipv6 { - config false; - description - "Container for IPv6 ASPAs table."; - uses aspa-overall-records; - } + uses aspa-overall-records; } } } From ca1153b769647912df517e054e0788445d2a348d Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Sat, 28 Jun 2025 14:05:26 +0000 Subject: [PATCH 23/34] Cronjob - daily check of IANA modules. --- standard/iana/yang-parameters.xml | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/standard/iana/yang-parameters.xml b/standard/iana/yang-parameters.xml index 9b1c77116..718489f31 100644 --- a/standard/iana/yang-parameters.xml +++ b/standard/iana/yang-parameters.xml @@ -4,7 +4,7 @@ YANG Parameters 2010-06-10 - 2025-06-11 + 2025-06-27 YANG Module Names @@ -970,6 +970,16 @@ and Subsequent Address Family Identi + + ietf-inet-types + N + + 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 N @@ -2610,6 +2620,16 @@ and Subsequent Address Family Identi + + ietf-yang-types + N + + 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 N From 13abfca57303cb6cf2739364287e9178b7a68e30 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Wed, 2 Jul 2025 14:05:26 +0000 Subject: [PATCH 24/34] Cronjob - daily check of IANA modules. --- standard/iana/yang-parameters.xml | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/standard/iana/yang-parameters.xml b/standard/iana/yang-parameters.xml index 718489f31..eed697cfe 100644 --- a/standard/iana/yang-parameters.xml +++ b/standard/iana/yang-parameters.xml @@ -4,12 +4,12 @@ YANG Parameters 2010-06-10 - 2025-06-27 + 2025-07-01 YANG Module Names - + RFC Required YANG modules are additionally available for bulk retrieval by Rsync (rsync.iana.org::assignments/yang-parameters/) or @@ -226,6 +226,16 @@ and Subsequent Address Family Identi 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. + + iana-template + N + + 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 Y @@ -2380,6 +2390,16 @@ and Subsequent Address Family Identi + + ietf-template + N + + 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 N From 335abb29bdbd4ffb00827e70d667fd7323c0d6e9 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Wed, 2 Jul 2025 18:05:40 +0000 Subject: [PATCH 25/34] Cronjob - daily check of IETF modules. --- .../ietf-cats@2024-06-20.yang | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) 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 57b73def9..b2e6cab7b 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 @@ -231,20 +231,31 @@ module ietf-cats { transmission delay, where the metric value is the delay time in milliseconds."; } - enum service-ratio { + enum service-capacity { value 1; description "Calculate the metric based on - business capacity, where the metric value is - the current capacity percentage."; + service capacity, where the metric value is + the service capacity."; } - enum memory-ratio { + enum service-availability-ratio { value 2; - description " Calculate the metric based on - memory utilization percentage, where the + 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"; + } + enum memory-ratio { + value 4; + description "Calculate the metric based on + memory utilization percentage, where the metric value is the current memory utilization percentage"; } - } } leaf metric { From 9d9f2f05c0cacf06de86011065d205d617118fca Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Thu, 3 Jul 2025 18:05:38 +0000 Subject: [PATCH 26/34] Cronjob - daily check of IETF modules. --- ...1-08.yang => ietf-altmark@2025-06-30.yang} | 82 ++++---- .../ietf-config-template@2025-05-28.yang | 82 ++++++++ ...-netconf-txid-nmda-compare@2023-05-01.yang | 25 ++- ...etf-netconf-txid-yang-push@2022-04-01.yang | 19 +- .../ietf-netconf-txid@2023-03-01.yang | 157 +++++++-------- ...=> ietf-on-path-telemetry@2025-06-30.yang} | 179 ++++++++---------- .../ietf-telemetry-message@2025-06-10.yang | 20 +- 7 files changed, 322 insertions(+), 242 deletions(-) rename experimental/ietf-extracted-YANG-modules/{ietf-altmark@2025-01-08.yang => ietf-altmark@2025-06-30.yang} (84%) create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-config-template@2025-05-28.yang rename experimental/ietf-extracted-YANG-modules/{ietf-on-path-telemetry@2025-01-09.yang => ietf-on-path-telemetry@2025-06-30.yang} (81%) diff --git a/experimental/ietf-extracted-YANG-modules/ietf-altmark@2025-01-08.yang b/experimental/ietf-extracted-YANG-modules/ietf-altmark@2025-06-30.yang similarity index 84% rename from experimental/ietf-extracted-YANG-modules/ietf-altmark@2025-01-08.yang rename to experimental/ietf-extracted-YANG-modules/ietf-altmark@2025-06-30.yang index 4fde0ca6a..099234c27 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-altmark@2025-01-08.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-altmark@2025-06-30.yang @@ -31,10 +31,10 @@ module ietf-altmark { "WG Web: WG List: Author: thomas.graf@swisscom.com - Author: wangminxue@chinamobile.com + Author: wangminxue@chinamobile.com Author: giuseppe.fioccola@huawei.com Author: zhoutianran@huawei.com - Author: xiao.min2@zte.com.cn"; + Author: xiao.min2@zte.com.cn"; description "This YANG module specifies a vendor-independent data @@ -60,7 +60,7 @@ module ietf-altmark { (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself for full legal notices."; - revision 2025-01-08 { + revision 2025-06-30 { description "First revision."; reference "RFC XXXX: A YANG Data Model for Alternate-Marking"; } @@ -73,10 +73,10 @@ module ietf-altmark { { description "This feature indicated that the Alternate-Marking Method is - supported."; + supported."; reference - "RFC 9341: Alternate-Marking Method; - RFC 9342: Clustered Alternate-Marking Method"; + "RFC 9341: Alternate-Marking Method; + RFC 9342: Clustered Alternate-Marking Method"; } /* @@ -116,7 +116,7 @@ module ietf-altmark { description "Base identity to represent the protocol. It's used to indicate the protocol for the application of the AltMark - method."; + method."; } identity ipv6 { @@ -133,7 +133,7 @@ module ietf-altmark { "The AltMark method is applied to SRH."; reference "[I-D.fz-spring-srv6-alt-mark]: Application of the - Alternate Marking Method to the Segment Routing Header"; + Alternate Marking Method to the Segment Routing Header"; } identity mpls { @@ -142,7 +142,7 @@ module ietf-altmark { "The AltMark method is applied to MPLS."; reference "[I-D.ietf-mpls-inband-pm-encapsulation]: Application of the - Alternate Marking Method to the MPLS Label Stack"; + Alternate Marking Method to the MPLS Label Stack"; } identity node-action { @@ -155,27 +155,27 @@ module ietf-altmark { base node-action; description "It indicates that the node must mark the AltMark data field, - according to the operations described in RFC 9341 and - RFC 9342"; + according to the operations described in RFC 9341 and + RFC 9342"; } identity action-unmarking { base node-action; description "It indicates that the node must unmark the AltMark data field, - according to the operations described in RFC 9341 and - RFC 9342"; + according to the operations described in RFC 9341 and + RFC 9342"; } identity action-read { base node-action; description "It indicates the node only reads the AltMark data, - according to the operations described in RFC 9341 and - RFC 9342"; + according to the operations described in RFC 9341 and + RFC 9342"; } - identity period { + identity measurement-period { description "It indicates the AltMark Period."; } @@ -271,7 +271,7 @@ module ietf-altmark { leaf ace-name { when "derived-from-or-self(../filter-type, - 'altmark:acl-filter')"; + 'altmark:acl-filter')"; type leafref { path "/acl:acls/acl:acl/acl:aces/acl:ace/acl:name"; } @@ -289,7 +289,7 @@ module ietf-altmark { default false; description "This object indicates that hop-by-hop measurements can be - enabled."; + enabled."; } leaf e2e-measurement { @@ -297,7 +297,7 @@ module ietf-altmark { default false; description "This object indicates that end-to-end measurements can be - enabled."; + enabled."; } } @@ -313,28 +313,28 @@ module ietf-altmark { take, i.e. marking/read/unmarking."; } - leaf period { + leaf measurement-period { type uint64; description "It specifies the AltMark marking period."; } - leaf altmark-flowmonid { + leaf flow-mon-id { type uint32; description "It specifies the FlowMonID. - A 20-bit flow identifier. The field is set at the marking node. - The FlowMonID can be uniformly assigned by a central controller - or algorithmically generated by the marking node. - The latter approach cannot guarantee the uniqueness of the - FlowMonID, yet the conflict probability is small due to the - large space. - FlowMonID is used to identify the flow and to correlate the - exported data of the same flow from multiple nodes and from - multiple packets."; + A 20-bit flow identifier. The field is set at the marking node. + The FlowMonID can be uniformly assigned by a central controller + or algorithmically generated by the marking node. + The latter approach cannot guarantee the uniqueness of the + FlowMonID, yet the conflict probability is small due to the + large space. + FlowMonID is used to identify the flow and to correlate the + exported data of the same flow from multiple nodes and from + multiple packets."; } - } + } grouping altmark-admin-config { description @@ -362,8 +362,8 @@ module ietf-altmark { config false; description "Describes information such as units or timestamp format - that assists monitoring systems in the interpretation of the - AltMark data."; + that assists monitoring systems in the interpretation of the + AltMark data."; leaf timestamp-type { type identityref { @@ -376,7 +376,7 @@ module ietf-altmark { key "if-name"; description "A list of available interfaces that support - Alternate-Marking."; + Alternate-Marking."; leaf if-name { type if:interface-ref; description "This is a reference to the Interface name."; @@ -401,7 +401,7 @@ module ietf-altmark { key "profile-name"; description "It describes the list of the AltMark profiles configured - on the node"; + on the node"; leaf profile-name { type string{ length "1..300"; @@ -414,7 +414,7 @@ module ietf-altmark { uses altmark-filter; description "The filter which is used to indicate the flow where - the AltMark is applied."; + the AltMark is applied."; } leaf method-type { @@ -432,22 +432,22 @@ module ietf-altmark { uses altmark-setup; - uses measurement-mode; + uses measurement-mode; leaf enable-loss-measurement { type boolean; - default false; + default false; description "If true, it indicates that loss measurements are - enabled."; + enabled."; } leaf enable-delay-measurement { type boolean; default false; - description + description "If true, it indicates that delay measurements are - enabled."; + enabled."; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-config-template@2025-05-28.yang b/experimental/ietf-extracted-YANG-modules/ietf-config-template@2025-05-28.yang new file mode 100644 index 000000000..cc6986268 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-config-template@2025-05-28.yang @@ -0,0 +1,82 @@ +module ietf-config-template { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-config-template"; + prefix ct; + + import ietf-yang-types { + prefix yang; + reference + "RFC 6991: Common YANG Data Types"; + } + + organization + "IETF NETMOD (Network Modeling) Working Group"; + contact + "WG Web: + WG List: + Author: Qiufang Ma + "; + + description + "This module defines a template list with a RPC to expand + the template. + + 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."; + + revision 2025-05-28 { + description + "Initial revision."; + reference + "RFC XXXX: YANG Templates"; + } + + container templates { + description + "Specifies the template parameters."; + list template { + key id; + description + "The list of templates managed on this device."; + leaf id { + type string; + description + "The identifier of the template that uniquely identifies a + template."; + } + leaf description { + type string; + description + "A textual description of the template."; + } + anydata content { + description + "inline template content."; + } + leaf last-modified { + type yang:timestamp; + config false; + description + "Timestamp when the template is modified last time."; + } + } + } +} 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@2023-05-01.yang index d816ea18b..301cea712 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@2023-05-01.yang @@ -1,16 +1,15 @@ module ietf-netconf-txid-nmda-compare { yang-version 1.1; - namespace - 'urn:ietf:params:xml:ns:yang:ietf-netconf-txid-nmda-compare'; + namespace + "urn:ietf:params:xml:ns:yang:ietf-netconf-txid-nmda-compare"; prefix ietf-netconf-txid-nmda-compare; import ietf-nmda-compare { prefix cmp; reference - "RFC 9144: Comparison of Network Management Datastore + "RFC 9144: Comparison of Network Management Datastore Architecture (NMDA) Datastores"; } - import ietf-netconf-txid { prefix ietf-netconf-txid; reference @@ -19,14 +18,12 @@ module ietf-netconf-txid-nmda-compare { organization "IETF NETCONF (Network Configuration) Working Group"; - contact "WG Web: WG List: Author: Jan Lindblad "; - description "NETCONF Transaction ID aware operations for NMDA Compare. @@ -49,7 +46,7 @@ module ietf-netconf-txid-nmda-compare { '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 2023-05-01 { description @@ -64,15 +61,17 @@ module ietf-netconf-txid-nmda-compare { txids to be returned."; uses ietf-netconf-txid:txid-grouping; } - augment "/cmp:compare/cmp:output/cmp:compare-response/" + - "cmp:differences/cmp:differences/cmp:yang-patch/cmp:edit" { + + augment "/cmp:compare/cmp:output/cmp:compare-response/" + + "cmp:differences/cmp:differences/cmp:yang-patch/cmp:edit" { description "This augmentation makes it possible for servers to return - txid-values."; + txid-values."; container most-recent { - description "The txid value returned by the server MUST be the - txid value pertaining to the target node in the source or - target datastores that is the most recent."; + description + "The txid value returned by the server MUST be the + txid value pertaining to the target node in the source or + target datastores that is the most recent."; uses ietf-netconf-txid:txid-value-grouping; } } 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@2022-04-01.yang index cb202b892..a83deefc7 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@2022-04-01.yang @@ -1,7 +1,7 @@ module ietf-netconf-txid-yang-push { yang-version 1.1; - namespace - 'urn:ietf:params:xml:ns:yang:ietf-netconf-txid-yang-push'; + namespace + "urn:ietf:params:xml:ns:yang:ietf-netconf-txid-yang-push"; prefix ietf-netconf-txid-yp; import ietf-subscribed-notifications { @@ -9,13 +9,11 @@ module ietf-netconf-txid-yang-push { reference "RFC 8639: Subscription to YANG Notifications"; } - import ietf-yang-push { prefix yp; reference "RFC 8641: Subscriptions to YANG Datastores"; } - import ietf-netconf-txid { prefix ietf-netconf-txid; reference @@ -24,14 +22,12 @@ module ietf-netconf-txid-yang-push { organization "IETF NETCONF (Network Configuration) Working Group"; - contact "WG Web: WG List: Author: Jan Lindblad "; - description "NETCONF Transaction ID aware operations for YANG Push. @@ -54,7 +50,7 @@ module ietf-netconf-txid-yang-push { '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-04-01 { description @@ -69,23 +65,26 @@ module ietf-netconf-txid-yang-push { that apply specifically to datastore updates to RPC input."; uses ietf-netconf-txid:txid-grouping; } + augment "/sn:modify-subscription/sn:input" { description "This augmentation adds additional subscription parameters specific to datastore updates."; uses ietf-netconf-txid:txid-grouping; } + augment "/sn:subscriptions/sn:subscription" { description "This augmentation adds additional subscription parameters specific to datastore updates."; uses ietf-netconf-txid:txid-grouping; } - augment "/yp:push-change-update/yp:datastore-changes/" + - "yp:yang-patch" { + + augment "/yp:push-change-update/yp:datastore-changes/" + + "yp:yang-patch" { description "This augmentation makes it possible for servers to return - txid-values."; + txid-values."; uses ietf-netconf-txid:txid-value-grouping; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid@2023-03-01.yang b/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid@2023-03-01.yang index 413dd2b74..aabbb0a63 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid@2023-03-01.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-netconf-txid@2023-03-01.yang @@ -1,39 +1,41 @@ module ietf-netconf-txid { yang-version 1.1; - namespace - 'urn:ietf:params:xml:ns:yang:ietf-netconf-txid'; + namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-txid"; prefix ietf-netconf-txid; import ietf-netconf { prefix nc; + reference + "RFC 6241: Network Configuration Protocol (NETCONF)"; } - import ietf-netconf-nmda { prefix ncds; + reference + "RFC 8342: Network Management Datastore Architecture (NMDA)"; } - import ietf-yang-structure-ext { prefix sx; + reference + "RFC 8791: YANG Data Structure Extensions."; } - import ietf-yang-types { prefix yang; + reference + "RFC 6991: Common YANG Data Types"; } organization "IETF NETCONF (Network Configuration) Working Group"; - contact "WG Web: WG List: Author: Jan Lindblad "; - description "NETCONF Transaction ID aware operations for NMDA. - 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 +54,7 @@ module ietf-netconf-txid { '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 2023-03-01 { description @@ -62,58 +64,60 @@ module ietf-netconf-txid { } feature last-modified { - description "Servers implementing this module MUST support the - etag txid mechanism. Servers MAY also support the - last-modified txid mechanism. Support is shown by announcing - this feature."; + description + "Servers implementing this module MUST support the + etag txid mechanism. Servers MAY also support the + last-modified txid mechanism. Support is shown by announcing + this feature."; } extension versioned-node { - description "This statement is used by servers to declare that a - the server is maintaining a Txid for the YANG node with this - statement. Which YANG nodes are versioned nodes may be useful - information for clients (especially during development). + description + "This statement is used by servers to declare that a + the server is maintaining a Txid for the YANG node with this + statement. Which YANG nodes are versioned nodes may be useful + information for clients (especially during development). - Servers are not required to use this statement to declare - which nodes are versioned nodes. + Servers are not required to use this statement to declare + which nodes are versioned nodes. - Example of use: + Example of use: - container interfaces { - ietf-netconf-txid:versioned-node; - ... - } + container interfaces { + ietf-netconf-txid:versioned-node; + ... + } "; } typedef etag-t { type string { - pattern ".* .*" { - modifier invert-match; + pattern '.* .*' { + modifier "invert-match"; } pattern '.*".*' { - modifier invert-match; + modifier "invert-match"; } - pattern ".*\\.*" { - modifier invert-match; + pattern '.*\.*' { + modifier "invert-match"; } } - description - "Unique Entity-tag txid value representing a specific - transaction. Could be any string that does not contain - spaces, double quotes or backslash. + description + "Unique Entity-tag txid value representing a specific + transaction. Could be any string that does not contain + spaces, double quotes or backslash. - The txid values '?', '!' and '=' have special meaning: + The txid values '?', '!' and '=' have special meaning: - '?' This txid value is used by clients and is + '?' This txid value is used by clients and is guaranteed not to match any txid on the server. - '!' This txid value used by servers to indicate + '!' This txid value used by servers to indicate the node in the candidate datastore has changed relative to the running datastore, but not yet received a new txid value on the server. - '=' This txid value used by servers to indicate + '=' This txid value used by servers to indicate that contents has been pruned due to txid match between client and server. "; @@ -124,19 +128,22 @@ module ietf-netconf-txid { type yang:date-and-time; type enumeration { enum ? { - description "Txid value used by clients that is - guaranteed not to match any txid on the server."; + description + "Txid value used by clients that is + guaranteed not to match any txid on the server."; } enum ! { - description "Txid value used by servers to indicate - the node in the candidate datastore has changed - relative to the running datastore, but not yet received - a new txid value on the server."; + description + "Txid value used by servers to indicate + the node in the candidate datastore has changed + relative to the running datastore, but not yet received + a new txid value on the server."; } enum = { - description "Txid value used by servers to indicate - that contents has been pruned due to txid match - between client and server."; + description + "Txid value used by servers to indicate + that contents has been pruned due to txid match + between client and server."; } } } @@ -150,20 +157,20 @@ module ietf-netconf-txid { type boolean; description "Indicates whether the client requests the server to include - a txid:etag txid attribute when the configuration has + a txid:etag txid attribute when the configuration has changed."; } leaf with-last-modified { - if-feature last-modified; + if-feature "last-modified"; type boolean; - description + description "Indicates whether the client requests the server to include - a txid:last-modified attribute when the configuration has + a txid:last-modified attribute when the configuration has changed."; } description - "Grouping for txid mechanisms, to be augmented into - rpcs that modify configuration data stores."; + "Grouping for txid mechanisms, to be augmented into + RPCs that modify configuration data stores."; } grouping txid-value-grouping { @@ -173,47 +180,47 @@ module ietf-netconf-txid { "Indicates server's txid value for a YANG node."; } leaf last-modified-value { - if-feature last-modified; + if-feature "last-modified"; type last-modified-t; description "Indicates server's txid value for a YANG node."; } description - "Grouping for txid mechanisms, to be augmented into - output of rpcs that return txid metadata for configuration + "Grouping for txid mechanisms, to be augmented into + output of RPCs that return txid metadata for configuration data stores."; } - augment /nc:edit-config/nc:input { + augment "/nc:edit-config/nc:input" { uses txid-grouping; description - "Injects the txid mechanisms into the - edit-config operation"; + "Injects the txid mechanisms into the + edit-config operation"; } - augment /nc:commit/nc:input { + augment "/nc:commit/nc:input" { uses txid-grouping; description - "Injects the txid mechanisms into the - commit operation"; + "Injects the txid mechanisms into the + commit operation"; } - augment /ncds:edit-data/ncds:input { + augment "/ncds:edit-data/ncds:input" { uses txid-grouping; description - "Injects the txid mechanisms into the - edit-data operation"; + "Injects the txid mechanisms into the + edit-data operation"; } sx:structure txid-value-mismatch-error-info { container txid-value-mismatch-error-info { description - "This error is returned by a NETCONF server when a client - sends a configuration change request, with the additional - condition that the server aborts the transaction if the - server's configuration has changed from what the client - expects, and the configuration is found not to actually - not match the client's expectation."; + "This error is returned by a NETCONF server when a client + sends a configuration change request, with the additional + condition that the server aborts the transaction if the + server's configuration has changed from what the client + expects, and the configuration is found not to actually + not match the client's expectation."; leaf mismatch-path { type instance-identifier; description @@ -223,15 +230,15 @@ module ietf-netconf-txid { leaf mismatch-etag-value { type etag-t; description - "Indicates server's txid value of the etag - attribute for one mismatching element."; + "Indicates server's txid value of the etag + attribute for one mismatching element."; } leaf mismatch-last-modified-value { - if-feature last-modified; + if-feature "last-modified"; type last-modified-t; description - "Indicates server's txid value of the last-modified - attribute for one mismatching element."; + "Indicates server's txid value of the last-modified + attribute for one mismatching element."; } } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-on-path-telemetry@2025-01-09.yang b/experimental/ietf-extracted-YANG-modules/ietf-on-path-telemetry@2025-06-30.yang similarity index 81% rename from experimental/ietf-extracted-YANG-modules/ietf-on-path-telemetry@2025-01-09.yang rename to experimental/ietf-extracted-YANG-modules/ietf-on-path-telemetry@2025-06-30.yang index 25aa836a9..a48556bb8 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-on-path-telemetry@2025-01-09.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-on-path-telemetry@2025-06-30.yang @@ -29,7 +29,10 @@ module ietf-on-path-telemetry { "WG Web: WG List: Author: giuseppe.fioccola@huawei.com - Author: zhoutianran@huawei.com"; + Author: zhoutianran@huawei.com + Author: zhuyq8@chinatelecom.cn + Author: zhangwq@chinatelecom.cn + Author: zhukeyi@huawei.com"; description "This YANG module specifies a vendor-independent data @@ -40,7 +43,6 @@ module ietf-on-path-telemetry { '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. @@ -55,7 +57,7 @@ module ietf-on-path-telemetry { (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself for full legal notices."; - revision 2025-01-09 { + revision 2025-06-30 { description "First revision."; reference "RFC XXXX: A YANG Data Model for On-path Telemetry"; } @@ -68,19 +70,19 @@ module ietf-on-path-telemetry { { description "This feature indicated that the Alternate-Marking Method is - supported."; + supported."; reference - "RFC 9341: Alternate-Marking Method; - RFC 9342: Clustered Alternate-Marking Method"; + "RFC 9341: Alternate-Marking Method; + RFC 9342: Clustered Alternate-Marking Method"; } feature pathdelay { description "This feature indicated that the Path Delay is - supported."; + supported."; reference - "[I-D.ietf-opsawg-ipfix-on-path-telemetry]"; + "[I-D.ietf-opsawg-ipfix-on-path-telemetry]"; } feature incremental-trace @@ -142,8 +144,8 @@ module ietf-on-path-telemetry { identity protocol { description "Base identity to represent the protocol. It's used to - indicate the protocol for the application of the On-Path Telemetry - method."; + indicate the protocol for the application of the On-Path Telemetry + method."; } identity ipv6 { @@ -152,7 +154,7 @@ module ietf-on-path-telemetry { "The On-Path Telemetry method is applied to IPv6 protocol."; reference "RFC 9343: IPv6 Application of the Alternate-Marking Method, - RFC 9486: In-situ OAM IPv6 Options"; + RFC 9486: In-situ OAM IPv6 Options"; } identity srh { @@ -161,7 +163,7 @@ module ietf-on-path-telemetry { "The On-Path Telemetry method is applied to SRH."; reference "[I-D.fz-spring-srv6-alt-mark]: Application of the - Alternate Marking Method to the Segment Routing Header"; + Alternate Marking Method to the Segment Routing Header"; } identity mpls { @@ -170,7 +172,7 @@ module ietf-on-path-telemetry { "The On-Path Telemetry method is applied to MPLS."; reference "[I-D.ietf-mpls-inband-pm-encapsulation]: Application of the - Alternate Marking Method to the MPLS Label Stack"; + Alternate Marking Method to the MPLS Label Stack"; } identity nsh { @@ -192,24 +194,24 @@ module ietf-on-path-telemetry { base node-action; description "It indicates that the node must mark the AltMark data field, - according to the operations described in RFC 9341 and - RFC 9342"; + according to the operations described in RFC 9341 and + RFC 9342"; } identity action-unmarking { base node-action; description "It indicates that the node must unmark the AltMark data field, - according to the operations described in RFC 9341 and - RFC 9342"; + according to the operations described in RFC 9341 and + RFC 9342"; } identity action-read { base node-action; description "It indicates the node only reads the AltMark data, - according to the operations described in RFC 9341 and - RFC 9342"; + according to the operations described in RFC 9341 and + RFC 9342"; } identity action-encapsulate { @@ -230,12 +232,12 @@ module ietf-on-path-telemetry { "It indicates the node is to transit the IOAM packet"; } - identity period { + identity measurement-period { description "It indicates the On-Path Telemetry Period."; } - identity period-number { + identity measurement-period-number { description "It indicates the Period Number."; } @@ -281,7 +283,6 @@ module ietf-on-path-telemetry { description "To specify timestamps for delay according to RFC 9341"; } - /* * TYPE DEFINITIONS */ @@ -347,16 +348,6 @@ module ietf-on-path-telemetry { * GROUP DEFINITIONS */ - grouping timestamp { - description - "Grouping for identifying the time."; - leaf timestamp { - type yang:date-and-time; - description - "Specify the time."; - } - } - grouping telemetry-filter { description "A grouping for On-path Telemetry filter definition"; @@ -367,7 +358,7 @@ module ietf-on-path-telemetry { leaf ace-name { when "derived-from-or-self(../filter-type, - 'on-path-telemetry:acl-filter')"; + 'on-path-telemetry:acl-filter')"; type leafref { path "/acl:acls/acl:acl/acl:aces/acl:ace/acl:name"; } @@ -387,31 +378,32 @@ module ietf-on-path-telemetry { take, i.e. marking/read/unmarking/encapsulate/transit/decapsulate."; } - leaf period { + leaf measurement-period { type uint64; description "It specifies the On-path Telemetry period. - It is the marking period for AltMark."; + It is the marking period for AltMark."; } - leaf period-number { + leaf measurement-period-number { type uint64; description "It specifies the On-path Telemetry period number."; } - leaf flowmonid { + leaf flow-mon-id { type uint32; description "It specifies the 20-bit FlowMonID."; } + leaf method-type { type altmark-method-type; description "It specifies the AltMark method type."; } - } + } grouping loss-counters { description @@ -440,7 +432,7 @@ module ietf-on-path-telemetry { "Total outbound bytes of the period according to RFC 9341"; } - } + } grouping delay-timestamps { description @@ -461,7 +453,7 @@ module ietf-on-path-telemetry { "To specify the sequence number of the delay packet for delay measurements"; } } - } + } grouping path-delay-metrics { description @@ -483,66 +475,70 @@ module ietf-on-path-telemetry { description "max path delay as per [I-D.ietf-opsawg-ipfix-on-path-telemetry]"; } - leaf path-delay-sum { type uint64; description "sum of the path delay as per [I-D.ietf-opsawg-ipfix-on-path-telemetry]"; } - } + } - grouping ioam-incremental-tracing-data { + grouping ioam-incremental-tracing-data-list { description "A grouping for incremental tracing data."; - leaf incremental-tracing-data { - type ioam-trace-data; - description - "This object indicates the incremental tracing data."; + container ioam-incremental-tracing { + description + "The list of incremental tracing data"; + leaf-list incremental-tracing { + type ioam-trace-data; + description + "This object indicates the incremental tracing data."; + } } } - grouping ioam-preallocated-tracing-data { + + grouping ioam-preallocated-tracing-data-list { description - "A grouping for pre-allocated tracing data."; + "A grouping for the list of pre-allocated tracing data."; - leaf preallocated-tracing-data { - type ioam-trace-data; - description - "This object indicates the preallocated-tracing-data."; - } + leaf-list preallocated-tracing { + type ioam-trace-data; + description + "This object indicates the preallocated tracing data."; + } } - grouping ioam-direct-export-tracing-data { + grouping ioam-direct-export-tracing-data-list { description - "A grouping for direct export data."; + "A grouping for the list of direct export data."; - leaf direct-export-data { - type ioam-trace-data; - description - "This object indicates the direct export data."; - } + leaf-list direct-export { + type ioam-trace-data; + description + "This object indicates the direct export data."; + } } - grouping ioam-edge-to-edge-data { + grouping ioam-proof-of-transit-data-list { description - "A grouping for edge-to-edge data."; + "A grouping for the list of proof of transit data."; - leaf e2e-data { - type ioam-e2e-data; - description - "This object indicates the edge-to-edge data."; - } + leaf-list proof-of-transit { + type ioam-pot-data; + description + "This object indicates the proof of transit data."; + } } - grouping ioam-proof-of-transit-data { + grouping ioam-edge-to-edge-data-list { description - "A grouping for proof of transit data."; + "A grouping for the list of edge-to-edge data."; - leaf pot-data { - type ioam-pot-data; - description - "This object indicates the proof of transit data."; - } + leaf-list edge-to-edge { + type ioam-e2e-data; + description + "This object indicates the edge to edge data."; + } } /* @@ -550,25 +546,19 @@ module ietf-on-path-telemetry { */ container on-path-telemetry-data { + config false; description "On-path Telemetry top level container"; - uses timestamp; - - container interfaces { - description - "Contains the list of available interfaces that support - Alternate-Marking."; - list interface { key "if-name"; description - "It describes the list of the interfaces activated for AltMark"; + "It contains the list of the interfaces activated for AltMark and IOAM"; leaf if-name { type if:interface-ref; description "This is a reference to the Interface name."; } - leaf profile-name { + leaf profile-name { type string{ length "1..300"; } @@ -580,7 +570,7 @@ module ietf-on-path-telemetry { uses telemetry-filter; description "The filter which is used to indicate the flow where - the On-path Telemetry is applied."; + the On-path Telemetry is applied."; } leaf protocol-type { @@ -593,7 +583,7 @@ module ietf-on-path-telemetry { uses telemetry-setup; container altmark-loss-measurement { - if-feature altmark; + if-feature altmark; description "It reports the loss measurement data."; @@ -601,7 +591,7 @@ module ietf-on-path-telemetry { } container altmark-delay-measurement { - if-feature altmark; + if-feature altmark; description "It reports the delay measurement data."; @@ -609,7 +599,7 @@ module ietf-on-path-telemetry { } container path-delay { - if-feature pathdelay; + if-feature pathdelay; description "It reports the path delay measurements."; @@ -622,7 +612,7 @@ module ietf-on-path-telemetry { description "It reports the incremental tracing option data."; - uses ioam-incremental-tracing-data; + uses ioam-incremental-tracing-data-list; } container ioam-preallocated-tracing { @@ -631,7 +621,7 @@ module ietf-on-path-telemetry { description "It reports the preallocated tracing option data."; - uses ioam-preallocated-tracing-data; + uses ioam-preallocated-tracing-data-list; } container ioam-direct-export { @@ -640,7 +630,7 @@ module ietf-on-path-telemetry { description "It reports the direct-export option data"; - uses ioam-direct-export-tracing-data; + uses ioam-direct-export-tracing-data-list; } container ioam-proof-of-transit { @@ -649,7 +639,7 @@ module ietf-on-path-telemetry { description "It reports the PoT option data."; - uses ioam-proof-of-transit-data; + uses ioam-proof-of-transit-data-list; } container ioam-edge-to-edge { @@ -658,9 +648,8 @@ module ietf-on-path-telemetry { description "It reports the edge-to-edge option data."; - uses ioam-edge-to-edge-data; + uses ioam-edge-to-edge-data-list; } } - } - } + } } 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 9a4d5a731..e041e2cf4 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 @@ -30,7 +30,7 @@ module ietf-telemetry-message { "; description "This YANG module defines an extensible message schema to be used at - the data collection to transform Network Telemetry messages into + data collection to transform Network Telemetry messages towards external systems such as Message Brokers. Copyright (c) 2025 IETF Trust and the persons identified as @@ -122,7 +122,7 @@ module ietf-telemetry-message { } description "Network Telemetry protocol used to deliver the notification - between the network node and the data collection."; + between the network node and the data collector."; } container message { @@ -144,13 +144,17 @@ module ietf-telemetry-message { type yang:date-and-time; description "Timestamp when the Network Telemetry data has been exported - from network element."; + from network element. This can be obtained in YANG-Push from + event-time defined in draft-ietf-netconf-notif-envelope or + in IPFIX from the export time in the message header as + defined in RFC 7011 or in BMP from the timestamp in The + per-peer header as defined in RFC 7854."; } leaf collection-timestamp { type yang:date-and-time; mandatory true; description - "Timestamp when the data collection collected the Network + "Timestamp when the data collector collected the Network Telemetry data from the network element."; } leaf session-protocol { @@ -176,20 +180,20 @@ module ietf-telemetry-message { leaf collection-address { type inet:host; description - "Data collection IP address at which the Network Telemetry + "Data collector IP address at which the Network Telemetry data was collected."; } leaf collection-port { type inet:port-number; description - "Data collection transport port number at which the Network + "Data collector transport port number at which the Network Telemetry data was collected."; } } container data-collection-manifest { if-feature "data-collection-manifest"; description - "Contains the Data Manifest of the data collection which + "Contains the Data Manifest of the data collector which collected the Network Telemetry data."; uses p-mf:platform-details; } @@ -200,7 +204,7 @@ module ietf-telemetry-message { list labels { key "name"; description - "Abritrary labels assinged by the data collection."; + "Abritrary labels assigned by the data collector."; leaf name { type string { length "1..max"; From 1b0f28e588d222bd543daf54715685fc277781cc Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Fri, 4 Jul 2025 18:05:35 +0000 Subject: [PATCH 27/34] Cronjob - daily check of IETF modules. --- ...ang => iana-display-hints@2025-07-03.yang} | 99 +-- .../ietf-amm-base@2025-07-03.yang | 431 +++++++++++ .../ietf-amm-semtype@2025-07-03.yang | 263 +++++++ .../ietf-amm@2025-01-31.yang | 714 ------------------ .../ietf-amm@2025-07-03.yang | 337 +++++++++ .../ietf-bfd-met-keyed-isaac@2025-07-03.yang | 76 ++ ...g => ietf-dtnma-agent-acl@2025-07-03.yang} | 57 +- ....yang => ietf-dtnma-agent@2025-07-03.yang} | 521 +++++++++---- ...ng => ietf-fgotn-topology@2025-06-18.yang} | 22 +- ...yang => ietf-fgotn-tunnel@2025-06-18.yang} | 26 +- .../ietf-network-base@2025-07-03.yang | 212 ++++++ ...7-02.yang => ietf-ns-topo@2025-07-03.yang} | 6 +- ... => ietf-ns-underlay-path@2025-07-03.yang} | 6 +- ...ang => ietf-otn-slice-mpi@2025-07-03.yang} | 13 +- ...07.yang => ietf-otn-slice@2025-07-03.yang} | 18 +- ... ietf-udp-notif-transport@2025-06-04.yang} | 15 +- .../ietf-wdm-tunnel@2024-07-02.yang | 36 +- ...f-yang-library-augmentedby@2025-05-28.yang | 4 +- 18 files changed, 1829 insertions(+), 1027 deletions(-) rename experimental/ietf-extracted-YANG-modules/{iana-display-hints@2025-01-31.yang => iana-display-hints@2025-07-03.yang} (51%) create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-amm-base@2025-07-03.yang create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-amm-semtype@2025-07-03.yang delete mode 100644 experimental/ietf-extracted-YANG-modules/ietf-amm@2025-01-31.yang create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-amm@2025-07-03.yang create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-03.yang rename experimental/ietf-extracted-YANG-modules/{ietf-dtnma-agent-acl@2025-01-31.yang => ietf-dtnma-agent-acl@2025-07-03.yang} (86%) rename experimental/ietf-extracted-YANG-modules/{ietf-dtnma-agent@2025-01-31.yang => ietf-dtnma-agent@2025-07-03.yang} (57%) rename experimental/ietf-extracted-YANG-modules/{ietf-fgotn-topology@2025-04-08.yang => ietf-fgotn-topology@2025-06-18.yang} (91%) rename experimental/ietf-extracted-YANG-modules/{ietf-fgotn-tunnel@2025-04-08.yang => ietf-fgotn-tunnel@2025-06-18.yang} (92%) create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-network-base@2025-07-03.yang rename experimental/ietf-extracted-YANG-modules/{ietf-ns-topo@2024-07-02.yang => ietf-ns-topo@2025-07-03.yang} (96%) rename experimental/ietf-extracted-YANG-modules/{ietf-ns-underlay-path@2024-07-02.yang => ietf-ns-underlay-path@2025-07-03.yang} (97%) rename experimental/ietf-extracted-YANG-modules/{ietf-otn-slice-mpi@2024-07-07.yang => ietf-otn-slice-mpi@2025-07-03.yang} (92%) rename experimental/ietf-extracted-YANG-modules/{ietf-otn-slice@2024-07-07.yang => ietf-otn-slice@2025-07-03.yang} (95%) rename experimental/ietf-extracted-YANG-modules/{ietf-udp-notif-transport@2025-04-27.yang => ietf-udp-notif-transport@2025-06-04.yang} (92%) diff --git a/experimental/ietf-extracted-YANG-modules/iana-display-hints@2025-01-31.yang b/experimental/ietf-extracted-YANG-modules/iana-display-hints@2025-07-03.yang similarity index 51% rename from experimental/ietf-extracted-YANG-modules/iana-display-hints@2025-01-31.yang rename to experimental/ietf-extracted-YANG-modules/iana-display-hints@2025-07-03.yang index 693bb12dd..4d997075e 100644 --- a/experimental/ietf-extracted-YANG-modules/iana-display-hints@2025-01-31.yang +++ b/experimental/ietf-extracted-YANG-modules/iana-display-hints@2025-07-03.yang @@ -6,9 +6,12 @@ module iana-display-hints { import ietf-amm { prefix amm; } + import ietf-amm-base { + prefix amm-base; + } organization - "IANA" { + "Internet Assigned Numbers Authority (IANA)" { amm:enum 2; } contact @@ -21,9 +24,9 @@ module iana-display-hints { Tel: +1 310 301 5800 "; description - "This module defines intermediate and leaf IDENT objects usable as - display-hint annotations derived from the base - object. + "This module defines leaf IDENT objects usable as 'display-hint' + semantic type annotations derived from the base + object. The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', @@ -31,7 +34,7 @@ module iana-display-hints { 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 + 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 @@ -41,13 +44,13 @@ module iana-display-hints { Relating to IETF Documents (https://trustee.ietf.org/license-info). - The initial version of this YANG module is part of RFC XXXX + 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."; reference "https://www.iana.org/assignments/DTNMA-TBA"; - revision 2025-01-31 { + revision 2025-07-03 { description "Updated for latest ADM document."; reference @@ -56,70 +59,47 @@ module iana-display-hints { amm:enum 0; // Integer number hints - amm:ident base-integer { - amm:enum 1; - description - "Intermediate base IDENT of display hints for integer values. - Hints derived from this object SHALL only apply to built-in types - BYTE, INT, UINT, VAST, and UVAST."; - amm:base "//ietf/amm/IDENT/display-hint"; - } amm:ident display-int-dec { amm:enum 2; description "Display integers as decimal (base 10)."; - amm:base "//ietf/amm/IDENT/base-integer"; + amm:base "//ietf/amm-base/ident/display-hint-integer"; } amm:ident display-int-bin { amm:enum 3; description "Display integers as binary (base 2)."; - amm:base "//ietf/amm/IDENT/base-integer"; + amm:base "//ietf/amm-base/ident/display-hint-integer"; } amm:ident display-int-hex { amm:enum 4; description "Display integers as hexadecimal (base 16)."; - amm:base "//ietf/amm/IDENT/base-integer"; + amm:base "//ietf/amm-base/ident/display-hint-integer"; } // Floating-point number hints - amm:ident base-float { - amm:enum 5; - description - "Intermediate base IDENT of display hints for floating point values. - Hints derived from this object SHALL only apply to built-in types - REAL32 and REAL64."; - amm:base "//ietf/amm/IDENT/display-hint"; - } amm:ident display-float-dec { amm:enum 6; description "Display floating point values as decimal fraction."; - amm:base "//ietf/amm/IDENT/base-float"; + amm:base "//ietf/amm-base/ident/display-hint-float"; } amm:ident display-float-exp { amm:enum 7; description "Display floating point values as decimal exponential form."; - amm:base "//ietf/amm/IDENT/base-float"; + amm:base "//ietf/amm-base/ident/display-hint-float"; } amm:ident display-float-hex { amm:enum 8; description - "Display floating point values as hexadecimal exponential form."; - amm:base "//ietf/amm/IDENT/base-float"; + "Display floating point values as hexadecimal exponential + form."; + amm:base "//ietf/amm-base/ident/display-hint-float"; } // Byte-string hints - amm:ident base-bstr { - amm:enum 9; - description - "Intermediate base IDENT of display hints for byte string values. - Hints derived from this object SHALL only apply to built-in type - BYTESTR."; - amm:base "//ietf/amm/IDENT/display-hint"; - } amm:ident display-bstr-text { amm:enum 10; description @@ -127,7 +107,7 @@ module iana-display-hints { The base16 encoding is used otherwise."; reference "draft-ietf-dtn-ari"; - amm:base "//ietf/amm/IDENT/base-bstr"; + amm:base "//ietf/amm-base/ident/display-hint-bstr"; } amm:ident display-bstr-base16 { amm:enum 11; @@ -135,7 +115,7 @@ module iana-display-hints { "Display byte string values as base16-encoded."; reference "draft-ietf-dtn-ari"; - amm:base "//ietf/amm/IDENT/base-bstr"; + amm:base "//ietf/amm-base/ident/display-hint-bstr"; } amm:ident display-bstr-base64 { amm:enum 12; @@ -143,51 +123,26 @@ module iana-display-hints { "Display byte string values as base64url-encoded."; reference "draft-ietf-dtn-ari"; - amm:base "//ietf/amm/IDENT/base-bstr"; - } - amm:ident display-bstr-ipaddress { - amm:enum 16; - description - "Interpret byte string values as either IPv4 address (4-octet length) - or IPv6 address (16-octet length) and display as human-friendly text - according to RFC 4001 conventions."; - reference - "RFC 4001: Textual Conventions for Internet Network Addresses"; - amm:base "//ietf/amm/IDENT/base-bstr"; - } - amm:ident display-bstr-uuid { - amm:enum 17; - description - "Interpret byte string values as UUID and display as human-friendly text - according to RFC 4122 conventions."; - reference - "RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace"; - amm:base "//ietf/amm/IDENT/base-bstr"; + amm:base "//ietf/amm-base/ident/display-hint-bstr"; } // TIME type (TP or TD built-ins) hints - amm:ident base-time { - amm:enum 13; - description - "Intermediate base IDENT of display hints for time values. - Hints derived from this object SHALL only apply to built-in types - TP and TD."; - amm:base "//ietf/amm/IDENT/display-hint"; - } amm:ident display-time-text { amm:enum 14; description - "Display TP and TD values as text in accordance with RFC 3339."; + "Display TP and TD values as text in accordance with + RFC 3339 not using separator characters."; reference "draft-ietf-dtn-ari"; - amm:base "//ietf/amm/IDENT/base-time"; + amm:base "//ietf/amm-base/ident/display-hint-time"; } amm:ident display-time-dec { amm:enum 15; description - "Display TP and TD values as decimal fraction."; + "Display TP and TD values as decimal fraction with units of + seconds, which may or may not include a fractional part."; reference "draft-ietf-dtn-ari"; - amm:base "//ietf/amm/IDENT/base-time"; + amm:base "//ietf/amm-base/ident/display-hint-time"; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-amm-base@2025-07-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-amm-base@2025-07-03.yang new file mode 100644 index 000000000..593d6a907 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-amm-base@2025-07-03.yang @@ -0,0 +1,431 @@ +module ietf-amm-base { + yang-version 1.1; + namespace "ari://ietf/amm-base/"; + prefix amm-type; + + import ietf-amm { + prefix amm; + } + + organization + "Internet Engineering Task Force (IETF)" { + amm:enum 1; + } + contact + "WG Web: + WG List: + + Editor: Brian Sipos + "; + description + "This module defines base IDENT objects and base TYPEDEF + objects for the AMM. + + 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 XXXX + (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself + for full legal notices."; + reference + "draft-ietf-dtn-adm-yang"; + + revision 2025-07-03 { + description + "Updated for latest ADM document."; + reference + "draft-ietf-dtn-adm-yang"; + } + amm:enum 25; + + // abstract display hint hierarchy + amm:ident display-hint { + amm:enum 0; + description + "The base IDENT for objects usable as arguments for the + 'amm:display-hint' extension. + This object itself provides no display hint purpose."; + amm:abstract true; + } + amm:ident display-hint-integer { + amm:enum 1; + description + "Intermediate base IDENT of display hints for integer values. + Hints derived from this object SHALL only apply to built-in + types BYTE, INT, UINT, VAST, and UVAST."; + amm:abstract true; + amm:base "./IDENT/display-hint"; + } + amm:ident display-hint-float { + amm:enum 2; + description + "Intermediate base IDENT of display hints for floating point + values. + Hints derived from this object SHALL only apply to built-in + types REAL32 and REAL64."; + amm:abstract true; + amm:base "./IDENT/display-hint"; + } + amm:ident display-hint-bstr { + amm:enum 3; + description + "Intermediate base IDENT of display hints for byte string + values. + Hints derived from this object SHALL only apply to built-in + type BYTESTR."; + amm:abstract true; + amm:base "./IDENT/display-hint"; + } + amm:ident display-hint-time { + amm:enum 4; + description + "Intermediate base IDENT of display hints for time values. + Hints derived from this object SHALL only apply to built-in + types TP and TD."; + amm:abstract true; + amm:base "./IDENT/display-hint"; + } + + // Named type unions + amm:typedef type-ref { + amm:enum 0; + description + "Reference to either a built-in type or a TYPEDEF object."; + amm:union { + amm:type "/ARITYPE/aritype"; + amm:type "/ARITYPE/typedef"; + } + } + amm:typedef integer { + amm:enum 1; + description + "Any type which represents a discrete integer + This union order prefers smaller range and signed types."; + amm:union { + amm:type "/ARITYPE/byte"; + amm:type "/ARITYPE/int"; + amm:type "/ARITYPE/uint"; + amm:type "/ARITYPE/vast"; + amm:type "/ARITYPE/uvast"; + } + } + amm:typedef float { + amm:enum 2; + description + "Any type which represents a floating point number."; + amm:union { + amm:type "/ARITYPE/real32"; + amm:type "/ARITYPE/real64"; + } + } + amm:typedef numeric { + amm:enum 3; + description + "Any type which can be used with numeric expressions."; + amm:union { + amm:type "./TYPEDEF/integer"; + amm:type "./TYPEDEF/float"; + } + } + amm:typedef primitive { + amm:enum 4; + description + "Any primitive type."; + amm:union { + amm:type "/ARITYPE/null"; + amm:type "/ARITYPE/bool"; + amm:type "./TYPEDEF/numeric"; + amm:type "/ARITYPE/textstr"; + amm:type "/ARITYPE/bytestr"; + } + } + amm:typedef time { + amm:enum 5; + description + "Any type which can be used with time expressions."; + amm:union { + amm:type "/ARITYPE/TP"; + amm:type "/ARITYPE/TD"; + } + } + amm:typedef simple { + amm:enum 6; + description + "Any type which contains a single literal value (not nested)."; + amm:union { + amm:type "./TYPEDEF/PRIMITIVE"; + amm:type "./TYPEDEF/TIME"; + } + } + amm:typedef nested { + amm:enum 7; + description + "A literal type which contains other ARI values."; + amm:union { + amm:type "/ARITYPE/AC"; + amm:type "/ARITYPE/AM"; + amm:type "/ARITYPE/TBL"; + } + } + amm:typedef any { + amm:enum 8; + description + "Any value representable by an ARI."; + // These type names are built-in + amm:union { + amm:type "/ARITYPE/literal"; + amm:type "/ARITYPE/object"; + } + } + amm:typedef value-obj { + amm:enum 9; + description + "A reference to an object which can produce a value."; + amm:union { + amm:type "/ARITYPE/const"; + amm:type "/ARITYPE/edd"; + amm:type "/ARITYPE/var"; + } + } + amm:typedef nonce { + amm:enum 10; + description + "This type union is used to correlate Agent-Manager messages. + The union is defined in Section 4.2.5 of draft-ietf-dtn-amm."; + reference + "draft-ietf-dtn-amm"; + amm:union { + amm:type "/ARITYPE/bytestr"; + amm:type "/ARITYPE/uvast"; + amm:type "/ARITYPE/null"; + } + } + amm:typedef id-text { + amm:enum 25; + description + "This type is used to define and match object text names. + The type is defined in Section 4.2.5 of draft-ietf-dtn-amm."; + reference + "draft-ietf-dtn-amm"; + amm:type "/ARITYPE/textstr" { + pattern '[A-Za-z_][0-9A-Za-z_\-\.]*'; + } + } + amm:typedef id-int { + amm:enum 26; + description + "This type is used to define and match object integer + enumerations. + The type is defined in Section 4.2.5 of draft-ietf-dtn-amm."; + reference + "draft-ietf-dtn-amm"; + amm:type "/ARITYPE/int"; + } + + // operational semantic types + amm:typedef counter32 { + amm:enum 11; + description + "A 32-bit counter with an arbitrary initial value which can + only increment and never decrement. + When the value reaches the upper limit of the type it wraps + around to zero. + At least two samples of this value need to be compared over + time to be meaningful. + This type is consistent with the SMIv2 and YANG data types + of the same name."; + reference + "RFC 2578: Structure of Management Information Version 2 + RFC 6021: Common YANG Data Types"; + amm:type "/ARITYPE/uint"; + } + amm:typedef counter64 { + amm:enum 12; + description + "A 64-bit counter with an arbitrary initial value which can + only increment and never decrement. + When the value reaches the upper limit of the type it wraps + around to zero. + At least two samples of this value need to be compared over + time to be meaningful. + This type is consistent with the SMIv2 and YANG data types + of the same name."; + reference + "RFC 2578: Structure of Management Information Version 2 + RFC 6021: Common YANG Data Types"; + amm:type "/ARITYPE/uvast"; + } + amm:typedef gauge32 { + amm:enum 13; + description + "A 32-bit value sampling some quantized measurement. + The value can increase or decrease arbitrarily over time. + This type is consistent with the SMIv2 and YANG data types + of the same name."; + reference + "RFC 2578: Structure of Management Information Version 2 + RFC 6021: Common YANG Data Types"; + amm:type "/ARITYPE/int"; + } + amm:typedef gauge64 { + amm:enum 14; + description + "A 64-bit value sampling some quantized measurement. + The value can increase or decrease arbitrarily over time. + This type is consistent with the SMIv2 and YANG data types + of the same name."; + reference + "RFC 2578: Structure of Management Information Version 2 + RFC 6021: Common YANG Data Types"; + amm:type "/ARITYPE/vast"; + } + amm:typedef timestamp { + amm:enum 15; + description + "A time point representing the system clock at which a specific + occurrence happened. + The specific occurrence must be defined in the description + of any node defined using this type. + This type is consistent with the SMIv2 and YANG data types + of the same name."; + reference + "RFC 2579: Textual Conventions for SMIv2 + RFC 6021: Common YANG Data Types"; + amm:type "/ARITYPE/tp"; + } + + // Restrictions on AC item types for Evaluation and EXPR + amm:typedef eval-tgt { + amm:enum 16; + description + "A value which can be the target of an evaluation."; + amm:union { + // special case of literal value result + amm:type "./TYPEDEF/simple"; + // produces an eval-tgt + amm:type "./TYPEDEF/value-obj"; + amm:type "./TYPEDEF/expr"; + } + } + amm:typedef expr-item { + amm:enum 17; + description + "Each item of an EXPR list."; + amm:union { + amm:type "./TYPEDEF/simple"; + // produces an eval-tgt + amm:type "./TYPEDEF/value-obj"; + // treated as unary operator + amm:type "./TYPEDEF/type-ref"; + // substitutable label of an external context value + amm:type "/ARITYPE/label"; + amm:type "/ARITYPE/oper"; + } + } + amm:typedef expr { + amm:enum 18; + description + "The contents of an EXPR container."; + amm:ulist { + amm:type "./TYPEDEF/expr-item"; + } + } + + // Restrictions on AC item types for Execution and MAC + amm:typedef exec-tgt { + amm:enum 19; + description + "A value which can be the target of an execution."; + amm:union { + amm:type "./TYPEDEF/exec-item"; + amm:type "./TYPEDEF/mac"; + } + } + amm:typedef exec-item { + amm:enum 20; + description + "A reference to an object which can be executed. + The value-object must be typed to contain an exec-tgt."; + amm:union { + amm:type "/ARITYPE/ctrl"; + amm:type "./TYPEDEF/value-obj"; // produces an exec-tgt + } + } + amm:typedef mac { + amm:enum 21; + description + "The contents of a MAC container are an ordered list of + executable values."; + amm:ulist { + amm:type "./TYPEDEF/exec-item"; + } + } + + // Restrictions on AC item types for Reporting and RPTT + amm:typedef rpt-tgt { + amm:enum 22; + description + "A value which can be the target of reporting."; + amm:union { + amm:type "./TYPEDEF/value-obj"; // produces an RPTT + amm:type "./TYPEDEF/rptt"; + } + } + amm:typedef rptt-item { + amm:enum 23; + description + "Each item of a RPTT. + Each item references a value-producing object or contains an + expression to be evaluated."; + amm:union { + // produces the report item + amm:type "./TYPEDEF/value-obj"; + // evaluates to the report item + amm:type "./TYPEDEF/expr"; + } + } + amm:typedef rptt { + amm:enum 24; + description + "The contents of a report template, encoded as the sequence + of template items."; + amm:ulist { + amm:type "./TYPEDEF/rptt-item"; + } + } + + // Representation of ARI patterns as values + amm:ident bstr-ari-pattern { + amm:enum 5; + description + "Represent a binary form of ARI Pattern as human-friendly + text form, converting identifiers if possible based on ADM + and ODM contents."; + reference + "draft-ietf-dtn-adm-yang"; + amm:base "./ident/display-hint-bstr"; + } + amm:typedef ari-pattern { + amm:enum 27; + description + "The value type for an ARI pattern in binary form."; + reference + "draft-ietf-dtn-adm-yang"; + amm:type "/aritype/cbor" { + amm:display-hint "./ident/bstr-ari-pattern"; + } + } +} 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 new file mode 100644 index 000000000..c64eb2765 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-amm-semtype@2025-07-03.yang @@ -0,0 +1,263 @@ +module ietf-amm-semtype { + yang-version 1.1; + namespace "ari://ietf/amm-semtype/"; + prefix amm-semtype; + + import ietf-amm { + prefix amm; + } + + organization + "Internet Engineering Task Force (IETF)" { + amm:enum 1; + } + contact + "WG Web: + WG List: + + Editor: Brian Sipos + "; + description + "This module defines base and derived IDENT objects which + allow introspection of AMM semantic 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 XXXX + (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself + for full legal notices."; + reference + "draft-ietf-dtn-adm-yang"; + + revision 2025-07-03 { + description + "Updated for latest ADM document."; + reference + "draft-ietf-dtn-adm-yang"; + } + amm:enum 24; + + // Base IDENT objects + amm:ident semtype { + amm:enum 1; + description + "The base IDENT for semantic type introspection. + This object itself provides no type information."; + } + + // Semantic-type leaf IDENT objects + amm:ident type-use { + amm:enum 2; + description + "A named type use with possibe annotations and/or + constraints."; + amm:base "./IDENT/semtype"; + amm:parameter name { + description + "A built-in ARITYPE or reference to TYPEDEF object being + used."; + amm:type "//ietf/amm-base/TYPEDEF/type-ref"; + } + // FIXME include constraints and annotations also? + } + amm:ident ulist { + amm:enum 3; + description + "A uniformly-typed list within an AC."; + amm:base "./IDENT/semtype"; + amm:parameter item-type { + description + "The semantic type for all items."; + amm:type "./TYPEDEF/semtype"; + } + amm:parameter min-elements { + description + "The smallest valid item count for the AC."; + amm:default "null"; + amm:union { + amm:type "/ARITYPE/uvast"; + amm:type "/ARITYPE/null"; + } + } + amm:parameter max-elements { + description + "The largest valid item count for the AC."; + amm:default "null"; + amm:union { + amm:type "/ARITYPE/uvast"; + amm:type "/ARITYPE/null"; + } + } + } + amm:ident dlist { + amm:enum 4; + description + "A diverse-typed list within an AC."; + amm:base "./IDENT/semtype"; + amm:parameter item-types { + description + "The list of semantic type for each item in sequence within + the list. + The list itself is encoded as an AC in this parameter."; + amm:ulist { + amm:type "./TYPEDEF/semtype"; + } + } + } + amm:ident umap { + amm:enum 5; + description + "A uniformly-typed map within an AM."; + amm:base "./IDENT/semtype"; + amm:parameter key-type { + description + "The semantic type for each key."; + amm:type "./TYPEDEF/semtype"; + } + amm:parameter value-type { + description + "The semantic type for each value."; + amm:type "./TYPEDEF/semtype"; + } + } + amm:ident tblt { + amm:enum 6; + description + "A parameterized table template for data within a TBL."; + 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"; + } + } + amm:parameter min-elements { + description + "The smallest valid row count for the TBL."; + amm:default "null"; + amm:union { + amm:type "/ARITYPE/uvast"; + amm:type "/ARITYPE/null"; + } + } + amm:parameter max-elements { + description + "The largest valid row count for the TBL."; + amm:default "null"; + amm:union { + amm:type "/ARITYPE/uvast"; + amm:type "/ARITYPE/null"; + } + } + amm:parameter key { + description + "The primary key column names tuples in this table, + space-separated labels."; + amm:default "null"; + amm:union { + amm:type "/ARITYPE/textstr"; + amm:type "/ARITYPE/null"; + } + } + amm:parameter unique { + description + "The set of unique column name tuples in this table, as + space-separated labels. + The set itself is encoded as an AC in this parameter."; + amm:default "/AC/()"; + amm:ulist { + amm:type "/ARITYPE/textstr"; + } + } + } + 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 + "A list of alternative type choices."; + amm:base "./IDENT/semtype"; + amm:parameter choices { + description + "The semantic type for each choice. + The list itself is encoded as an AC in this parameter."; + amm:ulist { + amm:type "./TYPEDEF/semtype"; + } + } + } + amm:ident seq { + amm:enum 9; + description + "A sequence of similarly-typed items as a sub-sequence of an + AC value. + This is only usable in specific contexts, such as within a + ./IDENT/dlist parameter."; + amm:base "./IDENT/semtype"; + amm:parameter item-type { + description + "The semantic type for all items in the sequence."; + amm:type "./TYPEDEF/semtype"; + } + amm:parameter min-elements { + description + "The smallest valid item count for the sequence."; + amm:default "null"; + amm:union { + amm:type "/ARITYPE/uvast"; + amm:type "/ARITYPE/null"; + } + } + amm:parameter max-elements { + description + "The largest valid item count for the sequence."; + amm:default "null"; + amm:union { + amm:type "/ARITYPE/uvast"; + amm:type "/ARITYPE/null"; + } + } + } + + // Named types + amm:typedef semtype { + amm:enum 25; + description + "A parameterized reference to a semantic type object. + This is used for introspection of AMM objects."; + amm:type "/ARITYPE/ident" { + amm:base "./IDENT/semtype"; + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-amm@2025-01-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-amm@2025-01-31.yang deleted file mode 100644 index e86368953..000000000 --- a/experimental/ietf-extracted-YANG-modules/ietf-amm@2025-01-31.yang +++ /dev/null @@ -1,714 +0,0 @@ -module ietf-amm { - yang-version 1.1; - namespace "ari://ietf/amm/"; - prefix amm; - - organization - "IETF Delay Tolerant Networking (DTN) Working Group" { - amm:enum 1; - } - contact - "WG Web: - WG List: - - Editor: Brian Sipos - "; - description - "This module defines the DTN Management Architecture (DTNMA) - Application Management Model (AMM) extensions within YANG. - It also defines the base IDENT and TYPEDEF objects for the AMM. - - 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."; - reference - "draft-ietf-dtn-adm-yang"; - - revision 2025-01-31 { - description - "Updated for latest ADM document."; - reference - "draft-ietf-dtn-adm-yang"; - } - - /* - * This section contains extensions for common behavior of AMM objects. - */ - - extension enum { - argument value; - description - "An enumeration identifies an object within a namespace. - The argument to this statement is the integer value."; - } - - extension parameter { - argument name; - description - "The schema for a formal parameter of an object. - Order of parameters is significant within this statement."; - } - - extension default { - argument value; - description - "The literal value default for a parameter or result. - The argument is the text form of the ARI"; - } - - extension init-value { - argument value; - description - "The literal value of a CONST object, - initial state for a VAR object. - The argument is the text form of the ARI"; - } - - extension init-expr { - argument expr; - description - "An expression evaluated to initialize a VAR object. - The argument is the text form of the EXPR AC"; - } - - /* - * This section contains extensions for AMM object definitions. - */ - - extension typedef { - argument name; - description - "Definition of a TYPEDEF within an ADM. - The argument to this statement is the object name. - One of the type use substatements must be present."; - } - - extension ident { - argument name; - description - "Definition of an IDENT within an ADM. - The argument to this statement is the object name. - An 'base' substatement must be present."; - } - - extension base { - argument name; - description - "The argument is the base of an IDENT object."; - } - - extension const { - argument name; - description - "Definition of a CONST within an ADM. - The argument to this statement is the object name. - An 'init-value' substatement must be present."; - } - - extension ctrl { - argument name; - description - "Definition of a CTRL within an ADM. - The argument to this statement is the object name."; - } - - extension result { - argument name; - description - "A result value reported as a response to a control. - The substatement is the result type. - Each CTRL can have a single optional result."; - } - - extension edd { - argument name; - description - "Definition of an EDD within an ADM. - The argument to this statement is the object name."; - } - - extension oper { - argument name; - description - "Definition of an OPER within an ADM. - The argument to this statement is the object name."; - } - - extension operand { - argument name; - description - "An individual operand taken from the expression stack - during evaluation of the OPER. - Each substatement is an operand as a leaf (ARI). - Order of operands is significant within an object definition."; - } - - extension var { - argument name; - description - "Definition of a VAR within an ADM. - The argument to this statement is the object name."; - } - - /* - * This section contains extensions for defining semantic type instances. - */ - - extension type { - argument name; - description - "A reference to a built-in type or prefix-qualified typedef."; - } - - extension display-hint { - argument ident; - description - "Reference an IDENT object which indicates how a value should be - displayed for human consumption. - The base of the IDENT SHALL be the ./IDENT/display-hint object."; - } - - extension int-labels { - description - "Type narrowing for an integer to label enum values or bit positions."; - } - - extension cddl { - argument text; - description - "Type narrowing for a CBOR item in the form of CDDL syntax. - The argument to this statement is the actual CDDL text."; - } - - extension ulist { - description - "Type for an AC containing a list of uniform-typed values."; - } - - extension dlist { - description - "Type for an AC containing a list of diverse-typed sequences."; - } - - extension seq { - description - "A sequence of uniform-typed values within a 'dlist'."; - } - - extension umap { - description - "Type for an AM containing a set of uniform-typed key-value pairs."; - } - - extension keys { - description - "The type restriction for 'umap' keys."; - } - - extension values { - description - "The type restriction for 'umap' values."; - } - - extension tblt { - description - "Type for a table of values with a column schema."; - } - - extension column { - argument name; - description - "An individual column within a 'tblt' definition."; - } - - extension key { - argument columns; - description - "Names of columns composing the row key, separated by spaces, - within a 'tblt' definition."; - } - - extension unique { - argument columns; - description - "Names of columns composing a uniqueness constraint, separated by - spaces, within a 'tblt' definition."; - } - - extension union { - description - "Type for a union of other types."; - } - - amm:enum 0; - - // Base IDENT objects - amm:ident display-hint { - amm:enum 0; - description - "The base IDENT for objects usable as arguments for the - 'amm:display-hint' extension. - This object itself provides no display hint purpose."; - } - amm:ident semtype { - amm:enum 1; - description - "The base IDENT for semantic type introspection. - This object itself provides no type information."; - } - - // Semantic-type leaf IDENT objects - amm:ident semtype-use { - amm:enum 2; - description - "A named type use and possibly augment."; - amm:base "./IDENT/semtype"; - amm:parameter name { - description - "A built-in ARITYPE or reference to TYPEDEF object being used."; - amm:type "./TYPEDEF/type-ref"; - } - // FIXME include constraints and annotations also? - } - amm:ident semtype-ulist { - amm:enum 3; - description - "A uniformly-typed list within an AC."; - amm:base "./IDENT/semtype"; - amm:parameter item-type { - description - "The semantic type for all items."; - amm:type "./TYPEDEF/semtype"; - } - amm:parameter min-elements { - description - "The smallest valid item count for the AC."; - amm:default "null"; - amm:union { - amm:type "/ARITYPE/uvast"; - amm:type "/ARITYPE/null"; - } - } - amm:parameter max-elements { - description - "The largest valid item count for the AC."; - amm:default "null"; - amm:union { - amm:type "/ARITYPE/uvast"; - amm:type "/ARITYPE/null"; - } - } - } - amm:ident semtype-dlist { - amm:enum 4; - description - "A diverse-typed list within an AC."; - amm:base "./IDENT/semtype"; - amm:parameter item-types { - description - "The list of semantic type for each item in sequence within the list. - The list itself is encoded as an AC in this parameter."; - amm:ulist { - amm:type "./TYPEDEF/semtype"; - } - } - } - amm:ident semtype-umap { - amm:enum 5; - description - "A uniformly-typed map within an AM."; - amm:base "./IDENT/semtype"; - amm:parameter key-type { - description - "The semantic type for each key."; - amm:type "./TYPEDEF/semtype"; - } - amm:parameter value-type { - description - "The semantic type for each value."; - amm:type "./TYPEDEF/semtype"; - } - } - amm:ident semtype-tblt { - amm:enum 6; - description - "A parameterized table template for data within a TBL."; - 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/semtype-tblt-col"; - } - } - amm:parameter min-elements { - description - "The smallest valid row count for the TBL."; - amm:default "null"; - amm:union { - amm:type "/ARITYPE/uvast"; - amm:type "/ARITYPE/null"; - } - } - amm:parameter max-elements { - description - "The largest valid row count for the TBL."; - amm:default "null"; - amm:union { - amm:type "/ARITYPE/uvast"; - amm:type "/ARITYPE/null"; - } - } - amm:parameter key { - description - "The primary key column names in this table, as comma-separated labels."; - amm:default "null"; - amm:union { - amm:type "/ARITYPE/textstr"; - amm:type "/ARITYPE/null"; - } - } - amm:parameter unique { - description - "The set of unique column names in this table, as comma-separated labels. - The set itself is encoded as an AC in this parameter."; - amm:default "/AC/()"; - amm:ulist { - amm:type "/ARITYPE/textstr"; - } - } - } - amm:ident semtype-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 semtype-union { - amm:enum 8; - description - "A list of alternative type choices."; - amm:base "./IDENT/semtype"; - amm:parameter choices { - description - "The semantic type for each choice. - The list itself is encoded as an AC in this parameter."; - amm:ulist { - amm:type "./TYPEDEF/semtype"; - } - } - } - amm:ident semtype-seq { - amm:enum 9; - description - "A sequence of similarly-typed items as a sub-sequence of an AC. - This is only usable in specific contexts, such as within a - ./IDENT/semtype-dlist parameter."; - amm:base "./IDENT/semtype"; - amm:parameter item-type { - description - "The semantic type for all items in the sequence."; - amm:type "./TYPEDEF/semtype"; - } - amm:parameter min-elements { - description - "The smallest valid item count for the sequence."; - amm:default "null"; - amm:union { - amm:type "/ARITYPE/uvast"; - amm:type "/ARITYPE/null"; - } - } - amm:parameter max-elements { - description - "The largest valid item count for the sequence."; - amm:default "null"; - amm:union { - amm:type "/ARITYPE/uvast"; - amm:type "/ARITYPE/null"; - } - } - } - - // Named type unions - amm:typedef type-ref { - amm:enum 0; - description - "Reference to either a built-in type or a TYPEDEF object."; - amm:union { - amm:type "/ARITYPE/aritype"; - amm:type "/ARITYPE/typedef"; - } - } - amm:typedef semtype { - amm:enum 25; - description - "A parameterized reference to a semantic type object. - This is used for introspection of AMM objects."; - amm:type "/ARITYPE/ident" { - amm:base "./IDENT/semtype"; - } - } - amm:typedef integer { - amm:enum 1; - description - "Any type which represents a discrete integer - This union order prefers smaller range and signed types."; - amm:union { - amm:type "/ARITYPE/byte"; - amm:type "/ARITYPE/int"; - amm:type "/ARITYPE/uint"; - amm:type "/ARITYPE/vast"; - amm:type "/ARITYPE/uvast"; - } - } - amm:typedef float { - amm:enum 2; - description - "Any type which represents a floating point number."; - amm:union { - amm:type "/ARITYPE/real32"; - amm:type "/ARITYPE/real64"; - } - } - amm:typedef numeric { - amm:enum 3; - description - "Any type which can be used with numeric expressions."; - amm:union { - amm:type "./TYPEDEF/integer"; - amm:type "./TYPEDEF/float"; - } - } - amm:typedef primitive { - amm:enum 4; - description - "Any primitive type."; - amm:union { - amm:type "/ARITYPE/null"; - amm:type "/ARITYPE/bool"; - amm:type "./TYPEDEF/numeric"; - amm:type "/ARITYPE/textstr"; - amm:type "/ARITYPE/bytestr"; - } - } - amm:typedef time { - amm:enum 5; - description - "Any type which can be used with time expressions."; - amm:union { - amm:type "/ARITYPE/TP"; - amm:type "/ARITYPE/TD"; - } - } - amm:typedef simple { - amm:enum 6; - description - "Any type which contains a single literal value (not nested)."; - amm:union { - amm:type "./TYPEDEF/PRIMITIVE"; - amm:type "./TYPEDEF/TIME"; - } - } - amm:typedef nested { - amm:enum 7; - description - "A literal type which contains other ARI values."; - amm:union { - amm:type "/ARITYPE/AC"; - amm:type "/ARITYPE/AM"; - amm:type "/ARITYPE/TBL"; - } - } - amm:typedef any { - amm:enum 8; - description - "Any value representable by an ARI."; - // These type names are built-in - amm:union { - amm:type "/ARITYPE/literal"; - amm:type "/ARITYPE/object"; - } - } - amm:typedef value-obj { - amm:enum 9; - description - "A reference to an object which can produce a value."; - amm:union { - amm:type "/ARITYPE/const"; - amm:type "/ARITYPE/edd"; - amm:type "/ARITYPE/var"; - } - } - amm:typedef nonce { - amm:enum 10; - description - "This type union is used to correlate Agent-Manager messages."; - amm:union { - amm:type "/ARITYPE/bytestr"; - amm:type "/ARITYPE/uvast"; - amm:type "/ARITYPE/null"; - } - } - - // operational semantic types - amm:typedef counter32 { - amm:enum 11; - description - "A 32-bit counter with an arbitrary initial value that only increments. - When the value reaches the upper range it wraps around to zero. - At least two samples of this value need to be compared over time."; - amm:type "/ARITYPE/uint"; - } - amm:typedef counter64 { - amm:enum 12; - description - "A 64-bit counter with an arbitrary initial value that only increments. - When the value reaches the upper range it wraps around to zero. - At least two samples of this value need to be compared over time."; - amm:type "/ARITYPE/uvast"; - } - amm:typedef gauge32 { - amm:enum 13; - description - "A 32-bit value sampling some quantized measurement. - The value can increase or decrease arbitrarily over time."; - amm:type "/ARITYPE/int"; - } - amm:typedef gauge64 { - amm:enum 14; - description - "A 64-bit value sampling some quantized measurement. - The value can increase or decrease arbitrarily over time."; - amm:type "/ARITYPE/vast"; - } - amm:typedef timestamp { - amm:enum 15; - description - "A time point representing the system clock at which a specific - occurrence happened. - The specific occurrence must be defined in the description - of any node defined using this type."; - amm:type "/ARITYPE/tp"; - } - - // Restrictions on AC item types for Evaluation and EXPR - amm:typedef eval-tgt { - amm:enum 16; - description - "A value which can be the target of an evaluation."; - amm:union { - amm:type "./TYPEDEF/simple"; // special case of literal value result - amm:type "./TYPEDEF/value-obj"; // produces an eval-tgt - amm:type "./TYPEDEF/expr"; - } - } - amm:typedef expr-item { - amm:enum 17; - description - "Each item of an EXPR list."; - amm:union { - amm:type "./TYPEDEF/simple"; - amm:type "./TYPEDEF/value-obj"; // produces an eval-tgt - amm:type "./TYPEDEF/type-ref"; // treated as unary operator - amm:type "/ARITYPE/label"; // substitutable label - amm:type "/ARITYPE/oper"; - } - } - amm:typedef expr { - amm:enum 18; - description - "The contents of an EXPR container."; - amm:ulist { - amm:type "./TYPEDEF/expr-item"; - } - } - - // Restrictions on AC item types for Execution and MAC - amm:typedef exec-tgt { - amm:enum 19; - description - "A value which can be the target of an execution."; - amm:union { - amm:type "./TYPEDEF/exec-item"; - amm:type "./TYPEDEF/mac"; - } - } - amm:typedef exec-item { - amm:enum 20; - description - "A reference to an object which can be executed. - The value-object must be typed to contain an exec-tgt."; - amm:union { - amm:type "/ARITYPE/ctrl"; - amm:type "./TYPEDEF/value-obj"; // produces an exec-tgt - } - } - amm:typedef mac { - amm:enum 21; - description - "The contents of a MAC container are an ordered list of - executable values."; - amm:ulist { - amm:type "./TYPEDEF/exec-item"; - } - } - - // Restrictions on AC item types for Reporting and RPTT - amm:typedef rpt-tgt { - amm:enum 22; - description - "A value which can be the target of reporting."; - amm:union { - amm:type "./TYPEDEF/value-obj"; // produces an RPTT - amm:type "./TYPEDEF/rptt"; - } - } - amm:typedef rptt-item { - amm:enum 23; - description - "Each item of a RPTT. - Each item references a value-producing object or contains an - expression to be evaluated."; - amm:union { - amm:type "./TYPEDEF/value-obj"; - amm:type "./TYPEDEF/expr"; - } - } - amm:typedef rptt { - amm:enum 24; - description - "The contents of a report template, encoded as the sequence of items."; - amm:ulist { - amm:type "./TYPEDEF/rptt-item"; - } - } -} 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 new file mode 100644 index 000000000..9d19eafc4 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-amm@2025-07-03.yang @@ -0,0 +1,337 @@ +module ietf-amm { + yang-version 1.1; + namespace "ari://ietf/amm/"; + prefix amm; + + organization + "Internet Engineering Task Force (IETF)" { + amm:enum 1; + } + contact + "WG Web: + WG List: + + Editor: Brian Sipos + "; + description + "This module defines the DTN Management Architecture (DTNMA) + Application Management Model (AMM) extensions within YANG. + It also defines the base IDENT and TYPEDEF objects for the AMM. + + 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 XXXX + (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself + for full legal notices."; + reference + "draft-ietf-dtn-adm-yang"; + + revision 2025-07-03 { + description + "Updated for latest ADM document."; + reference + "draft-ietf-dtn-adm-yang"; + } + + /* + * This section contains extensions for common behavior of AMM + * objects. + */ + + extension enum { + argument value; + description + "An enumeration identifies an object within a namespace. + The argument to this statement is the integer value."; + } + + extension parameter { + argument name; + description + "The schema for a formal parameter of an object. + Order of parameters is significant within this statement."; + } + + extension default { + argument value; + description + "The literal value default for a parameter or result. + The argument is the text form of the ARI"; + } + + extension init-value { + argument value; + description + "The literal value of a CONST object, + initial state for a VAR object. + The argument is the text form of the ARI"; + } + + extension init-expr { + argument expr; + description + "An expression evaluated to initialize a VAR object. + The argument is the text form of the EXPR AC"; + } + + /* + * This section contains extensions for AMM object definitions. + */ + + extension typedef { + argument name; + description + "Definition of a TYPEDEF within an ADM. + The argument to this statement is the object name. + One of the type use substatements must be present."; + } + + extension ident { + argument name; + description + "Definition of an IDENT within an ADM. + The argument to this statement is the object name. + An 'base' substatement must be present."; + } + + extension abstract { + argument is-abstract; + description + "The boolean abstract marking of an IDENT object."; + } + + extension base { + argument name; + description + "The argument is the base of an IDENT object."; + } + + extension const { + argument name; + description + "Definition of a CONST within an ADM. + The argument to this statement is the object name. + An 'init-value' substatement must be present."; + } + + extension ctrl { + argument name; + description + "Definition of a CTRL within an ADM. + The argument to this statement is the object name."; + } + + extension result { + argument name; + description + "A result value reported as a response to a control. + The substatement is the result type. + Each CTRL can have a single optional result."; + } + + extension edd { + argument name; + description + "Definition of an EDD within an ADM. + The argument to this statement is the object name."; + } + + extension oper { + argument name; + description + "Definition of an OPER within an ADM. + The argument to this statement is the object name."; + } + + extension operand { + argument name; + description + "An individual operand taken from the expression stack + during evaluation of the OPER. + Each substatement is an operand as a leaf (ARI). + The order of operands is significant within an object + definition."; + } + + extension var { + argument name; + description + "Definition of a VAR within an ADM. + The argument to this statement is the object name."; + } + + extension sbr { + argument name; + description + "Definition of a SBR within an ADM. + The argument to this statement is the object name."; + } + + extension action { + argument exec-tgt; + description + "Definition of the action executed by a rule object. + The argument to this statement is the exec-tgt to execute."; + } + + extension condition { + argument expr; + description + "Condition evaluated by an SBR object to determine whether to + execute its action. + The argument to this statement is the expr to evaluate."; + } + + extension min-interval { + argument relative-time; + description + "The argument to this statement is a time-based ARI specifying + the minimum amount of time between condition evaluations + for an SBR object."; + } + + extension max-count { + argument count; + description + "The argument to this statement is the integer maximum + execution count for a rule object."; + } + + extension init-enabled { + argument state; + description + "The argument to this statement is the boolean initial enabled + state for a rule object."; + } + + extension tbr { + argument name; + description + "Definition of a TBR within an ADM. + The argument to this statement is the object name."; + } + + extension start { + argument time; + description + "The argument to this statement is the start time ARI for a + TBR object."; + } + + extension period { + argument relative-time; + description + "The argument to this statement is an ARI defining the period + for a TBR object."; + } + + /* + * This section contains extensions for defining semantic type + * instances. + */ + + extension type { + argument name; + description + "A reference to a built-in type or prefix-qualified typedef."; + } + + extension display-hint { + argument ident; + description + "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."; + } + + extension int-labels { + description + "Type narrowing for an integer to label enum values or bit + positions."; + } + + extension cddl { + argument text; + description + "Type narrowing for a CBOR item in the form of CDDL syntax. + The argument to this statement is the actual CDDL text."; + } + + extension ulist { + description + "Type for an AC containing a list of uniform-typed values."; + } + + extension dlist { + description + "Type for an AC containing a list of diverse-typed sequences."; + } + + extension seq { + description + "A sequence of uniform-typed values within a 'dlist'."; + } + + extension umap { + description + "Type for an AM containing a set of uniform-typed key-value + pairs."; + } + + extension keys { + description + "The type restriction for 'umap' keys."; + } + + extension values { + description + "The type restriction for 'umap' values."; + } + + extension tblt { + description + "Type for a table of values with a column schema."; + } + + extension column { + argument name; + description + "An individual column within a 'tblt' definition."; + } + + extension key { + argument columns; + description + "Names of columns composing the row key, separated by spaces, + within a 'tblt' definition."; + } + + extension unique { + argument columns; + description + "Names of columns composing a uniqueness constraint, separated + by spaces, within a 'tblt' definition."; + } + + extension union { + description + "Semantic type for a union of other types in substatements."; + } + + amm:enum 0; +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-03.yang new file mode 100644 index 000000000..236043e81 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-03.yang @@ -0,0 +1,76 @@ +module ietf-bfd-met-keyed-isaac { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-bfd-met-keyed-isaac"; + prefix "bfdmia"; + + import ietf-key-chain { + prefix key-chain; + reference + "RFC 8177: YANG Data Model for Key Chains."; + } + + organization + "IETF BFD Working Group"; + + contact + "WG Web: + WG List: + + Authors: Mahesh Jethanandani (mjethanandani@gmail.com) + Ashesh Mishra (ashesh@aalyria.com) + Jeffrey Haas (jhaas@juniper.net) + Alan Dekok (alan.dekok@inkbridge.io) + 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. + + 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."; + + revision "2025-07-03" { + description + "Initial Version."; + reference + "RFC XXXX: Meticulous Keyed ISAAC for BFD Authentication."; + } + + 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."; + reference + "RFC XXXX: Meticulous Keyed ISAAC for BFD Authentication."; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent-acl@2025-01-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent-acl@2025-07-03.yang similarity index 86% rename from experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent-acl@2025-01-31.yang rename to experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent-acl@2025-07-03.yang index b05285229..97db545f1 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent-acl@2025-01-31.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent-acl@2025-07-03.yang @@ -9,9 +9,12 @@ module ietf-dtnma-agent-acl { import ietf-dtnma-agent { prefix da; } + import ietf-network-base { + prefix network-base; + } organization - "IETF Delay Tolerant Networking (DTN) Working Group" { + "Internet Engineering Task Force (IETF)" { amm:enum 1; } contact @@ -24,7 +27,13 @@ module ietf-dtnma-agent-acl { "This module implements the DTN Management Architecture (DTNMA) Agent Access Control List (ACL) functionality. - Copyright (c) 2024 IETF Trust and the persons identified as + 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 @@ -40,7 +49,7 @@ module ietf-dtnma-agent-acl { reference "draft-ietf-dtn-adm-yang"; - revision 2025-01-31 { + revision 2025-07-03 { description "Updated for latest ADM document."; reference @@ -117,8 +126,8 @@ module ietf-dtnma-agent-acl { 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."; + "The default permission for any object if no specific access + are present in the ./EDD/access-list table."; amm:type "./TYPEDEF/tag"; } @@ -134,17 +143,20 @@ module ietf-dtnma-agent-acl { } amm:column group { description - "A cross-reference to the group getting access, or null to match all groups."; + "A cross-reference to the group getting access, or null to + match all groups."; amm:type "./TYPEDEF/optional-entry-id"; } amm:column object-pattern { description - "A pattern for objects being accessed, which may match all objects."; + "A pattern for objects being accessed, which may match + all objects."; amm:type "/ARITYPE/TEXTSTR"; } amm:column tag { description - "A pattern for objects being accessed, which may match all objects."; + "A pattern for objects being accessed, which may match + all objects."; amm:type "./TYPEDEF/tag"; } } @@ -152,7 +164,8 @@ module ietf-dtnma-agent-acl { amm:ctrl ensure-access { amm:enum 3; description - "Ensures that an access control permission is set for the given group and ARI pattern."; + "Ensures that an access control permission is set for the + given group and ARI pattern."; amm:parameter group { description "Identify the group being assigned the permission"; @@ -160,7 +173,8 @@ module ietf-dtnma-agent-acl { } amm:parameter object-pattern { description - "ARI pattern to determine which objects shall be assigned the permission"; + "ARI pattern to determine which objects shall be assigned + the permission"; amm:type "/ARITYPE/TEXTSTR"; } amm:parameter tag { @@ -199,17 +213,11 @@ module ietf-dtnma-agent-acl { // // Group management // - amm:typedef transport-endpoint-pattern { - amm:enum 5; - amm:type "/ARITYPE/IDENT" { - amm:base "//ietf/dtnma-agent/IDENT/transport-endpoint-pattern"; - } - } amm:edd current-group-id { amm:enum 3; description - "Get the group ID for the current execution context, which may be - the implicit Agent group ID zero."; + "Get the group ID for the current execution context, which may + be the implicit Agent group ID zero."; amm:type "./TYPEDEF/entry-id"; } amm:edd group-list { @@ -231,9 +239,10 @@ module ietf-dtnma-agent-acl { } amm:column members { description - "The list of members of the group, identified by matching transport endpoint."; + "The list of members of the group, identified by matching + transport endpoint."; amm:ulist { - amm:type "./TYPEDEF/transport-endpoint-pattern"; + amm:type "//ietf/network-base/TYPEDEF/endpoint-pattern"; } } } @@ -241,7 +250,8 @@ module ietf-dtnma-agent-acl { amm:ctrl ensure-group { amm:enum 5; description - "Ensure that after the control completes a group exists with the given information"; + "Ensure that after the control completes a group exists with + the given information"; amm:parameter id { description "Uniquely identify the group"; @@ -261,7 +271,8 @@ module ietf-dtnma-agent-acl { amm:ctrl ensure-group-members { amm:enum 7; description - "Ensure that the membership of a group has a specific set of endpoint patterns."; + "Ensure that the membership of a group has a specific set of + endpoint patterns."; amm:parameter id { description "Uniquely identify the group"; @@ -269,7 +280,7 @@ module ietf-dtnma-agent-acl { } amm:parameter members { amm:ulist { - amm:type "./TYPEDEF/transport-endpoint-pattern"; + amm:type "//ietf/network-base/TYPEDEF/endpoint-pattern"; } } amm:result error-code { diff --git a/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent@2025-01-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent@2025-07-03.yang similarity index 57% rename from experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent@2025-01-31.yang rename to experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent@2025-07-03.yang index 5a48fa2b6..6baf4ef8c 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent@2025-01-31.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-dtnma-agent@2025-07-03.yang @@ -6,9 +6,18 @@ module ietf-dtnma-agent { import ietf-amm { prefix amm; } + import ietf-amm-semtype { + prefix amm-semtype; + } + import ietf-amm-base { + prefix amm-base; + } + import ietf-network-base { + prefix network-base; + } organization - "IETF Delay Tolerant Networking (DTN) Working Group" { + "Internet Engineering Task Force (IETF)" { amm:enum 1; } contact @@ -21,7 +30,13 @@ module ietf-dtnma-agent { "This module implements the DTN Management Architecture (DTNMA) Agent core functionality. - Copyright (c) 2024 IETF Trust and the persons identified as + 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 @@ -37,7 +52,7 @@ module ietf-dtnma-agent { reference "draft-ietf-dtn-adm-yang"; - revision 2025-01-31 { + revision 2025-07-03 { description "Updated for latest ADM document."; reference @@ -57,7 +72,36 @@ module ietf-dtnma-agent { description "If true, listings will include objects from ADMs"; amm:default "false"; - amm:type "/ARITYPE/BOOL"; + amm:type "/aritype/BOOL"; + } + } + + grouping ensure-object-id { + description + "Common parameters for providing object reference to + ensure an object exists in an ODM. + + When this grouping is used, the logic operates according + to the following in order to succeed. + The parent 'namespace' SHALL refer to an existing ODM. + Both the text 'obj-name' and integer 'obj-enum' SHALL + either both not exist, in which case the object will be + created, or both are allocated to the same object, in + which case the object will be modified as needed."; + amm:parameter namespace { + description + "The parent ODM namespace."; + amm:type "/aritype/namespace"; + } + amm:parameter obj-name { + description + "Text name for the desired object."; + amm:type "//ietf/amm-base/typedef/id-text"; + } + amm:parameter obj-enum { + description + "Integer enumeration for the desired object."; + amm:type "//ietf/amm-base/typedef/id-int"; } } @@ -67,12 +111,12 @@ module ietf-dtnma-agent { amm:operand left { description "The left-side operand."; - amm:type "//ietf/amm/TYPEDEF/ANY"; + amm:type "//ietf/amm-base/typedef/ANY"; } amm:operand right { description "The left-side operand."; - amm:type "//ietf/amm/TYPEDEF/ANY"; + amm:type "//ietf/amm-base/typedef/ANY"; } } @@ -82,7 +126,7 @@ module ietf-dtnma-agent { amm:operand val { description "The single value."; - amm:type "//ietf/amm/TYPEDEF/NUMERIC"; + amm:type "//ietf/amm-base/typedef/NUMERIC"; } } @@ -92,12 +136,12 @@ module ietf-dtnma-agent { amm:operand left { description "The left-side operand."; - amm:type "//ietf/amm/TYPEDEF/NUMERIC"; + amm:type "//ietf/amm-base/typedef/NUMERIC"; } amm:operand right { description "The left-side operand."; - amm:type "//ietf/amm/TYPEDEF/NUMERIC"; + amm:type "//ietf/amm-base/typedef/NUMERIC"; } } @@ -107,7 +151,7 @@ module ietf-dtnma-agent { amm:result result { description "The single value."; - amm:type "//ietf/amm/TYPEDEF/NUMERIC"; + amm:type "//ietf/amm-base/typedef/NUMERIC"; } } @@ -117,7 +161,7 @@ module ietf-dtnma-agent { amm:operand val { description "The single value."; - amm:type "//ietf/amm/TYPEDEF/INTEGER"; + amm:type "//ietf/amm-base/typedef/INTEGER"; } } @@ -127,12 +171,12 @@ module ietf-dtnma-agent { amm:operand left { description "The left-side operand."; - amm:type "//ietf/amm/TYPEDEF/INTEGER"; + amm:type "//ietf/amm-base/typedef/INTEGER"; } amm:operand right { description "The left-side operand."; - amm:type "//ietf/amm/TYPEDEF/INTEGER"; + amm:type "//ietf/amm-base/typedef/INTEGER"; } } @@ -142,7 +186,7 @@ module ietf-dtnma-agent { amm:result result { description "The single value."; - amm:type "//ietf/amm/TYPEDEF/INTEGER"; + amm:type "//ietf/amm-base/typedef/INTEGER"; } } @@ -152,7 +196,7 @@ module ietf-dtnma-agent { amm:operand val { description "The single value."; - amm:type "/ARITYPE/BOOL"; + amm:type "/aritype/BOOL"; } } @@ -162,12 +206,12 @@ module ietf-dtnma-agent { amm:operand left { description "The left-side operand."; - amm:type "/ARITYPE/BOOL"; + amm:type "/aritype/BOOL"; } amm:operand right { description "The left-side operand."; - amm:type "/ARITYPE/BOOL"; + amm:type "/aritype/BOOL"; } } @@ -177,7 +221,7 @@ module ietf-dtnma-agent { amm:result result { description "The single value."; - amm:type "/ARITYPE/BOOL"; + amm:type "/aritype/BOOL"; } } @@ -186,13 +230,13 @@ module ietf-dtnma-agent { amm:enum 0; description "The vendor for this Agent implementation."; - amm:type "/ARITYPE/TEXTSTR"; + amm:type "/aritype/TEXTSTR"; } amm:edd sw-version { amm:enum 1; description "The version for this Agent implementation."; - amm:type "/ARITYPE/TEXTSTR"; + amm:type "/aritype/TEXTSTR"; } amm:edd capability { amm:enum 2; @@ -203,33 +247,33 @@ module ietf-dtnma-agent { amm:column org-name { description "The organization name containing the ADM"; - amm:type "/ARITYPE/TEXTSTR"; + amm:type "/aritype/TEXTSTR"; } amm:column org-enum { description "The organization enumeration containing the ADM"; - amm:type "/ARITYPE/VAST"; + amm:type "/aritype/VAST"; } amm:column model-name { description "The model name of the ADM"; - amm:type "/ARITYPE/TEXTSTR"; + amm:type "/aritype/TEXTSTR"; } amm:column model-enum { description "The model enumeration of the ADM"; - amm:type "/ARITYPE/VAST"; + amm:type "/aritype/VAST"; } amm:column revision { description "The specific revision the agent supports."; - amm:type "/ARITYPE/TEXTSTR"; + amm:type "/aritype/TEXTSTR"; } amm:column features { description "The features of the ADM which the agent supports."; amm:ulist { - amm:type "/ARITYPE/TEXTSTR"; + amm:type "/aritype/TEXTSTR"; } } } @@ -239,54 +283,60 @@ module ietf-dtnma-agent { description "A report template to indicate the presence of an agent on a network."; - amm:init-value "/AC/(./EDD/sw-vendor,./EDD/sw-version,./EDD/capability)"; - amm:type "//ietf/amm/TYPEDEF/RPTT"; + amm:init-value "/AC/(./EDD/sw-vendor,./EDD/sw-version," + + "./EDD/capability)"; + amm:type "//ietf/amm-base/typedef/RPTT"; } // Messaging counters amm:edd num-msg-rx { amm:enum 3; - amm:type "//ietf/amm/TYPEDEF/counter64"; + amm:type "//ietf/amm-base/typedef/counter64"; } amm:edd num-msg-rx-failed { amm:enum 4; - amm:type "//ietf/amm/TYPEDEF/counter64"; + amm:type "//ietf/amm-base/typedef/counter64"; } amm:edd num-msg-tx { amm:enum 5; - amm:type "//ietf/amm/TYPEDEF/counter64"; + amm:type "//ietf/amm-base/typedef/counter64"; + } + amm:edd num-msg-tx-failed { + amm:enum 15; + amm:type "//ietf/amm-base/typedef/counter64"; } // Execution counters and states amm:edd num-exec-started { amm:enum 6; - amm:type "//ietf/amm/TYPEDEF/counter64"; + amm:type "//ietf/amm-base/typedef/counter64"; } amm:edd num-exec-succeeded { amm:enum 7; - amm:type "//ietf/amm/TYPEDEF/counter64"; + amm:type "//ietf/amm-base/typedef/counter64"; } amm:edd num-exec-failed { amm:enum 8; - amm:type "//ietf/amm/TYPEDEF/counter64"; + amm:type "//ietf/amm-base/typedef/counter64"; } amm:edd exec-running { amm:enum 9; amm:tblt { amm:key "pid"; amm:column pid { - amm:type "/ARITYPE/UVAST"; + amm:type "/aritype/UVAST"; } amm:column target { - amm:type "//ietf/amm/TYPEDEF/ANY"; + amm:type "//ietf/amm-base/typedef/ANY"; } amm:column state { - amm:type "/ARITYPE/BYTE" { + amm:type "/aritype/BYTE" { amm:int-labels { enum waiting { value 0; description - "The execution is waiting on a condition or timer to continue."; + "The execution is waiting on a condition or timer + to continue."; } enum running { value 1; @@ -308,15 +358,15 @@ module ietf-dtnma-agent { amm:parameter condition { description "The condition to evaluate."; - amm:type "//ietf/amm/TYPEDEF/eval-tgt"; + amm:type "//ietf/amm-base/typedef/eval-tgt"; } amm:parameter on-truthy { description "The object to execute when the condition is truthy."; amm:default "null"; amm:union { - amm:type "//ietf/amm/TYPEDEF/exec-tgt"; - amm:type "/ARITYPE/NULL"; + amm:type "//ietf/amm-base/typedef/exec-tgt"; + amm:type "/aritype/NULL"; } } amm:parameter on-falsy { @@ -324,73 +374,74 @@ module ietf-dtnma-agent { "An optional execution when the condition is falsey."; amm:default "null"; amm:union { - amm:type "//ietf/amm/TYPEDEF/exec-tgt"; - amm:type "/ARITYPE/NULL"; + amm:type "//ietf/amm-base/typedef/exec-tgt"; + amm:type "/aritype/NULL"; } } amm:result branch { description "Indication of which branch was executed."; - amm:type "/ARITYPE/BOOL"; + amm:type "/aritype/BOOL"; } } amm:ctrl catch { amm:enum 1; description - "Attempt to execute a target, and if there is some failure catch it - and execute an alternative target."; + "Attempt to execute a target, and if there is some failure + catch it and execute an alternative target."; amm:parameter try { description "The object to execute."; - amm:type "//ietf/amm/TYPEDEF/exec-tgt"; + amm:type "//ietf/amm-base/typedef/exec-tgt"; } amm:parameter on-failure { description "An optional execution after failure."; amm:default "null"; amm:union { - amm:type "//ietf/amm/TYPEDEF/exec-tgt"; - amm:type "/ARITYPE/NULL"; + amm:type "//ietf/amm-base/typedef/exec-tgt"; + amm:type "/aritype/NULL"; } } amm:result try-success { description "True if the try target succeeded without exception."; - amm:type "/ARITYPE/BOOL"; + amm:type "/aritype/BOOL"; } } amm:ctrl wait-for { amm:enum 2; description - "This control causes the execution to pause for a given amount of time. - This is intended to be used within a macro to separate controls - in time."; + "This control causes the execution to pause for a given + amount of time. + This is intended to be used within a macro to separate + controls in time."; amm:parameter duration { - amm:type "/ARITYPE/TD"; + amm:type "/aritype/TD"; } } amm:ctrl wait-until { amm:enum 3; description - "This control causes the execution to pause until a specific absolute - time point. - This is intended to be used within a macro to separate controls - in time or as a first macro item to delay execution after the time - of reception."; + "This control causes the execution to pause until a specific + absolute time point. + This is intended to be used within a macro to separate + controls in time or as a first macro item to delay execution + after the time of reception."; amm:parameter time { - amm:type "/ARITYPE/TP"; + amm:type "/aritype/TP"; } } amm:ctrl wait-cond { amm:enum 4; description - "This control causes the execution to pause until a condition expression - evaluates to truthy. - This is intended to be used within a macro to separate controls - in time or as a first macro item to delay execution until the - condition is met."; + "This control causes the execution to pause until a condition + expression evaluates to truthy. + This is intended to be used within a macro to separate + controls in time or as a first macro item to delay execution + until the condition is met."; amm:parameter condition { - amm:type "//ietf/amm/TYPEDEF/eval-tgt"; + amm:type "//ietf/amm-base/typedef/eval-tgt"; } } @@ -403,28 +454,31 @@ module ietf-dtnma-agent { amm:parameter ref { description "An object to produce a value from."; - amm:type "//ietf/amm/TYPEDEF/VALUE-OBJ"; + amm:type "//ietf/amm-base/typedef/VALUE-OBJ"; } amm:result val { description "The produced value."; - amm:type "//ietf/amm/TYPEDEF/ANY"; + amm:type "//ietf/amm-base/typedef/ANY"; } } amm:ctrl report-on { amm:enum 6; description - "Agent-wide control to generate a report from a report template (RPTT). - The parameter is a single RPTT list that would be produced by an object. + "Agent-wide control to generate a report from a report + template (RPTT) value. + The parameter is a single RPTT list that would be produced + by an object. If used for more than one-shot diagnostics, defining a RPTT - (e.g. in a CONST within an ODM) is more efficient because the RPTT - value would not need be present in the EXECSET or RPTSET."; + (e.g. in a CONST within an ODM) is more efficient because + the RPTT value would not need be present in the EXECSET or + corresponding RPTSET."; amm:parameter template { description - "The reporting template, either as a RPTT value directly or as - a reference to a value-producing object (possibly parameterized) - which itself produces an RPTT value."; - amm:type "//ietf/amm/TYPEDEF/rpt-tgt"; + "The reporting template, either as a RPTT value directly or + as a reference to a value-producing object (possibly + parameterized) which itself produces an RPTT value."; + amm:type "//ietf/amm-base/typedef/rpt-tgt"; } amm:parameter destinations { description @@ -433,13 +487,82 @@ module ietf-dtnma-agent { limitations so each destination might see different report contents."; amm:union { - // FIXME: decide on whether this is a URI or a more complex ident hierarchy - amm:type "/ARITYPE/textstr"; - amm:type "/ARITYPE/null"; + amm:type "//ietf/network-base/typedef/endpoint-or-uri"; + amm:type "/aritype/null"; } } } + // Objects related to ODM handling + amm:edd odm-list { + amm:enum 16; + description + "A table of ODM within the agent."; + amm:tblt { + amm:key "org-name odm-name"; + amm:column org-name { + description + "The organization name containing the ODM"; + amm:type "//ietf/amm-base/typedef/id-text"; + } + amm:column org-enum { + description + "The organization enumeration containing the ODM"; + amm:type "//ietf/amm-base/typedef/id-int"; + } + amm:column model-name { + description + "The model name of the ODM"; + amm:type "//ietf/amm-base/typedef/id-text"; + } + amm:column model-enum { + description + "The model enumeration of the ODM"; + amm:type "//ietf/amm-base/typedef/id-int"; + } + amm:column revision { + description + "The specific revision the agent supports."; + amm:type "/aritype/TEXTSTR"; + } + } + } + amm:ctrl ensure-odm { + amm:enum 18; + description + "Ensure a specific ODM is present."; + amm:parameter org-name { + description + "The organization name containing the ODM"; + amm:type "//ietf/amm-base/typedef/id-text"; + } + amm:parameter org-id { + description + "The organization enumeration ID containing the ODM"; + amm:type "//ietf/amm-base/typedef/id-int"; + } + amm:parameter model-name { + description + "The model name containing the ODM"; + amm:type "//ietf/amm-base/typedef/id-text"; + } + amm:parameter model-id { + description + "The model enumeration ID containing the ODM"; + amm:type "//ietf/amm-base/typedef/id-int"; + } + } + amm:ctrl obsolete-odm { + amm:enum 19; + description + "Mark a specific ODM as obsolete if it is present."; + amm:parameter odm-ns { + description + "Namespace of the ODM"; + amm:type "/aritype/namespace"; + } + } + // Helpers for VAR amm:ctrl var-reset { amm:enum 7; @@ -448,7 +571,7 @@ module ietf-dtnma-agent { amm:parameter target { description "The VAR object to affect."; - amm:type "/ARITYPE/VAR"; + amm:type "/aritype/VAR"; } } amm:ctrl var-store { @@ -458,12 +581,12 @@ module ietf-dtnma-agent { amm:parameter target { description "The VAR object to affect."; - amm:type "/ARITYPE/VAR"; + amm:type "/aritype/VAR"; } amm:parameter value { description "The exact value to store in the VAR."; - amm:type "//ietf/amm/TYPEDEF/ANY"; + amm:type "//ietf/amm-base/typedef/ANY"; } } @@ -476,7 +599,7 @@ module ietf-dtnma-agent { amm:tblt { amm:key "obj"; amm:column obj { - amm:type "/ARITYPE/TYPEDEF"; + amm:type "/aritype/typedef"; } } } @@ -490,42 +613,40 @@ module ietf-dtnma-agent { amm:tblt { amm:key "obj"; amm:column obj { - amm:type "/ARITYPE/CONST"; + amm:type "/aritype/CONST"; } amm:column type { - amm:type "//ietf/amm/TYPEDEF/semtype"; + amm:type "//ietf/amm-semtype/typedef/semtype"; } } } amm:ctrl ensure-const { amm:enum 11; description - "Ensure a specific CONST is present."; - amm:parameter obj { - description - "A reference to a CONST within an ODM only."; - amm:type "/ARITYPE/CONST"; - } + "Ensure a specific CONST is present in an ODM."; + uses ensure-object-id; amm:parameter type { description "The type for the CONST object."; - amm:type "//ietf/amm/TYPEDEF/semtype"; + amm:type "//ietf/amm-semtype/typedef/semtype"; } amm:parameter init { description "A required initializer expression. - This expression is evaluated once at the time of object creation."; - amm:type "//ietf/amm/TYPEDEF/EXPR"; + This expression is evaluated once at the time of object + creation."; + amm:type "//ietf/amm-base/typedef/EXPR"; } } - amm:ctrl discard-const { + amm:ctrl obsolete-const { amm:enum 12; description - "Discard a specific CONST if it is present."; + "Mark a specific CONST as obsolete if it is present in an + ODM."; amm:parameter obj { description "A reference to a CONST within an ODM only."; - amm:type "/ARITYPE/CONST"; + amm:type "/aritype/CONST"; } } @@ -538,46 +659,43 @@ module ietf-dtnma-agent { amm:tblt { amm:key "obj"; amm:column obj { - amm:type "/ARITYPE/VAR"; + amm:type "/aritype/VAR"; } amm:column type { - amm:type "//ietf/amm/TYPEDEF/semtype"; + amm:type "//ietf/amm-semtype/typedef/semtype"; } } } amm:ctrl ensure-var { amm:enum 9; description - "Ensure a specific VAR is present."; - amm:parameter obj { - description - "A reference to a VAR within an ODM only."; - amm:type "/ARITYPE/VAR"; - } + "Ensure a specific VAR is present in an ODM."; + uses ensure-object-id; amm:parameter type { description "The type for the VAR object."; - amm:type "//ietf/amm/TYPEDEF/semtype"; + amm:type "//ietf/amm-semtype/typedef/semtype"; } amm:parameter init { description "An optional initializer expression. - This expression is evaluated once at the time of object creation."; + This expression is evaluated once at the time of object + creation."; amm:default "null"; amm:union { - amm:type "/ARITYPE/NULL"; - amm:type "//ietf/amm/TYPEDEF/EXPR"; + amm:type "/aritype/NULL"; + amm:type "//ietf/amm-base/typedef/EXPR"; } } } - amm:ctrl discard-var { + amm:ctrl obsolete-var { amm:enum 10; description - "Discard a specific VAR if it is present."; + "Mark a specific VAR as obsolete if it is present in an ODM."; amm:parameter obj { description "A reference to a VAR within an ODM only."; - amm:type "/ARITYPE/VAR"; + amm:type "/aritype/VAR"; } } @@ -587,27 +705,31 @@ module ietf-dtnma-agent { amm:enum 12; description "A table of SBR within the agent."; + uses obj-list-params; amm:tblt { amm:key "obj"; amm:column obj { - amm:type "/ARITYPE/SBR"; + amm:type "/aritype/SBR"; } amm:column action { description "The execution when this rule triggers."; - amm:type "//ietf/amm/TYPEDEF/MAC"; - } - amm:column start-time { - amm:type "//ietf/amm/TYPEDEF/TIME"; + amm:type "//ietf/amm-base/typedef/MAC"; } amm:column condition { - amm:type "//ietf/amm/TYPEDEF/EXPR"; + amm:type "//ietf/amm-base/typedef/EXPR"; } amm:column min-interval { - amm:type "/ARITYPE/TD"; + amm:type "/aritype/TD"; } amm:column max-count { - amm:type "/ARITYPE/UVAST"; + amm:type "/aritype/UVAST"; + } + amm:column init-enabled { + amm:type "/ARITYPE/BOOL"; + } + amm:column enabled { + amm:type "/ARITYPE/BOOL"; } } } @@ -616,28 +738,154 @@ module ietf-dtnma-agent { amm:enum 13; description "A table of TBR within the agent."; + uses obj-list-params; amm:tblt { amm:key "obj"; amm:column obj { - amm:type "/ARITYPE/TBR"; + amm:type "/aritype/TBR"; } amm:column action { description "The execution when this rule triggers."; - amm:type "//ietf/amm/TYPEDEF/MAC"; + amm:type "//ietf/amm-base/typedef/MAC"; } amm:column start-time { - amm:type "//ietf/amm/TYPEDEF/TIME"; + amm:type "//ietf/amm-base/typedef/TIME"; } amm:column period { - amm:type "/ARITYPE/TD"; + amm:type "/aritype/TD"; } amm:column max-count { - amm:type "/ARITYPE/UVAST"; + amm:type "/aritype/UVAST"; + } + amm:column init-enabled { + amm:type "/ARITYPE/BOOL"; + } + amm:column enabled { + amm:type "/ARITYPE/BOOL"; } } } + // CTRLs related to rules + amm:ctrl ensure-sbr { + if-feature "rules"; + amm:enum 13; + description + "Ensure that a state-based rule with the given identifiers + exists within an ODM."; + uses ensure-object-id; + amm:parameter action { + description + "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"; + } + amm:parameter min-interval { + amm:type "/ARITYPE/TD"; + } + amm:parameter max-count { + amm:type "/ARITYPE/UVAST"; + } + amm:parameter init-enabled { + amm:type "/ARITYPE/BOOL"; + } + amm:result res { + amm:type "/ARITYPE/UINT"; + } + } + amm:ctrl ensure-tbr { + if-feature "rules"; + amm:enum 14; + description + "Ensure that a time-based rule with the given identifiers + exists within an ODM."; + uses ensure-object-id; + amm:parameter action { + description + "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 period { + amm:type "/ARITYPE/TD"; + } + amm:parameter max-count { + amm:type "/ARITYPE/UVAST"; + } + amm:parameter max-count { + amm:type "/ARITYPE/UVAST"; + } + amm:parameter init-enabled { + amm:type "/ARITYPE/BOOL"; + } + amm:result res { + amm:type "/ARITYPE/UINT"; + } + } + amm:ctrl ensure-rule-enabled { + if-feature "rules"; + amm:enum 15; + description + "Ensure rule is enabled or disabled."; + amm:parameter obj-id { + description + "The rule to ensure enabled setting for."; + amm:union { + amm:type "/ARITYPE/SBR"; + amm:type "/ARITYPE/TBR"; + } + } + amm:parameter enabled { + amm:type "/ARITYPE/BOOL"; + } + amm:result res { + amm:type "/ARITYPE/uint"; + } + } + amm:ctrl reset-rule-enabled { + if-feature "rules"; + amm:enum 16; + description + "Reset rule enabled to initial setting."; + amm:parameter obj-id { + description + "The rule to reset enabled seetting for."; + amm:union { + amm:type "/ARITYPE/SBR"; + amm:type "/ARITYPE/TBR"; + } + } + amm:result res { + amm:type "/ARITYPE/UINT"; + } + } + amm:ctrl obsolete-rule { + if-feature "rules"; + amm:enum 17; + description + "Mark a specific SBR or TBR as obsolete if it is present in + an ODM."; + amm:parameter obj-id { + description + "A reference to a rule within an ODM only."; + amm:union { + amm:type "/ARITYPE/SBR"; + amm:type "/ARITYPE/TBR"; + } + } + amm:result success { + amm:type "/ARITYPE/BOOL"; + } + } + // Numeric operators amm:oper negate { amm:enum 0; @@ -739,7 +987,8 @@ module ietf-dtnma-agent { amm:enum 16; description "Compare two numbers by value. - The result is true if the left value is greater than the right. + The result is true if the left value is greater than the + right value. The operands are cast to the least compatible numeric type before the comparison."; uses numeric-binary-operands; @@ -784,8 +1033,8 @@ module ietf-dtnma-agent { description "Name or index of an individual column in a table."; amm:union { - amm:type "/ARITYPE/UVAST"; - amm:type "/ARITYPE/TEXTSTR"; + amm:type "/aritype/UVAST"; + amm:type "/aritype/TEXTSTR"; } } amm:oper tbl-filter { @@ -795,30 +1044,30 @@ module ietf-dtnma-agent { 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."; + 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/TYPEDEF/EXPR"; + 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."; + Each key is a column to compare and each value is an + expression with LABEL values substituted by column names."; amm:ulist { - amm:type "./TYPEDEF/column-id"; + amm:type "./typedef/column-id"; } } amm:operand in { description "Table to filter."; - amm:type "/ARITYPE/TBL"; + amm:type "/aritype/TBL"; } amm:result out { description "The filtered table."; - amm:type "/ARITYPE/TBL"; + amm:type "/aritype/TBL"; } } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-fgotn-topology@2025-04-08.yang b/experimental/ietf-extracted-YANG-modules/ietf-fgotn-topology@2025-06-18.yang similarity index 91% rename from experimental/ietf-extracted-YANG-modules/ietf-fgotn-topology@2025-04-08.yang rename to experimental/ietf-extracted-YANG-modules/ietf-fgotn-topology@2025-06-18.yang index 94433c5f7..58125ab36 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-fgotn-topology@2025-04-08.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-fgotn-topology@2025-06-18.yang @@ -79,7 +79,7 @@ module ietf-fgotn-topology { // RFC Ed.: update the date below with the date of RFC publication // and remove this note. - revision 2025-04-08 { + revision 2025-06-18 { description "initial version"; reference @@ -87,18 +87,6 @@ module ietf-fgotn-topology { Network"; } - augment "/nw:networks/nw:network/nw:node/nt:termination-point" + - "/tet:te" { - description - "specific augmentation of fgOTN termination point"; - leaf supported-fgotn-tp { - type boolean; - description - "It is used to indicate whether the TP can support fgOTN - switching capability."; - } - } - augment "/nw:networks/nw:network/nt:link/tet:te" + "/tet:te-link-attributes/tet:max-link-bandwidth" + "/tet:te-bandwidth/otnt:otn-bandwidth/otnt:odulist" { @@ -106,7 +94,7 @@ module ietf-fgotn-topology { "specific augmentation of fgOTN link on maximum link bandwidth"; leaf fgotn-bandwidth { - type string; + type uint16; description "It is used to indicate how much of the bandwidth has been allocated for the usage of fgOTN."; @@ -133,13 +121,13 @@ module ietf-fgotn-topology { } leaf odu-ts-number { - type string; + type uint16; description "The index of server ODUk channel"; } leaf fgotn-bandwidth { - type string; + type uint16; description "The unsreserved bandwidth of fgOTN in this server ODUk"; } @@ -165,7 +153,7 @@ module ietf-fgotn-topology { } leaf odu-ts-number { - type string; + type uint16; description "The index of server ODUk channel"; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-fgotn-tunnel@2025-04-08.yang b/experimental/ietf-extracted-YANG-modules/ietf-fgotn-tunnel@2025-06-18.yang similarity index 92% rename from experimental/ietf-extracted-YANG-modules/ietf-fgotn-tunnel@2025-04-08.yang rename to experimental/ietf-extracted-YANG-modules/ietf-fgotn-tunnel@2025-06-18.yang index 09b3095f8..1dd95c836 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-fgotn-tunnel@2025-04-08.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-fgotn-tunnel@2025-06-18.yang @@ -60,25 +60,13 @@ module ietf-fgotn-tunnel { // RFC Ed.: update the date below with the date of RFC publication // and remove this note. - revision 2025-04-08 { + revision 2025-06-18 { description "initial version"; reference "RFC XXXX: YANG Data Models for fine grain Optical Transport Network"; - } - - /** - augment "/te:te/te:tunnels/te:tunnel/te:primary-paths" + - "/te:primary-path/te:te-bandwidth/te:technology" + - "/otn-tnl:otn/otn-tnl:otn-bandwidth" { - leaf fgoduflex-bandwidth { - type string; - description - "The bandwidth of this fgOTN tunnel"; - } - } -**/ + } augment "/te:te/te:tunnels/te:tunnel/" + "te:te-bandwidth/te:technology/otn-tnl:otn" { @@ -100,7 +88,7 @@ module ietf-fgotn-tunnel { description "augmentation of fgOTN label"; leaf fgts-numbers { - type uint16; + type string; description "Augment fgOTN timeslot information of this label hop"; } @@ -115,7 +103,7 @@ module ietf-fgotn-tunnel { description "augmentation of fgOTN label"; leaf fgts-numbers { - type uint16; + type string; description "Augment fgOTN timeslot information of this label hop"; } @@ -129,7 +117,7 @@ module ietf-fgotn-tunnel { description "augmentation of fgOTN label"; leaf fgts-numbers { - type uint16; + type string; description "fgOTN timeslot information of this label hop"; } @@ -143,7 +131,7 @@ module ietf-fgotn-tunnel { description "augmentation of fgOTN label"; leaf fgts-numbers { - type uint16; + type string; description "fgOTN timeslot information of this label hop"; } @@ -156,7 +144,7 @@ module ietf-fgotn-tunnel { description "augmentation of fgOTN label"; leaf fgts-numbers { - type uint16; + type string; description "fgOTN timeslot information of this label hop"; } 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 new file mode 100644 index 000000000..89b52dc26 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-network-base@2025-07-03.yang @@ -0,0 +1,212 @@ +module ietf-network-base { + yang-version 1.1; + namespace "ari://ietf/network-base/"; + prefix network-base; + + import ietf-amm { + prefix amm; + } + import ietf-amm-base { + prefix amm-base; + } + + organization + "Internet Engineering Task Force (IETF)" { + amm:enum 1; + } + contact + "WG Web: + WG List: + + Editor: Brian Sipos + "; + description + "This module defines base IDENT objects for network-related + entities such as protocol endpoints. The base objects are + general purpose, and all derived objects are layer- and/or + protocol-specific with appropriate parameters. + + 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 XXXX + (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself + for full legal notices."; + reference + "draft-ietf-dtn-adm-yang"; + + revision 2025-07-03 { + description + "Updated for latest ADM document."; + reference + "draft-ietf-dtn-adm-yang"; + } + amm:enum 26; + + // General purpose network data types and forms + amm:typedef uri { + amm:enum 0; + description + "A specialization of the textstr type to only contain a single + Uniform Resource Identifier (URI) as defined by STD 66. + + Objects using the uri type MUST be in US-ASCII encoding, + and MUST be normalized as described by RFC 3986 Sections + 6.2.1, 6.2.2.1, and 6.2.2.2. All unnecessary + percent-encoding is removed, and all case-insensitive + characters are set to lowercase except for hexadecimal + digits, which are normalized to uppercase as described in + Section 6.2.2.1. + + 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)"; + amm:type "/aritype/textstr" { + // This pattern is on the normalized scheme + pattern '[a-z][a-z0-9+-.]*:.*'; + } + } + amm:ident display-bstr-uuid { + amm:enum 17; + description + "Interpret byte string values as UUID and display as + human-friendly text according to RFC 9562 conventions."; + reference + "RFC 9562: Universally Unique IDentifiers (UUIDs)"; + amm:base "//ietf/amm-base/IDENT/display-hint-bstr"; + } + amm:typedef uuid { + amm:enum 5; + description + "A specialization of the bytestr type to contain a binary + encoded UUID value. + Values of this type SHALL contain a valid UUID value + as defined in Section 4 of RFC 9562."; + reference + "RFC 9562: Universally Unique IDentifiers (UUIDs)"; + amm:type "/aritype/bytestr" { + length "16"; + } + } + amm:ident display-bstr-oid { + amm:enum 18; + description + "Interpret byte string values as ASN.1 BER-encoded OIDs + and display as human-friendly dotted-decimal form of + ITU-T X.660."; + reference + "ITU-T X.660-2011: General procedures and top arcs of the + international object identifier tree"; + amm:base "//ietf/amm-base/IDENT/display-hint-bstr"; + } + amm:typedef oid { + amm:enum 4; + description + "A specialization of the bytestr type to contain an ASN.1 + BER-encoded object identifier (OID) value. + This typedef gives no more specific AMM constraints on + the byte string value but does constrain it by these + requirements. + Values of this type SHALL contain valid BER-encoded OID + contents consistent with the definiton of CBOR tag 111 + but without the actual tag, as defined in Section 2.1 of + RFC 9090. + Values of this type always contain an absolute OID."; + reference + "RFC 9090: Concise Binary Object Representation (CBOR) Tags + for Object Identifiers + ITU-T X.660-2011: General procedures and top arcs of the + international object identifier tree + ITU-T X.690-2021: ASN.1 encoding rules: Specification of + Basic Encoding Rules (BER), Canonical Encoding + Rules (CER) and Distinguished Encoding Rules (DER)"; + amm:type "/aritype/bytestr" { + length "2..max"; + } + } + + // Abstract base IDENTs and types + amm:ident abstract-endpoint { + amm:enum 0; + description + "This object defines an abstract base for all general purpose + network/transport endpoint identifiers as seen from outside + the endpoint node. + Uses where the endpoint is being bound to from inside the + node might require additional parameters outside of what is + present in this object hierarchy."; + amm:abstract true; + } + amm:typedef endpoint { + amm:enum 1; + description + "A value which references a non-abstract derived object + for specific types of network or transport endpoints."; + amm:type "/aritype/ident" { + amm:base "./IDENT/abstract-endpoint"; + } + } + amm:typedef endpoint-or-uri { + amm:enum 3; + description + "A value which is either a specific parameterized endpoint + IDENT reference or a text URI value identifying an endpoint."; + amm:union { + amm:type "./typedef/endpoint"; + amm:type "./typedef/uri"; + } + } + amm:ident abstract-endpoint-pattern { + amm:enum 1; + 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 pattern SHALL specify in its descriptions which types + of endpoints can possibly match the pattern."; + amm:abstract true; + } + amm:typedef endpoint-pattern { + amm:enum 2; + description + "A value which references a non-abstract derived pattern object + for specific types of network or transport endpoints."; + amm:type "/aritype/ident" { + amm:base "./IDENT/abstract-endpoint-pattern"; + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-ns-topo@2024-07-02.yang b/experimental/ietf-extracted-YANG-modules/ietf-ns-topo@2025-07-03.yang similarity index 96% rename from experimental/ietf-extracted-YANG-modules/ietf-ns-topo@2024-07-02.yang rename to experimental/ietf-extracted-YANG-modules/ietf-ns-topo@2025-07-03.yang index f646c80c6..343dba837 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-ns-topo@2024-07-02.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-ns-topo@2025-07-03.yang @@ -18,8 +18,8 @@ module ietf-ns-topo { import ietf-network-slice-service { prefix "ietf-nss"; reference - "draft-ietf-teas-ietf-network-slice-nbi-yang-10: - IETF Network Slice Service YANG Model"; + "draft-ietf-teas-ietf-network-slice-nbi-yang-25: + A YANG Data Model for the RFC 9543 Network Slice Service"; } organization @@ -63,7 +63,7 @@ module ietf-ns-topo { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-07-02 { + revision 2025-07-03 { description "Initial revision"; reference "RFC XXXX: IETF Network Slice Topology YANG Data Model"; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-ns-underlay-path@2024-07-02.yang b/experimental/ietf-extracted-YANG-modules/ietf-ns-underlay-path@2025-07-03.yang similarity index 97% rename from experimental/ietf-extracted-YANG-modules/ietf-ns-underlay-path@2024-07-02.yang rename to experimental/ietf-extracted-YANG-modules/ietf-ns-underlay-path@2025-07-03.yang index e71708811..233e4ab64 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-ns-underlay-path@2024-07-02.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-ns-underlay-path@2025-07-03.yang @@ -18,8 +18,8 @@ module ietf-ns-underlay-path { import ietf-network-slice-service { prefix "ietf-nss"; reference - "draft-ietf-teas-ietf-network-slice-nbi-yang-05: - IETF Network Slice Service YANG Model"; + "draft-ietf-teas-ietf-network-slice-nbi-yang-25: + A YANG Data Model for the RFC 9543 Network Slice Service"; } organization @@ -63,7 +63,7 @@ module ietf-ns-underlay-path { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-07-02 { + revision 2025-07-03 { description "Initial revision"; reference "RFC XXXX: IETF Network Slice Topology YANG Data Model"; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2024-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2025-07-03.yang similarity index 92% rename from experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2024-07-07.yang rename to experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2025-07-03.yang index 963147938..e47c82b04 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2024-07-07.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2025-07-03.yang @@ -25,15 +25,16 @@ module ietf-otn-slice-mpi { import ietf-otn-topology { prefix "otnt"; reference - "I-D.ietf-ccamp-otn-topo-yang: A YANG Data Model - for Optical Transport Network Topology"; + "draft-ietf-ccamp-otn-topo-yang-20: + RFC YYYY: A YANG Data Model for Optical Transport + Network Topology"; } import ietf-layer1-types { prefix "l1-types"; reference - "I-D.ietf-ccamp-layer1-types: A YANG Data Model - for Layer 1 Types"; + "draft-ietf-ccamp-layer1-types-18: + RFC ZZZZ: A YANG Data Model for Layer 1 Types"; } organization @@ -74,11 +75,11 @@ module ietf-otn-slice-mpi { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision "2024-07-07" { + revision "2025-07-03" { description "Latest revision of MPI YANG model for OTN slicing."; reference - "draft-ietf-ccamp-yang-otn-slicing-08: Framework and Data + "draft-ietf-ccamp-yang-otn-slicing-09: Framework and Data Model for OTN Network Slicing"; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-otn-slice@2024-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-otn-slice@2025-07-03.yang similarity index 95% rename from experimental/ietf-extracted-YANG-modules/ietf-otn-slice@2024-07-07.yang rename to experimental/ietf-extracted-YANG-modules/ietf-otn-slice@2025-07-03.yang index e1bc4b43d..19f66304b 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-otn-slice@2024-07-07.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-otn-slice@2025-07-03.yang @@ -18,22 +18,23 @@ module ietf-otn-slice { import ietf-layer1-types { prefix "l1-types"; reference - "draft-ietf-ccamp-layer1-types-14: - A YANG Data Model for Layer 1 Types"; + "draft-ietf-ccamp-layer1-types-18: + RFC ZZZZ: A YANG Data Model for Layer 1 Types"; } import ietf-network-slice-service { prefix "ietf-nss"; reference - "draft-ietf-teas-ietf-network-slice-nbi-yang-05: - IETF Network Slice Service YANG Model"; + "draft-ietf-teas-ietf-network-slice-nbi-yang-25: + RFC VVVV: A YANG Data Model for the RFC 9543 Network Slice + Service"; } import ietf-ns-topo { prefix "ns-topo"; reference - "draft-liu-teas-transport-network-slice-yang-06: - IETF Network Slice YANG Model"; + "draft-ietf-teas-network-slice-topology-yang-01: + RFC WWWW: IETF Network Slice Topology YANG Data Model"; } organization @@ -75,11 +76,11 @@ module ietf-otn-slice { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision "2024-07-07" { + revision "2025-07-03" { description "Latest revision of NBI YANG model for OTN slicing."; reference - "draft-ietf-ccamp-yang-otn-slicing-08: Framework and Data + "draft-ietf-ccamp-yang-otn-slicing-09: Framework and Data Model for OTN Network Slicing"; } @@ -114,6 +115,7 @@ module ietf-otn-slice { description "ODU Severely Errored Seconds (SES) threshold"; } + identity odu-uas { base odu-tca-threshold-type; description diff --git a/experimental/ietf-extracted-YANG-modules/ietf-udp-notif-transport@2025-04-27.yang b/experimental/ietf-extracted-YANG-modules/ietf-udp-notif-transport@2025-06-04.yang similarity index 92% rename from experimental/ietf-extracted-YANG-modules/ietf-udp-notif-transport@2025-04-27.yang rename to experimental/ietf-extracted-YANG-modules/ietf-udp-notif-transport@2025-06-04.yang index 8e2ddeff0..6db963e11 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-udp-notif-transport@2025-04-27.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-udp-notif-transport@2025-06-04.yang @@ -11,13 +11,14 @@ module ietf-udp-notif-transport { import ietf-subscribed-notif-receivers { prefix snr; reference - "RFC YYYY: An HTTPS-based Transport for - Configured Subscriptions"; + "draft-ietf-netconf-https-notif: An HTTPS-based Transport + for Configured Subscriptions"; } import ietf-udp-client { prefix udpc; reference - "RFC ZZZZ: YANG Grouping for UDP Clients and UDP Servers"; + "draft-ietf-netconf-udp-client-server: YANG Grouping for + UDP Clients and UDP Servers"; } import ietf-tls-client { prefix tlsc; @@ -67,7 +68,7 @@ module ietf-udp-notif-transport { described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here."; - revision 2025-04-27 { + revision 2025-06-04 { description "Initial revision"; reference @@ -155,8 +156,10 @@ module ietf-udp-notif-transport { default "true"; description "When disabled, the publisher will not segment UDP-Notif - messages and large messages may be fragmented at the IP - layer."; + messages. This may cause IP-layer fragmentation when + messages are larger than the MTU. IP fragmentation is + discouraged (RFC 8085, RFC 8900) and generally unsafe. + Disabling is not recommended."; } leaf max-segment-size { type uint16; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-wdm-tunnel@2024-07-02.yang b/experimental/ietf-extracted-YANG-modules/ietf-wdm-tunnel@2024-07-02.yang index fb54797a9..0b747d3da 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-wdm-tunnel@2024-07-02.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-wdm-tunnel@2024-07-02.yang @@ -142,7 +142,7 @@ module ietf-wdm-tunnel { } */ - uses l0-types:l0-path-constraints; + uses l0-types:path-constraints; } grouping transceiver-constraints { @@ -495,7 +495,7 @@ module ietf-wdm-tunnel { regeneration is enabled."; } - uses l0-types:l0-tunnel-attributes; + uses l0-types:tunnel-attributes; leaf guard-band-size { type l0-types:frequency-thz; @@ -663,7 +663,7 @@ module ietf-wdm-tunnel { "Augment source transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:primary-paths/" @@ -677,7 +677,7 @@ module ietf-wdm-tunnel { "Augment destination transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:primary-paths/" @@ -692,7 +692,7 @@ module ietf-wdm-tunnel { "Augment regen incoming transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:primary-paths/" @@ -707,7 +707,7 @@ module ietf-wdm-tunnel { "Augment regen outgoing transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } /* @@ -738,7 +738,7 @@ module ietf-wdm-tunnel { "Augment source transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:primary-paths/" @@ -753,7 +753,7 @@ module ietf-wdm-tunnel { "Augment destination transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:primary-paths/" @@ -769,7 +769,7 @@ module ietf-wdm-tunnel { "Augment regen incoming transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:primary-paths/" @@ -785,7 +785,7 @@ module ietf-wdm-tunnel { "Augment regen outgoing transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } /* @@ -814,7 +814,7 @@ module ietf-wdm-tunnel { "Augment source transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:secondary-paths/" @@ -828,7 +828,7 @@ module ietf-wdm-tunnel { "Augment destination transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:secondary-paths/" @@ -843,7 +843,7 @@ module ietf-wdm-tunnel { "Augment regen incoming transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:secondary-paths/" @@ -858,7 +858,7 @@ module ietf-wdm-tunnel { "Augment regen outgoing transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } /* @@ -887,7 +887,7 @@ module ietf-wdm-tunnel { "Augment source transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:secondary-reverse-paths/" @@ -901,7 +901,7 @@ module ietf-wdm-tunnel { "Augment destination transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:secondary-reverse-paths/" @@ -916,7 +916,7 @@ module ietf-wdm-tunnel { "Augment regen incoming transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } augment "/te:te/te:tunnels/te:tunnel/te:secondary-reverse-paths/" @@ -931,7 +931,7 @@ module ietf-wdm-tunnel { "Augment regen outgoing transceiver with additional estimated parameters."; - uses l0-types:l0-path-properties; + uses l0-types:path-properties; } /* 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 ee4b75670..2c7b68236 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 @@ -53,7 +53,7 @@ module ietf-yang-library-augmentedby { description "Initial revision."; reference - "RFC XXXX: Support of augmentedby in ietf-yang-library"; + "RFC XXXX: Augmented-by Addition to the YANG Library"; } grouping augmented-by { @@ -81,6 +81,7 @@ module ietf-yang-library-augmentedby { indirectly) gracefully."; } } + augment "/yanglib:yang-library/yanglib:module-set/yanglib:module" { description "Augments the augmented-by leaf-list from module info with the @@ -101,7 +102,6 @@ module ietf-yang-library-augmentedby { " ; uses augmented-by; } - augment "/yanglib:modules-state/yanglib:module" { status deprecated; description From c415a5eea1d6517708b80c51f3883282820a1f5f Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Mon, 7 Jul 2025 18:05:38 +0000 Subject: [PATCH 28/34] Cronjob - daily check of IETF modules. --- .../iana-igp-algo-types@2025-06-13.yang | 78 ++++ .../iana-igp-metric-types@2025-06-13.yang | 87 ++++ ... ietf-bfd-met-keyed-isaac@2025-07-06.yang} | 4 +- ...g => ietf-bgp-communities@2025-07-04.yang} | 6 +- ...-31.yang => ietf-diffserv@2025-07-06.yang} | 7 +- ...ng => ietf-isis-flex-algo@2025-07-06.yang} | 153 +++---- ...1.yang => ietf-qos-action@2025-07-06.yang} | 83 +++- ...-31.yang => ietf-qos-oper@2025-07-06.yang} | 122 ++++-- .../ietf-qos-types@2025-07-06.yang | 403 ++++++++++++++++++ ...yang => ietf-queue-policy@2025-07-06.yang} | 4 +- ...=> ietf-resource-pm-types@2025-07-04.yang} | 6 +- ....yang => ietf-resource-pm@2025-07-04.yang} | 6 +- ... => ietf-scheduler-policy@2025-07-06.yang} | 6 +- ...ng => ietf-traffic-policy@2025-07-06.yang} | 20 +- ...-20.yang => ietf-tvr-node@2025-06-30.yang} | 48 ++- ...yang => ietf-tvr-schedule@2025-06-30.yang} | 11 +- ...yang => ietf-tvr-topology@2025-06-30.yang} | 75 ++-- 17 files changed, 890 insertions(+), 229 deletions(-) create mode 100644 experimental/ietf-extracted-YANG-modules/iana-igp-algo-types@2025-06-13.yang create mode 100644 experimental/ietf-extracted-YANG-modules/iana-igp-metric-types@2025-06-13.yang rename experimental/ietf-extracted-YANG-modules/{ietf-bfd-met-keyed-isaac@2025-07-03.yang => ietf-bfd-met-keyed-isaac@2025-07-06.yang} (98%) rename experimental/ietf-extracted-YANG-modules/{ietf-bgp-communities@2025-06-13.yang => ietf-bgp-communities@2025-07-04.yang} (99%) rename experimental/ietf-extracted-YANG-modules/{ietf-diffserv@2024-01-31.yang => ietf-diffserv@2025-07-06.yang} (99%) rename experimental/ietf-extracted-YANG-modules/{ietf-isis-flex-algo@2024-09-02.yang => ietf-isis-flex-algo@2025-07-06.yang} (79%) rename experimental/ietf-extracted-YANG-modules/{ietf-qos-action@2024-01-31.yang => ietf-qos-action@2025-07-06.yang} (89%) rename experimental/ietf-extracted-YANG-modules/{ietf-qos-oper@2024-01-31.yang => ietf-qos-oper@2025-07-06.yang} (80%) create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-qos-types@2025-07-06.yang rename experimental/ietf-extracted-YANG-modules/{ietf-queue-policy@2024-01-31.yang => ietf-queue-policy@2025-07-06.yang} (98%) rename experimental/ietf-extracted-YANG-modules/{ietf-resource-pm-types@2024-07-07.yang => ietf-resource-pm-types@2025-07-04.yang} (96%) rename experimental/ietf-extracted-YANG-modules/{ietf-resource-pm@2024-07-07.yang => ietf-resource-pm@2025-07-04.yang} (99%) rename experimental/ietf-extracted-YANG-modules/{ietf-scheduler-policy@2024-01-31.yang => ietf-scheduler-policy@2025-07-06.yang} (97%) rename experimental/ietf-extracted-YANG-modules/{ietf-traffic-policy@2024-01-31.yang => ietf-traffic-policy@2025-07-06.yang} (92%) rename experimental/ietf-extracted-YANG-modules/{ietf-tvr-node@2024-10-20.yang => ietf-tvr-node@2025-06-30.yang} (80%) rename experimental/ietf-extracted-YANG-modules/{ietf-tvr-schedule@2024-07-05.yang => ietf-tvr-schedule@2025-06-30.yang} (89%) rename experimental/ietf-extracted-YANG-modules/{ietf-tvr-topology@2024-10-20.yang => ietf-tvr-topology@2025-06-30.yang} (73%) diff --git a/experimental/ietf-extracted-YANG-modules/iana-igp-algo-types@2025-06-13.yang b/experimental/ietf-extracted-YANG-modules/iana-igp-algo-types@2025-06-13.yang new file mode 100644 index 000000000..7315c6a38 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/iana-igp-algo-types@2025-06-13.yang @@ -0,0 +1,78 @@ +module iana-igp-algo-types { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:iana-igp-algo-types"; + prefix iana-algo-types; + + organization + "Internet Assigned Numbers Authority (IANA)"; + + contact + "Internet Assigned Numbers Authority + + ICANN + 12025 Waterfront Drive, Suite 300 + Los Angeles, CA 90094-2536 + United States of America + + Tel: +1 310 301 5800 + "; + + description + "The YANG module defines the identities for Interior Gateway + Protocol (IGP) Algorithm Types. + + This YANG module is maintained by IANA and reflects the 'IGP + Algorithm Types' registry. + + Copyright (c) 2025 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject to + the license terms contained in, the Revised BSD License set + forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This initial version of this YANG module is part of RFC XXXX + (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself + for full legal notices. + + //RFC Ed.: replace XXXX with actual RFC number and remove + this note + + //RFC Ed.: replace IANA_FOO_URL and remove this note. + + The latest version of this YANG module is available at + "; + + revision 2025-06-13 { + description + "Initial Version"; + reference + "RFC XXXX: YANG Data Model for OSPF Flexible Algorithm"; + } + + identity algo-type { + description + "Base identity for IGP Algorithm Type. The algorithm types + are defined in IANA IGP Algorithm Types registry."; + } + + identity algo-spf { + base algo-type; + description + "Shortest Path First (SPF) algorithm based on link metric."; + reference + "RFC 8665: OSPF Extensions for Segment Routing"; + } + + identity algo-strict-spf { + base algo-type; + description + "Strict Shortest Path First (SPF) algorithm based on link + metric."; + reference + "RFC 8665: OSPF Extensions for Segment Routing"; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/iana-igp-metric-types@2025-06-13.yang b/experimental/ietf-extracted-YANG-modules/iana-igp-metric-types@2025-06-13.yang new file mode 100644 index 000000000..d8227db2f --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/iana-igp-metric-types@2025-06-13.yang @@ -0,0 +1,87 @@ +module iana-igp-metric-types { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:iana-igp-metric-types"; + prefix iana-metric-types; + + organization + "Internet Assigned Numbers Authority (IANA)"; + + contact + "Internet Assigned Numbers Authority + + ICANN + 12025 Waterfront Drive, Suite 300 + Los Angeles, CA 90094-2536 + United States of America + + Tel: +1 310 301 5800 + "; + + description + "The YANG module defines the identities for Interior Gateway + Protocol (IGP) Metric-Types. + + This YANG module is maintained by IANA and reflects the 'IGP + Metric-Type' registry. + + Copyright (c) 2025 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject to + the license terms contained in, the Revised BSD License set + forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This initial version of this YANG module is part of RFC XXXX + (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself + for full legal notices. + + //RFC Ed.: replace XXXX with actual RFC number and remove + this note + + //RFC Ed.: replace IANA_FOO_URL and remove this note. + + The latest version of this YANG module is available at + ."; + + revision 2025-06-13 { + description + "Initial Version"; + reference + "RFC XXXX: YANG Data Model for OSPF Flexible Algorithm"; + } + + identity metric-type { + description + "Base identity for IGP Metric-Type. The metric types + are defined in IANA IGP Metric-Type registry."; + } + + identity igp-metric { + base metric-type; + description + "IGP Metric."; + } + identity min-unidirectional-link-delay { + base metric-type; + description + "Min Unidirectional Link Delay as defined in RFC8570 Section 4.2 + and RFC7471 Section 4.2."; + } + + identity te-default-metric { + base metric-type; + description + "STraffic Engineering Default Metric as defined in RFC5305 + Section 3.7 and Traffic Engineering Metric as defined in + RFC3630, Section 2.5.5."; + } + + identity bandwidth-metric { + base metric-type; + description + "Bandwidth metric."; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-06.yang similarity index 98% rename from experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-03.yang rename to experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-06.yang index 236043e81..9ca19c6aa 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-bfd-met-keyed-isaac@2025-07-06.yang @@ -15,7 +15,6 @@ module ietf-bfd-met-keyed-isaac { contact "WG Web: WG List: - Authors: Mahesh Jethanandani (mjethanandani@gmail.com) Ashesh Mishra (ashesh@aalyria.com) Jeffrey Haas (jhaas@juniper.net) @@ -47,7 +46,7 @@ module ietf-bfd-met-keyed-isaac { described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here."; - revision "2025-07-03" { + revision "2025-07-06" { description "Initial Version."; reference @@ -63,7 +62,6 @@ module ietf-bfd-met-keyed-isaac { reference "RFC XXXX: Meticulous Keyed ISAAC for BFD Authentication."; } - identity optimized-sha1-meticulous-keyed-isaac { base key-chain:crypto-algorithm; description diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-06-13.yang b/experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-07-04.yang similarity index 99% rename from experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-06-13.yang rename to experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-07-04.yang index bc84fa8fc..11fadaf18 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-06-13.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-bgp-communities@2025-07-04.yang @@ -43,7 +43,7 @@ module ietf-bgp-communities { // RFC-EDITOR: please update YYYY with this RFC ID - revision 2025-06-13 { + revision 2025-07-04 { description "Initial revision."; reference @@ -356,7 +356,9 @@ module ietf-bgp-communities { "Description for the community"; } leaf type { - type uint8; + type uint8 { + range "0|2|64|66"; + } mandatory true; description "High-order Type of the community. Supported values are 0 diff --git a/experimental/ietf-extracted-YANG-modules/ietf-diffserv@2024-01-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-diffserv@2025-07-06.yang similarity index 99% rename from experimental/ietf-extracted-YANG-modules/ietf-diffserv@2024-01-31.yang rename to experimental/ietf-extracted-YANG-modules/ietf-diffserv@2025-07-06.yang index dc045b065..21c6adb61 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-diffserv@2024-01-31.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-diffserv@2025-07-06.yang @@ -12,7 +12,7 @@ module ietf-diffserv { import ietf-inet-types { prefix inet; } - import iana-qos-types { + import ietf-qos-types { prefix qos-types; reference "RFC XXXX: YANG Models for Quality of Service (QoS)."; @@ -26,10 +26,9 @@ module ietf-diffserv { WG List: Editor: Aseem Choudhary - + Editor: Mahesh Jethanandani "; - description "This module contains a collection of YANG definitions for configuring DiffServ specification implementations. @@ -47,7 +46,7 @@ module ietf-diffserv { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-01-31 { + revision 2025-07-06 { description "Initial version."; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-isis-flex-algo@2024-09-02.yang b/experimental/ietf-extracted-YANG-modules/ietf-isis-flex-algo@2025-07-06.yang similarity index 79% rename from experimental/ietf-extracted-YANG-modules/ietf-isis-flex-algo@2024-09-02.yang rename to experimental/ietf-extracted-YANG-modules/ietf-isis-flex-algo@2025-07-06.yang index a400250d0..2887f0601 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-isis-flex-algo@2024-09-02.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-isis-flex-algo@2025-07-06.yang @@ -17,17 +17,21 @@ module ietf-isis-flex-algo { } import ietf-isis { - prefix "isis"; + prefix isis; reference "RFC 9130: YANG Data Model for the IS-IS Protocol"; } import ietf-te { - prefix "te"; + prefix te; } - import ietf-isis-link-attr { - prefix "isis-link-attr"; + import iana-igp-algo-types { + prefix iana-algo-types; + } + + import iana-igp-metric-types { + prefix iana-metric-type; } organization @@ -42,6 +46,8 @@ module ietf-isis-flex-algo { Author: Stephane Litkowski + Author: Madhavi Joshi + "; description @@ -51,7 +57,7 @@ module ietf-isis-flex-algo { This YANG model conforms to the Network Management Datastore Architecture (NMDA) as described in RFC 8342. - Copyright (c) 2024 IETF Trust and the persons identified as + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -73,7 +79,7 @@ module ietf-isis-flex-algo { reference "RFC XXXX: YANG Data Model for ISIS Flexible Algorithm."; - revision 2024-09-02 { + revision 2025-07-06 { description "Initial Version"; reference @@ -82,33 +88,6 @@ module ietf-isis-flex-algo { /* Identities */ - identity metric-type { - description - "Base identity for route metric types."; - } - - identity igp-metric { - base metric-type; - description - "Identity for the IGP metric type."; - } - - identity min-uni-delay { - base metric-type; - description - "Min unidirectional link delay metric type."; - reference - "RFC 8570 - IS-IS Traffic Engineering (TE) Metric Extensions"; - } - - identity te-metric { - base metric-type; - description - "Traffic engineering metric type."; - reference - "RFC 5305 - IS-IS Extensions for Traffic Engineering (TE)"; - } - identity fad-flags { description "Base identity for ISIS FAD flags."; @@ -122,13 +101,6 @@ module ietf-isis-flex-algo { calculation."; } - /* Identity augmentation */ - identity flex-algo-bit { - base isis-link-attr:sabm-bit; - description - "X bit, flexible algorithm."; - } - /* Groupings */ grouping fa-ex-ag-sub-tlv { container fa-ex-ag-sub-tlv { @@ -187,6 +159,7 @@ module ietf-isis-flex-algo { description "The flex-algo definition flags sub-tlv."; } + grouping fa-ex-srlg-sub-tlv { container fa-ex-srlg-sub-tlv { leaf-list srlgs { @@ -211,14 +184,14 @@ module ietf-isis-flex-algo { } leaf metric-type { type identityref { - base metric-type; + base iana-metric-type:metric-type; } description "Type of metric to be used during the calculation."; } leaf calc-type { - type uint8 { - range "0..127"; + type identityref { + base iana-algo-types:algo-type; } description "IGP algorithm types, value from 0 to 127 as @@ -351,26 +324,23 @@ module ietf-isis-flex-algo { the flex-algo path computation."; } - leaf fast-reroute { - type boolean; - default true; - description - "Enable fast reroute."; - } - leaf metric-type { type identityref { - base metric-type; + base iana-metric-type:metric-type; } description "Type of metric to be used during the calculation."; } - leaf microloop-avoidance { - type boolean; - default true; + leaf calc-type { + type identityref { + base iana-algo-types:algo-type; + } + default iana-algo-types:algo-spf; description - "Enable microloop avoidance."; + "Calcuation-type. Value from 0-127 inclusive from the IANA + 'IGP Algorithm Types' registry defined under the 'Interior + Gateway Protocol (IGP) Parameters' registry."; } container prefix-metric { @@ -399,81 +369,82 @@ module ietf-isis-flex-algo { augment "/rt:routing/" + "rt:control-plane-protocols/rt:control-plane-protocol"+ "/isis:isis/isis:database/isis:levels/isis:lsp"+ - "/isis:router-capabilities" { - when "/rt:routing/rt:control-plane-protocols/"+ - "rt:control-plane-protocol/"+ - "rt:type = 'isis:isis'" { - description - "This augment ISIS routing protocol when used"; + "/isis:router-capabilities" { + when "/rt:routing/rt:control-plane-protocols/"+ + "rt:control-plane-protocol/"+ + "rt:type = 'isis:isis'" { + description + "This augment ISIS routing protocol when used"; } - description - "This augments ISIS protocol LSDB router capability."; + description + "This augments ISIS protocol LSDB router capability."; - uses fad-tlvs; + uses fad-tlvs; } augment "/rt:routing/" + "rt:control-plane-protocols/rt:control-plane-protocol"+ "/isis:isis/isis:database/isis:levels/isis:lsp"+ - "/isis:extended-ipv4-reachability/"+ - "isis:prefixes" { - when "/rt:routing/rt:control-plane-protocols/"+ - "rt:control-plane-protocol/"+ - "rt:type = 'isis:isis'" { + "/isis:extended-ipv4-reachability/"+ + "isis:prefixes" { + when "/rt:routing/rt:control-plane-protocols/"+ + "rt:control-plane-protocol/"+ + "rt:type = 'isis:isis'" { description "This augment ISIS routing protocol when used"; } - description - "This augments ISIS protocol LSDB prefix."; - uses fapm-sub-tlvs; + description + "This augments ISIS protocol LSDB prefix."; + uses fapm-sub-tlvs; } augment "/rt:routing/" + "rt:control-plane-protocols/rt:control-plane-protocol"+ "/isis:isis/isis:database/isis:levels/isis:lsp"+ - "/isis:mt-extended-ipv4-reachability/isis:prefixes" { - when "/rt:routing/rt:control-plane-protocols/"+ - "rt:control-plane-protocol/"+ - "rt:type = 'isis:isis'" { + "/isis:mt-extended-ipv4-reachability/isis:prefixes" { + when "/rt:routing/rt:control-plane-protocols/"+ + "rt:control-plane-protocol/"+ + "rt:type = 'isis:isis'" { description "This augment ISIS routing protocol when used"; } - description - "This augments ISIS protocol LSDB prefix."; - uses fapm-sub-tlvs; + description + "This augments ISIS protocol LSDB prefix."; + uses fapm-sub-tlvs; } augment "/rt:routing/" + "rt:control-plane-protocols/rt:control-plane-protocol"+ "/isis:isis/isis:database/isis:levels/isis:lsp"+ "/isis:ipv6-reachability/isis:prefixes" { - when "/rt:routing/rt:control-plane-protocols/"+ - "rt:control-plane-protocol/"+ - "rt:type = 'isis:isis'" { + when "/rt:routing/rt:control-plane-protocols/"+ + "rt:control-plane-protocol/"+ + "rt:type = 'isis:isis'" { description "This augment ISIS routing protocol when used"; } - description - "This augments ISIS protocol LSDB prefix."; - uses fapm-sub-tlvs; + description + "This augments ISIS protocol LSDB prefix."; + uses fapm-sub-tlvs; } augment "/rt:routing/" + "rt:control-plane-protocols/rt:control-plane-protocol"+ "/isis:isis/isis:database/isis:levels/isis:lsp"+ "/isis:mt-ipv6-reachability/isis:prefixes" { - when "/rt:routing/rt:control-plane-protocols/"+ - "rt:control-plane-protocol/"+ - "rt:type = 'isis:isis'" { + when "/rt:routing/rt:control-plane-protocols/"+ + "rt:control-plane-protocol/"+ + "rt:type = 'isis:isis'" { description "This augment ISIS routing protocol when used"; } - description - "This augments ISIS protocol LSDB prefix."; - uses fapm-sub-tlvs; + description + "This augments ISIS protocol LSDB prefix."; + uses fapm-sub-tlvs; } /* notification */ + notification flex-algo-not-supported { uses isis:notification-instance-hdr; leaf flex-algo-number { diff --git a/experimental/ietf-extracted-YANG-modules/ietf-qos-action@2024-01-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-qos-action@2025-07-06.yang similarity index 89% rename from experimental/ietf-extracted-YANG-modules/ietf-qos-action@2024-01-31.yang rename to experimental/ietf-extracted-YANG-modules/ietf-qos-action@2025-07-06.yang index a03572fc2..5142855d8 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-qos-action@2024-01-31.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-qos-action@2025-07-06.yang @@ -8,10 +8,10 @@ module ietf-qos-action { reference "RFC 6991: Common YANG Data Types"; } - import iana-qos-types { + import ietf-qos-types { prefix qos-types; reference - "RFC XXXX: YANG Model for QoS"; + "RFC XXXX: YANG Model for Quality of Service (QoS)."; } organization @@ -22,7 +22,7 @@ module ietf-qos-action { WG List: Editor: Aseem Choudhary - + Editor: Mahesh Jethanandani "; @@ -43,7 +43,7 @@ module ietf-qos-action { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-01-31 { + revision 2025-07-06 { description "Initial version"; reference @@ -92,6 +92,7 @@ module ietf-qos-action { description "DSCP marking"; } + leaf traffic-group-mark { type string; must "../action-type = 'qos-types:action-mark'" { @@ -140,6 +141,7 @@ module ietf-qos-action { description "A Basic Single Rate Two Color Meter."; } + grouping single-rate-three-color-meter { container single-rate-three-color-meter { description @@ -172,7 +174,6 @@ module ietf-qos-action { reference "RFC 2697: A Single Rate Three Color Marker."; } - container conform-action { uses meter-action; description @@ -284,6 +285,7 @@ module ietf-qos-action { case single-rate-two-color-meter-type { uses single-rate-two-color-meter; } + case single-rate-three-color-meter-type { uses single-rate-three-color-meter; } @@ -319,7 +321,10 @@ module ietf-qos-action { grouping meter-reference { container meter { leaf name { - type string ; + type leafref { + path "/qos-action:meters/" + + "qos-action:meter/qos-action:name"; + } mandatory true; description "This leaf defines name of the meter referenced."; @@ -524,6 +529,7 @@ module ietf-qos-action { "Value of maximum probability value. This value need be interpreted along with max-probability-unit"; } + leaf max-probability-unit { type identityref { base qos-types:probability-unit; @@ -536,6 +542,27 @@ module ietf-qos-action { "Random Early Detect (RED) configuration parameters."; } + grouping codel-config-parameters { + leaf target { + type uint64; + units "microseconds"; + default 5000; + description + "Target time in microseconds spent by each packet in queue."; + } + + leaf interval { + type uint64; + units "microseconds"; + default 100000; + description + "The time in microsecond for minimum interval for congestion + to persist before algorithm kicks in. "; + } + description + "CoDel configuration parameters."; + } + grouping queue { container queue { uses priority; @@ -619,12 +646,49 @@ module ietf-qos-action { type boolean; default "false"; description - "ECN is enabled on the queue."; + "When configure as true, ECN is enabled on + the queue."; } description "Weighted Random Early Detect (WRED) configuration."; } } + + case codel { + container codel { + uses codel-config-parameters; + leaf ecn-enabled { + type boolean; + default "false"; + description + "When configure as true, ECN is enabled on + the queue."; + } + description + "CoDel configuration."; + } + } + + case fq-codel { + container fq-codel { + uses codel-config-parameters; + leaf flows { + type uint64; + default 1024; + description + "The maximum number of flow queues."; + } + leaf ecn-enabled { + type boolean; + default "false"; + description + "ECN is enabled on the queue."; + } + description + "FQ-CoDel configuration."; + } + } + description "Choice of Drop Algorithm."; } @@ -659,7 +723,10 @@ module ietf-qos-action { grouping queue-reference { container queue-reference { leaf queue-name { - type string; + type leafref { + path "/qos-action:queues/" + + "qos-action:queue/qos-action:name"; + } mandatory true; description "This leaf defines name of the queue template diff --git a/experimental/ietf-extracted-YANG-modules/ietf-qos-oper@2024-01-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-qos-oper@2025-07-06.yang similarity index 80% rename from experimental/ietf-extracted-YANG-modules/ietf-qos-oper@2024-01-31.yang rename to experimental/ietf-extracted-YANG-modules/ietf-qos-oper@2025-07-06.yang index 9470e91b0..19b8e6a53 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-qos-oper@2024-01-31.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-qos-oper@2025-07-06.yang @@ -13,18 +13,19 @@ module ietf-qos-oper { reference "RFC8343: A YANG Data Model for Interface Management."; } - import iana-qos-types { + import ietf-qos-types { prefix qos-types; reference "RFC XXXX: YANG Models for Quality of Service (QoS)."; } organization "IETF RTG (Routing Area) Working Group."; + contact "WG Web: WG List: Editor: Aseem Choudhary - + Editor: Mahesh Jethanandani "; description @@ -44,7 +45,7 @@ module ietf-qos-oper { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-01-31 { + revision 2025-07-06 { description "Initial version."; reference @@ -133,68 +134,111 @@ module ietf-qos-oper { "Total number of bytes tail-dropped."; } - leaf red-drop-pkts { - type yang:zero-based-counter64; - description - "Total number of packets dropped because of RED."; - } - - leaf red-drop-bytes { - type yang:zero-based-counter64; - description - "Total number of bytes dropped because of RED."; - } + container red-statistics { + leaf drop-pkts { + type yang:zero-based-counter64; + description + "Total number of packets dropped because of RED."; + } - leaf red-ecn-marked-pkts { - type yang:zero-based-counter64; - description - "Total number of packets that were marked with ECN - because of RED."; - } + leaf drop-bytes { + type yang:zero-based-counter64; + description + "Total number of bytes dropped because of RED."; + } - leaf red-ecn-marked-bytes { - type yang:zero-based-counter64; - description - "Total number of bytes that were marked with ECN because of - RED."; - } + leaf ecn-marked-pkts { + type yang:zero-based-counter64; + description + "Total number of packets that were marked with ECN + because of RED."; + } - list wred-stats { - config false; - description - "QoS WRED statistics."; + leaf ecn-marked-bytes { + type yang:zero-based-counter64; + description + "Total number of bytes that were marked with ECN because of + RED."; + } - leaf profile { - type uint8; + list wred-stats { + config false; description - "Profile identifier for each color of traffic."; + "QoS WRED statistics."; + + leaf profile { + type uint8; + description + "Profile identifier for each color of traffic."; + } + + leaf drop-pkts { + type yang:zero-based-counter64; + description + "Total number of packets dropped because of WRED."; + } + + leaf drop-bytes { + type yang:zero-based-counter64; + description + "Total number of bytes dropped because of WRED."; + } + + leaf ecn-marked-pkts { + type yang:zero-based-counter64; + description + "Total number of packets that were marked with ECN + because of WRED."; + } + + leaf ecn-marked-bytes { + type yang:zero-based-counter64; + description + "Total number of bytes that were marked with ECN because + of WRED."; + } } + description + "Container of all RED statistics."; + } + container codel-statistics { leaf drop-pkts { type yang:zero-based-counter64; description - "Total number of packets dropped because of WRED."; + "Total number of packets dropped because of CoDel + or FQ-CoDel."; } leaf drop-bytes { type yang:zero-based-counter64; description - "Total number of bytes dropped because of WRED."; + "Total number of bytes dropped because of CoDel + or FQ-CoDel."; } leaf ecn-marked-pkts { type yang:zero-based-counter64; description - "Total number of packets that were marked with ECN because - of WRED."; + "Total number of packets that were marked with ECN + because of CoDel or FQ-CoDel."; } leaf ecn-marked-bytes { type yang:zero-based-counter64; description - "Total number of bytes that were marked with ECN because of - WRED."; + "Total number of bytes that were marked with ECN because + of CoDel or FQ-CoDel."; } + + leaf new-flow-count { + type yang:zero-based-counter64; + description + "Total number of flows that FQ-CoDel has identified and is + managing or has managed."; + } + description + "Container of all CoDel or FQ-CoDel statistics."; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-qos-types@2025-07-06.yang b/experimental/ietf-extracted-YANG-modules/ietf-qos-types@2025-07-06.yang new file mode 100644 index 000000000..81b128b32 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-qos-types@2025-07-06.yang @@ -0,0 +1,403 @@ +module ietf-qos-types { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-qos-types"; + prefix qos-types; + + organization + "IETF Routing Area Working Group"; + + contact + "WG Web: + WG List: + + Editor: Aseem Choudhary + + Editor: Mahesh Jethanandani + "; + + description + "This module contains type definitions for all QoS types. + + Copyright (c) 2022 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (http://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC XXXX; see + the RFC itself for full legal notices."; + + revision 2025-07-06 { + description + "Initial version"; + reference + "RFC XXXX: YANG Models for Quality of Service (QoS)."; + } + + /* + * Features. + */ + feature child-policy { + description + " This feature allows configuration of hierarchical policy."; + } + feature count { + description + "This feature allows action configuration to enable + counter in a classifier"; + } + feature named-counter { + description + "This feature allows action configuration to enable + named counter in a classifier"; + } + + /* + * Identities. + */ + identity policy-type { + description + "Base identity for policy type."; + } + identity diffserv-policy-type { + base policy-type; + description + "Policy type defined as DiffServ."; + } + identity ipv4-diffserv-policy-type { + base policy-type; + description + "Policy type defined as a DiffServ IPv4 policy type."; + } + identity ipv6-diffserv-policy-type { + base policy-type; + description + "Policy type defined as a DiffServ IPv6 policy type."; + } + identity queue-policy-type { + base policy-type; + description + "Policy type defined as a queue policy type."; + } + identity scheduler-policy-type { + base policy-type; + description + "Policy type defined as a scheduler policy type."; + } + + identity action-type { + description + "Base identity for the action type."; + } + identity dscp-marking { + base action-type; + description + "Action type defined as DSCP marking."; + } + identity meter-inline { + base action-type; + description + "Action type defined as meter inline."; + } + identity meter-reference { + base action-type; + description + "Action type defined as meter reference."; + } + identity queue { + base action-type; + description + "Action type defined as queue."; + } + identity scheduler { + base action-type; + description + "Action type defined as scheduler."; + } + identity discard { + base action-type; + description + "Action type defined as discard."; + } + identity child-policy { + if-feature child-policy; + base action-type; + description + "Action type defined as child policy."; + } + identity count { + if-feature count; + base action-type; + description + "Action type defined as count."; + } + identity named-counter { + if-feature named-counter; + base action-type; + description + "Action type specified as a named counter."; + } + identity queue-policy-name { + base action-type; + description + "Action type specified as a queue policy name."; + } + + identity meter-type { + description + "Base identity for types of meter."; + } + identity one-rate-two-color { + base meter-type; + description + "Meter type specified as one rate two color meter."; + } + identity one-rate-tri-color { + base meter-type; + description + "Meter type specified as one rate three color meter."; + } + identity two-rate-tri-color { + base meter-type; + description + "Meter type specified as two rate three color meter."; + } + + identity drop-type { + description + "Base identity for drop algorithm."; + } + identity tail-drop { + base drop-type; + description + "Drop algorithm specified as tail drop."; + } + identity red { + base drop-type; + description + "Drop algorithm specified as RED."; + } + identity wred { + base drop-type; + description + "Drop algorithm specified as WRED."; + } + + identity rate-unit-type { + description + "Base definition for the type of rate unit."; + } + identity bits-per-second { + base rate-unit-type; + description + "Rate specified in bits per second."; + } + identity percent { + base rate-unit-type; + description + "Rate specified as a percentage of queue depth."; + } + + identity burst-unit-type { + description + "Base definition for burst specification."; + } + identity bytes { + base burst-unit-type; + description + "Burst specified in bytes."; + } + identity microsecond { + base burst-unit-type; + description + "Burst specified in microseconds."; + } + + identity red-threshold-unit { + description + "Base definition for RED threshold specification."; + } + identity red-threshold-bytes { + base red-threshold-unit; + description + "RED threshold specified in bytes."; + } + identity red-threshold-us { + base red-threshold-unit; + description + "RED threshold specified in microseconds."; + } + identity red-threshold-pc { + base red-threshold-unit; + description + "RED threshold specified as a percentage."; + } + identity red-theshold-pt { + base red-threshold-unit; + description + "RED threshold specified per-thousand."; + } + + identity wred-color-type { + description + "Base identity for WRED color type."; + } + identity wred-color-dscp { + base wred-color-type; + description + "WRED color specified by DSCP."; + } + + identity probability-unit { + description + "Base definition for probability unit."; + } + identity probability-pc { + base probability-unit; + description + "Probability specified in percentage."; + } + identity probability-pt { + base probability-unit; + description + "Probability specified in unit of per thousand."; + } + identity probability-denominator { + base probability-unit; + description + "Probability value specified as a denominator value + while numerator is always 1."; + } + + identity filter-type { + description + "Base identity for filter type."; + } + + identity dscp { + base filter-type; + description + "Filter type specified as DSCP."; + } + identity source-ipv4-prefix { + base filter-type; + description + "Filter type specified as source IPv4 prefix."; + } + identity destination-ipv4-prefix { + base filter-type; + description + "Filter type specified as destination IPv4 prefix."; + } + identity source-ipv6-prefix { + base filter-type; + description + "Filter type specified as source IPv6 prefix."; + } + identity destination-ipv6-prefix { + base filter-type; + description + "Filter type specified as destination IPv6 prefix."; + } + identity source-port { + base filter-type; + description + "Filter type specified as source port."; + } + identity destination-port { + base filter-type; + description + "Filter type specified as destination port."; + } + identity protocol { + base filter-type; + description + "Filter type specified as protocol."; + } + identity traffic-group-name { + base filter-type; + description + "Filter type specified as traffic group name."; + } + identity filter-match-all { + base filter-type; + description + "Filter type specified as match all."; + } + + typedef match-operation-type { + type enumeration { + enum match-all { + description + "Classifier entry filters logical AND operation"; + } + enum match-any { + description + "Classifier entry filters logical OR operation"; + } + } + default "match-all"; + description + "Filter match logical operation type"; + } + + identity direction { + description + "Base identity for traffic direction"; + } + identity ingress { + base direction; + description + "Direction of traffic coming into the network entry"; + } + identity egress { + base direction; + description + "Direction of traffic going out of the network entry"; + } + + identity meter-action-type { + description + "Base identify for actions related to metering"; + } + identity action-drop { + base meter-action-type; + description + "Drop packets that conform/exceed/violate to the set value."; + } + identity action-transmit { + base meter-action-type; + description + "Transmit packets that conform/exceed/violate to the set + value."; + } + identity action-mark { + base meter-action-type; + description + "Mark packets that conform/exceed/violate to the set value."; + } + + identity clear-counters-type { + description + "Base identify for clear interface counters related options"; + } + identity all-counters { + base clear-counters-type; + description + "Clear all counters in both directions."; + } + identity inbound-counters { + base clear-counters-type; + description + "Clear counters in inbound direction."; + } + identity outbound-counters { + base clear-counters-type; + description + "Clear counters in outbound direction."; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-queue-policy@2024-01-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-queue-policy@2025-07-06.yang similarity index 98% rename from experimental/ietf-extracted-YANG-modules/ietf-queue-policy@2024-01-31.yang rename to experimental/ietf-extracted-YANG-modules/ietf-queue-policy@2025-07-06.yang index 6ad6296a1..dcb7707dd 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-queue-policy@2024-01-31.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-queue-policy@2025-07-06.yang @@ -12,7 +12,7 @@ module ietf-queue-policy { import ietf-diffserv { prefix diffserv; } - import iana-qos-types { + import ietf-qos-types { prefix qos-types; reference "RFC XXXX: YANG Models for Quality of Service (QoS)."; @@ -47,7 +47,7 @@ module ietf-queue-policy { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-01-31 { + revision 2025-07-06 { description "Initial version."; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-resource-pm-types@2024-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-resource-pm-types@2025-07-04.yang similarity index 96% rename from experimental/ietf-extracted-YANG-modules/ietf-resource-pm-types@2024-07-07.yang rename to experimental/ietf-extracted-YANG-modules/ietf-resource-pm-types@2025-07-04.yang index f57b4c7e8..e0f093dec 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-resource-pm-types@2024-07-07.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-resource-pm-types@2025-07-04.yang @@ -15,7 +15,7 @@ module ietf-resource-pm-types { Editor: Fabio Peruzzini - + Editor: Yanlei Zheng @@ -43,7 +43,7 @@ module ietf-resource-pm-types { The model fully conforms to the Network Management Datastore Architecture (NMDA). - Copyright (c) 2022 IETF Trust and the persons + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -62,7 +62,7 @@ module ietf-resource-pm-types { described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here."; - revision 2024-07-07 { + revision 2025-07-04 { description "Initial revision."; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2024-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2025-07-04.yang similarity index 99% rename from experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2024-07-07.yang rename to experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2025-07-04.yang index dc4cf429b..b4543944a 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2024-07-07.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2025-07-04.yang @@ -22,7 +22,7 @@ module ietf-resource-pm { Editor: Fabio Peruzzini - + Editor: Yanlei Zheng @@ -49,7 +49,7 @@ module ietf-resource-pm { The model fully conforms to the Network Management Datastore Architecture (NMDA). - Copyright (c) 2022 IETF Trust and the persons + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -68,7 +68,7 @@ module ietf-resource-pm { described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here."; - revision 2024-07-07 { + revision 2025-07-04 { description "Initial revision."; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-scheduler-policy@2024-01-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-scheduler-policy@2025-07-06.yang similarity index 97% rename from experimental/ietf-extracted-YANG-modules/ietf-scheduler-policy@2024-01-31.yang rename to experimental/ietf-extracted-YANG-modules/ietf-scheduler-policy@2025-07-06.yang index 5eb1f1f25..a41482ead 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-scheduler-policy@2024-01-31.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-scheduler-policy@2025-07-06.yang @@ -12,7 +12,7 @@ module ietf-scheduler-policy { import ietf-diffserv { prefix diffserv; } - import iana-qos-types { + import ietf-qos-types { prefix qos-types; reference "RFC XXXX: YANG Models for Quality of Service (QoS)."; @@ -26,7 +26,7 @@ module ietf-scheduler-policy { WG List: Editor: Aseem Choudhary - + Editor: Mahesh Jethanandani "; @@ -47,7 +47,7 @@ module ietf-scheduler-policy { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-01-31 { + revision 2025-07-06 { description "Initial version."; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-traffic-policy@2024-01-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-traffic-policy@2025-07-06.yang similarity index 92% rename from experimental/ietf-extracted-YANG-modules/ietf-traffic-policy@2024-01-31.yang rename to experimental/ietf-extracted-YANG-modules/ietf-traffic-policy@2025-07-06.yang index 9c9538b23..4e214d314 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-traffic-policy@2024-01-31.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-traffic-policy@2025-07-06.yang @@ -6,7 +6,7 @@ module ietf-traffic-policy { import ietf-interfaces { prefix if; } - import iana-qos-types { + import ietf-qos-types { prefix qos-types; reference "RFC XXXX: YANG Data Models for Quality of Service (QoS)."; @@ -20,7 +20,7 @@ module ietf-traffic-policy { WG List: Editor: Aseem Choudhary - + Editor: Mahesh Jethanandani "; @@ -41,7 +41,7 @@ module ietf-traffic-policy { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-01-31 { + revision 2025-07-06 { description "Initial version."; reference @@ -165,8 +165,15 @@ module ietf-traffic-policy { ordered-by user; description "Classifier configuration in a policy."; + leaf name { - type string; + type union { + type string; + type leafref { + path "/traffic-policy:classifiers/" + + "traffic-policy:classifier/traffic-policy:name"; + } + } description "A unique name for classifier entry."; } @@ -226,7 +233,10 @@ module ietf-traffic-policy { } leaf name { - type string; + type leafref { + path "/traffic-policy:policies/" + + "traffic-policy:policy/traffic-policy:name"; + } mandatory true; description "A unique name for the Policy."; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-tvr-node@2024-10-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-tvr-node@2025-06-30.yang similarity index 80% rename from experimental/ietf-extracted-YANG-modules/ietf-tvr-node@2024-10-20.yang rename to experimental/ietf-extracted-YANG-modules/ietf-tvr-node@2025-06-30.yang index c17849738..a8043cd24 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-tvr-node@2024-10-20.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-tvr-node@2025-06-30.yang @@ -43,7 +43,7 @@ module ietf-tvr-node { This YANG model conforms to the Network Management Datastore Architecture (NMDA) as described in RFC 8342. - Copyright (c) 2024 IETF Trust and the persons identified as + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -60,7 +60,7 @@ module ietf-tvr-node { reference "RFC XXXX: YANG Data Model for Scheduled Attributes"; - revision 2024-10-20 { + revision 2025-06-30 { description "Initial Version"; reference @@ -94,7 +94,7 @@ module ietf-tvr-node { unspecified, the node is powered down by default."; } uses tvr-schd:tvr-schedule { - augment "schedules/attr-value" { + augment "schedule" { description "Augment the power state within each period."; leaf power-state { @@ -110,7 +110,7 @@ module ietf-tvr-node { description "Container for TVR node interface attributes."; - list interfaces { + list interface { key "name"; description "List of interface with schedules."; @@ -144,27 +144,31 @@ module ietf-tvr-node { "Interface attributes with schedules."; uses tvr-schd:tvr-schedule { - augment "schedules/attr-value" { + augment "schedule" { description "Augment scheduled interface state."; - leaf available { - type boolean; + container scheduled-attributes { description - "Scheduled interface power state. This is to - work with the leaf 'enabled' for the configured - state of the interface."; - } - leaf bandwidth { - type yang:gauge64; - units "bits/second"; - description - "The scheduled bandwidth in bits per second"; - } - leaf neighbor { - type inet:uri; - description - "The node expected to be this interface's neighbor - during this time."; + "Augmentation container for links."; + leaf available { + type boolean; + description + "Scheduled interface power state. This is to + work with the leaf 'enabled' for the configured + state of the interface."; + } + leaf bandwidth { + type yang:gauge64; + units "bits/second"; + description + "The scheduled bandwidth in bits per second"; + } + leaf neighbor { + type inet:uri; + description + "The node expected to be this interface's neighbor + during this time."; + } } } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-tvr-schedule@2024-07-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-tvr-schedule@2025-06-30.yang similarity index 89% rename from experimental/ietf-extracted-YANG-modules/ietf-tvr-schedule@2024-07-05.yang rename to experimental/ietf-extracted-YANG-modules/ietf-tvr-schedule@2025-06-30.yang index ff8a064a1..cebe3b4d5 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-tvr-schedule@2024-07-05.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-tvr-schedule@2025-06-30.yang @@ -33,7 +33,7 @@ module ietf-tvr-schedule { This YANG model conforms to the Network Management Datastore Architecture (NMDA) as described in RFC 8342. - Copyright (c) 2024 IETF Trust and the persons identified as + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -50,7 +50,7 @@ module ietf-tvr-schedule { reference "RFC XXXX: YANG Data Model for Scheduled Attributes"; - revision 2024-07-05 { + revision 2025-06-30 { description "Initial Version"; reference @@ -58,7 +58,7 @@ module ietf-tvr-schedule { } grouping tvr-schedule { - list schedules { + list schedule { key schedule-id; leaf schedule-id { type uint32; @@ -81,11 +81,6 @@ module ietf-tvr-schedule { } } - container attr-value { - description - "Attribute value(s). This container should be augmented - with attributes that apply to the current interval."; - } description "list of schedules."; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-tvr-topology@2024-10-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-tvr-topology@2025-06-30.yang similarity index 73% rename from experimental/ietf-extracted-YANG-modules/ietf-tvr-topology@2024-10-20.yang rename to experimental/ietf-extracted-YANG-modules/ietf-tvr-topology@2025-06-30.yang index bb8861cf8..470c13f58 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-tvr-topology@2024-10-20.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-tvr-topology@2025-06-30.yang @@ -41,7 +41,7 @@ module ietf-tvr-topology { "This YANG module contains YANG definitions for describing network topology with an time-variant availability schedule. - Copyright (c) 2024 IETF Trust and the persons identified as + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -60,7 +60,7 @@ module ietf-tvr-topology { described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here."; - revision 2024-10-20 { + revision 2025-06-30 { description "Initial revision"; reference @@ -70,7 +70,7 @@ module ietf-tvr-topology { container topology-schedule { description "Network topology schedules."; - list nodes { + list node { key "node-id"; description "List of nodes with schedules."; @@ -93,7 +93,7 @@ module ietf-tvr-topology { } uses tvr-schd:tvr-schedule { - augment "schedules/attr-value" { + augment "schedule" { description "Augment scheduled node availability."; leaf node-available { @@ -106,7 +106,7 @@ module ietf-tvr-topology { } } - list links { + list link { key "source-node source-link-id"; description "List of links."; @@ -124,38 +124,41 @@ module ietf-tvr-topology { description "The time at which this link becomes available."; uses tvr-schd:tvr-schedule { - augment "schedules/attr-value" { + augment "schedule" { description "Augment scheduled values."; - leaf link-available { - type boolean; - description - "The predicted link availability."; - } - leaf bandwidth { - type yang:gauge64; - units "bits/second"; - description - "The predicted link capacity. If the value measured - by the system is less than this value, the system - value is used. If the value measured by the system - is greater than this value the predicted value - SHOULD be used."; - } - leaf delay { - type uint32 { - range "0..16777215"; + container link-attributes { + description "Augmentation container for links."; + leaf link-available { + type boolean; + description + "The predicted link availability."; + } + leaf bandwidth { + type yang:gauge64; + units "bits/second"; + description + "The predicted link capacity. If the value measured + by the system is less than this value, the system + value is used. If the value measured by the system + is greater than this value the predicted value + SHOULD be used."; + } + leaf delay { + type uint32 { + range "0..16777215"; + } + description + "The predicted one-way delay or latency in + microseconds. If the value measured by the system is + less than this value the predicted value SHOULD be + used."; + } + leaf destination-node { + type inet:uri; + description + "A name refers to the destination node of the link."; } - description - "The predicted one-way delay or latency in - microseconds. If the value measured by the system - is less than this value the predicted value SHOULD - be used."; - } - leaf destination-node { - type inet:uri; - description - "A name refers to the destination node of the link."; } } } @@ -164,8 +167,8 @@ module ietf-tvr-topology { default "false"; description "The default link availibility. During times when the - schedule does not specifiy an availability, this value - is used."; + schedule does not specifiy an availability, this value + is used."; } leaf default-bandwidth { type yang:gauge64; From fdc59afa5326f80303b69b36d793846cc8732523 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Tue, 8 Jul 2025 18:05:52 +0000 Subject: [PATCH 29/34] Cronjob - daily check of IETF modules. --- .../draft-extended-example@2025-03-09.yang | 58 + .../draft-relation@2025-03-09.yang | 132 ++ .../draft-template@2025-03-09.yang | 165 ++ .../ietf-incident@2024-06-06.yang | 50 +- .../ietf-lisp-address-types@2024-10-20.yang | 1 + .../ietf-lisp-etr@2024-10-20.yang | 1 - .../ietf-lisp-itr@2024-10-20.yang | 1 + .../ietf-lm-hierarchy@2025-07-06.yang | 201 +++ ...> ietf-mpls-mldp-extended@2025-07-05.yang} | 194 +-- ...01.yang => ietf-mpls-mldp@2025-07-05.yang} | 17 +- ...=> ietf-network-inventory@2025-07-02.yang} | 429 +++-- ...ietf-nwi-passive-inventory@2025-07-07.yang | 531 ++++++ ...tical-impairment-topology@2025-06-24.yang} | 1466 +++++++++-------- ...-07-05.yang => ietf-petra@2025-05-12.yang} | 4 +- ...03.yang => ietf-schc-coap@2025-07-07.yang} | 36 +- ...14.yang => ietf-srv6-base@2025-07-07.yang} | 446 ++++- .../ietf-srv6-nexthop@2025-07-05.yang | 195 +++ ....yang => ietf-srv6-static@2025-07-07.yang} | 34 +- ...1.yang => ietf-srv6-types@2025-07-07.yang} | 801 ++++++++- ...g => ietf-topology-filter@2025-07-07.yang} | 4 +- .../ietf-vni-mng@2025-07-07.yang | 162 ++ .../ietf-wdm-interface@2025-02-10.yang | 46 +- ...ietf-yang-package-instance@2025-03-03.yang | 1 - .../ietf-yang-package-types@2025-03-03.yang | 484 ------ .../ietf-yang-package-types@2025-07-07.yang | 566 +++++++ .../ietf-yang-packages@2025-03-03.yang | 1 + .../ietf-yl-packages@2025-03-03.yang | 2 +- .../ietf-yp-lite@2024-11-11.yang | 224 +-- 28 files changed, 4382 insertions(+), 1870 deletions(-) create mode 100644 experimental/ietf-extracted-YANG-modules/draft-extended-example@2025-03-09.yang create mode 100644 experimental/ietf-extracted-YANG-modules/draft-relation@2025-03-09.yang create mode 100644 experimental/ietf-extracted-YANG-modules/draft-template@2025-03-09.yang create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-lm-hierarchy@2025-07-06.yang rename experimental/ietf-extracted-YANG-modules/{ietf-mpls-mldp-extended@2024-12-01.yang => ietf-mpls-mldp-extended@2025-07-05.yang} (88%) rename experimental/ietf-extracted-YANG-modules/{ietf-mpls-mldp@2024-12-01.yang => ietf-mpls-mldp@2025-07-05.yang} (96%) rename experimental/ietf-extracted-YANG-modules/{ietf-network-inventory@2025-02-03.yang => ietf-network-inventory@2025-07-02.yang} (53%) create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-nwi-passive-inventory@2025-07-07.yang rename experimental/ietf-extracted-YANG-modules/{ietf-optical-impairment-topology@2024-05-21.yang => ietf-optical-impairment-topology@2025-06-24.yang} (50%) rename experimental/ietf-extracted-YANG-modules/{ietf-petra@2024-07-05.yang => ietf-petra@2025-05-12.yang} (97%) rename experimental/ietf-extracted-YANG-modules/{ietf-schc-coap@2025-03-03.yang => ietf-schc-coap@2025-07-07.yang} (84%) rename experimental/ietf-extracted-YANG-modules/{ietf-srv6-base@2022-01-14.yang => ietf-srv6-base@2025-07-07.yang} (60%) create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-srv6-nexthop@2025-07-05.yang rename experimental/ietf-extracted-YANG-modules/{ietf-srv6-static@2024-03-04.yang => ietf-srv6-static@2025-07-07.yang} (98%) rename experimental/ietf-extracted-YANG-modules/{ietf-srv6-types@2024-11-21.yang => ietf-srv6-types@2025-07-07.yang} (52%) rename experimental/ietf-extracted-YANG-modules/{ietf-topology-filter@2024-02-20.yang => ietf-topology-filter@2025-07-07.yang} (98%) create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-vni-mng@2025-07-07.yang delete mode 100644 experimental/ietf-extracted-YANG-modules/ietf-yang-package-types@2025-03-03.yang create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-yang-package-types@2025-07-07.yang diff --git a/experimental/ietf-extracted-YANG-modules/draft-extended-example@2025-03-09.yang b/experimental/ietf-extracted-YANG-modules/draft-extended-example@2025-03-09.yang new file mode 100644 index 000000000..0470c981d --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/draft-extended-example@2025-03-09.yang @@ -0,0 +1,58 @@ +module draft-extended-example { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:draft-extended-example"; + prefix dr-ext-exp; + + import draft-template { + prefix dr-tmp; + } + + organization + "INSA Lyon"; + contact + "Editor: Vivekananda Boudia + "; + description + "add external references to RFC8345"; + revision 2025-03-09 { + description + "Initial revision."; + reference + ""; + } + + identity AUGMENT-EXAMPLE-TEMPLATE-TYPE { + base dr-tmp:template-type; + description + "augment example for template type"; + } + + identity AUGMENT-EXAMPLE-EXTRA-LABEL { + base dr-tmp:extra-label; + description + "augment example for extra label"; + } + + identity AUGMENT-EXAMPLE-REQUEST-TYPE { + base dr-tmp:request-type; + description + "augment example for request type"; + } + + grouping augment-example-request { + description + "augment example for a request"; + leaf foo { + type string; + description + "leaf example"; + } + } + + augment "/dr-tmp:template/dr-tmp:template/dr-tmp:request/dr-tmp:request-builder" { + when "derived-from-or-self(../dr-tmp:request-type, 'AUGMENT-EXAMPLE-REQUEST-TYPE')"; + uses augment-example-request; + description + "we add our example to the possible request type"; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/draft-relation@2025-03-09.yang b/experimental/ietf-extracted-YANG-modules/draft-relation@2025-03-09.yang new file mode 100644 index 000000000..33f414c47 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/draft-relation@2025-03-09.yang @@ -0,0 +1,132 @@ +module draft-relation { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:draft-relation"; + prefix dr-rel; + + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types"; + } + import ietf-network { + prefix nw; + reference + "RFC 8345: A YANG Data Model for Network Topologies"; + } + import ietf-network-topology { + prefix nt; + reference + "RFC 8345: A YANG Data Model for Network Topologies"; + } + import draft-template { + prefix dr-tmp; + } + + organization + "INSA Lyon"; + contact + "Editor: Vivekananda Boudia + "; + description + "relations external of RFC8345"; + + revision 2025-03-09 { + description + "Initial revision"; + reference + ""; + } + + container relation { + description + "relation container"; + list relation { + key "relation-id"; + description + "relation list"; + leaf relation-id { + type inet:uri; + description + "relation id"; + } + choice network-element-ref { + description + "linking to RFC8345"; + leaf network-ref { + type leafref { + path "/nw:networks/nw:network/nw:network-id"; + } + description + "linking to network"; + } + leaf node-ref { + type leafref { + path "/nw:networks/nw:network/nw:node/nw:node-id"; + } + description + "linking to node"; + } + leaf link-ref { + type leafref { + path "/nw:networks/nw:network/nt:link/nt:link-id"; + } + description + "linking to link"; + } + leaf tp-ref { + type leafref { + path "/nw:networks/nw:network/nw:node/nt:termination-point/nt:tp-id"; + } + description + "linking to termination point"; + } + } + leaf template-ref { + type leafref { + path "/dr-tmp:template/dr-tmp:template/dr-tmp:template-id"; + } + description + "reference to template"; + } + leaf-list request-type-supported { + type identityref { + base dr-tmp:request-type; + } + description + "template is generic and may include requests that are not supported by the network element + here, we specify the types of requests that the network element supports + if network element supports all template ALL-REQUEST may be used"; + } + leaf path { + type string; + description + "network element can be augmented and may contain containers nested within other containers. + path is used for filtering."; + } + list parameter-value { + key "param-ref request-type"; + description + "parameter value from network element"; + leaf param-ref { + type leafref { + path "/dr-tmp:template/dr-tmp:template/dr-tmp:parameter/dr-tmp:param-id"; + } + description + "reference to template parameter"; + } + leaf request-type { + type identityref { + base dr-tmp:request-type; + } + description + "value can be different depending on the request"; + } + leaf value { + type string; + description + "value of the parameter"; + } + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/draft-template@2025-03-09.yang b/experimental/ietf-extracted-YANG-modules/draft-template@2025-03-09.yang new file mode 100644 index 000000000..69fff0323 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/draft-template@2025-03-09.yang @@ -0,0 +1,165 @@ +module draft-template { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:draft-template"; + prefix dr-tmp; + + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types"; + } + + organization + "INSA Lyon"; + contact + "Editor: Vivekananda Boudia + "; + description + "template yang model"; + + revision 2025-03-09 { + description + "Initial revision"; + reference + ""; + } + + identity template-type { + description + "base identity for template type"; + } + + identity CONFIG { + base template-type; + description + "template used to retrieve configuration data"; + } + + identity STATE { + base template-type; + description + "template used to retrieve operational state data"; + } + + identity extra-label { + description + "base identity for extra label"; + } + + identity request-type { + description + "base identity for request type"; + } + + identity ALL_REQUEST { + base request-type; + description + "all request"; + } + + identity NETCONF { + base request-type; + description + "request that retrieves data using the NETCONF protocol"; + } + + grouping netconf-request { + description + "netconf request"; + leaf xpath { + type string; + description + "netconf xpath for request"; + } + } + + container template { + description + "template container"; + list template { + key "template-id"; + description + "template list"; + leaf template-id { + type inet:uri; + description + "uniquely identifies a template"; + } + leaf description { + type string; + description + "template description"; + } + container template-type { + description + "template type + used for filtering"; + leaf base { + type identityref { + base template-type; + } + description + "template base + used for filtering"; + } + leaf is-historical { + type boolean; + description + "check is template is used to get historical data or not + used for filtering"; + } + leaf-list extra-label { + type identityref { + base extra-label; + } + description + "extra label + used for filtering"; + } + } + list parameter { + key "param-id"; + description + "list of parameter used by request"; + leaf param-id { + type inet:uri; + description + "uniquely identifies a parameter"; + } + leaf description { + type string; + description + "parameter description"; + } + } + list request { + key "request-type"; + description + "request list"; + leaf request-type { + type identityref { + base request-type; + } + description + "request type"; + } + container request-builder { + description + "request container that allows users to retrieve data + parameters must be enclosed in brackets."; + } + } + container extra { + description + "use for augmentation"; + } + } + } + + augment "/template/template/request/request-builder" { + when "derived-from-or-self(../request-type, 'NETCONF')"; + uses netconf-request; + description + "adding netconf request to possible request"; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-incident@2024-06-06.yang b/experimental/ietf-extracted-YANG-modules/ietf-incident@2024-06-06.yang index df3f81622..3acc20a12 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-incident@2024-06-06.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-incident@2024-06-06.yang @@ -79,7 +79,7 @@ module ietf-incident { "RFC XXX: YANG module for network incident management."; } - //identities + // Identities identity incident-domain { description @@ -252,8 +252,8 @@ module ietf-incident { base incident-class; description "It indicates the class of the incident is a sla - violation, for example high CPU rate may cause - a fault in the future."; + violation, for example high CPU rate may cause + a fault in the future."; } identity acknowledge-error { @@ -300,7 +300,7 @@ module ietf-incident { base diagnose-error; base resolve-error; description - " The permission required for performing specific + "The permission required for performing specific detection/resolution task is not granted."; } @@ -308,15 +308,15 @@ module ietf-incident { base diagnose-error; base resolve-error; description - " The diagnosis/resolution time exceeds the preset time."; + "The diagnosis/resolution time exceeds the preset time."; } identity resource-unavailable { base diagnose-error; base resolve-error; description - " The resource is unavailable to perform - the diagnosis/resolution operation."; + "The resource is unavailable to perform + the diagnosis/resolution operation."; } identity cause-name { @@ -324,7 +324,7 @@ module ietf-incident { "Base identity for the cause name."; } - //typedefs + // Typedefs typedef incident-priority { type enumeration { @@ -362,13 +362,13 @@ module ietf-incident { "reference a network incident."; } - //groupings + // Groupings grouping probable-cause-info { description "The information of probable cause."; leaf cause-name { - type identityref{ + type identityref { base cause-name; } description @@ -451,13 +451,13 @@ module ietf-incident { description "The type of an incident."; } - leaf incident-id { - type string; - description - "The unique qualifier of an incident instance type. - This leaf is used when the 'type' leaf cannot - uniquely identify the incident instance type. Normally, - this is not the case, and this leaf is the empty string."; + leaf incident-id { + type string; + description + "The unique qualifier of an incident instance type. + This leaf is used when the 'type' leaf cannot + uniquely identify the incident instance type. Normally, + this is not the case, and this leaf is the empty string."; } leaf-list service-instance { type string; @@ -661,7 +661,7 @@ module ietf-incident { } } - // rpcs + // RPCs rpc incident-acknowledge { description @@ -783,7 +783,7 @@ module ietf-incident { } } - // notifications + // Notifications notification incident-notification { description @@ -802,7 +802,7 @@ module ietf-incident { } } - //data definitions + // Data definitions container incidents { config false; @@ -812,12 +812,12 @@ module ietf-incident { key "name type incident-id"; description "the information of incident."; - leaf incident-no { - type uint64; - mandatory true; - description + leaf incident-no { + type uint64; + mandatory true; + description "The unique sequence number of the incident instance."; - } + } uses incident-info; uses incident-time-info; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-lisp-address-types@2024-10-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-lisp-address-types@2024-10-20.yang index 43093fbd5..4a424e8fc 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-lisp-address-types@2024-10-20.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-lisp-address-types@2024-10-20.yang @@ -19,6 +19,7 @@ module ietf-lisp-address-types { contact "WG Web: WG List: + Editor: Vina Ermagan diff --git a/experimental/ietf-extracted-YANG-modules/ietf-lisp-etr@2024-10-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-lisp-etr@2024-10-20.yang index e1869b08b..700314b7b 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-lisp-etr@2024-10-20.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-lisp-etr@2024-10-20.yang @@ -25,7 +25,6 @@ module ietf-lisp-etr { "RFC 8349: A YANG Data Model for Routing Management (NMDA version)"; } - organization "IETF LISP (Locator/ID Separation Protocol) Working Group"; contact diff --git a/experimental/ietf-extracted-YANG-modules/ietf-lisp-itr@2024-10-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-lisp-itr@2024-10-20.yang index bb966fba8..28310993b 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-lisp-itr@2024-10-20.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-lisp-itr@2024-10-20.yang @@ -28,6 +28,7 @@ module ietf-lisp-itr { contact "WG Web: WG List: + Editor: Vina Ermagan diff --git a/experimental/ietf-extracted-YANG-modules/ietf-lm-hierarchy@2025-07-06.yang b/experimental/ietf-extracted-YANG-modules/ietf-lm-hierarchy@2025-07-06.yang new file mode 100644 index 000000000..fe4a37cf3 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-lm-hierarchy@2025-07-06.yang @@ -0,0 +1,201 @@ +module ietf-lm-hierarchy { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-lm-hierarchy"; + prefix lm; + + import ietf-inet-types { prefix inet; } + import ietf-yang-types { prefix yang; } + + organization + "IETF Network Modeling (NETMOD) Working Group"; + + contact + "WG Web: + WG List: + + Author: Keenan Williams + "; + + description + "This module defines a hierarchical topology model for + distributed language models (LMs), including request + escalation, authentication, and inter-node coordination. + + Copyright (c) 2025 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject to + the license terms contained in, the Revised BSD License set + forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC XXXX + (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself + for full legal notices."; + + revision 2025-07-06 { + description "Initial version"; + reference "RFC XXXX: Hierarchical Topology for Language Model + Coordination"; + } + + feature pluggable-token-validation { + description + "Indicates support for pluggable token validation + (e.g., JWTs, OIDC, or COSE)"; + } + + identity lm-node-type { + description "Base identity for LM node types."; + } + + identity tiny-lm { + base lm-node-type; + description "A lightweight edge-deployed language model."; + } + + identity small-lm { + base lm-node-type; + description "A mid-tier aggregator or summarizer."; + } + + identity large-lm { + base lm-node-type; + description "A central reasoning or escalation endpoint."; + } + + grouping auth-token-grouping { + description "Reusable auth-token structure."; + leaf auth-token { + type string; + description "A signed authentication/authorization token."; + } + } + + container lm-node { + description "Node-level configuration and operational state."; + + leaf node-id { + type string; + mandatory true; + description "Unique identifier of this LM node."; + } + + leaf node-type { + type identityref { + base lm-node-type; + } + mandatory true; + description "Classification of this node (tiny, small, large)."; + } + + container trust { + description "Token validation configuration."; + if-feature pluggable-token-validation; + + leaf trust-anchor { + type string; + description "Root or public key used for token validation."; + } + + leaf token-scope-enforced { + type boolean; + default true; + description "Whether to enforce scope claims in tokens."; + } + } + + action validate-token { + description + "Validates a received authentication token."; + input { + leaf token { + type string; + mandatory true; + } + } + output { + leaf valid { + type boolean; + } + leaf reason { + type string; + } + } + } + } + + rpc lm-request { + description "Submits an inference or summarization request."; + input { + uses auth-token-grouping; + leaf source-node { + type string; + mandatory true; + } + leaf target-node { + type string; + mandatory true; + } + leaf request-type { + type enumeration { + enum inference; + enum summarization; + } + mandatory true; + } + leaf payload { + type string; + mandatory true; + } + } + output { + leaf result { + type string; + } + leaf status { + type string; + } + } + } + + rpc model-escalation { + description "Forwards a request upward in the hierarchy."; + input { + uses auth-token-grouping; + leaf original-payload { + type string; + } + leaf reason { + type string; + } + } + output { + leaf resolution { + type string; + } + leaf downstream-directive { + type string; + } + } + } + + notification lm-heartbeat { + description "Emitted to indicate liveness of this node."; + leaf sender-node { + type string; + } + leaf status { + type enumeration { + enum alive; + enum degraded; + enum unreachable; + } + } + leaf timestamp { + type yang:date-and-time; + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp-extended@2024-12-01.yang b/experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp-extended@2025-07-05.yang similarity index 88% rename from experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp-extended@2024-12-01.yang rename to experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp-extended@2025-07-05.yang index 29bc48807..374e66b7f 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp-extended@2024-12-01.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp-extended@2025-07-05.yang @@ -90,6 +90,17 @@ module ietf-mpls-mldp-extended { // RFC Editor: replace XXXX with actual RFC number and remove // this note + revision 2025-07-05 { + // RFC Editor: replace the above date with the date of + // publication and remove this note. + description + "Addressing RtgDir review comments"; + reference + "RFC XXXX: Base YANG Data Model for MPLS mLDP"; + // RFC Editor: replace XXXX with actual RFC number and remove + // this note + } + revision 2024-12-01 { // RFC Editor: replace the above date 2024-12-01 with the date of // publication and remove this note. @@ -199,38 +210,6 @@ module ietf-mpls-mldp-extended { } // peer } // mldp-ext-binding-label-peer-state - grouping mldp-ext-binding-label-recur-fec-peer-state { - description - "mLDP label binding peer state."; - - list peer { - key "direction peer advertisement-type"; - description - "List of peers with bindings exchnaged (sent and/or received)"; - leaf peer { - type leafref { - path - "../../../../../../../../../../../../ldp:peers/ldp:peer/" - + "ldp:lsr-id"; - } - description - "[m]LDP peer from which this binding is received, or - to which this binding is advertised."; - } - uses mldp:mldp-binding-label-peer-state-attributes; - - leaf mofrr-status { - when "../direction = 'upstream'" { - description - "This leaf is used for MoFRR upstream direction only."; - } - type lsp-mofrr-role; - description - "The MoFRR status of this LSP"; - } - } // peer - } // mldp-ext-binding-label-recur-fec-peer-state - grouping mldp-ext-capabilities { description "mLDP extended capabilities"; @@ -304,9 +283,9 @@ module ietf-mpls-mldp-extended { } // recursive-fec } // mldp-ext-per-af-config-attributes - grouping recursive-fec-attributes { + grouping recursive-fec-base-attributes { description - "mLDP recursive FEC attributes."; + "mLDP recursive FEC base attributes."; reference "RFC6512: Using Multipoint LDP When the Backbone Has No Route to the Root"; @@ -315,18 +294,24 @@ module ietf-mpls-mldp-extended { description "Recursive root address"; } + } // recursive-fec-base-attributes + + grouping recursive-fec-attributes { + description + "mLDP recursive FEC attributes."; + reference + "RFC6512: Using Multipoint LDP When the + Backbone Has No Route to the Root"; + + uses recursive-fec-base-attributes; + leaf recur-rd { type rt-types:route-distinguisher; description "Route Distinguisher in the VPN-Recursive Opaque Value"; } - leaf multipoint-type { - type mldp:multipoint-type; - description - "The type of multipoint: p2mp or mp2mp"; - } - } // recursive-fec-attributes + } // recursive-fec-attributes /* * Configuration data and operational state data nodes @@ -362,31 +347,31 @@ module ietf-mpls-mldp-extended { uses mldp-ext-per-af-config-attributes; } - // IPv4 configured-leaf-lsps config + // IPv4 static-lsps-leaf config augment "/rt:routing/rt:control-plane-protocols/" + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/mldp:mldp/" - + "mldp:address-families/mldp:ipv4/mldp:configured-leaf-lsps/" + + "mldp:address-families/mldp:ipv4/mldp:static-lsps-leaf/" + "mldp:opaque-element-lspid/mldp:fec-label" { description - "Augmentation for mLDP IPv4 configured-leaf-lsps + "Augmentation for mLDP IPv4 static-lsps-leaf configuration for opaque-element-lspid with recursive-fec"; list recursive-fec { key - "recur-root-address recur-rd"; + "recur-root-address"; description "List of recursive-fec opaque values"; - uses recursive-fec-attributes; + uses recursive-fec-base-attributes; } // recursive-fec } augment "/rt:routing/rt:control-plane-protocols/" + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/mldp:mldp/" - + "mldp:address-families/mldp:ipv4/mldp:configured-leaf-lsps" { + + "mldp:address-families/mldp:ipv4/mldp:static-lsps-leaf" { description - "Augmentation for mLDP IPv4 configured-leaf-lsps + "Augmentation for mLDP IPv4 static-lsps-leaf configuration for other opaque types"; - container opaque-element-transit { + container opaque-element-transit-source { description "Transit IPv4/VPNv4 Source opaque type"; reference @@ -407,12 +392,12 @@ module ietf-mpls-mldp-extended { leaf source-address { type inet:ipv4-address; description - "Source address"; + "Source address (0.0.0.0 refers to wildcard *)"; } leaf group-address { type inet:ipv4-address; description - "Group address"; + "Group address (0.0.0.0 refers to wildcard *)"; } leaf rd { type rt-types:route-distinguisher; @@ -426,9 +411,9 @@ module ietf-mpls-mldp-extended { } uses recursive-fec-attributes; } // fec-label - } // opaque-element-transit + } // opaque-element-transit-source - container opaque-element-bidir { + container opaque-element-transit-bidir { description "Transit IPv4/VPNv4 Bidir opaque type"; reference @@ -438,7 +423,7 @@ module ietf-mpls-mldp-extended { Paths."; list fec-label { key - "root-address rp group-address rd recur-root-address " + "root-address masklen rp group-address rd recur-root-address " + "recur-rd"; description "List of FEC-label bindings"; @@ -447,6 +432,10 @@ module ietf-mpls-mldp-extended { description "Root address"; } + leaf masklen { + type uint8; + description "Mask length for the subnet"; + } leaf rp { type inet:ipv4-address; description @@ -469,7 +458,7 @@ module ietf-mpls-mldp-extended { } uses recursive-fec-attributes; } // fec-label - } // opaque-element-bidir + } // opaque-element-transit-bidir } // IPv6 config @@ -564,7 +553,7 @@ module ietf-mpls-mldp-extended { + "mldp:bindings" { description "Augmentation for mLDP IPv4 bindings extended type."; - container opaque-element-transit { + container opaque-element-transit-source { description "Transit IPv4/VPNv4 Source opaque type"; reference @@ -580,12 +569,12 @@ module ietf-mpls-mldp-extended { leaf source-address { type inet:ipv4-address; description - "Source address"; + "Source address (0.0.0.0 refers to wildcard *)"; } leaf group-address { type inet:ipv4-address; description - "Group address"; + "Group address (0.0.0.0 refers to wildcard *)"; } leaf rd { type rt-types:route-distinguisher; @@ -600,9 +589,9 @@ module ietf-mpls-mldp-extended { uses recursive-fec-attributes; uses mldp-ext-binding-label-peer-state; } // fec-label - } // opaque-element-transit + } // opaque-element-transit-source - container opaque-element-bidir { + container opaque-element-transit-bidir { description "Transit IPv4/VPNv4 Bidir opaque type"; reference @@ -612,9 +601,13 @@ module ietf-mpls-mldp-extended { Paths."; list fec-label { key - "rp group-address rd recur-root-address recur-rd"; + "masklen rp group-address rd recur-root-address recur-rd"; description "List of FEC-label bindings"; + leaf masklen { + type uint8; + description "Mask length for the subnet"; + } leaf rp { type inet:ipv4-address; description @@ -638,7 +631,7 @@ module ietf-mpls-mldp-extended { uses recursive-fec-attributes; uses mldp-ext-binding-label-peer-state; } // fec-label - } // opaque-element-bidir + } // opaque-element-transit-bidir } // IPv6 bindings state @@ -646,7 +639,7 @@ module ietf-mpls-mldp-extended { + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/mldp:mldp/" + "mldp:address-families/ipv6/roots/root/bindings" { description "Augmentation for mLDP IPv6 bindings."; - container opaque-element-transit { + container opaque-element-transit-source { config false; description "Transit IPv6/VPNv6 Source opaque type"; @@ -664,12 +657,12 @@ module ietf-mpls-mldp-extended { leaf source-address { type inet:ipv6-address; description - "Source address"; + "Source address (::0 refers to wildcard *)"; } leaf group-address { type inet:ipv6-address; description - "Group address"; + "Group address (::0 refers to wildcard *)"; } leaf rd { type rt-types:route-distinguisher; @@ -684,9 +677,9 @@ module ietf-mpls-mldp-extended { uses recursive-fec-attributes; uses mldp-ext-binding-label-peer-state; } // fec-label - } // opaque-element-transit + } // opaque-element-transit-source - container opaque-element-bidir { + container opaque-element-transit-bidir { config false; description "Transit IPv6/VPNv6 Bidir opaque type"; @@ -697,9 +690,13 @@ module ietf-mpls-mldp-extended { Paths."; list fec-label { key - "rp group-address rd recur-root-address recur-rd"; + "masklen rp group-address rd recur-root-address recur-rd"; description "List of FEC-label bindings"; + leaf masklen { + type uint8; + description "Mask length for the subnet"; + } leaf rp { type inet:ipv6-address; description @@ -723,7 +720,7 @@ module ietf-mpls-mldp-extended { uses recursive-fec-attributes; uses mldp-ext-binding-label-peer-state; } // fec-label - } // opaque-element-bidir + } // opaque-element-transit-bidir } // IPv4 bindings opaque-element-lspid state @@ -735,11 +732,10 @@ module ietf-mpls-mldp-extended { "Augmentation for mLDP IPv4 bindings opaque type LSP ID."; list recursive-fec { key - "recur-root-address recur-rd"; + "recur-root-address"; description "List of recursive opaque values"; - uses recursive-fec-attributes; - uses mldp-ext-binding-label-recur-fec-peer-state; + uses recursive-fec-base-attributes; } // recursive-fec } @@ -751,12 +747,11 @@ module ietf-mpls-mldp-extended { description "Augmentation for mLDP IPv6 bindings with opaque type LSP ID."; list recursive-fec { - key "recur-root-address recur-rd"; + key "recur-root-address"; config false; description "List of recursive opaque values"; - uses recursive-fec-attributes; - uses mldp-ext-binding-label-recur-fec-peer-state; + uses recursive-fec-base-attributes; } // recursive-fec } @@ -859,9 +854,9 @@ module ietf-mpls-mldp-extended { } // list root } // roots - container configured-leaf-lsps { + container static-lsps-leaf { description - "Configured multicast LSPs."; + "Statically Configured multicast LSPs at leaf node."; container opaque-element-lspid { description @@ -892,15 +887,15 @@ module ietf-mpls-mldp-extended { } list recursive-fec { key - "recur-root-address recur-rd"; + "recur-root-address"; description "List of recursive opaque values"; - uses recursive-fec-attributes; + uses recursive-fec-base-attributes; } // recursive-fec } // fec-label } // opaque-element-lspid - container opaque-element-transit { + container opaque-element-transit-source { description "Transit IPv6/VPNv6 Source opaque type"; reference @@ -921,12 +916,12 @@ module ietf-mpls-mldp-extended { leaf source-address { type inet:ipv6-address; description - "Source address"; + "Source address (::0 refers to wildcard *)"; } leaf group-address { type inet:ipv6-address; description - "Group address"; + "Group address (::0 refers to wildcard *)"; } leaf rd { type rt-types:route-distinguisher; @@ -940,8 +935,9 @@ module ietf-mpls-mldp-extended { } uses recursive-fec-attributes; } // fec-label - } // opaque-element-transit - container opaque-element-bidir { + } // opaque-element-transit-source + + container opaque-element-transit-bidir { description "Transit IPv6/VPNv6 Bidir opaque type"; reference @@ -951,7 +947,7 @@ module ietf-mpls-mldp-extended { Paths."; list fec-label { key - "root-address rp group-address rd recur-root-address " + "root-address masklen rp group-address rd recur-root-address " + "recur-rd"; description "List of FEC-label bindings."; @@ -960,6 +956,10 @@ module ietf-mpls-mldp-extended { description "Root address"; } + leaf masklen { + type uint8; + description "Mask length for the subnet"; + } leaf rp { type inet:ipv6-address; description @@ -982,8 +982,8 @@ module ietf-mpls-mldp-extended { } uses recursive-fec-attributes; } // fec-label - } // opaque-element-bidir - } // configured-leaf-lsps + } // opaque-element-transit-bidir + } // static-lsps-leaf } // ipv6 } @@ -1000,15 +1000,15 @@ module ietf-mpls-mldp-extended { container recursive-fec { description "Container of recursive opaque values"; - uses recursive-fec-attributes; + uses recursive-fec-base-attributes; } // recursive-fec } augment "/mldp:mpls-mldp-fec-event/mldp:opaque-element" { description "Augmentation for mLDP notification for opaque types other than lspid."; - case opaque-element-transit { - container opaque-element-transit { + case opaque-element-transit-source { + container opaque-element-transit-source { description "Transit IP/VPN Source opaque type"; reference @@ -1041,11 +1041,11 @@ module ietf-mpls-mldp-extended { Context."; } uses recursive-fec-attributes; - } // opaque-element-transit container - } // opaque-element-transit case + } // opaque-element-transit-source container + } // opaque-element-transit-source case - case opaque-element-bidir { - container opaque-element-bidir { + case opaque-element-transit-bidir { + container opaque-element-transit-bidir { description "Transit IP/VPN Bidir opaque type"; reference @@ -1058,6 +1058,10 @@ module ietf-mpls-mldp-extended { description "Root address"; } + leaf masklen { + type uint8; + description "Mask length for the subnet"; + } leaf rp { type inet:ip-address; description @@ -1079,7 +1083,7 @@ module ietf-mpls-mldp-extended { Context."; } uses recursive-fec-attributes; - } // opaque-element-bidir container - } // opaque-element-bidir case + } // opaque-element-transit-bidir container + } // opaque-element-transit-bidir case } // augment } // module diff --git a/experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp@2024-12-01.yang b/experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp@2025-07-05.yang similarity index 96% rename from experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp@2024-12-01.yang rename to experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp@2025-07-05.yang index 349356adb..060e6c4e3 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp@2024-12-01.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-mpls-mldp@2025-07-05.yang @@ -79,6 +79,17 @@ module ietf-mpls-mldp { // RFC Editor: replace XXXX with actual RFC number and remove // this note + revision 2025-07-05 { + // RFC Editor: replace the above date with the date of + // publication and remove this note. + description + "Addressing RtgDir review comments"; + reference + "RFC XXXX: Base YANG Data Model for MPLS mLDP"; + // RFC Editor: replace XXXX with actual RFC number and remove + // this note + } + revision 2024-12-01 { // RFC Editor: replace the above date 2024-12-01 with the date of // publication and remove this note. @@ -413,9 +424,9 @@ module ietf-mpls-mldp { } // list root } // roots - container configured-leaf-lsps { + container static-lsps-leaf { description - "Configured multicast LSPs."; + "Statically Configured multicast LSPs at leaf node."; container opaque-element-lspid { description "Generic LSP identifier opaque element FEC-label bindings container"; @@ -445,7 +456,7 @@ module ietf-mpls-mldp { } } // fec-label } // opaque-element-lspid - } // configured-leaf-lsps + } // static-lsps-leaf } // ipv4 } // list address-family } // mldp diff --git a/experimental/ietf-extracted-YANG-modules/ietf-network-inventory@2025-02-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-network-inventory@2025-07-02.yang similarity index 53% rename from experimental/ietf-extracted-YANG-modules/ietf-network-inventory@2025-02-03.yang rename to experimental/ietf-extracted-YANG-modules/ietf-network-inventory@2025-07-02.yang index 82662841f..7fe08485a 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-network-inventory@2025-02-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-network-inventory@2025-07-02.yang @@ -68,7 +68,7 @@ module ietf-network-inventory { // RFC Ed.: update the date below with the date of RFC publication // and remove this note. - revision 2025-02-03 { + revision 2025-07-02 { description "Initial version"; reference @@ -118,12 +118,12 @@ module ietf-network-inventory { typedef ne-ref { type leafref { - path "/nwi:network-inventory/nwi:network-elements" - + "/nwi:network-element/nwi:ne-id"; + path "/nwi:network-inventory/nwi:network-elements" + + "/nwi:network-element/nwi:ne-id"; } description "This type is intended to be used by data models that need to - reference Network Element."; + reference Network Element."; } /* @@ -133,19 +133,18 @@ module ietf-network-inventory { grouping port-ref { description "This grouping is intended to be used by data models that need - to reference a port component within a Network Element."; + to reference a port component within a Network Element."; leaf ne-ref { type nwi:ne-ref; description "The reference to the Network Element which contains the - port to be referenced."; + port to be referenced."; } leaf port-ref { type leafref { - path - "/nwi:network-inventory/nwi:network-elements/" - + "nwi:network-element[nwi:ne-id=current()/../ne-ref]" - + "/nwi:components/nwi:component/nwi:component-id"; + path "/nwi:network-inventory/nwi:network-elements/" + + "nwi:network-element[nwi:ne-id=current()/../ne-ref]" + + "/nwi:components/nwi:component/nwi:component-id"; } must "derived-from-or-self (/nwi:network-inventory/ nwi:network-elements/nwi:network-element @@ -169,10 +168,9 @@ module ietf-network-inventory { } leaf transceiver-module-ref { type leafref { - path - "/nwi:network-inventory/nwi:network-elements/" - + "nwi:network-element[nwi:ne-id=current()/../ne-ref]" - + "/nwi:components/nwi:component/nwi:component-id"; + path "/nwi:network-inventory/nwi:network-elements/" + + "nwi:network-element[nwi:ne-id=current()/../ne-ref]" + + "/nwi:components/nwi:component/nwi:component-id"; } must "derived-from-or-self (/nwi:network-inventory/ nwi:network-elements/nwi:network-element @@ -184,24 +182,160 @@ module ietf-network-inventory { } leaf-list channel-ref { type leafref { - path "/nwi:network-inventory/nwi:network-elements" - + "/nwi:network-element[nwi:ne-id=current()/../ne-ref]/" - + "nwi:components/" - + "nwi:component[nwi:component-id=" - + "current()/../transceiver-module-ref]/" - + "nwi:transceiver-module-specific-info/" - + "nwi:breakout-channels/nwi:breakout-channel/" - + "nwi:channel-id"; + path "/nwi:network-inventory/nwi:network-elements" + + "/nwi:network-element[nwi:ne-id=current()/../ne-ref]/" + + "nwi:components/" + + "nwi:component[nwi:component-id=" + + "current()/../transceiver-module-ref]/" + + "nwi:breakout-channels/nwi:breakout-channel/" + + "nwi:channel-id"; } description "The references to the breakout channels."; } } - grouping common-entity-attributes { + grouping component-attributes { description - "The set of attributes which are common to all the entities - (e.g., component, network elements) defined in this module."; + "The set of common attributes of a component. + + This grouping is intended also to be re-used by data models + that need to report the common attributes of a component."; + leaf component-id { + type string; + description + "An identifier that uniquely identifies the component + in a node."; + } + leaf class { + type union { + type identityref { + base ianahw:hardware-class; + } + type identityref { + base non-hardware-component-class; + } + } + config false; + mandatory true; + description + "The type of the component."; + } + uses ne-component-common-entity-attributes { + refine "hardware-rev" { + description + "The vendor-specific hardware revision string for + the component. The preferred value is the hardware + revision identifier actually printed on the + component itself (if present)."; + reference + "RFC 6933: Entity MIB (Version 4) - + entPhysicalHardwareRev"; + } + refine "software-rev" { + reference + "RFC 6933: Entity MIB (Version 4) - + entPhysicalSoftwareRev"; + } + refine "mfg-name" { + description + "The name of the manufacturer of this physical + component. + The preferred value is the manufacturer name + string actually printed on the component itself + (if present). + + Note that comparisons between instances of the + 'model-name', 'firmware-rev', 'software-rev', and + 'serial-number' nodes are only meaningful amongst + components with the same value of 'mfg-name'. + + If the manufacturer name string associated with + the physical component is unknown to the server, + then this node is not instantiated."; + reference + "RFC 6933: Entity MIB (Version 4) - + entPhysicalMfgName"; + } + refine "mfg-date" { + description + "The date of manufacturing of the managed + component."; + reference + "RFC 6933: Entity MIB (Version 4) - + entPhysicalMfgDate"; + } + } + leaf firmware-rev { + type string; + config false; + description + "The vendor-specific firmware revision string for the + component."; + reference + "RFC 6933: Entity MIB (Version 4) - + entPhysicalFirmwareRev"; + } + leaf part-number { + type string; + config false; + description + "The vendor-specific part number of the component + type. It is expected that vendors assign unique part + numbers to different component types within the + scope of the vendor."; + } + leaf asset-id { + type string; + config false; + description + "This node is a user-assigned asset tracking + identifier for the component. + + A server implementation MAY map this leaf to the + entPhysicalAssetID MIB object. Such an + implementation needs to use some mechanism to handle + the differences in size and characters allowed + between this leaf and entPhysicalAssetID. + + The definition of such a mechanism is outside the + scope of this document."; + reference + "RFC 6933: Entity MIB (Version 4) - + entPhysicalAssetID"; + } + leaf is-fru { + type boolean; + config false; + description + "This node indicates whether or not this component is + considered a 'field-replaceable unit' by the vendor. + If this node contains the value 'true', then this + component identifies a field-replaceable unit. + For all components that are permanently contained + within a field-replaceable unit, the value 'false' + should be returned for this node."; + reference + "RFC 6933: Entity MIB (Version 4) - + entPhysicalIsFRU"; + } + leaf-list uri { + type inet:uri; + config false; + description + "This node contains identification information about + the component."; + reference + "RFC 6933: Entity MIB (Version 4) - entPhysicalUris"; + } + } + + grouping basic-common-entity-attributes { + description + "The set of basic attributes which are common to all the + entities (e.g., component, network elements, location, passive + entities) defined in this module and in other inventory + modules."; leaf uuid { type yang:uuid; config false; @@ -232,6 +366,13 @@ module ietf-network-inventory { "The alias name of the entity (e.g., component). This alias name can be specified by network manager."; } + } + + grouping ne-component-common-entity-attributes { + description + "The set of attributes which are common to all the entities + (e.g., component, network elements) defined in this module."; + uses basic-common-entity-attributes; leaf hardware-rev { type string; config false; @@ -316,7 +457,7 @@ module ietf-network-inventory { description "The NE type."; } - uses common-entity-attributes; + uses ne-component-common-entity-attributes; container components { description "The top-level container for the list of components @@ -325,109 +466,7 @@ module ietf-network-inventory { key "component-id"; description "The list of components within a network element."; - leaf component-id { - type string; - description - "An identifier that uniquely identifies the component - in a node."; - } - leaf class { - type union { - type identityref { - base ianahw:hardware-class; - } - type identityref { - base non-hardware-component-class; - } - } - config false; - mandatory true; - description - "The type of the component."; - } - uses common-entity-attributes { - refine "hardware-rev" { - description - "The vendor-specific hardware revision string for - the component. The preferred value is the hardware - revision identifier actually printed on the - component itself (if present)."; - reference - "RFC 6933: Entity MIB (Version 4) - - entPhysicalHardwareRev"; - } - refine "software-rev" { - reference - "RFC 6933: Entity MIB (Version 4) - - entPhysicalSoftwareRev"; - } - refine "mfg-name" { - description - "The name of the manufacturer of this physical - component. - The preferred value is the manufacturer name - string actually printed on the component itself - (if present). - - Note that comparisons between instances of the - 'model-name', 'firmware-rev', 'software-rev', and - 'serial-number' nodes are only meaningful amongst - components with the same value of 'mfg-name'. - - If the manufacturer name string associated with - the physical component is unknown to the server, - then this node is not instantiated."; - reference - "RFC 6933: Entity MIB (Version 4) - - entPhysicalMfgName"; - } - refine "mfg-date" { - description - "The date of manufacturing of the managed - component."; - reference - "RFC 6933: Entity MIB (Version 4) - - entPhysicalMfgDate"; - } - } - leaf firmware-rev { - type string; - config false; - description - "The vendor-specific firmware revision string for the - component."; - reference - "RFC 6933: Entity MIB (Version 4) - - entPhysicalFirmwareRev"; - } - leaf part-number { - type string; - config false; - description - "The vendor-specific part number of the component - type. It is expected that vendors assign unique part - numbers to different component types within the - scope of the vendor."; - } - leaf asset-id { - type string; - config false; - description - "This node is a user-assigned asset tracking - identifier for the component. - - A server implementation MAY map this leaf to the - entPhysicalAssetID MIB object. Such an - implementation needs to use some mechanism to handle - the differences in size and characters allowed - between this leaf and entPhysicalAssetID. - - The definition of such a mechanism is outside the - scope of this document."; - reference - "RFC 6933: Entity MIB (Version 4) - - entPhysicalAssetID"; - } + uses component-attributes; container child-component-ref { config false; description @@ -456,109 +495,57 @@ module ietf-network-inventory { config false; description "The identifier of the component that physically - contains this component. - - If this leaf is not instantiated, it indicates that - this component is not contained in any other - component. - - In the event that a physical component is contained - by more than one physical component - (e.g., double-wide modules), this node contains the - identifier of one of these components. - An implementation MUST use the same name every time - this node is instantiated."; + contains this component. + + If this leaf is not instantiated, it indicates that + this component is not contained in any other + component. + + In the event that a physical component is contained + by more than one physical component + (e.g., double-wide modules), this node contains the + identifier of one of these components. + An implementation MUST use the same name every time + this node is instantiated."; reference - "RFC 6933: Entity MIB (Version 4) - + "RFC 6933: Entity MIB (Version 4) - entPhysicalContainedIn"; - } - leaf is-fru { + leaf is-main { + when "derived-from-or-self(../nwi:class, " + + "'ianahw:chassis')"; type boolean; config false; description - "This node indicates whether or not this component is - considered a 'field-replaceable unit' by the vendor. - If this node contains the value 'true', then this - component identifies a field-replaceable unit. - For all components that are permanently contained - within a field-replaceable unit, the value 'false' - should be returned for this node."; - reference - "RFC 6933: Entity MIB (Version 4) - - entPhysicalIsFRU"; - } - leaf-list uri { - type inet:uri; - config false; - description - "This node contains identification information about - the component."; - reference - "RFC 6933: Entity MIB (Version 4) - entPhysicalUris"; - } - container chassis-specific-info { - when - "derived-from-or-self(../nwi:class, - 'ianahw:chassis')"; - config false; - description - "This container contains some attributes belong to - chassis only."; - } - container slot-specific-info { - when - "derived-from-or-self(../nwi:class, - 'ianahw:container')"; - config false; - description - "This container contains some attributes belong to - slot only."; - } - container board-specific-info { - when - "derived-from-or-self(../nwi:class, - 'ianahw:module')"; - config false; - description - "This container contains some attributes belong to - board only."; - } - container port-specific-info { - when - "derived-from-or-self(../nwi:class, 'ianahw:port')"; - config false; - description - "This container contains some attributes belong to - port only."; + "This node indicates whether the chassis is taking or + not the 'main' role. + + This node is applicable only to scenarios where + there are chassis components which can take the + 'main' role (e.g., multi-chassis network elements), + otherwise it is omitted."; } - container transceiver-module-specific-info { - when - "derived-from-or-self(../nwi:class, - 'nwi:transceiver-module')"; + container breakout-channels { + when "derived-from-or-self(../nwi:class, " + + "'nwi:transceiver-module')"; + presence + "When present, it indicates that port breakout is + supported."; config false; description - "This container contains some attributes belong to - transceivers modules only."; - container breakout-channels { - presence - "When present, it indicates that port breakout is - supported."; + "Top level container for the list of breakout + channels supported by the transceivers module."; + list breakout-channel { + key "channel-id"; description - "Top level container for the list of breakout - channels supported by the transceivers module."; - list breakout-channel { - key "channel-id"; - leaf channel-id { - type uint8; - description - "An identifier that uniquely identifies the - breakout channel within the transceiver - module."; - } + "The list of breakout channels supported by the + transceivers module."; + leaf channel-id { + type uint8; description - "The list of breakout channels supported by the - transceivers module."; + "An identifier that uniquely identifies the + breakout channel within the transceiver + module."; } } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-nwi-passive-inventory@2025-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-nwi-passive-inventory@2025-07-07.yang new file mode 100644 index 000000000..57d3894a1 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-nwi-passive-inventory@2025-07-07.yang @@ -0,0 +1,531 @@ +module ietf-nwi-passive-inventory { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-nwi-passive-inventory"; + prefix nwi-passive; + + import ietf-network-inventory { + prefix nwi; + reference + "RFCXXXX: A YANG Data Model for Network Inventory"; + //RFC Editor: replace XXXX with actual RFC number + //and remove this note + } + import ietf-ni-location { + prefix nil; + reference + "RFCYYYY: A YANG Data Model for Network Inventory Location"; + //RFC Editor: replace YYYY with actual RFC number + //and remove this note + } + organization + "IETF Network Inventory YANG (ivy) Working Group"; + contact + "WG Web: + WG List: + + Editor: Chaode Yu + + + Editor: Aihua Guo + + + Editor: Italo Busi + "; + + description + "This YANG module specifies a data model for passive + devices, such as fibers, cables, and passive sites, + deployed within and between network elements. + + The model fully conforms to the Network Management + Datastore Architecture (NMDA). + + Copyright (c) 2023 IETF Trust and the persons + identified as authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Revised BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC XXXX; see + the RFC itself for full legal notices. + + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL + NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', + 'MAY', and 'OPTIONAL' in this document are to be interpreted as + described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, + they appear in all capitals, as shown here."; + + // RFC Ed.: replace XXXX with actual RFC number and remove this + // note. + // RFC Ed.: update the date below with the date of RFC publication + // and remove this note. + + revision 2025-07-07 { + description + "Initial version"; + reference + "RFC XXXX: A YANG Data Model for Passive Device Info in + Network Inventory."; + //RFC Editor: replace XXXX with actual RFC number, update date + //information and remove this note + } + + /* Identities */ + identity fiber-type { + description + "Base identity for fiber types."; + } + identity G652A { + base fiber-type; + description + "ITU-T G.652A fiber."; + } + identity G652B { + base fiber-type; + description + "ITU-T G.652B fiber."; + } + identity G652C { + base fiber-type; + description + "ITU-T G.652C fiber."; + } + identity G652D { + base fiber-type; + description + "ITU-T G.652D fiber."; + } + identity G653 { + base fiber-type; + description + "ITU-T G.653 fiber."; + } + identity G654 { + base fiber-type; + description + "ITU-T G.654 fiber."; + } + identity G655 { + base fiber-type; + description + "ITU-T G.655 fiber."; + } + identity G656 { + base fiber-type; + description + "ITU-T G.656 fiber."; + } + identity G657A1 { + base fiber-type; + description + "ITU-T G.657A1 fiber."; + } + identity G657A2 { + base fiber-type; + description + "ITU-T G.657A2 fiber."; + } + identity G657B { + base fiber-type; + description + "ITU-T G.657B fiber."; + } + identity other { + base fiber-type; + description + "Other type of fiber."; + } + + identity cable-type { + description + "Base identity for cable types."; + } + identity optical-fiber { + base cable-type; + description + "Fiber optic cable."; + } + identity electrical-cable { + base cable-type; + description + "Electrical cable."; + } + identity coaxial-cable { + base electrical-cable; + description + "Coaxial cable."; + } + + identity cable-role { + description + "Base identity for cable roles."; + } + identity backbone { + base cable-role; + description + "Backbone cable."; + } + identity aggregation { + base cable-role; + description + "Aggregation cable."; + } + identity access { + base cable-role; + description + "Access cable."; + } + identity trunk { + base cable-role; + description + "Trunk cable."; + } + identity distribution { + base cable-role; + description + "Distribution cable."; + } + identity branch { + base cable-role; + description + "Branch cable."; + } + + identity passive-port-type { + description + "Base identity for passive port types."; + } + identity service-port { + base passive-port-type; + description + "Service port."; + } + identity input-port { + base passive-port-type; + description + "Input port."; + } + identity output-port { + base passive-port-type; + description + "Output port."; + } + identity p2mp-port { + base passive-port-type; + description + "Input port."; + } + + identity connected-device-type { + description + "Base identity for connected device types."; + } + identity passive-device { + base connected-device-type; + description + "Passive/unmanaged device."; + } + identity active-device { + base connected-device-type; + description + "Active device, e.g. network element."; + } + + identity passive-device-type { + description + "Base identity for passive device types."; + } + identity ODF { + base passive-device-type; + description + "Optical Distribution Frame."; + } + identity WDM { + base passive-device-type; + description + "Wavelength Division Multiplexer."; + } + identity FAT { + base passive-device-type; + description + "Fiber Access Terminal."; + } + identity FDT { + base passive-device-type; + description + "Fiber Distribution Terminal."; + } + identity ATB { + base passive-device-type; + description + "Access Terminal Box."; + } + + /* Groupings */ + grouping connected-device-end { + description + "Attributes applicable to connected device end."; + + leaf device-type { + type identityref { + base connected-device-type; + } + description + "Type of connected device."; + } + + choice connected-device-type { + description + "Device end based on the type of connected device."; + case passive { + leaf device-id { + type string; + must "derived-from-or-self(../device-type, + 'nwi-passive:passive-device')"; + description + "Connected passive device identifier."; + } + } + case active { + leaf ne-ref { + type leafref { + path "/nwi:network-inventory/nwi:network-elements" + + "/nwi:network-element/nwi:ne-id"; + } + must "derived-from-or-self(../device-type, + 'nwi-passive:active-device')"; + description + "Referenced Network Element (NE)."; + } + leaf component-ref { + type leafref { + path "/nwi:network-inventory/nwi:network-elements" + + "/nwi:network-element[nwi:ne-id=current()/.." + + "/ne-ref]/nwi:components/nwi:component" + + "/nwi:component-id"; + } + must "derived-from-or-self(../device-type, + 'nwi-passive:active-device')"; + description + "Referenced connected active device's component, + e.g. port component."; + } + } + } + } + + grouping connected-device-ref { + description + "Attributes applicable to connected devices."; + + container a-end { + description + "A-end device reference"; + uses connected-device-end; + } + + container z-end { + description + "Z-end device reference"; + uses connected-device-end; + } + } + + grouping common-cable-attributes { + description + "Common attributes of cables applicable to the cable + and its child cables."; + + leaf id { + type string; + description + "Cable identifier."; + } + + leaf length { + type uint32; + units "meter"; + description + "Length of the cable in meter."; + } + + uses connected-device-ref; + } + + grouping optical-cable-attributes { + description + "Attributes applicable to fiber optic cables."; + + container optical-cable { + when + "derived-from-or-self(../cable-type, 'optical-fiber')"; + + description + "Container for attributes associated with fiber + optic cables."; + + leaf fiber-core-num { + type uint32; + description + "Number of fiber cores within the cable."; + } + leaf fiber-type { + type identityref { + base fiber-type; + } + description + "Type of fiber contained in the cable."; + } + leaf attenuation { + type decimal64 { + fraction-digits 2; + } + units "dB"; + description + "The fiber attenuation in dB."; + } + } + } + + grouping cable-attributes { + description + "Attributes of cables."; + + uses common-cable-attributes; + uses nwi:basic-common-entity-attributes; + + leaf cable-type { + type identityref { + base cable-type; + } + description + "Type of cable."; + } + + leaf cable-role { + type identityref { + base cable-role; + } + description + "Role of cable."; + } + + uses optical-cable-attributes; + } + + grouping child-cables { + description + "Attributes applicable to child cables that are concatnated + to form the cable."; + + list child-cable { + key "index"; + min-elements 2; + description + "Ordered list of concatenated child cables."; + + leaf index { + type uint8; + description + "An index number used to identify the concatenation + order of the child cables."; + } + + uses common-cable-attributes; + } + } + + grouping cables { + description + "Attributes applicable to cables."; + + list cable { + key "id"; + description + "List of cables."; + + uses cable-attributes; + uses child-cables; + } + } + + grouping passive-device-ports { + description + "Attributes applicable to passive device ports."; + + list passive-port { + key "id"; + description + "List of ports on a passive device."; + + leaf id { + type string; + description + "Port identifier."; + } + uses nwi:basic-common-entity-attributes; + leaf port-type { + type identityref { + base passive-port-type; + } + description + "Type of passive port."; + } + leaf fiber-core-num { + type uint32; + description + "Number of fiber cores within the port."; + } + } + } + + grouping passive-devices { + description + "Attributes applicable to passive devices."; + + list passive-device { + key "id"; + description + "List of passive devices."; + + leaf id { + type string; + description + "Cable identifier."; + } + uses nwi:basic-common-entity-attributes; + leaf device-type { + type identityref { + base passive-device-type; + } + description + "Type of passive device."; + } + leaf-list custom-tags { + type string; + description + "Customized tags, e.g. RFID, QR code that are + attached to the device."; + } + leaf location-ref { + type nil:ni-location-ref; + description + "Referenced location for the passive device."; + } + uses passive-device-ports; + } + } + + /* Augmentation */ + augment "/nwi:network-inventory" { + description + "Augment network inventory with information + for optical cables and passive devices."; + uses cables; + uses passive-devices; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-optical-impairment-topology@2024-05-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-optical-impairment-topology@2025-06-24.yang similarity index 50% rename from experimental/ietf-extracted-YANG-modules/ietf-optical-impairment-topology@2024-05-21.yang rename to experimental/ietf-extracted-YANG-modules/ietf-optical-impairment-topology@2025-06-24.yang index 70496a105..71d430308 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-optical-impairment-topology@2024-05-21.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-optical-impairment-topology@2025-06-24.yang @@ -2,39 +2,36 @@ module ietf-optical-impairment-topology { yang-version 1.1; namespace "urn:ietf:params:xml" + ":ns:yang:ietf-optical-impairment-topology"; - prefix "oit"; + prefix oit; import ietf-network { - prefix "nw"; + prefix nw; reference "RFC 8345: A YANG Data Model for Network Topologies"; } - import ietf-network-topology { - prefix "nt"; + prefix nt; reference "RFC 8345: A YANG Data Model for Network Topologies"; } - import ietf-te-topology { - prefix "tet"; + prefix tet; reference - "RFC 8795: YANG Data Model for Traffic Engineering (TE) - Topologies"; + "RFC 8795: YANG Data Model for Traffic Engineering (TE) + Topologies"; } - import ietf-te-types { - prefix "te-types"; + prefix te-types; reference "RFC YYYY: Updated Common YANG Data Types for Traffic - Engineering"; + Engineering"; } /* Note: The RFC Editor will replace YYYY with the number assigned to the RFC once draft-ietf-teas-rfc8776-update becomes an RFC.*/ import ietf-layer0-types { - prefix "l0-types"; + prefix l0-types; reference "RFC ZZZZ: A YANG Data Model for Layer 0 Types"; } @@ -44,7 +41,6 @@ module ietf-optical-impairment-topology { organization "IETF CCAMP Working Group"; - contact "WG Web: WG List: @@ -53,7 +49,7 @@ module ietf-optical-impairment-topology { Editor: Haomian Zheng Editor: Nicola Sambo Editor: Victor Lopez - Editor: Gabriele Galimberti + Editor: Gabriele Galimberti Editor: Giovanni Martinelli Editor: Jean-Luc Auge Editor: Le Rouzic Esther @@ -63,12 +59,11 @@ module ietf-optical-impairment-topology { Editor: Sergio Belotti Editor: Griseri Enrico Editor: Gert Grammel "; - description "This module contains a collection of YANG definitions for impairment-aware optical networks. - Copyright (c) 2024 IETF Trust and the persons identified as + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -79,15 +74,22 @@ module ietf-optical-impairment-topology { (https://trustee.ietf.org/license-info). This version of this YANG module is part of RFC XXXX; see - the RFC itself for full legal notices."; + the RFC itself for full legal notices. -// RFC Ed.: replace XXXX with actual RFC number and remove -// this note -// replace the revision date with the module publication date -// the format is (year-month-day) - revision 2024-05-21 { + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL + NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', + 'MAY', and 'OPTIONAL' in this document are to be interpreted as + described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, + they appear in all capitals, as shown here."; + + // RFC Ed.: replace XXXX with actual RFC number and remove + // this note + // replace the revision date with the module publication date + // the format is (year-month-day) + + revision 2025-06-24 { description - "Initial Version"; + "Initial version."; reference "RFC XXXX: A Yang Data Model for Impairment-aware Optical Networks"; @@ -102,8 +104,8 @@ module ietf-optical-impairment-topology { description "Individual OTSi(G) protection LSP protection type."; reference - "ITU-T G.873.1 v5.2 (02/2022): Optical transport network: - Linear protection"; + "ITU-T G.873.1 v5.2 (02/2022): Optical transport network: + Linear protection"; } /* @@ -111,71 +113,63 @@ module ietf-optical-impairment-topology { */ grouping amplifier-params { - description "describes parameters for an amplifier"; + description + "Describes parameters for an amplifier"; container amplifier { description - "amplifier type, operatonal parameters are described."; + "Amplifier type, operational parameters are described."; leaf type-variety { type string; - mandatory true ; + mandatory true; description "String identifier of amplifier type referencing - a specification in a separate equipment catalog"; + a specification in a separate equipment catalog"; } container operational { - description "amplifier operational parameters"; + description + "Amplifier operational parameters"; list amplifier-element { key "frequency-range-id stage-order"; description "The list of parallel amplifier elements within an - amplifier used to amplify different frequency ranges. + amplifier used to amplify different frequency ranges. - Two elements in the list must not have the same range - or overlapping ranges."; - leaf frequency-range-id { - type uint16; - description - "The identifier of the frequency range."; - } + Two elements in the list MUST NOT have the same range + or overlapping ranges."; + uses l0-types:frequency-range-with-identifier; leaf stage-order { type uint8; description - "It allows defining for each spectrum badwidth the - cascade order of each amplifier-element."; + "It allows defining for each spectrum bandwidth the + cascade order of each amplifier-element."; } leaf name { type string; description "The name of the amplifier element as specified in - the vendor's specification associated with the - type-variety."; + the vendor's specification associated with the + type-variety."; } leaf type-variety { type string; description "String identifier of amplifier element type - referencing a specification in a separate equipment - catalog. + referencing a specification in a separate equipment + catalog. - This attributes applies only when the type-variety of - the amplifier is not sufficient to describe the - amplifier element type."; - } - container frequency-range { - description - "The frequency range amplified by the amplifier - element."; - uses l0-types:frequency-range; + This attributes applies only when the type-variety of + the amplifier is not sufficient to describe the + amplifier element type."; } container power-param { description "The optical power after the out-voa of each amplifier - element."; + element."; choice power-param { mandatory true; description "Select the mode: channel power or power spectral - density (PSD)."; + density (PSD)."; case channel-power { leaf nominal-carrier-power { type l0-types:power-dbm-or-null; @@ -193,91 +187,92 @@ module ietf-optical-impairment-topology { } } } - } // container power-param + } // container power-param leaf pdl { type l0-types:power-loss-or-null; - description "Polarization Dependent Loss (PDL)"; + description + "Polarization Dependent Loss (PDL)"; } choice amplifier-element-type { mandatory true; description "Identifies whether the amplifier element is an - Optical Amplifier (OA) or a Dynamic Gain Equalizer - (DGE)."; + Optical Amplifier (OA) or a Dynamic Gain Equalizer + (DGE)."; container optical-amplifier { description "The attributes applicable only to amplifier - elements"; + elements"; leaf actual-gain { type l0-types:power-gain-or-null; mandatory true; description "The value of the gain provided by the - amplification stage of the optical amplifier."; + amplification stage of the optical amplifier."; } leaf in-voa { type l0-types:power-loss-or-null; description "Loss introduced by the Variable Optical Attenuator - (VOA) at the input of the amplification stage of - the amplifier, if present"; + (VOA) at the input of the amplification stage of + the amplifier, if present"; } leaf out-voa { type l0-types:power-loss-or-null; description "Loss introduced by the Variable Optical Attenuator - (VOA) at the output of the amplification stage of - the amplifier, if present."; + (VOA) at the output of the amplification stage of + the amplifier, if present."; } leaf tilt-target { type l0-types:decimal-2-or-null; units "dB"; - mandatory true ; + mandatory true; description "The tilt target defined between lower and upper - frequency of the amplifier frequency range."; + frequency of the amplifier frequency range."; } leaf total-output-power { type l0-types:power-dbm-or-null; mandatory true; description "It represent total output power measured in the - range specified by the frequency-range. + range specified by the frequency-range. - Optical power is especially needed to - re-compute/check consistency of span - (fiber + concentrated loss) loss value, with - respect to loss/gain information on elements."; + Optical power is especially needed to + re-compute/check consistency of span + (fiber + concentrated loss) loss value, with + respect to loss/gain information on elements."; } leaf raman-direction { type enumeration { enum co-propagating { description "Co-propagating indicates that optical pump - light is injected in the same direction to the - optical signal that is amplified - (forward pump)."; + light is injected in the same direction to the + optical signal that is amplified + (forward pump)."; } enum counter-propagating { description "Counter-propagating indicates that optical - pump light is injected in opposite direction - to the optical signal that is amplified - (backward pump)."; + pump light is injected in opposite direction + to the optical signal that is amplified + (backward pump)."; } } description "The direction of injection of the raman pump."; } list raman-pump { - key pump-id; + key "pump-id"; description "The list of pumps for the Raman amplifier."; leaf pump-id { type uint16; description "The identifier of a pump within an amplifier - element."; + element."; } leaf frequency { type l0-types:frequency-thz; @@ -289,95 +284,100 @@ module ietf-optical-impairment-topology { units "Watts"; description "The total pump power considering a depolarized - pump at the raman pump central frequency."; + pump at the raman pump central frequency."; } } - } // container optical-amplifier + } // container optical-amplifier container dynamic-gain-equalizer { presence "When present it indicates that the amplifier element - is a Dynamic Gain Equalizer (DGE)"; + is a Dynamic Gain Equalizer (DGE)"; description "The attributes applicable only to DEG amplifier - elements."; + elements."; list media-channel { key "flexi-n"; description "List of media channels represented as (n,m)"; - uses l0-types:flexi-grid-frequency-slot { - refine flexi-m { + refine "flexi-m" { mandatory true; } } - leaf delta-power { type l0-types:power-ratio-or-null; description - " Deviation from the reference carrier power - defined for the OMS."; + "Deviation from the reference carrier power + defined for the OMS."; } } // media channels list - } // container dynamic-gain-equalizer + } // container dynamic-gain-equalizer } // choice amplifier-element-type - } // list amplifier-element - } // container operational - } // container amplifier - } // grouping amplifier-params + } // list amplifier-element + } // container operational + } // container amplifier + } // grouping amplifier-params grouping fiber-params { - description - "String identifier of fiber type referencing a + description + "String identifier of fiber type referencing a specification in a separate equipment catalog"; container fiber { - description "fiber characteristics"; + description + "Fiber characteristics"; leaf type-variety { - type string ; - mandatory true ; - description "fiber type"; + type string; + mandatory true; + description + "Fiber type"; } leaf length { type l0-types:decimal-2-or-null; - units km; - mandatory true ; - description "length of fiber"; + units "km"; + mandatory true; + description + "Length of fiber"; } leaf loss-coef { type l0-types:decimal-2-or-null; - units dB/km; - mandatory true ; - description "loss coefficient of the fiber"; + units "dB/km"; + mandatory true; + description + "Loss coefficient of the fiber"; } leaf total-loss { type l0-types:power-loss-or-null; description "The measured total loss of the fiber, which includes - all possible losses: fiber loss and conn-in and conn-out - losses. + all possible losses: fiber loss and conn-in and conn-out + losses. - This attribute is not present when the total loss cannot - be measured."; + This attribute is not present when the total loss cannot + be measured."; } leaf pmd { type l0-types:decimal-2-or-null; units "ps"; - description "pmd of the fiber"; + description + "PMD of the fiber"; } - leaf conn-in{ + leaf conn-in { type l0-types:power-loss-or-null; - description "connector-in"; + description + "connector-in"; } - leaf conn-out{ + leaf conn-out { type l0-types:power-loss-or-null; - description "connector-out"; + description + "connector-out"; } } } grouping roadm-common-path { description - "The optical impairments of a ROADM which are common to all - its paths (express path, add path or drop path)."; + "The optical impairments of a ROADM which are common to all + its paths (express path, add path or drop path)."; leaf roadm-pmd { type union { type decimal64 { @@ -387,34 +387,36 @@ module ietf-optical-impairment-topology { type empty; } units "ps"; - description - "Polarization Mode Dispersion (PMD), when known, or an - empty value when unknown."; + description + "Polarization Mode Dispersion (PMD), when known, or an + empty value when unknown."; } leaf roadm-cd { type l0-types:decimal-5-or-null; units "ps/nm"; - description "Chromatic Dispersion (CD)"; - } + description + "Chromatic Dispersion (CD)"; + } leaf roadm-pdl { type l0-types:power-loss-or-null; - description "Polarization Dependent Loss (PDL)"; + description + "Polarization Dependent Loss (PDL)"; } leaf roadm-inband-crosstalk { type l0-types:decimal-2-or-null; units "dB"; description - "In-band crosstalk, or coherent crosstalk, can occur in - components that can have multiple same wavelength inputs - with the inputs either routed to different output ports, - or all but one blocked"; + "In-band crosstalk, or coherent crosstalk, can occur in + components that can have multiple same wavelength inputs + with the inputs either routed to different output ports, + or all but one blocked"; } leaf roadm-maxloss { type l0-types:power-loss-or-null; description - "This is the maximum expected path loss from the - ROADM ingress to the ROADM egress - assuming no additional path loss is added"; + "This is the maximum expected path loss from the + ROADM ingress to the ROADM egress + assuming no additional path loss is added"; } } // grouping roadm-common-path @@ -428,69 +430,73 @@ module ietf-optical-impairment-topology { description "The optical impairments of a ROADM add path."; uses roadm-common-path { - refine roadm-inband-crosstalk { + refine "roadm-inband-crosstalk" { description - "In-band crosstalk, or coherent crosstalk, - can occur in components that can have multiple same - wavelength inputs,with the inputs either - routed to different output ports, - or all but one blocked. - - In the case of add path it is the total - of the add block + egress WSS crosstalk contributions."; + "In-band crosstalk, or coherent crosstalk, + can occur in components that can have multiple same + wavelength inputs,with the inputs either + routed to different output ports, + or all but one blocked. + + In the case of add path it is the total + of the add block + egress WSS crosstalk contributions."; } - refine roadm-maxloss { - description - "This is the maximum expected add path loss from - the add/drop port input to the ROADM egress, - assuming no additional add path loss is added. - This is used to establish the minimum required - transponder output power required - to hit the ROADM egress target power - levels and preventing - to hit the WSS attenuation limits. - If the add path contains an internal amplifier - this loss value should be based - on worst case expected amplifier gain due to - ripple or gain uncertainty"; + refine "roadm-maxloss" { + description + "This is the maximum expected add path loss from + the add/drop port input to the ROADM egress, + assuming no additional add path loss is added. + + This is used to establish the minimum required + transponder output power required + to hit the ROADM egress target power + levels and preventing + to hit the WSS attenuation limits. + + If the add path contains an internal amplifier + this loss value MUST be based + on worst case expected amplifier gain due to + ripple or gain uncertainty"; } } leaf roadm-pmax { type l0-types:power-dbm-or-null; - description - "This is the maximum (per carrier) power level - permitted at the add block input ports, - that can be handled by the ROADM node. - This may reflect either add amplifier power - contraints or WSS adjustment limits. - Higher power transponders would need to have - their launch power reduced - to this value or lower"; + description + "This is the maximum (per carrier) power level + permitted at the add block input ports, + that can be handled by the ROADM node. + This can reflect either add amplifier power + constraints or WSS adjustment limits. + Higher power transponders would need to have + their launch power reduced + to this value or lower"; } leaf roadm-osnr { type l0-types:snr-or-null; - description + description "Optical Signal-to-Noise Ratio (OSNR). - If the add path contains the ability to adjust the - carrier power levels into an add path amplifier - (if present) to a target value, - this reflects the OSNR contribution of the - add amplifier assuming this target value is obtained. - The worst case OSNR based on the input power and - NF calculation method, and this value, should be used - (if both are defined)."; + + If the add path contains the ability to adjust the + carrier power levels into an add path amplifier + (if present) to a target value, + this reflects the OSNR contribution of the + add amplifier assuming this target value is obtained. + + The worst case OSNR based on the input power and + NF calculation method, and this value, MUST be used + (if both are defined)."; } leaf roadm-noise-figure { type l0-types:decimal-5-or-null; - units "dB"; - description - "Noise Figure. If the add path contains an amplifier, - this is the noise figure of that amplifier inferred - to the add port. - This permits add path OSNR calculation based - on the input power levels to the add block - without knowing the ROADM path losses to - the add amplifier."; + units "dB"; + description + "Noise Figure. If the add path contains an amplifier, + this is the noise figure of that amplifier inferred + to the add port. + This permits add path OSNR calculation based + on the input power levels to the add block + without knowing the ROADM path losses to + the add amplifier."; } } // grouping roadm-add-path @@ -498,149 +504,153 @@ module ietf-optical-impairment-topology { description "The optical impairments of a ROADM drop path"; uses roadm-common-path { - refine roadm-inband-crosstalk { + refine "roadm-inband-crosstalk" { description "In-band crosstalk, or coherent crosstalk, can occur in - components that can have multiple same wavelength - inputs,with the inputs either routed to different - output ports,or all but one blocked. - - In the case of drop path it is the total - of the ingress - to drop e.g. WSS and drop block crosstalk - contributions."; + components that can have multiple same wavelength + inputs,with the inputs either routed to different + output ports,or all but one blocked. + + In the case of drop path it is the total + of the ingress + to drop e.g. WSS and drop block crosstalk + contributions."; } - refine roadm-maxloss { - description - "The net loss from the ROADM input,to the output - of the drop block. - If ROADM ingress to drop path includes an amplifier, - the amplifier gain reduces the net loss. - This is before any additional drop path attenuation - that may be required - due to drop amplifier power contraints. - The max value correspond to worst case expected loss, - including amplifier gain ripple or uncertainty. - It is the maximum output power of the drop - amplifier."; + refine "roadm-maxloss" { + description + "The net loss from the ROADM input,to the output + of the drop block. + If this ROADM ingress-to-drop path includes an amplifier, + the amplifier gain reduces the net loss. + This is before any additional drop path attenuation + that may be required + due to drop amplifier power constraints. + The max value correspond to worst case expected loss, + including amplifier gain ripple or uncertainty. + It is the maximum output power of the drop + amplifier."; } } leaf roadm-minloss { type l0-types:power-loss-or-null; - description - "The net loss from the ROADM input, to the - output of the drop block. - If this ROADM ingress to drop path includes - an amplifier,the amplifier gain reduces the net loss. - This is before any additional drop path attenuation - that may be required due to drop amplifier power - contraints. - The min value correspond to best case expected loss, - including amplifier gain ripple or uncertainty."; + description + "The net loss from the ROADM input, to the + output of the drop block. + If this ROADM ingress-to-drop path includes + an amplifier,the amplifier gain reduces the net loss. + This is before any additional drop path attenuation + that may be required due to drop amplifier power + constraints. + The min value correspond to best case expected loss, + including amplifier gain ripple or uncertainty."; } leaf roadm-typloss { type l0-types:power-loss-or-null; - description - "The net loss from the ROADM input, - to the output of the drop block. - If this ROADM ingress to drop path - includes an amplifier, - the amplifier gain reduces the net loss. - This is before any additional drop path - attenuation - that may be required due to drop amplifier - power contraints. - The typ value correspond to typical case - expected loss."; + description + "The net loss from the ROADM input, + to the output of the drop block. + If this ROADM ingress-to-drop path + includes an amplifier, + the amplifier gain reduces the net loss. + This is before any additional drop path + attenuation + that may be required due to drop amplifier + power constraints. + The typ value correspond to typical case + expected loss."; } leaf roadm-pmin { type l0-types:power-dbm-or-null; - description + description "If the drop path has additional loss - that is added, for example, - to hit target power levels into a - drop path amplifier, or simply, to reduce the - power of a strong carrier - (due to ripple,for example), - then the use of the ROADM input power levels and - the above drop losses is not appropriate. - This parameter corresponds to the min per - carrier power levels - expected at the output of the drop block. - A detail example of the comparison using - these parameters is - detailed in section xxx of the document yyy."; + that is added, for example, + to hit target power levels into a + drop path amplifier, or simply, to reduce the + power of a strong carrier + (due to ripple,for example), + then the use of the ROADM input power levels and + the above drop losses is not appropriate. + This parameter corresponds to the min per + carrier power levels + expected at the output of the drop block. + A detail example of the comparison using + these parameters is + detailed in section xxx of the document yyy."; } leaf roadm-pmax { type l0-types:power-dbm-or-null; - description - "If the drop path has additional loss that is added, - for example, to hit target power levels into a - drop path amplifier,or simply,to reduce the power - of a strong carrier(due to ripple,for example), - then the use of the ROADM input power levels and the - above drop losses is not appropriate. - This parameter corresponds to the best case per - carrier power levels expected at the output of the - drop block. - A detail example of the comparison using - these parameters - is detailed in section xxx of the document yyy"; + description + "If the drop path has additional loss that is added, + for example, to hit target power levels into a + drop path amplifier,or simply,to reduce the power + of a strong carrier(due to ripple,for example), + then the use of the ROADM input power levels and the + above drop losses is not appropriate. + This parameter corresponds to the best case per + carrier power levels expected at the output of the + drop block. + A detail example of the comparison using + these parameters + is detailed in section xxx of the document yyy"; } leaf roadm-ptyp { type l0-types:power-dbm-or-null; - description + description "If the drop path has additional loss that is added, - for example, to hit target power levels into a - drop path amplifier,or simply,to reduce the - power of a strong carrier(due to ripple,for example), - then the use of the ROADM input power levels and - the above drop losses is not appropriate. - This parameter corresponds to the typical case - per carrier power levels expected - at the output of the drop block."; + for example, to hit target power levels into a + drop path amplifier,or simply,to reduce the + power of a strong carrier(due to ripple,for example), + then the use of the ROADM input power levels and + the above drop losses is not appropriate. + This parameter corresponds to the typical case + per carrier power levels expected + at the output of the drop block."; } leaf roadm-osnr { - type l0-types:snr-or-null; - description + type l0-types:snr-or-null; + description "Optical Signal-to-Noise Ratio (OSNR). - Expected OSNR contribution of the drop path - amplifier(if present) - for the case of additional drop path loss - (before this amplifier) - in order to hit a target power level (per carrier). - If both, the OSNR based on the ROADM - input power level - (Pcarrier = - Pref+10Log(carrier-baudrate/ref-baud) + delta-power) - and the input inferred NF(NF.drop), - and this OSNR value, are defined, - the minimum value between these two should be used"; + + Expected OSNR contribution of the drop path + amplifier(if present) + for the case of additional drop path loss + (before this amplifier) + in order to hit a target power level (per carrier). + + If both, the OSNR based on the ROADM + input power level + (Pcarrier = + Pref+10Log(carrier-baudrate/ref-baud) + delta-power) + and the input inferred NF(NF.drop), + and this OSNR value, are defined, + the minimum value between these two MUST be used"; } leaf roadm-noise-figure { type l0-types:decimal-5-or-null; - units "dB"; - description - "Drop path Noise Figure. - If the drop path contains an amplifier, - this is the noise figure - of that amplifier, inferred to the - ROADM ingress port. - This permits to determine - amplifier OSNR contribution - without having to specify the - ROADM node's losses to that amplifier. - This applies for the case of no - additional drop path loss, - before the amplifier, in order to reduce the power - of the carriers to a target value"; + units "dB"; + description + "Drop path Noise Figure. + If the drop path contains an amplifier, + this is the noise figure + of that amplifier, inferred to the + ROADM ingress port. + This permits to determine + amplifier OSNR contribution + without having to specify the + ROADM node's losses to that amplifier. + This applies for the case of no + additional drop path loss, + before the amplifier, in order to reduce the power + of the carriers to a target value"; } } // grouping roadm-drop-path - grouping concentratedloss-params { - description "concentrated loss"; - container concentratedloss{ - description "concentrated loss"; + grouping concentrated-loss-params { + description + "Concentrated loss"; + container concentrated-loss { + description + "Concentrated loss"; leaf loss { type l0-types:power-loss-or-null; mandatory true; @@ -651,28 +661,30 @@ module ietf-optical-impairment-topology { } grouping oms-general-optical-params { - description "OMS link optical parameters"; + description + "OMS link optical parameters"; leaf generalized-snr { type l0-types:snr; - description "generalized snr"; + description + "Generalized SNR"; } - leaf equalization-mode{ + leaf equalization-mode { type identityref { base l0-types:type-power-mode; } description "The equalization mode. - When not present it indicates that the information about - the equalization mode is not reported. + When not present it indicates that the information about + the equalization mode is not reported. - Reporting this value is needed to support optical - impairments applications."; + Reporting this value is needed to support optical + impairments applications."; } container power-param { description "Optical channel power or power spectral densitity (PSD) - after the ROADM."; + after the ROADM."; leaf nominal-carrier-power { when "derived-from-or-self(../../equalization-mode, " + "'l0-types:carrier-power')"; @@ -687,46 +699,47 @@ module ietf-optical-impairment-topology { description " Reference power spectral density (PSD)."; } - } // container power-param + } // container power-param } // grouping oms-general-optical-params grouping otsi-group { - description "OTSiG definition , representing client - digital information stream supported by one or more OTSi"; - + description + "OTSiG definition , representing client + digital information stream supported by one or more OTSi"; list otsi { - key "otsi-carrier-id"; + key "carrier-id"; config false; description "list of OTSi contained in one OTSiG. - The list could also be of only one element"; - leaf otsi-carrier-id { + The list could also be of only one element"; + leaf carrier-id { type uint16; - description "OTSi carrier-id"; + description + "OTSi carrier-id"; } - leaf otsi-carrier-frequency { + leaf carrier-frequency { type union { type l0-types:frequency-thz; type empty; } description "OTSi carrier frequency, equivalent to the - actual configured transmitter frequency, when known, or - an empty value when unknown."; + actual configured transmitter frequency, when known, or + an empty value when unknown."; } leaf-list e2e-mc-path-id { type uint16; description - "The list of the possible end-to-end Media Channel - (e2e-MC) paths associated with the OTSi which have - different optical impairments. + "The list of the possible end-to-end Media Channel + (e2e-MC) paths associated with the OTSi which have + different optical impairments. - This list is meaningful in case the OTSi can be associated - with multiple end-to-end Media Channel (e2e-MC) paths - (e.g., when OPS protection is configured). + This list is meaningful in case the OTSi can be associated + with multiple end-to-end Media Channel (e2e-MC) paths + (e.g., when OPS protection is configured). - The list can be empty when the OTSi has only one - e2e-MC path."; + The list can be empty when the OTSi has only one + e2e-MC path."; } } // OTSi list } // OTSiG grouping @@ -735,31 +748,29 @@ module ietf-optical-impairment-topology { description "media channel groups. - This grouping is not intended to be reused outside of this - module."; - + This grouping is not intended to be reused outside of this + module."; container media-channel-groups { presence - "When present, it indicates that the list media channel - groups is reported."; + "When present, it indicates that the list media channel + groups is reported."; description - "The top level container for the list of media channel - groups."; + "The top level container for the list of media channel + groups."; list media-channel-group { key "otsi-group-ref"; description "The list of media channel groups"; leaf otsi-group-ref { type leafref { - path "../../../../../../../otsis/" + - "otsi-group/otsi-group-id"; + path "../../../../../../../otsis/" + + "otsi-group/otsi-group-id"; } description - "Reference to the OTSiG to which the OTSis carried by - this media channel group belong to."; + "Reference to the OTSiG to which the OTSis carried by + this media channel group belong to."; } list media-channel { - // key "flexi-n"; key "media-channel-id"; unique "flexi-n"; description @@ -768,50 +779,48 @@ module ietf-optical-impairment-topology { type int16; description "The identifier of media channel within media channel - group. + group. - It may be equal to the flexi-n attribute, when the - flexi-n attribute is present."; + It may be equal to the flexi-n attribute, when the + flexi-n attribute is present."; } - // this grouping add both n.m values uses l0-types:flexi-grid-frequency-slot; - list otsi-ref { - key "otsi-carrier-ref"; + key "carrier-ref"; description - "The list of references to the OTSis and their - end-to-end Media Channel (e2e-MC) paths within the - OTSiG carried by this media channel."; - leaf otsi-carrier-ref { + "The list of references to the OTSis and their + end-to-end Media Channel (e2e-MC) paths within the + OTSiG carried by this media channel."; + leaf carrier-ref { type leafref { - path "../../../../../../../../../otsis/" + - "otsi-group[otsi-group-id=current()" + - "/../../../otsi-group-ref]/" + - "otsi/otsi-carrier-id" ; + path "../../../../../../../../../otsis/" + + "otsi-group[otsi-group-id=current()" + + "/../../../otsi-group-ref]/" + + "otsi/carrier-id"; } description "Reference to the OTSi within the OTSiG carried - by this media channel."; + by this media channel."; } leaf-list e2e-mc-path-ref { type leafref { - path "../../../../../../../../../otsis/" + - "otsi-group[otsi-group-id=current()" + - "/../../../otsi-group-ref]/" + - "otsi[otsi-carrier-id=current()" + - "/../otsi-carrier-ref]/e2e-mc-path-id"; + path "../../../../../../../../../otsis/" + + "otsi-group[otsi-group-id=current()" + + "/../../../otsi-group-ref]/" + + "otsi[carrier-id=current()" + + "/../carrier-ref]/e2e-mc-path-id"; } description - "References to the end-to-end Media Channel (e2e-MC) - paths of this OTSi which are routed through this - media channel."; + "References to the end-to-end Media Channel (e2e-MC) + paths of this OTSi which are routed through this + media channel."; } } leaf delta-power { type l0-types:power-ratio-or-null; description - " Deviation from the reference carrier power defined - for the OMS."; + " Deviation from the reference carrier power defined + for the OMS."; } } // media channels list } // media-channel-groups list @@ -819,24 +828,27 @@ module ietf-optical-impairment-topology { } // media media-channel-groups grouping grouping oms-element { - description "OMS description"; - container OMS-elements { + description + "OMS description"; + container oms-elements { presence - "When present, it indicates that the list of OMS elements - is reported."; + "When present, it indicates that the list of OMS elements + is reported."; + config false; description "The top level container for the list of OMS elements."; - list OMS-element { + list oms-element { key "elt-index"; description - "defines the spans and the amplifier blocks of - the amplified lines"; + "The building blocks (e.g., fibers, amplifiers, + concentrated loss) that compose the WDM TE-link between + its link termination points."; leaf elt-index { type uint16; description - "ordered list of Index of OMS element - (whether it's a Fiber, an EDFA or a - Concentratedloss)"; + "An index allowing to sort the elements in their physical + order along the link without constraining their position + in the list."; } leaf oms-element-uid { type union { @@ -844,31 +856,31 @@ module ietf-optical-impairment-topology { type empty; } description - "Unique id of the element, if it exists and it is known. + "Unique id of the element, if it exists and is known. - When unknown, an empty value is reported. + When unknown, an empty value is reported. - When it does not exist, the attribute is not present."; + When it does not exist, the attribute is not present."; } container reverse-element-ref { description "It contains references to the elements which are - associated with this element in the reverse - direction."; + associated with this element in the reverse + direction."; leaf link-ref { type leafref { path "../../../../../../../../nt:link/nt:link-id"; } description "The reference to the OMS link which the OMS elements - belongs to."; + belongs to."; } leaf-list oms-element-ref { type leafref { path "../../../../../../../../nt:link[nt:link-id=" - + "current()/../link-ref]/tet:te/" - + "tet:te-link-attributes/OMS-attributes/" - + "OMS-elements/OMS-element/elt-index"; + + "current()/../link-ref]/tet:te/" + + "tet:te-link-attributes/oms-attributes/" + + "oms-elements/oms-element/elt-index"; } description "The references to the OMS elements."; @@ -876,7 +888,8 @@ module ietf-optical-impairment-topology { } choice element { mandatory true; - description "OMS element type"; + description + "OMS element type"; case amplifier { uses tet:geolocation-container; uses amplifier-params; @@ -884,8 +897,8 @@ module ietf-optical-impairment-topology { case fiber { uses fiber-params; } - case concentratedloss { - uses concentratedloss-params ; + case concentrated-loss { + uses concentrated-loss-params; } } } @@ -896,34 +909,35 @@ module ietf-optical-impairment-topology { description "References to an OTSi. - This grouping is intended to be reused within the - transceiver's list only."; + This grouping is intended to be reused within the + transceiver's list only."; leaf otsi-group-ref { type leafref { - path "../../../../../../otsis/otsi-group/" + - "otsi-group-id"; + path "../../../../../../otsis/otsi-group/" + + "otsi-group-id"; } description "The OTSi generated by the transceiver's transmitter."; } leaf otsi-ref { type leafref { - path "../../../../../../otsis/otsi-group" + - "[otsi-group-id=current()/../otsi-group-ref]/otsi/" + - "otsi-carrier-id"; + path "../../../../../../otsis/otsi-group" + + "[otsi-group-id=current()/../otsi-group-ref]/otsi/" + + "carrier-id"; } description "The OTSi generated by the transceiver's transmitter."; } } -/* - * Data nodes - */ + /* + * Data nodes + */ augment "/nw:networks/nw:network/nw:network-types" + "/tet:te-topology" { - description "optical-impairment topology augmented"; + description + "optical-impairment topology augmented"; container optical-impairment-topology { presence "Indicates an impairment-aware topology of optical networks"; @@ -931,142 +945,116 @@ module ietf-optical-impairment-topology { "Container to identify impairment-aware topology type"; reference "RFC8345: A YANG Data Model for Network Topologies."; - } + } } augment "/nw:networks/nw:network" { - when "./nw:network-types/tet:te-topology" + - "/oit:optical-impairment-topology" { + when './nw:network-types/tet:te-topology' + + '/oit:optical-impairment-topology' { description - "This augment is only valid for Optical Impairment - topology."; + "This augment is only valid for Optical Impairment + topology."; } description "Network augmentation for optical impairments data."; container otsis { - presence - "When present, it indicates that OTSi information is - reported."; + presence "When present, it indicates that OTSi information is + reported."; description - "The information about the OTSis configured on the WDM-TE - link."; + "The information about the OTSis configured on the WDM-TE + link."; list otsi-group { key "otsi-group-id"; config false; description "the list of possible OTSiG representing client digital - stream"; + stream"; leaf otsi-group-id { type string; description "A network-wide unique identifier of otsi-group element. - It could be structured e.g., as an URI or as an UUID."; + It could be structured e.g., as an URI or as an UUID."; } uses otsi-group; } // list of OTSiG } - container templates { config false; description "Templates for set of parameters which can be common to - multiple elements."; - container roadm-path-impairments { + multiple elements."; + container roadm-path-impairments-sets { description "The top level container for the list of the set of - optical impairments related to ROADM paths."; - list roadm-path-impairment { - key "roadm-path-impairments-id"; + optical impairments related to ROADM paths."; + list roadm-path-impairments-set { + key "roadm-path-impairments-set-id"; description - "The list of the set of optical impairments related to - ROADM paths."; - - leaf roadm-path-impairments-id { - type string; + "The list of the set of optical impairments related to a + ROADM path."; + leaf roadm-path-impairments-set-id { + type string; description "The identifier of the set of optical impairments - related to a ROADM path."; + related to a ROADM path."; + } + leaf description { + type string; + description + "The textual description of the the set of optical + impairments related to a ROADM path."; } choice impairment-type { - description "type path impairment"; + description + "Type path impairment"; case roadm-express-path { list roadm-express-path { - key frequency-range-id; + key "frequency-range-id"; description "The list of optical impairments on a ROADM express - path for different frequency ranges. + path for different frequency ranges. - Two elements in the list must not have the same - range or overlapping ranges."; - leaf frequency-range-id { - type uint16; - description - "The identifier of the frequency range."; - } - container frequency-range { - description - "The frequency range for which these optical - impairments apply."; - uses l0-types:frequency-range; - } + Two elements in the list MUST NOT have the same + range or overlapping ranges."; + uses l0-types:frequency-range-with-identifier; uses roadm-express-path; - } + } } case roadm-add-path { list roadm-add-path { - key frequency-range-id; + key "frequency-range-id"; description "The list of optical impairments on a ROADM add - path for different frequency ranges. + path for different frequency ranges. - Two elements in the list must not have the same - range or overlapping ranges."; - leaf frequency-range-id { - type uint16; - description - "The identifier of a frequency range."; - } - container frequency-range { - description - "The frequency range for which these optical - impairments apply."; - uses l0-types:frequency-range; - } - uses roadm-add-path; + Two elements in the list MUST NOT have the same + range or overlapping ranges."; + uses l0-types:frequency-range-with-identifier; + uses roadm-add-path; } - } + } case roadm-drop-path { list roadm-drop-path { - key frequency-range-id; + key "frequency-range-id"; description "The list of optical impairments on a ROADM add - path for different frequency ranges. + path for different frequency ranges. - Two elements in the list must not have the same - range or overlapping ranges."; - leaf frequency-range-id { - type uint16; - description - "The identifier of a frequency range."; - } - container frequency-range { - description - "The frequency range for which these optical - impairments apply."; - uses l0-types:frequency-range; - } - uses roadm-drop-path; + Two elements in the list MUST NOT have the same + range or overlapping ranges."; + uses l0-types:frequency-range-with-identifier; + uses roadm-drop-path; } } } - } // list roadm-path-impairments - } // container roadm-path-impairments + } // list roadm-path-impairments-set + } // container roadm-path-impairments-sets container explicit-transceiver-modes { description "The top level container for the list of the - transceivers' explicit modes."; + transceivers' explicit modes."; list explicit-transceiver-mode { - key explicit-transceiver-mode-id; + key "explicit-transceiver-mode-id"; description "The list of the transceivers' explicit modes."; leaf explicit-transceiver-mode-id { @@ -1075,14 +1063,14 @@ module ietf-optical-impairment-topology { "The identifier of the transceivers' explicit mode."; } uses l0-types:explicit-mode; - } // list explicit-transceiver-mode - } // container explicit-transceiver-modes - } // container templates + } // list explicit-transceiver-mode + } // container explicit-transceiver-modes + } // container templates } // augment network augment "/nw:networks/nw:network/nw:node" { - when "../nw:network-types/tet:te-topology" + - "/oit:optical-impairment-topology" { + when '../nw:network-types/tet:te-topology' + + '/oit:optical-impairment-topology' { description "This augment is only valid for Optical Impairment."; } @@ -1090,49 +1078,51 @@ module ietf-optical-impairment-topology { "Node augmentation for optical impairments data."; container transponders { presence - "If present, it indicates that the list of transponders is - reported."; + "If present, it indicates that the list of transponders is + reported."; description "The top level container for the list of transponders."; list transponder { key "transponder-id"; config false; - description "The list of transponders."; + description + "The list of transponders."; leaf transponder-id { type uint32; - description "transponder identifier"; + description + "transponder identifier"; } leaf termination-type-capabilities { type enumeration { enum tunnel-only { description "The transponder can only be used in an Optical - Tunnel termination configuration."; + Tunnel termination configuration."; } enum 3r-only { description "The transponder can only be used in a 3R - configuration."; + configuration."; } enum 3r-or-tunnel { description "The transponder can be configure to be used either - in an Optical Tunnel termination configuration or in - a 3R configuration."; + in an Optical Tunnel termination configuration or in + a 3R configuration."; } } description "Describes whether the transponder can be used in an - Optical Tunnel termination configuration or in a 3R - configuration (or both)."; + Optical Tunnel termination configuration or in a 3R + configuration (or both)."; } leaf supported-3r-mode { - when '(../termination-type-capabilities = "3r-only") or - (../termination-type-capabilities = "3r-or-tunnel")' - { + when '(../termination-type-capabilities = "3r-only") ' + + 'or (../termination-type-capabilities = ' + + '"3r-or-tunnel")' { description "Applies only when the transponder supports 3R - configuration."; + configuration."; } type enumeration { enum unidir { @@ -1145,33 +1135,35 @@ module ietf-optical-impairment-topology { } } description - "Describes the supported 3R configuration type."; + "Describes the supported 3R configuration type."; } list transceiver { key "transceiver-id"; config false; min-elements 1; - description "list of transceiver related to a transponder"; + description + "List of transceiver related to a transponder"; leaf transceiver-id { type uint32; - description "transceiver identifier"; + description + "Transceiver identifier"; } uses l0-types:transceiver-capabilities { augment "supported-modes/supported-mode/mode/" + "explicit-mode/explicit-mode" { description "Augment the explicit-mode container with the - proper leafref."; + proper leafref."; leaf explicit-transceiver-mode-ref { type leafref { path "../../../../../../../../oit:templates" - + "/oit:explicit-transceiver-modes" - + "/oit:explicit-transceiver-mode" - + "/oit:explicit-transceiver-mode-id"; + + "/oit:explicit-transceiver-modes" + + "/oit:explicit-transceiver-mode" + + "/oit:explicit-transceiver-mode-id"; } description "The refernce to the explicit transceiver - mode template."; + mode template."; } } } @@ -1184,30 +1176,30 @@ module ietf-optical-impairment-topology { } description "Reference to the configured mode for transceiver - compatibility approach. + compatibility approach. - The empty value is used to report that no mode has - been configured and there is no default mode. + The empty value is used to report that no mode has + been configured and there is no default mode. - When not present, the configured-mode is not reported - by the server."; + When not present, the configured-mode is not reported + by the server."; } uses l0-types:common-transceiver-param; container outgoing-otsi { - when "../../../../../otsis" { + when '../../../../../otsis' { description - "It applies only when the OTSi information is - reported."; + "It applies only when the OTSi information is + reported."; } description "The OTSi generated by the transceiver's transmitter."; uses otsi-ref; } container incoming-otsi { - when "../../../../../otsis" { + when '../../../../../otsis' { description - "It applies only when the OTSi information is - reported."; + "It applies only when the OTSi information is + reported."; } description "The OTSi received by the transceiver's received."; @@ -1222,29 +1214,28 @@ module ietf-optical-impairment-topology { enum tunnel-termination { description "The transceiver is currently used in an Optical - Tunnel termination configuration."; + Tunnel termination configuration."; } enum 3r-regeneration { description "The transceiver is currently used in a 3R - configuration."; + configuration."; } } description "Describes whether the current configuration of the - transceiver is used in an Optical Tunnel termination - configuration or in a 3R configuration. + transceiver is used in an Optical Tunnel termination + configuration or in a 3R configuration. - If empty, it means that the information about the - configured-termination-type is not reported."; + If empty, it means that the information about the + configured-termination-type is not reported."; } } // end of list of transceiver } // end list of transponder } container regen-groups { - presence - "When present, it indicates that the list of 3R groups - is reported."; + presence "When present, it indicates that the list of 3R groups + is reported."; description "The top level container for the list of 3R groups."; list regen-group { @@ -1253,21 +1244,21 @@ module ietf-optical-impairment-topology { description "The list of 3R groups. - Any 3R group represent a group of transponder in which an - a an electrical connectivity is either in place or could - be dynamically provided, to associated transponders used - for 3R regeneration."; + Any 3R group represent a group of transponder in which an + a an electrical connectivity is either in place or could + be dynamically provided, to associated transponders used + for 3R regeneration."; leaf group-id { type uint32; description "Group identifier used an index to access elements in the - list of 3R groups."; + list of 3R groups."; } leaf regen-metric { type uint32; description "The cost permits choice among different group of - transponders during path computation"; + transponders during path computation"; } leaf-list transponder-ref { type leafref { @@ -1281,17 +1272,19 @@ module ietf-optical-impairment-topology { } augment "/nw:networks/nw:network/nt:link/tet:te" - + "/tet:te-link-attributes" { - when "../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + + "/tet:te-link-attributes" { + when '../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for Optical Impairment - topology."; + "This augment is only valid for Optical Impairment + topology."; } - description "Optical Link augmentation for impairment data."; - container OMS-attributes { + description + "Optical Link augmentation for impairment data."; + container oms-attributes { config false; - description "OMS attributes"; + description + "OMS attributes"; uses oms-general-optical-params; uses media-channel-groups; uses oms-element; @@ -1300,20 +1293,19 @@ module ietf-optical-impairment-topology { augment "/nw:networks/nw:network/nw:node/tet:te" + "/tet:tunnel-termination-point" { - when "../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for Optical Impairment - topology."; + "This augment is only valid for Optical Impairment + topology."; } description "Tunnel termination point augmentation for impairment data."; - list ttp-transceiver { - when "../../../transponders" { + when '../../../transponders' { description - "It applies only when the list of transponders is - reported."; + "It applies only when the list of transponders is + reported."; } key "transponder-ref transceiver-ref"; config false; @@ -1326,13 +1318,13 @@ module ietf-optical-impairment-topology { } description "The reference to the transponder hosting the transceiver - of the TTP."; + of the TTP."; } leaf transceiver-ref { type leafref { - path "../../../../transponders/transponder" + - "[transponder-id=current()/../transponder-ref]/" + - "transceiver/transceiver-id"; + path "../../../../transponders/transponder" + + "[transponder-id=current()/../transponder-ref]/" + + "transceiver/transceiver-id"; } description "The reference to the transceiver of the TTP."; @@ -1340,13 +1332,12 @@ module ietf-optical-impairment-topology { } // list of transceivers } // end of augment - // Should this leaf be moved to te-topology? augment "/nw:networks/nw:network/nw:node/nt:termination-point" { - when "../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for Optical Impairment - topology"; + "This augment is only valid for Optical Impairment + topology"; } description "Augment LTP"; @@ -1357,76 +1348,74 @@ module ietf-optical-impairment-topology { description "The protection type that this LTP is capable of. - When not present it indicates that the information about - the protection type is not reported."; + When not present it indicates that the information about + the protection type is not reported."; } } augment "/nw:networks/nw:network/nw:node/nt:termination-point" + "/tet:te" { - when "../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for Optical Impairment - topology"; + "This augment is only valid for Optical Impairment + topology"; } description "Augment TE attributes of an LTP"; - leaf inter-layer-sequence-number { type uint32; description - "The inter-layer-sequence-number (ILSN) is used to report - additional connectivity constraints between a client layer - Link Termination Point (LTP), such as a muxponder port, and - the server layer Tunnel Termination Point (TTP). - - A client service cannot be setup between two client layer - LTPs which report different values of the ILSN. - - This attribute is not reported when there are no additional - connectivity constraints. - - Therefore, a client service can be setup when at least one - of the two client layer LTPs does not report any ILSN or - both client layer LTPs report the same ILSN value and the - corresponding server layer TTPs have at least one common - server-layer switching capability and at least one common - client-layer switching capability."; + "The inter-layer-sequence-number (ILSN) is used to report + additional connectivity constraints between a client layer + Link Termination Point (LTP), such as a muxponder port, and + the server layer Tunnel Termination Point (TTP). + + A client service cannot be setup between two client layer + LTPs which report different values of the ILSN. + + This attribute is not reported when there are no additional + connectivity constraints. + + Therefore, a client service can be setup when at least one + of the two client layer LTPs does not report any ILSN or + both client layer LTPs report the same ILSN value and the + corresponding server layer TTPs have at least one common + server-layer switching capability and at least one common + client-layer switching capability."; } } augment "/nw:networks/nw:network/nw:node/tet:te" + "/tet:te-node-attributes" { - when "../../../nw:network-types/tet:te-topology" - + "/oit:optical-impairment-topology" { + when '../../../nw:network-types/tet:te-topology' + + '/oit:optical-impairment-topology' { description - "This augment is only valid for Optical Impairment - topology"; + "This augment is only valid for Optical Impairment + topology"; } description "node attributes augmentantion for optical-impairment ROADM node"; - } // augmentation for optical-impairment ROADM augment "/nw:networks/nw:network/nw:node/tet:te/" - + "tet:information-source-entry/tet:connectivity-matrices"{ - when "../../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + + "tet:information-source-entry/tet:connectivity-matrices" { + when '../../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for Optical Impairment - topology "; - } + "This augment is only valid for Optical Impairment + topology "; + } description - "Augment default TE node connectivity matrix information - source."; - - leaf roadm-path-impairments { + "Augment default TE node connectivity matrix information + source."; + leaf roadm-path-impairments-set { type leafref { path "../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id"; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } config false; description @@ -1437,86 +1426,91 @@ module ietf-optical-impairment-topology { augment "/nw:networks/nw:network/nw:node/tet:te/" + "tet:information-source-entry/tet:connectivity-matrices/" + "tet:connectivity-matrix" { - when "../../../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description "This augment is only valid for Optical Impairment topology "; } description - "Augment TE node connectivity matrix entry information - source."; - leaf roadm-path-impairments { + "Augment TE node connectivity matrix entry information + source."; + leaf roadm-path-impairments-set { type leafref { path "../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id"; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } config false; description "Pointer to the list set of ROADM optical impairments"; - } + } } // augmentation connectivity-matrix information-source augment "/nw:networks/nw:network/nw:node/tet:te/" + "tet:te-node-attributes/tet:connectivity-matrices" { - when "../../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for Optical Impairment - topology "; - } + "This augment is only valid for Optical Impairment + topology "; + } description "Augment default TE node connectivity matrix."; - leaf roadm-path-impairments { + leaf roadm-path-impairments-set { type leafref { path "../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id"; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } config false; /*the identifier in the list */ - /*"roadm-path-impairments" of ROADM optical impairment*/ - /*is read-only as the rest of attributes*/ - description "pointer to the list set of ROADM optical - impairments"; - } + /*"roadm-path-impairments" of ROADM optical impairment*/ + /*is read-only as the rest of attributes*/ + description + "Pointer to the list set of ROADM optical + impairments"; + } } // augmentation connectivity-matrices augment "/nw:networks/nw:network/nw:node/tet:te/" + "tet:te-node-attributes/" + "tet:connectivity-matrices/tet:connectivity-matrix" { - when "../../../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for - Optical Impairment topology "; + "This augment is only valid for + Optical Impairment topology "; } description "Augment TE node connectivity matrix entry."; - leaf roadm-path-impairments { + leaf roadm-path-impairments-set { type leafref { path "../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id"; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } config false; - description "pointer to the list set of ROADM optical - impairments"; + description + "Pointer to the list set of ROADM optical + impairments"; } } // augmentation connectivity-matrix augment "/nw:networks/nw:network/nw:node/tet:te/" + "tet:te-node-attributes/tet:connectivity-matrices/" + "tet:connectivity-matrix/tet:from" { - when "../../../../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../../../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for - Optical Impairment topology "; + "This augment is only valid for + Optical Impairment topology "; } description - "Augment the attributes for the 'from' LTP for the TE node - connectivity matrix entry."; + "Augment the attributes for the 'from' LTP for the TE node + connectivity matrix entry."; list additional-ltp { when "derived-from-or-self(../../../../../../" + "nt:termination-point" @@ -1524,55 +1518,56 @@ module ietf-optical-impairment-topology { + "oit:protection-type," + "'oit:otsi-protection')" { description - "This list applies only when the 'to' LTP for this - connectivity matrix entry supports individual OTSi(G) - protection."; + "This list applies only when the 'to' LTP for this + connectivity matrix entry supports individual OTSi(G) + protection."; } key "ltp-ref"; config false; description - "The restricted list of the potential secondary LTPs that - can be selected when the 'from' LTP of this connectivity - matrix entry is selected as a working LTP. + "The restricted list of the potential secondary LTPs that + can be selected when the 'from' LTP of this connectivity + matrix entry is selected as a working LTP. - If this list is empty, all the other LTPs that can reach - the 'to' LTP of this connectivity matrix entry can be - selected as secondary LTPs."; + If this list is empty, all the other LTPs that can reach + the 'to' LTP of this connectivity matrix entry can be + selected as secondary LTPs."; leaf ltp-ref { type leafref { path "../../../../../../../nt:termination-point/nt:tp-id"; } description - "The reference to the potential secondary LTP that can be - selected when the 'from' LTP of this connectivity matrix - entry is selected as a working LTP"; + "The reference to the potential secondary LTP that can be + selected when the 'from' LTP of this connectivity matrix + entry is selected as a working LTP"; } - leaf roadm-path-impairments { + leaf roadm-path-impairments-set { type leafref { path "../../../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id"; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } description - "Pointer to ROADM optical impairments of the ROADM path - between this secondary 'from' LTP and the 'to' LTP of - this connectivity matrix entry."; - } + "Pointer to ROADM optical impairments of the ROADM path + between this secondary 'from' LTP and the 'to' LTP of + this connectivity matrix entry."; + } } } // augmentation connectivity-matrix from augment "/nw:networks/nw:network/nw:node/tet:te/" + "tet:te-node-attributes/tet:connectivity-matrices/" + "tet:connectivity-matrix/tet:to" { - when "../../../../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../../../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for - Optical Impairment topology "; + "This augment is only valid for + Optical Impairment topology "; } description - "Augment the attributes for the 'to' LTP for the TE node - connectivity matrix entry."; + "Augment the attributes for the 'to' LTP for the TE node + connectivity matrix entry."; list additional-ltp { when "derived-from-or-self(../../../../../../" + "nt:termination-point" @@ -1580,72 +1575,78 @@ module ietf-optical-impairment-topology { + "oit:protection-type," + "'oit:otsi-protection')" { description - "This list applies only when the 'from' LTP for this - connectivity matrix entry supports individual OTSi(G) - protection."; + "This list applies only when the 'from' LTP for this + connectivity matrix entry supports individual OTSi(G) + protection."; } key "ltp-ref"; config false; description - "The restricted list of the potential secondary LTPs that - can be selected when the 'to' LTP of this connectivity - matrix entry is selected as a working LTP. + "The restricted list of the potential secondary LTPs that + can be selected when the 'to' LTP of this connectivity + matrix entry is selected as a working LTP. - If this list is empty, all the other LTPs that can be - reached from the 'from' LTP of this connectivity matrix - entry can be selected as secondary LTPs."; + If this list is empty, all the other LTPs that can be + reached from the 'from' LTP of this connectivity matrix + entry can be selected as secondary LTPs."; leaf ltp-ref { type leafref { path "../../../../../../../nt:termination-point/nt:tp-id"; } description - "The reference to the potential secondary LTP that can be - selected when the 'to' LTP of this connectivity matrix - entry is selected as a working LTP"; + "The reference to the potential secondary LTP that can be + selected when the 'to' LTP of this connectivity matrix + entry is selected as a working LTP"; } - leaf roadm-path-impairments { + leaf roadm-path-impairments-set { type leafref { path "../../../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id"; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } description - "Pointer to ROADM optical impairments of the ROADM path - between the 'from' LTP of this connectivity matrix entry - and this secondary LTP."; - } + "Pointer to ROADM optical impairments of the ROADM path + between the 'from' LTP of this connectivity matrix entry + and this secondary LTP."; + } } } // augmentation connectivity-matrix to augment "/nw:networks/nw:network/nw:node/tet:te/" + "tet:tunnel-termination-point/" + "tet:local-link-connectivities" { - when "../../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description - "This augment is only valid for Optical Impairment topology "; + "This augment is only valid for Optical Impairment + topology."; } description "Augment default TTP LLC."; - leaf add-path-impairments { + leaf add-path-impairments-set { type leafref { path "../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id" ; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } config false; - description "pointer to the list set of ROADM optical - impairments"; + description + "Pointer to the list set of ROADM optical + impairments"; } - leaf drop-path-impairments { + leaf drop-path-impairments-set { type leafref { path "../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id" ; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } config false; - description "pointer to the list set of ROADM - optical impairments"; + description + "pointer to the list set of ROADM + optical impairments"; } } // augmentation local-link-connectivities @@ -1653,47 +1654,51 @@ module ietf-optical-impairment-topology { + "tet:tunnel-termination-point/" + "tet:local-link-connectivities/" + "tet:local-link-connectivity" { - when "../../../../../nw:network-types/tet:te-topology/" - + "oit:optical-impairment-topology" { + when '../../../../../nw:network-types/tet:te-topology/' + + 'oit:optical-impairment-topology' { description "This augment is only valid for Optical Impairment topology "; } description "Augment TTP LLC entry."; - leaf add-path-impairments { + leaf add-path-impairments-set { type leafref { path "../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id" ; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } config false; - description "pointer to the list set of ROADM optical - impairments"; + description + "pointer to the list set of ROADM optical + impairments"; } - leaf drop-path-impairments { + leaf drop-path-impairments-set { type leafref { path "../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id" ; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } config false; - description "pointer to the list set of ROADM optical - impairments"; + description + "pointer to the list set of ROADM optical + impairments"; } list llc-transceiver { key "ttp-transponder-ref ttp-transceiver-ref"; config false; description "The list of transceivers having a LLC different from the - default LLC."; + default LLC."; leaf ttp-transponder-ref { type leafref { path "../../../../ttp-transceiver/transponder-ref"; } description "The reference to the transponder hosting the transceiver - of this LLCL entry."; + of this LLCL entry."; } leaf ttp-transceiver-ref { type leafref { @@ -1706,72 +1711,81 @@ module ietf-optical-impairment-topology { type boolean; description "'true' - connectivity from this transceiver is allowed; - 'false' - connectivity from this transceiver is - disallowed."; + 'false' - connectivity from this transceiver is + disallowed."; } - leaf add-path-impairments { + leaf add-path-impairments-set { type leafref { path "../../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id" ; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } - description "pointer to the list set of ROADM optical - impairments"; + description + "pointer to the list set of ROADM optical + impairments"; } - leaf drop-path-impairments { + leaf drop-path-impairments-set { type leafref { path "../../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id" ; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } - description "pointer to the list set of ROADM - optical impairments"; + description + "pointer to the list set of ROADM + optical impairments"; } } list additional-ltp { when "derived-from-or-self(../../../tet:protection-type," + "'oit:otsi-protection')" { description - "This list applies only to TTPs that support individual - OTSi(G) protection."; + "This list applies only to TTPs that support individual + OTSi(G) protection."; } key "ltp-ref"; config false; description - "The restricted list of the potential secondary LTPs that - can be selected when the LTP associated with this LLCP - entry is selected as a working LTP. + "The restricted list of the potential secondary LTPs that + can be selected when the LTP associated with this LLCP + entry is selected as a working LTP. - If this list is empty, all the other LTPs that can be - reached by this TTP can be selected as secondary LTPs."; + If this list is empty, all the other LTPs that can be + reached by this TTP can be selected as secondary LTPs."; leaf ltp-ref { type leafref { path "../../../../../../nt:termination-point/nt:tp-id"; } description - "The reference to potential secondary LTP that can be - selected when the LTP associated with this LLCP entry is - selected as a working LTP"; + "The reference to potential secondary LTP that can be + selected when the LTP associated with this LLCP entry is + selected as a working LTP"; } - leaf add-path-impairments { + leaf add-path-impairments-set { type leafref { path "../../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id" ; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } - description "pointer to the list set of ROADM optical - impairments"; + description + "pointer to the list set of ROADM optical + impairments"; } - leaf drop-path-impairments { + leaf drop-path-impairments-set { type leafref { path "../../../../../../../oit:templates" - + "/oit:roadm-path-impairments/oit:roadm-path-impairment" - + "/oit:roadm-path-impairments-id" ; + + "/oit:roadm-path-impairments-sets" + + "/oit:roadm-path-impairments-set" + + "/oit:roadm-path-impairments-set-id"; } - description "pointer to the list set of ROADM - optical impairments"; + description + "pointer to the list set of ROADM + optical impairments"; } } } // augmentation local-link-connectivity + } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-petra@2024-07-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-petra@2025-05-12.yang similarity index 97% rename from experimental/ietf-extracted-YANG-modules/ietf-petra@2024-07-05.yang rename to experimental/ietf-extracted-YANG-modules/ietf-petra@2025-05-12.yang index 4ce5e3814..3b0de6e21 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-petra@2024-07-05.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-petra@2025-05-12.yang @@ -14,7 +14,7 @@ module ietf-petra { description "Initial YANG rendition of the PETRA Energy API, v1.0.1 - Copyright (c) 2024 IETF Trust and the persons identified as + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -65,7 +65,7 @@ module ietf-petra { } */ - revision 2024-07-05 { + revision 2025-05-12 { description "Initial YANG rendition of the PETRA Energy API, v1.0.1"; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-schc-coap@2025-03-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-schc-coap@2025-07-07.yang similarity index 84% rename from experimental/ietf-extracted-YANG-modules/ietf-schc-coap@2025-03-03.yang rename to experimental/ietf-extracted-YANG-modules/ietf-schc-coap@2025-07-07.yang index bb98cb9a1..e958ac997 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-schc-coap@2025-03-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-schc-coap@2025-07-07.yang @@ -36,7 +36,7 @@ module ietf-schc-coap { This module extends the ietf-schc module defined in RFC 9363 to include the new CoAP options as defined in RFC YYYY."; - revision 2025-03-03 { + revision 2025-07-07 { description "New CoAP extensions and extended OSCORE fields."; reference @@ -143,46 +143,22 @@ module ietf-schc-coap { RFC XXXX Key Update for OSCORE (KUDOS)"; } - identity fid-coap-option-oscore-y { - base "schc:fid-coap-option"; - description - "CoAP option OSCORE y field."; - reference - "RFC YYYY Static Context Header Compression (SCHC) for the - Constrained Application Protocol (CoAP) (see - Section 6.4) - RFC XXXX Key Update for OSCORE (KUDOS)"; - } - - identity fid-coap-option-oscore-oldnonce { - base "schc:fid-coap-option"; - description - "CoAP option OSCORE old_nonce field."; - reference - "RFC YYYY Static Context Header Compression (SCHC) for the - Constrained Application Protocol (CoAP) (see - Section 6.4) - RFC XXXX Key Update for OSCORE (KUDOS)"; - } - // Function Length - identity fl-oscore-oscore-nonce-length { + identity fl-oscore-oscore-piv-length { base "schc:fl-base-type"; description - "Size in bytes of the OSCORE nonce corresponding to m+1."; + "Size in bytes of the OSCORE Partial IV corresponding to n."; reference "RFC YYYY Static Context Header Compression (SCHC) for the Constrained Application Protocol (CoAP) (see - Section 6.4) - RFC XXXX Key Update for OSCORE (KUDOS)"; + Section 6.4)"; } - identity fl-oscore-oscore-oldnonce-length { + identity fl-oscore-oscore-nonce-length { base "schc:fl-base-type"; description - "Size in bytes of the OSCORE old_nonce corresponding to w+1. - "; + "Size in bytes of the OSCORE nonce corresponding to m+1."; reference "RFC YYYY Static Context Header Compression (SCHC) for the Constrained Application Protocol (CoAP) (see diff --git a/experimental/ietf-extracted-YANG-modules/ietf-srv6-base@2022-01-14.yang b/experimental/ietf-extracted-YANG-modules/ietf-srv6-base@2025-07-07.yang similarity index 60% rename from experimental/ietf-extracted-YANG-modules/ietf-srv6-base@2022-01-14.yang rename to experimental/ietf-extracted-YANG-modules/ietf-srv6-base@2025-07-07.yang index 80c0fdb23..b2d5a693d 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-srv6-base@2022-01-14.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-srv6-base@2025-07-07.yang @@ -12,7 +12,6 @@ module ietf-srv6-base { prefix inet; reference "RFC 6991: Common YANG Data Types"; } - import ietf-yang-types { prefix "yang"; reference "RFC 6991: Common YANG Data Types"; @@ -55,13 +54,13 @@ module ietf-srv6-base { Editor: Xufeng Liu - + Editor: Zhibo Hu Editor: Iftekhar Hussain - + Editor: Himanshu Shah @@ -76,11 +75,13 @@ module ietf-srv6-base { Editor: Katsuhiro Horiba - + Editor: Ahmed AbdelSalam + Editor: Pingping Yu + "; description @@ -102,6 +103,15 @@ module ietf-srv6-base { // RFC Editor: replace XXXX with actual RFC number and remove // this note + revision 2025-07-07 { + description + "Adding compressed SID and few other missing def"; + reference + "RFC XXXX: YANG Data Model for SRv6"; + // RFC Editor: replace XXXX with actual RFC number and remove + // this note + } + revision 2022-01-14 { description "Alignment with SRv6 network programming rev16"; @@ -217,6 +227,7 @@ module ietf-srv6-base { container hop-limit { description "Configure IPv6 header's Hop-limit options"; leaf value { + when "../propagate = 'false'"; type uint8; default 64; description "Set encapsulating outer IPv6 header's Hoplimit @@ -238,6 +249,7 @@ module ietf-srv6-base { container traffic-class { description "Configure IPv6 header's Traffic-class options"; leaf value { + when "../propagate = 'false'"; type uint8; default 0; description "Set encapsulating outer IPv6 header's @@ -258,6 +270,127 @@ module ietf-srv6-base { } } +grouping srv6-ucsid16-cfg-grouping { + description "Uncompressed 16 bit FUNCT SID format config grouping"; + + container id-block { + description "Container for Id allocation corresponding to FUNCT"; + reference "RFC XXXX: YANG Data Model for SRv6 - Section 3.4.1"; + + container explicit { + description "Configure Explicit FUNCT parameters"; + leaf start { + type uint16; + description "Start of explicit block"; + } + leaf size { + type uint16; + description "Size of explicit block"; + } + } + } +} + +grouping srv6-csid-next16-cfg-grouping { + description "NEXT-CSID (16b uSID) common grouping"; + + // CFG + + container local-id-block { + description "Configure LIB parameters"; + reference "RFC XXXX: YANG Data Model for SRv6 - Section 3.4.2"; + leaf start { + type uint16; // TODO: range + description "LIB space follows GIB space. An implementation may chose + the default index for the start of LIB - e.g. LIB starting + from 0xE000. This configuration item allows to change the start of + LIB space as a user wishes to resize (expand or shrink) + it"; + } + + container explicit { + description "Configure Explicit LIB parameters"; + + leaf start { + type uint16; + description "Start of explicit LIB within LIB space"; + } + leaf size { + type uint16; + description "Size (to shrink or expand) of explicit LIB"; + } + } + } +} + +/* TODO +grouping srv6-csid-replace-cfg-grouping { + description "REPLACE-CSID common grouping"; + // TODO CFG + } +*/ + + grouping srv6-sid-formats { + description "SRv6 SID formats grouping"; + + container sid-formats { + description "Container for SRv6 SID formats"; + + list format { + key "type"; + description "SRv6 SID format"; + + leaf type { + type identityref { base srv6-types:srv6-sid-format-type; } + description "Format type"; + } + + // STATE + leaf compression-type { + type srv6-types:srv6-sid-compression-type; + config false; + description "Compression type"; + } + leaf description { + type string; + config false; + description "Format description"; + } + + uses srv6-types:srv6-sid-structure-info-grouping; + + // CFG + container uncompressed-16 { + when "derived-from-or-self(../type, 'srv6-sid-fmt-uc-1')" { + description "This container is valid only when the + SID format is one of the uncompressed types"; + } + + description "Configuration specific to uncompressed SID formats with 16b FUNCT"; + uses srv6-ucsid16-cfg-grouping; + } + + container csid-next-16 { + when "derived-from-or-self(../type, 'srv6-sid-fmt-cnext-1616') or + derived-from-or-self(../type, 'srv6-sid-fmt-cnext-3216') or + derived-from-or-self(../type, 'srv6-sid-fmt-cnext-6416')" { + description "This container is valid only when the + SID format is one of the 16bits NEXT-CSID"; + } + + description "Configuration specific to NEXT-CSID with 16b CSIDs"; + uses srv6-csid-next16-cfg-grouping; + } + + container csid-replace { + // TODO: when clause if/as needed + description "REPLACE-CSID specific items"; + // TODO: uses srv6-csid-replace-cfg-grouping; + } + } + } + } + grouping srv6-locator-state { description "SRv6 grouping Locator state"; @@ -275,6 +408,58 @@ module ietf-srv6-base { } } + grouping srv6-remote-locator-stats-grouping { + description "SRv6 Locator prefix accounting grouping"; + + container traffic-accounting { + description "SRv6 remote locator traffic accounting"; + + container inbound { + description "Per-Locator prefix inbound accounting"; + + uses srv6-stats-in; + } + + container outbound { + description "Per-Locator prefix per-nexthop counters (aka LOC.INT.E)"; + + list paths { + key "interface next-hop"; + description "Forwarding path information"; + + leaf interface { + type if:interface-ref; + description "The outgoing interface"; + } + + leaf next-hop { + type inet:ipv6-address; + description "The IPv6 address of the next-hop"; + } + + uses srv6-stats-out; + } + } + } +} + grouping srv6-remote-locators-state { + + description "SRv6 Remote Locator state grouping"; + + list remote { + key "prefix"; + config false; + description "SRv6 remote locators' prefixes"; + + leaf prefix { + type inet:ipv6-prefix; + description "Locator IPv6 prefix"; + } + + uses srv6-remote-locator-stats-grouping; + } + } + grouping srv6-locators { description "SRv6 locator grouping"; @@ -296,6 +481,12 @@ module ietf-srv6-base { description "Enable a SRv6 locator"; } + leaf format { + type identityref { base srv6-types:srv6-sid-format-type; } + mandatory true; + description "SRv6 SID format"; + } + container prefix { description "Specify locator prefix value"; leaf address { @@ -311,7 +502,7 @@ module ietf-srv6-base { } leaf algorithm { - type uint32 { + type uint8 { range "128..255"; } @@ -324,8 +515,30 @@ module ietf-srv6-base { description "Set to true if locator is an Anycast locator"; } + container node-sid-auto-allocation { + description "Container for SID auto allocation"; + leaf behavior { + type identityref { base srv6-types:srv6-endpoint-type; } + + description "As locator becomes operational, Node SIDs can be + auto allocated - e.g. in Uncompressed format locator, a reserved + FUNC value can be used and assigned for END SID; In + NEXT-CSID, the locator prefix address is used as + NEXT-CSID's END. These node SID are auto allocated with a + default variant (e.g. PSP-USD). This item allows a user to specify + a different variant."; + } + + leaf disable { + type boolean; + default false; + description "Set to true to disable auto allocation of SIDs"; + } + } + uses srv6-locator-state; } + uses srv6-remote-locators-state; } } @@ -408,21 +621,31 @@ module ietf-srv6-base { } container l2 { - when "../../../next-hop-type = 'l2'" { - description "This container is valid only for L2 type - of NHs"; - } leaf interface { + when "../../../../next-hop-type = 'l2'" { + description "This leaf is valid only when the nexthop type + is l2"; + } type if:interface-ref; description "The outgoing Layer2 interface"; } + leaf lookup-table-id { + when "../../../../next-hop-type = 'l2_lookup'" { + description "This leaf is valid only when the nexthop type + is L2 lookup (in a table)"; + } + type uint32; + description "Lookup Table ID; Applicable to L2 VLAN, + L2 Ucast/Mcast table"; + } + description "L2 information"; - } + } container l3 { - when "../../../next-hop-type != 'l2'" { + when "../../../next-hop-type = 'ipv4' or ../../../next-hop-type = 'ipv6'" { description "This container is valid only for L3 type of NHs"; } @@ -439,8 +662,23 @@ module ietf-srv6-base { uses path-attrs-cmn; + leaf lookup-table-id { + when "../../../../next-hop-type = 'l3_lookup'" { + description "This leaf is valid only when the nexthop type + is L3 lookup (in a table)"; + } + type uint32; + description "L3 Lookup Table ID; Applicable to L3 unicast table"; + } + + //leaf vrf-name { + // type string; + // description " vrf name"; + //} + description "L3 information"; } + uses path-out-sids-choice; } @@ -449,79 +687,106 @@ module ietf-srv6-base { } } - grouping srv6-state-sid { - description "SRv6 SID state grouping"; + grouping srv6-sid-alloc-grouping { + description "SRv6 SID allocation grouping"; - container local-sids { - config false; - description "Local-SID state"; + container allocation { + description "SRv6 SID allocation container."; - container counters { - description "SRv6 counters"; - container cnt-3 { - description "Counts SRv6 traffic received/dropped on local - prefix not instantiated as local-SID"; - uses srv6-stats-in; - } + leaf alloc-type { + type srv6-types:sid-alloc-type; + description "Type of sid allocation."; } - list local-sid { - key "sid"; - description "Per-localSID Counters"; + list owner { + key "type instance"; + description "SID Owner clients"; - leaf sid { - type srv6-types:srv6-sid; - description "Local SID value"; + leaf type { + type identityref { base srv6-types:srv6-sid-owner-type; } + description "SID owner/client type"; } - uses srv6-locator; + leaf instance { + type string; + description "Client instance"; + } - leaf is-reserved { + leaf is-winner { type boolean; - description "Set to true if SID comes from reserved pool"; + description "Is this client/owner the winning in terms of forwarding"; } + } - leaf end-behavior-type { - type identityref { - base srv6-types:srv6-endpoint-type; - } - description "Type of SRv6 end behavior."; - } + leaf allocated-from-reserved { + type boolean; + description "Set to true if SID comes from reserved pool"; + } + } +} - leaf alloc-type { - type srv6-types:sid-alloc-type; - description - "Type of sid allocation."; - } + grouping srv6-state-sid { + description "SRv6 SID state grouping"; + + container sids { + + description "My SID state"; - list owner { - key "type instance"; - description "SID Owner clients"; - leaf type { - type identityref { - base srv6-types:srv6-sid-owner-type; + leaf sid-holdtime { + type uint8 { + range "0..60"; //The range of minutes is from 0 (disabled) to 60 minutes } - description "SID owner/client type"; + units minutes; + default 30; + description "The holdtime for a stale or freed SID. The value 0 + is used for an immediate release of an allocated SID."; } - leaf instance { - type string; - description "Client instance"; - } - leaf is-winner { - type boolean; - description "Is this client/owner the winning in terms of - forwarding"; + + container counts { + config false; + description "Summary/aggregate counts for my SIDs"; + + leaf allocated { + type uint32; + description "Total number of currently allocated SID"; + } + + leaf stale { + type uint32; + description "A stale SID is the a previously allocated SID which + is freed by the owner but not fully released due to holdtime"; + } } + + list sid { + key "sid"; + config false; + + description "Per-SID"; + + leaf sid { + type srv6-types:srv6-sid; + description "My SID value"; } + leaf behavior { + type identityref { base srv6-types:srv6-endpoint-type; } + description "Type of SRv6 endpoint behavior."; + } + + uses srv6-locator; + + uses srv6-sid-alloc-grouping; + uses local-sid-fwd-state; container counters { - description "SRv6 per local-SID counters"; + description "SRv6 per SID counters"; - container cnt-1 { + container success { description "Counts SRv6 traffic received on local-SID - prefix and processed successfully"; + prefix and processed successfully - see + srv6-counter-types:CNT-MySID-Success (RFC 8986 section 6)"; uses srv6-stats-in; } } @@ -536,9 +801,7 @@ module ietf-srv6-base { description "End behavior support"; leaf type { - type identityref { - base srv6-types:srv6-endpoint-type; - } + type identityref { base srv6-types:srv6-endpoint-type; } description "End behavior (End*) type"; } leaf supported { @@ -556,9 +819,7 @@ module ietf-srv6-base { key "type"; description "Headend behavior support"; leaf type { - type identityref { - base srv6-types:srv6-headend-type; - } + type identityref { base srv6-types:srv6-headend-type; } description "Headend behavior (H*) type"; } leaf supported { @@ -608,9 +869,7 @@ module ietf-srv6-base { description "Security rule support"; leaf type { - type identityref { - base srv6-types:srv6-security-type; - } + type identityref { base srv6-types:srv6-security-type; } description "Security rule type"; } leaf supported { @@ -628,9 +887,7 @@ module ietf-srv6-base { key "type"; description "SRv6 counter support"; leaf type { - type identityref { - base srv6-types:srv6-counter-type; - } + type identityref { base srv6-types:srv6-counter-type; } description "Counter type"; } leaf supported { @@ -661,7 +918,6 @@ module ietf-srv6-base { container srv6 { description "Segment Routing with IPv6 dataplane"; - /* config */ leaf enable { type boolean; @@ -669,9 +925,10 @@ module ietf-srv6-base { description "Enable SRv6"; } + uses srv6-state-capabilities; uses srv6-encap; + uses srv6-sid-formats; uses srv6-locators; - uses srv6-state-capabilities; uses srv6-state-sid; } } @@ -711,22 +968,47 @@ module ietf-srv6-base { container existing { description "Current assignment / bind"; leaf end-behavior-type { - type identityref { - base srv6-types:srv6-endpoint-type; - } + type identityref { base srv6-types:srv6-endpoint-type; } description "End type"; } - // TODO: More + + list owner { + key "type instance"; + description "SID Owner clients"; + + leaf type { + type identityref { base srv6-types:srv6-sid-owner-type; } + description "SID owner/client type"; + } + + leaf instance { + type string; + description "Client instance"; + } + } } + container requested { description "Requested assignment / bind"; leaf end-behavior-type { - type identityref { - base srv6-types:srv6-endpoint-type; - } + type identityref { base srv6-types:srv6-endpoint-type; } description "End type"; } + + container requester { + description "SID client"; + + leaf type { + type identityref { base srv6-types:srv6-sid-owner-type; } + description "SID owner/client type"; + } + + leaf instance { + type string; + description "Client instance"; + } + } } } } // module diff --git a/experimental/ietf-extracted-YANG-modules/ietf-srv6-nexthop@2025-07-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-srv6-nexthop@2025-07-05.yang new file mode 100644 index 000000000..413cc7ecb --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-srv6-nexthop@2025-07-05.yang @@ -0,0 +1,195 @@ +module ietf-srv6-nexthop { + yang-version "1.1"; + namespace "urn:ietf:params:xml:ns:yang:ietf-srv6-nexthop"; + prefix "srv6-nexthop"; + import ietf-inet-types { + prefix "inet"; + reference + "RFC 6991: Common YANG Data Types"; + } + import ietf-routing { + prefix "rt"; + reference + "RFC 8349: A YANG Data Model for Routing Management + (NMDA Version)."; + } + import ietf-ipv4-unicast-routing { + prefix "v4ur"; + reference + "RFC 8349: A YANG Data Model for Routing Management + (NMDA Version)."; + } + import ietf-ipv6-unicast-routing { + prefix "v6ur"; + reference + "RFC 8349: A YANG Data Model for Routing Management + (NMDA Version)."; + } + import ietf-sr-policy-types { + prefix "sr-policy-types"; + reference + "RFC XXXX: YANG Data Model for Segment Routing Policy."; + } + organization + "IETF SPRING Working Group"; + contact + "TBD"; + description + "This module describes a YANG model for configuring and + managing SRv6 next hop information for Routing. + This YANG model conforms to the Network Management + Datastore Architecture (NMDA) as described in RFC 8342. + Copyright (c) 2025 IETF Trust and the persons identified as + authors of the code. All rights reserved. + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject to + the license terms contained in, the Revised BSD License set + forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + This version of this YANG module is part of RFC XXXX; + see the RFC itself for full legal notices. + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL + NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', + 'MAY', and 'OPTIONAL' in this document are to be interpreted as + described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, + they appear in all capitals, as shown here."; + revision 2025-07-05 { + description + "Initial Version"; + reference + "RFC XXXX, YANG Data Model for SRv6 Next Hop of Routing"; + } + grouping srv6-nexthop-info { + description + "This group provides the information of SRv6 next hop for + routing."; + container srv6-te { + description + "The informaton of SRv6 Traffic Engineering forwarding."; + leaf color { + type sr-policy-types:color-type; + description + "The Color of a SRv6 Policy."; + } + leaf endpoint { + type inet:ip-prefix; + description + "The endpoint of a SRv6 Policy."; + } + leaf srv6-sid { + type inet:ipv6-prefix; + description + "The SRv6 SID value for SRv6 Traffic Engineering + forwarding."; + } + } + container srv6-be { + description + "The informaton of SRv6 Best Effort forwarding."; + leaf srv6-sid { + type inet:ipv6-prefix; + description + "The SRv6 SID value for SRv6 Best Effort forwarding."; + } + } + } + grouping srv6-nexthop-content { + description + "Generic parameters of SRv6 next hop in static routes."; + container srv6-next-hop-list { + description + "Container for multiple SRv6 next hop."; + list srv6-next-hop { + key "index"; + description + "An entry in a SRv6 next hop list."; + leaf index { + type string; + description + "A user-specified identifier utilized to uniquely + reference the SRv6 next-hop entry in the SRv6 + next-hop list. The value of this index has no + semantic meaning other than for referencing the + entry."; + } + uses srv6-nexthop-info; + } + } + } + grouping srv6-nexthop-state-content { + description + "Generic state parameters of SRv6 next hop."; + container srv6-next-hop-list { + description + "Container for multiple SRv6 next hop."; + list srv6-next-hop { + description + "An entry in a SRv6 next hop list."; + uses srv6-nexthop-info; + } + } + } + augment "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:static-routes/v4ur:ipv4/" + + "v4ur:route/v4ur:next-hop/v4ur:next-hop-options" { + description + "Augment 'next-hop-options' in IPv4 unicast route."; + case srv6-next-hop-list { + description + "The case represents a SRv6 next hop list."; + uses srv6-nexthop-content; + } + } + augment "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:static-routes/v6ur:ipv6/" + + "v6ur:route/v6ur:next-hop/v6ur:next-hop-options" { + description + "Augment 'next-hop-options' in IPv6 unicast route."; + case srv6-next-hop-list { + description + "The case represents a SRv6 next hop list."; + uses srv6-nexthop-content; + } + } + augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/" + + "rt:next-hop/rt:next-hop-options" { + description + "Augment 'next-hop-options' of a route in RIB."; + case srv6-next-hop-list { + description + "The case represents a SRv6 next hop list."; + uses srv6-nexthop-state-content; + } + } + augment "/rt:routing/rt:ribs/rt:rib/rt:active-route/rt:output/" + + "rt:route/rt:next-hop/rt:next-hop-options" { + description + "Augment 'next-hop-options' of an active-route in RIB."; + case srv6-next-hop-list { + description + "The case represents a SRv6 next hop list."; + uses srv6-nexthop-state-content; + } + } + augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/" + + "rt:route/rt:next-hop/rt:next-hop-options" { + description + "Augment 'next-hop-options' of a route state in RIB."; + case srv6-next-hop-list { + description + "The case represents a SRv6 next hop list."; + uses srv6-nexthop-state-content; + } + } + augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/" + + "rt:output/rt:route/rt:next-hop/rt:next-hop-options" { + description + "Augment 'next-hop-options' of an active route state in RIB."; + case srv6-next-hop-list { + description + "The case represents a SRv6 next hop list."; + uses srv6-nexthop-state-content; + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2024-03-04.yang b/experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2025-07-07.yang similarity index 98% rename from experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2024-03-04.yang rename to experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2025-07-07.yang index 86297ed50..9cc722e2c 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2024-03-04.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2025-07-07.yang @@ -59,7 +59,7 @@ module ietf-srv6-static { Editor: Iftekhar Hussain - + Editor: Himanshu Shah @@ -74,12 +74,15 @@ module ietf-srv6-static { Editor: Katsuhiro Horiba - + Editor: Ahmed AbdelSalam - "; + Editor: Pingping Yu + + + "; description "This YANG module defines the essential elements for the management of Static application for Segment-Routing with @@ -101,6 +104,15 @@ module ietf-srv6-static { // RFC Editor: replace XXXX with actual RFC number and remove // this note + revision 2025-07-07 { + description + "Renamed local-sid to sid"; + reference + "RFC XXXX: YANG Data Model for SRv6 Static"; + // RFC Editor: replace XXXX with actual RFC number and remove + // this note + } + revision 2024-03-04 { description "Fixed static yang warnings"; @@ -265,6 +277,7 @@ module ietf-srv6-static { list path { key path-index; description "The list of paths associated with the SID"; + leaf path-index { type uint8; description "Index of the path"; @@ -409,6 +422,7 @@ module ietf-srv6-static { (variant: PSP/USD)"; } + container end_usp_usd { when "../end-behavior-type = 'srv6-types:End_USP_USD'" { description @@ -601,6 +615,7 @@ module ietf-srv6-static { in the core."; // TODO presence "Mandatory child only if container is present"; + leaf lookup-table-ipv6 { type srv6-types:table-id; mandatory true; @@ -840,6 +855,7 @@ module ietf-srv6-static { uses multi-paths-v6; } + container end-bm { when "../end-behavior-type = 'srv6-types:End.BM'" { description @@ -1073,13 +1089,13 @@ module ietf-srv6-static { to EVPN ESI filtering and EVPN-ETREE used to exclude specific OIF (or set of OIFs) from flooding table. */ } - /* End of EVPN END behavior types */ } - grouping srv6-static-cfg { + grouping srv6-static-sid-cfg { description "Grouping configuration and operation for SRv6 sid."; + list sid { key "function"; description "List of locally instantiated SIDs"; @@ -1095,12 +1111,12 @@ module ietf-srv6-static { container static { description "Static SRv6"; - /* Local SIDs */ - container local-sids { + /* Local/My SIDs */ + container sids { description - "SRv6-static locally instantiated SIDs"; + "Locally instantiated explicit SRv6 SIDs"; - uses srv6-static-cfg; + uses srv6-static-sid-cfg; /* no state for now; SID state accessible through base model */ } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2024-11-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2025-07-07.yang similarity index 52% rename from experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2024-11-21.yang rename to experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2025-07-07.yang index 836443536..cd419452e 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2024-11-21.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2025-07-07.yang @@ -28,7 +28,7 @@ module ietf-srv6-types { Editor: Iftekhar Hussain - + Editor: Himanshu Shah @@ -43,11 +43,14 @@ module ietf-srv6-types { Editor: Katsuhiro Horiba - + Editor: Ahmed AbdelSalam + Editor: Pingping Yu + + "; description @@ -70,6 +73,15 @@ module ietf-srv6-types { // RFC Editor: replace XXXX with actual RFC number and remove // this note + revision 2025-07-07 { + description + "Adding compressed SID and few other missing def"; + reference + "RFC XXXX: YANG Data Model for SRv6"; + // RFC Editor: replace XXXX with actual RFC number and remove + // this note + } + revision 2024-11-21 { description "Added SID structure definition and "; @@ -123,7 +135,6 @@ module ietf-srv6-types { // RFC Editor: replace XXXX with actual RFC number and remove // this note } - identity srv6-endpoint-type { description "Base identity from which specific SRv6 Endpoint types are @@ -172,7 +183,6 @@ module ietf-srv6-types { reference "RFC 8986"; } - identity End.X_PSP { base srv6-endpoint-type; description @@ -236,6 +246,8 @@ module ietf-srv6-types { "RFC 8986"; } + // TODO: End.B6.Insert + identity End.B6.Encaps { base srv6-endpoint-type; description @@ -315,7 +327,6 @@ module ietf-srv6-types { reference "RFC 8986"; } - identity End.DT2U { base srv6-endpoint-type; description @@ -334,6 +345,8 @@ module ietf-srv6-types { "RFC 8986"; } + // TODO: End.B6.Insert.Red + identity End.B6.Encaps.Red { base srv6-endpoint-type; description @@ -445,142 +458,715 @@ module ietf-srv6-types { "RFC 8986"; } - /* Endpoints defined under - * draft-ietf-spring-sr-service-programming */ + identity End.MAP { + base srv6-endpoint-type; + description + "DMM End.MAP"; + reference + "RFC9433"; + } - identity End.AN { + identity End.Limit { base srv6-endpoint-type; description - "Service-Chaining SR Aware function (native)"; + "DMM End.Limit"; reference - "draft-ietf-spring-sr-service-programming-05"; + "RFC9433"; + } + + /* Endpoints defined under RFC9800 */ + + identity END.NEXT-ONLY-CSID { + base srv6-endpoint-type; + description + "End SID with the NEXT-ONLY-CSID flavor"; + reference + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.AS { + identity END.NEXT-CSID { base srv6-endpoint-type; description - "Service-Chaining Static proxy"; + "End SID with the NEXT-CSID flavor"; reference - "draft-ietf-spring-sr-service-programming-05"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.AD { + identity END.NEXT-CSID_PSP { base srv6-endpoint-type; description - "Service-Chaining Dynamic proxy"; + "End SID with the NEXT-CSID PSP flavor"; reference - "draft-ietf-spring-sr-service-programming-05"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.AM { + identity END.NEXT-CSID_USP { base srv6-endpoint-type; description - "Service-Chaining Masquerading SR proxy"; + "End SID with the NEXT-CSID USP flavor"; reference - "draft-ietf-spring-sr-service-programming-05"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.AM_NAT { + identity END.NEXT-CSID_PSP_USP { base srv6-endpoint-type; description - "Service-Chaining Masquerading SR proxy with NAT"; + "End SID with the NEXT-CSID PSP/USP flavor"; reference - "draft-ietf-spring-sr-service-programming-05"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.AM_CACHE { + identity END.NEXT-CSID_USD { base srv6-endpoint-type; description - "Service-Chaining Masquerading SR proxy with Caching"; + "End SID with the NEXT-CSID USD flavor"; reference - "draft-ietf-spring-sr-service-programming-05"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.AM_NAT_CACHE { + identity END.NEXT-CSID_PSP_USD { base srv6-endpoint-type; description - "Service-Chaining Masquerading SR proxy with NAT and - Caching"; + "End SID with the NEXT-CSID PSP/USD flavor"; reference - "draft-ietf-spring-sr-service-programming-05"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - /* Endpoints defined under draft-ietf-dmm-srv6-mobile-uplane */ + identity END.NEXT-CSID_USP_USD { + base srv6-endpoint-type; + description + "End SID with the NEXT-CSID USP/USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } - identity End.MAP { + identity END.NEXT-CSID_PSP_USP_USD { base srv6-endpoint-type; description - "DMM End.MAP"; + "End SID with the NEXT-CSID PSP/USP/USD flavor"; reference - "draft-ietf-dmm-srv6-mobile-uplane-17"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.Limit { + identity END.NEXT-CSID_ONLY { base srv6-endpoint-type; description - "DMM End.Limit"; + "End.X SID with the NEXT-ONLY-CSID flavor"; reference - "draft-ietf-dmm-srv6-mobile-uplane-17"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.M.GTP6.D { + identity END.X.NEXT-CSID { base srv6-endpoint-type; description - "DMM End.M.GTP6.D"; + "End.X SID with the NEXT-CSID flavor"; reference - "draft-ietf-dmm-srv6-mobile-uplane-17"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.M.GTP6.Di { + identity END.X.NEXT-CSID_PSP { base srv6-endpoint-type; description - "DMM End.M.GTP6.Di"; + "End.X SID with the NEXT-CSID PSP flavor"; reference - "draft-ietf-dmm-srv6-mobile-uplane-17"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } - identity End.M.GTP6.E { + identity END.X.NEXT-CSID_USP { base srv6-endpoint-type; description - "DMM End.M.GTP6.E"; + "End.X SID with the NEXT-CSID USP flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.NEXT-CSID_PSP_USP { + base srv6-endpoint-type; + description + "End.X SID with the NEXT-CSID PSP/USP flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + identity END.X.NEXT-CSID_USD { + base srv6-endpoint-type; + description + "End.X SID with the NEXT-CSID USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.NEXT-CSID_PSP_USD { + base srv6-endpoint-type; + description + "End.X SID with the NEXT-CSID PSP/USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.NEXT-CSID_USP_USD { + base srv6-endpoint-type; + description + "End.X SID with the NEXT-CSID USP/USD flavor"; reference - "draft-ietf-dmm-srv6-mobile-uplane-05"; + "RFC 9800"; // RFC Editor: replace with actual RFC number and remove this // note } + identity END.X.NEXT-CSID_PSP_USP_USD { + base srv6-endpoint-type; + description + "End.X SID with the NEXT-CSID PSP/USP/USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity End.DX6.NEXT-CSID { + base srv6-endpoint-type; + description + "NEXT-CSID Endpoint with decapsulation and cross-connect + to an array of IPv6 adjacencies"; + reference + "RFC 9800"; + } + identity End.DX4.NEXT-CSID { + base srv6-endpoint-type; + description + "NEXT-CSID Endpoint with decapsulation and cross-connect + to an array of IPv4 adjacencies"; + reference + "RFC 9800"; + } + + identity End.DT6.NEXT-CSID { + base srv6-endpoint-type; + description + "NEXT-CSID Endpoint with decapsulation and specific + IPv6 table lookup"; + reference + "RFC 9800"; + } + + identity End.DT4.NEXT-CSID { + base srv6-endpoint-type; + description + "NEXT-CSID Endpoint with decapsulation and specific + IPv4 table lookup"; + reference + "RFC 9800"; + } + + identity End.DT46.NEXT-CSID { + base srv6-endpoint-type; + description + "NEXT-CSID Endpoint with decapsulation and specific IP + (IPv4 or IPv6) table lookup"; + reference + "RFC 9800"; + } + + identity End.DX2.NEXT-CSID { + base srv6-endpoint-type; + description + "NEXT-CSID Endpoint with decapsulation and Layer-2 + cross-connect to an L2 interface"; + reference + "RFC 9800"; + } + + identity End.DX2V.NEXT-CSID { + base srv6-endpoint-type; + description + "NEXT-CSID Endpoint with decapsulation and specific + VLAN L2 table lookup"; + reference + "RFC 9800"; + } + + identity End.DT2U.NEXT-CSID { + base srv6-endpoint-type; + description + "NEXT-CSID Endpoint with decapsulation and specific + unicast MAC L2 table lookup"; + reference + "RFC 9800"; + } + + identity End.DT2M.NEXT-CSID { + base srv6-endpoint-type; + description + "NEXT-CSID Endpoint with decapsulation and specific L2 table + flooding"; + reference + "RFC 9800"; + } + + /* DMM - RFC9433 */ + + identity End.M.GTP6.D { + base srv6-endpoint-type; + description + "DMM End.M.GTP6.D"; + reference + "RFC 9433"; + } + + identity End.M.GTP6.Di { + base srv6-endpoint-type; + description + "DMM End.M.GTP6.Di"; + reference + "RFC 9433"; + } + + identity End.M.GTP6.E { + base srv6-endpoint-type; + description + "DMM End.M.GTP6.E"; + reference + "RFC 9433"; + } + identity End.M.GTP4.E { base srv6-endpoint-type; description "DMM End.M.GTP4.E"; reference - "draft-ietf-dmm-srv6-mobile-uplane-05"; + "RFC 9433"; + } + /* DMM end */ + + // TODO: END.DTM + // TODO: End.M + // TODO: End.Replicate + // TODO: End.DTMC4 + // TODO: End.DTMC6 + // TODO: End.DTMC46 + + // TODO: End.T NEXT-CSID ... + + identity END.B6.Encaps.NEXT-CSID { + base srv6-endpoint-type; + description + "End.B6.Encaps SID with the NEXT-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.B6.Encaps.Red.NEXT-CSID { + base srv6-endpoint-type; + description + "End.B6.Encaps.Red SID with the NEXT-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.BM.NEXT-CSID { + base srv6-endpoint-type; + description + "End.BM SID with the NEXT-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.REPLACE-SID { + base srv6-endpoint-type; + description + "End SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.REPLACE-SID_PSP { + base srv6-endpoint-type; + description + "End SID with the REPLACE-CSID PSP flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.REPLACE-SID_USP { + base srv6-endpoint-type; + description + "End SID with the REPLACE-CSID USP flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.REPLACE-SID_PSP_USP { + base srv6-endpoint-type; + description + "End SID with the REPLACE-CSID PSP/USP flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.X SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.REPLACE-CSID_PSP { + base srv6-endpoint-type; + description + "End.X SID with the REPLACE-CSID PSP flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.REPLACE-CSID_USP { + base srv6-endpoint-type; + description + "End.X SID with the REPLACE-CSID USP flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.REPLACE-CSID_PSP_USP { + base srv6-endpoint-type; + description + "End SID with the REPLACE-CSID PSP/USP flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + // TODO: End.T REPLACE-CSID + + identity END.B6.Encaps.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.B6.Encaps SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.BM.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.BM.Red SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.DX6.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.DX6 SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.DX4.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.DX4 SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.DT6.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.DT6 SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.DT4.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.DT4 SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.DT46.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.DT46 SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.DX2.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.DX2 SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.DX2V.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.DX2V SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.DT2U.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.DT2U SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.DT2M.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.DT2M SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.B6.Encaps.Red.REPLACE-CSID { + base srv6-endpoint-type; + description + "End.B6.Encaps.Red SID with the REPLACE-CSID flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.REPLACE-SID_USD { + base srv6-endpoint-type; + description + "End SID with the REPLACE-CSID USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.REPLACE-SID_PSP_USD { + base srv6-endpoint-type; + description + "End SID with the REPLACE-CSID PSP/USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.REPLACE-SID_USP_USD { + base srv6-endpoint-type; + description + "End SID with the REPLACE-CSID USP/USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.REPLACE-SID_PSP_USP_USD { + base srv6-endpoint-type; + description + "End SID with the REPLACE-CSID PSP/USP/USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.REPLACE-CSID_USD { + base srv6-endpoint-type; + description + "End.X SID with the REPLACE-CSID USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.REPLACE-CSID_PSP_USD { + base srv6-endpoint-type; + description + "End.X SID with the REPLACE-CSID PSP/USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.REPLACE-CSID_USP_USD { + base srv6-endpoint-type; + description + "End.X SID with the REPLACE-CSID USP/USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity END.X.REPLACE-CSID_PSP_USP_USD { + base srv6-endpoint-type; + description + "End.X SID with the REPLACE-CSID PSP/USP/USD flavor"; + reference + "RFC 9800"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + // TODO: End.T w/ REPLACE-CSID *USD + // TODO: End.DX1* + + /* Endpoints defined under + * draft-ietf-spring-sr-service-programming */ + + identity End.AN { + base srv6-endpoint-type; + description + "Service-Chaining SR Aware function (native)"; + reference + "draft-ietf-spring-sr-service-programming-05"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity End.AS { + base srv6-endpoint-type; + description + "Service-Chaining Static proxy"; + reference + "draft-ietf-spring-sr-service-programming-05"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity End.AD { + base srv6-endpoint-type; + description + "Service-Chaining Dynamic proxy"; + reference + "draft-ietf-spring-sr-service-programming-05"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity End.AM { + base srv6-endpoint-type; + description + "Service-Chaining Masquerading SR proxy"; + reference + "draft-ietf-spring-sr-service-programming-05"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity End.AM_NAT { + base srv6-endpoint-type; + description + "Service-Chaining Masquerading SR proxy with NAT"; + reference + "draft-ietf-spring-sr-service-programming-05"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity End.AM_CACHE { + base srv6-endpoint-type; + description + "Service-Chaining Masquerading SR proxy with Caching"; + reference + "draft-ietf-spring-sr-service-programming-05"; + // RFC Editor: replace with actual RFC number and remove this + // note + } + + identity End.AM_NAT_CACHE { + base srv6-endpoint-type; + description + "Service-Chaining Masquerading SR proxy with NAT and + Caching"; + reference + "draft-ietf-spring-sr-service-programming-05"; // RFC Editor: replace with actual RFC number and remove this // note } - /* DMM end */ identity srv6-headend-type { description @@ -628,26 +1214,30 @@ module ietf-srv6-types { // RFC Editor: replace with actual RFC number and remove this // note } + identity srv6-security-type { description "Base identity from which SRv6 Security rule types are derived."; } - identity SEC-1 { + identity EXTIF-ACL-DROP-DA-SIDSPACE { base srv6-security-type; description "Support an ACL on the external interface that - drops any traffic with SA or DA in the internal SID space. - (aka Security rule SEC-1)"; + drops any traffic with DA within the internal SID space."; + reference + "RFC 8754 section 5.1"; } - identity SEC-2 { + identity INTIF-ACL-DROP-DA-SIDSPACE-SA-EXT { base srv6-security-type; description - "Support an ACL that drops any traffic on local SID as DA + "Support an ACL that drops any traffic on mySID as DA from a source SA that does not belong to internal address - or SID space. (aka Security rule SEC-2)"; + or SID space.)"; + reference + "RFC 8754 section 5.1"; } identity srv6-counter-type { @@ -655,15 +1245,13 @@ module ietf-srv6-types { "Base identity from which SRv6 counter types are derived."; } - identity LocalSID { + identity CNT-MySID-Success { base srv6-counter-type; description - "Count packets and bytes traffic that matched that SID and - was processed successfully (aka Counter CNT-1)"; + "Count packets and bytes traffic that matched mySID and + was processed successfully"; reference - "RFC 8986"; - // RFC Editor: replace with actual RFC number and remove this - // note + "RFC 8986 section 6"; } typedef srv6-sid { @@ -672,6 +1260,16 @@ module ietf-srv6-types { "This type defines a SID value in SRv6"; } + typedef srv6-sid-compression-type { + type enumeration { + enum uncompressed { value 1; description "Uncompressed"; } + enum csid-next { description "Compressed NEXT-CSID (aka uSID)"; } + enum csid-replace { description "Compressed REPLACE-CSID"; } + } + description + "SID [compression] type"; + } + typedef srv6-sid-func-value { type uint32; description @@ -688,7 +1286,6 @@ module ietf-srv6-types { description "SRv6 SID's FUNC Reserved values"; } - typedef srv6-locator-name-type { type string { length "1..59"; @@ -698,7 +1295,7 @@ module ietf-srv6-types { typedef srv6-locator-len { type uint8 { - range "32 .. 96"; + range "16 .. 96"; } description "This type defines an SRv6 locator len with range @@ -731,13 +1328,12 @@ module ietf-srv6-types { typedef srv6-sid-pfxlen { type uint8 { - range "32 .. 128"; + range "16 .. 128"; } default 128; description "This type defines a SID prefixlen with range constraints"; } - typedef sid-alloc-type { type enumeration { enum Dynamic { @@ -772,6 +1368,7 @@ module ietf-srv6-types { base srv6-sid-owner-type; description "BGP"; } + identity evpn { base srv6-sid-owner-type; description "EVPN"; @@ -787,6 +1384,11 @@ module ietf-srv6-types { description "SF"; } + identity static { + base srv6-sid-owner-type; + description "Static"; + } + typedef table-id { type uint32; description @@ -807,13 +1409,15 @@ module ietf-srv6-types { enum ipv4 { value 1; description "IPv4 next-hop"; } enum ipv6 { description "IPv6 next-hop"; } enum mpls { description "MPLS next-hop"; } + enum l3_lookup { description "L3 Lookup in a table"; } enum l2 { description "L2 next-hop"; } + enum l2_lookup { description "L2 Lookup in a table"; } } description "Forwarding Next-hop type"; } - grouping srv6-sid-structure { + grouping srv6-sid-structure-grouping { description "SRv6 SID structure grouping"; leaf locator-block-length { @@ -834,19 +1438,64 @@ module ietf-srv6-types { } } - grouping srv6-sid-type-b-config { - description "SRv6 SID Type-B config grouping"; + grouping srv6-sid-structure-info-grouping { + description "SRv6 SID structure info grouping"; - leaf sid-behavior { - type identityref { - base srv6-types:srv6-endpoint-type; - } - description "SRv6 SID behavior"; - } + container sid-structure { + config false; + description "SID structure container"; - container sid-structure { - description "SRv6 SID structure"; - uses srv6-types:srv6-sid-structure; - } + uses srv6-sid-structure-grouping; + } + } + + // Base identity for SID formats + identity srv6-sid-format-type { + description + "Base identity from which SID format types are derived."; } + + identity srv6-sid-fmt-uc-1 { + base srv6-sid-format-type; + description + "Uncompressed SID format with LBL=40, LNL=24, FL=16, and AL=16 or more. + The locator length for this format is 64 bits."; + } + + identity srv6-sid-fmt-uc-128 { + base srv6-sid-format-type; + description + "Uncompressed SID format that allows flexible values for LBL/LNL/FL/AL."; + } + + identity srv6-sid-fmt-cnext-1616 { + base srv6-sid-format-type; + description "Compressed NEXT-CSID format using LBL=16, LNL=16, + FL=16 (or 32 for wide function), and AL=16 or more. + The locator length for this format is 32 bits."; + } + + identity srv6-sid-fmt-cnext-3216 { + base srv6-sid-format-type; + description "Compressed NEXT-CSID format using LBL=32, LNL=16, + FL=16 (or 32 for wide function), and AL=16 or more. + The locator length for this format is 48 bits."; + } + + identity srv6-sid-fmt-cnext-4816 { + base srv6-sid-format-type; + description "Compressed NEXT-CSID format using LBL=48, LNL=16, + FL=16 (or 32 for wide function), and AL=16 or more. + The locator length for this format is 64 bits."; + } + + identity srv6-sid-fmt-cnext-6416 { + base srv6-sid-format-type; + description "Compressed NEXT-CSID format using LBL=64, LNL=16, + FL=16 (or 32 for wide function), and AL=16 or more. + The locator length for this format is 80 bits."; + } + + // TODO: srv6-sid-fmt-crepl-XYZ + } // module diff --git a/experimental/ietf-extracted-YANG-modules/ietf-topology-filter@2024-02-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-topology-filter@2025-07-07.yang similarity index 98% rename from experimental/ietf-extracted-YANG-modules/ietf-topology-filter@2024-02-20.yang rename to experimental/ietf-extracted-YANG-modules/ietf-topology-filter@2025-07-07.yang index c44482018..11add8ae8 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-topology-filter@2024-02-20.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-topology-filter@2025-07-07.yang @@ -46,7 +46,7 @@ module ietf-topology-filter { "This YANG module defines data definitions for managing topology filters. - Copyright (c) 2024 IETF Trust and the persons identified as + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -59,7 +59,7 @@ module ietf-topology-filter { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-02-20 { + revision 2025-07-07 { description "Initial revision."; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-vni-mng@2025-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-vni-mng@2025-07-07.yang new file mode 100644 index 000000000..c329129eb --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-vni-mng@2025-07-07.yang @@ -0,0 +1,162 @@ +module ietf-vni-mng { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-vni-mng"; + prefix vni-mng; + + organization + "XXX"; + contact + "WG Web: + WG List: + + Author: Fan Zhang + + Author: Yongqing Zhu + "; + description + "This document defines a YANG data model for the management + of VNIs (Virtual Network Interfaces), including vNIC and CNI, + depending on the different ways of virtualization. It exposes + the real-time VNI resources to network controller and service + orchestrator in order to supervise the cloud resource states + for dynamic adjustment of service function placement and + load-balancing of service instances to ensure the + SLO (Service Level Objective). + + The model is based on YANG 1.1 as defined in RFC 7950 and + conforms to Network Management Datastore Architecture (NMDA) + as defined in RFC 8342. + + Copyright (c) 2025 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (http://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC XXXX; see the + RFC itself for full legal notices."; + + revision 2025-07-07 { + description + "Init revision"; + reference + "YANG Data Model for Virtual Network Interfaces Management"; + } + + /* Data nodes */ + + container dc { + description + "Datacenter"; + leaf dc-id { + type string; + description + "Identifier for the datacenter"; + } + container nodes { + description + "Virtualized nodes (VMs or containers)"; + list node { + key "node-id"; + description + "List of virtualized nodes."; + leaf node-id { + type string; + description + "Identifier for the virtualized node."; + } + leaf node-type { + type enumeration { + enum vm { + description + "Indicates that the node is a Virtual + Machine (VM) instance."; + } + enum container { + description + "Indicates that the node is a Container instance."; + } + } + description + "Specifies the type of the node."; + } + leaf allocatable-bandwidth { + type uint64; + units "bps"; + description + "The maximum allocatable bandwidth for the + node's virtualized interface."; + } + leaf allocated-bandwidth { + type uint64; + units "bps"; + description + "The allocated bandwidth for the node's + virtualized interface."; + } + leaf bandwidth-usage { + type uint64; + units "bps"; + description + "The current bandwidth usage on the node's + virtualized interface."; + } + leaf priority { + type uint8; + description + "Priority level of the node or its traffic, + with lower values indicating higher priority."; + } + leaf latency { + type uint64; + units "ms"; + description + "Average one-way latency experienced by the + node."; + } + leaf packet-loss-rate { + type uint64; + units "%"; + description + "The average packet loss rate observed on the + node's virtualized interface."; + } + leaf ingress-bytes { + type uint64; + units "bytes"; + description + "Total number of bytes received by the node."; + } + leaf egress-bytes { + type uint64; + units "bytes"; + description + "Total number of bytes transmitted from the + node."; + } + list policy { + key "policy-id"; + description + "The service deployed on the node and its + related policy."; + leaf policy-id { + type string; + description + "Identifier for the policy of the service + deployed on the node."; + } + leaf service-id { + type string; + description + "Identifier for the service deployed on the + node."; + } + } + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-wdm-interface@2025-02-10.yang b/experimental/ietf-extracted-YANG-modules/ietf-wdm-interface@2025-02-10.yang index 20a5221ba..ac30c0a27 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-wdm-interface@2025-02-10.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-wdm-interface@2025-02-10.yang @@ -6,6 +6,7 @@ module ietf-wdm-interface { import ietf-interfaces { prefix if; } + import ietf-layer0-types { prefix "l0-types"; } @@ -55,6 +56,9 @@ module ietf-wdm-interface { } + // Need to verify if the enumeration is the proper approach for + // the tca-types, since the list is not fully standardized adn + // subject to change. typedef wdm-if-tca-types { type enumeration { enum laser-linewdt-tca { @@ -104,25 +108,31 @@ module ietf-wdm-interface { description "Thresholds for TCA's"; leaf tca-type { type wdm-if-tca-types; - description "type of the TCA eg TX Power"; + description + "type of the TCA that identify the + performance measurement, eg TX Power"; } - leaf min-threshold { - type int32; + leaf tca-name { + type string; description - "A TCA is generated if the variable is less than - this value"; + "A name of the TCA that explain the TCA scope + eg 'Low TX Power'"; } - leaf max-threshold { + leaf raise-threshold { type int32; description - "A TCA is generated if the variable is more than - this value"; + "A TCA is raised if the variable cross this threshold: + - if raise-threshold is greater than clear-threshold + (or clear threshold is not defined), the TCA + is raised when the value exceed the threshold + - if raise-threshold is smaller that clear-threshold, the + TCA is raised when the value fall below the threshold"; } - leaf threshold-hysteresis { + leaf clear-threshold { type int32; description - "The TCA raise/clear hysteresisis around the - threshold value to avoi alert flikering"; + "A TCA cleared when the variable cross the threshold in the + direction defined for raise-threshold"; } } @@ -158,7 +168,7 @@ module ietf-wdm-interface { leaf central-frequency { type l0-types:frequency-thz; description - "This parameter indicates the nterface Central Frequency"; + "This parameter indicates the interface Central Frequency"; } // uses wdm-if-fec-tca-thresholds; uses wdm-if-tca-list; @@ -192,8 +202,8 @@ module ietf-wdm-interface { } } - notification wdm-if-min-tca { - description "A min output TCA notification"; + notification wdm-if-tca { + description "A output TCA notification"; leaf "if-name" { type leafref { path "/if:interfaces/if:interface/if:name"; } @@ -205,6 +215,12 @@ module ietf-wdm-interface { mandatory true; description "Type of TCA for eg min tx power TCA"; } + leaf tca-name { + type string; + description + "A name of the TCA that explain the TCA scope + eg 'Low TX Power'"; + } } augment "/if:interfaces" { @@ -254,7 +270,7 @@ module ietf-wdm-interface { + "/wdm-if:explicit-transceiver-mode-id"; } description - "The refernce to the explicit transceiver + "The reference to the explicit transceiver mode template."; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-package-instance@2025-03-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-package-instance@2025-03-03.yang index ce156e93a..874e06b67 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yang-package-instance@2025-03-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-package-instance@2025-03-03.yang @@ -69,7 +69,6 @@ module ietf-yang-package-instance { /* * Top-level structure */ - sx:structure package { description "Defines the YANG package structure for use in a YANG instance diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-package-types@2025-03-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-package-types@2025-03-03.yang deleted file mode 100644 index 6ceda3c99..000000000 --- a/experimental/ietf-extracted-YANG-modules/ietf-yang-package-types@2025-03-03.yang +++ /dev/null @@ -1,484 +0,0 @@ -module ietf-yang-package-types { - yang-version 1.1; - namespace "urn:ietf:params:xml:ns:yang:ietf-yang-package-types"; - prefix "pkg-types"; - - import ietf-yang-revisions { - prefix rev; - reference "XXXX: Updated YANG Module Revision Handling"; - } - - import ietf-yang-semver { - prefix ys; - reference "XXXX: YANG Semantic Versioning"; - } - - import ietf-yang-types { - prefix yang; - rev:recommended-min-date 2019-07-21; - reference "RFC 6991bis: Common YANG Data Types."; - } - - import ietf-inet-types { - prefix inet; - rev:recommended-min-date 2013-07-15; - reference "RFC 6991: Common YANG Data Types."; - } - - import ietf-module-tags { - prefix tags; - // RFC Ed. Fix revision once revision date of - // ietf-module-tags.yang is known. - reference "RFC XXX: YANG Module Tags."; - } - - organization - "IETF NETMOD (Network Modeling) Working Group"; - - contact - "WG Web: - WG List: - - Author: Rob Wilton - "; - - description - "This module provides type and grouping definitions for YANG - packages. - - Copyright (c) 2025 IETF Trust and the persons identified as - authors of the code. All rights reserved. - - Redistribution and use in source and binary forms, with or - without modification, is permitted pursuant to, and subject to - the license terms contained in, the Revised BSD License set - forth in Section 4.c of the IETF Trust's Legal Provisions - Relating to IETF Documents - (https://trustee.ietf.org/license-info). - - This version of this YANG module is part of RFC XXXX; see - the RFC itself for full legal notices. - - The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL - NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', - 'MAY', and 'OPTIONAL' in this document are to be interpreted as - described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, - they appear in all capitals, as shown here."; - - // RFC Ed.: update the date below with the date of RFC publication - // and remove this note. - // RFC Ed.: replace XXXX with actual RFC number and remove this - // note. - revision 2025-03-03 { - ys:version 0.5.0; - description - "Initial revision"; - reference - "RFC XXXX: YANG Packages"; - } - - /* - * Typedefs - */ - - typedef pkg-name { - type yang:yang-identifier; - description - "Package names are typed as YANG identifiers."; - } - - typedef pkg-version { - type ys:version; - description - "Packages are versioning used YANG Semver version labels."; - } - - typedef version-or-rev-date { - type union { - type rev:revision-date; - type ys:version; - } - description - "Identifies a module by YANG semantic version or revision date"; - } - - typedef scoped-feature { - type string { - pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*:[a-zA-Z_][a-zA-Z0-9\-_.]*'; - } - description - "Represents a feature name scoped to a particular module, - identified as the ':', where both - and are YANG identifier strings, - as defiend by Section 12 or RFC 6020."; - reference - "RFC XXXX, YANG Packages."; - } - - /* - * Groupings - */ - grouping yang-pkg-identification-leafs { - description - "Parameters for identifying a specific version of a YANG - package"; - - leaf name { - type pkg-name; - mandatory true; - description - "The YANG package name."; - } - - leaf version { - type pkg-version; - mandatory true; - description - "Uniquely identies a particular version of a YANG package. - - Follows the definition for revision labels defined in - draft-verdt-nemod-yang-module-versioning, section XXX"; - } - } - - grouping yang-pkg-instance { - description - "Specifies the data node for a full YANG package instance - represented either on a server or as a YANG instance data - document."; - uses yang-pkg-identification-leafs; - leaf timestamp { - type yang:date-and-time; - description - "An optional timestamp for when this package was created. - This does not need to be unique across all versions of a - package."; - } - - leaf organization { - type string; - description "Organization responsible for this package"; - } - - leaf contact { - type string; - description - "Contact information for the person or organization to whom - queries concerning this package should be sent."; - } - - leaf description { - type string; - description "Provides a description of the package"; - } - - leaf reference { - type string; - description "Allows for a reference for the package"; - } - - leaf complete { - type boolean; - default true; - description - "Indicates whether the schema defined by this package is - referentially complete. I.e. all module imports can be - resolved to a module explicitly defined in this package or - one of the included packages."; - } - - leaf-list tag { - type tags:tag; - description - "Tags associated with a YANG package. Module tags defined in - XXX, ietf-netmod-module-tags can be used here but with the - modification that the tag applies to the entire package - rather than a specific module. See the IANA 'YANG Module - Tag Prefix' registry for reserved prefixes and the IANA - 'YANG Module IETF Tag' registry for IETF standard tags."; - } - - leaf-list supported-feature { - type scoped-feature; - description - "Lists features from any modules included in the package that - MUST be supported by any server implementing the package. - - Features already specified in a 'supported-feature' list of - any included package MUST also be supported by server - implementations and do not need to be repeated in this list. - - All other features defined in modules included in the - package are OPTIONAL to implement. - - Features are identified using :."; - } - - list included-package { - key "name"; - description - "An entry in this list represents a package that is included - as part of the package definition, or an indirectly included - package that is changed in a non backwards compatible way. - - It can be used to resolve inclusion of conflicting package - versions by explicitly specifying which package version is - used. - - If included packages implement different revisions - of the same module, then an explicit entry in the - module list MUST be provided to select the specific module - revision 'implemented' by this package definition. - - For import-only modules, the 'replaces-revision' leaf-list - can be used to select the specific module revisions used by - this package."; - reference - "XXX"; - - uses yang-pkg-identification-leafs; - - leaf-list location { - type inet:uri; - description - "Contains a URL that represents where an instance data file - for this YANG package can be found. - This leaf will only be present if there is a URL available - for retrieval of the schema for this entry. - - If multiple locations are provided, then the first - location in the leaf-list MUST be the definitive location - that uniquely identifies this package"; - } - - } - - list module { - key "name"; - description - "An entry in this list represents a module that must be - implemented by a server implementing this package, as per - RFC 7950 section 5.6.5, with a particular set of supported - features and deviations. - - A entry in this list overrides any module revision - 'implemented' by an included package. Any replaced module - revision SHOULD also be listed in the 'replaces-revision' - list."; - reference - "RFC 7950: The YANG 1.1 Data Modeling Language."; - - leaf name { - type yang:yang-identifier; - mandatory true; - description - "The YANG module name."; - } - - leaf version { - type version-or-rev-date; - mandatory true; - description - "Identifies the module version. If available, the YANG - Semantic Version SHOULD be used, otherwise the YANG module - revision date is used."; - } - - leaf-list location { - type inet:uri; - description - "Contains a URL that represents the YANG schema resource - for this module. - - This leaf will only be present if there is a URL available - for retrieval of the schema for this entry."; - } - - list submodule { - key "name"; - description - "Each entry represents one submodule within the - parent module."; - - leaf name { - type yang:yang-identifier; - description - "The YANG submodule name."; - } - - leaf version { - type version-or-rev-date; - mandatory true; - description - "The YANG submodule revision date or YANG Semantic version. - - If the parent module include statement for this submodule - includes a revision date then it MUST match the revision - date specified here or it MUST match the revision-date - associated with the version specified here."; - } - - leaf-list location { - type inet:uri; - description - "Contains a URL that represents the YANG schema resource - for this submodule. - - This leaf will only be present if there is a URL - available for retrieval of the schema for this entry."; - } - - } - - } - - list import-only-module { - key "name version"; - description - "An entry in this list indicates that the server imports - reusable definitions from the specified revision of the - module, but does not implement any protocol accessible - objects from this revision. - Multiple entries for the same module name MAY exist. This - can occur if multiple modules import the same module, but - specify different revision-dates in the import statements."; - - leaf name { - type yang:yang-identifier; - mandatory true; - description - "The YANG module name."; - } - - leaf version { - type version-or-rev-date; - mandatory true; - description - "Identifies the module version. If available, the YANG - Semantic Version SHOULD be used, otherwise the YANG module - revision date is used."; - } - - leaf-list replaces-version { - type version-or-rev-date; - description - "Gives the version of an import-only-module defined in an - included package that is replaced by this - import-only-module version."; - } - - leaf-list location { - type inet:uri; - description - "Contains a URL that represents the YANG schema resource - for this module. - - This leaf will only be present if there is a URL available - for retrieval of the schema for this entry."; - } - - list submodule { - key "name"; - description - "Each entry represents one submodule within the - parent module."; - - leaf name { - type yang:yang-identifier; - description - "The YANG submodule name."; - } - - leaf version { - type version-or-rev-date; - mandatory true; - description - "The YANG submodule revision date or YANG Semantic version. - - If the parent module include statement for this submodule - includes a revision date then it MUST match the revision - date specified here or it MUST match the revision-date - associated with the version specified here."; - } - - leaf-list location { - type inet:uri; - description - "Contains a URL that represents the YANG schema resource - for this submodule. - - This leaf will only be present if there is a URL - available for retrieval of the schema for this entry."; - } - } - } - - list mounted { - key "mount-path"; - description - "An entry in this list represents a package that will be - found mounted in the schema at the specified mount path. - - For a given mount path, the set of mounted package - versions is the union of all packages mounted at the - given mount point. Any conflicting package versions - MUST be explicitly resolved via an entry in the - mounted/packages of the package definition. - - A mount path with specific keys MUST also includes any - mounted packages without specific keys."; - - leaf "mount-path" { - type string; - description - "This path identifies a mount point in the schema. - - This leaf is encoded as a JSON style encoded - instance-identifier (regardless of whether the format - used to encode the YANG instance data), as specified in - RFC 7951, section 6.11, except that keys are optional. - - For optional keys, the name and value of the key is - excluded from the key list. - - Mount paths MUST only be used for schema mount points - defined in the package schema. - - For example, if an example module 'ex-module' defines a - mount point under list entry'/modules/module/' then a - mount path of - - - '/modules/module[name=foo]' would indicate the mounted - package schema for only the 'foo' entry in the module - list. Each entry in the list could have a different - mounted schema specified. - - - '/modules/module[]' would indicate that the same - mounted package schema is available for all list - entries in the module list."; - } - - list packages { - key "name"; - description - "The package that will be mounted at the specified mount - path"; - uses yang-pkg-identification-leafs; - - leaf-list location { - type inet:uri; - description - "Contains a URL that represents where an instance data - file for this YANG package can be found. - - This leaf will only be present if there is a URL - available for retrieval of the schema for this entry. - - If multiple locations are provided, then the first - location in the leaf-list MUST be the definitive - location to retreive the package definition."; - } - } - } - } -} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-package-types@2025-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-package-types@2025-07-07.yang new file mode 100644 index 000000000..469f2fa72 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-package-types@2025-07-07.yang @@ -0,0 +1,566 @@ +module ietf-yang-package-types { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-yang-package-types"; + prefix "pkg-types"; + + import ietf-yang-revisions { + prefix rev; + reference "XXXX: Updated YANG Module Revision Handling"; + } + + import ietf-yang-semver { + prefix ys; + reference "XXXX: YANG Semantic Versioning"; + } + + import ietf-yang-types { + prefix yang; + rev:recommended-min-date 2019-07-21; + reference "RFC 6991bis: Common YANG Data Types."; + } + import ietf-inet-types { + prefix inet; + rev:recommended-min-date 2013-07-15; + reference "RFC 6991: Common YANG Data Types."; + } + + organization + "IETF NETMOD (Network Modeling) Working Group"; + + contact + "WG Web: + WG List: + + Author: Rob Wilton + "; + + description + "This module provides type and grouping definitions for YANG + packages. + + Copyright (c) 2025 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject to + the license terms contained in, the Revised BSD License set + forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC XXXX; see + the RFC itself for full legal notices. + + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL + NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', + 'MAY', and 'OPTIONAL' in this document are to be interpreted as + described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, + they appear in all capitals, as shown here."; + + // RFC Ed.: update the date below with the date of RFC publication + // and remove this note. + // RFC Ed.: replace XXXX with actual RFC number and remove this + // note. + revision 2025-07-07 { + ys:version 0.6.0; + description + "Initial revision"; + reference + "RFC XXXX: YANG Packages"; + } + + /* + * Typedefs + */ + + typedef pkg-name { + type yang:yang-identifier; + description + "Package names are typed as YANG identifiers."; + } + + typedef pkg-version { + type ys:version; + description + "Packages are versioning used YANG Semver version labels."; + } + + typedef version-or-rev-date { + type union { + type rev:revision-date; + type ys:version; + } + description + "Identifies a module by YANG semantic version or revision date"; + } + + typedef scoped-feature { + type string { + pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*:[a-zA-Z_][a-zA-Z0-9\-_.]*'; + } + description + "Represents a feature name scoped to a particular module, + identified as the ':', where both + and are YANG identifier strings, + as defiend by Section 12 or RFC 6020."; + reference + "RFC XXXX, YANG Packages."; + } + + typedef mount-ypath { + type string; + + description + "A path that identifies a set of data nodes in the schema tree. + + This leaf is encoded as a JSON style encoded + instance-identifier (regardless of whether the format + used to encode the YANG instance data), as specified in + RFC 7951, section 6.11, except that keys are optional. + + For optional keys, the name and value of the key is + excluded from the key list. + + TODO - Check if this definition is sufficient."; + } + + /* + * Groupings + */ + grouping yang-pkg-identification-leafs { + description + "Parameters for identifying a specific version of a YANG + package"; + + leaf name { + type pkg-name; + mandatory true; + description + "The YANG package name."; + } + + leaf version { + type pkg-version; + mandatory true; + description + "Uniquely identies a particular version of a YANG package. + + Follows the definition for revision labels defined in + draft-verdt-nemod-yang-module-versioning, section XXX"; + } + } + + grouping yang-pkg-exclusions { + description + "Parameters for excluding modules and packages from a YANG + package definition"; + + container excludes { + description + "Contains parameters for excluding modules and packages + from a YANG package definition"; + + leaf-list module { + type pkg-name; + description + "Lists implemented modules, of any version, that may have + have been brought in by included packages, but are + explicitly excluded from this package definition. + + Excluding a module can affect the compliance and + correctness of any included packages that expect that + module to be implemented. + + It is an error to list a module in both this list and the + 'includes/module' list."; + } + + leaf-list import-only-module { + type pkg-name; + description + "Lists import-only modules, of any version, that may have + have been brought in by included packages, but are + explicitly excluded from this package definition. + + It is an error to list a module in both this list and the + 'includes/import-only-module' list."; + } + } + } + + grouping yang-pkg-location { + description + "Parameters for locating a YANG package instance"; + + leaf-list location { + type inet:uri; + description + "Contains a URL that represents where an instance data file + (RFC 9195) for this YANG package can be found. + + This leaf will only be present if there is a URL available + for retrieval of the schema for this entry."; + } + } + + grouping yang-pkg-instance { + description + "Specifies the data node for a full YANG package instance + represented either on a server or as a YANG instance data + document."; + uses yang-pkg-identification-leafs; + leaf timestamp { + type yang:date-and-time; + description + "An optional timestamp for when this package was created. + This does not need to be unique across all versions of a + package."; + } + + leaf organization { + type string; + description "Organization responsible for this package"; + } + + leaf contact { + type string; + description + "Contact information for the person or organization to whom + queries concerning this package should be sent."; + } + + leaf description { + type string; + description "Provides a description of the package"; + } + + leaf reference { + type string; + description "Allows for a reference for the package"; + } + + leaf complete { + type boolean; + default true; + description + "Indicates whether the schema defined by this package is + referentially complete. I.e. all module imports can be + resolved to a module explicitly defined in this package or + one of the included packages."; + } + + container includes { + description + "Lists package and modules that are included in the package + definition."; + + list package { + key "name"; + description + "An entry in this list represents a package that is included + as part of the package definition, or to change the version + of a descendent included package. + + An entry in this list overrides any other package version + 'included' by an included package, which can be used for + resolving conflicting package versions from included + packages. + + A package definition MUST resolve to including only a single + version of any YANG package."; + + uses yang-pkg-identification-leafs; + uses yang-pkg-location; + } + + list module { + key "name"; + description + "An entry in this list represents a module that MUST be + implemented by a server implementing this package, as per + RFC 7950 section 5.6.5. + + A entry in this list overrides any module version + 'implemented' by an included package."; + reference + "RFC 7950: The YANG 1.1 Data Modeling Language."; + + leaf name { + type yang:yang-identifier; + mandatory true; + description + "The YANG module name."; + } + + leaf version { + type version-or-rev-date; + mandatory true; + description + "Identifies the module version. If available, the YANG + Semantic Version SHOULD be used, otherwise the YANG module + revision date is used."; + } + + leaf-list location { + type inet:uri; + description + "Contains a URL that represents the YANG schema resource + for this module. + + This leaf will only be present if there is a URL available + for retrieval of the schema for this entry."; + } + + list submodule { + key "name"; + description + "Each entry represents one submodule within the + parent module."; + + leaf name { + type yang:yang-identifier; + description + "The YANG submodule name."; + } + + leaf version { + type version-or-rev-date; + mandatory true; + description + "The YANG submodule revision date or YANG Semantic version. + + If the parent module include statement for this submodule + includes a revision date then it MUST match the revision + date specified here or it MUST match the revision-date + associated with the version specified here."; + } + + leaf-list location { + type inet:uri; + description + "Contains a URL that represents the YANG schema resource + for this submodule. + + This leaf will only be present if there is a URL + available for retrieval of the schema for this entry."; + } + } + } + + list import-only-module { + key "name version"; + description + "An entry in this list indicates that the server imports + reusable definitions from the specified revision of the + module, but does not implement any protocol accessible + objects from this revision. + + Multiple entries for the same module name MAY exist. This + can occur if multiple modules import the same module, but + specify different revision-dates in the import statements."; + + leaf name { + type yang:yang-identifier; + mandatory true; + description + "The YANG module name."; + } + + leaf version { + type version-or-rev-date; + mandatory true; + description + "Identifies the module version. If available, the YANG + Semantic Version SHOULD be used, otherwise the YANG module + revision date is used."; + } + + leaf-list replaces-version { + type version-or-rev-date; + description + "Gives the version of an import-only-module defined in an + included package that is replaced by this + import-only-module version."; + } + + leaf-list location { + type inet:uri; + description + "Contains a URL that represents the YANG schema resource + for this module. + + This leaf will only be present if there is a URL available + for retrieval of the schema for this entry."; + } + + list submodule { + key "name"; + description + "Each entry represents one submodule within the + parent module."; + + leaf name { + type yang:yang-identifier; + description + "The YANG submodule name."; + } + + leaf version { + type version-or-rev-date; + mandatory true; + description + "The YANG submodule revision date or YANG Semantic version. + + If the parent module include statement for this submodule + includes a revision date then it MUST match the revision + date specified here or it MUST match the revision-date + associated with the version specified here."; + } + + leaf-list location { + type inet:uri; + description + "Contains a URL that represents the YANG schema resource + for this submodule. + + This leaf will only be present if there is a URL + available for retrieval of the schema for this entry."; + } + } + } + } + + uses yang-pkg-exclusions; + + container mandatory-features { + description + "Contains parameters for specifying the features that MUST + be supported by any server implementing the package."; + + leaf-list include { + type scoped-feature; + description + "Lists features from any modules included in the package + that MUST be supported by any server implementing the + package. + + Mandatory features specified by any directly included + packages MUST also be supported by server + implementations, unless excluded by an entry in the + 'mandatory-features/excludes' list, and do not + need to be repeated in this list. + All other features defined in modules included in the + package are OPTIONAL to implement. + + Features are identified using + :."; + } + + leaf-list exclude { + type scoped-feature; + description + "Lists features from the mandatory features exported by an + included package that are reclassified as being OPTIONAL + to support by any server implementing the package, + overriding the behavior specified by the included package. + + Features MUST NOT be specified both in this list and also + the 'mandatory-features/includes' list. + + Features are identified using + :."; + } + } + + list mounts { + key "mount-path"; + description + "An entry in this list represents a package that will be + found mounted in the schema at the specified mount path. + + For a given mount path, the set of mounted package + versions is the union of all packages mounted at the + given mount point. Any conflicting package versions + MUST be explicitly resolved via an entry in the + mounted/packages of the package definition. + + A mount path with specific keys MUST also includes any + mounted packages without specific keys."; + + leaf "mount-path" { + type mount-ypath; + description + "This path identifies a mount point in the schema. + + This leaf is encoded as a JSON style encoded + instance-identifier (regardless of whether the format + used to encode the YANG instance data), as specified in + RFC 7951, section 6.11, except that keys are optional. + + For optional keys, the name and value of the key is + excluded from the key list. + + Mount paths MUST only be used for schema mount points + defined in the package schema. + + For example, if an example module 'ex-module' defines a + mount point under list entry'/modules/module/' then a + mount path of + + - '/modules/module[name=foo]' would indicate the mounted + package schema for only the 'foo' entry in the module + list. Each entry in the list could have a different + mounted schema specified. + + - '/modules/module[]' would indicate that the same + mounted package schema is available for all list + entries in the module list."; + } + + list package { + key "name"; + description + "The packages that will be mounted at the specified mount + path. + + The set of mounteed packages is the union of all packages + mounted at the given mount by any packages in the + 'includes/package' list, except that each entry in this list + replaces any other versions of the same package at the + same mount point. In addition, other package versions may + be omitted from the mount point via the 'replaces-package' + leaf-list."; + uses yang-pkg-identification-leafs; + uses yang-pkg-location; + + leaf-list replaces-package { + type pkg-name; + description + "Lists other packages that have been explicitly mounted + at the same mount point by included package, that are + replaced by this mounted package. + + The replacing mounted package MUST explicitly include + or exclude the mounted package being replaced. + + Any packages or modules included by the replaced + package are also removed by this mounted package + unless they have also been explicitly mounted at the + same mount point, in which case the replacing package + MUST also explicitly include/exclude them. + + replaces-package is expected to be used if an + implementation does not fully implement a mounted + package and needs to apply deviations or remove + included packages or modules."; + } + } + + leaf-list parent-reference { + type mount-ypath; + description + "See Mount Point path and parent-reference in Schema Mount"; + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-packages@2025-03-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-packages@2025-03-03.yang index 88d867ddb..11903c476 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yang-packages@2025-03-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-packages@2025-03-03.yang @@ -57,6 +57,7 @@ module ietf-yang-packages { 'MAY', and 'OPTIONAL' in this document are to be interpreted as described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here."; + // RFC Ed.: update the date below with the date of RFC publication // and remove this note. // RFC Ed.: replace XXXX with actual RFC number and remove this diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yl-packages@2025-03-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-yl-packages@2025-03-03.yang index da787d3cd..bec2aff59 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yl-packages@2025-03-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yl-packages@2025-03-03.yang @@ -38,6 +38,7 @@ module ietf-yl-packages { description "This module provides defined augmentations to YANG library to allow a server to report YANG package information. + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. @@ -57,7 +58,6 @@ module ietf-yl-packages { described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here."; - // RFC Ed.: update the date below with the date of RFC publication // and remove this note. // RFC Ed.: replace XXXX with actual RFC number and remove this diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yp-lite@2024-11-11.yang b/experimental/ietf-extracted-YANG-modules/ietf-yp-lite@2024-11-11.yang index 0bc73c6ad..e084e3ccf 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yp-lite@2024-11-11.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yp-lite@2024-11-11.yang @@ -325,6 +325,14 @@ module ietf-yp-lite { "Specifies a data encoding, e.g., for a data subscription."; } + typedef subscription-name { + type string { + length "1..255"; + } + description + "A user friendly name for a subscription."; + } + typedef subscription-id { type uint32; description @@ -402,37 +410,6 @@ module ietf-yp-lite { "Indicates the status of a subscription"; } - typedef receiver-status { - type enumeration { - enum disconnected { - description - "The publish is not currently connected to the receiver. - - Nornally, this is because there are no active - subscriptions for this receiver."; - } - enum connecting { - description - "The publisher is actively trying to connect to the - receiver. This implies that there is at least one active - subscription for this receiver. - - A receiver in connecting state may indicate that the - transport or associated security session could not be - established, and the publisher is periodically trying to - establish the connection."; - } - enum connected { - description - "The publisher has successfully connected to the receiver - and at least one active subscription is using this - receiver."; - } - } - description - "Indicates the status of a receiver"; - } - /* * GROUPINGS */ @@ -461,7 +438,7 @@ module ietf-yp-lite { description "The content filter specification for this request."; - leaf-list paths { + leaf path { type ypath; description "A basic path filter that allows wildcard, regex, or @@ -476,7 +453,7 @@ module ietf-yp-lite { "RFC 6241: Network Configuration Protocol (NETCONF), Section 6"; } - leaf-list xpaths { + leaf xpath { if-feature "ypl:xpath"; type yang:xpath1.0; description @@ -591,6 +568,27 @@ module ietf-yp-lite { "Common settings that are shared between dynamic and configured subscriptions."; + leaf name { + type subscription-name; + mandatory true; + description + "The client provided name for the subscription. + + This MUST be unique across all subscriptions. Configuring + a subscription with a name already used by a dynamic + subscription will replace the dynamic subscription, forcing + it to be terminated."; + } + + leaf purpose { + type string { + length "1..1000"; + } + description + "Open text allowing a configuring entity to embed the + originator or other specifics of this subscription."; + } + container target { description "Identifies the source of information against which a @@ -722,12 +720,11 @@ module ietf-yp-lite { where the 'error-info' field MAY contain a 'delete-subscription-error-info' structure."; input { - leaf id { - type subscription-id; + leaf name { + type subscription-name; mandatory true; description - "Identifier of the dynamic subscription that is to be - deleted."; + "The name of the dynamic subscription to be deleted."; } } } @@ -747,12 +744,11 @@ module ietf-yp-lite { where the 'error-info' field MAY contain a 'delete-subscription-error-info' structure."; input { - leaf id { - type subscription-id; + leaf name { + type subscription-name; mandatory true; description - "Identifier of the dynamic subscription that is to be - deleted."; + "The name of the dynamic subscription to be deleted."; } } } @@ -833,6 +829,12 @@ module ietf-yp-lite { description "This notification indicates that a subscription has been terminated."; + leaf name { + type subscription-name; + mandatory true; + description + "The name of the subscription that has been terminated."; + } leaf id { type subscription-id; mandatory true; @@ -1008,7 +1010,7 @@ container datastore-telemetry { RPC primitives as well as subscriptions that have been established via configuration."; list subscription { - key "id"; + key "name"; description "The identity and specific parameters of a subscription. Subscriptions in this list can be created using a control @@ -1018,31 +1020,8 @@ container datastore-telemetry { are used to delete a subscription, a 'subscription-terminated' message is sent to any active or suspended receivers."; - leaf id { - type subscription-id; - description - "Identifier of a subscription; unique in a given - publisher."; - } - uses subscription-common; - - leaf purpose { - if-feature "configured"; - type string; - description - "Open text allowing a configuring entity to embed the - originator or other specifics of this subscription."; - } - leaf status { - type subscription-status; - config false; - description - "The presence of this leaf indicates that the - subscription originated from configuration, not through - a controlchannel or RPC. The value indicates the state - of the subscription as established by the publisher."; - } + uses subscription-common; list receivers { key "name"; @@ -1061,47 +1040,98 @@ container datastore-telemetry { "Identifies a unique receiver for a subscription."; } - leaf encoding { - type encoding; + leaf status { + type enumeration { + enum disconnected { + description + "This subscription does not have an active session + with the receiver, and it is not trying to connect. + + E.g., this state may be reported if the subscription + is not valid, or has not been started yet."; + } + enum connecting { + description + "The publisher is trying to establish a session with + the receiver for this subscription. + + For a session less transport, this state may be + used to indicate that there is no route to the + receiver. + + A receiver in connecting state may indicate that + the transport or associated security session + could not be established, and the publisher is + periodically trying to establish the connection."; + } + enum active { + description + "The publisher has successfully connected (if over a + session based transport) to the receiver for this + subscription, and the publisher is able to send + notifications to the receiver."; + } + } config false; description - "The type of encoding for notification messages."; + "Specifies the connection status of the receiver for + this subscription."; } + } - leaf status { - type receiver-status; + leaf id { + type subscription-id; + config false; + mandatory true; + description + "Publisher allocated identifier for a subscription; + Unique in a given publisher."; + } + + leaf status { + type subscription-status; + config false; + description + "The presence of this leaf indicates that the + subscription originated from configuration, not through + a controlchannel or RPC. The value indicates the state + of the subscription as established by the publisher."; + } + + container statistics { + config false; + description + "Statistics related to the number of messages generated + for this subscription."; + + leaf update-record-count { + type yang:zero-based-counter64; config false; description - "Specifies the connection status of the receiver. - I.e., whether a conenction has been sucessfully - established"; + "The number of update records generated for the + subscription, to be queued to one of more active + receivers. + + The count is initialized when the subscription + first becomes active. + + The count is incremented even if the update + record has been generated, but is not queued to + any receiver. + + TODO - Does this count include lifecycle or only + update messages?"; } - container statistics { + leaf excluded-event-records { + type yang:zero-based-counter64; config false; description - "Statistics related to the number of messages sent to - the receiver."; - - leaf sent-event-records { - type yang:zero-based-counter64; - config false; - description - "The number of event records sent to the receiver. - The count is initialized when a dynamic - subscription is established or when a configured - receiver transitions to the 'valid' state."; - } - leaf excluded-event-records { - type yang:zero-based-counter64; - config false; - description - "The number of event records explicitly removed via - either an event stream filter or an access control - filter so that they are not passed to a receiver. - This count is set to zero each time - 'sent-event-records' is initialized."; - } + "The number of event records explicitly removed via + either an event stream filter or an access control + filter so that they are not passed to a receiver. + This count is set to zero each time + 'sent-event-records' is initialized."; } } From af688a92499162b6cc9b0d868b188d91ba09f08b Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Thu, 26 Jun 2025 18:05:37 +0000 Subject: [PATCH 30/34] Cronjob - daily check of IETF modules. --- .../ietf-yang-library-augmentedby@2025-05-28.yang | 1 - 1 file changed, 1 deletion(-) 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..4473201d6 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 @@ -81,7 +81,6 @@ module ietf-yang-library-augmentedby { indirectly) gracefully."; } } - augment "/yanglib:yang-library/yanglib:module-set/yanglib:module" { description "Augments the augmented-by leaf-list from module info with the From 8fb843e126c3ff948851cafbe1edd2d11b351592 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Fri, 4 Jul 2025 18:05:35 +0000 Subject: [PATCH 31/34] Cronjob - daily check of IETF modules. --- .../ietf-yang-library-augmentedby@2025-05-28.yang | 1 + 1 file changed, 1 insertion(+) 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 4473201d6..2c7b68236 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 @@ -81,6 +81,7 @@ module ietf-yang-library-augmentedby { indirectly) gracefully."; } } + augment "/yanglib:yang-library/yanglib:module-set/yanglib:module" { description "Augments the augmented-by leaf-list from module info with the From 68a6faa03479d9750397e61d0f461da5d7bc6493 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Thu, 26 Jun 2025 18:05:37 +0000 Subject: [PATCH 32/34] Cronjob - daily check of IETF modules. --- .../ietf-yang-library-augmentedby@2025-05-28.yang | 1 - 1 file changed, 1 deletion(-) 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..4473201d6 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 @@ -81,7 +81,6 @@ module ietf-yang-library-augmentedby { indirectly) gracefully."; } } - augment "/yanglib:yang-library/yanglib:module-set/yanglib:module" { description "Augments the augmented-by leaf-list from module info with the From 97beb6c625f685d0ae5e6e48c888908a950b9742 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Fri, 4 Jul 2025 18:05:35 +0000 Subject: [PATCH 33/34] Cronjob - daily check of IETF modules. --- .../ietf-yang-library-augmentedby@2025-05-28.yang | 1 + 1 file changed, 1 insertion(+) 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 4473201d6..2c7b68236 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 @@ -81,6 +81,7 @@ module ietf-yang-library-augmentedby { indirectly) gracefully."; } } + augment "/yanglib:yang-library/yanglib:module-set/yanglib:module" { description "Augments the augmented-by leaf-list from module info with the From c7dd2b892345802f8424565cdba5c3b92bd965d4 Mon Sep 17 00:00:00 2001 From: Joe Clarke Date: Thu, 19 Mar 2026 00:41:08 -0400 Subject: [PATCH 34/34] feat: consolidated YANG module daily checks --- ...ng => iana-igp-algo-types@2025-09-05.yang} | 15 +- ... => iana-igp-metric-types@2025-09-05.yang} | 34 +- .../ietf-amm-semtype@2025-07-03.yang | 38 +- .../ietf-amm@2025-07-03.yang | 2 +- .../ietf-amt@2022-11-17.yang | 231 +- ...25-01-02.yang => ietf-arp@2025-07-19.yang} | 11 +- ... ietf-bfd-met-keyed-isaac@2025-09-04.yang} | 29 +- ...yang => ietf-bfd-opt-auth@2025-09-10.yang} | 33 +- .../ietf-bgp-aspa@2022-10-18.yang | 2 +- .../ietf-bgp-sec@2022-10-18.yang | 2 +- .../ietf-bmp-tcp-dependencies@2025-01-02.yang | 44 +- .../ietf-bmp@2025-01-02.yang | 712 +++-- .../ietf-cats@2024-06-20.yang | 136 +- .../ietf-cmis-control@2025-04-21.yang | 4 +- .../ietf-dtnma-agent-acl@2025-07-03.yang | 277 +- .../ietf-dtnma-agent@2025-07-03.yang | 187 +- ... => ietf-if-ethernet-like@2025-08-07.yang} | 12 +- ...ang => ietf-if-extensions@2025-08-07.yang} | 136 +- ...if-flexible-encapsulation@2025-09-03.yang} | 10 +- ...etf-if-vlan-encapsulation@2025-09-03.yang} | 6 +- ...ng => ietf-ioam-integrity@2025-08-25.yang} | 2 +- .../ietf-ipv6-nd@2025-08-27.yang | 294 ++ ...ng => ietf-isis-flex-algo@2025-09-11.yang} | 177 +- .../ietf-layer0-types@2025-06-06.yang | 2269 ------------- .../ietf-layer0-types@2025-08-06.yang | 2384 ++++++++++++++ .../ietf-lm-hierarchy@2025-07-06.yang | 445 +-- ...024-06-27.yang => ietf-nd@2025-08-26.yang} | 87 +- ...netconf-txid-nmda-compare@2025-08-01.yang} | 6 +- ...tf-netconf-txid-yang-push@2025-08-01.yang} | 6 +- ...yang => ietf-netconf-txid@2025-08-01.yang} | 4 +- .../ietf-network-base@2025-07-03.yang | 25 +- ...network-inventory-topology@2025-03-03.yang | 22 +- ...ietf-nwi-passive-inventory@2025-07-07.yang | 3 +- .../ietf-ol@2024-04-26.yang | 6 +- .../ietf-otn-slice-mpi@2025-07-03.yang | 41 +- .../ietf-petra@2025-05-12.yang | 30 +- .../ietf-platform-manifest@2025-02-21.yang | 10 +- .../ietf-rpki-rtr@2022-10-18.yang | 89 +- .../ietf-rpki-table@2022-10-18.yang | 112 +- .../ietf-schc-opt@2024-12-19.yang | 1 - .../ietf-srv6-nexthop@2025-07-05.yang | 20 - .../ietf-srv6-static@2025-07-07.yang | 6 +- .../ietf-srv6-types@2025-07-07.yang | 5 +- .../ietf-telemetry-message@2025-06-10.yang | 8 +- .../ietf-udp-notif-transport@2025-06-04.yang | 4 +- .../ietf-voucher-request@2023-01-10.yang | 369 +-- .../ietf-voucher@2023-01-10.yang | 444 +-- ...f-yang-library-augmentedby@2025-05-28.yang | 87 +- ... ietf-yang-library-semver@2025-07-13.yang} | 69 +- ...> ietf-yang-push-revision@2025-08-29.yang} | 80 +- ...ng-push-telemetry-message@2025-08-15.yang} | 27 +- ....yang => ietf-yang-semver@2025-08-12.yang} | 17 +- .../ietf-yp-current-period@2025-02-21.yang | 6 +- .../ietf-yp-lite-capabilities@2024-11-11.yang | 4 +- ...21.yang => iana-bfd-types@2025-11-20.yang} | 32 + ...=> iana-dns-class-rr-type@2025-12-29.yang} | 42 +- .../iana/iana-icmpv4-types@2025-12-22.yang | 314 ++ .../iana/iana-icmpv6-types@2025-12-22.yang | 339 ++ standard/iana/iana-if-type@2026-02-24.yang | 1856 +++++++++++ standard/iana/iana-if-type@2026-03-17.yang | 1896 +++++++++++ .../iana/iana-ipv6-ext-types@2025-12-22.yang | 138 + ...ang => iana-routing-types@2025-09-03.yang} | 10 +- standard/iana/yang-parameters.xml | 424 ++- standard/ietf/RFC/ietf-ac-common.yang | 1 + .../ietf/RFC/ietf-ac-common@2025-09-29.yang | 1676 ++++++++++ standard/ietf/RFC/ietf-ac-glue.yang | 1 + .../ietf/RFC/ietf-ac-glue@2025-09-29.yang | 256 ++ standard/ietf/RFC/ietf-ac-ntw.yang | 1 + standard/ietf/RFC/ietf-ac-ntw@2025-09-29.yang | 2014 ++++++++++++ standard/ietf/RFC/ietf-ac-svc.yang | 1 + standard/ietf/RFC/ietf-ac-svc@2025-09-29.yang | 1246 ++++++++ standard/ietf/RFC/ietf-acl-enh.yang | 1 + .../ietf/RFC/ietf-acl-enh@2025-12-22.yang | 1241 ++++++++ standard/ietf/RFC/ietf-bearer-svc.yang | 1 + .../ietf/RFC/ietf-bearer-svc@2025-09-29.yang | 471 +++ standard/ietf/RFC/ietf-foo@2016-03-20.yang | 2 +- standard/ietf/RFC/ietf-inet-types.yang | 2 +- .../ietf/RFC/ietf-inet-types@2025-12-22.yang | 666 ++++ standard/ietf/RFC/ietf-isis-sr-mpls.yang | 1 + .../RFC/ietf-isis-sr-mpls@2025-12-09.yang | 933 ++++++ standard/ietf/RFC/ietf-ospf-admin-tags.yang | 1 + .../RFC/ietf-ospf-admin-tags@2025-07-31.yang | 307 ++ standard/ietf/RFC/ietf-ospf-sr-mpls.yang | 1 + .../RFC/ietf-ospf-sr-mpls@2025-12-09.yang | 1321 ++++++++ standard/ietf/RFC/ietf-pcep-stats.yang | 1 + .../ietf/RFC/ietf-pcep-stats@2025-09-12.yang | 698 ++++ standard/ietf/RFC/ietf-pcep.yang | 1 + standard/ietf/RFC/ietf-pcep@2025-09-12.yang | 2834 +++++++++++++++++ standard/ietf/RFC/ietf-schedule.yang | 1 + .../ietf/RFC/ietf-schedule@2026-03-10.yang | 868 +++++ standard/ietf/RFC/ietf-template.yang | 2 +- .../ietf/RFC/ietf-template@2023-07-26.yang | 88 + standard/ietf/RFC/ietf-yang-types.yang | 2 +- .../ietf/RFC/ietf-yang-types@2025-12-22.yang | 764 +++++ 94 files changed, 25189 insertions(+), 4345 deletions(-) rename experimental/ietf-extracted-YANG-modules/{iana-igp-algo-types@2025-06-13.yang => iana-igp-algo-types@2025-09-05.yang} (84%) rename experimental/ietf-extracted-YANG-modules/{iana-igp-metric-types@2025-06-13.yang => iana-igp-metric-types@2025-09-05.yang} (70%) rename experimental/ietf-extracted-YANG-modules/{ietf-arp@2025-01-02.yang => ietf-arp@2025-07-19.yang} (96%) rename experimental/ietf-extracted-YANG-modules/{ietf-bfd-met-keyed-isaac@2025-07-06.yang => ietf-bfd-met-keyed-isaac@2025-09-04.yang} (71%) rename experimental/ietf-extracted-YANG-modules/{ietf-bfd-opt-auth@2025-06-04.yang => ietf-bfd-opt-auth@2025-09-10.yang} (83%) rename experimental/ietf-extracted-YANG-modules/{ietf-if-ethernet-like@2025-01-27.yang => ietf-if-ethernet-like@2025-08-07.yang} (98%) rename experimental/ietf-extracted-YANG-modules/{ietf-if-extensions@2025-01-27.yang => ietf-if-extensions@2025-08-07.yang} (81%) rename experimental/ietf-extracted-YANG-modules/{ietf-if-flexible-encapsulation@2025-04-09.yang => ietf-if-flexible-encapsulation@2025-09-03.yang} (98%) rename experimental/ietf-extracted-YANG-modules/{ietf-if-vlan-encapsulation@2025-04-09.yang => ietf-if-vlan-encapsulation@2025-09-03.yang} (97%) rename experimental/ietf-extracted-YANG-modules/{ietf-ioam-integrity@2024-08-31.yang => ietf-ioam-integrity@2025-08-25.yang} (99%) create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-ipv6-nd@2025-08-27.yang rename experimental/ietf-extracted-YANG-modules/{ietf-isis-flex-algo@2025-07-06.yang => ietf-isis-flex-algo@2025-09-11.yang} (74%) delete mode 100644 experimental/ietf-extracted-YANG-modules/ietf-layer0-types@2025-06-06.yang create mode 100644 experimental/ietf-extracted-YANG-modules/ietf-layer0-types@2025-08-06.yang rename experimental/ietf-extracted-YANG-modules/{ietf-nd@2024-06-27.yang => ietf-nd@2025-08-26.yang} (74%) rename experimental/ietf-extracted-YANG-modules/{ietf-netconf-txid-nmda-compare@2023-05-01.yang => ietf-netconf-txid-nmda-compare@2025-08-01.yang} (94%) rename experimental/ietf-extracted-YANG-modules/{ietf-netconf-txid-yang-push@2022-04-01.yang => ietf-netconf-txid-yang-push@2025-08-01.yang} (95%) rename experimental/ietf-extracted-YANG-modules/{ietf-netconf-txid@2023-03-01.yang => ietf-netconf-txid@2025-08-01.yang} (98%) rename experimental/ietf-extracted-YANG-modules/{ietf-yang-library-semver@2025-01-21.yang => ietf-yang-library-semver@2025-07-13.yang} (67%) rename experimental/ietf-extracted-YANG-modules/{ietf-yang-push-revision@2025-04-05.yang => ietf-yang-push-revision@2025-08-29.yang} (80%) rename experimental/ietf-extracted-YANG-modules/{ietf-yang-push-telemetry-message@2025-06-10.yang => ietf-yang-push-telemetry-message@2025-08-15.yang} (93%) rename experimental/ietf-extracted-YANG-modules/{ietf-yang-semver@2025-01-21.yang => ietf-yang-semver@2025-08-12.yang} (91%) rename standard/iana/{iana-bfd-types@2021-10-21.yang => iana-bfd-types@2025-11-20.yang} (80%) rename standard/iana/{iana-dns-class-rr-type@2025-05-20.yang => iana-dns-class-rr-type@2025-12-29.yang} (95%) create mode 100644 standard/iana/iana-icmpv4-types@2025-12-22.yang create mode 100644 standard/iana/iana-icmpv6-types@2025-12-22.yang create mode 100644 standard/iana/iana-if-type@2026-02-24.yang create mode 100644 standard/iana/iana-if-type@2026-03-17.yang create mode 100644 standard/iana/iana-ipv6-ext-types@2025-12-22.yang rename standard/iana/{iana-routing-types@2025-02-18.yang => iana-routing-types@2025-09-03.yang} (98%) create mode 120000 standard/ietf/RFC/ietf-ac-common.yang create mode 100644 standard/ietf/RFC/ietf-ac-common@2025-09-29.yang create mode 120000 standard/ietf/RFC/ietf-ac-glue.yang create mode 100644 standard/ietf/RFC/ietf-ac-glue@2025-09-29.yang create mode 120000 standard/ietf/RFC/ietf-ac-ntw.yang create mode 100644 standard/ietf/RFC/ietf-ac-ntw@2025-09-29.yang create mode 120000 standard/ietf/RFC/ietf-ac-svc.yang create mode 100644 standard/ietf/RFC/ietf-ac-svc@2025-09-29.yang create mode 120000 standard/ietf/RFC/ietf-acl-enh.yang create mode 100644 standard/ietf/RFC/ietf-acl-enh@2025-12-22.yang create mode 120000 standard/ietf/RFC/ietf-bearer-svc.yang create mode 100644 standard/ietf/RFC/ietf-bearer-svc@2025-09-29.yang create mode 100644 standard/ietf/RFC/ietf-inet-types@2025-12-22.yang create mode 120000 standard/ietf/RFC/ietf-isis-sr-mpls.yang create mode 100644 standard/ietf/RFC/ietf-isis-sr-mpls@2025-12-09.yang create mode 120000 standard/ietf/RFC/ietf-ospf-admin-tags.yang create mode 100644 standard/ietf/RFC/ietf-ospf-admin-tags@2025-07-31.yang create mode 120000 standard/ietf/RFC/ietf-ospf-sr-mpls.yang create mode 100644 standard/ietf/RFC/ietf-ospf-sr-mpls@2025-12-09.yang create mode 120000 standard/ietf/RFC/ietf-pcep-stats.yang create mode 100644 standard/ietf/RFC/ietf-pcep-stats@2025-09-12.yang create mode 120000 standard/ietf/RFC/ietf-pcep.yang create mode 100644 standard/ietf/RFC/ietf-pcep@2025-09-12.yang create mode 120000 standard/ietf/RFC/ietf-schedule.yang create mode 100644 standard/ietf/RFC/ietf-schedule@2026-03-10.yang create mode 100644 standard/ietf/RFC/ietf-template@2023-07-26.yang create mode 100644 standard/ietf/RFC/ietf-yang-types@2025-12-22.yang 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)"; + } +}