diff --git a/experimental/ietf-extracted-YANG-modules/ietf-altmark@2024-06-19.yang b/experimental/ietf-extracted-YANG-modules/ietf-altmark@2025-01-08.yang
similarity index 98%
rename from experimental/ietf-extracted-YANG-modules/ietf-altmark@2024-06-19.yang
rename to experimental/ietf-extracted-YANG-modules/ietf-altmark@2025-01-08.yang
index 0babc0f2e..4fde0ca6a 100644
--- a/experimental/ietf-extracted-YANG-modules/ietf-altmark@2024-06-19.yang
+++ b/experimental/ietf-extracted-YANG-modules/ietf-altmark@2025-01-08.yang
@@ -34,10 +34,7 @@ module ietf-altmark {
Author: wangminxue@chinamobile.com
Author: giuseppe.fioccola@huawei.com
Author: zhoutianran@huawei.com
- Author: xiao.min2@zte.com.cn
- Author: guo.jun2@zte.com.cn
- Author: massimo.nilo@telecomitalia.it
- Author: hanliuyan@chinamobile.com";
+ Author: xiao.min2@zte.com.cn";
description
"This YANG module specifies a vendor-independent data
@@ -63,7 +60,7 @@ module ietf-altmark {
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
for full legal notices.";
- revision 2024-06-19 {
+ revision 2025-01-08 {
description "First revision.";
reference "RFC XXXX: A YANG Data Model for Alternate-Marking";
}
@@ -85,6 +82,7 @@ module ietf-altmark {
/*
* IDENTITIES
*/
+
identity filter {
description
"Base identity to represent a filter. A filter is used to
@@ -181,6 +179,7 @@ module ietf-altmark {
description
"It indicates the AltMark Period.";
}
+
identity flow-mon-id {
description
"It indicates the FlowMonID.";
@@ -373,7 +372,6 @@ module ietf-altmark {
description
"Type of timestamp, such as Truncated PTP or NTP.";
}
-
list available-interface {
key "if-name";
description
diff --git a/experimental/ietf-extracted-YANG-modules/ietf-arp@2024-06-30.yang b/experimental/ietf-extracted-YANG-modules/ietf-arp@2025-01-02.yang
similarity index 94%
rename from experimental/ietf-extracted-YANG-modules/ietf-arp@2024-06-30.yang
rename to experimental/ietf-extracted-YANG-modules/ietf-arp@2025-01-02.yang
index 03b3de53d..d1ae6042b 100644
--- a/experimental/ietf-extracted-YANG-modules/ietf-arp@2024-06-30.yang
+++ b/experimental/ietf-extracted-YANG-modules/ietf-arp@2025-01-02.yang
@@ -25,19 +25,26 @@ module ietf-arp {
"WG Web:
WG List:
- Author: Feng Zheng
- Editor: Bo Wu
- Editor: Robert Wilton
- Editor: Fan Zhang
- Author: Yongqing Zhu
- Author: Xiaojian Ding
+ Editor: Bo Wu
+
+ Editor: Robert Wilton
+
+ Editor: Fan Zhang
+
+ Author: Yongqing Zhu
+
+ Author: Xiaojian Ding
+ ";
+
description
"This YANG module defines Address Resolution Protocol (ARP)
management, which includes static ARP configuration,
dynamic ARP learning, ARP entry query, and packet statistics
collection.
- 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 +57,7 @@ module ietf-arp {
This version of this YANG module is part of RFC XXXX; see the
RFC itself for full legal notices.";
- revision 2024-06-30 {
+ revision 2025-01-02 {
description
"Init revision";
reference
diff --git a/experimental/ietf-extracted-YANG-modules/ietf-ospf-sr-mpls@2024-06-19.yang b/experimental/ietf-extracted-YANG-modules/ietf-ospf-sr-mpls@2025-01-03.yang
similarity index 99%
rename from experimental/ietf-extracted-YANG-modules/ietf-ospf-sr-mpls@2024-06-19.yang
rename to experimental/ietf-extracted-YANG-modules/ietf-ospf-sr-mpls@2025-01-03.yang
index bbd5bc2e3..e5f2a8bc5 100644
--- a/experimental/ietf-extracted-YANG-modules/ietf-ospf-sr-mpls@2024-06-19.yang
+++ b/experimental/ietf-extracted-YANG-modules/ietf-ospf-sr-mpls@2025-01-03.yang
@@ -72,7 +72,7 @@ module ietf-ospf-sr-mpls {
This YANG model conforms to the Network Management
Datastore Architecture (NMDA) as described in RFC 8342.
- Copyright (c) 2023 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
@@ -97,7 +97,7 @@ module ietf-ospf-sr-mpls {
reference
"RFC XXXX";
- revision 2024-06-19 {
+ revision 2025-01-03 {
description
"Initial revision.";
reference
@@ -729,8 +729,8 @@ module ietf-ospf-sr-mpls {
a lower priority being more preferred.";
}
description
- "Enable SRLG (Shared Resource Link Group)
- disjoint as a TI-LFA path selection tie-breaker.
+ "Enable SRLG (Sharsed Resource Link Group)
+ disjoint as a TI-LFA path selection tie-breaker.
A path providing node a disjoint path for SRLG
links from the primary path will be selected over
one that doesn't provide an SRLG disjoint path.";
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@2024-07-07.yang
index 14c84c6f5..963147938 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@2024-07-07.yang
@@ -78,7 +78,7 @@ module ietf-otn-slice-mpi {
description
"Latest revision of MPI YANG model for OTN slicing.";
reference
- "draft-ietf-ccamp-yang-otn-slicing-07: Framework and Data
+ "draft-ietf-ccamp-yang-otn-slicing-08: 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@2024-07-07.yang
index 900fecedc..e1bc4b43d 100644
--- a/experimental/ietf-extracted-YANG-modules/ietf-otn-slice@2024-07-07.yang
+++ b/experimental/ietf-extracted-YANG-modules/ietf-otn-slice@2024-07-07.yang
@@ -79,7 +79,7 @@ module ietf-otn-slice {
description
"Latest revision of NBI YANG model for OTN slicing.";
reference
- "draft-ietf-ccamp-yang-otn-slicing-07: Framework and Data
+ "draft-ietf-ccamp-yang-otn-slicing-08: Framework and Data
Model for OTN Network Slicing";
}
diff --git a/experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2024-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2024-07-07.yang
index e67bcd062..dc4cf429b 100644
--- a/experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2024-07-07.yang
+++ b/experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2024-07-07.yang
@@ -111,7 +111,7 @@ module ietf-resource-pm {
}
config false;
description
- "the type of resource, such as NE, board or port"ï¼
+ "the type of resource, such as NE, board or port";
}
leaf holding-time {
diff --git a/experimental/ietf-extracted-YANG-modules/ietf-subscribed-notifications@2019-05-06.yang b/experimental/ietf-extracted-YANG-modules/ietf-subscribed-notifications@2019-05-06.yang
deleted file mode 100644
index 4960ded75..000000000
--- a/experimental/ietf-extracted-YANG-modules/ietf-subscribed-notifications@2019-05-06.yang
+++ /dev/null
@@ -1,1299 +0,0 @@
-module ietf-subscribed-notifications {
- yang-version 1.1;
- namespace
- "urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications";
-
- prefix sn;
-
- import ietf-inet-types {
- prefix inet;
- reference
- "RFC 6991: Common YANG Data Types";
- }
- import ietf-interfaces {
- prefix if;
- reference
- "RFC 8343: A YANG Data Model for Interface Management";
- }
- import ietf-netconf-acm {
- prefix nacm;
- reference
- "RFC 8341: Network Configuration Access Control Model";
- }
- import ietf-network-instance {
- prefix ni;
- reference
- "RFC 8529: YANG Model for Network Instances";
- }
- import ietf-restconf {
- prefix rc;
- reference
- "RFC 8040: RESTCONF Protocol";
- }
- 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: Alexander Clemm
-
-
- Author: Eric Voit
-
-
- Author: Alberto Gonzalez Prieto
-
-
- Author: Einar Nilsen-Nygaard
-
-
- Author: Ambika Prasad Tripathy
- ";
-
- description
- "Contains a YANG specification for subscribing to event records
- and receiving matching content within notification messages.
-
- Copyright (c) 2018 IETF Trust and the persons identified as authors
- of the code. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, is permitted pursuant to, and subject to the license
- terms contained in, the Simplified BSD License set forth in Section
- 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents
- (https://trustee.ietf.org/license-info).
-
- This version of this YANG module is part of RFC XXXX; see the RFC
- itself for full legal notices.";
-
- revision 2019-05-06 {
- description
- "Initial version";
- reference
- "RFC XXXX:Subscription to YANG Event Notifications";
- }
-
- /*
- * FEATURES
- */
-
- feature configured {
- description
- "This feature indicates that configuration of subscriptions is
- supported.";
- }
-
- feature dscp {
- description
- "This feature indicates that a publisher supports the ability to
- set the DiffServ Code Point (DSCP) value in outgoing packets.";
- }
-
- feature encode-json {
- description
- "This feature indicates that JSON encoding of notification
- messages is supported.";
- }
-
- feature encode-xml {
- description
- "This feature indicates that XML encoding of notification
- messages is supported.";
- }
-
- feature interface-designation {
- description
- "This feature indicates a publisher supports sourcing all
- receiver interactions for a configured subscription from a single
- designated egress interface.";
- }
-
- feature qos {
- description
- "This feature indicates a publisher supports absolute
- dependencies of one subscription's traffic over another, as well
- as weighted bandwidth sharing between subscriptions. Both of
- these are Quality of Service (QoS) features which allow
- differentiated treatment of notification messages between a
- publisher and a specific receiver.";
- }
-
- feature replay {
- description
- "This feature indicates that historical event record replay is
- supported. With replay, it is possible for past event records to
- be streamed in chronological order.";
- }
-
- feature subtree {
- description
- "This feature indicates support for YANG subtree filtering.";
- reference "RFC 6241, Section 6.";
- }
-
- feature supports-vrf {
- description
- "This feature indicates a publisher supports VRF configuration
- for configured subscriptions. VRF support for dynamic
- subscriptions does not require this feature.";
- reference "RFC XXXY, Section 6.";
- }
-
- feature xpath {
- description
- "This feature indicates support for XPath filtering.";
- reference "http://www.w3.org/TR/1999/REC-xpath-19991116";
- }
-
- /*
- * EXTENSIONS
- */
-
- extension subscription-state-notification {
- description
- "This statement applies only to notifications. It indicates that
- the notification is a subscription state change notification.
- Therefore it does not participate in a regular event stream and
- does not need to be specifically subscribed to in order to be
- received. This statement can only occur as a substatement to the
- YANG 'notification' statement. This statement is not for use
- outside of this YANG module.";
- }
-
- /*
- * IDENTITIES
- */
-
- /* Identities for RPC and Notification errors */
-
- identity delete-subscription-error {
- description
- "Problem found while attempting to fulfill either a
- 'delete-subscription' RPC request or a 'kill-subscription'
- RPC request.";
- }
-
- identity establish-subscription-error {
- description
- "Problem found while attempting to fulfill an
- 'establish-subscription' RPC request.";
- }
-
- identity modify-subscription-error {
- description
- "Problem found while attempting to fulfill a
- 'modify-subscription' RPC request.";
- }
-
- identity subscription-suspended-reason {
- description
- "Problem condition communicated to a receiver as part of a
- 'subscription-suspended' notification.";
- }
-
- identity subscription-terminated-reason {
- description
- "Problem condition communicated to a receiver as part of a
- 'subscription-terminated' notification.";
- }
-
- identity dscp-unavailable {
- base establish-subscription-error;
- if-feature "dscp";
- description
- "The publisher is unable mark notification messages with a
- prioritization information in a way which will be respected
- during network transit.";
- }
-
- identity encoding-unsupported {
- base establish-subscription-error;
- description
- "Unable to encode notification messages in the desired format.";
- }
-
- identity filter-unavailable {
- base subscription-terminated-reason;
- description
- "Referenced filter does not exist. This means a receiver is
- referencing a filter which doesn't exist, or to which they do not
- have access permissions.";
- }
-
- identity filter-unsupported {
- base establish-subscription-error;
- base modify-subscription-error;
- description
- "Cannot parse syntax within the filter. This failure can be from
- a syntax error, or a syntax too complex to be processed by the
- publisher.";
- }
-
- identity insufficient-resources {
- base establish-subscription-error;
- base modify-subscription-error;
- base subscription-suspended-reason;
- description
- "The publisher has insufficient resources to support the
- requested subscription. An example might be that allocated CPU
- is too limited to generate the desired set of notification
- messages.";
- }
-
- identity no-such-subscription {
- base modify-subscription-error;
- base delete-subscription-error;
- base subscription-terminated-reason;
- description
- "Referenced subscription doesn't exist. This may be as a result of
- a non-existent subscription id, an id which belongs to another
- subscriber, or an id for configured subscription.";
- }
-
- identity replay-unsupported {
- base establish-subscription-error;
- if-feature "replay";
- description
- "Replay cannot be performed for this subscription. This means the
- publisher will not provide the requested historic information
- from the event stream via replay to this receiver.";
- }
-
- identity stream-unavailable {
- base subscription-terminated-reason;
- description
- "Not a subscribable event stream. This means the referenced event
- stream is not available for subscription by the receiver.";
- }
-
- identity suspension-timeout {
- base subscription-terminated-reason;
- description
- "Termination of previously suspended subscription. The publisher
- has eliminated the subscription as it exceeded a time limit for
- suspension.";
- }
-
- identity unsupportable-volume {
- base subscription-suspended-reason;
- description
- "The publisher does not have the network bandwidth needed to get
- the volume of generated information intended for a receiver.";
- }
-
- /* Identities for encodings */
-
- identity configurable-encoding {
- description
- "If a transport identity derives from this identity, it means
- that it supports configurable encodings. An example of a
- configurable encoding might be a new identity such as
- 'encode-cbor'. Such an identity could use
- 'configurable-encoding' as its base. This would allow a
- dynamic subscription encoded in JSON [RFC-8259] to request
- notification messages be encoded via CBOR [RFC-7049]. Further
- details for any specific configurable encoding would be
- explored in a transport document based on this specification.";
- }
-
- identity encoding {
- description
- "Base identity to represent data encodings";
- }
-
- identity encode-xml {
- base encoding;
- if-feature "encode-xml";
- description
- "Encode data using XML as described in RFC 7950";
- reference
- "RFC 7950 - The YANG 1.1 Data Modeling Language";
- }
-
- identity encode-json {
- base encoding;
- if-feature "encode-json";
- description
- "Encode data using JSON as described in RFC 7951";
- reference
- "RFC 7951 - JSON Encoding of Data Modeled with YANG";
- }
-
- /* Identities for transports */
- identity transport {
- description
- "An identity that represents the underlying mechanism for
- passing notification messages.";
- }
-
- /*
- * TYPEDEFs
- */
-
- typedef encoding {
- type identityref {
- base encoding;
- }
- description
- "Specifies a data encoding, e.g. for a data subscription.";
- }
-
- typedef stream-filter-ref {
- type leafref {
- path "/sn:filters/sn:stream-filter/sn:name";
- }
- description
- "This type is used to reference an event stream filter.";
- }
-
- typedef stream-ref {
- type leafref {
- path "/sn:streams/sn:stream/sn:name";
- }
- description
- "This type is used to reference a system-provided event stream.";
- }
-
- typedef subscription-id {
- type uint32;
- description
- "A type for subscription identifiers.";
- }
-
- typedef transport {
- type identityref {
- base transport;
- }
- description
- "Specifies transport used to send notification messages to a
- receiver.";
- }
-
- /*
- * GROUPINGS
- */
-
- grouping stream-filter-elements {
- description
- "This grouping defines the base for filters applied to event
- streams.";
- choice filter-spec {
- description
- "The content filter specification for this request.";
- anydata stream-subtree-filter {
- if-feature "subtree";
- description
- "Event stream evaluation criteria encoded in the syntax of a
- subtree filter as defined in RFC 6241, Section 6.
-
- The subtree filter is applied to the representation of
- individual, delineated event records as contained within the
- event stream.
-
- If the subtree filter returns a non-empty node set, the
- filter matches the event record, and the event record is
- included in the notification message sent to the receivers.";
- reference "RFC 6241, Section 6.";
- }
- leaf stream-xpath-filter {
- if-feature "xpath";
- type yang:xpath1.0;
- description
- "Event stream evaluation criteria encoded in the syntax of
- an XPath 1.0 expression.
-
- The XPath expression is evaluated on the representation of
- individual, delineated event records as contained within
- the event stream.
-
- The result of the XPath expression is converted to a
- boolean value using the standard XPath 1.0 rules. If the
- boolean value is 'true', the filter matches the event
- record, and the event record is included in the notification
- message sent to the receivers.
-
- The expression is evaluated in the following XPath context:
-
- o The set of namespace declarations is the set of prefix
- and namespace pairs for all YANG modules implemented
- by the server, where the prefix is the YANG module
- name and the namespace is as defined by the
- 'namespace' statement in the YANG module.
-
- If the leaf is encoded in XML, all namespace
- declarations in scope on the 'stream-xpath-filter'
- leaf element are added to the set of namespace
- declarations. If a prefix found in the XML is
- already present in the set of namespace declarations,
- the namespace in the XML is used.
-
- o The set of variable bindings is empty.
-
- o The function library is the core function library, and
- the XPath functions defined in section 10 in RFC 7950.
-
- o The context node is the root node.";
- reference
- "http://www.w3.org/TR/1999/REC-xpath-19991116
- RFC 7950, Section 10.";
-
- }
- }
- }
-
- grouping update-qos {
- description
- "This grouping describes Quality of Service information
- concerning a subscription. This information is passed to lower
- layers for transport prioritization and treatment";
- leaf dscp {
- if-feature "dscp";
- type inet:dscp;
- default "0";
- description
- "The desired network transport priority level. This is the
- priority set on notification messages encapsulating the
- results of the subscription. This transport priority is
- shared for all receivers of a given subscription.";
- }
- leaf weighting {
- if-feature "qos";
- type uint8 {
- range "0 .. 255";
- }
- description
- "Relative weighting for a subscription. Larger weights get
- more resources. Allows an underlying transport layer perform
- informed load balance allocations between various
- subscriptions";
- reference
- "RFC-7540, section 5.3.2";
- }
- leaf dependency {
- if-feature "qos";
- type subscription-id;
- description
- "Provides the 'subscription-id' of a parent subscription which
- has absolute precedence should that parent have push updates
- ready to egress the publisher. In other words, there should be
- no streaming of objects from the current subscription if
- the parent has something ready to push.
-
- If a dependency is asserted via configuration or via RPC, but
- the referenced 'subscription-id' does not exist, the
- dependency is silently discarded. If a referenced
- subscription is deleted this dependency is removed.";
- reference
- "RFC-7540, section 5.3.1";
- }
- }
-
- grouping subscription-policy-modifiable {
- description
- "This grouping describes all objects which may be changed
- in a subscription.";
- choice target {
- mandatory true;
- description
- "Identifies the source of information against which a
- subscription is being applied, as well as specifics on the
- subset of information desired from that source.";
- case stream {
- choice stream-filter {
- description
- "An event stream filter can be applied to a subscription.
- That filter will come either referenced from a global list,
- or be provided within the subscription itself.";
- case by-reference {
- description
- "Apply a filter that has been configured separately.";
- leaf stream-filter-name {
- type stream-filter-ref;
- mandatory true;
- description
- "References an existing event stream filter which is to
- be applied to an event stream for the subscription.";
- }
- }
- case within-subscription {
- description
- "Local definition allows a filter to have the same
- lifecycle as the subscription.";
- uses stream-filter-elements;
- }
- }
- }
- }
- leaf stop-time {
- type yang:date-and-time;
- description
- "Identifies a time after which notification messages for a
- subscription should not be sent. If 'stop-time' is not
- present, the notification messages will continue until the
- subscription is terminated. If 'replay-start-time' exists,
- 'stop-time' must be for a subsequent time. If
- 'replay-start-time' doesn't exist, 'stop-time' when established
- must be for a future time.";
- }
- }
-
- grouping subscription-policy-dynamic {
- description
- "This grouping describes the only information concerning a
- subscription which can be passed over the RPCs defined in this
- model.";
- uses subscription-policy-modifiable {
- augment target/stream {
- description
- "Adds additional objects which can be modified by RPC.";
- leaf stream {
- type stream-ref {
- require-instance false;
- }
- mandatory true;
- description
- "Indicates the event stream to be considered for
- this subscription.";
- }
- leaf replay-start-time {
- if-feature "replay";
- type yang:date-and-time;
- config false;
- description
- "Used to trigger the replay feature for a dynamic
- subscription, with event records being selected needing to
- be at or after the start at the time specified. If
- 'replay-start-time' is not present, this is not a replay
- subscription and event record push should start
- immediately. It is never valid to specify start times that
- are later than or equal to the current time.";
- }
- }
- }
- uses update-qos;
- }
-
- grouping subscription-policy {
- description
- "This grouping describes the full set of policy information
- concerning both dynamic and configured subscriptions, with the
- exclusion of both receivers and networking information specific
- to the publisher such as what interface should be used to
- transmit notification messages.";
- uses subscription-policy-dynamic;
- leaf transport {
- if-feature "configured";
- type transport;
- description
- "For a configured subscription, this leaf specifies the
- transport used to deliver messages destined to all receivers
- of that subscription.";
- }
- leaf encoding {
- when 'not(../transport) or derived-from(../transport,
- "sn:configurable-encoding")';
- type encoding;
- description
- "The type of encoding for notification messages. For a
- dynamic subscription, if not included as part of an establish-
- subscription RPC, the encoding will be populated with the
- encoding used by that RPC. For a configured subscription, if
- not explicitly configured the encoding with be the default
- encoding for an underlying transport.";
- }
- leaf purpose {
- if-feature "configured";
- type string;
- description
- "Open text allowing a configuring entity to embed the
- originator or other specifics of this subscription.";
- }
- }
-
- /*
- * RPCs
- */
-
- rpc establish-subscription {
- description
- "This RPC allows a subscriber to create (and possibly negotiate)
- a subscription on its own behalf. If successful, the
- subscription remains in effect for the duration of the
- subscriber's association with the publisher, or until the
- subscription is terminated. In case an error occurs, or the
- publisher cannot meet the terms of a subscription, an RPC error
- is returned, the subscription is not created. In that case, the
- RPC reply's 'error-info' MAY include suggested parameter
- settings that would have a higher likelihood of succeeding in a
- subsequent 'establish-subscription' request.";
- input {
- uses subscription-policy-dynamic;
- leaf encoding {
- type encoding;
- description
- "The type of encoding for the subscribed data. If not
- included as part of the RPC, the encoding MUST be set by the
- publisher to be the encoding used by this RPC.";
- }
- }
- output {
- leaf id {
- type subscription-id;
- mandatory true;
- description
- "Identifier used for this subscription.";
- }
- leaf replay-start-time-revision {
- if-feature "replay";
- type yang:date-and-time;
- description
- "If a replay has been requested, this represents the
- earliest time covered by the event buffer for the requested
- event stream. The value of this object is the
- 'replay-log-aged-time' if it exists. Otherwise it is the
- 'replay-log-creation-time'. All buffered event records
- after this time will be replayed to a receiver. This
- object will only be sent if the starting time has been
- revised to be later than the time requested by the
- subscriber.";
- }
- }
- }
-
- rc:yang-data establish-subscription-stream-error-info {
- container establish-subscription-stream-error-info {
- description
- "If any 'establish-subscription' RPC parameters are
- unsupportable against the event stream, a subscription is not
- created and the RPC error response MUST indicate the reason
- why the subscription failed to be created. This yang-data MAY
- be inserted as structured data within a subscription's RPC
- error response to indicate the failure reason. This yang-data
- MUST be inserted if hints are to be provided back to the
- subscriber.";
- leaf reason {
- type identityref {
- base establish-subscription-error;
- }
- description
- "Indicates the reason why the subscription has failed to
- be created to a targeted event stream.";
- }
- leaf filter-failure-hint {
- type string;
- description
- "Information describing where and/or why a provided filter
- was unsupportable for a subscription. The syntax and
- semantics of this hint are implementation-specific.";
- }
- }
- }
-
- rpc modify-subscription {
- description
- "This RPC allows a subscriber to modify a dynamic subscription's
- parameters. If successful, the changed subscription
- parameters remain in effect for the duration of the
- subscription, until the subscription is again modified, or until
- the subscription is terminated. In case of an error or an
- inability to meet the modified parameters, the subscription is
- not modified and the original subscription parameters remain in
- effect. In that case, the RPC error MAY include 'error-info'
- suggested parameter hints that would have a high likelihood of
- succeeding in a subsequent 'modify-subscription' request. A
- successful 'modify-subscription' will return a suspended
- subscription to an 'active' state.";
- input {
- leaf id {
- type subscription-id;
- mandatory true;
- description
- "Identifier to use for this subscription.";
- }
- uses subscription-policy-modifiable;
- }
- }
-
- rc:yang-data modify-subscription-stream-error-info {
- container modify-subscription-stream-error-info {
- description
- "This yang-data MAY be provided as part of a subscription's RPC
- error response when there is a failure of a
- 'modify-subscription' RPC which has been made against an event
- stream. This yang-data MUST be used if hints are to be
- provided back to the subscriber.";
- leaf reason {
- type identityref {
- base modify-subscription-error;
- }
- description
- "Information in a 'modify-subscription' RPC error response
- which indicates the reason why the subscription to an event
- stream has failed to be modified.";
- }
- leaf filter-failure-hint {
- type string;
- description
- "Information describing where and/or why a provided filter
- was unsupportable for a subscription. The syntax and
- semantics of this hint are implementation-specific.";
- }
- }
- }
-
- rpc delete-subscription {
- description
- "This RPC allows a subscriber to delete a subscription that
- was previously created from by that same subscriber using the
- 'establish-subscription' RPC.
-
- If an error occurs, the server replies with an 'rpc-error' where
- the 'error-info' field MAY contain an
- 'delete-subscription-error-info' structure.";
- input {
- leaf id {
- type subscription-id;
- mandatory true;
- description
- "Identifier of the subscription that is to be deleted.
- Only subscriptions that were created using
- 'establish-subscription' from the same origin as this RPC
- can be deleted via this RPC.";
- }
- }
- }
-
- rpc kill-subscription {
- nacm:default-deny-all;
- description
- "This RPC allows an operator to delete a dynamic subscription
- without restrictions on the originating subscriber or underlying
- transport session.
-
- If an error occurs, the server replies with an 'rpc-error' where
- the 'error-info' field MAY contain an
- 'delete-subscription-error-info' structure.";
- input {
- leaf id {
- type subscription-id;
- mandatory true;
- description
- "Identifier of the subscription that is to be deleted. Only
- subscriptions that were created using
- 'establish-subscription' can be deleted via this RPC.";
- }
- }
- }
-
- rc:yang-data delete-subscription-error-info {
- container delete-subscription-error-info {
- description
- "If a 'delete-subscription' RPC or a 'kill-subscription' RPC
- fails, the subscription is not deleted and the RPC error
- response MUST indicate the reason for this failure. This
- yang-data MAY be inserted as structured data within a
- subscription's RPC error response to indicate the failure
- reason.";
- leaf reason {
- type identityref {
- base delete-subscription-error;
- }
- mandatory true;
- description
- "Indicates the reason why the subscription has failed to be
- deleted.";
- }
- }
- }
-
- /*
- * NOTIFICATIONS
- */
-
- notification replay-completed {
- sn:subscription-state-notification;
- if-feature "replay";
- description
- "This notification is sent to indicate that all of the replay
- notifications have been sent.";
- leaf id {
- type subscription-id;
- mandatory true;
- description
- "This references the affected subscription.";
- }
- }
-
- notification subscription-completed {
- sn:subscription-state-notification;
- if-feature "configured";
- description
- "This notification is sent to indicate that a subscription has
- finished passing event records, as the 'stop-time' has been
- reached.";
- leaf id {
- type subscription-id;
- mandatory true;
- description
- "This references the gracefully completed subscription.";
- }
- }
-
- notification subscription-modified {
- sn:subscription-state-notification;
- description
- "This notification indicates that a subscription has been
- modified. Notification messages sent from this point on will
- conform to the modified terms of the subscription. For
- completeness, this subscription state change notification
- includes both modified and non-modified aspects of a
- subscription.";
- leaf id {
- type subscription-id;
- mandatory true;
- description
- "This references the affected subscription.";
- }
- uses subscription-policy {
- refine "target/stream/stream-filter/within-subscription" {
- description
- "Filter applied to the subscription. If the
- 'stream-filter-name' is populated, the filter within the
- subscription came from the 'filters' container. Otherwise it
- is populated in-line as part of the subscription.";
- }
- }
- }
-
- notification subscription-resumed {
- sn:subscription-state-notification;
- description
- "This notification indicates that a subscription that had
- previously been suspended has resumed. Notifications will once
- again be sent. In addition, a 'subscription-resumed' indicates
- that no modification of parameters has occurred since the last
- time event records have been sent.";
- leaf id {
- type subscription-id;
- mandatory true;
- description
- "This references the affected subscription.";
- }
- }
-
- notification subscription-started {
- sn:subscription-state-notification;
- if-feature "configured";
- description
- "This notification indicates that a subscription has started and
- notifications are beginning to be sent.";
- leaf id {
- type subscription-id;
- mandatory true;
- description
- "This references the affected subscription.";
- }
- uses subscription-policy {
- refine "target/stream/replay-start-time" {
- description
- "Indicates the time that a replay is using for the streaming
- of buffered event records. This will be populated with the
- most recent of the following: the event time of the previous
- event record sent to a receiver, the
- 'replay-log-creation-time', the 'replay-log-aged-time',
- or the most recent publisher boot time.";
- }
- refine "target/stream/stream-filter/within-subscription" {
- description
- "Filter applied to the subscription. If the
- 'stream-filter-name' is populated, the filter within the
- subscription came from the 'filters' container. Otherwise it
- is populated in-line as part of the subscription.";
- }
- augment "target/stream" {
- description
- "This augmentation adds additional parameters specific to a
- subscription-started notification.";
- leaf replay-previous-event-time {
- when "../replay-start-time";
- if-feature "replay";
- type yang:date-and-time;
- description
- "If there is at least one event in the replay buffer prior
- to 'replay-start-time', this gives the time of the event
- generated immediately prior to the 'replay-start-time'.
- If a receiver previously received event records for this
- configured subscription, it can compare this time to the
- last event record previously received. If the two are not
- the same (perhaps due to a reboot), then a dynamic replay
- can be initiated to acquire any missing event records.";
- }
- }
- }
- }
-
- notification subscription-suspended {
- sn:subscription-state-notification;
- description
- "This notification indicates that a suspension of the
- subscription by the publisher has occurred. No further
- notifications will be sent until the subscription resumes.
- This notification shall only be sent to receivers of a
- subscription; it does not constitute a general-purpose
- notification.";
- leaf id {
- type subscription-id;
- mandatory true;
- description
- "This references the affected subscription.";
- }
- leaf reason {
- type identityref {
- base subscription-suspended-reason;
- }
- mandatory true;
- description
- "Identifies the condition which resulted in the suspension.";
- }
- }
-
- notification subscription-terminated {
- sn:subscription-state-notification;
- description
- "This notification indicates that a subscription has been
- terminated.";
- leaf id {
- type subscription-id;
- mandatory true;
- description
- "This references the affected subscription.";
- }
- leaf reason {
- type identityref {
- base subscription-terminated-reason;
- }
- mandatory true;
- description
- "Identifies the condition which resulted in the termination .";
- }
- }
-
- /*
- * DATA NODES
- */
-
- container streams {
- config false;
- description
- "This container contains information on the built-in event
- streams provided by the publisher.";
- list stream {
- key "name";
- description
- "Identifies the built-in event streams that are supported by
- the publisher.";
- leaf name {
- type string;
- description
- "A handle for a system-provided event stream made up of a
- sequential set of event records, each of which is
- characterized by its own domain and semantics.";
- }
- leaf description {
- type string;
- description
- "A description of the event stream, including such
- information as the type of event records that are available
- within this event stream.";
- }
- leaf replay-support {
- if-feature "replay";
- type empty;
- description
- "Indicates that event record replay is available on this
- event stream.";
- }
- leaf replay-log-creation-time {
- when "../replay-support";
- if-feature "replay";
- type yang:date-and-time;
- mandatory true;
- description
- "The timestamp of the creation of the log used to support the
- replay function on this event stream. This time might be
- earlier than the earliest available information contained in
- the log. This object is updated if the log resets for some
- reason.";
- }
- leaf replay-log-aged-time {
- when "../replay-support";
- if-feature "replay";
- type yang:date-and-time;
- description
- "The timestamp associated with last event record which has
- been aged out of the log. This timestamp identifies how far
- back into history this replay log extends, if it doesn't
- extend back to the 'replay-log-creation-time'. This object
- MUST be present if replay is supported and any event records
- have been aged out of the log.";
- }
- }
- }
-
- container filters {
- description
- "This container contains a list of configurable filters
- that can be applied to subscriptions. This facilitates
- the reuse of complex filters once defined.";
- list stream-filter {
- key "name";
- description
- "A list of pre-configured filters that can be applied to
- subscriptions.";
- leaf name {
- type string;
- description
- "An name to differentiate between filters.";
- }
- uses stream-filter-elements;
- }
- }
-
- container subscriptions {
- description
- "Contains the list of currently active subscriptions, i.e.
- subscriptions that are currently in effect, used for
- subscription management and monitoring purposes. This includes
- subscriptions that have been setup via RPC primitives as well as
- subscriptions that have been established via configuration.";
- list subscription {
- key "id";
- description
- "The identity and specific parameters of a subscription.
- Subscriptions within this list can be created using a control
- channel or RPC, or be established through configuration.
-
- If configuration operations or the 'kill-subscription' RPC 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 within a publisher";
- }
- uses subscription-policy {
- refine "target/stream/stream" {
- description
- "Indicates the event stream to be considered for this
- subscription. If an event stream has been removed,
- and no longer can be referenced by an active subscription,
- send a 'subscription-terminated' notification with
- 'stream-unavailable' as the reason. If a configured
- subscription refers to a non-existent event stream, move
- that subscription to the 'invalid' state.";
- }
- refine "transport" {
- description
- "For a configured subscription, this leaf specifies the
- transport used to deliver messages destined to all
- receivers of that subscription. This object is mandatory
- for subscriptions in the configuration datastore. This
- object is not mandatory for dynamic subscriptions within
- the operational state datastore. The object should not
- be present for dynamic subscriptions.";
- }
- augment "target/stream" {
- description
- "Enables objects to added to a configured stream
- subscription";
- leaf configured-replay {
- if-feature "configured";
- if-feature "replay";
- type empty;
- description
- "The presence of this leaf indicates that replay for the
- configured subscription should start at the earliest time
- in the event log, or at the publisher boot time, which
- ever is later.";
- }
- }
- }
- choice notification-message-origin {
- if-feature "configured";
- description
- "Identifies the egress interface on the publisher from which
- notification messages are to be sent.";
- case interface-originated {
- description
- "When notification messages to egress a specific,
- designated interface on the publisher.";
- leaf source-interface {
- if-feature "interface-designation";
- type if:interface-ref;
- description
- "References the interface for notification messages.";
- }
- }
- case address-originated {
- description
- "When notification messages are to depart from a publisher
- using specific originating address and/or routing context
- information.";
- leaf source-vrf {
- if-feature "supports-vrf";
- type leafref {
- path "/ni:network-instances/ni:network-instance/ni:name";
- }
- description
- "VRF from which notification messages should egress a
- publisher.";
- }
- leaf source-address {
- type inet:ip-address-no-zone;
- description
- "The source address for the notification messages. If a
- source VRF exists, but this object doesn't, a publisher's
- default address for that VRF must be used.";
- }
- }
- }
- leaf configured-subscription-state {
- if-feature "configured";
- type enumeration {
- enum valid {
- value 1;
- description
- "Subscription is supportable with current parameters.";
- }
- enum invalid {
- value 2;
- description
- "The subscription as a whole is unsupportable with its
- current parameters.";
- }
- enum concluded {
- value 3;
- description
- "A subscription is inactive as it has hit a stop time,
- it no longer has receivers in the 'receiver active' or
- 'receiver suspended' state, but not yet been
- removed from configuration.";
- }
- }
- config false;
- description
- "The presence of this leaf indicates that the subscription
- originated from configuration, not through a control channel
- or RPC. The value indicates the system established state
- of the subscription.";
- }
- container receivers {
- description
- "Set of receivers in a subscription.";
- list receiver {
- key "name";
- min-elements 1;
- description
- "A host intended as a recipient for the notification
- messages of a subscription. For configured subscriptions,
- transport specific network parameters (or a leafref to
- those parameters) may augmentated to a specific receiver
- within this list.";
- leaf name {
- type string;
- description
- "Identifies a unique receiver for a subscription.";
- }
- 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 either
- via 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.";
- }
- leaf state {
- type enumeration {
- enum active {
- value 1;
- description
- "Receiver is currently being sent any applicable
- notification messages for the subscription.";
- }
- enum suspended {
- value 2;
- description
- "Receiver state is 'suspended', so the publisher
- is currently unable to provide notification messages
- for the subscription.";
- }
- enum connecting {
- value 3;
- if-feature "configured";
- description
- "A subscription has been configured, but a
- 'subscription-started' subscription state change
- notification needs to be successfully received before
- notification messages are sent.
-
- If the 'reset' action is invoked for a receiver of an
- active configured subscription, the state must be
- moved to 'connecting'.";
- }
- enum disconnected {
- value 4;
- if-feature "configured";
- description
- "A subscription has failed in sending a subscription
- started state change to the receiver.
- Additional attempts at connection attempts are not
- currently being made.";
- }
- }
- config false;
- mandatory true;
- description
- "Specifies the state of a subscription from the
- perspective of a particular receiver. With this info it
- is possible to determine whether a publisher is
- currently generating notification messages intended for
- that receiver.";
- }
- action reset {
- if-feature "configured";
- description
- "Allows the reset of this configured subscription
- receiver to the 'connecting' state. This enables the
- connection process to be re-initiated.";
- output {
- leaf time {
- type yang:date-and-time;
- mandatory true;
- description
- "Time a publisher returned the receiver to a
- 'connecting' state.";
- }
- }
- }
- }
- }
- }
- }
-}
diff --git a/experimental/ietf-extracted-YANG-modules/ietf-subscribed-notifications@2019-09-09.yang b/experimental/ietf-extracted-YANG-modules/ietf-subscribed-notifications@2019-09-09.yang
new file mode 100644
index 000000000..e04593c3f
--- /dev/null
+++ b/experimental/ietf-extracted-YANG-modules/ietf-subscribed-notifications@2019-09-09.yang
@@ -0,0 +1,1350 @@
+module ietf-subscribed-notifications {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications";
+ prefix sn;
+
+ import ietf-inet-types {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+ import ietf-interfaces {
+ prefix if;
+ reference
+ "RFC 8343: A YANG Data Model for Interface Management";
+ }
+ import ietf-netconf-acm {
+ prefix nacm;
+ reference
+ "RFC 8341: Network Configuration Access Control Model";
+ }
+ import ietf-network-instance {
+ prefix ni;
+ reference
+ "RFC 8529: YANG Data Model for Network Instances";
+ }
+ import ietf-restconf {
+ prefix rc;
+ reference
+ "RFC 8040: RESTCONF Protocol";
+ }
+ 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: Alexander Clemm
+
+
+ Author: Eric Voit
+
+
+ Author: Alberto Gonzalez Prieto
+
+
+ Author: Einar Nilsen-Nygaard
+
+
+ Author: Ambika Prasad Tripathy
+ ";
+ description
+ "This module defines a YANG data model for subscribing to event
+ records and receiving matching content in notification messages.
+
+ 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) 2019 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 8639; see the
+ RFC itself for full legal notices.";
+
+ revision 2019-09-09 {
+ description
+ "Initial version.";
+ reference
+ "RFC 8639: A YANG Data Model for Subscriptions to
+ Event Notifications";
+ }
+
+ /*
+ * FEATURES
+ */
+
+ feature configured {
+ description
+ "This feature indicates that configuration of subscriptions is
+ supported.";
+ }
+
+ feature dscp {
+ description
+ "This feature indicates that a publisher supports the ability
+ to set the Differentiated Services Code Point (DSCP) value in
+ outgoing packets.";
+ }
+
+ feature encode-json {
+ description
+ "This feature indicates that JSON encoding of notification
+ messages is supported.";
+ }
+
+ feature encode-xml {
+ description
+ "This feature indicates that XML encoding of notification
+ messages is supported.";
+ }
+
+ feature interface-designation {
+ description
+ "This feature indicates that a publisher supports sourcing all
+ receiver interactions for a configured subscription from a
+ single designated egress interface.";
+ }
+
+ feature qos {
+ description
+ "This feature indicates that a publisher supports absolute
+ dependencies of one subscription's traffic over another
+ as well as weighted bandwidth sharing between subscriptions.
+ Both of these are Quality of Service (QoS) features that allow
+ differentiated treatment of notification messages between a
+ publisher and a specific receiver.";
+ }
+
+ feature replay {
+ description
+ "This feature indicates that historical event record replay is
+ supported. With replay, it is possible for past event records
+ to be streamed in chronological order.";
+ }
+
+ feature subtree {
+ description
+ "This feature indicates support for YANG subtree filtering.";
+ reference
+ "RFC 6241: Network Configuration Protocol (NETCONF),
+ Section 6";
+ }
+
+ feature supports-vrf {
+ description
+ "This feature indicates that a publisher supports VRF
+ configuration for configured subscriptions. VRF support for
+ dynamic subscriptions does not require this feature.";
+ reference
+ "RFC 8529: YANG Data Model for Network Instances,
+ Section 6";
+ }
+
+ feature xpath {
+ description
+ "This feature indicates support for XPath filtering.";
+ reference
+ "XML Path Language (XPath) Version 1.0
+ (https://www.w3.org/TR/1999/REC-xpath-19991116)";
+ }
+
+ /*
+ * EXTENSIONS
+ */
+
+ extension subscription-state-notification {
+ description
+ "This statement applies only to notifications. It indicates
+ that the notification is a subscription state change
+ notification. Therefore, it does not participate in a regular
+ event stream and does not need to be specifically subscribed
+ to in order to be received. This statement can only occur as
+ a substatement of the YANG 'notification' statement. This
+ statement is not for use outside of this YANG module.";
+ }
+
+ /*
+ * IDENTITIES
+ */
+ /* Identities for RPC and notification errors */
+
+ identity delete-subscription-error {
+ description
+ "Base identity for the problem found while attempting to
+ fulfill either a 'delete-subscription' RPC request or a
+ 'kill-subscription' RPC request.";
+ }
+
+ identity establish-subscription-error {
+ description
+ "Base identity for the problem found while attempting to
+ fulfill an 'establish-subscription' RPC request.";
+ }
+
+ identity modify-subscription-error {
+ description
+ "Base identity for the problem found while attempting to
+ fulfill a 'modify-subscription' RPC request.";
+ }
+
+ identity subscription-suspended-reason {
+ description
+ "Base identity for the problem condition communicated to a
+ receiver as part of a 'subscription-suspended'
+ notification.";
+ }
+
+ identity subscription-terminated-reason {
+ description
+ "Base identity for the problem condition communicated to a
+ receiver as part of a 'subscription-terminated'
+ notification.";
+ }
+
+ identity dscp-unavailable {
+ base establish-subscription-error;
+ if-feature "dscp";
+ description
+ "The publisher is unable to mark notification messages with
+ prioritization information in a way that will be respected
+ during network transit.";
+ }
+
+ identity encoding-unsupported {
+ base establish-subscription-error;
+ description
+ "Unable to encode notification messages in the desired
+ format.";
+ }
+
+ identity filter-unavailable {
+ base subscription-terminated-reason;
+ description
+ "Referenced filter does not exist. This means a receiver is
+ referencing a filter that doesn't exist or to which it
+ does not have access permissions.";
+ }
+
+ identity filter-unsupported {
+ base establish-subscription-error;
+ base modify-subscription-error;
+ description
+ "Cannot parse syntax in the filter. This failure can be from
+ a syntax error or a syntax too complex to be processed by the
+ publisher.";
+ }
+
+ identity insufficient-resources {
+ base establish-subscription-error;
+ base modify-subscription-error;
+ base subscription-suspended-reason;
+ description
+ "The publisher does not have sufficient resources to support
+ the requested subscription. An example might be that
+ allocated CPU is too limited to generate the desired set of
+ notification messages.";
+ }
+
+ identity no-such-subscription {
+ base modify-subscription-error;
+ base delete-subscription-error;
+ base subscription-terminated-reason;
+ description
+ "Referenced subscription doesn't exist. This may be as a
+ result of a nonexistent subscription ID, an ID that belongs to
+ another subscriber, or an ID for a configured subscription.";
+ }
+
+ identity replay-unsupported {
+ base establish-subscription-error;
+ if-feature "replay";
+ description
+ "Replay cannot be performed for this subscription. This means
+ the publisher will not provide the requested historic
+ information from the event stream via replay to this
+ receiver.";
+ }
+
+ identity stream-unavailable {
+ base subscription-terminated-reason;
+ description
+ "Not a subscribable event stream. This means the referenced
+ event stream is not available for subscription by the
+ receiver.";
+ }
+
+ identity suspension-timeout {
+ base subscription-terminated-reason;
+ description
+ "Termination of a previously suspended subscription. The
+ publisher has eliminated the subscription, as it exceeded a
+ time limit for suspension.";
+ }
+
+ identity unsupportable-volume {
+ base subscription-suspended-reason;
+ description
+ "The publisher does not have the network bandwidth needed to
+ get the volume of generated information intended for a
+ receiver.";
+ }
+
+ /* Identities for encodings */
+
+ identity configurable-encoding {
+ description
+ "If a transport identity derives from this identity, it means
+ that it supports configurable encodings. An example of a
+ configurable encoding might be a new identity such as
+ 'encode-cbor'. Such an identity could use
+ 'configurable-encoding' as its base. This would allow a
+ dynamic subscription encoded in JSON (RFC 8259) to request
+ that notification messages be encoded via the Concise Binary
+ Object Representation (CBOR) (RFC 7049). Further details for
+ any specific configurable encoding would be explored in a
+ transport document based on this specification.";
+ reference
+ "RFC 8259: The JavaScript Object Notation (JSON) Data
+ Interchange Format
+ RFC 7049: Concise Binary Object Representation (CBOR)";
+ }
+
+ identity encoding {
+ description
+ "Base identity to represent data encodings.";
+ }
+
+ identity encode-xml {
+ base encoding;
+ if-feature "encode-xml";
+ description
+ "Encode data using XML as described in RFC 7950.";
+ reference
+ "RFC 7950: The YANG 1.1 Data Modeling Language";
+ }
+
+ identity encode-json {
+ base encoding;
+ if-feature "encode-json";
+ description
+ "Encode data using JSON as described in RFC 7951.";
+ reference
+ "RFC 7951: JSON Encoding of Data Modeled with YANG";
+ }
+
+ /* Identities for transports */
+
+ identity transport {
+ description
+ "An identity that represents the underlying mechanism for
+ passing notification messages.";
+ }
+
+ /*
+ * TYPEDEFs
+ */
+
+ typedef encoding {
+ type identityref {
+ base encoding;
+ }
+ description
+ "Specifies a data encoding, e.g., for a data subscription.";
+ }
+
+ typedef stream-filter-ref {
+ type leafref {
+ path "/sn:filters/sn:stream-filter/sn:name";
+ }
+ description
+ "This type is used to reference an event stream filter.";
+ }
+
+ typedef stream-ref {
+ type leafref {
+ path "/sn:streams/sn:stream/sn:name";
+ }
+ description
+ "This type is used to reference a system-provided
+ event stream.";
+ }
+
+ typedef subscription-id {
+ type uint32;
+ description
+ "A type for subscription identifiers.";
+ }
+
+ typedef transport {
+ type identityref {
+ base transport;
+ }
+ description
+ "Specifies the transport used to send notification messages
+ to a receiver.";
+ }
+
+ /*
+ * GROUPINGS
+ */
+
+ grouping stream-filter-elements {
+ description
+ "This grouping defines the base for filters applied to event
+ streams.";
+ choice filter-spec {
+ description
+ "The content filter specification for this request.";
+ anydata stream-subtree-filter {
+ if-feature "subtree";
+ description
+ "Event stream evaluation criteria encoded in the syntax of
+ a subtree filter as defined in RFC 6241, Section 6.
+
+ The subtree filter is applied to the representation of
+ individual, delineated event records as contained in the
+ event stream.
+
+ If the subtree filter returns a non-empty node set, the
+ filter matches the event record, and the event record is
+ included in the notification message sent to the
+ receivers.";
+ reference
+ "RFC 6241: Network Configuration Protocol (NETCONF),
+ Section 6";
+ }
+ leaf stream-xpath-filter {
+ if-feature "xpath";
+ type yang:xpath1.0;
+ description
+ "Event stream evaluation criteria encoded in the syntax of
+ an XPath 1.0 expression.
+
+ The XPath expression is evaluated on the representation of
+ individual, delineated event records as contained in
+ the event stream.
+
+ The result of the XPath expression is converted to a
+ boolean value using the standard XPath 1.0 rules. If the
+ boolean value is 'true', the filter matches the event
+ record, and the event record is included in the
+ notification message sent to the receivers.
+
+ The expression is evaluated in the following XPath
+ context:
+
+ o The set of namespace declarations is the set of
+ prefix and namespace pairs for all YANG modules
+ implemented by the server, where the prefix is the
+ YANG module name and the namespace is as defined by
+ the 'namespace' statement in the YANG module.
+
+ If the leaf is encoded in XML, all namespace
+ declarations in scope on the 'stream-xpath-filter'
+ leaf element are added to the set of namespace
+ declarations. If a prefix found in the XML is
+ already present in the set of namespace
+ declarations, the namespace in the XML is used.
+
+ o The set of variable bindings is empty.
+
+ o The function library is comprised of the core
+ function library and the XPath functions defined in
+ Section 10 in RFC 7950.
+
+ o The context node is the root node.";
+ reference
+ "XML Path Language (XPath) Version 1.0
+ (https://www.w3.org/TR/1999/REC-xpath-19991116)
+ RFC 7950: The YANG 1.1 Data Modeling Language,
+ Section 10";
+ }
+ }
+ }
+
+ grouping update-qos {
+ description
+ "This grouping describes QoS information concerning a
+ subscription. This information is passed to lower layers
+ for transport prioritization and treatment.";
+ leaf dscp {
+ if-feature "dscp";
+ type inet:dscp;
+ default "0";
+ description
+ "The desired network transport priority level. This is the
+ priority set on notification messages encapsulating the
+ results of the subscription. This transport priority is
+ shared for all receivers of a given subscription.";
+ }
+ leaf weighting {
+ if-feature "qos";
+ type uint8 {
+ range "0 .. 255";
+ }
+ description
+ "Relative weighting for a subscription. Larger weights get
+ more resources. Allows an underlying transport layer to
+ perform informed load-balance allocations between various
+ subscriptions.";
+ reference
+ "RFC 7540: Hypertext Transfer Protocol Version 2 (HTTP/2),
+ Section 5.3.2";
+ }
+ leaf dependency {
+ if-feature "qos";
+ type subscription-id;
+ description
+ "Provides the 'subscription-id' of a parent subscription.
+ The parent subscription has absolute precedence should
+ that parent have push updates ready to egress the publisher.
+ In other words, there should be no streaming of objects from
+ the current subscription if the parent has something ready
+ to push.
+
+ If a dependency is asserted via configuration or via an RPC
+ but the referenced 'subscription-id' does not exist, the
+ dependency is silently discarded. If a referenced
+ subscription is deleted, this dependency is removed.";
+ reference
+ "RFC 7540: Hypertext Transfer Protocol Version 2 (HTTP/2),
+ Section 5.3.1";
+ }
+ }
+
+ grouping subscription-policy-modifiable {
+ description
+ "This grouping describes all objects that may be changed
+ in a subscription.";
+ choice target {
+ mandatory true;
+ description
+ "Identifies the source of information against which a
+ subscription is being applied as well as specifics on the
+ subset of information desired from that source.";
+ case stream {
+ choice stream-filter {
+ description
+ "An event stream filter can be applied to a subscription.
+ That filter will either come referenced from a global
+ list or be provided in the subscription itself.";
+ case by-reference {
+ description
+ "Apply a filter that has been configured separately.";
+ leaf stream-filter-name {
+ type stream-filter-ref;
+ mandatory true;
+ description
+ "References an existing event stream filter that is
+ to be applied to an event stream for the
+ subscription.";
+ }
+ }
+ case within-subscription {
+ description
+ "A local definition allows a filter to have the same
+ lifecycle as the subscription.";
+ uses stream-filter-elements;
+ }
+ }
+ }
+ }
+ leaf stop-time {
+ type yang:date-and-time;
+ description
+ "Identifies a time after which notification messages for a
+ subscription should not be sent. If 'stop-time' is not
+ present, the notification messages will continue until the
+ subscription is terminated. If 'replay-start-time' exists,
+ 'stop-time' must be for a subsequent time. If
+ 'replay-start-time' doesn't exist, 'stop-time', when
+ established, must be for a future time.";
+ }
+ }
+
+ grouping subscription-policy-dynamic {
+ description
+ "This grouping describes the only information concerning a
+ subscription that can be passed over the RPCs defined in this
+ data model.";
+ uses subscription-policy-modifiable {
+ augment "target/stream" {
+ description
+ "Adds additional objects that can be modified by an RPC.";
+ leaf stream {
+ type stream-ref {
+ require-instance false;
+ }
+ mandatory true;
+ description
+ "Indicates the event stream to be considered for
+ this subscription.";
+ }
+ leaf replay-start-time {
+ if-feature "replay";
+ type yang:date-and-time;
+ config false;
+ description
+ "Used to trigger the 'replay' feature for a dynamic
+ subscription, where event records that are selected
+ need to be at or after the specified starting time. If
+ 'replay-start-time' is not present, this is not a replay
+ subscription and event record push should start
+ immediately. It is never valid to specify start times
+ that are later than or equal to the current time.";
+ }
+ }
+ }
+ uses update-qos;
+ }
+
+ grouping subscription-policy {
+ description
+ "This grouping describes the full set of policy information
+ concerning both dynamic and configured subscriptions, with the
+ exclusion of both receivers and networking information
+ specific to the publisher, such as what interface should be
+ used to transmit notification messages.";
+ uses subscription-policy-dynamic;
+ leaf transport {
+ if-feature "configured";
+ type transport;
+ description
+ "For a configured subscription, this leaf specifies the
+ transport used to deliver messages destined for all
+ receivers of that subscription.";
+ }
+ leaf encoding {
+ when 'not(../transport) or derived-from(../transport,
+ "sn:configurable-encoding")';
+ type encoding;
+ description
+ "The type of encoding for notification messages. For a
+ dynamic subscription, if not included as part of an
+ 'establish-subscription' RPC, the encoding will be populated
+ with the encoding used by that RPC. For a configured
+ subscription, if not explicitly configured, the encoding
+ will be the default encoding for an underlying transport.";
+ }
+ leaf purpose {
+ if-feature "configured";
+ type string;
+ description
+ "Open text allowing a configuring entity to embed the
+ originator or other specifics of this subscription.";
+ }
+ }
+
+ /*
+ * RPCs
+ */
+
+ rpc establish-subscription {
+ description
+ "This RPC allows a subscriber to create (and possibly
+ negotiate) a subscription on its own behalf. If successful,
+ the subscription remains in effect for the duration of the
+ subscriber's association with the publisher or until the
+ subscription is terminated. If an error occurs or the
+ publisher cannot meet the terms of a subscription, an RPC
+ error is returned, and the subscription is not created.
+ In that case, the RPC reply's 'error-info' MAY include
+ suggested parameter settings that would have a higher
+ likelihood of succeeding in a subsequent
+ 'establish-subscription' request.";
+ input {
+ uses subscription-policy-dynamic;
+ leaf encoding {
+ type encoding;
+ description
+ "The type of encoding for the subscribed data. If not
+ included as part of the RPC, the encoding MUST be set by
+ the publisher to be the encoding used by this RPC.";
+ }
+ }
+ output {
+ leaf id {
+ type subscription-id;
+ mandatory true;
+ description
+ "Identifier used for this subscription.";
+ }
+ leaf replay-start-time-revision {
+ if-feature "replay";
+ type yang:date-and-time;
+ description
+ "If a replay has been requested, this object represents
+ the earliest time covered by the event buffer for the
+ requested event stream. The value of this object is the
+ 'replay-log-aged-time' if it exists. Otherwise, it is
+ the 'replay-log-creation-time'. All buffered event
+ records after this time will be replayed to a receiver.
+ This object will only be sent if the starting time has
+ been revised to be later than the time requested by the
+ subscriber.";
+ }
+ }
+ }
+
+ rc:yang-data establish-subscription-stream-error-info {
+ container establish-subscription-stream-error-info {
+ description
+ "If any 'establish-subscription' RPC parameters are
+ unsupportable against the event stream, a subscription
+ is not created and the RPC error response MUST indicate the
+ reason why the subscription failed to be created. This
+ yang-data MAY be inserted as structured data in a
+ subscription's RPC error response to indicate the reason for
+ the failure. This yang-data MUST be inserted if hints are
+ to be provided back to the subscriber.";
+ leaf reason {
+ type identityref {
+ base establish-subscription-error;
+ }
+ description
+ "Indicates the reason why the subscription has failed to
+ be created to a targeted event stream.";
+ }
+ leaf filter-failure-hint {
+ type string;
+ description
+ "Information describing where and/or why a provided
+ filter was unsupportable for a subscription. The
+ syntax and semantics of this hint are
+ implementation specific.";
+ }
+ }
+ }
+
+ rpc modify-subscription {
+ description
+ "This RPC allows a subscriber to modify a dynamic
+ subscription's parameters. If successful, the changed
+ subscription parameters remain in effect for the duration of
+ the subscription, until the subscription is again modified, or
+ until the subscription is terminated. In the case of an error
+ or an inability to meet the modified parameters, the
+ subscription is not modified and the original subscription
+ parameters remain in effect. In that case, the RPC error MAY
+ include 'error-info' suggested parameter hints that would have
+ a high likelihood of succeeding in a subsequent
+ 'modify-subscription' request. A successful
+ 'modify-subscription' will return a suspended subscription to
+ the 'active' state.";
+ input {
+ leaf id {
+ type subscription-id;
+ mandatory true;
+ description
+ "Identifier to use for this subscription.";
+ }
+ uses subscription-policy-modifiable;
+ }
+ }
+
+ rc:yang-data modify-subscription-stream-error-info {
+ container modify-subscription-stream-error-info {
+ description
+ "This yang-data MAY be provided as part of a subscription's
+ RPC error response when there is a failure of a
+ 'modify-subscription' RPC that has been made against an
+ event stream. This yang-data MUST be used if hints are to
+ be provided back to the subscriber.";
+ leaf reason {
+ type identityref {
+ base modify-subscription-error;
+ }
+ description
+ "Information in a 'modify-subscription' RPC error response
+ that indicates the reason why the subscription to an event
+ stream has failed to be modified.";
+ }
+ leaf filter-failure-hint {
+ type string;
+ description
+ "Information describing where and/or why a provided
+ filter was unsupportable for a subscription. The syntax
+ and semantics of this hint are
+ implementation specific.";
+ }
+ }
+ }
+
+ rpc delete-subscription {
+ description
+ "This RPC allows a subscriber to delete a subscription that
+ was previously created by that same subscriber using the
+ 'establish-subscription' RPC.
+
+ If an error occurs, the server replies with an 'rpc-error'
+ where the 'error-info' field MAY contain a
+ 'delete-subscription-error-info' structure.";
+ input {
+ leaf id {
+ type subscription-id;
+ mandatory true;
+ description
+ "Identifier of the subscription that is to be deleted.
+ Only subscriptions that were created using
+ 'establish-subscription' from the same origin as this RPC
+ can be deleted via this RPC.";
+ }
+ }
+ }
+
+ rpc kill-subscription {
+ nacm:default-deny-all;
+ description
+ "This RPC allows an operator to delete a dynamic subscription
+ without restrictions on the originating subscriber or
+ underlying transport session.
+
+ If an error occurs, the server replies with an 'rpc-error'
+ where the 'error-info' field MAY contain a
+ 'delete-subscription-error-info' structure.";
+ input {
+ leaf id {
+ type subscription-id;
+ mandatory true;
+ description
+ "Identifier of the subscription that is to be deleted.
+ Only subscriptions that were created using
+ 'establish-subscription' can be deleted via this RPC.";
+ }
+ }
+ }
+
+ rc:yang-data delete-subscription-error-info {
+ container delete-subscription-error-info {
+ description
+ "If a 'delete-subscription' RPC or a 'kill-subscription' RPC
+ fails, the subscription is not deleted and the RPC error
+ response MUST indicate the reason for this failure. This
+ yang-data MAY be inserted as structured data in a
+ subscription's RPC error response to indicate the reason
+ for the failure.";
+ leaf reason {
+ type identityref {
+ base delete-subscription-error;
+ }
+ mandatory true;
+ description
+ "Indicates the reason why the subscription has failed to be
+ deleted.";
+ }
+ }
+ }
+
+ /*
+ * NOTIFICATIONS
+ */
+
+ notification replay-completed {
+ sn:subscription-state-notification;
+ if-feature "replay";
+ description
+ "This notification is sent to indicate that all of the replay
+ notifications have been sent.";
+ leaf id {
+ type subscription-id;
+ mandatory true;
+ description
+ "This references the affected subscription.";
+ }
+ }
+
+ notification subscription-completed {
+ sn:subscription-state-notification;
+ if-feature "configured";
+ description
+ "This notification is sent to indicate that a subscription has
+ finished passing event records, as the 'stop-time' has been
+ reached.";
+ leaf id {
+ type subscription-id;
+ mandatory true;
+ description
+ "This references the gracefully completed subscription.";
+ }
+ }
+
+ notification subscription-modified {
+ sn:subscription-state-notification;
+ description
+ "This notification indicates that a subscription has been
+ modified. Notification messages sent from this point on will
+ conform to the modified terms of the subscription. For
+ completeness, this subscription state change notification
+ includes both modified and unmodified aspects of a
+ subscription.";
+ leaf id {
+ type subscription-id;
+ mandatory true;
+ description
+ "This references the affected subscription.";
+ }
+ uses subscription-policy {
+ refine "target/stream/stream-filter/within-subscription" {
+ description
+ "Filter applied to the subscription. If the
+ 'stream-filter-name' is populated, the filter in the
+ subscription came from the 'filters' container.
+ Otherwise, it is populated in-line as part of the
+ subscription.";
+ }
+ }
+ }
+
+ notification subscription-resumed {
+ sn:subscription-state-notification;
+ description
+ "This notification indicates that a subscription that had
+ previously been suspended has resumed. Notifications will
+ once again be sent. In addition, a 'subscription-resumed'
+ indicates that no modification of parameters has occurred
+ since the last time event records have been sent.";
+ leaf id {
+ type subscription-id;
+ mandatory true;
+ description
+ "This references the affected subscription.";
+ }
+ }
+
+ notification subscription-started {
+ sn:subscription-state-notification;
+ if-feature "configured";
+ description
+ "This notification indicates that a subscription has started
+ and notifications will now be sent.";
+ leaf id {
+ type subscription-id;
+ mandatory true;
+ description
+ "This references the affected subscription.";
+ }
+ uses subscription-policy {
+ refine "target/stream/replay-start-time" {
+ description
+ "Indicates the time that a replay is using for the
+ streaming of buffered event records. This will be
+ populated with the most recent of the following:
+ the event time of the previous event record sent to a
+ receiver, the 'replay-log-creation-time', the
+ 'replay-log-aged-time', or the most recent publisher
+ boot time.";
+ }
+ refine "target/stream/stream-filter/within-subscription" {
+ description
+ "Filter applied to the subscription. If the
+ 'stream-filter-name' is populated, the filter in the
+ subscription came from the 'filters' container.
+ Otherwise, it is populated in-line as part of the
+ subscription.";
+ }
+ augment "target/stream" {
+ description
+ "This augmentation adds additional parameters specific to a
+ 'subscription-started' notification.";
+ leaf replay-previous-event-time {
+ when '../replay-start-time';
+ if-feature "replay";
+ type yang:date-and-time;
+ description
+ "If there is at least one event in the replay buffer
+ prior to 'replay-start-time', this gives the time of
+ the event generated immediately prior to the
+ 'replay-start-time'.
+
+ If a receiver previously received event records for
+ this configured subscription, it can compare this time
+ to the last event record previously received. If the
+ two are not the same (perhaps due to a reboot), then a
+ dynamic replay can be initiated to acquire any missing
+ event records.";
+ }
+ }
+ }
+ }
+
+ notification subscription-suspended {
+ sn:subscription-state-notification;
+ description
+ "This notification indicates that a suspension of the
+ subscription by the publisher has occurred. No further
+ notifications will be sent until the subscription resumes.
+ This notification shall only be sent to receivers of a
+ subscription; it does not constitute a general-purpose
+ notification.";
+ leaf id {
+ type subscription-id;
+ mandatory true;
+ description
+ "This references the affected subscription.";
+ }
+ leaf reason {
+ type identityref {
+ base subscription-suspended-reason;
+ }
+ mandatory true;
+ description
+ "Identifies the condition that resulted in the suspension.";
+ }
+ }
+
+ notification subscription-terminated {
+ sn:subscription-state-notification;
+ description
+ "This notification indicates that a subscription has been
+ terminated.";
+ leaf id {
+ type subscription-id;
+ mandatory true;
+ description
+ "This references the affected subscription.";
+ }
+ leaf reason {
+ type identityref {
+ base subscription-terminated-reason;
+ }
+ mandatory true;
+ description
+ "Identifies the condition that resulted in the termination.";
+ }
+ }
+
+ /*
+ * DATA NODES
+ */
+
+ container streams {
+ config false;
+ description
+ "Contains information on the built-in event streams provided by
+ the publisher.";
+ list stream {
+ key "name";
+ description
+ "Identifies the built-in event streams that are supported by
+ the publisher.";
+ leaf name {
+ type string;
+ description
+ "A handle for a system-provided event stream made up of a
+ sequential set of event records, each of which is
+ characterized by its own domain and semantics.";
+ }
+ leaf description {
+ type string;
+ description
+ "A description of the event stream, including such
+ information as the type of event records that are
+ available in this event stream.";
+ }
+ leaf replay-support {
+ if-feature "replay";
+ type empty;
+ description
+ "Indicates that event record replay is available on this
+ event stream.";
+ }
+ leaf replay-log-creation-time {
+ when '../replay-support';
+ if-feature "replay";
+ type yang:date-and-time;
+ mandatory true;
+ description
+ "The timestamp of the creation of the log used to support
+ the replay function on this event stream. This time
+ might be earlier than the earliest available information
+ contained in the log. This object is updated if the log
+ resets for some reason.";
+ }
+ leaf replay-log-aged-time {
+ when '../replay-support';
+ if-feature "replay";
+ type yang:date-and-time;
+ description
+ "The timestamp associated with the last event record that
+ has been aged out of the log. This timestamp identifies
+ how far back in history this replay log extends, if it
+ doesn't extend back to the 'replay-log-creation-time'.
+ This object MUST be present if replay is supported and any
+ event records have been aged out of the log.";
+ }
+ }
+ }
+ container filters {
+ description
+ "Contains a list of configurable filters that can be applied to
+ subscriptions. This facilitates the reuse of complex filters
+ once defined.";
+ list stream-filter {
+ key "name";
+ description
+ "A list of preconfigured filters that can be applied to
+ subscriptions.";
+ leaf name {
+ type string;
+ description
+ "A name to differentiate between filters.";
+ }
+ uses stream-filter-elements;
+ }
+ }
+ container subscriptions {
+ description
+ "Contains the list of currently active subscriptions, i.e.,
+ subscriptions that are currently in effect, used for
+ subscription management and monitoring purposes. This
+ includes subscriptions that have been set up via
+ RPC primitives as well as subscriptions that have been
+ established via configuration.";
+ list subscription {
+ key "id";
+ description
+ "The identity and specific parameters of a subscription.
+ Subscriptions in this list can be created using a control
+ channel or RPC or can be established through configuration.
+
+ If the 'kill-subscription' RPC or configuration operations
+ 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-policy {
+ refine "target/stream/stream" {
+ description
+ "Indicates the event stream to be considered for this
+ subscription. If an event stream has been removed
+ and can no longer be referenced by an active
+ subscription, send a 'subscription-terminated'
+ notification with 'stream-unavailable' as the reason.
+ If a configured subscription refers to a nonexistent
+ event stream, move that subscription to the
+ 'invalid' state.";
+ }
+ refine "transport" {
+ description
+ "For a configured subscription, this leaf specifies the
+ transport used to deliver messages destined for all
+ receivers of that subscription. This object is
+ mandatory for subscriptions in the configuration
+ datastore. This object (1) is not mandatory for dynamic
+ subscriptions in the operational state datastore and
+ (2) should not be present for other types of dynamic
+ subscriptions.";
+ }
+ augment "target/stream" {
+ description
+ "Enables objects to be added to a configured stream
+ subscription.";
+ leaf configured-replay {
+ if-feature "configured";
+ if-feature "replay";
+ type empty;
+ description
+ "The presence of this leaf indicates that replay for
+ the configured subscription should start at the
+ earliest time in the event log or at the publisher
+ boot time, whichever is later.";
+ }
+ }
+ }
+ choice notification-message-origin {
+ if-feature "configured";
+ description
+ "Identifies the egress interface on the publisher
+ from which notification messages are to be sent.";
+ case interface-originated {
+ description
+ "When notification messages are to egress a specific,
+ designated interface on the publisher.";
+ leaf source-interface {
+ if-feature "interface-designation";
+ type if:interface-ref;
+ description
+ "References the interface for notification messages.";
+ }
+ }
+ case address-originated {
+ description
+ "When notification messages are to depart from a
+ publisher using a specific originating address and/or
+ routing context information.";
+ leaf source-vrf {
+ if-feature "supports-vrf";
+ type leafref {
+ path "/ni:network-instances/ni:network-instance/ni:name";
+ }
+ description
+ "VRF from which notification messages should egress a
+ publisher.";
+ }
+ leaf source-address {
+ type inet:ip-address-no-zone;
+ description
+ "The source address for the notification messages.
+ If a source VRF exists but this object doesn't, a
+ publisher's default address for that VRF must
+ be used.";
+ }
+ }
+ }
+ leaf configured-subscription-state {
+ if-feature "configured";
+ type enumeration {
+ enum valid {
+ value 1;
+ description
+ "The subscription is supportable with its current
+ parameters.";
+ }
+ enum invalid {
+ value 2;
+ description
+ "The subscription as a whole is unsupportable with its
+ current parameters.";
+ }
+ enum concluded {
+ value 3;
+ description
+ "A subscription is inactive, as it has hit a
+ stop time. It no longer has receivers in the
+ 'active' or 'suspended' state, but the subscription
+ has not yet been removed from configuration.";
+ }
+ }
+ config false;
+ description
+ "The presence of this leaf indicates that the subscription
+ originated from configuration, not through a control
+ channel or RPC. The value indicates the state of the
+ subscription as established by the publisher.";
+ }
+ container receivers {
+ description
+ "Set of receivers in a subscription.";
+ list receiver {
+ key "name";
+ min-elements 1;
+ description
+ "A host intended as a recipient for the notification
+ messages of a subscription. For configured
+ subscriptions, transport-specific network parameters
+ (or a leafref to those parameters) may be augmented to a
+ specific receiver in this list.";
+ leaf name {
+ type string;
+ description
+ "Identifies a unique receiver for a subscription.";
+ }
+ 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.";
+ }
+ leaf state {
+ type enumeration {
+ enum active {
+ value 1;
+ description
+ "The receiver is currently being sent any
+ applicable notification messages for the
+ subscription.";
+ }
+ enum suspended {
+ value 2;
+ description
+ "The receiver state is 'suspended', so the
+ publisher is currently unable to provide
+ notification messages for the subscription.";
+ }
+ enum connecting {
+ value 3;
+ if-feature "configured";
+ description
+ "A subscription has been configured, but a
+ 'subscription-started' subscription state change
+ notification needs to be successfully received
+ before notification messages are sent.
+
+ If the 'reset' action is invoked for a receiver of
+ an active configured subscription, the state
+ must be moved to 'connecting'.";
+ }
+ enum disconnected {
+ value 4;
+ if-feature "configured";
+ description
+ "A subscription has failed to send a
+ 'subscription-started' state change to the
+ receiver. Additional connection attempts are not
+ currently being made.";
+ }
+ }
+ config false;
+ mandatory true;
+ description
+ "Specifies the state of a subscription from the
+ perspective of a particular receiver. With this
+ information, it is possible to determine whether a
+ publisher is currently generating notification
+ messages intended for that receiver.";
+ }
+ action reset {
+ if-feature "configured";
+ description
+ "Allows the reset of this configured subscription's
+ receiver to the 'connecting' state. This enables the
+ connection process to be reinitiated.";
+ output {
+ leaf time {
+ type yang:date-and-time;
+ mandatory true;
+ description
+ "Time at which a publisher returned the receiver to
+ the 'connecting' state.";
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-library-semver@2024-03-02.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-library-semver@2025-01-07.yang
similarity index 98%
rename from experimental/ietf-extracted-YANG-modules/ietf-yang-library-semver@2024-03-02.yang
rename to experimental/ietf-extracted-YANG-modules/ietf-yang-library-semver@2025-01-07.yang
index 99ad72d97..74243f5e1 100644
--- a/experimental/ietf-extracted-YANG-modules/ietf-yang-library-semver@2024-03-02.yang
+++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-library-semver@2025-01-07.yang
@@ -65,8 +65,8 @@ module ietf-yang-library-semver {
// RFC Ed.: please replace ys:version with 1.0.0 and
// remove this note.
- revision 2024-03-02 {
- ys:version "1.0.0-draft-ietf-netmod-yang-semver-14";
+ revision 2025-01-07 {
+ ys:version "0.18.0";
description
"Initial revision";
reference
diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-push@2019-05-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-push@2019-09-09.yang
similarity index 56%
rename from experimental/ietf-extracted-YANG-modules/ietf-yang-push@2019-05-21.yang
rename to experimental/ietf-extracted-YANG-modules/ietf-yang-push@2019-09-09.yang
index 45ff9fbc0..ea38fb34e 100644
--- a/experimental/ietf-extracted-YANG-modules/ietf-yang-push@2019-05-21.yang
+++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-push@2019-09-09.yang
@@ -11,11 +11,7 @@ module ietf-yang-push {
import ietf-subscribed-notifications {
prefix sn;
reference
- "draft-ietf-netconf-subscribed-notifications:
- Customized Subscriptions to a Publisher's Event Streams
- NOTE TO RFC Editor: Please replace above reference to
- draft-ietf-netconf-subscribed-notifications with RFC number
- when published (i.e. RFC xxxx).";
+ "RFC 8639: Subscription to YANG Notifications";
}
import ietf-datastores {
prefix ds;
@@ -34,28 +30,19 @@ module ietf-yang-push {
}
organization
- "IETF NETCONF Working Group";
+ "IETF NETCONF (Network Configuration) Working Group";
contact
- "WG Web:
-
- WG List:
-
- Editor: Alexander Clemm
-
- Editor: Eric Voit
-
- Editor: Alberto Gonzalez Prieto
-
- Editor: Ambika Prasad Tripathy
-
- Editor: Einar Nilsen-Nygaard
-
- Editor: Andy Bierman
-
- Editor: Balazs Lengyel
- ";
+ "WG Web:
+ WG List:
+
+ Author: Alexander Clemm
+
+
+ Author: Eric Voit
+ ";
+
description
- "This module contains YANG specifications for YANG push.
+ "This module contains YANG specifications for YANG-Push.
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
@@ -73,26 +60,14 @@ module ietf-yang-push {
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 8641; see the
+ RFC itself for full legal notices.";
- // RFC Ed.: replace XXXX with actual RFC number and remove this
- // note.
-
- revision 2019-05-21 {
+ revision 2019-09-09 {
description
- "Initial revision.
- NOTE TO RFC EDITOR:
- (1)Please replace the above revision date to
- the date of RFC publication when published.
- (2) Please replace the date in the file name
- (ietf-yang-push@2019-05-21.yang) to the date of RFC
- publication.
- (3) Please replace the following reference to
- draft-ietf-netconf-yang-push-25 with RFC number when
- published (i.e. RFC xxxx).";
+ "Initial revision.";
reference
- "draft-ietf-netconf-yang-push-25";
+ "RFC 8641: Subscriptions to YANG Datastores";
}
/*
@@ -109,20 +84,21 @@ module ietf-yang-push {
* IDENTITIES
*/
- /* Error type identities for datastore subscription */
+ /* Error type identities for datastore subscription */
identity resync-subscription-error {
description
- "Problem found while attempting to fulfill an
+ "Problem found while attempting to fulfill a
'resync-subscription' RPC request.";
}
identity cant-exclude {
base sn:establish-subscription-error;
description
- "Unable to remove the set of 'excluded-changes'. This means
- the publisher is unable to restrict 'push-change-update's to
- just the change types requested for this subscription.";
+ "Unable to remove the set of 'excluded-change' parameters.
+ This means that the publisher is unable to restrict
+ 'push-change-update' notifications to just the change types
+ requested for this subscription.";
}
identity datastore-not-subscribable {
@@ -135,30 +111,30 @@ module ietf-yang-push {
identity no-such-subscription-resync {
base resync-subscription-error;
description
- "Referenced subscription doesn't exist. This may be as a result
- of a non-existent subscription ID, an ID which belongs to
- another subscriber, or an ID for configured subscription.";
+ "The referenced subscription doesn't exist. This may be as a
+ result of a nonexistent subscription ID, an ID that belongs to
+ another subscriber, or an ID for a configured subscription.";
}
identity on-change-unsupported {
base sn:establish-subscription-error;
description
- "On-change is not supported for any objects which are
+ "On-change is not supported for any objects that are
selectable by this filter.";
}
identity on-change-sync-unsupported {
base sn:establish-subscription-error;
description
- "Neither sync on start nor resynchronization are supported for
- this subscription. This error will be used for two
- reasons. First if an 'establish-subscription' RPC includes
- 'sync-on-start', yet the publisher can't support sending a
+ "Neither 'sync-on-start' nor resynchronization is supported for
+ this subscription. This error will be used for two reasons:
+ (1) if an 'establish-subscription' RPC includes
+ 'sync-on-start' but the publisher can't support sending a
'push-update' for this subscription for reasons other than
- 'on-change-unsupported' or 'sync-too-big'. And second, if the
- 'resync-subscription' RPC is invoked either for an existing
- periodic subscription, or for an on-change subscription which
- can't support resynchronization.";
+ 'on-change-unsupported' or 'sync-too-big'
+ (2) if the 'resync-subscription' RPC is invoked for either an
+ existing periodic subscription or an on-change subscription
+ that can't support resynchronization.";
}
identity period-unsupported {
@@ -166,10 +142,10 @@ module ietf-yang-push {
base sn:modify-subscription-error;
base sn:subscription-suspended-reason;
description
- "Requested time period or dampening-period is too short. This
- can be for both periodic and on-change subscriptions (with or
- without dampening.) Hints suggesting alternative periods may
- be returned as supplemental information.";
+ "The requested time period or 'dampening-period' is too short.
+ This can be for both periodic and on-change subscriptions
+ (with or without dampening). Hints suggesting alternative
+ periods may be returned as supplemental information.";
}
identity update-too-big {
@@ -177,9 +153,9 @@ module ietf-yang-push {
base sn:modify-subscription-error;
base sn:subscription-suspended-reason;
description
- "Periodic or on-change push update datatrees exceed a maximum
- size limit. Hints on estimated size of what was too big may
- be returned as supplemental information.";
+ "Periodic or on-change push update data trees exceed a maximum
+ size limit. Hints on the estimated size of what was too big
+ may be returned as supplemental information.";
}
identity sync-too-big {
@@ -188,9 +164,9 @@ module ietf-yang-push {
base resync-subscription-error;
base sn:subscription-suspended-reason;
description
- "Sync-on-start or resynchronization datatree exceeds a maximum
- size limit. Hints on estimated size of what was too big may
- be returned as supplemental information.";
+ "The 'sync-on-start' or resynchronization data tree exceeds a
+ maximum size limit. Hints on the estimated size of what was
+ too big may be returned as supplemental information.";
}
identity unchanging-selection {
@@ -198,13 +174,13 @@ module ietf-yang-push {
base sn:modify-subscription-error;
base sn:subscription-terminated-reason;
description
- "Selection filter is unlikely to ever select datatree nodes.
- This means that based on the subscriber's current access
- rights, the publisher recognizes that the selection filter is
- unlikely to ever select datatree nodes which change. Examples
- for this might be that node or subtree doesn't exist, read
- access is not permitted for a receiver, or static objects that
- only change at reboot have been chosen.";
+ "The selection filter is unlikely to ever select data tree
+ nodes. This means that based on the subscriber's current
+ access rights, the publisher recognizes that the selection
+ filter is unlikely to ever select data tree nodes that change.
+ Examples for this might be that the node or subtree doesn't
+ exist, read access is not permitted for a receiver, or static
+ objects that only change at reboot have been chosen.";
}
/*
@@ -215,13 +191,13 @@ module ietf-yang-push {
type enumeration {
enum create {
description
- "A change that refers to the creation of a new datastore
- node.";
+ "A change that refers to the creation of a new
+ datastore node.";
}
enum delete {
description
- "A change that refers to the deletion of a datastore
- node.";
+ "A change that refers to the deletion of a
+ datastore node.";
}
enum insert {
description
@@ -242,13 +218,14 @@ module ietf-yang-push {
description
"Specifies different types of datastore changes.
- This type is based on the edit operations defined for YANG
- Patch, with the difference that it is valid for a receiver to
- process an update record which performs a create operation on
- a datastore node the receiver believes exists, or to process a
- delete on a datastore node the receiver believes is missing.";
+ This type is based on the edit operations defined for
+ YANG Patch, with the difference that it is valid for a
+ receiver to process an update record that performs a
+ 'create' operation on a datastore node the receiver believes
+ exists or to process a delete on a datastore node the
+ receiver believes is missing.";
reference
- "RFC 8072: YANG Patch Media Type, section 2.5";
+ "RFC 8072: YANG Patch Media Type, Section 2.5";
}
typedef selection-filter-ref {
@@ -263,7 +240,7 @@ module ietf-yang-push {
type uint32;
description
"A period of time, measured in units of 0.01 seconds.";
- }
+ }
/*
* GROUP DEFINITIONS
@@ -271,9 +248,8 @@ module ietf-yang-push {
grouping datastore-criteria {
description
- "A grouping to define criteria for which selected objects
- from a targeted datastore should be included in push
- updates.";
+ "A grouping to define criteria for which selected objects from
+ a targeted datastore should be included in push updates.";
leaf datastore {
type identityref {
base ds:datastore;
@@ -298,43 +274,50 @@ module ietf-yang-push {
"This parameter identifies the portions of the
target datastore to retrieve.";
reference
- "RFC 6241: Network Configuration Protocol, Section 6.";
+ "RFC 6241: Network Configuration Protocol (NETCONF),
+ Section 6";
}
leaf datastore-xpath-filter {
if-feature "sn:xpath";
type yang:xpath1.0;
description
"This parameter contains an XPath expression identifying
- the portions of the target datastore to retrieve.
+ the portions of the target datastore to retrieve.
- If the expression returns a node-set, all nodes in the
- node-set are selected by the filter. Otherwise, if the
- expression does not return a node-set, the filter
- doesn't select any nodes.
+ If the expression returns a node set, all nodes in the
+ node set are selected by the filter. Otherwise, if the
+ expression does not return a node set, the filter
+ doesn't select any nodes.
- The expression is evaluated in the following XPath
- context:
+ The expression is evaluated in the following XPath
+ context:
- o The set of namespace declarations is the set of prefix
- and namespace pairs for all YANG modules implemented
- by the server, where the prefix is the YANG module
- name and the namespace is as defined by the
- 'namespace' statement in the YANG module.
+ o The set of namespace declarations is the set of prefix
+ and namespace pairs for all YANG modules implemented
+ by the server, where the prefix is the YANG module
+ name and the namespace is as defined by the
+ 'namespace' statement in the YANG module.
- If the leaf is encoded in XML, all namespace
- declarations in scope on the 'stream-xpath-filter'
- leaf element are added to the set of namespace
- declarations. If a prefix found in the XML is
- already present in the set of namespace declarations,
- the namespace in the XML is used.
+ If the leaf is encoded in XML, all namespace
+ declarations in scope on the 'stream-xpath-filter'
+ leaf element are added to the set of namespace
+ declarations. If a prefix found in the XML is
+ already present in the set of namespace declarations,
+ the namespace in the XML is used.
- o The set of variable bindings is empty.
+ o The set of variable bindings is empty.
- o The function library is the core function library, and
- the XPath functions defined in section 10 in RFC 7950.
+ o The function library is comprised of the core
+ function library and the XPath functions defined in
+ Section 10 in RFC 7950.
- o The context node is the root node of the target
- datastore.";
+ o The context node is the root node of the target
+ datastore.";
+ reference
+ "XML Path Language (XPath) Version 1.0
+ (https://www.w3.org/TR/1999/REC-xpath-19991116)
+ RFC 7950: The YANG 1.1 Data Modeling Language,
+ Section 10";
}
}
}
@@ -346,23 +329,23 @@ module ietf-yang-push {
choice selection-filter {
description
"The source of the selection filter applied to the
- subscription. This will come either referenced from a global
- list, or be provided within the subscription itself.";
+ subscription. This will either (1) come referenced from a
+ global list or (2) be provided in the subscription itself.";
case by-reference {
description
- "Incorporate a filter that has been configured
+ "Incorporates a filter that has been configured
separately.";
leaf selection-filter-ref {
type selection-filter-ref;
mandatory true;
description
- "References an existing selection filter which is to be
+ "References an existing selection filter that is to be
applied to the subscription.";
}
}
case within-subscription {
description
- "Local definition allows a filter to have the same
+ "A local definition allows a filter to have the same
lifecycle as the subscription.";
uses selection-filter-types;
}
@@ -371,7 +354,7 @@ module ietf-yang-push {
grouping update-policy-modifiable {
description
- "This grouping describes the datastore specific subscription
+ "This grouping describes the datastore-specific subscription
conditions that can be changed during the lifetime of the
subscription.";
choice update-trigger {
@@ -382,26 +365,27 @@ module ietf-yang-push {
container periodic {
presence "indicates a periodic subscription";
description
- "The publisher is requested to notify periodically the
- current values of the datastore as defined by the
- selection filter.";
+ "The publisher is requested to periodically notify the
+ receiver regarding the current values of the datastore
+ as defined by the selection filter.";
leaf period {
type centiseconds;
mandatory true;
description
- "Duration of time which should occur between periodic
- push updates, in one hundredths of a second.";
+ "Duration of time that should occur between periodic
+ push updates, in units of 0.01 seconds.";
}
leaf anchor-time {
type yang:date-and-time;
description
"Designates a timestamp before or after which a series
- of periodic push updates are determined. The next
- update will take place at a whole multiple interval
- from the anchor time. For example, for an anchor time
- is set for the top of a particular minute and a period
- interval of a minute, updates will be sent at the top
- of every minute this subscription is active.";
+ of periodic push updates are determined. The next
+ update will take place at a point in time that is a
+ multiple of a period from the 'anchor-time'.
+ For example, for an 'anchor-time' that is set for the
+ top of a particular minute and a period interval of a
+ minute, updates will be sent at the top of every
+ minute that this subscription is active.";
}
}
}
@@ -410,22 +394,22 @@ module ietf-yang-push {
container on-change {
presence "indicates an on-change subscription";
description
- "The publisher is requested to notify changes in values
- in the datastore subset as defined by a selection
- filter.";
+ "The publisher is requested to notify the receiver
+ regarding changes in values in the datastore subset as
+ defined by a selection filter.";
leaf dampening-period {
type centiseconds;
default "0";
description
"Specifies the minimum interval between the assembly of
successive update records for a single receiver of a
- subscription. Whenever subscribed objects change, and
- a dampening period interval (which may be zero) has
+ subscription. Whenever subscribed objects change and
+ a dampening-period interval (which may be zero) has
elapsed since the previous update record creation for
- a receiver, then any subscribed objects and properties
- which have changed since the previous update record
+ a receiver, any subscribed objects and properties
+ that have changed since the previous update record
will have their current values marshalled and placed
- into a new update record.";
+ in a new update record.";
}
}
}
@@ -439,44 +423,45 @@ module ietf-yang-push {
uses update-policy-modifiable {
augment "update-trigger/on-change/on-change" {
description
- "Includes objects not modifiable once subscription is
- established.";
+ "Includes objects that are not modifiable once a
+ subscription is established.";
leaf sync-on-start {
type boolean;
default "true";
description
- "When this object is set to false, it restricts an
- on-change subscription from sending push-update
- notifications. When false, pushing a full selection per
- the terms of the selection filter MUST NOT be done for
- this subscription. Only updates about changes,
- i.e. only push-change-update notifications are sent.
- When true (default behavior), in order to facilitate a
- receiver's synchronization, a full update is sent when
- the subscription starts using a push-update
- notification. After that, push-change-update
- notifications are exclusively sent unless the publisher
- chooses to resync the subscription via a new push-update
- notification.";
+ "When this object is set to 'false', (1) it restricts an
+ on-change subscription from sending 'push-update'
+ notifications and (2) pushing a full selection per the
+ terms of the selection filter MUST NOT be done for
+ this subscription. Only updates about changes
+ (i.e., only 'push-change-update' notifications)
+ are sent. When set to 'true' (the default behavior),
+ in order to facilitate a receiver's synchronization,
+ a full update is sent, via a 'push-update' notification,
+ when the subscription starts. After that,
+ 'push-change-update' notifications are exclusively sent,
+ unless the publisher chooses to resync the subscription
+ via a new 'push-update' notification.";
}
leaf-list excluded-change {
type change-type;
description
- "Use to restrict which changes trigger an update. For
- example, if modify is excluded, only creation and
- deletion of objects is reported.";
+ "Used to restrict which changes trigger an update. For
+ example, if a 'replace' operation is excluded, only the
+ creation and deletion of objects are reported.";
}
}
}
}
+
grouping hints {
description
- "Parameters associated with some error for a subscription
+ "Parameters associated with an error for a subscription
made upon a datastore.";
leaf period-hint {
type centiseconds;
description
- "Returned when the requested time period is too short. This
+ "Returned when the requested time period is too short. This
hint can assert a viable period for either a periodic push
cadence or an on-change dampening interval.";
}
@@ -489,31 +474,31 @@ module ietf-yang-push {
leaf object-count-estimate {
type uint32;
description
- "If there are too many objects which could potentially be
+ "If there are too many objects that could potentially be
returned by the selection filter, this identifies the
- estimate of the number of objects which the filter would
+ estimate of the number of objects that the filter would
potentially pass.";
}
leaf object-count-limit {
type uint32;
description
- "If there are too many objects which could be returned by
+ "If there are too many objects that could be returned by
the selection filter, this identifies the upper limit of
- the publisher's ability to service for this subscription.";
+ the publisher's ability to service this subscription.";
}
leaf kilobytes-estimate {
type uint32;
description
"If the returned information could be beyond the capacity
- of the publisher, this would identify the data size which
- could result from this selection filter.";
+ of the publisher, this would identify the estimated
+ data size that could result from this selection filter.";
}
leaf kilobytes-limit {
type uint32;
description
"If the returned information would be beyond the capacity
of the publisher, this identifies the upper limit of the
- publisher's ability to service for this subscription.";
+ publisher's ability to service this subscription.";
}
}
@@ -527,11 +512,11 @@ module ietf-yang-push {
"This RPC allows a subscriber of an active on-change
subscription to request a full push of objects.
- A successful invocation results in a push-update of all
+ A successful invocation results in a 'push-update' of all
datastore nodes that the subscriber is permitted to access.
This RPC can only be invoked on the same session on which the
- subscription is currently active. In case of an error, a
- resync-subscription-error is sent as part of an error
+ subscription is currently active. In the case of an error, a
+ 'resync-subscription-error' is sent as part of an error
response.";
input {
leaf id {
@@ -548,9 +533,9 @@ module ietf-yang-push {
description
"If a 'resync-subscription' RPC fails, the subscription is
not resynced and the RPC error response MUST indicate the
- reason for this failure. This YANG-data MAY be inserted as
- structured data within a subscription's RPC error response
- to indicate the failure reason.";
+ reason for this failure. This yang-data MAY be inserted as
+ structured data in a subscription's RPC error response
+ to indicate the reason for the failure.";
leaf reason {
type identityref {
base resync-subscription-error;
@@ -577,7 +562,7 @@ module ietf-yang-push {
for the subscription to RPC input.";
case datastore {
description
- "Information specifying the parameters of an request for a
+ "Information specifying the parameters of a request for a
datastore subscription.";
uses datastore-criteria;
}
@@ -589,11 +574,11 @@ module ietf-yang-push {
"If any 'establish-subscription' RPC parameters are
unsupportable against the datastore, a subscription is not
created and the RPC error response MUST indicate the reason
- why the subscription failed to be created. This YANG-data
- MAY be inserted as structured data within a subscription's
- RPC error response to indicate the failure reason. This
- YANG-data MUST be inserted if hints are to be provided back
- to the subscriber.";
+ why the subscription failed to be created. This yang-data
+ MAY be inserted as structured data in a subscription's
+ RPC error response to indicate the reason for the failure.
+ This yang-data MUST be inserted if hints are to be provided
+ back to the subscriber.";
leaf reason {
type identityref {
base sn:establish-subscription-error;
@@ -619,7 +604,7 @@ module ietf-yang-push {
for the subscription to RPC input.";
case datastore {
description
- "Information specifying the parameters of an request for a
+ "Information specifying the parameters of a request for a
datastore subscription.";
uses datastore-criteria;
}
@@ -628,11 +613,11 @@ module ietf-yang-push {
rc:yang-data modify-subscription-datastore-error-info {
container modify-subscription-datastore-error-info {
description
- "This YANG-data MAY be provided as part of a subscription's
+ "This yang-data MAY be provided as part of a subscription's
RPC error response when there is a failure of a
- 'modify-subscription' RPC which has been made against a
- datastore. This YANG-data MUST be used if hints are to be
- provides back to the subscriber.";
+ 'modify-subscription' RPC that has been made against a
+ datastore. This yang-data MUST be used if hints are to be
+ provided back to the subscriber.";
leaf reason {
type identityref {
base sn:modify-subscription-error;
@@ -651,36 +636,36 @@ module ietf-yang-push {
notification push-update {
description
- "This notification contains a push update, containing data
- subscribed to via a subscription. This notification is sent
- for periodic updates, for a periodic subscription. It can
- also be used for synchronization updates of an on-change
- subscription. This notification shall only be sent to
- receivers of a subscription. It does not constitute a
- general-purpose notification that would be subscribable as
+ "This notification contains a push update that in turn contains
+ data subscribed to via a subscription. In the case of a
+ periodic subscription, this notification is sent for periodic
+ updates. It can also be used for synchronization updates of
+ an on-change subscription. This notification shall only be
+ sent to receivers of a subscription. It does not constitute
+ a general-purpose notification that would be subscribable as
part of the NETCONF event stream by any receiver.";
leaf id {
type sn:subscription-id;
description
- "This references the subscription which drove the
+ "This references the subscription that drove the
notification to be sent.";
}
anydata datastore-contents {
description
"This contains the updated data. It constitutes a snapshot
- at the time-of-update of the set of data that has been
+ at the time of update of the set of data that has been
subscribed to. The snapshot corresponds to the same
- snapshot that would be returned in a corresponding get
+ snapshot that would be returned in a corresponding 'get'
operation with the same selection filter parameters
applied.";
}
leaf incomplete-update {
type empty;
description
- "This is a flag which indicates that not all datastore
+ "This is a flag that indicates that not all datastore
nodes subscribed to are included with this update. In
other words, the publisher has failed to fulfill its full
- subscription obligations, and despite its best efforts is
+ subscription obligations and, despite its best efforts, is
providing an incomplete set of objects.";
}
}
@@ -688,33 +673,33 @@ module ietf-yang-push {
notification push-change-update {
if-feature "on-change";
description
- "This notification contains an on-change push update. This
+ "This notification contains an on-change push update. This
notification shall only be sent to the receivers of a
- subscription. It does not constitute ageneral-purpose
+ subscription. It does not constitute a general-purpose
notification that would be subscribable as part of the
NETCONF event stream by any receiver.";
leaf id {
type sn:subscription-id;
description
- "This references the subscription which drove the
+ "This references the subscription that drove the
notification to be sent.";
}
container datastore-changes {
description
"This contains the set of datastore changes of the target
- datastore starting at the time of the previous update, per
+ datastore, starting at the time of the previous update, per
the terms of the subscription.";
uses ypatch:yang-patch;
}
leaf incomplete-update {
type empty;
description
- "The presence of this object indicates not all changes which
- have occurred since the last update are included with this
- update. In other words, the publisher has failed to
- fulfill its full subscription obligations, for example in
- cases where it was not able to keep up with a change
- burst.";
+ "The presence of this object indicates that not all changes
+ that have occurred since the last update are included with
+ this update. In other words, the publisher has failed to
+ fulfill its full subscription obligations -- for example,
+ in cases where it was not able to keep up with a burst of
+ changes.";
}
}
@@ -735,9 +720,9 @@ module ietf-yang-push {
description
"Specifies the selection filter and where it originated
from. If the 'selection-filter-ref' is populated, the
- filter within the subscription came from the 'filters'
- container. Otherwise it is populated in-line as part of
- the subscription itself.";
+ filter in the subscription came from the 'filters'
+ container. Otherwise, it is populated in-line as part
+ of the subscription itself.";
}
}
}
@@ -761,9 +746,9 @@ module ietf-yang-push {
description
"Specifies the selection filter and where it originated
from. If the 'selection-filter-ref' is populated, the
- filter within the subscription came from the 'filters'
- container. Otherwise it is populated in-line as part of
- the subscription itself.";
+ filter in the subscription came from the 'filters'
+ container. Otherwise, it is populated in-line as part
+ of the subscription itself.";
}
}
}
@@ -776,11 +761,11 @@ module ietf-yang-push {
augment "/sn:filters" {
description
"This augmentation allows the datastore to be included as part
- of the selection filtering criteria for a subscription.";
+ of the selection-filtering criteria for a subscription.";
list selection-filter {
key "filter-id";
description
- "A list of pre-configured filters that can be applied
+ "A list of preconfigured filters that can be applied
to datastore subscriptions.";
leaf filter-id {
type string;
@@ -795,15 +780,16 @@ module ietf-yang-push {
augment "/sn:subscriptions/sn:subscription" {
when 'yp:datastore';
description
- "This augmentation adds many datastore specific objects to a
- subscription.";
+ "This augmentation adds objects to a subscription that are
+ specific to a datastore subscription, i.e., a subscription to
+ a stream of datastore node updates.";
uses update-policy;
}
augment "/sn:subscriptions/sn:subscription/sn:target" {
description
"This augmentation allows the datastore to be included as
- part of the selection filtering criteria for a subscription.";
+ part of the selection-filtering criteria for a subscription.";
case datastore {
uses datastore-criteria;
}
diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-semver@2024-07-02.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-semver@2025-01-07.yang
similarity index 82%
rename from experimental/ietf-extracted-YANG-modules/ietf-yang-semver@2024-07-02.yang
rename to experimental/ietf-extracted-YANG-modules/ietf-yang-semver@2025-01-07.yang
index 35ed77854..0ff7991df 100644
--- a/experimental/ietf-extracted-YANG-modules/ietf-yang-semver@2024-07-02.yang
+++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-semver@2025-01-07.yang
@@ -50,8 +50,8 @@ module ietf-yang-semver {
// note.
// RFC Ed. update the ys:version to "1.0.0".
- revision 2024-07-02 {
- ys:version "1.0.0-draft-ietf-netmod-yang-semver-17";
+ revision 2025-01-07 {
+ ys:version "0.18.0";
description
"Initial revision";
reference
@@ -87,7 +87,7 @@ module ietf-yang-semver {
version.";
reference
"XXXX: YANG Semantic Versioning;
- Section 3.2, YANG Semantic Version Extension";
+ Section 4.2, YANG Semantic Version Extension";
}
extension recommended-min-version {
@@ -97,40 +97,34 @@ module ietf-yang-semver {
one that is greater than or equal to the specified version.
The format of the recommended-min-version extension argument
- MUST conform to the 'version' typedef defined in this module.
+ must be the MAJOR.MINOR.PATCH components from the
+ 'version' typedef defined in this module (i.e., excluding
+ the '_compatible' and '_non_compatible' modifiers as
+ well as any metadata).
The statement MUST only be a substatement of the import
- statement. Zero, one or more 'recommended-min-version'
+ statement. Zero or one 'recommended-min-version'
statements per parent statement are allowed. No
substatements for this extension have been
standardized.
- If specified multiple times, then any module revision that
- satisfies at least one of the 'recommended-min-version'
- statements is an acceptable recommended version for
- import.
-
A module to be imported is considered as meeting the
recommended minimum version criteria if it meets one of
the following conditions:
- * Has the exact MAJOR, MINOR, PATCH and '_compatible' or
- '_non_compatible' modifiers as in the
+ * Has the exact same MAJOR, MINOR, PATCH as in the
recommend-min-version value.
* Has the same MAJOR and MINOR version numbers and a
- greater PATCH number. In this case, '_compatible' and
- '_non_compatible modifiers' are ignored.
+ greater PATCH number.
* Has the same MAJOR version number and greater MINOR number.
- In this case the PATCH number and the '_compatible' and
- '_non_compatible' modifiers are ignored.
+ In this case the PATCH number is ignored.
* Has a greater MAJOR version number. In this case MINOR
- and PATCH numbers and '_compatible' and '_non_compatible'
- modifiers are ignored.
+ and PATCH numbers are ignored.
Adding, removing or updating a 'recommended-min-version'
statement to an import is a backwards-compatible change.";
reference
- "XXXX: YANG Semantic Versioning; Section 4,
+ "XXXX: YANG Semantic Versioning; Section 5,
Import Module by Semantic Version";
}
@@ -140,6 +134,7 @@ module ietf-yang-semver {
typedef version {
type string {
+ length "5..128";
pattern '[0-9]+[.][0-9]+[.][0-9]+(_(non_)?compatible)?'
+ '(-[A-Za-z0-9.-]+[.-][0-9]+)?([+][A-Za-z0-9.-]+)?';
}
@@ -151,3 +146,4 @@ module ietf-yang-semver {
"RFC XXXX: YANG Semantic Versioning.";
}
}
+
diff --git a/standard/ietf/RFC/iana-msd-types.yang b/standard/ietf/RFC/iana-msd-types.yang
new file mode 120000
index 000000000..52cb1dabc
--- /dev/null
+++ b/standard/ietf/RFC/iana-msd-types.yang
@@ -0,0 +1 @@
+iana-msd-types@2025-01-10.yang
\ No newline at end of file
diff --git a/standard/ietf/RFC/iana-msd-types@2025-01-10.yang b/standard/ietf/RFC/iana-msd-types@2025-01-10.yang
new file mode 100644
index 000000000..491c40fda
--- /dev/null
+++ b/standard/ietf/RFC/iana-msd-types@2025-01-10.yang
@@ -0,0 +1,130 @@
+module iana-msd-types {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:iana-msd-types";
+ prefix iana-msd-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 Maximum Segment
+ Identifier (SID) Depth (MSD) Types.
+
+ This YANG module is maintained by IANA and reflects the 'IGP
+ MSD-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 9702
+ (https://www.rfc-editor.org/info/rfc9702); see the RFC itself
+ for full legal notices.
+
+ The latest version of this YANG module is available at
+ https://www.iana.org/assignments/yang-parameters.";
+
+ revision 2025-01-10 {
+ description
+ "Initial Version";
+ reference
+ "RFC 9702: YANG Data Model for Maximum Segment Identifier (SID)
+ Depth Types and MPLS Maximum SID Depth";
+ }
+
+ identity msd-base {
+ description
+ "Base identity for Maximum SID Depth (MSD) Type. The MSD type
+ definition is defined in the IANA 'IGP MSD-Types' registry.";
+ }
+
+ identity msd-base-mpls {
+ base msd-base;
+ description
+ "Base identity of MSD types for the MPLS data plane.";
+ }
+
+ identity base-mpls-imposition-msd {
+ base msd-base-mpls;
+ description
+ "Base MPLS Imposition MSD.";
+ reference
+ "RFC 8491: Signaling Maximum SID Depth (MSD) Using IS-IS
+ RFC 8476: Signaling Maximum SID Depth (MSD) Using OSPF
+ RFC 8664: Path Computation Element Communication Protocol
+ (PCEP) Extensions for Segment Routing
+ RFC 8814: Signaling Maximum SID Depth (MSD) Using the Border
+ Gateway Protocol - Link State";
+ }
+
+ identity erld-msd {
+ base msd-base-mpls;
+ description
+ "msd-erld is defined to advertise the Entropy Readable
+ Label Depth (ERLD).";
+ reference
+ "RFC 8662: Entropy Label for Source Packet Routing in
+ Networking (SPRING) Tunnels
+ RFC 9088: Signaling Entropy Label Capability and Entropy
+ Readable Label Depth Using IS-IS";
+ }
+
+ identity msd-base-srh {
+ base msd-base;
+ description
+ "Base identity of MSD types for Segment Routing Header (SRH).";
+ }
+
+ identity srh-max-sl {
+ base msd-base-srh;
+ description
+ "The Maximum Segments Left MSD type.";
+ reference
+ "RFC 9352: IS-IS Extensions to Support Segment Routing
+ over the IPv6 Data Plane";
+ }
+
+ identity srh-max-end-pop {
+ base msd-base-srh;
+ description
+ "The Maximum End Pop MSD Type.";
+ reference
+ "RFC 9352: IS-IS Extensions to Support Segment Routing
+ over the IPv6 Data Plane";
+ }
+
+ identity srh-max-h-encaps {
+ base msd-base-srh;
+ description
+ "The Maximum H.Encaps MSD Type.";
+ reference
+ "RFC 9352: IS-IS Extensions to Support Segment Routing
+ over the IPv6 Data Plane";
+ }
+
+ identity srh-max-end-d {
+ base msd-base-srh;
+ description
+ "The Maximum End D MSD Type.";
+ reference
+ "RFC 9352: IS-IS Extensions to Support Segment Routing
+ over the IPv6 Data Plane";
+ }
+}
diff --git a/standard/ietf/RFC/ietf-mpls-msd.yang b/standard/ietf/RFC/ietf-mpls-msd.yang
new file mode 120000
index 000000000..a61df94a4
--- /dev/null
+++ b/standard/ietf/RFC/ietf-mpls-msd.yang
@@ -0,0 +1 @@
+ietf-mpls-msd@2025-01-10.yang
\ No newline at end of file
diff --git a/standard/ietf/RFC/ietf-mpls-msd@2025-01-10.yang b/standard/ietf/RFC/ietf-mpls-msd@2025-01-10.yang
new file mode 100644
index 000000000..6161cea3d
--- /dev/null
+++ b/standard/ietf/RFC/ietf-mpls-msd@2025-01-10.yang
@@ -0,0 +1,118 @@
+module ietf-mpls-msd {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-msd";
+ prefix mpls-msd;
+
+ import ietf-routing {
+ prefix rt;
+ reference
+ "RFC 8349: A YANG Data Model for Routing
+ Management (NMDA Version)";
+ }
+ import ietf-mpls {
+ prefix mpls;
+ reference
+ "RFC 8960: A YANG Data Model for MPLS Base";
+ }
+ import iana-msd-types {
+ prefix iana-msd-types;
+ }
+
+ organization
+ "IETF Multiprotocol Label Switching (MPLS) Working Group";
+ contact
+ "WG Web:
+ WG List:
+
+ Author: Yingzhen Qu
+
+ Author: Acee Lindem
+
+ Author: Stephane Litkowski
+
+ Author: Jeff Tantsura
+
+
+ ";
+ description
+ "This YANG module augments the base MPLS model, and it is to
+ provide support for different types of Maximum SID Depth (MSD).
+
+ This YANG module 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 9702;
+ see the RFC itself for full legal notices.";
+
+ revision 2025-01-10 {
+ description
+ "Initial Version";
+ reference
+ "RFC 9702: YANG Data Model for Maximum Segment Identifier (SID)
+ Depth Types and MPLS Maximum SID Depth";
+ }
+
+ grouping msd-type-value {
+ description
+ "Grouping for MSD type and value.";
+ leaf msd-type {
+ type identityref {
+ base iana-msd-types:msd-base-mpls;
+ }
+ description
+ "MSD types. The MSD type is defined in IANA 'IGP
+ MSD-Types' registry.";
+ }
+ leaf msd-value {
+ type uint8;
+ description
+ "MSD value, in the range of 0-255. 0 represents the lack
+ of ability to support a SID stack of any depth.";
+ }
+ }
+ augment "/rt:routing/mpls:mpls" {
+ description
+ "This module augments MPLS data model (RFC 8960)
+ with Node MSD.";
+ container node-msds {
+ config false;
+ description
+ "Maximum SID Depth (MSD) of a node.";
+ list node-msd {
+ key "msd-type";
+ uses msd-type-value;
+ description
+ "List of different types of Node MSDs. For the same
+ type, the value of Node MSD is the smallest among Link MSD
+ values.";
+ }
+ }
+ }
+
+ augment "/rt:routing/mpls:mpls/mpls:interfaces/mpls:interface" {
+ description
+ "This module augments MPLS data model (RFC 8960)
+ with Link MSD.";
+ container link-msds {
+ config false;
+ description
+ "Maximum SID Depth (MSD) of an interface.";
+ list link-msd {
+ key "msd-type";
+ uses msd-type-value;
+ description
+ "List of different types of MSDs on the link.";
+ }
+ }
+ }
+}