<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-netconf-yang-push-2-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="YANG-Push v2">YANG Datastore Telemetry (YANG Push version 2)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-yang-push-2-00"/>
    <author fullname="Robert Wilton" role="editor">
      <organization>Cisco Systems</organization>
      <address>
        <email>rwilton@cisco.com</email>
      </address>
    </author>
    <author fullname="Holger Keller">
      <organization>Deuetsche Telekom</organization>
      <address>
        <email>Holger.Keller@telekom.de</email>
      </address>
    </author>
    <author fullname="Benoit Claise">
      <organization>Everything OPS</organization>
      <address>
        <email>benoit@everything-ops.net</email>
      </address>
    </author>
    <author fullname="Ebben Aries">
      <organization>Juniper</organization>
      <address>
        <email>exa@juniper.net</email>
      </address>
    </author>
    <author fullname="James Cumming">
      <organization>Nokia</organization>
      <address>
        <email>james.cumming@nokia.com</email>
      </address>
    </author>
    <author fullname="Thomas Graf">
      <organization>Swisscom</organization>
      <address>
        <email>Thomas.Graf@swisscom.com</email>
      </address>
    </author>
    <date year="2026" month="June" day="23"/>
    <area>Operations and Management</area>
    <workgroup>Network Configuration</workgroup>
    <keyword>YANG Push</keyword>
    <keyword>Observability</keyword>
    <keyword>Network Telemetry</keyword>
    <keyword>Operational Data</keyword>
    <abstract>
      <?line 129?>

<t>YANG Push version 2 is a YANG datastore telemetry solution, as an alternative lightweight specification to the Subscribed Notifications and YANG Push solution, specifically optimized for the efficient observability of operational data.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://rgwilton.github.io/draft-yp-observability/draft-wilton-netconf-yp-observability.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-netconf-yang-push-2/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Network Configuration Working Group mailing list (<eref target="mailto:netconf@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/netconf/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/netconf/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/rgwilton/draft-yp-observability"/>.</t>
    </note>
  </front>
  <middle>
    <?line 133?>

<section anchor="document-status">
      <name>Document Status</name>
      <t><em>RFC Editor: If present, please remove this section before publication.</em>
        <em>RFC Editor: Please replace 'RFC XXXX' with the RFC number for this RFC.</em></t>
      <t>Based on the feedback received during the IETF 121 NETCONF session, this document has currently been written as a self-contained lightweight protocol and document replacement for <xref target="RFC8639"/> and <xref target="RFC8641"/>, defining a separate configuration data model.</t>
      <t><strong>The comparison between YANG Push and YANG Push v2 is now in <xref target="DifferencesFromYangPush"/>.</strong></t>
      <t><strong>Open issues are either now being tracked inline in the text or in <xref target="OpenIssuesTracker"/> for the higher level issues.</strong></t>
    </section>
    <section anchor="conventions">
      <name>Conventions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>All <em>YANG tree diagrams</em> used in this document follow the notation
defined in <xref target="RFC8340"/>.</t>
    </section>
    <section anchor="introduction">
      <name>Introduction</name>
      <t><xref target="I-D.ietf-nmop-yang-message-broker-integration"/> describes an architecture for how YANG datastore telemetry, e.g., <xref target="RFC8641"/>, can be integrated effectively with message brokers, e.g., <xref target="Kafka"/>, that forms part of a wider architecture for a <em>Network Anomaly Detection Framework</em>, specified in <xref target="I-D.ietf-nmop-network-anomaly-architecture"/>.</t>
      <t>This document specifies "YANG Push v2", an lightweight alternative to Subscribed Notifications <xref target="RFC8639"/> and YANG Push <xref target="RFC8641"/>. YANG Push v2 is a separate YANG datastore telemetry solution, which can be implemented independently or, if desired, alongside <xref target="RFC8639"/> and <xref target="RFC8641"/>.</t>
      <t>At a high level, YANG Push v2 is designed to solve a similar set of requirements as YANG Push, and it reuses a significant subset of the ideas and base solution from YANG Push.  YANG Push v2 defines a separate data model to allow concurrent implementation of both protocols and to facilitate more significant changes in behavior, but many of the data nodes are taken from YANG Push and have the same, or very similar definitions.</t>
      <t>The following sections give the background for the solution, and highlight the key ways that this specification differs from the specifications that it is derived from.</t>
      <section anchor="background-and-motivation-for-yang-push-v2">
        <name>Background and Motivation for YANG Push v2</name>
        <t>A push based telemetry solution, as described both in this document and also the YANG Push solution described by <xref target="RFC8639"/> and <xref target="RFC8641"/>, is beneficial because it allows operational data to be exported by publishers more immediately and efficiently compared to legacy poll based mechanisms, such as SNMP <xref target="RFC3411"/>.  Some further background information on the general motivations for push based telemetry, which equally apply here, can be found in the <em>Motivation</em> (section 1.1) of <xref target="RFC8639"/> and the Introduction (section 1) of <xref target="RFC8641"/>.  The remainder of this section is focused on the reasons why a new lightweight version of YANG Push has been specified, and what problems is aims to solve.</t>
        <t>Early implementation efforts of the <xref target="I-D.ietf-nmop-yang-message-broker-integration"/> architecture hit issues with using either of the two common YANG datastore telemetry solutions that have been specified, i.e., <xref target="gNMI"/> or YANG Push <xref target="RFC8641"/>.</t>
        <t>gNMI is specified by the OpenConfig Industry Consortium.  It is more widely implemented, but operators report that some inter-operability issues between device implementations cause problems.  Many of the OpenConfig protocols and data models are also expected to evolve more rapidly than IETF protocols and models - that are expected to have a more gradual pace of evolution once an RFC has been published.</t>
        <t>YANG Push <xref target="RFC8641"/> was standardized by the IETF in 2019, but market adoption has been rather slow.  During 2023/2024, when vendors started implementing, or considering implementing, YANG Push, it was seen that some design choices for how particular features have been specified in the solution make it expensive and difficult to write performant implementations, particularly when considering the complexities and distributed nature of operational data.  In addition, some design choices of how the data is encoded (e.g., YANG Patch <xref target="RFC8072"/>) make more sense when considering changes in configuration data but less sense when the goal is to export a subset of the operational data off the device in an efficient fashion for both devices (publishers) and clients (receivers).</t>
        <t>Hence, during 2024, the vendors and operators working towards YANG telemetry solutions agreed to a plan to implement a subset of <xref target="RFC8639"/> and <xref target="RFC8641"/>, including common agreements of features that are not needed and would not be implemented, and deviations from the standards for some aspects of encoding YANG data.  In addition, the implementation efforts identified the minimal subset of functionality needed to support the initial telemetry use cases, and areas of potential improvement and optimization to the overall YANG Push telemetry solution (which has been written up as a set of small internet drafts that augment or extend the base YANG Push solution).</t>
        <t>Out of this work, consensus was building to specify a cut down version of Subscribed Notifications <xref target="RFC8639"/> and YANG Push <xref target="RFC8641"/> that is both more focussed on the operational telemetry use case and is also easier to implement, achieved by relaxing some of the constraints on consistency on the device, and removing, or simplifying some of the operational features.  This has resulted in this specification, YANG Push v2.</t>
        <t>The implementation efforts also gave rise to potential improvements to the protocol and encoding of notification messages.</t>
      </section>
      <section anchor="OperationalModellingComplexities">
        <name>Complexities in Modelling the Operational State Datastore</name>
        <t>The YANG abstraction of a single datastore of related consistent data works very well for configuration that has a strong requirement to be self consistent, and that is always updated, and validated, in a transactional way.  But for producers of telemetry data, the YANG abstraction of a single operational datastore is not really possible for devices managing a non-trivial quantity of operational data.</t>
        <t>Some systems may store their operational data in a single logical database, yet it is less likely that the operational data can always be updated in a transactional way, and often for memory efficiency reasons such a database does not store individual leaves, but instead semi-consistent records of data at a container or list entry level.</t>
        <t>For other systems, the operational information may be distributed across multiple internal nodes (e.g., linecards), and potentially many different process daemons within those distributed nodes.  Such systems generally do not, and cannot, exhibit full consistency <xref target="Consistency"/> of the operational data (which would require transactional semantics across all daemons and internal nodes), only offering an eventually consistent <xref target="EventualConsistency"/> view of the data instead.</t>
        <t>In practice, many network devices will manage their operational data as a combination of some data being stored in a central operational datastore, and other, higher scale, and potentially more frequently changing data (e.g., statistics or FIB information) being stored elsewhere in a more memory efficient and performant way.</t>
      </section>
      <section anchor="complexities-for-consumers-of-yang-push-data">
        <name>Complexities for Consumers of YANG Push Data</name>
        <t>For the consumer of the telemetry data, there is a requirement to associate a schema with the instance-data that will be provided by a subscription.  One approach is to fetch and build the entire schema for the device, e.g., by fetching YANG library, and then use the subscription XPath to select the relevant subtree of the schema that applies only to the subscription.  The problem with this approach is that if the schema ever changes, e.g., after a software update, then it is reasonably likely of some changes occurring with the global device schema even if there are no changes to the schema subtree under the subscription path.  Hence, it would be helpful to identify and version the schema associated with a particular subscription path, and also to encoded the instance data relatively to the subscription path rather than as an absolute path from the root of the operational datastore.</t>
        <t><strong>TODO More needs to be added here, e.g., encoding, on-change considerations.  Splitting subscriptions up.</strong></t>
        <t>This document proposes a new opt-in YANG-Push encoding format to use instead of the "push-update" and "push-change-update" notifications defined in <xref target="RFC8641"/>.</t>
        <ol spacing="normal" type="1"><li>
            <t>To allow the device to split a subscription into smaller child subscriptions for more efficient independent and concurrent processing.  I.e., reusing the ideas from <xref target="I-D.ietf-netconf-distributed-notif"/>.  However, all child subscriptions are still encoded from the same subscription point.</t>
          </li>
        </ol>
        <section anchor="combined-periodic-and-on-change-subscription">
          <name>Combined periodic and on-change subscription</name>
          <t>Sometimes it is helpful to have a single subscription that covers both periodic and on-change notifications.</t>
          <t>There are two ways in which this may be useful:</t>
          <ol spacing="normal" type="1"><li>
              <t>For generally slow changing data (e.g., a device's physical inventory), then on-change notifications may be most appropriate.  However, in case there is any lost notification that isn't always detected, for any reason, then it may also be helpful to have a slow cadence periodic backup notification of the data (e.g., once every 24 hours), to ensure that the management systems should always eventually converge on the current state in the network.</t>
            </li>
            <li>
              <t>For data that is generally polled on a periodic basis (e.g., once every 10 minutes) and put into a time series database, then it may be helpful for some data trees to also get more immediate notifications that the data has changed.  Hence, a combined periodic and on-change subscription, would facilitate more frequent notifications of changes of the state, to reduce the need of having to always wait for the next periodic event.</t>
            </li>
          </ol>
          <t>Hence, this document allows a single subscription to be configured as both periodic and on-change.</t>
        </section>
      </section>
      <section anchor="DraftRelationships">
        <name>Relationships to existing RFCs and Internet Drafts</name>
        <t>This document, specifying YANG Push v2, is intended to be a lightweight alternative for <xref target="RFC8639"/> and <xref target="RFC8641"/>, but that also incorporates various extensions since those RFCs were written.  Often substantial parts of those documents and models have been incorporated almost verbatim, but modified to fit the YANG Push v2 functionality and module structure.</t>
        <t>Hence, the authors of this draft would like to sincerely thank and acknowledge the very significant effort put into those RFCs and drafts by authors, contributors and reviewers.  In particular, We would like to thank the listed authors of these documents: Eric Voit, Alex Clemm, Alberto Gonzalez Prieto, Einar Nilsen-Nygaard, Ambika Prasad Tripathy, Balazs Lengyel, Alexander Clemm, Benoit Claise, Qin Wu, Qiufang Ma, Alex Huang Feng, Thomas Graf, Pierre Francois.</t>
        <section anchor="rfc-8639-and-rfc-8641">
          <name>RFC 8639 and RFC 8641</name>
          <t>This document is primarily intended to be a lightweight alternative for <xref target="RFC8639"/> and <xref target="RFC8641"/>, but it intentionally reuses substantial parts of the design and data model of those RFCs.</t>
          <t>YANG Push v2 is defined using a separate module namespace, and hence can be implemented independently or, if desired, alongside <xref target="RFC8639"/> and <xref target="RFC8641"/>, and the various extensions to YANG Push.</t>
          <t>A more complete description of the main differences in YANG Push v2 compares to <xref target="RFC8639"/> and <xref target="RFC8641"/> is given in <xref target="DifferencesFromYangPush"/>.</t>
        </section>
        <section anchor="i-ddraft-ietf-netconf-notif-envelope-and-rfc-5277">
          <name><xref target="I-D.draft-ietf-netconf-notif-envelope"/> and RFC 5277</name>
          <t>All of the notifications defined in this specification, i.e., both the datastore update message and subscription lifecycle update notifications (<xref target="LifecycleNotifications"/>) depend upon and use the notification envelope format defined in <xref target="I-D.draft-ietf-netconf-notif-envelope"/>.</t>
          <t>As such, this specification does not make any use of the notification format defined in <xref target="RFC5277"/>, but this does not prevent implementations using <xref target="RFC5277"/> format notifications for other YANG notifications, e.g., for the "NETCONF" event stream defined in <xref target="RFC5277"/>.</t>
        </section>
        <section anchor="rfc-9196-and-i-ddraft-netana-netconf-yp-transport-capabilities">
          <name>RFC 9196 and <xref target="I-D.draft-netana-netconf-yp-transport-capabilities"/></name>
          <t>This document uses the capabilities concepts defined in <xref target="RFC9196"/>.</t>
          <t>In particular, it augments into the ietf-system-capabilities YANG module, but defines an equivalent alternative capability structure for the ietf-notification-capabilities YANG module, which defines the capabilities for YANG Push <xref target="RFC8641"/>.</t>
          <t>The generic transport capabilities defined in <xref target="I-D.draft-netana-netconf-yp-transport-capabilities"/> have been incorporated into the ietf-yang-push-2 YANG module, to augment YANG Push v2 transport capabilities and to use the different identities.</t>
        </section>
        <section anchor="i-ddraft-ietf-netconf-https-notif-and-i-ddraft-ietf-netconf-udp-notif">
          <name><xref target="I-D.draft-ietf-netconf-https-notif"/> and <xref target="I-D.draft-ietf-netconf-udp-notif"/></name>
          <t>The ietf-yang-push-2 YANG module has subsumed and extended the <em>receivers</em> data model defined in the ietf-subscribed-notif-receivers YANG module defined in <xref target="I-D.draft-ietf-netconf-https-notif"/>.</t>
          <t>The overall YANG Push v2 solution anticipates and requires new bis versions of both of these transports documents that augment into the <em>receivers/receiver/transport-type</em> choice statement, and also augment the transport identity defined in the ietf-yang-push-2 data model.</t>
        </section>
        <section anchor="i-ddraft-ietf-netconf-distributed-notif">
          <name><xref target="I-D.draft-ietf-netconf-distributed-notif"/></name>
          <t>This document reuses the work from <xref target="I-D.draft-ietf-netconf-distributed-notif"/>, but with some changes to work with the YANG Push v2 data models.  This is described in <xref target="distributed-notifications"/>.</t>
        </section>
      </section>
    </section>
    <section anchor="overview">
      <name>YANG Push v2 Overview</name>
      <t>This document specifies a lightweight telemetry solution that provides a subscription service for updates to the state and changes in state from a chosen datastore.</t>
      <t>Subscriptions specify when notification messages (also referred to as <em>updates</em>) should be sent, what data to include in the update records, and where those notifications should be sent.</t>
      <t>A YANG Push v2 subscription comprises:</t>
      <ul spacing="normal">
        <li>
          <t>a target datastore for the subscription, where the monitored subscription data is logically sourced from.</t>
        </li>
        <li>
          <t>a set of selection filters to choose which datastore nodes from the target datastore the subscription is monitoring or sampling, as described in <xref target="pathsAndFilters"/>.</t>
        </li>
        <li>
          <t>a choice of how update event notifications for the datastore's data nodes are triggered.  I.e., either periodic sampling of the current state, on-change event-driven, or both.  These are described in <xref target="UpdateTriggers"/>.</t>
        </li>
        <li>
          <t>a choice of encoding of the messages, e.g., JSON, or CBOR.</t>
        </li>
        <li>
          <t>a receiver to which datastore updates and subscription notifications are sent, as described in <xref target="receivers"/>;  </t>
          <ul spacing="normal">
            <li>
              <t>for configured subscriptions, the receivers parameters are configured, and specify transport, receiver, and encoding parameters.</t>
            </li>
            <li>
              <t>for dynamic subscriptions, the receiver uses the same transport session on which the dynamic subscription has been created.</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>If a subscription is valid and acceptable to the publisher, and if a suitable connection can be made to the receiver associated with a subscription, then the publisher will enact the subscription, periodically sampling or monitoring changes to the chosen datastore's data nodes that match the selection filter.  Push updates are subsequently sent by the publisher to the receiver, as per the terms of the subscription.</t>
      <t>Subscriptions may be set up in two ways: either through configuration - or YANG RPCs to create and manage dynamic subscriptions.  These two mechanisms are described in <xref target="ConfiguredAndDynamic"/>.</t>
      <t>Changes to the state of subscription are notified to receivers as subscription lifecycle notifications.  These are described in <xref target="LifecycleNotifications"/>.</t>
      <t>Security access control mechanisms, e.g., NACM {RFC8341}} can be used to ensure the receivers only get access to the information for which they are allowed.  This is further described in <xref target="security"/>.</t>
      <t>While the functionality defined in this document is transport agnostic, transports like the Network Configuration Protocol (NETCONF) <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/> can be used to configure or dynamically signal subscriptions.  In the case of configured subscription, the transport used for carrying the subscription notifications is entirely independent from the protocol used to configure the subscription, and other transports, e.g., <xref target="I-D.draft-ietf-netconf-udp-notif"/> defines a simple UDP based transport for Push notifications. Transport considerations are described in <xref target="transports"/>. <strong>TODO the reference to draft-ietf-netconf-udp-notif isn't right, it wouldn't be that draft, but a -bis version of it.  James is querying whether we need this at all</strong></t>
      <t><strong>TODO Introduce capabilities and operational monitoring</strong></t>
      <t>This document defines a YANG data model, that includes RPCs and notifications, for configuring and managing subscriptions and associated configuration, and to define the format of a <em>update</em> notification message.  The YANG model is defined in <xref target="yang-push-2-yang-module"/> and associated tree view in <xref target="yang-push-2-tree"/>.  The YANG data model defined in this document conforms to the Network Management Datastore Architecture defined in <xref target="RFC8342"/>.</t>
    </section>
    <section anchor="terminology">
      <name>Definitions</name>
      <t>This document reuses the terminology defined in <xref target="RFC7950"/>, <xref target="RFC8341"/>, <xref target="RFC8342"/>, <xref target="RFC8639"/> and <xref target="RFC8641"/>.</t>
      <t>The following terms are taken from <xref target="RFC8342"/>:</t>
      <ul spacing="normal">
        <li>
          <t><em>Datastore</em>: A conceptual place to store and access information.  A datastore might be implemented, for example, using files, a database, flash memory locations, or combinations thereof.  A datastore maps to an instantiated YANG data tree.</t>
        </li>
        <li>
          <t><em>Client</em>: An entity that can access YANG-defined data on a server, over some network management protocol.</t>
        </li>
        <li>
          <t><em>Configuration</em>: Data that is required to get a device from its initial default state into a desired operational state.  This data is modeled in YANG using "config true" nodes.  Configuration can originate from different sources.</t>
        </li>
        <li>
          <t><em>Configuration datastore</em>: A datastore holding configuration.</t>
        </li>
      </ul>
      <t>The following terms are taken from <xref target="RFC8639"/>:</t>
      <ul spacing="normal">
        <li>
          <t><em>Configured subscription</em>: A subscription installed via configuration into a configuration datastore.</t>
        </li>
        <li>
          <t><em>Dynamic subscription</em>: A subscription created dynamically by a subscriber via a Remote Procedure Call (RPC).</t>
        </li>
        <li>
          <t><em>Event</em>: An occurrence of something that may be of interest.  Examples include a configuration change, a fault, a change in status, crossing a threshold, or an external input to the system.</t>
        </li>
        <li>
          <t><em>Event occurrence time</em>: A timestamp matching the time an originating process identified as when an event happened.</t>
        </li>
        <li>
          <t><em>Event record</em>: A set of information detailing an event.</t>
        </li>
        <li>
          <t><em>Event stream</em>: A continuous, chronologically ordered set of events aggregated under some context.</t>
        </li>
        <li>
          <t><em>Event stream filter</em>: Evaluation criteria that may be applied against event records in an event stream.  Event records pass the filter when specified criteria are met.</t>
        </li>
        <li>
          <t><em>Notification message</em>: Information intended for a receiver indicating that one or more events have occurred.</t>
        </li>
        <li>
          <t><em>Publisher</em>: An entity responsible for streaming notification messages per the terms of a subscription.</t>
        </li>
        <li>
          <t><em>Receiver</em>: A target to which a publisher pushes subscribed event records.  For dynamic subscriptions, the receiver and subscriber are the same entity.</t>
        </li>
        <li>
          <t><em>Subscriber</em>: A client able to request and negotiate a contract for the generation and push of event records from a publisher.  For dynamic subscriptions, the receiver and subscriber are the same entity.</t>
        </li>
      </ul>
      <t>The following terms are taken from <xref target="RFC8641"/>:</t>
      <ul spacing="normal">
        <li>
          <t><em>Datastore node</em>: A node in the instantiated YANG data tree associated with a datastore.  In this document, datastore nodes are often also simply referred to as "objects".</t>
        </li>
        <li>
          <t><em>Datastore node update</em>: A data item containing the current value of a datastore node at the time the datastore node update was created, as well as the path to the datastore node.</t>
        </li>
        <li>
          <t><em>Datastore subscription</em>: A subscription to a stream of datastore node updates.</t>
        </li>
        <li>
          <t><em>Datastore subtree</em>: A datastore node and all its descendant datastore nodes.</t>
        </li>
        <li>
          <t><em>On-change subscription</em>: A datastore subscription with updates that are triggered when changes in subscribed datastore nodes are detected.</t>
        </li>
        <li>
          <t><em>Periodic subscription</em>: A datastore subscription with updates that are triggered periodically according to some time interval.</t>
        </li>
        <li>
          <t><em>Selection filter</em>: Evaluation and/or selection criteria that may be applied against a targeted set of objects.</t>
        </li>
        <li>
          <t><em>Update record</em>: A representation of one or more datastore node updates.  In addition, an update record may contain which type of update led to the datastore node update (e.g., whether the datastore node was added, changed, or deleted).  Also included in the update record may be other metadata, such as a subscription id of the subscription for which the update record was generated.  In this document, update records are often also simply referred to as "updates".</t>
        </li>
        <li>
          <t><em>Update trigger</em>: A mechanism that determines when an update record needs to be generated.</t>
        </li>
        <li>
          <t><em>YANG-Push</em>: The subscription and push mechanism for datastore updates that is specified in <xref target="RFC8641"/>.</t>
        </li>
      </ul>
      <t>This document introduces the following terms:</t>
      <ul spacing="normal">
        <li>
          <t><em>Subscription</em>: A registration with a publisher, stipulating the information the receiver wishes to have pushed from the publisher without the need for further solicitation.</t>
        </li>
        <li>
          <t><em>Subscription Identifier</em>: A numerical identifier for a configured or dynamic subscription.  Also referred to as the subscription-id.</t>
        </li>
        <li>
          <t><em>YANG-Push-Lite</em>: The light weight subscription and push mechanism for datastore updates that is specified in this document. <strong>Add comment</strong></t>
        </li>
      </ul>
      <t>This document also uses the terminology from <xref target="I-D.ietf-netconf-distributed-notif"/> in <xref target="distributed-notifications"/> and the related examples in <xref target="distrib-notif-example"/>.</t>
    </section>
    <section anchor="pathsAndFilters">
      <name>Subscription paths and selection filters</name>
      <t>A key part of a subscription is to select which data nodes should be monitored, and so a subscription must specify both the selection filters and the datastore against which these selection filters will be applied.  This information is used to choose, and subsequently push, <em>update</em> notifications from the publisher's datastore(s) to the subscription's receiver.</t>
      <t>Filters can either be defined inline within a configured subscription (<xref target="SubscriptionYangTree"/>), a dynamic subscription's <em>establish-subscription</em> RPC (<xref target="EstablishSubscriptionYangTree"/>), or as part of the <em>datastore-telemetry/filters</em> container (<xref target="FilterContainerYangTree"/>) which can then be referenced from a configured or dynamic subscription.</t>
      <t>The following selection filter types are included in the YANG Push v2 data model and may be applied against a datastore:</t>
      <ul spacing="normal">
        <li>
          <t><em>YPaths</em>: A list of basic YANG path selection filters that defines a path to a subtree of data nodes in the data tree, with some simple constraints on keys. See <xref target="YPaths"/>.</t>
        </li>
        <li>
          <t><em>subtree</em>: A subtree selection filter identifies one or more datastore subtrees.  When specified, <em>update</em> records will only include the datastore nodes of selected datastore subtree(s).  The syntax and semantics correspond to those specified in <xref target="RFC6241"/>, Section 6.</t>
        </li>
        <li>
          <t><em>XPaths</em>: A list of <em>XPath</em> (<xref target="XPATH"/>) selection filter expressions.  When specified, updates will only come from the selected datastore nodes that match the node set associated with the XPath expression.</t>
        </li>
      </ul>
      <t>These filters are used as selectors that define which data nodes fall within the scope of a subscription.  A publisher <bcp14>MUST</bcp14> support YPath filters, and <bcp14>MAY</bcp14> also support subtree or XPath filters.</t>
      <t>For both YPath and XPath based filters, each filter may define a list of path expressions.  Each of these filter path expressions <bcp14>MAY</bcp14> be processed by the publisher independently, and if two or more filter path expressions end up selecting overlapping data nodes then the publisher <bcp14>MAY</bcp14> notify duplicate values for those data nodes, but the encoded data that is returned <bcp14>MUST</bcp14> always be syntactically valid, i.e., as per section 5.3 of <xref target="RFC8342"/>.</t>
      <section anchor="YPaths">
        <name><em>YPath</em> definition</name>
        <t>A <em>YPath</em> represents a simple path into a YANG schema tree, where some of the list key values may be constrained.</t>
        <t>It is encoded in the similar format to the YANG JSON encoding for instance-identifier, section 6.11 of <xref target="RFC7951"/>, except with more flexibility on the keys, in that keys may be left-out or be bound to a regular expression filter.</t>
        <t>The rules for constructing a YPath are:</t>
        <ul spacing="normal">
          <li>
            <t>A YPath is a sequence of data tree path segment separated by a '/' character.  If the path starts with a '/' then it is absolute path from the root of the schema, otherwise it is a relative path, where the context of the relative path must be declared.</t>
          </li>
          <li>
            <t>Constraints on key values may be specified within a single pair of '[' ']' brackets, where:  </t>
            <ul spacing="normal">
              <li>
                <t>keys may be given in any order, and may be omitted, in which case they match any value.  Key matches are separated by a comma (,) with optional space character either side.</t>
              </li>
              <li>
                <t>key match is given by <em>&lt;key&gt;=&lt;value&gt;</em>, with optional space characters either side of the equals (=), and value is specified as:      </t>
                <ul spacing="normal">
                  <li>
                    <t>'&lt;value&gt;', for an exact match of the key's value.  Single quote characters (') must be escaped with a backslash (\).</t>
                  </li>
                  <li>
                    <t>r'&lt;reg-expr&gt;', for a regex match of the key value using <xref target="RFC9485"/>, and where the regular-expression is a full match of the string, i.e, it implicit anchors to the start and end of the value.</t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
        <t>Some examples of YPaths:</t>
        <ul spacing="normal">
          <li>
            <t><em>/ietf-interfaces:interfaces/interface[name='eth0']/ietf-ip:ipv6/ip</em> - which identifies is 'ipv6/ip' data node in the ietf-ip module for the 'eth0' interface.</t>
          </li>
          <li>
            <t><em>/ietf-interfaces:interfaces/interface[name=r'eth.*']/ietf-ip:ipv6/ip</em> - which identifies all interfaces with a name that start with "eth".</t>
          </li>
          <li>
            <t><em>/example:multi-keys-list[first-key='foo', second-key=r'bar.*']</em> - which identifies all entries in the 'multi-keys-list, where the first-key matches foo, and the second-key starts with bar.</t>
          </li>
          <li>
            <t><em>/ietf-interfaces:interfaces/interface</em> - which identifies the <em>interface</em> list data node in the ietf-interfaces module for all interfaces.  I.e., the interface list 'name' key is unrestricted.</t>
          </li>
          <li>
            <t><em>/ietf-interfaces:interfaces/interface[]</em> - alternative form of the previous YPath.</t>
          </li>
        </ul>
      </section>
      <section anchor="the-filters-container">
        <name>The "filters" Container</name>
        <t>The "filters" container maintains a list of all datastore subscription filters that persist outside the lifecycle of a single subscription.  This enables predefined filters that may be referenced by more than one configured or dynamic subscription.</t>
        <t>Below is a tree diagram for the "filters" container.  All objects contained in this tree are described in the YANG module in <xref target="ietf-yang-push-2-yang"/>.</t>
        <figure anchor="FilterContainerYangTree">
          <sourcecode type="yangtree"><![CDATA[
module: ietf-yang-push-2-config
  +--rw datastore-telemetry!
     +--rw filters
        +--rw filter* [name]
           +--rw name             string
           +--rw (filter)
              +--:(path)
              |  +--rw path       ypath
              +--:(subtree)
              |  +--rw subtree    <anydata>
              +--:(xpath)
                 +--rw xpath      yang:xpath1.0 {yp2:xpath}?

  augment /yp2:subscription-started/yp2:target:
    +-- filter-ref?   filter-ref
  augment /yp2:subscription-modified/yp2:target:
    +-- filter-ref?   filter-ref
]]></sourcecode>
        </figure>
      </section>
      <section anchor="decomposing-subscription-filters">
        <name>Decomposing Subscription Filters</name>
        <t>In order to address the issues described in <xref target="OperationalModellingComplexities"/>, YANG Push v2 allows for publishers to send subtrees of data nodes in separate <em>update</em> notifications, rather than requiring that the subscription data be returned as a single datastore <em>update</em> notification covering all data nodes matched by the subscription filter.  This better facilitates publishers that internally group some of their operational data fields together into larger structures for efficiency, and avoids publishers or receivers having to consume potentially very large notification messages.  For example, each entry in the <em>/ietf-interfaces:interface/interface</em> list could be represented as an object of data internally within the publisher.  In essence, a client specified subscription filter can be decomposed by a publisher into more specific non-overlapping filters that are then used to return the data.</t>
        <t>In particular:</t>
        <ol spacing="normal" type="1"><li>
            <t>A Publisher <bcp14>MAY</bcp14> decompose a client specified subscription filter path into a set of non-overlapping subscription filter paths that collectively cover the same data.  The publisher is allowed to return data for each of these decomposed subscription filter paths in separate <em>update</em> notification messages, each with separate, perhaps more precise, <em>observation-time</em> timestamps, but all using the same notification <em>event-time</em>.</t>
          </li>
          <li>
            <t>A Publisher <bcp14>MAY</bcp14> split large lists into multiple separate update messages, each with separate <em>observation-time</em> timestamps, but all using the same notification <em>event-time</em>.  E.g., if a device has 10,000 entries in a list, it may return them in a single response, or it may split them into multiple smaller messages, perhaps for 500 interfaces at a time.</t>
          </li>
        </ol>
        <!--
1. A Publisher is allowed to generate on-change notifications at an *object* level, which hence may contain other associated fields that may not have changed state, rather than restricting the on-change notifications strictly to only those specific fields that have changed state.  E.g., if a subscribers registers on the path */ietf-interfaces:interfaces/interface\[name = \*\]/oper-status*, and if interface *eth1* had a change in the *oper-status* leaf state, then rather than just publishing the updated *oper-status* leaf, the publisher may instead publish all the data associated with that interface entry object, i.e., everything under */ietf-interfaces:interface/interface\[name = eth1\]*.  **TODO Does it have to be the entire subtree that is published?  Do we need to add a capability annotation to indicate the object publication paths?**
-->

<t>To ensure that clients can reasonably process data returned via decomposed filters then:</t>
        <ol spacing="normal" type="1"><li>
            <t><em>update</em> notifications <bcp14>MUST</bcp14> indicate the precise subtree of data that the update message is updating or replacing, i.e., so a receiver can infer that data nodes no longer being notified by the publisher have been deleted:  </t>
            <ul spacing="normal">
              <li>
                <t>if we support splitting list entries in multiple updates, then something like a <em>more_data</em> flag is needed to indicate that the given update message is not complete.</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="events">
      <name>Datastore Event Streams</name>
      <t>In YANG Push v2, a subscription, based on the selected filters, will generate a ordered stream of datastore <em>update</em> records that is referred to as an event stream.  Each subscription logically has a different event stream of update records, even if multiple subscriptions use the same filters to select datastore nodes.</t>
      <t>As YANG-defined event records are created by a system, they may be assigned to one or more streams.  The event record is distributed to a subscription's receiver where (1) a subscription includes the identified stream and (2) subscription filtering does not exclude the event record from that receiver.</t>
      <t>Access control permissions may be used to silently exclude event records from an event stream for which the receiver has no read access.  See <xref target="RFC8341"/>, Section 3.4.6 for an example of how this might be accomplished.  Note that per Section 2.7 of this document, subscription state change notifications are never filtered out. <strong>TODO, filtering and NACM filtering should be dependent on whether it is a configured or dynamic subscription.</strong></t>
      <t>If subscriber permissions change during the lifecycle of a subscription and event stream access is no longer permitted, then the subscription <bcp14>MUST</bcp14> be terminated. <strong>TODO, check this</strong></t>
      <t>Event records <bcp14>SHALL</bcp14> be sent to a receiver in the order in which they were generated.  I.e., the publisher <bcp14>MUST</bcp14> not reorder the events when enqueuing notifications on the transport session, but there is no guarantee of delivery order.</t>
      <t>Event records <bcp14>MUST NOT</bcp14> be sent before a <em>subscription-started</em> notification (<xref target="SubscriptionStartedNotification"/>) or after a <em>subscription-terminated</em> notification (<xref target="SubscriptionTerminatedNotification"/>).</t>
      <section anchor="FullNotificationExample">
        <name>Notification Envelope</name>
        <t>All notifications in the event stream <bcp14>MUST</bcp14> be encoded using <xref target="I-D.draft-ietf-netconf-notif-envelope"/> to wrap the notification message, and <bcp14>MUST</bcp14> include the <em>event-time</em>, <em>hostname</em>, and <em>sequence-number</em> leafs in all messages.  The <em>publisher-id</em> <bcp14>MAY</bcp14> be excluded in it matches the default value (0), otherwise it <bcp14>MUST</bcp14> be included.</t>
        <t>The following example illustrates a fully encoded <em>update</em> notification that includes the notification envelope and additional meta-data fields.  The <em>update</em> notification, i.e., as defined via the <em>notification</em> statement in the yang-push-lite YANG module, is carried in the <em>contents</em> anydata data node.</t>
        <t>The <em>event-time</em> field is used to correlate separate <em>update</em> messages that collectively represent individual parts of the same update (e.g., where the source data is being obtained from multiple producers).</t>
        <figure>
          <name>Example of update notification including notification envelope</name>
          <sourcecode type="json"><![CDATA[
{
  "ietf-yp-notification:envelope": {
    "event-time": "2024-10-10T08:00:05.22Z",
    "hostname": "example-router",
    "sequence-number": 3219,
    "contents": {
      "ietf-yang-push-2:update": {
        "id": 1011,
        "path-prefix": "/ietf-interfaces:interfaces",
        "snapshot-type": "periodic",
        "observation-time": "2024-10-10T08:00:05.11Z",
        "updates": [
          {
            "target-path": "interface",
            "replace-by": {
              "interface": [
                {
                  "name": "eth0",
                  "type": "iana-if-type:ethernetCsmacd",
                  "enabled": true,
                  "oper-status": "up",
                  "admin-status": "up"
                },
                {
                  "name": "eth1",
                  "type": "iana-if-type:ethernetCsmacd",
                  "enabled": true,
                  "oper-status": "up",
                  "admin-status": "up"
                }
              ]
            }
          }
        ]
      }
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="EventRecords">
        <name>Event Records</name>
        <t>A single <em>update</em> record is used for all datastore notifications.  It is used to report the current state of a set of data nodes at a given target path for either periodic, on-change, or resync notifications, and also for on-change notifications to indicate that the data node at the given target path has been deleted.</t>
        <t>The schema for this notifications is given in the following tree diagram:</t>
        <figure>
          <name>'update' notification</name>
          <sourcecode type="yangtree"><![CDATA[
    +---n update
    |  +--ro id?                 subscription-id
    |  +--ro path-prefix?        string
    |  +--ro snapshot-type       enumeration
    |  +--ro observation-time?   yang:date-and-time
    |  +--ro updates* [target-path]
    |  |  +--ro target-path          string
    |  |  +--ro (data)?
    |  |     +--:(merge)
    |  |     |  +--ro merge?         <anydata>
    |  |     +--:(replaced-by)
    |  |     |  +--ro replaced-by?   <anydata>
    |  |     +--:(deleted)
    |  |        +--ro deleted?       empty
    |  +--ro complete?           boolean
]]></sourcecode>
        </figure>
        <t>The normative definitions for the notifications fields are given in the YANG module in <xref target="ietf-yang-push-2-yang"/>.  The fields can be informatively summarized as:</t>
        <ul spacing="normal">
          <li>
            <t><em>id</em> - identifies the subscription the notification relates to.</t>
          </li>
          <li>
            <t><em>path-prefix</em> - identifies the absolute instance-data path to which all target-paths are data are encoded relative to.</t>
          </li>
          <li>
            <t><em>snapshot-type</em> - this indicates what type of event causes the update message to be sent.  I.e., a periodic collection, an on-change event, or a resync collection.</t>
          </li>
          <li>
            <t><em>observation-time</em> - the time that the data was sampled, or when the on-change event occurred that caused the message to be published.</t>
          </li>
          <li>
            <t><em>target-path</em> - identifies the data node that is being acted on by the <em>merge</em>, <em>replace-by</em>, or <em>deleted</em> data.</t>
          </li>
          <li>
            <t><em>data</em> - A choice representing the action taken and the updated data, which is one of the following:  </t>
            <ul spacing="normal">
              <li>
                <t><em>merge</em> - identifies the data node that the receiver should merge with their current view of that data node.  I.e., all descendant data nodes reporting values should replace those held by the receiver, but the absence of a decendent data node does not imply that it no longer exists and hence should be deleted.</t>
              </li>
              <li>
                <t><em>replaced-by</em> - identifies the data node that replaces the copy of that data node in the receiver's state.  Any descendent data nodes not present in the update no longer exist and hence should be implicitly deleted in the receiver's current state.</t>
              </li>
              <li>
                <t><em>deleted</em> - indicates that the data node no longer exists and should be deleted in the receivers state.  This field <em><bcp14>MUST NOT</bcp14></em> be sent in an <em>on-change</em> update message.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><em>complete</em> - if present, this flag indicates whether the notification is complete or whether more messages as part of the same update will follow.  The default value for the flag depends on the <em>snapshot-type</em>.  For <em>on-change</em> events, the messages are assumed to be completed until the <em>complete</em> leaf is set to <tt>false</tt>.  For other type of events (e.g., periodic), the messages are assumed to be incomplete unless the <em>complete</em> leaf is set to <tt>true</tt>.  Setting this flag to <tt>true</tt> is semantically equivalent to the server sending a separate <em>update-complete</em> notification.</t>
          </li>
        </ul>
        <t>As per the structure of the <em>update</em> notification, a single notification <bcp14>MAY</bcp14> provide updates for multiple target-paths.</t>
      </section>
      <section anchor="UpdateTriggers">
        <name>Types of subscription event monitoring</name>
        <t>Subscription can either be based on sampling the requested data on a periodic cadence or being notified when the requested data changes.  In addition, this specification allows for subscriptions that both notify on-change and also with a periodic cadence, which can help ensure that the system eventually converges on the right state, even if on-change notification were somehow lost or mis-processed anywhere in the data processing pipeline.</t>
        <t>The schema for the update-trigger container is given in the following tree diagram:</t>
        <figure>
          <name>'update-trigger' container</name>
          <sourcecode type="yangtree"><![CDATA[
module: ietf-yang-push-2-config
  +--rw datastore-telemetry!
     +--rw subscriptions
        +--rw subscription* [id]
           +--rw update-trigger
              +--rw periodic!
              |  +--rw period         centiseconds
              |  +--rw anchor-time?   yang:date-and-time
              +--rw on-change! {on-change}?
                 +--rw sync-on-start?   boolean

  augment /yp2:subscription-started/yp2:target:
    +-- filter-ref?   filter-ref
  augment /yp2:subscription-modified/yp2:target:
    +-- filter-ref?   filter-ref
]]></sourcecode>
        </figure>
        <t>The normative definitions for the update-trigger fields are given in the <em>ietf-yang-push-2</em> YANG module in <xref target="ietf-yang-push-2-yang"/>.  They are also described in the following sections.</t>
      </section>
      <section anchor="periodic-events">
        <name>Periodic events</name>
        <t>In a periodic subscription, the data included as part of an update record corresponds to data that could have been read using a retrieval operation.  Only the state that exists in the system at the time that it is being read is reported, periodic updates never explicitly indicate whether any data-nodes or list entries have been deleted.  Instead, receivers must infer deletions by the absence of data during a particular collection event.</t>
        <t>Where possible, publishers <bcp14>SHOULD</bcp14> use the <em>replaced-by</em> data node to represent the new data since it provides clients with simple explicit semantics.  Publishers <bcp14>MAY</bcp14> use the <em>merge</em> data node when they cannot determine whether the data being published in the update is complete.</t>
        <t>For periodic subscriptions, triggered updates will occur at the boundaries of a specified time interval.  These boundaries can be calculated from the periodic parameters:</t>
        <ul spacing="normal">
          <li>
            <t>a <em>period</em> that defines the duration between push updates.</t>
          </li>
          <li>
            <t>an <em>anchor-time</em>; update intervals fall on the points in time that are a multiple of a <em>period</em> from an <em>anchor-time</em>.  If an <em>anchor-time</em> is not provided, then the publisher chooses a suitable anchor-time, e.g., perhaps the time that the subscription was first instantiated by the publisher.</t>
          </li>
        </ul>
        <t>The anchor time and period are particularly useful, in fact required, for when the collected telemetry data is being stored in a time-series database and the subscription is setup to ensure that each collection is placed in a separate time-interval bucket.</t>
        <t>Periodic update notifications are expected, but not required, to use a single <em>target-path</em> per <em>update</em> notification.</t>
      </section>
      <section anchor="on-change-events">
        <name>On-Change events</name>
        <t>In an on-change subscription, <em>update</em> records indicate updated values or when a monitored data node or list node has been deleted.  An <em>update</em> record is sent whenever a change in the subscribed information is detected. In the case that data nodes have been changed then the <em>update</em> record <bcp14>SHOULD</bcp14> only report the state that has changed (included any required list keys), but <bcp14>MAY</bcp14> include additional unchanged data nodes if the publisher is unable to optimize the on-change update message.</t>
        <t>Each entry in the <em>updates</em> list identifies a data node (i.e., list entry, container, leaf or leaf-list), via the <em>target-path</em> that either has changes is state or has been deleted.</t>
        <t>A delete of a specific individual data node or subtree may be notified in two different ways:</t>
        <ul spacing="normal">
          <li>
            <t>if the data that is being deleted is below the <em>target-path</em> then the delete is implicit by the publisher returning the current data node subtree with the delete data nodes missing.  I.e., the receiver must implicitly infer deletion.</t>
          </li>
          <li>
            <t>if the data node is being deleted at the target path.  E.g., if an interface is deleted then an entire list entry related to that interface may be removed.  In this case, the <em>target path</em> identifies the list entry that is being deleted, but the data returned is just an empty object <tt>{}</tt>, which replaces all the existing data for that object in the receiver. <strong>TODO, is this better as a delete flag, or separate delete list?</strong></t>
          </li>
        </ul>
        <t>On-change subscriptions also support the following additional parameters:</t>
        <ul spacing="normal">
          <li>
            <t><em>sync-on-start</em> defines whether or not a complete snapshot of all subscribed data is sent at the start of a subscription.  Such early synchronization establishes the frame of reference for subsequent updates.  For each data node covered by an on-change with sync-on-start subscription, then an <em>sync-on-start</em> <em>update</em> notification containing the current state <bcp14>MUST</bcp14> be sent before any on-change <em>update</em> notifications for those same data nodes.  However, <em>sync-on-start</em> and <em>on-change</em> <em>update</em> notifications may be interleaved for different data-nodes under the subscription.  Unsolicited <em>sync-on-start update</em> notifications <bcp14>MUST NOT</bcp14> be sent, they <bcp14>MUST</bcp14> only be sent after a subscription has started.</t>
          </li>
        </ul>
        <section anchor="OnChangeConsiderations">
          <name>On-Change Notifiable Datastore Nodes</name>
          <t>Publishers are not required to support on-change notifications for all data nodes, and they may not be able to generate on-change updates for some data nodes.  Possible reasons for this include:</t>
          <ul spacing="normal">
            <li>
              <t>the value of the datastore node changes frequently (e.g., the in-octets counter as defined in <xref target="RFC8343"/>),</t>
            </li>
            <li>
              <t>small object changes that are frequent and meaningless (e.g., a temperature gauge changing 0.1 degrees),</t>
            </li>
            <li>
              <t>or no implementation is available to generate a notification when the source variable for a particular data node has changed.</t>
            </li>
          </ul>
          <t>In addition, publishers are not required to notify every change or value for an on-change monitored data node.  Instead, publishers <bcp14>MAY</bcp14> limit the rate at which changes are reported for a given data node, i.e., effectively deciding the interval at which an underlying value is sampled.  If a data node changes value and then reverts back to the original value within a sample interval then the publisher <bcp14>MAY</bcp14> not detect the change and it would go unreported.  However, if the data node changes to a new value after it has been sampled, then the change and latest state <bcp14>MUST</bcp14> be reported to the receiver.  In addition, if a client was to query the value (e.g., through a NETCONF get-data RPC) then they <bcp14>MUST</bcp14> see the same observed value as would be notified.</t>
          <t>To give an example, if the interface link state reported by hardware is changing state hundreds of times per second, then it would be entirely reasonable to limit those interface state changes to a much lower cadence, e.g., perhaps every 100 milliseconds.  In the particular case of interfaces, there may also be data model specific forms of more advanced dampening that are more appropriate, e.g., that notify interface down events immediately, but rate limit how quickly the interface is allowed to transition to up state, which overall acts as a limit on the rate at which the interface state may change, and hence also act as a limit on the rate at which on-change notifications could be generated.</t>
          <t>The information about what nodes support on-change notifications is reported using capabilities operational data model.  This is further described in <xref target="ConformanceAndCapabilities"/>.</t>
        </section>
        <section anchor="on-change-considerations">
          <name>On-Change Considerations</name>
          <t>On-change subscriptions allow receivers to receive updates whenever changes to targeted objects occur.  As such, on-change subscriptions are particularly effective for data that changes infrequently but for which applications need to be quickly notified, with minimal delay, whenever a change does occur.</t>
          <t>On-change subscriptions tend to be more difficult to implement than periodic subscriptions.  Accordingly, on-change subscriptions may not be supported by all implementations or for every object.</t>
          <t>Whether or not to accept or reject on-change subscription requests when the scope of the subscription contains objects for which on-change is not supported is up to the publisher implementation.  A publisher <bcp14>MAY</bcp14> accept an on-change subscription even when the scope of the subscription contains objects for which on-change is not supported.  In that case, updates are sent only for those objects within the scope of the subscription that do support on-change updates, whereas other objects are excluded from update records, even if their values change.  In order for a subscriber to determine whether objects support on-change subscriptions, objects are marked accordingly on a publisher.  Accordingly, when subscribing, it is the responsibility of the subscriber to ensure that it is aware of which objects support on-change and which do not.  For more on how objects are so marked, see Section 3.10. <strong>TODO Is this paragraph and the one below still the right choice for YANG Push v2?</strong></t>
          <t>Alternatively, a publisher <bcp14>MAY</bcp14> decide to simply reject an on-change subscription if the scope of the subscription contains objects for which on-change is not supported.  In the case of a configured subscription, the publisher <bcp14>MAY</bcp14> keep the subscription in <em>inactive</em> state.</t>
        </section>
      </section>
      <section anchor="combined-periodic-and-on-change-subscriptions">
        <name>Combined periodic and on-change subscriptions</name>
        <t>A single subscription may created to generate notifications both when changes occur and on a periodic cadence.  Such subscriptions are equivalent to having separate periodic and on-change subscriptions on the same path, except that they share the same subscription-id and filter paths.</t>
      </section>
      <section anchor="streaming-update-examples">
        <name>Streaming Update Examples</name>
        <t><xref target="PeriodicExample"/> provides an example of a notification message for a subscription tracking the operational status of interface (per <xref target="RFC8343"/>).  This notification message is encoded using JSON <xref target="RFC7951"/>.</t>
        <figure anchor="PeriodicExample">
          <name>Example periodic update message</name>
          <sourcecode type="JSON" name="periodic-update-msg.json"><![CDATA[
{
  "ietf-yang-push-2:update": {
    "id": "interfaces",
    "path-prefix": "/ietf-interfaces:interfaces/interface",
    "snapshot-type": "periodic",
    "observation-time": "2024-10-10T08:00:05.11Z",
    "updates": [
      {
        "target-path": "",
        "merge": {
          "interface": [
            {
              "name": "eth0",
              "type": "iana-if-type:ethernetCsmacd",
              "enabled": true,
              "ietf-interfaces:oper-status": "up",
              "ietf-interfaces:admin-status": "up"
            },
            {
              "name": "eth1",
              "type": "iana-if-type:ethernetCsmacd",
              "enabled": true,
              "ietf-interfaces:oper-status": "up",
              "ietf-interfaces:admin-status": "up"
            }
          ]
        }
      }
    ],
    "complete": false
  }
}
]]></sourcecode>
        </figure>
        <t><xref target="OnChangeExample"/> provides an example of an on-change notification message for
the same subscription.</t>
        <figure anchor="OnChangeExample">
          <name>Example on-change update message</name>
          <sourcecode type="JSON" name="on-change-multi-update.json"><![CDATA[
{
  "ietf-yang-push-2:update": {
    "id": "interfaces",
    "path-prefix": "/ietf-interfaces:interfaces",
    "snapshot-type": "on-change-update",
    "observation-time": "2025-10-10T08:16:06.11Z",
    "updates": [
      {
        "target-path": "interface[name='eth0']",
        "replaced-by": {
          "name": "eth0",
          "type": "iana-if-type:ethernetCsmacd",
          "enabled": false,
          "ietf-interfaces:oper-status": "down"
        }
      },
      {
        "target-path": "interface[name='eth1']",
        "replaced-by": {
          "name": "eth1",
          "type": "iana-if-type:ethernetCsmacd",
          "enabled": false,
          "ietf-interfaces:oper-status": "down"
        }
      }
    ]
  }
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="ReceiversEtAl">
      <name>Receivers, Transports, and Encodings</name>
      <section anchor="receivers">
        <name>Receivers</name>
        <t>Every subscription is associated with a receiver, which identifies the destination host, transport and encoding settings, where all notifications for a subscription are sent.</t>
        <t>For configured subscriptions there is no explicit association with an existing transport session, and hence the properties associated with the receiver are explicitly configured, as described in <xref target="ConfiguredReceivers"/>.</t>
        <t>For dynamic subscriptions, the receiver, and most associated properties are implicit from the session on which the dynamic subscription was initiated, as described in <xref target="DynamicSubscriptionReceivers"/>.</t>
        <section anchor="ConfiguredReceivers">
          <name>Receivers for Configured Subscriptions</name>
          <t>For configured subscriptions, receivers are configured independently from the subscriptions and then referenced from the subscription configuration.</t>
          <!--All subscription notifications, including lifecycle notifications ({{LifecycleNotifications}}).-->

<t>Below is a tree diagram for <em>datastore-telemetry/receivers</em> container. All objects contained in this tree are described in the YANG module in <xref target="yang-push-2-yang-module"/>.</t>
          <t>These parameters identify how to connect to each receiver.  For each subscription, the publisher uses the referenced receiver configuration to establish transport connectivity to the receiver.</t>
          <figure anchor="ReceiversYangTree">
            <name>datastore-telemetry/receivers container</name>
            <sourcecode type="yangtree"><![CDATA[
module: ietf-yang-push-2-config
  +--rw datastore-telemetry!
     +--rw receivers
        +--rw receiver* [name]
           +--rw name                      string
           +--rw encoding                  yp2:encoding
           +--rw dscp?                     inet:dscp
           +---x reset
           +--rw (notification-message-origin)?
           |  +--:(interface-originated)
           |  |  +--rw source-interface?   if:interface-ref
           |  |          {interface-designation}?
           |  +--:(address-originated)
           |     +--rw source-vrf?         leafref {supports-vrf}?
           |     +--rw source-address?     inet:ip-address-no-zone
           +--rw (transport-type)

  augment /yp2:subscription-started/yp2:target:
    +-- filter-ref?   filter-ref
  augment /yp2:subscription-modified/yp2:target:
    +-- filter-ref?   filter-ref
]]></sourcecode>
          </figure>
          <t>Each configured receiver has the following associated properties:</t>
          <ul spacing="normal">
            <li>
              <t>a <em>name</em> to identify and reference the receiver in the subscription configuration.</t>
            </li>
            <li>
              <t>a <em>transport</em>, which identifies the transport protocol to use for all connections to the receiver.  </t>
              <ul spacing="normal">
                <li>
                  <t>any transport-specific related parameters, some of which may be mandatory, others optional to specify, e.g., DSCP.  There are likely to be various data nodes related to establishing appropriate security and encryption.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>an <em>encoding</em> to encode all YANG notification messages to the receiver, i.e., see <xref target="Encodings"/>.</t>
            </li>
            <li>
              <t>optional parameters to identify where traffic should egress the publisher:  </t>
              <ul spacing="normal">
                <li>
                  <t>a <em>source-interface</em>, identifying the egress interface to use from the publisher, implicitly choosing the source IP address and VRF.</t>
                </li>
                <li>
                  <t>a <em>source-vrf</em>, identifying the Virtual Routing and Forwarding (VRF) instance on which to reach receivers.  This VRF is a network instance as defined in <xref target="RFC8529"/>.  Publisher support for VRFs is optional and advertised using the <em>supports-vrf</em> feature.</t>
                </li>
                <li>
                  <t>a <em>source-address</em> address, identifying the IP address to source notification messages from.</t>
                </li>
              </ul>
              <t>
If none of the above parameters are set, the publisher <bcp14>MAY</bcp14> choose which interface(s) and address(es) to source subscription notifications from.</t>
            </li>
          </ul>
          <t>This specification is transport independent, e.g., see <xref target="transports"/>, and thus the YANG module defined in <xref target="yang-push-2-yang-module"/> cannot directly define and expose these transport parameters.  Instead, receiver-specific transport connectivity parameters <bcp14>MUST</bcp14> be configured via transport-specific augmentations to the YANG choice node <em>/datastore-telemetry/receivers/receiver/transport-type</em>.</t>
          <t>A publisher supporting configured subscriptions clearly must support at least one YANG data model that augments transport connectivity parameters onto <em>/datastore-telemetry/receivers/receiver/transport-type</em>.  For an example of a similar such augmentation (but for YANG Push), see <xref target="I-D.draft-ietf-netconf-udp-notif"/>. <strong>TODO, this reference and text will need to be updated to a UDP-notif bis document, that augments the new YANG Push v2 receiver path.</strong></t>
        </section>
        <section anchor="DynamicSubscriptionReceivers">
          <name>Receivers for Dynamic Subscriptions</name>
          <t>For dynamic subscriptions, each subscription has a single receiver that is implicit from the host that initiated the <em>establish-subscription</em> RPC, reusing the same transport session for all the subscription notifications.</t>
          <t>Hence most receiver parameters for a dynamic subscription, e.g., related to the transport, are implicitly determined and cannot be explicitly controlled.</t>
          <t>Dynamic subscriptions <bcp14>MUST</bcp14> specify an encoding (see <xref target="Encodings"/>) and <bcp14>MAY</bcp14> specify DSCP Marking (see <xref target="DSCP"/>) for the telemetry notifications in the <em>establish-subscription</em> RPC (see <xref target="EstablishSubscriptionYangTree"/>).</t>
        </section>
        <section anchor="ReceiverStates">
          <name>Receiver Session States and State Machine</name>
          <t>Each subscription will need to establish a subscription to the specified receiver.  Multiple subscriptions may share one or more transport sessions to the same receiver.</t>
          <t>A receiver in YANG Push v2 can be in one of the following states:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Configured</strong>: The receiver has been configured on the publisher, but the receiver is not referenced by any valid subscriptions and hence there is no attempt to establish a connection to the receiver.</t>
            </li>
            <li>
              <t><strong>Connecting</strong>: The receiver has at least one associated subscription and the publisher is attempting to establish a transport session and complete any required security exchanges, but this process has not yet succeeded.</t>
            </li>
            <li>
              <t><strong>Active</strong>: The receiver has at least one associated subscription, a transport session has been established (if required), security exchanges have successfully completed, and the publisher is able to send notifications to the receiver.</t>
            </li>
          </ul>
          <t>The state transitions for a receiver are illustrated below:</t>
          <figure anchor="ReceiverStateDiagram">
            <name>Receiver Session State Diagram</name>
            <artwork align="left"><![CDATA[
                    .-------------------.
                    |                   |
                    |    Configured     |
                    |                   |
                    '-------------------'
                            |  ^
  Receiver is referenced by |  |  No configured subscriptions
  1 or more subscriptions   |  |  reference the receiver
                            v  |
                    .-------------------.
                    |                   |
                    |    Connecting     |
                    |                   |
                    '-------------------'
                            |  ^
  Transport and/or security |  |  Transport or security session
  has been established.     |  |  has been lost or failed.
                            v  |
                    .-------------------.
                    |                   |
                    |      Active       |
                    |                   |
                    '-------------------'
]]></artwork>
          </figure>
          <t>This state model allows implementations and operators to clearly distinguish between receivers that are simply configured, those that are in the process of connecting, and those that are actively being used.</t>
          <t>If the configuration has changed such that there were previously connections to a receiver, but that receiver is no longer referenced by valid subscriptions, then the publisher <bcp14>MUST</bcp14> close any associated transport sessions to the receiver, but <bcp14>MAY</bcp14> delay the closing for a short period of time (no more than 15 minutes) to potentially allow existing transport session to be reused by new subscriptions.</t>
        </section>
      </section>
      <section anchor="transports">
        <name>Transports</name>
        <t>This document describes a transport-agnostic mechanism for subscribing to YANG datastore telemetry.  Hence, separate specifications are required to define transports that support YANG Push v2.  The requirements for these transport specifications are documented in the following section:</t>
        <section anchor="requirements-for-yang-push-v2-transport-specifications">
          <name>Requirements for YANG Push v2 Transport Specifications</name>
          <t>This section provides requirements for any transport specifications supporting the YANG Push v2 solution presented in this document.</t>
          <t>The transport specification <bcp14>MUST</bcp14> provide YANG modules, to be implemented by publishers implementing the YANG Push configuration model in <xref target="config-subs-data-model"/>, that:</t>
          <ul spacing="normal">
            <li>
              <t>augments the <em>datastore-telemetry/receivers/transport-type</em> choice statement with a container that both identifies the transport and contains all transport specific parameters.</t>
            </li>
            <li>
              <t>augments <em>/sysc:system-capabilities/transport/transport-capabilities/</em> container with any transport specific capabilities or options (conditional on a YANG <em>when</em> statement).  Note, encodings for a given transport are advertised directly via the ietf-yang-push-2-capabilities YANG Model <xref target="yang-push-2-yang-capabilities-module"/>.</t>
            </li>
          </ul>
          <t>Using a secure transport is <bcp14>RECOMMENDED</bcp14>.  Thus, any transport specification <bcp14>MUST</bcp14> provide a mechanism to ensure secure communication between the publisher and receiver in a hostile environment, e.g., through the use of transport layer encryption.  Transport specifications <bcp14>MAY</bcp14> also specify a mechanism for unencrypted communications, which can be used when transport layer security is not required, e.g., if the transport session is being secured via another mechanism, or when operating within a controlled environment or test lab.</t>
          <t>Any transport specification <bcp14>SHOULD</bcp14> support mutual receiver and publisher authentication at the transport layer.</t>
          <t>The transport selected by the subscriber to reach the publisher <bcp14>SHOULD</bcp14> be able to support multiple "establish-subscription" requests made in the same transport session.</t>
          <t>The transport specification <bcp14>MUST</bcp14> specifying how multiple subscriptions referencing the same receiver are to be handled at the transport layer.  The transport specification <bcp14>MAY</bcp14> require separate transport sessions per subscription to a given receiver, or it <bcp14>MAY</bcp14> allow multiple subscriptions to the same receiver to be multiplexed over a shared transport session.</t>
          <t>A specification for a transport built upon this document can choose whether to use the same logical channel for the RPCs and the event records.  However, the <em>update</em> records and the subscription state change notifications <bcp14>MUST</bcp14> be sent on the same transport session.</t>
          <t>The transport specification <bcp14>MAY</bcp14> specify a keepalive mechanism to keep the transport session alive.  There is no YANG Push v2 protocol or application level keepalive mechanism.</t>
          <t><strong>TODO, do we need to mention anything about transport session timeouts, e.g., which would cause a subscription to be terminated.  What about buffering?  Is that a transport consideration?</strong></t>
          <t>Additional transport requirements may be dictated by the choice of transport used with a subscription.</t>
          <section anchor="DSCP">
            <name>DSCP Marking</name>
            <t>YANG Push v2 supports <em>dscp</em> marking to differentiate prioritization of notification messages during network transit.</t>
            <t>A receiver with a <em>dscp</em> leaf results in a corresponding Differentiated Services Code Point (DSCP) marking <xref target="RFC2474"/>} being placed in the IP header of any resulting <em>update</em> notification messages and subscription state change notifications.  A publisher <bcp14>MUST</bcp14> respect the DSCP markings for subscription traffic egressing that publisher.</t>
            <t>The transport specification <bcp14>MUST</bcp14> specify if there are any particular quality-of-service or class-of-service considerations related to handling DSCP settings associated with the subscription.</t>
          </section>
        </section>
      </section>
      <section anchor="Encodings">
        <name>Encodings</name>
        <t>The <em>update</em> notification (<xref target="EventRecords"/>) and subscription lifecycle notifications (<xref target="LifecycleNotifications"/>) can be encoded in any format that has a definition for encoding YANG data.  For a given subscription, all notification messages are encoded using the same encoding.</t>
        <t>Some IETF standards for YANG encodings known at the time of publication are:</t>
        <ul spacing="normal">
          <li>
            <t>JSON, defined in <xref target="RFC7951"/></t>
          </li>
          <li>
            <t>CBOR, defined in <xref target="RFC9254"/>, and <xref target="RFC9595"/> for using compressed schema identifiers (YANG SIDs)</t>
          </li>
          <li>
            <t>XML, defined in <xref target="RFC7950"/></t>
          </li>
        </ul>
        <t>To maximize interoperability, all implementations are <bcp14>RECOMMENDED</bcp14> to support both JSON and CBOR encodings (using regular YANG identifiers).  Constrained platforms may not be able to support JSON and hence may choose to only support CBOR encoding.  JSON encoding may not be supported in the scenario that another encoding becomes the defacto standard (e.g., as JSON has largely replaced XML as the defacto choice for text based encoding).  Support for the XML encoding and/or CBOR encoding using YANG SIDs is <bcp14>OPTIONAL</bcp14>.</t>
        <t>Encodings are defined in the <em>ietf-yang-push-2.yang</em> as YANG identities that derive from the <em>encoding</em> base identity.  Additional encodings can be defined by defining and implementing new identities that derive from the <em>encoding</em> base identity, and also advertising those identities as part of the ietf-yang-push-2-capabilities YANG module's transport capabilities <xref target="yang-push-2-yang-capabilities-module"/>.</t>
      </section>
    </section>
    <section anchor="ConfiguredAndDynamic">
      <name>Setting up and Managing Subscriptions</name>
      <t>Subscriptions can be set up and managed in two ways:</t>
      <ol spacing="normal" type="1"><li>
          <t>Configured Subscriptions - a subscription created and principally controlled by configuration.</t>
        </li>
        <li>
          <t>Dynamic Subscriptions - a subscription created and principally controlled via YANG RPCs from a telemetry receiver.</t>
        </li>
      </ol>
      <t>Conformant implementations <bcp14>MUST</bcp14> implement at least one of the two mechanisms above for establishing and maintaining subscriptions, but they <bcp14>MAY</bcp14> choose to only implement a single mechanism.</t>
      <t>The core behavior for both configured and dynamic subscription is the same, with the key differentiation being how they are provisioned, and how the transport is setup.  This next section describes the functionality that is common to both types of subscription, followed by the sections that describe the specifics and differences between the two ways of managing subscriptions.</t>
      <section anchor="CommonSubscriptionParameters">
        <name>Common Subscription Parameters</name>
        <t>All subscriptions require the following state to be instantiated:</t>
        <ul spacing="normal">
          <li>
            <t>an <em>id</em> to identify the subscription.</t>
          </li>
          <li>
            <t>the <em>target</em> for the subscription, comprising:
            </t>
            <ul spacing="normal">
              <li>
                <t>the target datastore, as per <xref target="RFC8342"/></t>
              </li>
              <li>
                <t>a set of selection filters to choose which datastore nodes the subscription is monitoring or sampling, as described in <xref target="pathsAndFilters"/>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>the <em>update-trigger</em> to indicate when <em>update</em> notifications are generated:
            </t>
            <ul spacing="normal">
              <li>
                <t><em>periodic</em>, for the publisher to send updated copies of the state on a periodic basis</t>
              </li>
              <li>
                <t><em>on-change</em>, for the publisher to send state updates when the internal state changes, i.e., event driven.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>receiver, transport, and encoding parameters, as per <xref target="receivers"/>.  How these are provided differs for configured vs dynamic subscriptions and is further explained in the sections below.</t>
          </li>
        </ul>
        <t>Subscription ids <bcp14>MUST</bcp14> be unique across all configured and dynamic subscriptions.  Configured subscription take precedence over dynamic subscription, so:</t>
        <ul spacing="normal">
          <li>
            <t>attempts to create a dynamic subscription with a subscription id that conflicts with any other subscription id (configured or dynamic) <bcp14>MUST</bcp14> fail,</t>
          </li>
          <li>
            <t>configuring a subscription, assuming it passes configuration validation, replaces any dynamic subscriptions with the same subscription id.  Thus, causing the dynamic subscription to be immediately terminated (see <xref target="TerminatingSubscriptions"/>).</t>
          </li>
          <li>
            <t>subscription ids starting with <tt>dyn-</tt> are reserved for the publisher to use for automatically allocate subscription ids for dynamic subscriptions when the client has choosen not to provide one in the <em>establish-subscription</em> RPC.</t>
          </li>
        </ul>
        <section anchor="subscription-states">
          <name>Subscription States</name>
          <t>YANG Push v2 has a small set of simple states for a subscription on a publisher.  These states are intended to help clients easily determine the health and status of a subscription.</t>
          <ul spacing="normal">
            <li>
              <t><strong>Invalid</strong>: a subscription that is invalid for any reason.  E.g., the subscription references an invalid filter expression for the current device schema.  Normally, invalid configurations should be rejected by the system, whether due to subscription configuration or <em>establish-subscription</em> RPC, and hence this state should rarely be seen.</t>
            </li>
            <li>
              <t><strong>Inactive</strong>: a valid subscription, but one that is not active because it has no associated receiver.  This state is unlikely to be seen for dynamic subscriptions.</t>
            </li>
            <li>
              <t><strong>Connecting</strong>: a subscription that is valid, and has appropriate receiver configuration, but the publisher has not managed to successfully connect to the receiver yet, and hence has not sent a <em>subscription-started</em> notification.  Transport security failures would be in this state.</t>
            </li>
            <li>
              <t><strong>Active</strong>: a valid subscription, connected to the receiver, that has sent a <em>subscription-stated</em> notification and is generating <em>update</em> notifications, as per the terms of the subscription update policy.</t>
            </li>
            <li>
              <t><strong>Terminated</strong>: represents a subscription that has finished.  Subscriptions would only be expected to transiently be in this state and hence it would not normally be reported.  Terminated dynamic subscriptions, or unconfigured subscriptions, should quickly be removed from the operational state of the device.  Terminated</t>
            </li>
          </ul>
          <t>Below is a state diagram illustrating the states, and the likely changes between states.  However, this is not a formal state machine and publishers can move between arbitrary states based on changes to subscription properties, the system, connectivity to receivers, or resource constraints on the system.  New subscriptions should choose an appropriate starting state, e.g., either Inactive or Invalid.</t>
          <figure>
            <name>Publisher's States for a Subscription</name>
            <artwork><![CDATA[
                  .-------------------.         .-------------------.
                  |                   |         |                   |
                  |    Inactive       | <------>|     Invalid       |
                  |                   |         |                   |
                  '-------------------'         '-------------------'
                            ^
                            |
                            v
                  .-------------------.
                  |                   |
                  |    Connecting     |
                  |                   |
                  '-------------------'
                            ^
                            |
                            v
                  .-------------------.
                  |                   |
                  |    Active         |
                  |                   |
                  '-------------------'


                  .-------------------.
                  |                   |
                  |    Terminated     |
                  |                   |
                  '-------------------'
]]></artwork>
          </figure>
        </section>
        <section anchor="CreatingSubscriptions">
          <name>Creating Subscriptions</name>
          <t>After a subscription is successfully established, the publisher immediately sends a <em>subscription-started</em> subscription state change notification to the receiver.  It is quite possible that upon configuration, reboot, or even steady-state operations, a transport session may not be currently available to the receiver.</t>
          <t>With active configured subscriptions, it is allowable to buffer event records even after a <em>subscription-started</em> has been sent.  However, if events are lost (rather than just delayed) due to buffer capacity being reached, a <em>subscription-terminated</em> notification <bcp14>MUST</bcp14> be sent, followed by a new <em>subscription-started</em> notification. These notifications indicate an event record discontinuity has occurred. <strong>TODO, do we always want this behaviour or is it transport specific?</strong></t>
        </section>
        <section anchor="ModifyingSubscriptions">
          <name>Modifying Subscriptions</name>
          <t>The parameters associated with a subscription <bcp14>MAY</bcp14> be modified by client <em>modify-subscription</em> RPC or through configuration.</t>
          <t>If the subscription is in <em>Active</em> state, and hence a <em>subscription-started</em> notification has been enqueued to the receiver, then any subscription parameter changes are handled as per the following sub-sections.  If the subscription is not yet in <em>Active</em> state then any transport changes associated with the receiver must be made, but otherwise the new parameters would be notified in the <em>subscription-started</em> notification.</t>
          <section anchor="ChangesNeedingTermination">
            <name>Modifications requiring subscription-terminated notification</name>
            <t>Changes to any of following parameters <bcp14>MUST</bcp14> terminate the subscription, as per <xref target="TerminatingSubscriptions"/>, before recreating it, clearing and reinitializing any associated statistics, as per <xref target="CreatingSubscriptions"/>:</t>
            <ol spacing="normal" type="1"><li>
                <t>the subcription <em>id</em></t>
              </li>
              <li>
                <t>the <em>encoding</em></t>
              </li>
              <li>
                <t>any <em>receiver</em> settings that change the encoding, transport, transport security, or receiver destination address/port</t>
              </li>
              <li>
                <t>the update-trigger to enable <em>sync-on-start</em>.</t>
              </li>
              <li>
                <t>if the <em>sync-in-start option</em> is enabled, then any changes to the subscription-filter (inline or referenced) or YANG schema (<em>schema-id</em>) associated with the subscription. <em>TODO, Why?  Should a subscription-modifies message resend the sync-on-start data anyway?</em></t>
              </li>
            </ol>
            <t>The <em>subscription-terminated</em> notification <bcp14>MUST</bcp14> be sent using the old <em>encoding</em> and <em>receiver</em> settings before the subscription parameters were changed.  The <em>subscription-started</em> notification <bcp14>MUST</bcp14> be sent using the updated subscription parameters.</t>
          </section>
          <section anchor="ChangesNeedingModifiedNotif">
            <name>Modifications allowing subscription-modified notification</name>
            <t>If changes to a subscription only include changes to the following parameters then they <bcp14>SHOULD</bcp14> be handled via a <em>subscription-modified</em> notification, but <bcp14>MAY</bcp14> be handled as described above. This applies for changes to:</t>
            <ol spacing="normal" type="1"><li>
                <t>the subscription target <em>filter</em> (inline, referring to a different named filter, or changing the referenced filter).</t>
              </li>
              <li>
                <t>the YANG schema (<em>schema-id</em>) associated with subscription target filter,</t>
              </li>
              <li>
                <t>the <em>update-trigger</em>, unless <em>sync-on-start</em> is enabled.</t>
              </li>
              <li>
                <t>the <em>description</em> field,</t>
              </li>
              <li>
                <t>any other fields that are included in a <em>subscription-started</em> notification message, unless the definition of those fields explicitly specifies different
behavior.</t>
              </li>
            </ol>
          </section>
          <section anchor="modifications-requiring-no-lifecycle-notification">
            <name>Modifications requiring no lifecycle notification</name>
            <t>Changes to any of the following subscription parameters do not need to be notified to the client:</t>
            <ol spacing="normal" type="1"><li>
                <t><em>dscp</em> settings.</t>
              </li>
              <li>
                <t><em>source-address</em>, <em>source-interface</em>, <em>source-vrf</em>, or the source port.</t>
              </li>
              <li>
                <t>any other settings not reported in the <em>subscription-started</em> notification message.</t>
              </li>
            </ol>
          </section>
        </section>
        <section anchor="TerminatingSubscriptions">
          <name>Terminating Subscriptions</name>
          <t>Subscriptions <bcp14>MUST</bcp14> be terminated by the publisher due to any of the following circumstances:</t>
          <ol spacing="normal" type="1"><li>
              <t>The subscription has been unconfigured.</t>
            </li>
            <li>
              <t>Some subscription, receiver, transport or encoding configuration has been removed, e.g., receiver configuration, such that there is no longer the sufficient minimum information to maintain the subscription.</t>
            </li>
            <li>
              <t>A dynamic subscription has been terminated via a <em>delete-subscription</em> or <em>kill-subscription</em> YANG RPC.</t>
            </li>
            <li>
              <t>Transport connectivity to the receiver has been lost, either due to network issues, or a failure in the security session state.</t>
            </li>
            <li>
              <t>The publisher does not have sufficient resources to honor the terms of the subscription, i.e., it is generating too many <em>update</em> notifications, or attempting to send too much data.</t>
            </li>
            <li>
              <t>The subscription parameters have changed in such a way, i.e., as defined in <xref target="ChangesNeedingTermination"/>, that needs the subscription to be reset by terminating and recreating it.</t>
            </li>
            <li>
              <t>The <em>reset</em> RPC is invoked on a configured subscription, or on the referenced receiver associated with a configured subscription.</t>
            </li>
          </ol>
          <t>In addition, from a receiver's perspective, if transport connectivity is lost, then that is equivalent to terminating the subscription via a <em>subscription-terminated</em> notification.</t>
          <t>If possible, the publisher <bcp14>MUST</bcp14> try and close the subscription gracefully by generating a <em>subscription-terminated</em> notification to the receiver before closing any sessions to any receivers that have no remaining subscriptions.  Publishers <bcp14>MAY</bcp14> complete their current collection if one is in progress before generating the <em>subscription-terminated</em> notification.  Obviously, if transport connectivity to a receiver has been lost then neither of these two actions is possible.</t>
          <t>The publisher <bcp14>MUST NOT</bcp14> generate any further events, e.g., <em>update</em> notifications, related to the subscription after the <em>subscription-terminated</em> notification has been generated.  In addition, receivers <bcp14>SHOULD</bcp14> ignore any messages received outside of an active subscription, i.e., either before a <em>subscription-started</em> notification or after a <em>subscription-terminated</em> notification.</t>
          <t>If the publisher accepts the request, which it <bcp14>MUST</bcp14>, if the subscription-id matches a dynamic subscription established in the same transport session, then it should stop the subscription and send a <em>subscription-terminated</em> notification.</t>
        </section>
      </section>
      <section anchor="LifecycleNotifications">
        <name>Subscription Lifecycle Notifications</name>
        <t>In addition to sending event records to receivers, a publisher also sends subscription lifecycle state change notifications when lifecycle events related to subscription management occur.</t>
        <t>Subscription state change notifications are generated per subscription, and are injected into the steam of <em>update</em> messages for that that subscription.  These notifications <bcp14>MUST NOT</bcp14> be dropped or filtered.</t>
        <t>Future extensions, or implementations <bcp14>MAY</bcp14> augment additional fields into the notification structures.  Receivers <bcp14>MUST</bcp14> silently ignore unexpected fields.</t>
        <t>The complete set of subscription state change notifications is described in the following subsections:</t>
        <section anchor="SubscriptionStartedNotification">
          <name>"subscription-started"</name>
          <t>The subscription started notification is sent to a receiver to indicate that a subscription is active and they may start to receive <em>update</em> records from the publisher.</t>
          <t>The <em>subscription-started</em> notification is sent for any of these reasons:</t>
          <ol spacing="normal" type="1"><li>
              <t>A new subscription (configured or dynamic) has been started.</t>
            </li>
            <li>
              <t>The properties of a configured subscription has been changed, i.e., as specified in <xref target="ChangesNeedingTermination"/>, that requires a <em>subscription-terminated</em> notification to be sent followed by a <em>subscription-started</em> notification, presuming that the new subscription parameters are valid.</t>
            </li>
            <li>
              <t>A configured subscription previously failed, and was terminated.  After the publisher has successfully re-established a connection to the receiver and is ready to send datastore event records again.</t>
            </li>
          </ol>
          <t>Below is the tree diagram for the <em>subscription-started</em> notification.  All data nodes contained in this tree diagram are described in the YANG module in <xref target="yang-push-2-yang-module"/>.</t>
          <figure>
            <name>subscription-started Notification Tree Diagram</name>
            <sourcecode type="yangtree"><![CDATA[
    +---n subscription-started
    |  +--ro id                    subscription-id
    |  +--ro description?          string
    |  +--ro target
    |  |  +--ro datastore?                 identityref
    |  |  +--ro (filter)
    |  |  |  +--:(path)
    |  |  |  |  +--ro path                 ypath
    |  |  |  +--:(subtree)
    |  |  |  |  +--ro subtree              <anydata>
    |  |  |  +--:(xpath)
    |  |  |     +--ro xpath                yang:xpath1.0 {yp2:xpath}?
    |  |  +--ro schema-id?                 string
    |  |  +--ro yang-library-content-id?
    |  |          -> /yanglib:yang-library/content-id
    |  +--ro update-trigger
    |  |  +--ro periodic!
    |  |  |  +--ro period         centiseconds
    |  |  |  +--ro anchor-time?   yang:date-and-time
    |  |  +--ro on-change! {on-change}?
    |  |     +--ro sync-on-start?   boolean
    |  +--ro message-publishers
    |     +--ro publisher-id*   uint32
]]></sourcecode>
          </figure>
        </section>
        <section anchor="SubscriptionModifiedNotification">
          <name>"subscription-modified"</name>
          <t>The <em>subscription-modified</em> notification is sent to a receiver to indicate that some parameters associated with an active subscription have changed, as per <xref target="ChangesNeedingModifiedNotif"/>.</t>
          <t>Below is the tree diagram for the <em>subscription-modified</em> notification.  Other than the notification name and the <em>reason</em> leaf, the parameters for a <em>subscription-modified</em> notification are the same as for the <em>subscription-started</em> notification.  Robust receivers are expected to handle <em>subscription-started</em> and <em>subscription-modified</em> notifications equivalently.</t>
          <t>All data nodes contained in this tree diagram are described in the YANG module in <xref target="yang-push-2-yang-module"/>.</t>
          <figure>
            <name>subscription-modified Notification Tree Diagram</name>
            <sourcecode type="yangtree"><![CDATA[
    +---n subscription-modified
    |  +--ro id                    subscription-id
    |  +--ro description?          string
    |  +--ro target
    |  |  +--ro datastore?                 identityref
    |  |  +--ro (filter)
    |  |  |  +--:(path)
    |  |  |  |  +--ro path                 ypath
    |  |  |  +--:(subtree)
    |  |  |  |  +--ro subtree              <anydata>
    |  |  |  +--:(xpath)
    |  |  |     +--ro xpath                yang:xpath1.0 {yp2:xpath}?
    |  |  +--ro schema-id?                 string
    |  |  +--ro yang-library-content-id?
    |  |          -> /yanglib:yang-library/content-id
    |  +--ro update-trigger
    |  |  +--ro periodic!
    |  |  |  +--ro period         centiseconds
    |  |  |  +--ro anchor-time?   yang:date-and-time
    |  |  +--ro on-change! {on-change}?
    |  |     +--ro sync-on-start?   boolean
    |  +--ro message-publishers
    |  |  +--ro publisher-id*   uint32
    |  +--ro reason                subscription-change
]]></sourcecode>
          </figure>
        </section>
        <section anchor="SubscriptionTerminatedNotification">
          <name>"subscription-terminated"</name>
          <t>For a receiver, this notification indicates that no further event records for an active subscription should be expected from the publisher unless and until a new <em>subscription-started</em> notification is received.</t>
          <t>A <em>subscription-terminated</em> notification <bcp14>SHOULD</bcp14> only be sent by a publisher to a receiver if a <em>subscription-started</em> notification was previously sent.</t>
          <t>The subscription terminated notification may be sent to a receiver for any of these reasons:</t>
          <ol spacing="normal" type="1"><li>
              <t>A subscription has been stopped, either due to the change/removal of some configuration, or an RPC has been invoked to delete or kill a dynamic subscription.</t>
            </li>
            <li>
              <t>The properties of a subscription have been changed, i.e., as specified in <xref target="ChangesNeedingTermination"/>, that requires a <em>subscription-terminated</em> notification to be sent followed by a <em>subscription-started</em> notification, presuming that the new subscription parameters are valid.</t>
            </li>
            <li>
              <t>A subscription has failed for any reason, e.g.,:  </t>
              <ul spacing="normal">
                <li>
                  <t>The publisher is no longer able to honor the subscription, due to resource constraints, or the filter is no longer valid.</t>
                </li>
                <li>
                  <t>Any transport level buffer to the receiver has become full, and the hence the publisher is dropping <em>update</em> notifications.</t>
                </li>
              </ul>
            </li>
          </ol>
          <t>Below is a tree diagram for "subscription-terminated".  All objects contained in this tree are described in the YANG module in <xref target="yang-push-2-yang-module"/>.</t>
          <figure>
            <name>subscription-terminated Notification Tree Diagram</name>
            <sourcecode type="yangtree"><![CDATA[
    +---n subscription-terminated
    |  +--ro id        subscription-id
    |  +--ro reason    identityref
    +---n update
    |  +--ro id?                 subscription-id
    |  +--ro path-prefix?        string
    |  +--ro snapshot-type       enumeration
    |  +--ro observation-time?   yang:date-and-time
]]></sourcecode>
          </figure>
          <t><strong>TODO Augmenting extra fields is better for clients?</strong>  The <em>reason</em> data node identityref indicates why a subscription has been terminated, and could be extended with further reasons in future.  I suggest that we change this to an enum with an optional description field.**</t>
        </section>
        <section anchor="update-completed">
          <name>"update-completed"</name>
          <t><strong>TODO, this description needs to be updated</strong>.</t>
          <t>This notification indicates that all of the event records prior to the current time have been passed to a receiver.  It is sent before any notification messages containing an event record with a timestamp later than (1) the subscription's start time.</t>
          <t>After the <em>update-complete</em> notification has been sent, additional event records will be sent in sequence as they arise naturally on the publisher.</t>
          <t>Below is a tree diagram for <em>update-complete</em>.  All objects contained in this tree are described in the YANG module in Section 4.</t>
          <figure>
            <name>update-complete Notification Tree Diagram</name>
            <sourcecode type="yangtree"><![CDATA[
    +---n update-complete
       +--ro id?   subscription-id
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="configured-subscriptions">
        <name>Configured Subscriptions</name>
        <t>Configured subscriptions allow the management of subscriptions via configuration so that a publisher can send notification messages to a receiver.</t>
        <t>This document specifies the ietf-yang-push-2-config YANG module <xref target="yang-push-2-config-yang-module"/> that defines an configuration model for configuring subscriptions.  Support for this YANG module is <bcp14>OPTIONAL</bcp14> and is advertised using the normal YANG mechanisms, e.g., <xref target="RFC8525"/>. <strong>TODO, do we also advertise support via capabilities, i.e., <eref target="https://github.com/rgwilton/draft-yp-observability/issues/16">issue 16</eref></strong></t>
        <t>In addition to the common subscription parameters described in <xref target="CommonSubscriptionParameters"/>, a configured subscription also includes:</t>
        <ul spacing="normal">
          <li>
            <t>the receiver for the subscription, as described in <xref target="receivers"/>.  The referenced receiver specifies all transport, receiver, and encoding parameters.</t>
          </li>
        </ul>
        <t>Configured subscriptions have several characteristics distinguishing them from dynamic subscriptions, such as:</t>
        <ul spacing="normal">
          <li>
            <t>configured subscriptions are created, modified or deleted, by any configuration client with write permission on the subscription configuration.</t>
          </li>
          <li>
            <t>configured subscription may reference a filter rather than define it inline as part of the subscription.  Even for a referenced filter, the <em>subscription-started</em> and <em>subscription-modified</em> notifications always include the filter specification inline in the notification.</t>
          </li>
          <li>
            <t>The lifetime of a configured subscription is tied to the configuration.  I.e., if a valid and complete configuration exists for a subscription, then the publisher <bcp14>MUST</bcp14> attempt to connect to the receiver and honor the requirements of the subscription.  In particular:  </t>
            <ul spacing="normal">
              <li>
                <t>If the configuration is altered or removed then the subscription will similarly be altered or removed.</t>
              </li>
              <li>
                <t>If the device reboots, then the configured subscription will obviously end, but once the subscription configuration has been processed after boot up, then the subscription will be recreated again, assuming the subscription configuration is still valid.</t>
              </li>
              <li>
                <t>If the publisher detects that transport connectivity to the receiver is broken, then any subscriptions using that transport are terminated, but the publisher <bcp14>MUST</bcp14> periodically attempt to re-establish connection to the receiver and re-activate any configured subscriptions to that receiver.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The lifetime of any transport session(s) to receiver(s) are also tied to the subscription configuration, but in a way that depends on the behavior of the Yang Push 2 transport specificiation, i.e.,  </t>
            <ul spacing="normal">
              <li>
                <t>For YANG Push transports that specify a separate transport session for each subscription to the same receiver then a new transport session is established whenever a valid subscription is configured and the transport session <bcp14>MUST</bcp14> be closed if the subscription configuration is removed or changed such that the subscription is no longer valid.</t>
              </li>
              <li>
                <t>For YANG Push transports that specify a shared transport session for all subscriptions to the same receiver then a new transport session is established for the first valid configured subscription.  Note, if there are no active subscriptions for a given receiver then any transport session(s) associated with that receiver <bcp14>MUST</bcp14> be closed, but that <bcp14>MAY</bcp14> be after a short delay.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Other than the <em>reset</em> YANG Action, described in <xref target="reset"/>, there are no YANG RPCs to dynamically create, modify, or delete a configured subscription, any alterations <bcp14>MUST</bcp14> be done via changes to the configuration.</t>
          </li>
        </ul>
        <section anchor="creating-a-configured-subscription">
          <name>Creating a Configured Subscription</name>
          <t>Configured subscriptions are those created via changes to the publisher's configuration, e.g., using the YANG module defined in <xref target="config-subs-data-model"/>, or an equivalent configuration mechanism, such as a command-line interface, or alternative YANG configuration model.</t>
          <t>After the configuration change has been accepted by the system, then the subscription is updated, as per <xref target="CreatingSubscriptions"/>.</t>
          <t><strong>TODO, to see an example of subscription creation using configuration operations over NETCONF, see Appendix A.</strong></t>
        </section>
        <section anchor="modifying-a-configured-subscription">
          <name>Modifying a Configured Subscription</name>
          <t>Configured subscriptions can be modified due to configuration changes in the subscription configuration or referenced configuration, i.e., filters or receivers.  After the configuration change has been accepted by the system, then the subscription is updated, as per <xref target="ModifyingSubscriptions"/>.</t>
        </section>
        <section anchor="deleting-a-configured-subscription">
          <name>Deleting a Configured Subscription</name>
          <t>Configured subscriptions can be deleted via configuration.  After the configuration change has been accepted by the system the subscription is terminated, as per <xref target="TerminatingSubscriptions"/>.</t>
        </section>
        <section anchor="reset">
          <name>Resetting a Configured Subscription</name>
          <t>Configured subscriptions are generally expected to self-monitor and automatically reconnect to the receiver if they experience network or transport issues.  However, the data model also defines explicit YANG <em>actions</em> to either: (i) reset a single subscription, or (ii) reset all subscriptions and the transports(s) associated with a specific configured receiver instance.</t>
          <t>These reset actions primarily act at the subscription application layer, but may be useful if a receiver or collector determines that a configured subscription is not behaving correctly, and wishes to force a reset of the subscription without modifying the configuration associated with the subscription or forcing a configuration change on the publisher device.</t>
          <t>The reset action on a subscription is handled equivalently to removing and re-adding the subscription configuration.  I.e., the subscription <bcp14>MUST</bcp14> be terminated, as per <xref target="TerminatingSubscriptions"/> before being recreated, as per <xref target="CreatingSubscriptions"/>.  The reset action also resets (terminated and re-establishes) any subscription specific transport session that is not shared with any other subscriptions.  Any counters associated with the subscription are also re-initialized in a manner that is consistent with a client unconfiguring and then reconfiguring the subscription.</t>
          <t>The reset action on a receiver is handled equivalently to removing and re-adding the receiver configuration for the receiver that has been reset.  Specifically, every subscription referencing the receiver <bcp14>MUST</bcp14> be terminated, as per <xref target="TerminatingSubscriptions"/> before being recreated, as per <xref target="CreatingSubscriptions"/>.  Any transport sessions tied to the subscriptions referencing the reset receiver <bcp14>MUST</bcp14> also be terminated and re-established.  Any counters associated with the receiver are also re-initialized in a manner that is consistent with a client unconfiguring and then reconfiguring the receiver configuration.</t>
        </section>
      </section>
      <section anchor="DynamicSubscriptions">
        <name>Dynamic Subscriptions</name>
        <t>Dynamic subscriptions are where a subscriber initiates a subscription negotiation with a publisher via a YANG RPC <xref target="RFC7950"/>.</t>
        <t>Support for dynamic subscriptions is <bcp14>OPTIONAL</bcp14>, with its availability advertised via the <em>dynamic</em> YANG feature in the ietf-yang-push-2 YANG module <xref target="yang-push-2-yang-module"/>, and also via the capabilities module <xref target="yang-push-2-yang-capabilities-module"/>.</t>
        <t>Dynamic subscription differ from configured subscription in the following ways:</t>
        <ul spacing="normal">
          <li>
            <t>Dynamic subscription reuse the same transport session on which the <em>establish-subscription</em> RPC was received to send back any notifications, and so the transport and receiver do not need to be specified and each dynamic subscription can always only have a single receiver.</t>
          </li>
          <li>
            <t>The publisher <bcp14>MUST</bcp14> reply to the <em>establish-subscription</em> RPC before sending the <em>subscription-started</em> or any <em>update</em> notifications for this subscription.</t>
          </li>
          <li>
            <t>The lifetime of a dynamic subscription is bound by the transport session used to establish it.  If the transport session fails then the dynamic subscription <bcp14>MUST</bcp14> be terminated.</t>
          </li>
          <li>
            <t>Dynamic subscriptions can either be terminated by the client that established the subscription sending a <em>delete-subscription</em> YANG RPC on the same transport session, or any client with sufficient access permissions invoking the <em>kill-subscription</em> YANG RPC.</t>
          </li>
          <li>
            <t>A publisher <bcp14>MAY</bcp14> terminate a dynamic subscription at any time, i.e., due to internal constraints of the publisher.</t>
          </li>
          <li>
            <t>If a dynamic subscription is terminated for any reason, then the client is responsible for re-establishing the subscription if it is still required.</t>
          </li>
          <li>
            <t>If the publisher cannot honor the terms of a dynamic subscription then the subscription <bcp14>MUST</bcp14> be terminated. <strong>TODO, is this a <bcp14>SHOULD</bcp14> or <bcp14>MUST</bcp14>, do we want some leeway for temporary issues? E.g., allow some buffering. Also, this effectively applies to config subscriptions as well and hence should move.</strong></t>
          </li>
        </ul>
        <section anchor="EstablishDynamic">
          <name>Establishing a Dynamic Subscription</name>
          <t>The <em>establish-subscription</em> RPC allows a subscriber to request the creation of a subscription.</t>
          <t>In addition to the common subscription parameters described in <xref target="CommonSubscriptionParameters"/>, the <em>establish-subscription</em> YANG RPC:</t>
          <ul spacing="normal">
            <li>
              <t>includes the <em>encoding</em> to be used for all YANG Push v2 notifications</t>
            </li>
            <li>
              <t>optionally includes DSCP settings to use for the transport.</t>
            </li>
          </ul>
          <t>The DSCP code point settings for all subscription using the same transport session <bcp14>MUST</bcp14> be the same.  Attempts to invoke <em>establish-subscription</em> with a different DSCP code point <bcp14>MUST</bcp14> be rejected.</t>
          <t>If the publisher can satisfy the <em>establish-subscription</em> request, it replies with a numeric identifier for the subscription and then immediately starts streaming notification messages.</t>
          <t>A dynamic subscription request <bcp14>MUST</bcp14> be declined if a publisher determines that it may be unable to provide update records meeting the terms of an <em>establish-subscription</em> RPC request.</t>
          <t>Below is a tree diagram for <em>establish-subscription</em> YANG RPC.  All objects contained in this tree are described in the YANG module in <xref target="yang-push-2-yang-module"/>.</t>
          <figure anchor="EstablishSubscriptionYangTree">
            <name>establish-subscription YANG RPC</name>
            <sourcecode type="yangtree"><![CDATA[
    +---x establish-subscription {dynamic}?
    |  +---w input
    |  |  +---w id?               subscription-id
    |  |  +---w description?      string
    |  |  +---w target
    |  |  |  +---w datastore?       identityref
    |  |  |  +---w (filter)
    |  |  |     +--:(path)
    |  |  |     |  +---w path       ypath
    |  |  |     +--:(subtree)
    |  |  |     |  +---w subtree    <anydata>
    |  |  |     +--:(xpath)
    |  |  |        +---w xpath      yang:xpath1.0 {yp2:xpath}?
    |  |  +---w update-trigger
    |  |  |  +---w periodic!
    |  |  |  |  +---w period         centiseconds
    |  |  |  |  +---w anchor-time?   yang:date-and-time
    |  |  |  +---w on-change! {on-change}?
    |  |  |     +---w sync-on-start?   boolean
    |  |  +---w encoding          encoding
    |  |  +---w dscp?             inet:dscp
    |  +--ro output
    |     +--ro id    subscription-id
]]></sourcecode>
          </figure>
          <t>A publisher <bcp14>MAY</bcp14> reject the "establish-subscription" RPC for many reasons, as described in <strong>TODO</strong> (Section 2.4.6)?</t>
          <!--
TODO - Decide the simplest mechanism for returning RPC errors.

Below is a tree diagram for "establish-subscription-stream-error-info" RPC yang-data.  All objects contained in this tree are described in the YANG module in {{yang-push-2-yang-module}}.

~~~~
    yang-data establish-subscription-stream-error-info
      +- -ro establish-subscription-stream-error-info
        +- -ro reason?                   identityref
        +- -ro filter-failure-hint?      string

        Figure 3: "establish-subscription-stream-error-info"
                    RPC yang-data Tree Diagram
~~~~
{: align="left" title="\"establish-subscription-stream-error-info\" Tree Diagram"}
-->

</section>
        <section anchor="ModifyDynamic">
          <name>Modifying a Dynamic Subscription</name>
          <t>The <em>modify-subscription</em> RPC allows a subscriber to request the modification of parameters associated with a dynamic subscription. It uses the same parameters as the <em>establish-subscription</em> RPC defined in <xref target="EstablishDynamic"/>, except that the <em>id</em> leaf is mandatory.</t>
          <t>If the modification to the subscription is accepted by the publisher then it is processed as per <xref target="ModifyingSubscriptions"/>, otherwise an error is returned to the <em>modify-subscription</em> RPC and the subscription is left unmodified.</t>
          <t>The publisher <bcp14>MUST</bcp14> reply to the <em>modify-subscription</em> RPC before sending any subscription lifecycle notifications, i.e., a pair of <em>subscription-terminated</em>/<em>subscription-started</em> notifications, or a<em>subscription-modified</em> notification.</t>
          <t>Below is a tree diagram for the <em>modify-subscription</em> YANG RPC.  All objects contained in this tree are described in the YANG module in <xref target="yang-push-2-yang-module"/>.</t>
          <figure anchor="ModifySubscriptionYangTree">
            <name>modify-subscription YANG RPC</name>
            <sourcecode type="yangtree"><![CDATA[
    +---x modify-subscription {dynamic}?
    |  +---w input
    |     +---w id                subscription-id
    |     +---w description?      string
    |     +---w target
    |     |  +---w datastore?       identityref
    |     |  +---w (filter)
    |     |     +--:(path)
    |     |     |  +---w path       ypath
    |     |     +--:(subtree)
    |     |     |  +---w subtree    <anydata>
    |     |     +--:(xpath)
    |     |        +---w xpath      yang:xpath1.0 {yp2:xpath}?
    |     +---w update-trigger
    |     |  +---w periodic!
    |     |  |  +---w period         centiseconds
    |     |  |  +---w anchor-time?   yang:date-and-time
    |     |  +---w on-change! {on-change}?
    |     |     +---w sync-on-start?   boolean
    |     +---w dscp?             inet:dscp
]]></sourcecode>
          </figure>
          <t>A publisher <bcp14>MAY</bcp14> reject the "modify-subscription" RPC for various reasons, as described in <strong>TODO</strong>.</t>
        </section>
        <section anchor="deleting-a-dynamic-subscription">
          <name>Deleting a Dynamic Subscription</name>
          <t>The <em>delete-subscription</em> operation permits canceling an existing dynamic subscription that was established on the same transport session connecting to the subscriber.</t>
          <t>The publisher responds to the request in the following way:</t>
          <ul spacing="normal">
            <li>
              <t>If the identifier matches a <em>dynamic</em> subscription created on the same transport session then it <bcp14>MUST</bcp14> terminate the subscription, as per <xref target="TerminatingSubscriptions"/>.  </t>
              <t>
The publisher <bcp14>MAY</bcp14> reply back to the client before the subscription has been terminated, i.e., it may act asynchronously with respect to the delete request, however, the publisher <bcp14>MUST</bcp14> allow the client to create a new subscription using the same subscription id immediately after either the RPC operation completes or the <em>subscription-terminated</em> notification (<xref target="SubscriptionTerminatedNotification"/>) has been transmitted.</t>
            </li>
            <li>
              <t>Otherwise, the request is failed with an "unknown subscription" error message.</t>
            </li>
          </ul>
          <t>Below is the tree diagram for the <em>delete-subscription</em> RPC.  All objects contained in this tree are described in the YANG module in <xref target="yang-push-2-yang-module"/>.</t>
          <figure anchor="DeleteSubscriptionYangTree">
            <name>delete-subscription YANG RPC</name>
            <sourcecode type="yangtree"><![CDATA[
    +---x delete-subscription {dynamic}?
    |  +---w input
    |     +---w id    subscription-id
]]></sourcecode>
          </figure>
        </section>
        <section anchor="killing-a-dynamic-subscription">
          <name>Killing a Dynamic Subscription</name>
          <t>The <em>kill-subscription</em> RPC operation permits a client, that has the required access permissions, to forcibly terminate any arbitrary dynamic subscription, identified by subscription id, including those not associated with the transport session used for the <em>kill-subscription</em> RPC.  The subscription is terminated as per <xref target="TerminatingSubscriptions"/>.</t>
          <t>The publisher <bcp14>MAY</bcp14> reply back to the client before the subscription has been terminated, i.e., it may act asynchronously with respect to the delete request, however, the publisher <bcp14>MUST</bcp14> allow the client to create a new subscription using the same subscription id immediately after the <em>subscription-terminated</em> notification (<xref target="SubscriptionTerminatedNotification"/>) has been transmitted.</t>
          <t>Below is the tree diagram for the <em>kill-subscription</em> RPC.  All objects contained in this tree are described in the YANG module in <xref target="yang-push-2-yang-module"/>.</t>
          <figure anchor="KillSubscriptionYangTree">
            <name>kill-subscription YANG RPC</name>
            <sourcecode type="yangtree"><![CDATA[
    +---x kill-subscription {dynamic}?
       +---w input
          +---w id    subscription-id
]]></sourcecode>
          </figure>
        </section>
        <section anchor="rpc-failures">
          <name>RPC Failures</name>
          <t><strong>TODO, we should see if we can simplify how errors are reported.</strong></t>
          <t>Whenever an RPC is unsuccessful, the publisher returns relevant
information as part of the RPC error response.  Transport-level error
processing <bcp14>MUST</bcp14> be done before the RPC error processing described in
this section.  In all cases, RPC error information returned by the
publisher will use existing transport-layer RPC structures, such as
those seen with NETCONF (Appendix A of <xref target="RFC6241"/>) or RESTCONF
(Section 7.1 of <xref target="RFC8040"/>).  These structures <bcp14>MUST</bcp14> be able to encode
subscription-specific errors identified below and defined in this
document's YANG data model.</t>
          <t>As a result of this variety, how subscription errors are encoded in
an RPC error response is transport dependent.  Valid errors that can
occur for each RPC are as follows:</t>
          <artwork><![CDATA[
  establish-subscription         modify-subscription
  ----------------------         ----------------------
  dscp-unavailable               filter-unsupported
  encoding-unsupported           insufficient-resources
  filter-unsupported             no-such-subscription
  insufficient-resources

  delete-subscription            kill-subscription
  ----------------------         ----------------------
  no-such-subscription           no-such-subscription
]]></artwork>
          <t>To see a NETCONF-based example of an error response from the list
above, see the "no-such-subscription" error response illustrated in
<xref target="RFC8640"/>, Figure 10.</t>
          <t>There is one final set of transport-independent RPC error elements
included in the YANG data model defined in this document: three
yang-data structures that enable the publisher to provide to the
receiver any error information that does not fit into existing
transport-layer RPC structures.  These structures are:</t>
          <ol spacing="normal" type="1"><li>
              <t>"establish-subscription-stream-error-info": This <bcp14>MUST</bcp14> be returned
 with the leaf "reason" populated if an RPC error reason has not
 been placed elsewhere in the transport portion of a failed
 "establish-subscription" RPC response.  This <bcp14>MUST</bcp14> be sent if
 hints on how to overcome the RPC error are included.</t>
            </li>
            <li>
              <t>"modify-subscription-stream-error-info": This <bcp14>MUST</bcp14> be returned
 with the leaf "reason" populated if an RPC error reason has not
 been placed elsewhere in the transport portion of a failed
 "modify-subscription" RPC response.  This <bcp14>MUST</bcp14> be sent if hints
 on how to overcome the RPC error are included.</t>
            </li>
            <li>
              <t>"delete-subscription-error-info": This <bcp14>MUST</bcp14> be returned with the
 leaf "reason" populated if an RPC error reason has not been
 placed elsewhere in the transport portion of a failed
 "delete-subscription" or "kill-subscription" RPC response.</t>
            </li>
          </ol>
        </section>
      </section>
    </section>
    <section anchor="robustness-reliability-and-subscription-monitoring">
      <name>Robustness, Reliability, and Subscription Monitoring</name>
      <section anchor="robustness-and-reliability">
        <name>Robustness and Reliability</name>
        <t>It is important for clients to have confidence that the telemetry data that they receive is correct and complete.  The design of YANG Push v2 achieves this in several ways:</t>
        <ul spacing="normal">
          <li>
            <t>the <em>complete</em> flag in the <em>update</em> notification, or the equivalent <em>update-complete</em> notification, are used to signal when all data for a periodic collection event has been enqueued by the publisher.  This allows clients to delete stale information and monitor the performance and behavior of the publisher.</t>
          </li>
          <li>
            <t>publishers use buffers when enqueuing traffic on to a transport to a receiver, but if that buffer becomes full then the transport specification indicates whether update messages should be dropped, or the subscription should be terminated.  In that case that a dynamic subscription is terminated, the client may attempt to re-created the subscription.  For configured subscriptions that have been terminated, the publisher should attempt to periodically recreate the subscription or reconnect the receiver.</t>
          </li>
          <li>
            <t>the <em>notification envelope</em> structure, <xref target="FullNotificationExample"/>, used for all YANG Push notifications contains a monotonically increasing <em>sequence-number</em> field that allows for lost messages in an end-to-end data pipeline spanning multiple transport hops to be detected, allowing appropriate mitigation steps to be taken.  For example, see figure 1 in <xref target="I-D.ietf-nmop-network-anomaly-architecture"/>.</t>
          </li>
          <li>
            <t>the protocol relies on transport protocols that are either reliable, e.g., TCP or HTTP, or unreliable transports that employ mechanisms for clients to detect when losses at the transport layer have occurred, e.g., the <em>message id</em> in <xref target="I-D.draft-ietf-netconf-udp-notif"/> (<strong>TODO fix reference to bis version, once that becomes available</strong>).</t>
          </li>
          <li>
            <t>finally, if a publisher is not able to honor the expectation for a subscription for any reason, then the publisher always has the option to terminate the subscription.  It can then subsequently refuse to handle new subscriptions if it does not have sufficient resources to handle the subscription.</t>
          </li>
        </ul>
      </section>
      <section anchor="subscription-monitoring">
        <name>Subscription Monitoring</name>
        <t>In the operational state datastore, the <em>datastore-telemetry</em> container maintains operational state for all configured and dynamic subscriptions.</t>
        <t>Both configured and dynamic subscriptions are represented in the list <em>ietf-yang-push-2-config:datastore-telemetry/subscriptions/subscription</em>.  Dynamic subscriptions are only present in the list when they are active, and are removed as soon as they are terminated.  Whereas, configured subscriptions are always present in the list when they are configured, regardless of whether they are active.</t>
        <t>The operational state is important for monitoring the health of subscriptions, receivers, and the overall telemetry subsystem.</t>
        <t>This includes:</t>
        <t><strong>TODO, update the YANG model with more useful operational data, and mostly this section should briefly summarize and refer to the YANG model.  We should also consider what indications to include from filters that cause a larger amount of internal work but don't generate a large number of transmitted notifications.</strong></t>
        <ul spacing="normal">
          <li>
            <t>per subscription status and counters</t>
          </li>
          <li>
            <t>per receiver status and counters</t>
          </li>
          <li>
            <t>maybe some indication of the overall load on the telemetry subsystem, but we need to consider how useful that actually is, and whether just monitoring the device CPU load and general performance would be a better indication.</t>
          </li>
        </ul>
        <!-- TODO - Consider incorporating some aspects of this text.
Each subscription in the operational state datastore is represented as a list element.  Included in this list are event counters for each receiver, the state of each receiver, and the subscription parameters currently in effect.  The appearance of the leaf "configured-subscription-state" indicates that a particular subscription came into being via configuration.  This leaf also indicates whether the current state of that subscription is "valid", "invalid", or "concluded".

To understand the flow of event records in a subscription, there are two counters available for each receiver.  The first counter is "sent-event-records", which shows the number of events identified for sending to a receiver.  The second counter is "excluded-event-records", which shows the number of event records not sent to a receiver.  "excluded-event-records" shows the combined results of both access control and per-subscription filtering.  For configured subscriptions, counters are reset whenever the subscription's state is evaluated as "valid" (see (1) in Figure 8).

// Taken from another section.
In addition, the YANG Push v2 operational data gives an indication of the overall telemetry load on the device and hence gives an indication to whether a particular telemetry request is likely to be accepted, and honored.
-->

</section>
      <section anchor="publisher-capacity">
        <name>Publisher Capacity</name>
        <t>A publisher <bcp14>SHOULD</bcp14> reject a request for a subscription if it is unlikely that the publisher will be able to fulfill the terms of that subscription request.</t>
        <t>Whether or not a subscription can be supported will be determined by a combination of several factors, such as the subscription update trigger (on-change or periodic), the period in which to report changes (one-second periods will consume more resources than one-hour periods), the amount of data in the datastore subtree that is being subscribed to, the number and combination of other subscriptions that are concurrently being serviced, and the overall load from other services running on the publisher.</t>
        <t>It is entirely possible that a subscription may be reasonable at the time that it is created, but other changes to configuration or operational data or load in the system means that the subscription can no longer be honored.</t>
        <t>TODO - Do we allow servers to reduce the period of the subscription to allow it to be kept active?  E.g., with a subscription modification notification?  E.g., see <eref target="https://github.com/rgwilton/draft-yp-observability/issues/41">issue 41</eref></t>
      </section>
    </section>
    <section anchor="ConformanceAndCapabilities">
      <name>Conformance and Capabilities</name>
      <t>The normative text in this document already indicates which parts of the specification must or should be implemented for a compliant YANG Push v2 implementation via the use of <xref target="RFC2119"/> language.  It also sets out some additional related requirements, e.g., on transports <xref target="transports"/>, that add in additional functionality.</t>
      <t>Some parts of this specification are optional to implement.  Some of these optional parts can be identified through the use of YANG Library <xref target="RFC8525"/> specifying the list of implemented YANG modules and YANG features.  But, the broader approach adopted by this specification is via extending the ietf-system-capabilities YANG module specified in <xref target="RFC9196"/> to make capability information available as standard YANG described operational data.</t>
      <section anchor="capabilities">
        <name>Capabilities</name>
        <t>Publishers <bcp14>SHOULD</bcp14> implement the ietf-system-capabilities YANG module, defined in <xref target="RFC9196"/>, and the ietf-yang-push-2-capabilities YANG module, defined in <xref target="yang-push-2-yang-capabilities-module"/>) that augments ietf-system-capabilities.</t>
        <t>The ietf-yang-push-2-capabilities module contains capabilities to indicate what types of subscriptions and transports may be configured, along with acceptable subscription parameter for given subtrees.</t>
        <t>The schema tree for the ietf-system-capabilities augmented by ietf-yang-push-2-capabilities is given below.</t>
        <figure>
          <name>YANG tree for ietf-system-capabilities with ietf-yl-lite-capabilities augmentations.</name>
          <sourcecode type="yangtree"><![CDATA[
module: ietf-system-capabilities
  +--ro system-capabilities
     +--ro datastore-capabilities* [datastore]
     |  +--ro datastore
     |  |       -> /yanglib:yang-library/datastore/name
     |  +--ro per-node-capabilities* []
     |     +--ro (node-selection)?
     |     |  +--:(node-selector)
     |     |     +--ro node-selector?
     |     |             nacm:node-instance-identifier
     |     +--ro notc:subscription-capabilities
     |     |  +--ro notc:max-nodes-per-update?               uint32
     |     |  +--ro notc:periodic-notifications-supported?
     |     |  |       notification-support
     |     |  +--ro (notc:update-period)?
     |     |  |  +--:(notc:minimum-update-period)
     |     |  |  |  +--ro notc:minimum-update-period?        uint32
     |     |  |  +--:(notc:supported-update-period)
     |     |  |     +--ro notc:supported-update-period*      uint32
     |     |  +--ro notc:on-change-supported?
     |     |  |       notification-support {yp:on-change}?
     |     |  +--ro notc:minimum-dampening-period?           uint32
     |     |  |       {yp:on-change}?
     |     |  +--ro notc:supported-excluded-change-type*     union
     |     |          {yp:on-change}?
     |     +--ro yp2ca:datastore-telemetry
     |        +--ro yp2ca:periodic-notifications-supported?
     |        |       notification-support
     |        +--ro (yp2ca:update-period)?
     |        |  +--:(yp2ca:minimum-update-period)
     |        |  |  +--ro yp2ca:minimum-update-period?        uint32
     |        |  +--:(yp2ca:supported-update-period)
     |        |     +--ro yp2ca:supported-update-period*      uint32
     |        +--ro yp2ca:on-change-supported?
     |                notification-support
     +--ro notc:subscription-capabilities
     |  +--ro notc:max-nodes-per-update?               uint32
     |  +--ro notc:periodic-notifications-supported?
     |  |       notification-support
     |  +--ro (notc:update-period)?
     |  |  +--:(notc:minimum-update-period)
     |  |  |  +--ro notc:minimum-update-period?        uint32
     |  |  +--:(notc:supported-update-period)
     |  |     +--ro notc:supported-update-period*      uint32
     |  +--ro notc:on-change-supported?
     |  |       notification-support {yp:on-change}?
     |  +--ro notc:minimum-dampening-period?           uint32
     |  |       {yp:on-change}?
     |  +--ro notc:supported-excluded-change-type*     union
     |  |       {yp:on-change}?
     |  +--ro inotenv:notification-metadata
     |     +--ro inotenv:notification-envelope?   boolean
     |     +--ro inotenv:metadata
     |        +--ro inotenv:hostname-sequence-number?   boolean
     +--ro yp2ca:datastore-telemetry
     |  +--ro yp2ca:periodic-notifications-supported?
     |  |       notification-support
     |  +--ro (yp2ca:update-period)?
     |  |  +--:(yp2ca:minimum-update-period)
     |  |  |  +--ro yp2ca:minimum-update-period?        uint32
     |  |  +--:(yp2ca:supported-update-period)
     |  |     +--ro yp2ca:supported-update-period*      uint32
     |  +--ro yp2ca:on-change-supported?
     |  |       notification-support
     |  +--ro yp2ca:transport
     |     +--ro yp2ca:transport-capability* [transport-protocol]
     |        +--ro yp2ca:transport-protocol    identityref
     |        +--ro yp2ca:security-protocol?    identityref
     |        +--ro yp2ca:encoding-format*      identityref
     +--ro yp2ca:distributed-notifications-supported?   boolean
]]></sourcecode>
        </figure>
        <t><strong>TODO, do we need additional capabilities, as per <eref target="https://github.com/rgwilton/draft-yp-observability/issues/18">Issue 18</eref></strong></t>
      </section>
      <section anchor="subscription-content-versioning">
        <name>Subscription Content Versioning</name>
        <t>Many receivers will want to know what the schema is associated with a subscription and whether that schema has changed, e.g., due to a changing in software on the publisher.</t>
        <t>Various mechanisms are available to help receivers or collectors learn or monitor the schema associated with a subscription:</t>
        <ol spacing="normal" type="1"><li>
            <t>The device schema is available in the YANG library module ietf-yang-library.yang as defined in <xref target="RFC8525"/>.  YANG library also provides a simple "yang-library-change" notification that informs the subscriber that the library has changed, or alternatively, the publisher may support an on-change telemetry subscription to</t>
          </li>
        </ol>
        <t>Content Schema Identification</t>
        <t>YANG Module Synchronization</t>
        <t>To make subscription requests, the subscriber needs to know the YANG datastore schemas used by the publisher.  These schemas are available in the YANG library module ietf-yang-library.yang as defined in <xref target="RFC8525"/>.  The receiver is expected to know the YANG library information before starting a subscription.</t>
        <t>The set of modules, revisions, features, and deviations can change at runtime (if supported by the publisher implementation).  For this purpose, the YANG library provides a simple "yang-library-change" notification that informs the subscriber that the library has changed.  In this case, a subscription may need to be updated to take the updates into account.  The receiver may also need to be informed of module changes in order to process updates regarding datastore</t>
        <t><strong>TODO, this section should be updated so that a subscription is restarted if the schema that it is using changes, and to incorporate ideas to fingerprint the subscription schema in the subscription-started notification.</strong></t>
      </section>
    </section>
    <section anchor="distributed-notifications">
      <name>Distributed Notifications - Multiple Publishing Processes</name>
      <t>Distributed notifications is the concept of allowing subscriptions to be served from multiple different agent publisher processes on the same device.  As a simple example, an implementation could choose to have separate publishing processes for each linecard in a network device, so that data that is local to that linecard can be published directly from the linecard, perhaps directly from the linecard data interfaces, without been sent to a Management Processor card that could act a bottleneck.</t>
      <t>The YANG Push 2 specification supports distributed notifications as described in <xref target="I-D.ietf-netconf-distributed-notif"/>, and using the terminology defined therewithin, but with some differences due to the different YANG data models, which are described below.</t>
      <t>It is <bcp14>OPTIONAL</bcp14> for YANG Push 2 publishers to support multiple publisher agents since they always have the option of handling all subscriptions from a single publisher process on each server.  Receivers and consumers of YANG Push 2 subscription data <bcp14>MUST</bcp14> accommodate servers that publish their data from multiple Message Publishing processes, e.g., they may need to correlate the update-complete notification across multiple publishing processes.</t>
      <t>Publishers serving a subscription <bcp14>MUST</bcp14> only send the data for a given YANG data node from a single Message Publisher process.  Publishers <bcp14>MAY</bcp14> change which Message Publisher process is sending the data for a given YANG data node over time, e.g., to load-balance work.</t>
      <t>The differences for supporting <xref target="I-D.ietf-netconf-distributed-notif"/> with YANG Push 2 are:</t>
      <ul spacing="normal">
        <li>
          <t>the publisher-id leaf, that identities the Message Publisher ID of the publishing process, is augmented in the envelope notification <xref target="I-D.draft-ietf-netconf-notif-envelope"/> rather than the <em>push-update</em> and <em>push-change-update</em> messages.  This means that all messages sent by any Message Publishers (e.g., including Subscription Lifecyle Notifications) will indicate which Message Publisher sent the message.</t>
        </li>
        <li>
          <t>the publisher-id leaf has a default value of 0.  The publisher-id of 0 is reserved for the Publisher Parent process and <bcp14>MUST NOT</bcp14> be allocated to any Publisher Agent processes, since that allows for the publisher-id leaf to be omitted from notification messages sent from the Publisher Parent.</t>
        </li>
        <li>
          <t>the <em>subscription-started</em> and <em>subscription-modified</em> notifications have a <em>message-publishers/publisher-id</em> leaf-list that identifies all Message Publishers that will send messages as part of the subscription.  This leaf-list defaults to a single entry of 0, so <bcp14>MAY</bcp14> be ommitted if there is only a single Message Publisher and it has an publisher-id of 0.  </t>
          <ul spacing="normal">
            <li>
              <t>As per <xref target="I-D.ietf-netconf-distributed-notif"/>, the list of Message Publishers serving an active subscription can change during the lifetime of the subscription and the Publisher Parent <bcp14>MUST</bcp14> send a <em>subscription-modified</em> notification of any change in publisher-ids.</t>
            </li>
            <li>
              <t>Yang Push 2 does not return the list of publisher-ids as part of the establish-subscription response output because the dynamic subscription will receive a <em>subscription-started</em> notification instead, which also provides a more robust mechanism consistent with configured subscriptions.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>the <em>subscriptions/subscription</em> has a <em>message-publishers/publisher-id</em> leaf-list to report the current list of Message Publishers associated with a subscription.</t>
        </li>
        <li>
          <t>A capability flag is used to indicate whether the server might use distributed notifications.</t>
        </li>
        <li>
          <t>the <em>update-complete</em> notifications, or the equivalent <em>complete</em> leaf as part of an <em>update</em> notification are generated per Message Publisher process, and are scoped as such.  I.e., this may require clients to count and correlate update complete indications across Message Publishers for a given subscription.</t>
        </li>
      </ul>
    </section>
    <section anchor="ietf-yang-push-2-yang">
      <name>Core YANG Push v2 YANG Data Model</name>
      <section anchor="yang-push-2-tree">
        <name>ietf-yang-push-2 YANG tree</name>
        <t>This section shows the full tree output for ietf-yang-push-2 YANG module.</t>
        <t>Note, this output does not include support for any transport configuration, and for any implementation that supports configured subscriptions using this YANG module then at least one transport would expect to be configurable.</t>
        <figure>
          <name>YANG tree for YANG Push v2 Module Tree Output</name>
          <sourcecode type="yangtree"><![CDATA[
module: ietf-yang-push-2

  rpcs:
    +---x establish-subscription {dynamic}?
    |  +---w input
    |  |  +---w id?               subscription-id
    |  |  +---w description?      string
    |  |  +---w target
    |  |  |  +---w datastore?       identityref
    |  |  |  +---w (filter)
    |  |  |     +--:(path)
    |  |  |     |  +---w path       ypath
    |  |  |     +--:(subtree)
    |  |  |     |  +---w subtree    <anydata>
    |  |  |     +--:(xpath)
    |  |  |        +---w xpath      yang:xpath1.0 {yp2:xpath}?
    |  |  +---w update-trigger
    |  |  |  +---w periodic!
    |  |  |  |  +---w period         centiseconds
    |  |  |  |  +---w anchor-time?   yang:date-and-time
    |  |  |  +---w on-change! {on-change}?
    |  |  |     +---w sync-on-start?   boolean
    |  |  +---w encoding          encoding
    |  |  +---w dscp?             inet:dscp
    |  +--ro output
    |     +--ro id    subscription-id
    +---x modify-subscription {dynamic}?
    |  +---w input
    |     +---w id                subscription-id
    |     +---w description?      string
    |     +---w target
    |     |  +---w datastore?       identityref
    |     |  +---w (filter)
    |     |     +--:(path)
    |     |     |  +---w path       ypath
    |     |     +--:(subtree)
    |     |     |  +---w subtree    <anydata>
    |     |     +--:(xpath)
    |     |        +---w xpath      yang:xpath1.0 {yp2:xpath}?
    |     +---w update-trigger
    |     |  +---w periodic!
    |     |  |  +---w period         centiseconds
    |     |  |  +---w anchor-time?   yang:date-and-time
    |     |  +---w on-change! {on-change}?
    |     |     +---w sync-on-start?   boolean
    |     +---w dscp?             inet:dscp
    +---x delete-subscription {dynamic}?
    |  +---w input
    |     +---w id    subscription-id
    +---x kill-subscription {dynamic}?
       +---w input
          +---w id    subscription-id

  notifications:
    +---n subscription-started
    |  +--ro id                    subscription-id
    |  +--ro description?          string
    |  +--ro target
    |  |  +--ro datastore?                 identityref
    |  |  +--ro (filter)
    |  |  |  +--:(path)
    |  |  |  |  +--ro path                 ypath
    |  |  |  +--:(subtree)
    |  |  |  |  +--ro subtree              <anydata>
    |  |  |  +--:(xpath)
    |  |  |     +--ro xpath                yang:xpath1.0 {yp2:xpath}?
    |  |  +--ro schema-id?                 string
    |  |  +--ro yang-library-content-id?
    |  |          -> /yanglib:yang-library/content-id
    |  +--ro update-trigger
    |  |  +--ro periodic!
    |  |  |  +--ro period         centiseconds
    |  |  |  +--ro anchor-time?   yang:date-and-time
    |  |  +--ro on-change! {on-change}?
    |  |     +--ro sync-on-start?   boolean
    |  +--ro message-publishers
    |     +--ro publisher-id*   uint32
    +---n subscription-modified
    |  +--ro id                    subscription-id
    |  +--ro description?          string
    |  +--ro target
    |  |  +--ro datastore?                 identityref
    |  |  +--ro (filter)
    |  |  |  +--:(path)
    |  |  |  |  +--ro path                 ypath
    |  |  |  +--:(subtree)
    |  |  |  |  +--ro subtree              <anydata>
    |  |  |  +--:(xpath)
    |  |  |     +--ro xpath                yang:xpath1.0 {yp2:xpath}?
    |  |  +--ro schema-id?                 string
    |  |  +--ro yang-library-content-id?
    |  |          -> /yanglib:yang-library/content-id
    |  +--ro update-trigger
    |  |  +--ro periodic!
    |  |  |  +--ro period         centiseconds
    |  |  |  +--ro anchor-time?   yang:date-and-time
    |  |  +--ro on-change! {on-change}?
    |  |     +--ro sync-on-start?   boolean
    |  +--ro message-publishers
    |  |  +--ro publisher-id*   uint32
    |  +--ro reason                subscription-change
    +---n subscription-terminated
    |  +--ro id        subscription-id
    |  +--ro reason    identityref
    +---n update
    |  +--ro id?                 subscription-id
    |  +--ro path-prefix?        string
    |  +--ro snapshot-type       enumeration
    |  +--ro observation-time?   yang:date-and-time
    |  +--ro updates* [target-path]
    |  |  +--ro target-path          string
    |  |  +--ro (data)?
    |  |     +--:(merge)
    |  |     |  +--ro merge?         <anydata>
    |  |     +--:(replaced-by)
    |  |     |  +--ro replaced-by?   <anydata>
    |  |     +--:(deleted)
    |  |        +--ro deleted?       empty
    |  +--ro complete?           boolean
    +---n update-complete
       +--ro id?   subscription-id
]]></sourcecode>
        </figure>
      </section>
      <section anchor="yang-push-2-yang-module">
        <name>ietf-yang-push-2 YANG Model</name>
        <t>This module imports typedefs from <xref target="RFC6991"/>, <xref target="RFC8343"/>, <xref target="RFC8341"/>, <xref target="RFC8529"/>, and <xref target="RFC8342"/>.  It references <xref target="RFC6241"/>, <xref target="XPATH"/> ("XML Path Language (XPath) Version 1.0"), <xref target="RFC7049"/>, <xref target="RFC8259"/>, <xref target="RFC7950"/>, <xref target="RFC7951"/>, and <xref target="RFC7540"/>.</t>
        <t>This YANG module imports typedefs from <xref target="RFC6991"/>, identities from
<xref target="RFC8342"/>, and the "sx:structure" extension from <xref target="RFC8791"/>. It also references <xref target="RFC6241"/>, <xref target="XPATH"/>, and <xref target="RFC7950"/>.</t>
        <figure>
          <name>YANG module ietf-yang-push-2</name>
          <sourcecode type="yang" markers="true" name="ietf-yang-push-2.yang#0.1.0"><![CDATA[
module ietf-yang-push-2 {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-yang-push-2";
  prefix yp2;

  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-netconf-acm {
    prefix nacm;
    reference
      "RFC 8341: Network Configuration Access Control Model";
  }
  import ietf-yang-structure-ext {
    prefix sx;
    reference
      "RFC 8525: YANG Data Structure Extensions";
  }
  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-datastores {
    prefix ds;
    reference
      "RFC 8342: Network Management Datastore Architecture (NMDA)";
  }
  import ietf-yang-library {
    prefix yanglib;
    reference
      "RFC 8525: YANG Library";
  }
  import ietf-yp-notification {
    prefix iypn;
    reference
     "draft-ietf-netconf-notif-envelope: Extensible YANG Model for
      YANG-Push Notifications

      TODO: RFC Editor please replace with latest draft/RFC version
     at publication time.";
  }

  organization
    "IETF NETCONF (Network Configuration) Working Group";
  contact
    "WG Web:  <https:/datatracker.ietf.org/wg/netconf/>
     WG List: <mailto:netconf@ietf.org>

     Author:  Robert Wilton
              <mailto:rwilton@cisco.com>";
  description
    "This module contains YANG specifications for YANG-Push
     version 2, a simplified version of the YANG-Push [RFC 8641]
     protocol.

     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
     'MAY', and 'OPTIONAL' in this document are to be interpreted as
     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.

     Copyright (c) 2025 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";

  revision 2025-08-03 {
    description
      "Initial revision.";
    reference
      "XXXX: YANG Datastore Telemetry (YANG Push version 2)";
  }

  /*
   * FEATURES
   */

  feature dynamic {
    description
      "This feature indicates that dynamic establishment of
       subscriptions is
       supported.";
  }

  feature on-change {
    description
      "This feature indicates that on-change triggered subscriptions
       are supported.";
  }

  feature subtree {
    description
      "This feature indicates support for YANG subtree filtering.";
    reference
      "RFC 6241: Network Configuration Protocol (NETCONF),
                 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)";
  }

  /*
   * 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 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;
    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;
    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;
    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 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 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-terminated-reason;
    description
      "The publisher does not have the network bandwidth needed to
       get the volume of generated information intended for a
       receiver.";
  }

  identity conflicting-identifier {
    base subscription-terminated-reason;
    description
      "The subscription identifier conflicts with another
       subscription.

       This can prevent a dynamic subscription from being
       established, or cause a dynamic subscription to be terminated
       if a configured subscription with the same id is created.";

    // TODO - Should there be separate error codes for creating a
    // subscription vs terminating an existing one?
  }


  /* 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.
       
       TODO - Clear up this text or use YANG-CBOR reference";
    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 json {
    base encoding;
    description
      "Encode data using JSON as described in RFC 7951.";
    reference
      "RFC 7951: JSON Encoding of Data Modeled with YANG";
  }

  identity xml {
    base encoding;
    description
      "Encode data using XML as described in RFC 7950.";
    reference
      "RFC 7950: The YANG 1.1 Data Modeling Language";
  }

  identity cbor {
    base encoding;
    description
      "Encode data using CBOR as described in RFC 9245,
       without using YANG SIDs";
    reference
      "RFC 9245: Encoding of Data Modeled with YANG in the
       Concise Binary Object Representation (CBOR).";
  }

  identity cbor-sids {
    base encoding;
    description
      "Encode data using JSON as described in RFC 7951, using YANG
       SIDs.";
    reference
      "RFC 9245: Encoding of Data Modeled with YANG in the
       Concise Binary Object Representation (CBOR).

       RFC 9595: YANG Schema Item iDentifier (YANG SID).";
  }

  /* Identities for transports */

  identity transport {
    description
      "An identity that represents the underlying mechanism for
       passing notification messages.";
  }


  /*
   * TYPEDEFs
   */

  typedef ypath {
    type string {
      length "1..max";
    }
    description
      "A type for YANG instance data paths.";
  }

  typedef encoding {
    type identityref {
      base encoding;
    }
    description
      "Specifies a data encoding, e.g., for a data subscription.";
  }

  typedef subscription-id {
   type string {
      length "1..64";
      pattern '[A-Za-z0-9._-]+';
    }
    description
      "A used friendly string identifier for a subscription.";
  }

  typedef transport {
    type identityref {
      base transport;
    }
    description
      "Specifies the transport used to send notification messages
       to a receiver.";
  }

// TODO - Consider changes to list keys or reordering of
//        user-ordered lists.

  typedef centiseconds {
    type uint32;
    description
      "A period of time, measured in units of 0.01 seconds.";
  }

  typedef subscription-type {
    type enumeration {
      enum configured {
        description
          "A subscription that is created and managed via
           configuration.";
      }
      enum dynamic {
        description
          "A subscription that is created and managed via RPC
           primitives.";
      }
    }
    description
      "Indicate the type of subscription.";
  }

  typedef subscription-status {
    type enumeration {
      enum invalid {
        description
          "The subscription as a whole is unsupportable with its
          current parameters.";
      }
      enum inactive {
        description
          "The subscription is supportable with its current
          parameters, but it is not currently connected to a
          receiver";
      }
      enum active {
        description
          "The subscription is actively running, and is connected
           to at least one receiver.

           A subscription-started notification must have been sent
           for a subscription to be in this state, and the receiver
           will receive update notifications, as per the
           update-trigger selection.";
      }
    }
    description
      "Indicates the status of a subscription";
  }

  typedef subscription-change {
    type enumeration {
      enum new-subscription {
        description
          "This is a new subscription.";
      }
      enum deleted {
        description
          "The subscription has been unconfigured or deleted via
           a delete-subscription RPC";
      }
      enum killed {
        description
          "A dynamic subscription has been killed via a
           kill-subscription RPC";
      }
      enum receiver-added {
        description
          "A new receiver has been added to a configured
           subscription, and has connected successfully.";
      }
      enum receiver-removed {
        description
          "A receiver has been removed from a configured
           subscription, or has become disconnected.";
      }
      enum config-changed {
        description
          "The subscription configuration has been changed,
           requiring the subscription to be restarted.";
      }
    }

    description
      "Indicates the reason why a subscription has changed.";
  }

  /*
   * GROUPINGS
   */

  grouping dscp {
    description
      "This grouping describes QoS information concerning a
       subscription.  This information is passed to lower layers
       for transport prioritization and treatment.";
    leaf 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.";
    }
  }

  grouping publishers {
    description
      "Grouping describes the list of publisher-ids";
    leaf-list publisher-id {
      type uint32;
      default 0;
      config false;
      description
        "Identifies the software process which publishes notification
        messages (e.g., processor 1 on line card 1). This field
        is used to notify the receiver which publisher processes
        are going to publish. The identifiers are locally unique to
        the Network Node.";
    }
  }

  grouping filter-choice {
    description
      "This grouping defines the types of selectors for objects
       from a datastore.";
    choice filter {
      mandatory true;
      description
        "The content filter specification for this request.";

      leaf path {
        type ypath;
        mandatory true;
        description
          "A basic path filter that allows wildcard, regex, or
           fixed value for list keys.  Each format is TODO";
      }
      anydata subtree {
        //if-feature "yp2:subtree";
        mandatory true;
        description
          "This parameter identifies the portions of the
           target datastore to retrieve.";
        reference
          "RFC 6241: Network Configuration Protocol (NETCONF),
                     Section 6";
      }
      leaf xpath {
        if-feature "yp2:xpath";
        type yang:xpath1.0;
        mandatory true;
        description
          "This parameter contains an XPath expression identifying
           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.

           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 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";
      }
    }
  }

  grouping update-policy {
    description
      "This grouping describes the susbcription update policy";

    container update-trigger {
      description
        "This container describes all conditions under which
         subscription update messages are generated";

      container periodic {
        presence "indicates a periodic subscription";
        description
          "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 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 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.";
        }
      }
      container on-change {
        if-feature "on-change";
        presence "indicates an on-change subscription";
        description
          "The publisher is requested to notify the receiver
            regarding changes in values in the datastore subset as
            defined by a selection filter.";

        leaf sync-on-start {
          type boolean;
          default "true";
          description
            "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.";
        }
      }
    }
  }

  grouping subscription-id {
    description
      "This grouping describes the subscription identifier.";

    leaf id {
      type subscription-id;
      mandatory true;
      description
        "The unique identifier for the subscription.";
    }
  }

  grouping client-subscription-id {
    description
      "This grouping describes a subscription identifier that
       cannot start with 'dyn-', which is reserved for dynamically
       created subscriptions.";

    leaf id {
      type subscription-id {
        pattern "dyn-.*" {
          modifier "invert-match";
        }
      }
      description
        "A identifier for the subscription, that MUST be unique
        across all configured and dynamic subscriptions.

        MUST NOT start with 'dyn-' which is reserved for
        dynamic subscriptions created by the publisher.";
    }
  }

  grouping subscription-schema {
    description
      "This grouping describes schema information related to a
       subscription.";

    leaf schema-id {
      type string;
      description
        "Indicates the version of the YANG schema used for this
        subscription.  The schema-id MUST change if the schema
        associated with the subscription changes.  The schema-id
        MAY change if the device schema changes, even if the 
        change does not affect the subscription.";
    }

    leaf yang-library-content-id {
      type leafref {
        path "/yanglib:yang-library/yanglib:content-id";
      }
      description
        "Contains the YANG library content identifier.";
    }
  }

  grouping subscription-common {
    description
      "Common settings that are shared between dynamic and
       configured subscriptions.";

    leaf description {
      type string {
        length "1..1000";
      }
      description
        "Open text allowing a configuring entity to embed the
         originator or other specifics of this subscription.";
    }

    container target {
      description
        "Identifies the source of information against which a
         subscription is being applied as well as specifics on the
         subset of information desired from that source.";
      leaf datastore {
        type identityref {
          base ds:datastore;
        }
        default "ds:operational";
        description
          "Datastore from which to retrieve data, defaults to
           operational";
      }

      uses filter-choice;
    }

    uses update-policy;
  }


  /*
   * RPCs
   */

  rpc establish-subscription {
    if-feature "dynamic";
    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 client-subscription-id {
        refine id {
          description
            "A optional identifier for a dynamic
             subscription, that must be unique across all
             configured and dynamic subscriptions.

             MUST NOT start with 'dyn-'.

             If not provided, the publisher MUST generate a unique
             identifier for the subscription, with an identifier
             that starts with 'dyn-', which is returned to the
             client in the RPC reply.";
        }
      }
      uses subscription-common;

      leaf encoding {
        type encoding;
        mandatory true;
        description
          "The encoding to use for the subscription notifications.";
      }

      uses dscp;

    }
    output {
      leaf id {
        type subscription-id;
        mandatory true;
        description
          "Identifier used for this subscription.";
      }
    }
  }

  rpc modify-subscription {
    if-feature "dynamic";
    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.";
    input {
      uses subscription-id;
      uses subscription-common;

      uses dscp;

    }
    //output {
      // leaf id {
      //   type subscription-id;
      //   mandatory true;
      //   description
      //     "Identifier used for this subscription.";
      // }
    //}
  }

  sx:structure 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 delete-subscription {
    if-feature "dynamic";
    description
      "This RPC allows a subscriber to delete a subscription that
       was previously created by that same subscriber using the
       'establish-subscription' RPC.

       Only subscriptions that were created using
       'establish-subscription' from the same origin as this RPC
       can be deleted via this RPC. // TODO - Why same origin?

       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
          "The name of the dynamic subscription to be deleted.";
      }
    }
  }

  rpc kill-subscription {
    if-feature "dynamic";
    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.

       Only dynamic subscriptions, i.e., those that were created
       using 'establish-subscription', may be deleted via this 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
          "The name of the dynamic subscription to be deleted.";
      }
    }
  }

  sx:structure 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
   */

  grouping subscription-update-common {
    description
      "Data nodes common to both subscription-started and
       subscription-modified notifications.";

    uses subscription-id;
    uses subscription-common {
      augment "target" {
        description
          "Augments fields to identify the target schema.";
        uses subscription-schema;
      }
    }
    container message-publishers {
      description
        "Holds the publisher-ids for all processes currently
         associated with the subscription";
        uses yp2:publishers;
    }
  }

  notification subscription-started {
    description
      "This notification indicates that a subscription has started
       and notifications will now be sent.";
       uses subscription-update-common;
  }

  notification subscription-modified {
    description
      "This notification indicates that subscription paramaters have
       changed.";
    uses subscription-update-common;

    leaf reason {
      type subscription-change;
      mandatory true;
      description
        "Gives a hint for the message recipient as to why the
         notification has been sent.";
    }
  }

  notification subscription-terminated {
    description
      "This notification indicates that a subscription has been
       terminated.";
    uses subscription-id;
    leaf reason {
      type identityref {
        base subscription-terminated-reason;
      }
      mandatory true;
      description
        "Identifies the condition that resulted in the
         termination.";
    }
  }

  notification update {
    description
      "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.";
    leaf id {
      type subscription-id;
      description
        "The identifier of the subscription that is the source of
         this notification.";
    }

    leaf path-prefix {
      type string;
      description
        "Specifies the common prefix that all other paths and data
         are encoded relative to.

         TODO - This should be a JSONified instance data path.";
    }

    leaf snapshot-type {
      type enumeration {
        enum "periodic" {
          description
            "The update message is due to a periodic update.";
        }
        enum "on-change-update" {
          description
            "The update message is due to an on-change update.  This
             means that one or more fields have changed under the
             snapshot path.

             TODO - Split this into a on-change-delete msg?";
        }
        enum "on-change-delete" {
          description
            "The update message is due to an on-change event where
             the data node at the target path has been delete.";
        }
        enum "resync" {
          description
            "This indicates that the update is to resynchronize the
             state, e.g., after a subscription started notification.

             Ideally, the resync message SHOULD be the first
             notification sent when a subscription has started, but
             it is not gauranteed or required to be the first
             (e.g., if an on-change event occurs).

             These messages can be used to ensure that all state
             has been sent to the client, and can be used to purge
             stale data.

             TODO - In the distributed notification case, need a
             notification to indicate that all child subscriptions
             have been sent.";
        }
      }
      mandatory true;
      description
        "This indicates the type of notification message that is
         being sent.";
    }

    leaf observation-time {
      type yang:date-and-time;
      description
        "The time that the update was observed by the publisher.";
    }

    list updates {
      key "target-path";
      description
        "This list contains the updated data.  It constitutes a
         snapshot 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'
         operation with the same selection filter parameters
         applied.";

      leaf target-path {
        type string;
        description
          "The target path of the data that is being replaced, i.e.,
           updated or deleted.  The path is given relative to the
           path-prefix.";
      }

      choice data {
        description
          "This choice indicates the type of update that is being
           performed at the target path.";
        anydata merge {
          description
            "This contains the updated data that is to be merged with
            the existing data at the target path.  It constitutes a
            snapshot 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' operation with the same selection filter parameters
            applied.

            The snapshot is encoded relative to the combined path
            defined by the common path-prefix and target-path";
        }
        anydata replaced-by {
          description
            "This contains the updated data that is to replace all
            existing data at the target path.   It constitutes a
            snapshot 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' operation with the same selection filter parameters
            applied.

            The snapshot is encoded relative to the combined path
            defined by the common path-prefix and target-path";
        }
        leaf deleted {
          type empty;
          description
            "This indicates that the data at the target path has been
             deleted.";
        }
      }
    }

    leaf complete {
      type boolean;
      default "false";
      description
        "This flag indicates that this is the last
         notification in a series of notifications that together
         constitute a complete snapshot of the subscribed data at
         the event-time.

         The 'update-complete' notification MAY be used as an
         alternative to setting this flag, and is semantically
         equivalent.";
    }
  }

  notification update-complete {
    description
      "This notification indicates the end of a periodic collection
       or resync event for an on-change subscription, and can be used
       to indicate that the receiver has a complete snapshot of the
       subscribed data at the event-time, and hence the client MAY
       use this as a signal that it can purge stale state
       information.

       Alternatively, the 'complete' flag in the update
       notification MAY be used instead of sending this notification
       as a separate message, and both are semantically equivalent.";
    leaf id {
      type subscription-id;
      description
        "The name of the subscription that is the source of
          this notification.";
    }
  }

  sx:augment-structure "/iypn:envelope" {
    leaf publisher-id {
      type uint32;
      default 0;
      description
        "Identifies the software process which publishes notification
         messages (e.g., processor 1 on line card 1). This field
         is used to notify the receiver which publisher process
         published which message. The identifier is locally unique to
         the Network Node.";
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="config-subs-data-model">
      <name>Configured Subscription YANG Data Model</name>
      <t>This document specifies the ietf-yang-push-2-config YANG module <xref target="yang-push-2-config-yang-module"/> that defines an NMDA <xref target="RFC8342"/> compatible YANG data model for configuring subscriptions.  Support for this YANG module is <bcp14>OPTIONAL</bcp14> and is advertised using the normal mechanisms, e.g., <xref target="RFC8525"/>.</t>
      <t>Below is a tree diagram for the "subscriptions" container.  All objects contained in this tree are described in the YANG module in <xref target="yang-push-2-yang-module"/>.  In the operational datastore <xref target="RFC8342"/>, the "subscription" list contains entries both for configured and dynamic subscriptions.</t>
      <figure anchor="SubscriptionYangTree">
        <name>subscriptions container Tree Diagram</name>
        <sourcecode type="yangtree"><![CDATA[
module: ietf-yang-push-2-config
  +--rw datastore-telemetry!
     +--rw subscriptions
        +--rw subscription* [id]
           +--rw id                                  subscription-id
           +--rw description?                        string
           +--rw target
           |  +--rw datastore?          identityref
           |  +--rw (filter)
           |     +--:(path)
           |     |  +--rw path          ypath
           |     +--:(subtree)
           |     |  +--rw subtree       <anydata>
           |     +--:(xpath)
           |     |  +--rw xpath         yang:xpath1.0 {yp2:xpath}?
           |     +--:(by-reference)
           |        +--rw filter-ref    filter-ref
           +--rw update-trigger
           |  +--rw periodic!
           |  |  +--rw period         centiseconds
           |  |  +--rw anchor-time?   yang:date-and-time
           |  +--rw on-change! {on-change}?
           |     +--rw sync-on-start?   boolean
           +--rw receiver
           |       -> /datastore-telemetry/receivers/receiver/name
           +--ro status?
           |       yp2:subscription-status
           +--ro type?
           |       yp2:subscription-type
           +--ro encoding?                           yp2:encoding
           +--ro message-publishers
           |  +--ro publisher-id*   uint32
           +--ro last-sequence-number?
           |       yang:zero-based-counter64
           +--ro last-notification-time?
           |       yang:date-and-time
           +--ro last-periodic-collection-time?
           |       yang:date-and-time
           +--ro last-on-change-notification-time?
           |       yang:date-and-time
           +--ro statistics
           |  +--ro started-notifications?
           |  |       yang:zero-based-counter64
           |  +--ro terminated-notifications?
           |  |       yang:zero-based-counter64
           |  +--ro update-notifications?
           |  |       yang:zero-based-counter64
           |  +--ro periodic-collections?
           |  |       yang:zero-based-counter64
           |  +--ro excluded-events?
           |  |       yang:zero-based-counter64
           |  +--ro receiver-disconnects?
           |          yang:zero-based-counter64
           +---x reset

  augment /yp2:subscription-started/yp2:target:
    +-- filter-ref?   filter-ref
  augment /yp2:subscription-modified/yp2:target:
    +-- filter-ref?   filter-ref
]]></sourcecode>
      </figure>
      <t>An overview of the behavior for configured subscriptions is specified in <xref target="configured-subscriptions"/>, with further details specified in the ietf-yang-push-2-config YANG module.</t>
      <section anchor="yang-push-2-config-tree">
        <name>ietf-yang-push-2-config YANG tree</name>
        <t>This section shows the full tree output for ietf-yang-push-2-config YANG module.</t>
        <t>Note, this output does not include support for any transport configuration, and for any implementation that supports configured subscriptions using this YANG module then at least one transport would expect to be configurable.</t>
        <figure>
          <name>YANG tree for YANG Push v2 Config Module Tree Output</name>
          <sourcecode type="yangtree"><![CDATA[
module: ietf-yang-push-2-config
  +--rw datastore-telemetry!
     +--rw filters
     |  +--rw filter* [name]
     |     +--rw name             string
     |     +--rw (filter)
     |        +--:(path)
     |        |  +--rw path       ypath
     |        +--:(subtree)
     |        |  +--rw subtree    <anydata>
     |        +--:(xpath)
     |           +--rw xpath      yang:xpath1.0 {yp2:xpath}?
     +--rw subscriptions
     |  +--rw subscription* [id]
     |     +--rw id                                  subscription-id
     |     +--rw description?                        string
     |     +--rw target
     |     |  +--rw datastore?          identityref
     |     |  +--rw (filter)
     |     |     +--:(path)
     |     |     |  +--rw path          ypath
     |     |     +--:(subtree)
     |     |     |  +--rw subtree       <anydata>
     |     |     +--:(xpath)
     |     |     |  +--rw xpath         yang:xpath1.0 {yp2:xpath}?
     |     |     +--:(by-reference)
     |     |        +--rw filter-ref    filter-ref
     |     +--rw update-trigger
     |     |  +--rw periodic!
     |     |  |  +--rw period         centiseconds
     |     |  |  +--rw anchor-time?   yang:date-and-time
     |     |  +--rw on-change! {on-change}?
     |     |     +--rw sync-on-start?   boolean
     |     +--rw receiver
     |     |       -> /datastore-telemetry/receivers/receiver/name
     |     +--ro status?
     |     |       yp2:subscription-status
     |     +--ro type?
     |     |       yp2:subscription-type
     |     +--ro encoding?                           yp2:encoding
     |     +--ro message-publishers
     |     |  +--ro publisher-id*   uint32
     |     +--ro last-sequence-number?
     |     |       yang:zero-based-counter64
     |     +--ro last-notification-time?
     |     |       yang:date-and-time
     |     +--ro last-periodic-collection-time?
     |     |       yang:date-and-time
     |     +--ro last-on-change-notification-time?
     |     |       yang:date-and-time
     |     +--ro statistics
     |     |  +--ro started-notifications?
     |     |  |       yang:zero-based-counter64
     |     |  +--ro terminated-notifications?
     |     |  |       yang:zero-based-counter64
     |     |  +--ro update-notifications?
     |     |  |       yang:zero-based-counter64
     |     |  +--ro periodic-collections?
     |     |  |       yang:zero-based-counter64
     |     |  +--ro excluded-events?
     |     |  |       yang:zero-based-counter64
     |     |  +--ro receiver-disconnects?
     |     |          yang:zero-based-counter64
     |     +---x reset
     +--rw receivers
        +--rw receiver* [name]
           +--rw name                      string
           +--rw encoding                  yp2:encoding
           +--rw dscp?                     inet:dscp
           +---x reset
           +--rw (notification-message-origin)?
           |  +--:(interface-originated)
           |  |  +--rw source-interface?   if:interface-ref
           |  |          {interface-designation}?
           |  +--:(address-originated)
           |     +--rw source-vrf?         leafref {supports-vrf}?
           |     +--rw source-address?     inet:ip-address-no-zone
           +--rw (transport-type)

  augment /yp2:subscription-started/yp2:target:
    +-- filter-ref?   filter-ref
  augment /yp2:subscription-modified/yp2:target:
    +-- filter-ref?   filter-ref
]]></sourcecode>
        </figure>
      </section>
      <section anchor="yang-push-2-config-yang-module">
        <name>ietf-yang-push-2-config YANG Model</name>
        <t>This module has import dependencies on <xref target="RFC6991"/>, <xref target="RFC8343"/>, and <xref target="RFC8529"/>, and ietf-yang-push-lite.yang (this RFC).  In addition, this YANG module references <xref target="BCP14"/> (<xref target="RFC2119"/> <xref target="RFC8174"/>), and <xref target="RFC8529"/>.</t>
        <figure>
          <name>YANG module ietf-yang-push-2-config</name>
          <sourcecode type="yang" markers="true" name="ietf-yang-push-2-config.yang#0.1.0"><![CDATA[
module ietf-yang-push-2-config {
  yang-version 1.1;
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-yang-push-2-config";
  prefix yp2co;

  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-network-instance {
    prefix ni;
    reference
      "RFC 8529: YANG Data Model for Network Instances";
  }
  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-yang-push-2 {
    prefix yp2;
    reference
      "RFC XXXX: YANG Datastore Telemetry (YANG Push version 2)";
  }

  organization
    "IETF NETCONF (Network Configuration) Working Group";
  contact
    "WG Web:  <https:/datatracker.ietf.org/wg/netconf/>
     WG List: <mailto:netconf@ietf.org>

     Author:  Robert Wilton
              <mailto:rwilton@cisco.com>";
  description
    "This module contains YANG specifications for YANG-Push version 2
     configuration and operational state model.

     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
     'MAY', and 'OPTIONAL' in this document are to be interpreted as
     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.

     Copyright (c) 2025 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";

  revision 2025-08-03 {
    description
      "Initial revision.";
    reference
      "XXX: YANG Datastore Telemetry (YANG Push version 2)";
  }

  /*
   * FEATURES
   */

  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 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";
  }

  /*
   * TYPEDEFs
   */

  typedef filter-ref {
    type leafref {
      path "/datastore-telemetry/filters/filter/name";
    }
    description
      "This type is used to reference a selection filter.";
  }

  /*
   * GROUPINGS
   */
  grouping filter-ref {
    description
      "This grouping is used to reference a selection filter.";
    leaf filter-ref {
      type filter-ref;
      mandatory true;
      description
        "References an existing selection filter that is to be
        applied to the subscription.";
    }
  }

  /*
   * DATA NODES
   */

  container datastore-telemetry {
    presence "Enables datastore telemetry";
    description
    "YANG Push v2 Datastore Telemetry Configuration and State.";
    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 filter {
        key "name";
        description
          "A list of preconfigured filters that can be applied
          to datastore subscriptions.";
        leaf name {
          type string {
            length "1..64";
            pattern '[A-Za-z0-9._-]+';
          }
          description
            "A unique name to identify the selection filters.";
        }
        uses yp2:filter-choice;
      }
    }
    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.";

        uses yp2:client-subscription-id;
        uses yp2:subscription-common;

        leaf receiver {
          type leafref {
            path "/datastore-telemetry/receivers/receiver/name";
          }
          mandatory true;
          description
            "Identifies the receiver for a subscription.";
        }

        // leaf status {
        //   type enumeration {
        //     enum disconnected {
        //       description
        //         "This subscription does not have an active session
        //           with the receiver, and it is not trying to
        //           connect.

        //         E.g., this state may be reported if the
        //         subscription is not valid, or has not been started
        //         yet.";
        //     }
        //     enum connecting {
        //       description
        //         "The publisher is trying to establish a session
        //           with the receiver for this subscription.

        //           For a session less transport, this state may be
        //           used to indicate that there is no route to the
        //           receiver.

        //           A receiver in connecting state may indicate that
        //           the transport or associated security session
        //           could not be established, and the publisher is
        //         periodically trying to establish the connection.";
        //     }
        //     enum active {
        //       description
        //         "The publisher has successfully connected (if over
        //           a session based transport) to the receiver for
        //           this subscription, and the publisher is able to
        //           send notifications to the receiver.";
        //     }
        //   }
        //   config false;
        //   description
        //     "Specifies the connection status of the receiver for
        //       this subscription.";
        // }

        leaf status {
          type yp2:subscription-status;
          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.";
        }

        leaf type {
          type yp2:subscription-type;
          default "configured";
          config false;
          description
            "Whether the subscription is configured or dynamic.";
        }

        leaf encoding {
          type yp2:encoding;
          config false;
          description
            "The type of encoding for notification messages.";
        }

        container message-publishers {
          config false;
          description
            "Holds the publisher-ids for all processes
             currently associated with the subscription";
            uses yp2:publishers;
        }

        leaf last-sequence-number {
          type yang:zero-based-counter64;
          config false;
          description
            "The envelope sequence number for the last notification
             sent for this subscription.

             The sequence number is initialized to zero when the
             subscription first becomes active and the first
             subscription-started notification is sent.";
        }

        leaf last-notification-time {
          type yang:date-and-time;
          config false;
          description
            "The notification envelope event-time timestamp of the
             last notification sent for this subscription.

             The timestamp is initialized to the time when the
             subscription first becomes active and the first
             subscription-started notification is sent.";
        }

        leaf last-periodic-collection-time {
          type yang:date-and-time;
          config false;
          description
            "The event-time timestamp of the last completed periodic
             collection or resynchronization collection for this
             subscription, and used as the event-time in the
             notification header.

             The timestamp is initialized to the time when the
             subscription first becomes active and the first
             subscription-started notification is sent.";
        }

        leaf last-on-change-notification-time {
          type yang:date-and-time;
          config false;
          description
            "The notification envelope event-time timestamp of the
             last on-change notification sent for this subscription.

             The timestamp is initialized to the time when the
             subscription first becomes active and the first
             subscription-started notification is sent.";
        }

        container statistics {
          config false;
          description
            "Statistics related to the number of messages generated
             for this subscription.";

          leaf started-notifications {
            type yang:zero-based-counter64;
            config false;
            description
              "The number of subscription-started notifications
               sent for this subscription since the subscription
               list entry was created and the configuration
               was applied by the publisher.";
          }

          leaf terminated-notifications {
            type yang:zero-based-counter64;
            config false;
            description
              "The number of subscription-terminated notifications
               sent for this subscription since the subscription
               list entry was created and the configuration
               was applied by the publisher.";
          }

          leaf update-notifications {
            type yang:zero-based-counter64;
            config false;
            description
              "The number of update records generated for the
               subscription, to be queued to one of more active
               receivers.

               The count is re-initialized to 0 when the
               subscription first becomes active and the
               subscription-started notification is sent.

               The count is incremented even if the update
               record has been generated, but is not queued to
               any receiver.";
          }

          leaf periodic-collections {
            type yang:zero-based-counter64;
            config false;
            description
              "The number of periodic collections completed for
               the subscription.

               The count is re-initialized to 0 when the
               subscription first becomes active and the
               subscription-started notification is sent.

               The count is incremented even if the update
               record has been generated, but is not queued to
               any receiver.";
          }

          leaf excluded-events {
            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 receiver-disconnects {
            type yang:zero-based-counter64;
            config false;
            description
              "The number of times that the receiver has been
                disconnected since the subscription
                receiver entry was created and the configuration
                was applied by the publisher";
          }
        }

        action reset {
          description
            "Reset the subscription.

             This action will cause a new subscription-started
             message to be sent for the subscription";
        }
      }
    }
    container receivers {
      description
        "A container for all instances of configured receivers.";

      list receiver {
        key "name";

        leaf name {
          type string {
            length "1..64";
            pattern '[A-Za-z0-9._-]+';
          }
          description
            "An arbitrary but unique name for this receiver
            instance.";
        }

        leaf encoding {
  /*        when 'not(../transport) or derived-from(../transport,
          "yp2:configurable-encoding")';*/
          type yp2:encoding;
          mandatory true;
          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.";
        }

        uses yp2:dscp;

        action reset {
          description
            "Resets all configured subscriptions that reference
             this receiver.

             This action is similar to invoking the 'reset' action
             on all subscriptions that reference this receiver
             configuration.";
        }

        choice notification-message-origin {
          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.";
            }
          }
        }

        choice transport-type {
          mandatory true;
          description
            "Choice of different types of transports used to
             send notifications.  The 'case' statements must
             be augmented in by other modules.";
        }

        description
          "A list of all receiver instances.";
      }
    }
  }

  augment "/yp2:subscription-started/yp2:target" {

    description
      "Allow a subscription-started notification to include a
       referenced named filter";
    uses filter-ref {
      refine "filter-ref" {
        mandatory false;
      }
    }
  }

  augment "/yp2:subscription-modified/yp2:target" {

    description
      "Allow a subscription-modified notification to include a
       referenced named filter";
    uses filter-ref {
      refine "filter-ref" {
        mandatory false;
      }
    }
  }

  augment "/datastore-telemetry/subscriptions/subscription/"
        + "target/filter" {

    description
      "Augment the subscription filter to allow
       referencing a filter configured separately.";

    case by-reference {
      description
        "Incorporates a filter that has been configured
         separately.";
      uses filter-ref;
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="capabilities-yang-data-model">
      <name>Capabilities YANG Data Model</name>
      <section anchor="yang-push-2-capabilities-tree">
        <name>ietf-yang-push-2-capabilities YANG tree</name>
        <t>This section shows the tree output for ietf-yang-push-2-capabilities YANG module, which augments the ietf-system-capabilities YANG module <xref target="RFC9196"/>.</t>
        <figure>
          <name>YANG tree for YANG Push v2 Capabilities Module Tree Output</name>
          <sourcecode type="yangtree"><![CDATA[
module: ietf-yang-push-2-capabilities

  augment /sysc:system-capabilities:
    +--ro datastore-telemetry
    |  +--ro periodic-notifications-supported?   notification-support
    |  +--ro (update-period)?
    |  |  +--:(minimum-update-period)
    |  |  |  +--ro minimum-update-period?        uint32
    |  |  +--:(supported-update-period)
    |  |     +--ro supported-update-period*      uint32
    |  +--ro on-change-supported?                notification-support
    |  +--ro transport
    |     +--ro transport-capability* [transport-protocol]
    |        +--ro transport-protocol    identityref
    |        +--ro security-protocol?    identityref
    |        +--ro encoding-format*      identityref
    +--ro distributed-notifications-supported?   boolean
  augment /sysc:system-capabilities/sysc:datastore-capabilities
            /sysc:per-node-capabilities:
    +--ro datastore-telemetry
       +--ro periodic-notifications-supported?   notification-support
       +--ro (update-period)?
       |  +--:(minimum-update-period)
       |  |  +--ro minimum-update-period?        uint32
       |  +--:(supported-update-period)
       |     +--ro supported-update-period*      uint32
       +--ro on-change-supported?                notification-support
]]></sourcecode>
        </figure>
      </section>
      <section anchor="yang-push-2-yang-capabilities-module">
        <name>ietf-yang-push-2-capabilities YANG Model</name>
        <t>This module imports typedefs from the yang-push-lite YANG module.</t>
        <t>This module augments the ietf-system-capabilities YANG module <xref target="RFC9196"/>.</t>
        <figure>
          <name>YANG module ietf-yang-push-2-capabilities</name>
          <sourcecode type="yang" markers="true" name="ietf-yang-push-2-capabilities.yang#0.1.0"><![CDATA[
module ietf-yang-push-2-capabilities {
  yang-version 1.1;
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-yang-push-2-capabilities";
  prefix yp2ca;

  import ietf-system-capabilities {
    prefix sysc;
    reference
      "RFC 9196: YANG Modules Describing Capabilities for Systems
       and Datastore Update Notifications";
  }
  import ietf-yang-push-2 {
    prefix yp2;
    reference
      "RFC XXX: YANG Datastore Telemetry (YANG Push version 2)";
  }

  organization
    "IETF NETCONF (Network Configuration) Working Group";
  contact
    "WG Web:  <https:/datatracker.ietf.org/wg/netconf/>
     WG List: <mailto:netconf@ietf.org>

     Author:  Robert Wilton
              <mailto:rwilton@cisco.com>";
  description
    "This module contains YANG specifications for YANG-Push lite.

     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
     'MAY', and 'OPTIONAL' in this document are to be interpreted as
     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.

     Copyright (c) 2025 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";

  revision 2024-11-11 {
    description
      "Initial revision.";
    reference
      "XXX: YANG Datastore Telemetry (YANG Push version 2)";
  }

  /*
   * IDENTITIES
   */

  identity security-protocol {
    description
      "Identity for security protocols.";
  }

  identity tls12 {
    base security-protocol;
    description
      "Indicates TLS Protocol Version 1.2. TLS 1.2 is obsolete,
       and thus it is NOT RECOMMENDED to enable this feature.";
    reference
      "RFC 5246: The Transport Layer Security (TLS) Protocol
                 Version 1.2";
  }

  identity tls13 {
    base security-protocol;
    description
      "Indicates TLS Protocol Version 1.3.";
    reference
      "RFC 8446: The Transport Layer Security (TLS)
                 Protocol Version 1.3";
  }

  identity dtls12 {
    base security-protocol;
    description
      "Indicates DTLS Protocol Version 1.2. TLS 1.2 is obsolete,
       and thus it is NOT RECOMMENDED to enable this feature.";
    reference
      "RFC 6347: The Datagram Transport Layer Security (TLS) Protocol
                 Version 1.2";
  }

  identity dtls13 {
    base security-protocol;
    description
      "Indicates DTLS Protocol Version 1.3.";
    reference
      "RFC 9147: The Datagram Transport Layer Security (TLS)
                 Protocol Version 1.3";
  }

  identity ssh {
    base security-protocol;
    description
      "Indicates SSH.";
  }


  grouping yp2-capabilities {
    description
      "Capabilities related to YANG Push Lite subscriptions
       and notifications";
    container datastore-telemetry {
      description
        "Capabilities related to YANG Push List subscriptions
         and notifications";
      typedef notification-support {
        type bits {
          bit config-changes {
            description
              "The publisher is capable of sending
               notifications for 'config true' nodes for the
               relevant scope and subscription type.";
          }
          bit state-changes {
            description
              "The publisher is capable of sending
               notifications for 'config false' nodes for the
               relevant scope and subscription type.";
          }
        }
        description
          "Type for defining whether 'on-change' or
           'periodic' notifications are supported for all data nodes,
           'config false' data nodes, 'config true' data nodes, or
           no data nodes.

           The bits config-changes or state-changes have no effect
           when they are set for a datastore or for a set of nodes
           that does not contain nodes with the indicated config
           value.  In those cases, the effect is the same as if no
           support was declared.  One example of this is indicating
           support for state-changes for a candidate datastore that
           has no effect.";
      }

      leaf periodic-notifications-supported {
        type notification-support;
        description
          "Specifies whether the publisher is capable of
           sending 'periodic' notifications for the selected
           data nodes, including any subtrees that may exist
           below them.";
        reference
          "RFC 8641: Subscription to YANG Notifications for
           Datastore Updates, 'periodic' subscription concept";
      }
      choice update-period {
        description
          "Supported update period value or values for
           'periodic' subscriptions.";
        leaf minimum-update-period {
          type uint32;
          units "centiseconds";
          description
            "Indicates the minimal update period that is
             supported for a 'periodic' subscription.

             A subscription request to the selected data nodes with
             a smaller period than what this leaf specifies is
             likely to result in a 'period-unsupported' error.";
        }
        leaf-list supported-update-period {
          type uint32;
          units "centiseconds";
          description
            "Supported update period values for a 'periodic'
             subscription.

             A subscription request to the selected data nodes with a
             period not included in the leaf-list will result in a
             'period-unsupported' error.";
        }
      }
      leaf on-change-supported {
        type notification-support;
        description
          "Specifies whether the publisher is capable of
           sending 'on-change' notifications for the selected
           data nodes and the subtree below them.";
      }
    }
  }

  grouping yp2-transport-capabilities {
    description
      "Capabilities related to transports supporting Yang Push Lite";
    container transport {
      description
        "Specifies capabilities related to YANG-Push transports.";
      list transport-capability {
        key "transport-protocol";
        description
          "Indicates a list of capabilities related to notification
                  transport.";
        leaf transport-protocol {
          type identityref {
            base yp2:transport;
          }
          description
            "Indicates supported transport protocol for YANG-Push.";
        }
        leaf security-protocol {
          type identityref {
            base security-protocol;
          }
          description
            "Indicates transport security protocol.";
        }
        leaf-list encoding-format {
          type identityref {
            base yp2:encoding;
          }
          description
            "Indicates supported encoding formats.";
        }
      }
    }
  }

  // YANG Push Lite Capabilities
  augment "/sysc:system-capabilities" {
    description
      "Adds system level capabilities for YANG Push Lite";
    uses yp2-capabilities;

    leaf distributed-notifications-supported {
      type boolean;
      description
        "Indicates whether the server supports distributed
          notifications and may source message from different
          Message Publishers.";
    }
  }

  augment "/sysc:system-capabilities/yp2ca:datastore-telemetry" {
    description
      "Adds system level Yang Push Lite transport capabilities";
    uses yp2-transport-capabilities;
  }

  augment "/sysc:system-capabilities/sysc:datastore-capabilities"
        + "/sysc:per-node-capabilities" {
    description
      "Add datastore and node-level capabilities";
    uses yp2-capabilities;
  }
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>With configured subscriptions, one or more publishers could be used to overwhelm a receiver.  To counter this, notification messages <bcp14>SHOULD NOT</bcp14> be sent to any receiver that does not support this specification.  Receivers that do not want notification messages need only terminate or refuse any transport sessions from the publisher.</t>
      <t>When a receiver of a configured subscription gets a new "subscription-started" message for a known subscription where it is already consuming events, it may indicate that an attacker has done something that has momentarily disrupted receiver connectivity. <strong>TODO - Do we still want this paragraph?</strong>.</t>
      <t>For dynamic subscriptions, implementations need to protect against malicious or buggy subscribers that may send a large number of "establish-subscription" requests and thereby use up system resources.  To cover this possibility, operators <bcp14>SHOULD</bcp14> monitor for such cases and, if discovered, take remedial action to limit the resources used, such as suspending or terminating a subset of the subscriptions or, if the underlying transport is session based, terminating the underlying transport session.</t>
      <t>Using DNS names for configured subscription's receiver "name" lookups can cause situations where the name resolves differently than expected on the publisher, so the recipient would be different than expected.</t>
      <section anchor="use-of-yang-push-v2-with-nacm">
        <name>Use of YANG Push v2 with NACM</name>
        <t><strong>TODO, do we even need this section?</strong></t>
        <t>This specification <bcp14>MAY</bcp14> be used with access control tools, such as NACM <xref target="RFC8341"/>.  Please refer to that specification for normative guidance of how NACM applies.</t>
        <t>For informative purposes, please note that NACM can be used:</t>
        <ul spacing="normal">
          <li>
            <t>NACM can be used to control access to the data nodes and RPCs defined in the YANG modules defined in this document.</t>
          </li>
          <li>
            <t>NACM can be used to control access to the data included in the YANG <em>update</em> notifications.</t>
          </li>
        </ul>
      </section>
      <section anchor="receiver-authorization">
        <name>Receiver Authorization</name>
        <t><strong>TODO Relax when access control must be checked.</strong></t>
        <t><strong>TODO Consider if this is the best place in the document, but this text needs to be updated regardless.</strong></t>
        <t>A receiver of subscription data <bcp14>MUST</bcp14> only be sent updates for which it has proper authorization.  A publisher <bcp14>MUST</bcp14> ensure that no unauthorized data is included in push updates.  To do so, it needs to apply all corresponding checks applicable at the time of a specific pushed update and, if necessary, silently remove any unauthorized data from datastore subtrees.  This enables YANG data that is pushed based on subscriptions to be authorized in a way that is equivalent to a regular data retrieval ("get") operation.</t>
        <t>Each "push-update" and "push-change-update" <bcp14>MUST</bcp14> have access control applied, as depicted in Figure 5.  This includes validating that read access is permitted for any new objects selected since the last notification message was sent to a particular receiver.  A publisher <bcp14>MUST</bcp14> silently omit data nodes from the results that the client is not authorized to see.  To accomplish this, implementations <bcp14>SHOULD</bcp14> apply the conceptual authorization model of <xref target="RFC8341"/>, specifically Section 3.2.4, extended to apply analogously to data nodes included in notifications, not just &lt;rpc-reply&gt; messages sent in response to
&lt;get&gt; and &lt;get-config&gt; requests.</t>
        <figure>
          <name>Access Control for Push Updates</name>
          <artwork align="left"><![CDATA[
                     +-----------------+      +--------------------+
  push-update or --> | datastore node  |  yes | add datastore node |
 push-change-update  | access allowed? | ---> | to update record   |
                     +-----------------+      +--------------------+
]]></artwork>
        </figure>
        <t>A publisher <bcp14>MUST</bcp14> allow for the possibility that a subscription's selection filter references nonexistent data or data that a receiver is not allowed to access.  Such support permits a receiver the ability to monitor the entire lifecycle of some datastore tree without needing to explicitly enumerate every individual datastore node.  If, after access control has been applied, there are no objects remaining in an update record, then the effect varies given if the subscription is a periodic or on-change subscription.  For a periodic subscription, an empty "push-update" notification <bcp14>MUST</bcp14> be sent, so that clients do not get confused into thinking that an update was lost.  For an on-change subscription, a "push-update" notification <bcp14>MUST NOT</bcp14> be sent, so that clients remain unaware of changes made to nodes they don't have read-access for.</t>
        <t>A publisher <bcp14>MAY</bcp14> choose to reject an "establish-subscription" request that selects nonexistent data or data that a receiver is not allowed to access.  The error identity "unchanging-selection" <bcp14>SHOULD</bcp14> be returned as the reason for the rejection.  In addition, a publisher <bcp14>MAY</bcp14> choose to terminate a dynamic subscription or suspend a configured receiver when the authorization privileges of a receiver change or the access controls for subscribed objects change.  In that case, the publisher <bcp14>SHOULD</bcp14> include the error identity "unchanging-selection" as the reason when sending the "subscription-terminated" or "subscription-suspended" notification, respectively.  Such a capability enables the publisher to avoid having to support
continuous and total filtering of a subscription's content for every update record.  It also reduces the possibility of leakage of access-controlled objects.</t>
        <t>If read access into previously accessible nodes has been lost due to a receiver permissions change, this <bcp14>SHOULD</bcp14> be reported as a patch "delete" operation for on-change subscriptions.  If not capable of handling such receiver permission changes with such a "delete", publisher implementations <bcp14>MUST</bcp14> force dynamic subscription re-establishment or configured subscription reinitialization so that appropriate filtering is installed.</t>
      </section>
      <section anchor="yang-module-security-considerations">
        <name>YANG Module Security Considerations</name>
        <t>This section is modeled after the template described in Section 3.7.1 of <xref target="I-D.draft-ietf-netmod-rfc8407bis"/>.</t>
        <t>The "ietf-yang-push-2" YANG module defines a data model that is designed to be accessed via YANG-based management protocols, such as NETCONF <xref target="RFC6241"/> and RESTCONF <xref target="RFC8040"/>. These protocols have to use a secure transport layer (e.g., SSH <xref target="RFC4252"/>, TLS <xref target="RFC8446"/>, and QUIC <xref target="RFC9000"/>) and have to use mutual authentication.</t>
        <t>The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/> provides the means to restrict access for particular NETCONF or RESTCONF users to a pre-configured subset of all available NETCONF or RESTCONF protocol operations and content.</t>
        <t>There are a number of data nodes defined in this YANG module that are writable/creatable/deletable (i.e., "config true", which is the default).  All writable data nodes are likely to be reasonably sensitive or vulnerable in some network environments.  Write operations (e.g., edit-config) and delete operations to these data nodes without proper protection or authentication can have a negative effect on network operations.  The following subtrees and data nodes have particular sensitivities/vulnerabilities:</t>
        <ul spacing="normal">
          <li>
            <t>There are no particularly sensitive writable data nodes.</t>
          </li>
        </ul>
        <t>Some of the readable data nodes in this YANG module may be considered sensitive or vulnerable in some network environments.  It is thus important to control read access (e.g., via get, get-config, or notification) to these data nodes. Specifically, the following subtrees and data nodes have particular sensitivities/vulnerabilities:</t>
        <ul spacing="normal">
          <li>
            <t>There are no particularly sensitive readable data nodes.</t>
          </li>
        </ul>
        <t>Some of the RPC or action operations in this YANG module may be considered sensitive or vulnerable in some network environments. It is thus important to control access to these operations. Specifically, the following operations have particular sensitivities/vulnerabilities:</t>
        <ul spacing="normal">
          <li>
            <t>kill-subscription - this RPC operation allows the caller to kill any dynamic subscription, even those created via other users, or other transport sessions.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="namespace-uri-registrations">
        <name>Namespace URI registrations</name>
        <t>This document registers the following namespace URI in the "IETF XML Registry" <xref target="RFC3688"/>:</t>
        <table>
          <name>Namespace URI registrations</name>
          <thead>
            <tr>
              <th align="left">URI</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">urn:ietf:params:xml:ns:yang:ietf-yang-push-2</td>
            </tr>
            <tr>
              <td align="left">urn:ietf:params:xml:ns:yang:ietf-yang-push-2-config</td>
            </tr>
            <tr>
              <td align="left">urn:ietf:params:xml:ns:yang:ietf-yang-push-2-capabilities</td>
            </tr>
          </tbody>
        </table>
        <t>For all registrations:</t>
        <ul spacing="normal">
          <li>
            <t>Registrant Contact: The IESG.</t>
          </li>
          <li>
            <t>XML: N/A; the requested URI is an XML namespace.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="yang-module-name-registrations">
      <name>YANG Module Name registrations</name>
      <t>This document registers the following YANG modules in the "YANG Module Names" registry <xref target="RFC6020"/>:</t>
      <table>
        <name>YANG Module Name Registrations</name>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">Namespace</th>
            <th align="left">Prefix</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">ietf-yang-push-2</td>
            <td align="left">urn:ietf:params:xml:ns:yang:ietf-yang-push-2</td>
            <td align="left">ypl</td>
          </tr>
          <tr>
            <td align="left">ietf-yang-push-2-config</td>
            <td align="left">urn:ietf:params:xml:ns:yang:ietf-yang-push-2-config</td>
            <td align="left">yplco</td>
          </tr>
          <tr>
            <td align="left">ietf-yang-push-2-capabilities</td>
            <td align="left">urn:ietf:params:xml:ns:yang:ietf-yang-push-2-capabilities</td>
            <td align="left">yplca</td>
          </tr>
        </tbody>
      </table>
      <t>For all registration the reference is "RFC XXXX".</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This initial draft is early work is based on discussions with various folk, particularly Thomas Graf, Holger Keller, Dan Voyer, Nils Warnke, and Alex Huang Feng; but also wider conversations that include: Benoit Claise, Pierre Francois, Paolo Lucente, Jean Quilbeuf, among others.</t>
      <t>In addition, as described in the introduction, the authors would like to acknowledge that this work builds on work of others, such as, Subscribed Notifications, YANG Push, and various extensions to that work.</t>
    </section>
    <section numbered="false" anchor="contributors">
      <name>Contributors</name>
      <t>The following individuals have actively contributed to this draft and the YANG Push Solution.</t>
      <ul spacing="normal">
        <li>
          <t>Dan Voyer</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.draft-ietf-netconf-notif-envelope">
          <front>
            <title>Extensible YANG Model for YANG-Push Notifications</title>
            <author fullname="Alex Huang Feng" initials="A. H." surname="Feng">
              <organization>INSA-Lyon</organization>
            </author>
            <author fullname="Pierre Francois" initials="P." surname="Francois">
              <organization>INSA-Lyon</organization>
            </author>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Benoît Claise" initials="B." surname="Claise">
              <organization>Everything OPS</organization>
            </author>
            <date day="18" month="May" year="2026"/>
            <abstract>
              <t>   This document defines a new extensible Notification structure,
   defined in YANG, for use in YANG-Push Notification messages, both for
   NETCONF and RESTCONF, enabling any YANG-compatible encodings such as
   XML, JSON, or CBOR.  Additionally, it defines two essential
   extensions to this structure, the support of a hostname and a
   sequence number and the support of a timestamp characterizing the
   moment when the data was observed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-notif-envelope-05"/>
        </reference>
        <reference anchor="RFC2474">
          <front>
            <title>Definition of the Differentiated Services Field (DS Field) in the IPv4 and IPv6 Headers</title>
            <author fullname="K. Nichols" initials="K." surname="Nichols"/>
            <author fullname="S. Blake" initials="S." surname="Blake"/>
            <author fullname="F. Baker" initials="F." surname="Baker"/>
            <author fullname="D. Black" initials="D." surname="Black"/>
            <date month="December" year="1998"/>
            <abstract>
              <t>This document defines the IP header field, called the DS (for differentiated services) field. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2474"/>
          <seriesInfo name="DOI" value="10.17487/RFC2474"/>
        </reference>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC6991">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces a collection of common data types to be used with the YANG data modeling language. This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6991"/>
          <seriesInfo name="DOI" value="10.17487/RFC6991"/>
        </reference>
        <reference anchor="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="RFC7951">
          <front>
            <title>JSON Encoding of Data Modeled with YANG</title>
            <author fullname="L. Lhotka" initials="L." surname="Lhotka"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>This document defines encoding rules for representing configuration data, state data, parameters of Remote Procedure Call (RPC) operations or actions, and notifications defined using YANG as JavaScript Object Notation (JSON) text.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7951"/>
          <seriesInfo name="DOI" value="10.17487/RFC7951"/>
        </reference>
        <reference anchor="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams. The purpose of this document is to provide a single location for this definition. This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
        <reference anchor="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability. There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content. This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC8342">
          <front>
            <title>Network Management Datastore Architecture (NMDA)</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
            <author fullname="P. Shafer" initials="P." surname="Shafer"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="R. Wilton" initials="R." surname="Wilton"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>Datastores are a fundamental concept binding the data models written in the YANG data modeling language to network management protocols such as the Network Configuration Protocol (NETCONF) and RESTCONF. This document defines an architectural framework for datastores based on the experience gained with the initial simpler model, addressing requirements that were not well supported in the initial model. This document updates RFC 7950.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8342"/>
          <seriesInfo name="DOI" value="10.17487/RFC8342"/>
        </reference>
        <reference anchor="RFC8525">
          <front>
            <title>YANG Library</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="R. Wilton" initials="R." surname="Wilton"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>This document describes a YANG library that provides information about the YANG modules, datastores, and datastore schemas used by a network management server. Simple caching mechanisms are provided to allow clients to minimize retrieval of this information. This version of the YANG library supports the Network Management Datastore Architecture (NMDA) by listing all datastores supported by a network management server and the schema that is used by each of these datastores.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8525"/>
          <seriesInfo name="DOI" value="10.17487/RFC8525"/>
        </reference>
        <reference anchor="RFC8529">
          <front>
            <title>YANG Data Model for Network Instances</title>
            <author fullname="L. Berger" initials="L." surname="Berger"/>
            <author fullname="C. Hopps" initials="C." surname="Hopps"/>
            <author fullname="A. Lindem" initials="A." surname="Lindem"/>
            <author fullname="D. Bogdanovic" initials="D." surname="Bogdanovic"/>
            <author fullname="X. Liu" initials="X." surname="Liu"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>This document defines a network instance module. This module can be used to manage the virtual resource partitioning that may be present on a network device. Examples of common industry terms for virtual resource partitioning are VPN Routing and Forwarding (VRF) instances and Virtual Switch Instances (VSIs).</t>
              <t>The YANG data model in this document conforms to the Network Management Datastore Architecture (NMDA) defined in RFC 8342.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8529"/>
          <seriesInfo name="DOI" value="10.17487/RFC8529"/>
        </reference>
        <reference anchor="RFC8791">
          <front>
            <title>YANG Data Structure Extensions</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Björklund" initials="M." surname="Björklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>This document describes YANG mechanisms for defining abstract data structures with YANG.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8791"/>
          <seriesInfo name="DOI" value="10.17487/RFC8791"/>
        </reference>
        <reference anchor="RFC9196">
          <front>
            <title>YANG Modules Describing Capabilities for Systems and Datastore Update Notifications</title>
            <author fullname="B. Lengyel" initials="B." surname="Lengyel"/>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="B. Claise" initials="B." surname="Claise"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document defines two YANG modules, "ietf-system-capabilities" and "ietf-notification-capabilities".</t>
              <t>The module "ietf-system-capabilities" provides a placeholder structure that can be used to discover YANG-related system capabilities for servers. The module can be used to report capability information from the server at runtime or at implementation time by making use of the YANG instance data file format.</t>
              <t>The module "ietf-notification-capabilities" augments "ietf-system-capabilities" to specify capabilities related to "Subscription to YANG Notifications for Datastore Updates" (RFC 8641).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9196"/>
          <seriesInfo name="DOI" value="10.17487/RFC9196"/>
        </reference>
        <reference anchor="RFC9254">
          <front>
            <title>Encoding of Data Modeled with YANG in the Concise Binary Object Representation (CBOR)</title>
            <author fullname="M. Veillette" initials="M." role="editor" surname="Veillette"/>
            <author fullname="I. Petrov" initials="I." role="editor" surname="Petrov"/>
            <author fullname="A. Pelov" initials="A." surname="Pelov"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <date month="July" year="2022"/>
            <abstract>
              <t>YANG (RFC 7950) is a data modeling language used to model configuration data, state data, parameters and results of Remote Procedure Call (RPC) operations or actions, and notifications.</t>
              <t>This document defines encoding rules for YANG in the Concise Binary Object Representation (CBOR) (RFC 8949).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9254"/>
          <seriesInfo name="DOI" value="10.17487/RFC9254"/>
        </reference>
        <reference anchor="RFC9595">
          <front>
            <title>YANG Schema Item iDentifier (YANG SID)</title>
            <author fullname="M. Veillette" initials="M." role="editor" surname="Veillette"/>
            <author fullname="A. Pelov" initials="A." role="editor" surname="Pelov"/>
            <author fullname="I. Petrov" initials="I." role="editor" surname="Petrov"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <date month="July" year="2024"/>
            <abstract>
              <t>YANG Schema Item iDentifiers (YANG SIDs) are globally unique 63-bit unsigned integers used to identify YANG items. SIDs provide a more compact method for identifying those YANG items that can be used efficiently, notably in constrained environments (RFC 7228). This document defines the semantics, registration processes, and assignment processes for YANG SIDs for IETF-managed YANG modules. To enable the implementation of these processes, this document also defines a file format used to persist and publish assigned YANG SIDs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9595"/>
          <seriesInfo name="DOI" value="10.17487/RFC9595"/>
        </reference>
        <reference anchor="RFC9485">
          <front>
            <title>I-Regexp: An Interoperable Regular Expression Format</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="T. Bray" initials="T." surname="Bray"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document specifies I-Regexp, a flavor of regular expression that is limited in scope with the goal of interoperation across many different regular expression libraries.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9485"/>
          <seriesInfo name="DOI" value="10.17487/RFC9485"/>
        </reference>
        <reference anchor="RFC9911">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schönwälder" initials="J." role="editor" surname="Schönwälder"/>
            <date month="December" year="2025"/>
            <abstract>
              <t>This document defines a collection of common data types to be used with the YANG data modeling language. It includes several new type definitions and obsoletes RFC 6991.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9911"/>
          <seriesInfo name="DOI" value="10.17487/RFC9911"/>
        </reference>
        <reference anchor="BCP14">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC3411">
          <front>
            <title>An Architecture for Describing Simple Network Management Protocol (SNMP) Management Frameworks</title>
            <author fullname="D. Harrington" initials="D." surname="Harrington"/>
            <author fullname="R. Presuhn" initials="R." surname="Presuhn"/>
            <author fullname="B. Wijnen" initials="B." surname="Wijnen"/>
            <date month="December" year="2002"/>
            <abstract>
              <t>This document describes an architecture for describing Simple Network Management Protocol (SNMP) Management Frameworks. The architecture is designed to be modular to allow the evolution of the SNMP protocol standards over time. The major portions of the architecture are an SNMP engine containing a Message Processing Subsystem, a Security Subsystem and an Access Control Subsystem, and possibly multiple SNMP applications which provide specific functional processing of management data. This document obsoletes RFC 2571. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="62"/>
          <seriesInfo name="RFC" value="3411"/>
          <seriesInfo name="DOI" value="10.17487/RFC3411"/>
        </reference>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC4252">
          <front>
            <title>The Secure Shell (SSH) Authentication Protocol</title>
            <author fullname="T. Ylonen" initials="T." surname="Ylonen"/>
            <author fullname="C. Lonvick" initials="C." role="editor" surname="Lonvick"/>
            <date month="January" year="2006"/>
            <abstract>
              <t>The Secure Shell Protocol (SSH) is a protocol for secure remote login and other secure network services over an insecure network. This document describes the SSH authentication protocol framework and public key, password, and host-based client authentication methods. Additional authentication methods are described in separate documents. The SSH authentication protocol runs on top of the SSH transport layer protocol and provides a single authenticated tunnel for the SSH connection protocol. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4252"/>
          <seriesInfo name="DOI" value="10.17487/RFC4252"/>
        </reference>
        <reference anchor="RFC5277">
          <front>
            <title>NETCONF Event Notifications</title>
            <author fullname="S. Chisholm" initials="S." surname="Chisholm"/>
            <author fullname="H. Trevino" initials="H." surname="Trevino"/>
            <date month="July" year="2008"/>
            <abstract>
              <t>This document defines mechanisms that provide an asynchronous message notification delivery service for the Network Configuration protocol (NETCONF). This is an optional capability built on top of the base NETCONF definition. This document defines the capabilities and operations necessary to support this service. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5277"/>
          <seriesInfo name="DOI" value="10.17487/RFC5277"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
        <reference anchor="RFC7049">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="October" year="2013"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7049"/>
          <seriesInfo name="DOI" value="10.17487/RFC7049"/>
        </reference>
        <reference anchor="RFC7540">
          <front>
            <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
            <author fullname="M. Belshe" initials="M." surname="Belshe"/>
            <author fullname="R. Peon" initials="R." surname="Peon"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection. It also introduces unsolicited push of representations from servers to clients.</t>
              <t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax. HTTP's existing semantics remain unchanged.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7540"/>
          <seriesInfo name="DOI" value="10.17487/RFC7540"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC8343">
          <front>
            <title>A YANG Data Model for Interface Management</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document defines a YANG data model for the management of network interfaces. It is expected that interface-type-specific data models augment the generic interfaces data model defined in this document. The data model includes definitions for configuration and system state (status information and counters for the collection of statistics).</t>
              <t>The YANG data model in this document conforms to the Network Management Datastore Architecture (NMDA) defined in RFC 8342.</t>
              <t>This document obsoletes RFC 7223.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8343"/>
          <seriesInfo name="DOI" value="10.17487/RFC8343"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC8072">
          <front>
            <title>YANG Patch Media Type</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="February" year="2017"/>
            <abstract>
              <t>This document describes a method for applying patches to configuration datastores using data defined with the YANG data modeling language.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8072"/>
          <seriesInfo name="DOI" value="10.17487/RFC8072"/>
        </reference>
        <reference anchor="RFC8639">
          <front>
            <title>Subscription to YANG Notifications</title>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="A. Gonzalez Prieto" initials="A." surname="Gonzalez Prieto"/>
            <author fullname="E. Nilsen-Nygaard" initials="E." surname="Nilsen-Nygaard"/>
            <author fullname="A. Tripathy" initials="A." surname="Tripathy"/>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document defines a YANG data model and associated mechanisms enabling subscriber-specific subscriptions to a publisher's event streams. Applying these elements allows a subscriber to request and receive a continuous, customized feed of publisher-generated information.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8639"/>
          <seriesInfo name="DOI" value="10.17487/RFC8639"/>
        </reference>
        <reference anchor="RFC8640">
          <front>
            <title>Dynamic Subscription to YANG Events and Datastores over NETCONF</title>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="A. Gonzalez Prieto" initials="A." surname="Gonzalez Prieto"/>
            <author fullname="E. Nilsen-Nygaard" initials="E." surname="Nilsen-Nygaard"/>
            <author fullname="A. Tripathy" initials="A." surname="Tripathy"/>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document provides a Network Configuration Protocol (NETCONF) binding to the dynamic subscription capability of both subscribed notifications and YANG-Push.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8640"/>
          <seriesInfo name="DOI" value="10.17487/RFC8640"/>
        </reference>
        <reference anchor="RFC8641">
          <front>
            <title>Subscription to YANG Notifications for Datastore Updates</title>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document describes a mechanism that allows subscriber applications to request a continuous and customized stream of updates from a YANG datastore. Providing such visibility into updates enables new capabilities based on the remote mirroring and monitoring of configuration and operational state.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8641"/>
          <seriesInfo name="DOI" value="10.17487/RFC8641"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="I-D.draft-ietf-netmod-rfc8407bis">
          <front>
            <title>Guidelines for Authors and Reviewers of Documents Containing YANG Data Models</title>
            <author fullname="Andy Bierman" initials="A." surname="Bierman">
              <organization>YumaWorks</organization>
            </author>
            <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
              <organization>Orange</organization>
            </author>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <date day="5" month="June" year="2025"/>
            <abstract>
              <t>   This document provides guidelines for authors and reviewers of
   specifications containing YANG data models, including IANA-maintained
   modules.  Recommendations and procedures are defined, which are
   intended to increase interoperability and usability of Network
   Configuration Protocol (NETCONF) and RESTCONF Protocol
   implementations that utilize YANG modules.  This document obsoletes
   RFC 8407.

   Also, this document updates RFC 8126 by providing additional
   guidelines for writing the IANA considerations for RFCs that specify
   IANA-maintained modules.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-rfc8407bis-28"/>
        </reference>
        <reference anchor="I-D.ietf-nmop-network-anomaly-architecture">
          <front>
            <title>A Framework for a Network Anomaly Detection Architecture</title>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Wanting Du" initials="W." surname="Du">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Pierre Francois" initials="P." surname="Francois">
              <organization>INSA-Lyon</organization>
            </author>
            <author fullname="Alex Huang Feng" initials="A. H." surname="Feng">
              <organization>INSA-Lyon</organization>
            </author>
            <date day="18" month="January" year="2026"/>
            <abstract>
              <t>   This document describes the motivation and architecture of a Network
   Anomaly Detection Framework and the relationship to other documents
   describing network Symptom semantics and network incident lifecycle.

   The described architecture for detecting IP network service
   interruption is designed to be generic applicable and extensible.
   Different applications are described and examples are referenced with
   open-source running code.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-nmop-network-anomaly-architecture-07"/>
        </reference>
        <reference anchor="I-D.ietf-nmop-yang-message-broker-integration">
          <front>
            <title>An Architecture for YANG-Push to Message Broker Integration</title>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Ahmed Elhassany" initials="A." surname="Elhassany">
              <organization>Swisscom</organization>
            </author>
            <date day="13" month="May" year="2026"/>
            <abstract>
              <t>   This document describes the motivation and architecture of a native
   YANG-Push notifications and YANG Schema integration into a Message
   Broker and YANG Schema Registry.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-nmop-yang-message-broker-integration-12"/>
        </reference>
        <reference anchor="I-D.draft-ietf-netconf-udp-notif">
          <front>
            <title>UDP-based Transport for Configured Subscriptions</title>
            <author fullname="Alex Huang Feng" initials="A. H." surname="Feng">
              <organization>INSA-Lyon</organization>
            </author>
            <author fullname="Pierre Francois" initials="P." surname="Francois">
              <organization>INSA-Lyon</organization>
            </author>
            <author fullname="Tianran Zhou" initials="T." surname="Zhou">
              <organization>Huawei</organization>
            </author>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Paolo Lucente" initials="P." surname="Lucente">
              <organization>NTT</organization>
            </author>
            <date day="28" month="January" year="2026"/>
            <abstract>
              <t>   This document describes a UDP-based transport for YANG notifications
   to collect data from network nodes within a controlled environment.
   A shim header is defined to facilitate the data streaming directly
   from a publishing process on a network device to telemetry receivers.
   Such a design enables higher frequency updates and less performance
   overhead on publisher and receiver processes compared to already
   established notification mechanisms.  A YANG data model is also
   defined for management of the described UDP-based transport.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-udp-notif-25"/>
        </reference>
        <reference anchor="I-D.draft-netana-netconf-yp-transport-capabilities">
          <front>
            <title>YANG Notification Transport Capabilities</title>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Qiufang Ma" initials="Q." surname="Ma">
              <organization>Huawei</organization>
            </author>
            <author fullname="Alex Huang Feng" initials="A. H." surname="Feng">
              <organization>INSA-Lyon</organization>
            </author>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <date day="17" month="January" year="2025"/>
            <abstract>
              <t>   This document specifies a YANG module for YANG notifications
   transport capabilities which augments "ietf-system-capabilities" YANG
   module defined in [RFC9196].  The module provides transport,
   encoding, and encryption system capabilities for transport-specific
   notification.  This YANG module can be used by the client to learn
   capability information from the server at runtime or at
   implementation time, by making use of the YANG instance data file
   format.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-netana-netconf-yp-transport-capabilities-01"/>
        </reference>
        <reference anchor="I-D.draft-ietf-netconf-https-notif">
          <front>
            <title>An HTTPS-based Transport for YANG Notifications</title>
            <author fullname="Mahesh Jethanandani" initials="M." surname="Jethanandani">
              <organization>Kloud Services</organization>
            </author>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <date day="1" month="February" year="2024"/>
            <abstract>
              <t>   This document defines a protocol for sending asynchronous event
   notifications similar to notifications defined in RFC 5277, but over
   HTTPS.  YANG modules for configuring publishers are also defined.
   Examples are provided illustrating how to configure various
   publishers.

   This document requires that the publisher is a "server" (e.g., a
   NETCONF or RESTCONF server), but does not assume that the receiver is
   a server.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-https-notif-15"/>
        </reference>
        <reference anchor="I-D.draft-ietf-netconf-distributed-notif">
          <front>
            <title>Subscription to Notifications in a Distributed Architecture</title>
            <author fullname="Tianran Zhou" initials="T." surname="Zhou">
              <organization>Huawei</organization>
            </author>
            <author fullname="Guangying Zheng" initials="G." surname="Zheng">
              <organization>Huawei</organization>
            </author>
            <author fullname="Eric Voit" initials="E." surname="Voit">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Pierre Francois" initials="P." surname="Francois">
              <organization>INSA-Lyon</organization>
            </author>
            <date day="13" month="April" year="2026"/>
            <abstract>
              <t>   This document describes extensions to the YANG notifications
   subscription to allow metrics being published directly from
   processors on line cards to target receivers, while subscription is
   still maintained at the route processor in a distributed forwarding
   system of a network node.


              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-distributed-notif-19"/>
        </reference>
        <reference anchor="Kafka" target="https://kafka.apache.org/">
          <front>
            <title>Apache Kafka</title>
            <author initials="" surname="Apache.org" fullname="Apache.org">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="Consistency" target="https://en.wikipedia.org/wiki/Consistency_(database_systems)">
          <front>
            <title>Consistency (database systems)</title>
            <author initials="" surname="Wikipedia" fullname="Wikipedia">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="EventualConsistency" target="https://www.techopedia.com/definition/29165/eventual-consistency">
          <front>
            <title>Eventual Consistency</title>
            <author initials="M." surname="Rouse" fullname="Margaret Rouse">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="XPATH" target="https://www.w3.org/TR/1999/REC-xpath-19991116/">
          <front>
            <title>XML Path Language (XPath) Version 1.0</title>
            <author initials="" surname="W3C" fullname="W3C">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="gNMI" target="https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-specification.md">
          <front>
            <title>gRPC Network Management Interface (gNMI)</title>
            <author initials="" surname="OpenConfig" fullname="OpenConfig">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="I-D.ietf-netconf-distributed-notif">
          <front>
            <title>Subscription to Notifications in a Distributed Architecture</title>
            <author fullname="Tianran Zhou" initials="T." surname="Zhou">
              <organization>Huawei</organization>
            </author>
            <author fullname="Guangying Zheng" initials="G." surname="Zheng">
              <organization>Huawei</organization>
            </author>
            <author fullname="Eric Voit" initials="E." surname="Voit">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Pierre Francois" initials="P." surname="Francois">
              <organization>INSA-Lyon</organization>
            </author>
            <date day="13" month="April" year="2026"/>
            <abstract>
              <t>   This document describes extensions to the YANG notifications
   subscription to allow metrics being published directly from
   processors on line cards to target receivers, while subscription is
   still maintained at the route processor in a distributed forwarding
   system of a network node.


              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-distributed-notif-19"/>
        </reference>
        <reference anchor="I-D.tgraf-netconf-notif-sequencing">
          <front>
            <title>Support of Hostname and Sequencing in YANG Notifications</title>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Jean Quilbeuf" initials="J." surname="Quilbeuf">
              <organization>Huawei</organization>
            </author>
            <author fullname="Alex Huang Feng" initials="A. H." surname="Feng">
              <organization>INSA-Lyon</organization>
            </author>
            <date day="29" month="June" year="2024"/>
            <abstract>
              <t>   This document specifies a new YANG module that augments the NETCONF
   Event Notification header to support the hostname and sequence number
   to identify from which network node and at which time the message was
   published.  This allows the collector to recognize loss, delay and
   reordering between the publisher and the downstream system storing
   the messages.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tgraf-netconf-notif-sequencing-06"/>
        </reference>
        <reference anchor="I-D.tgraf-netconf-yang-push-observation-time">
          <front>
            <title>Support of Observation Timestamp in YANG-Push Notifications</title>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Benoît Claise" initials="B." surname="Claise">
              <organization>Huawei</organization>
            </author>
            <author fullname="Alex Huang Feng" initials="A. H." surname="Feng">
              <organization>INSA-Lyon</organization>
            </author>
            <date day="14" month="December" year="2024"/>
            <abstract>
              <t>   This document extends YANG-Push Notifications with the YANG objects
   observation timestamp and point-in-time for streaming update YANG-
   Push notifications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tgraf-netconf-yang-push-observation-time-03"/>
        </reference>
      </references>
    </references>
    <?line 4077?>

<section anchor="DifferencesFromYangPush">
      <name>Functional changes between YANG Push v2 and YANG Push</name>
      <t>This non-normative section highlights the significant functional changes where the YANG Push v2 implementation differs from YANG Push.  However, the main body of this document, from <xref target="overview"/> onwards, provides the normative definition of the YANG Push v2 specification, except for any text or sections that explicitly indicate that they are informative rather being normative.</t>
      <t><em>Note to reviewers: If you notice mistakes in this section during development of the document and solution then please point them out to the authors and the working group.</em> <strong>(RFC editor, please remove this paragraph prior to publication)</strong></t>
      <section anchor="removed-functionality">
        <name>Removed Functionality</name>
        <t>This section lists functionality specified in <xref target="RFC8639"/> and YANG Push which is not specified in YANG Push v2.</t>
        <ul spacing="normal">
          <li>
            <t>Negotiation and hints of failed subscriptions.</t>
          </li>
          <li>
            <t>The RPC to modify an existing dynamic subscription, instead the subscription must be terminated and re-established.</t>
          </li>
          <li>
            <t>The ability to suspend and resume a dynamic subscription.  Instead a dynamic subscription is terminated if the device cannot reliably fulfill the subscription or a receiver is too slow causing the subscription to be back pressured.</t>
          </li>
          <li>
            <t>Specifying a subscription stop time, and the corresponding subscription-completed notification have been removed.</t>
          </li>
          <li>
            <t>Replaying of buffered event records are not supported, for both configured and dynamic subscriptions.  The nearest equivalent is requesting a sync-on-start replay when the subscription transport session comes up which will reply the current state.</t>
          </li>
          <li>
            <t>QoS weighting and dependency between subscriptions has been removed due to the complexity of implementation.</t>
          </li>
          <li>
            <t>Support for reporting subscription error hints has been removed.  The device <bcp14>SHOULD</bcp14> reject subscriptions that are likely to overload the device, but more onus is placed on the operator configuring the subscriptions or setting up the dynamic subscriptions to ensure that subscriptions are reasonable, as they would be expected to do for any other configuration.</t>
          </li>
          <li>
            <t>The "subscription-state-notif" extension has been removed.</t>
          </li>
          <li>
            <t>The YANG Patch format <xref target="RFC8072"/> is no longer used for on-change subscriptions.</t>
          </li>
          <li>
            <t>Support for multiple receivers for a configured subscription.</t>
          </li>
        </ul>
      </section>
      <section anchor="changed-functionality">
        <name>Changed Functionality</name>
        <t>This section documents behavior that exists in both YANG Push and YANG Push v2, but the behavior differs between the two:</t>
        <ul spacing="normal">
          <li>
            <t>All YANG Push v2 notifications messages use <xref target="I-D.draft-ietf-netconf-notif-envelope"/> rather than <xref target="RFC5277"/> used by YANG Push <xref target="RFC8641"/>.</t>
          </li>
          <li>
            <t>There is a lot more alignment in data model, behavior, and state machined in YANG Push v2, aiming to minimize differences.</t>
          </li>
          <li>
            <t>Changes to handling receivers:  </t>
            <ul spacing="normal">
              <li>
                <t>Receivers are always configured separately from the subscription and are referenced.</t>
              </li>
              <li>
                <t>Transport and Encoding parameters are configured as part of a receiver definition, and are used by all subscriptions directed towards a given receiver.</t>
              </li>
              <li>
                <t>Encoding is now a mandatory parameter under a receiver and dynamic subscription (rather than specifying a default).</t>
              </li>
              <li>
                <t>Invoking the <em>reset</em> RPC operation on a receiver requires and forces a reset of any transport sessions associated with that receiver.  Previously, the sessions would not be reset if they were used by other subscriptions.</t>
              </li>
              <li>
                <t>YANG Push v2 only supports a single receiver per subscription.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Periodic and on-change message uses a common <em>update</em> notification message format, allowing for the messages to be processed by clients in a similar fashion and to support combined periodic and on-change subscriptions.</t>
          </li>
          <li>
            <t>Changes related to the configuration model:  </t>
            <ul spacing="normal">
              <li>
                <t>Subscriptions are identified by a string identifier rather than a numeric identifier.  The prefix 'dyn-' is reserved for publisher allocated dyanmic subscription ids.  Clients may provide the id to be used for dynamic subscriptions.  There is changed handling for conflicting subscription-ids between configured and dynamic.</t>
              </li>
              <li>
                <t>Purpose has been renamed to Description (since it is a more generic term), limited to 1k characters, but also available for dynamic subscriptions.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>On-change dampening:  </t>
            <ul spacing="normal">
              <li>
                <t>Client configurable on-change dampening has been removed.</t>
              </li>
              <li>
                <t>However, YANG Push v2 allows a publisher to limit the rate at which a data node is sampled for on-change notifications.  See <xref target="OnChangeConsiderations"/> for further details.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Dynamic subscriptions are no longer mandatory to implement, either or both of Configured and Dynamic Subscriptions may be implemented in YANG Push v2.</t>
          </li>
          <li>
            <t>The solution focuses solely on datastore subscriptions that each have their own event stream.  Filters cannot be applied to the event stream, only to the set of datastore data nodes that are monitored by the subscription.</t>
          </li>
          <li>
            <t>The lifecycle events of when a subscription-started or subscription-terminated may be sent differs from <xref target="RFC8639"/>/<xref target="RFC8641"/>:  </t>
            <ul spacing="normal">
              <li>
                <t>Subscription-started notifications are also sent for dynamic subscriptions.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Some of the requirements on transport have been relaxed.</t>
          </li>
          <li>
            <t>The encoding identities have been extended with CBOR encodings, and the "encoding-" prefix has been removed (so that there is a better on the wire representation).</t>
          </li>
          <li>
            <t>YANG Push v2 allows for a publisher to provide an eventually consistent distributed view of the operational datastore, rather than a fully consistent datastore where on-change updates are sent as logic diffs to that datastore.</t>
          </li>
        </ul>
      </section>
      <section anchor="added-functionality">
        <name>Added Functionality</name>
        <ul spacing="normal">
          <li>
            <t>Device capabilities are reported via XXX and additional models that augment that data model.</t>
          </li>
          <li>
            <t>A new <em>update</em> message:  </t>
            <ul spacing="normal">
              <li>
                <t>Covers both on-change and periodic events.</t>
              </li>
              <li>
                <t>Allows multiple updates to be sent in a single message (e.g., for on-change).</t>
              </li>
              <li>
                <t>Allows for a common path prefix to be specified, with any paths and encoded YANG data to be encoded relative to the common path prefix.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>An <em>update-complete</em> notification has been defined to inform collectors when a subscription's periodic collection cycle is complete.</t>
          </li>
          <li>
            <t>Support for {I-D.ietf-netconf-distributed-notif}} has been added to the base YANG Push v2 specification, as described in <xref target="distributed-notifications"/>.</t>
          </li>
          <li>
            <t>TODO - More operational data on the subscription load and performance.</t>
          </li>
          <li>
            <t>All YANG Push v2 configuration is under a new <em>datastore-telemetry</em> presence container</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="subscription-errors-from-rfc-8641">
      <name>Subscription Errors (from RFC 8641)</name>
      <section anchor="rpc-failures-1">
        <name>RPC Failures</name>
        <t>Rejection of an RPC for any reason is indicated via an RPC error
response from the publisher.  Valid RPC errors returned include both
(1) existing transport-layer RPC error codes, such as those seen with
NETCONF in <xref target="RFC6241"/> and (2) subscription-specific errors, such as
those defined in the YANG data model.  As a result, how subscription
errors are encoded in an RPC error response is transport dependent.</t>
        <t>References to specific identities in the ietf-subscribed-
notifications YANG module <xref target="RFC8639"/> or the ietf-yang-push YANG module
may be returned as part of the error responses resulting from failed
attempts at datastore subscription.  For errors defined as part of
the ietf-subscribed-notifications YANG module, please refer to
<xref target="RFC8639"/>.  The errors defined in this document, grouped per RPC, are
as follows:</t>
        <artwork><![CDATA[
      establish-subscription          modify-subscription
      ---------------------------     ---------------------
       cant-exclude                    period-unsupported
       datastore-not-subscribable      update-too-big
       on-change-unsupported           sync-too-big
       on-change-sync-unsupported      unchanging-selection
       period-unsupported
       update-too-big                 resync-subscription
       sync-too-big                   ----------------------------
       unchanging-selection            no-such-subscription-resync
                                       sync-too-big
]]></artwork>
        <t>There is one final set of transport-independent RPC error elements
included in the YANG data model.  These are the four yang-data
structures for failed datastore subscriptions:</t>
        <ol spacing="normal" type="1"><li>
            <t>yang-data "establish-subscription-error-datastore": This <bcp14>MUST</bcp14> be
returned if information identifying the reason for an RPC error
has not been placed elsewhere in the transport portion of a
failed "establish-subscription" RPC response.  This <bcp14>MUST</bcp14> be sent
if hints are included.</t>
          </li>
          <li>
            <t>yang-data "modify-subscription-error-datastore": This <bcp14>MUST</bcp14> be
returned if information identifying the reason for an RPC error
has not been placed elsewhere in the transport portion of a
failed "modify-subscription" RPC response.  This <bcp14>MUST</bcp14> be sent if
hints are included.</t>
          </li>
          <li>
            <t>yang-data "sn:delete-subscription-error": This <bcp14>MUST</bcp14> be returned
if information identifying the reason for an RPC error has not
been placed elsewhere in the transport portion of a failed
"delete-subscription" or "kill-subscription" RPC response.</t>
          </li>
          <li>
            <t>yang-data "resync-subscription-error": This <bcp14>MUST</bcp14> be returned if
information identifying the reason for an RPC error has not been
placed elsewhere in the transport portion of a failed
"resync-subscription" RPC response.</t>
          </li>
        </ol>
      </section>
      <section anchor="failure-notifications">
        <name>Failure Notifications</name>
        <t>A subscription may be unexpectedly terminated or suspended
independently of any RPC or configuration operation.  In such cases,
indications of such a failure <bcp14>MUST</bcp14> be provided.  To accomplish this,
a number of errors can be returned as part of the corresponding
subscription state change notification.  For this purpose, the
following error identities are introduced in this document, in
addition to those that were already defined in <xref target="RFC8639"/>:</t>
        <artwork><![CDATA[
  subscription-terminated        subscription-suspended
  ---------------------------    ----------------------
  datastore-not-subscribable     period-unsupported
  unchanging-selection           update-too-big
                                  synchronization-size
]]></artwork>
      </section>
    </section>
    <section anchor="Examples">
      <name>Examples</name>
      <t>Notes on examples:</t>
      <ul spacing="normal">
        <li>
          <t>To allow for programmatic validation, most notification examples in this section exclude the mandatory notification envelope and associated metadata defined in <xref target="I-D.draft-ietf-netconf-notif-envelope"/>.  Only the full notification example in <xref target="FullNotificationExample"/> includes the notification header.</t>
        </li>
        <li>
          <t>These notification message examples are given using a JSON encoding, but could be encoded using XML or CBOR.</t>
        </li>
        <li>
          <t>Some additional meta data fields, e.g., like those defined in <xref target="I-D.tgraf-netconf-notif-sequencing"/> would also likely be included, but have also been excluded to allow for slightly more concise examples.</t>
        </li>
        <li>
          <t>The examples include the <xref target="I-D.tgraf-netconf-yang-push-observation-time"/> field for the existing YANG-Push Notification format, and the proposed equivalent "observation-time" leaf for the new update notification format.</t>
        </li>
        <li>
          <t>All these examples are created by hand, may contain errors, and may not parse correctly.</t>
        </li>
      </ul>
      <section anchor="example-of-periodic-update-messages">
        <name>Example of periodic update messages</name>
        <t>In this example, a subscription is for <em>/ietf-interfaces:interfaces/interface</em>.  However, for efficiency reasons, the publisher is internally returning the data from two different data providers.</t>
        <t>Of note:</t>
        <ul spacing="normal">
          <li>
            <t>The first periodic message is published for the entries in the <em>/ietf-interfaces:interface/interfaces</em> list, but doesn't contain the data in the <em>statistics</em> child container.</t>
          </li>
          <li>
            <t>the <em>path-prefix</em> is to the subscription subtree, since the device will never return data outside of the subscription subtree.</t>
          </li>
          <li>
            <t>the <em>target-path</em> is elided because the data is returned at the subscription point. **TODO, or should it actually be to the element above? **</t>
          </li>
        </ul>
        <figure>
          <name>Example periodic update for interfaces list</name>
          <sourcecode type="JSON" name="periodic-update.json"><![CDATA[
{
  "ietf-yang-push-2:update": {
    "id": "interfaces",
    "path-prefix": "/ietf-interfaces:interfaces/interface",
    "snapshot-type": "periodic",
    "observation-time": "2024-10-10T08:00:05.11Z",
    "updates": [
      {
        "target-path": "",
        "merge": {
          "interface": [
            {
              "name": "eth0",
              "type": "iana-if-type:ethernetCsmacd",
              "enabled": true,
              "ietf-interfaces:oper-status": "up",
              "ietf-interfaces:admin-status": "up"
            },
            {
              "name": "eth1",
              "type": "iana-if-type:ethernetCsmacd",
              "enabled": true,
              "ietf-interfaces:oper-status": "up",
              "ietf-interfaces:admin-status": "up"
            }
          ]
        }
      }
    ],
    "complete": false
  }
}
]]></sourcecode>
        </figure>
        <t>For the second notification related to the same subscription:</t>
        <ul spacing="normal">
          <li>
            <t>the second periodic message is published for only the statistics associated with the interfaces.</t>
          </li>
          <li>
            <t>as above, the <em>path-prefix</em> is still to the subscription subtree.</t>
          </li>
          <li>
            <t>the second notification uses a separate observation-time, but would use the same event-time in the notification header so that the two messages can be correlated to the same periodic collection event.</t>
          </li>
          <li>
            <t>the second periodic message has set the <em>complete</em> flag to indicate that it is the last notification as part of the periodic collection.  A separate <em>update-complete</em> notification could have been sent instead.</t>
          </li>
        </ul>
        <figure>
          <name>Example periodic update for interface statistics</name>
          <sourcecode type="JSON" name="periodic-update-stats.json"><![CDATA[
{
  "ietf-yang-push-2:update": {
    "id": "interfaces",
    "path-prefix": "/ietf-interfaces:interfaces/interface",
    "snapshot-type": "periodic",
    "observation-time": "2024-10-10T08:00:05.21Z",
    "updates": [
      {
        "target-path": "",
        "merge": {
          "ietf-interfaces:interface": [
            {
              "name": "eth0",
              "statistics": {
                "in-octets": 123456,
                "out-octets": 654321
              }
            },
            {
              "name": "eth1",
              "statistics": {
                "in-octets": 789012,
                "out-octets": 210987
              }
            }
          ]
        }
      }
    ]
  }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="example-of-an-on-change-update-notification-using-the-new-style-update-message">
        <name>Example of an on-change-update notification using the new style update message</name>
        <t>If the subscription is for on-change notifications, or periodic-and-on-change-notifications, then, if the interface state changed (specifically if the 'state' leaf of the interface changed state), and if the device was capable of generating on-change notifications, then you may see the following message.  A few points of notes here:</t>
        <ul spacing="normal">
          <li>
            <t>The on-change notification contains <strong>all</strong> of the state at the "target-path"  </t>
            <ul spacing="normal">
              <li>
                <t>Not present in the below example, but if the notification excluded some state under an interfaces list entry (e.g., the line-state leaf) then this would logically represent the implicit deletion of that field under the given list entry.</t>
              </li>
              <li>
                <t>In this example it is restricted to a single interface. It could also publish an on-change notification for all interfaces, by indicating a target-path without any keys specified.  TODO - Can it represent notifications for a subset of interfaces?</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The schema of the change message is exactly the same as for the equivalent periodic message.  It doesn't use the YANG Patch format <xref target="RFC8072"/> for on-change messages.</t>
          </li>
          <li>
            <t>The "observation time" leaf represents when the system first observed the on-change event occurring.</t>
          </li>
          <li>
            <t>The on-change event doesn't differentiate the type of change to operational state.  The on-change-update snapshot type is used to indicate the creation of a new entry or some update to some existing state.  Basically, the message can be thought of as the state existing with some current value.</t>
          </li>
        </ul>
        <figure>
          <name>Example YANG Push v2 on-change update message</name>
          <sourcecode type="JSON" markers="true" name="on-change-msg.json"><![CDATA[
{
  "ietf-yp-notification:envelope": {
    "event-time": "2024-09-27T14:16:30.973Z",
    "hostname": "example-router",
    "sequence-number": 454,
    "contents": {
      "ietf-yp-ext:update": {
        "id": 1,
        "subscription-path":
          "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces",
        "target-path":
          "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces/interfaces/
          interface[interface=GigabitEthernet0/0/0/0]",
        "snapshot-type": "on-change-update"
        "observation-time": "2024-09-27T14:16:30.973Z",
        "datastore-snapshot": {
          "interfaces": {
            "interface": [
              {
                "interface-name": "GigabitEthernet0/0/0/0",
                "interface": "GigabitEthernet0/0/0/0",
                "state": "im-state-up",
                "line-state": "im-state-up"
              }
            ]
          }
        }
      }
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="example-of-an-on-change-delete-notification-using-the-new-style-update-message">
        <name>Example of an on-change-delete notification using the new style update message</name>
        <section anchor="update-message-with-single-deleted-data-node">
          <name>Update message with single deleted data node</name>
          <t>If the interface was deleted, and if the system was capable of reporting on-change events for the delete event, then an on-change delete message would be encoded as per the following message.</t>
          <t>Of note:</t>
          <ul spacing="normal">
            <li>
              <t>The ietf-yp-notification:envelope has been elided</t>
            </li>
            <li>
              <t>The deleted data is identified by the target node in the <em>updates/target-path</em> element.</t>
            </li>
            <li>
              <t>The observation time represents the time at which the delete event occurred, e.g., perhaps when the system processed a configuration change.</t>
            </li>
          </ul>
          <figure>
            <name>Example YANG Push v2 on-change delete message</name>
            <sourcecode type="JSON" name="on-change-delete-msg.json"><![CDATA[
{
  "ietf-yang-push-2:update": {
    "id": "interfaces",
    "snapshot-type": "on-change-delete",
    "observation-time": "2025-10-10T08:16:15.11Z",
    "updates": [
      {
        "target-path": "/ietf-interfaces:interfaces/interface[name='eth0']",
        "deleted": [null]
      }
    ]
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="update-message-with-multiple-on-change-deletes">
          <name>Update message with multiple on-change deletes</name>
          <t>This follow example illustrates how a single update notification message can contain multiple on-change delete events for different data nodes.  In this example, two separate interfaces are being deleted.</t>
          <t>Of note:</t>
          <ul spacing="normal">
            <li>
              <t>The ietf-yp-notification:envelope has been elided</t>
            </li>
            <li>
              <t><em>prefix-path</em> is used to shorten the target-paths, the full paths can be constructed concatenating the <em>prefix-path</em> with each <em>target-path</em> in the <em>updates</em> list.</t>
            </li>
            <li>
              <t>all delete events share a common observation-time of when the delete events occurred.  If it is necessary to identify separate observation times then the publisher would send separate messages.</t>
            </li>
            <li>
              <t>data node subtrees that are deleted (list entries in this case) are identified by separate entries in the <em>updates</em> list.</t>
            </li>
          </ul>
          <figure>
            <name>Example YANG Push v2 on-change delete message</name>
            <sourcecode type="JSON" name="on-change-multi-delete-msg.json"><![CDATA[
{
  "ietf-yang-push-2:update": {
    "id": "interfaces",
    "path-prefix": "/ietf-interfaces:interfaces",
    "snapshot-type": "on-change-delete",
    "observation-time": "2025-10-10T08:16:16.11Z",
    "updates": [
      {
        "target-path": "interface[name='eth0']"
      },
      {
        "target-path": "interface[name='eth1']"
      }
    ]
  }
}
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="netconf-dynamic-subscription-rpc-examples">
        <name>NETCONF Dynamic Subscription RPC examples</name>
        <t>The examples in this section illustrate NETCONF RPCs for establishing and deleting dynamic subscriptions using YANG Push v2.  The examples include one successfully establishing a subscription, and a second to illustrate how errors are returned if a request to establish the subscription fails.  Examples of the <em>update</em> and subscription lifecycle notifications have been given in the previous section.</t>
        <section anchor="successful-periodic-subscription">
          <name>Successful periodic subscription</name>
          <t>The subscriber sends an "establish-subscription" RPC with the parameters listed in <xref target="EstablishDynamic"/>  An example might look like:</t>
          <figure>
            <name>Example establish-subscription RPC for interface statistics</name>
            <sourcecode type="XML" name="netconf-establish-sub-if-stats.xml"><![CDATA[
<netconf:rpc 
message-id="101" xmlns:netconf="urn:ietf:params:xml:ns:netconf:base:1.0">
  <establish-subscription xmlns="urn:ietf:params:xml:ns:yang:ietf-yp-lite">
    <name>if-stats-sub</name>
    <description>Subscribe to interface statistics</description>
    <target>
      <datastore xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">
        ds:operational
      </datastore>
      <path>/ietf-interfaces:interfaces/interface/statistics</path>
    </target>
    <update-trigger>
      <periodic>
        <period>3000</period>
      </periodic>
    </update-trigger>
    <encoding>json</encoding>
  </establish-subscription>
</netconf:rpc>
]]></sourcecode>
          </figure>
          <t>If a publisher is happy to accept the subscription, then it returns a positive response that includes the "id" of the accepted subscription.  For example,</t>
          <figure>
            <name>Example establish-subscription RPC successful reply</name>
            <sourcecode type="XML" name="establish-subscription-reply.xml"><![CDATA[
<rpc-reply 
message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <id xmlns="urn:ietf:params:xml:ns:yang:ietf-yp-lite">52</id>
</rpc-reply>
]]></sourcecode>
          </figure>
          <t>Once established, the publisher would send a <em>subscription-started</em> notification message followed by <em>update</em> notification messages at the requested periodic cadence.</t>
        </section>
        <section anchor="failed-periodic-subscription">
          <name>Failed periodic subscription</name>
          <t>A subscription can be rejected for multiple reasons, including the
lack of authorization to establish a subscription, no capacity to
serve the subscription at the publisher, or the inability of the
publisher to select datastore content at the requested cadence.</t>
          <t>If a request is rejected because the publisher is not able to serve
it, the publisher <bcp14>SHOULD</bcp14> include in the returned error hints that
help a subscriber understand what subscription parameters might have
been accepted for the request.  These hints would be included in the
yang-data structure "establish-subscription-error-datastore".
However, even with these hints, there are no guarantees that
subsequent requests will in fact be accepted.</t>
          <t>The specific parameters to be returned as part of the RPC error
response depend on the specific transport that is used to manage the
subscription.  For NETCONF, those parameters are defined in
<xref target="RFC8640"/>.  For example, for the following NETCONF request:</t>
          <artwork><![CDATA[
  <rpc message-id="101"
      xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <establish-subscription
        xmlns=
          "urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications"
        xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-push">
      <yp:datastore
          xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">
        ds:operational
      </yp:datastore>
      <yp:datastore-xpath-filter
          xmlns:ex="https://example.com/sample-data/1.0">
        /ex:foo
      </yp:datastore-xpath-filter>
      <yp:on-change>
      </yp:on-change>
    </establish-subscription>
  </rpc>

      Figure 12: "establish-subscription" Request: Example 2
]]></artwork>
          <t>A publisher that cannot serve on-change updates but can serve
periodic updates might return the following NETCONF response:</t>
          <artwork><![CDATA[
 <rpc-reply message-id="101"
   xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
   xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications">
   <rpc-error>
     <error-type>application</error-type>
     <error-tag>operation-failed</error-tag>
     <error-severity>error</error-severity>
     <error-path>/yp:periodic/yp:period</error-path>
     <error-info>
       <yp:establish-subscription-error-datastore>
         <yp:reason>yp:on-change-unsupported</yp:reason>
       </yp:establish-subscription-error-datastore>
     </error-info>
   </rpc-error>
 </rpc-reply>

       Figure 13: "establish-subscription" Error Response: Example 2
]]></artwork>
        </section>
        <section anchor="delete-subscription-rpc">
          <name>"delete-subscription" RPC</name>
          <t>To stop receiving updates from a subscription and effectively delete
a subscription that had previously been established using an
"establish-subscription" RPC, a subscriber can send a
"delete-subscription" RPC, which takes as its only input the
subscription's "id".  This RPC is unmodified from <xref target="RFC8639"/>.</t>
        </section>
      </section>
      <section anchor="distrib-notif-example">
        <name>Distributed Notifications Subscription</name>
        <t>This simple example illustrates how messages may look like when using
distributed notifications, as described in <xref target="distributed-notifications"/>.  This example is for a very simple periodic subscription to the ietf-interfaces YANG data model.</t>
        <t>The first message is a subscription started message that indicates that there
are 2 additional <em>Publisher Agents</em> with publisher-ids of 4 and 7, e.g., perhaps representing a device with two linecards inserted into slots 4 and 7, each with
their owner separate Message Publisher process.  This message has a publisher-id of 0 because it is sent by the Publisher Parent, which, because this field has the default value, could have been elided from the message.</t>
        <figure>
          <name>Example distributed notification subscription started message</name>
          <sourcecode type="JSON" name="distributed-subscription-started.json"><![CDATA[
{
  "ietf-yp-notification:envelope": {
    "event-time": "2025-10-10T08:00:05.22Z",
    "hostname": "example-router",
    "sequence-number": 23,
    "ietf-yang-push-2:publisher-id": 0
    "contents": {
      "ietf-yang-push-2:subscription-started": {
        "id": "interfaces",
        "target": {
          "datastore": "ietf-datastores:operational",
          "path": "/ietf-interfaces:interfaces"
        },
        "update-trigger": {
          "periodic": {
            "period": 3000,
            "anchor-time": "2025-01-01T00:00:00.00Z"
          }
        },
        "message-publishers": {
          "publisher-id" = [0, 4, 7]
        }
      }
    }
  }
}
]]></sourcecode>
        </figure>
        <t>The second message is an example of a periodic update message sent from one of the Publisher Agents on the linecard.  In this case the message is sent from the publisher agent on linecard 4, and it has set the <em>complete</em> leaf to indicate that the message represents all data for that periodic collection from that publisher.</t>
        <figure>
          <name>Example distributed notification update message</name>
          <sourcecode type="JSON" name="full-distributed-notification.json"><![CDATA[
{
  "ietf-yp-notification:envelope": {
    "event-time": "2025-10-10T08:00:05.22Z",
    "hostname": "example-router",
    "sequence-number": 18,
    "ietf-yang-push-2:publisher-id": 4
    "contents": {
      "ietf-yang-push-2:update": {
        "id": 1011,
        "snapshot-type": "periodic",
        "observation-time": "2025-10-10T08:00:05.11Z",
        "updates": [
          {
            "target-path": "ietf-interfaces:interfaces/interface",
            "merge": {
              "ietf-interfaces:interfaces": {
                "ietf-interfaces:interface": [
                  {
                    "name": "eth4/0",
                    "type": "iana-if-type:ethernetCsmacd",
                    "enabled": true,
                    "ietf-interfaces:oper-status": "up",
                    "ietf-interfaces:admin-status": "up"
                  },
                  {
                    "name": "eth4/1",
                    "type": "iana-if-type:ethernetCsmacd",
                    "enabled": true,
                    "ietf-interfaces:oper-status": "down",
                    "ietf-interfaces:admin-status": "up"
                  }
                ]
              }
            }
          }
        ],
        complete = true
      }
    }
  }
}
]]></sourcecode>
        </figure>
        <t>Not shown here, but because there were 3 publisher-ids listed in the subscription-started message means that each Message Publisher must send at least one message for each periodic subscription returning any data associated with the subscription from that Message Publisher and also indicating that the periodic collection is complete by either setting <tt>complete = true</tt> or sending an <em>update-complete</em> notification.</t>
      </section>
    </section>
    <section anchor="OpenIssuesTracker">
      <name>Summary of Open Issues &amp; Potential Enhancements</name>
      <t>This temporary section lists open issues and enhancements that require further discussion by the authors, or the WG.  Once adopted, it is anticipated that tracking the open issues would move to github.</t>
      <t>The issues are ordered/grouped by the sections in the current document.  I.e., to make it easier to review/update sections of the document.</t>
      <section anchor="issues-related-to-general-ietf-process">
        <name>Issues related to general IETF process</name>
        <ol spacing="normal" type="1"><li>
            <t>If this work progresses we will need simple bis versions of the transports document so that they augment into the new data model paths.  Drafts that would need to be updated as documented in  <xref target="DraftRelationships"/>.  <eref target="https://github.com/rgwilton/draft-yp-observability/issues/27">Issue 27</eref></t>
          </li>
          <li>
            <t>Do we need to fold in any text from RFC 8640? and RESTCONF? <eref target="https://github.com/rgwilton/draft-yp-observability/issues/26">Issue 26</eref></t>
          </li>
        </ol>
      </section>
      <section anchor="issue-related-to-terminologydefinitions">
        <name>Issue related to Terminology/Definitions</name>
        <ol spacing="normal" type="1"><li>
            <t>Should we use the object terminology? Tracked as editorial, in <eref target="https://github.com/rgwilton/draft-yp-observability/issues/15">Issue 15</eref></t>
          </li>
        </ol>
      </section>
      <section anchor="issues-related-to-yang-push-v2-overview">
        <name>Issues related to YANG Push v2 Overview</name>
        <t>None currently.</t>
      </section>
      <section anchor="issues-related-to-subscription-paths-and-selection-filters">
        <name>Issues related to Subscription Paths and Selection Filters</name>
        <ol spacing="normal" type="1"><li>
            <t>This draft introduces a new simple yang path (ypath) format that is like a JSON instance data path, that all implementations <bcp14>MUST</bcp14> support.  <eref target="https://github.com/rgwilton/draft-yp-observability/issues/29">Issue 29</eref></t>
          </li>
          <li>
            <t>Advertising subscription schema: <eref target="https://github.com/rgwilton/draft-yp-observability/issues/11">Issue 11</eref></t>
          </li>
        </ol>
      </section>
      <section anchor="issues-related-to-datastore-event-streams-message-format">
        <name>Issues related to Datastore Event Streams &amp; message format</name>
        <ol spacing="normal" type="1"><li>
            <t>Agree format and usage of <em>update</em> notification. <eref target="https://github.com/rgwilton/draft-yp-observability/issues/32">Issue 32</eref></t>
          </li>
        </ol>
      </section>
      <section anchor="issues-related-to-receivers-transports-encodings">
        <name>Issues related to Receivers, Transports, &amp; Encodings</name>
        <section anchor="issues-related-to-transports">
          <name>Issues related to Transports:</name>
          <ol spacing="normal" type="1"><li>
              <t>James: We also need to add some text into security section.
              </t>
              <ul spacing="normal">
                <li>
                  <t>Rob: Is this transport specific, or related to application layer authorization?</t>
                </li>
              </ul>
            </li>
            <li>
              <t>What is the rules/restrictions for subscription receiver instances vs transport sessions?  E.g., is this entirely down to the transport to define.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="issues-related-to-setting-up-managing-subscriptions">
        <name>Issues related to Setting up &amp; Managing Subscriptions</name>
        <section anchor="issues-related-to-the-configuration-model">
          <name>Issues related to the configuration model:</name>
          <ol spacing="normal" type="1"><li>
              <t>YP Lite is somewhat different (separate namespace, separate receivers, no event filters, some config has moved to a separate receivers list).  See the data model and <xref target="DifferencesFromYangPush"/>.  Note some of these apply or impact dynamic subscriptions as well. <eref target="https://github.com/rgwilton/draft-yp-observability/issues/30">Issue 30</eref></t>
            </li>
          </ol>
        </section>
        <section anchor="issues-related-to-dynamic-subscriptions">
          <name>Issues related to dynamic subscriptions:</name>
          <ol spacing="normal" type="1"><li>
              <t>Do we want to change how RPC errors are reported?  E.g., change the RPC ok response to indicate whether the subscription was successfully created or not, or included extra error information.  Note NETCONF and RESTCONF already define how errors are encoded in XML and JSON (for RESTCONF only), is it possible to unify this so we don't need large extra separate documents.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="issues-related-to-subscription-lifecycle">
        <name>Issues related to Subscription Lifecycle</name>
        <ol spacing="normal" type="1"><li>
            <t>Should subscription-started notification include a fingerprint of the schema that is covered by the subscription that would guaranteed to change if the subscription changes? <eref target="https://github.com/rgwilton/draft-yp-observability/issues/11">Issue 11</eref></t>
          </li>
          <li>
            <t>If a subscription references a filter, then should that be included inline in the subscription started notification (as per the RFC 8641 text), or should it indicate that it is a referenced filter? <eref target="https://github.com/rgwilton/draft-yp-observability/issues/20">Issue 20</eref></t>
          </li>
          <li>
            <t>Is a publisher allowed to arbitrarily send a sync-on-start resync, e.g., if it detects data loss, or should it always just terminate and reinitialize the subscription? <eref target="https://github.com/rgwilton/draft-yp-observability/issues/22">Issue 22</eref></t>
          </li>
          <li>
            <t>Should we have a YANG Action to reset a receiver or a subscription?  E.g., discussed in <xref target="reset"/>. <eref target="https://github.com/rgwilton/draft-yp-observability/issues/24">Issue 24</eref></t>
          </li>
          <li>
            <t>Should we support configurable subscription-level keepalives? <eref target="https://github.com/rgwilton/draft-yp-observability/issues/14">Issue 14</eref></t>
          </li>
        </ol>
      </section>
      <section anchor="issues-related-to-performance-reliability-subscription-monitoring">
        <name>Issues related to Performance, Reliability &amp; Subscription Monitoring</name>
        <section anchor="issuesquestions-related-to-operational-data">
          <name>Issues/questions related to operational data:</name>
          <ol spacing="normal" type="1"><li>
              <t>Should we define some additional operational data to help operators check that the telemetry infrastructure is performing correctly, to get an approximation of the load, etc.
              </t>
              <ul spacing="normal">
                <li>
                  <t>Rob: probably, but lower priority.</t>
                </li>
                <li>
                  <t>Tracked by <eref target="https://github.com/rgwilton/draft-yp-observability/issues/31">Issue 31</eref></t>
                </li>
              </ul>
            </li>
            <li>
              <t>Should dynamic subscriptions use the same receivers structure as for configured subscriptions, or should they be inline in the configured subscription?  Also tracked by <eref target="https://github.com/rgwilton/draft-yp-observability/issues/31">Issue 31</eref></t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="issues-related-to-conformance-and-capabilities">
        <name>Issues related to Conformance and Capabilities</name>
        <ol spacing="normal" type="1"><li>
            <t>Do we advertise that conformance via capabilities and/or YANG features (both for configured and dynamic subscriptions)?</t>
          </li>
          <li>
            <t>For on-change, should a subscription be rejected (or not brought up) if there are no on-change notifiable nodes?</t>
          </li>
          <li>
            <t>Further work and discussion is required for advertising capabilities for filter paths.  E.g., listing all of the paths that support on-change could be a very long list.  Related, does the draft need to advertise at what points a publisher would decompose a higher subscription into more specific subscriptions.</t>
          </li>
        </ol>
        <t>All tracked via <eref target="https://github.com/rgwilton/draft-yp-observability/issues/18">Issue 18</eref></t>
      </section>
      <section anchor="issues-related-to-the-yang-modules">
        <name>Issues related to the YANG Modules</name>
        <t>None open.</t>
      </section>
      <section anchor="issues-related-to-the-security-considerations-nacm-filtering">
        <name>Issues related to the Security Considerations (&amp; NACM filtering)</name>
        <ol spacing="normal" type="1"><li>
            <t>Need to consider how NACM applies to YANG Push v2, which may differ for dynamic vs configured subscription, but generally we want the permissions to be checked when the subscription is created rather than each time a path is accessed.</t>
          </li>
          <li>
            <t>Where should this be in the document (current it in the security considerations section)</t>
          </li>
          <li>
            <t>Do we want to retain the the current text in <xref target="events"/> introduction related to terminating a subscription if permissions change?</t>
          </li>
          <li>
            <t>Also note, text was removed from the transport section related to RPC authorization, and which should be moved to an application (rather than transport) layer security mechanism.</t>
          </li>
        </ol>
        <t>All tracked via <eref target="https://github.com/rgwilton/draft-yp-observability/issues/33">Issue 33</eref></t>
      </section>
      <section anchor="issues-related-to-the-iana">
        <name>Issues related to the IANA</name>
        <t>None open.</t>
      </section>
      <section anchor="issues-related-to-the-appendixes">
        <name>Issues related to the Appendixes</name>
        <section anchor="examples-related-issuesquestions">
          <name>Examples related issues/questions:</name>
          <ol spacing="normal" type="1"><li>
              <t>Not a question, but a note that many examples need to be updated to reflect the data models currently in the draft.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="summary-of-closedresolved-issues">
        <name>Summary of closed/resolved issues</name>
        <t>This appendix is only intended while the authors/WG are working on the document, and should be deleted prior to WG LC.</t>
        <ol spacing="normal" type="1"><li>
            <t>Rename subscription-terminated to subscription-stopped (Change rejected 21 Feb 25, unnecessary renaming.)</t>
          </li>
          <li>
            <t><bcp14>MUST</bcp14> use envelope, hostname and sequence-number (and event-time) (Decided 21 Feb 25)</t>
          </li>
          <li>
            <t>Don't mandate configured or dynamic subscriptions, allow implementations to implement one or both of them. (Decided 21 Feb 25)</t>
          </li>
          <li>
            <t>Dynamic subscriptions require the encoding to be specified. (Decided 21 Feb 25)</t>
          </li>
          <li>
            <t>DSCP settings are only specified under the receiver (for configured subscriptions) (Decided 21 Feb 25)</t>
          </li>
          <li>
            <t>Config and dynamic subscriptions should be aligned as much as possible.</t>
          </li>
          <li>
            <t>If subscription parameters change then force subscription down and up again, <eref target="https://github.com/rgwilton/draft-yp-observability/issues/14">issue 14</eref></t>
          </li>
          <li>
            <t>No RPC to modify a dynamic subscription, use delete-subscription then create-subscription.</t>
          </li>
          <li>
            <t>Lifecycle messages are sent per subscription rather than per receiver, and we only support a single receiver per subscription.</t>
          </li>
          <li>
            <t>Encoding is set per subscription, and we don't allow different per-receiver encodings for a subscription with more than one receiver.  <eref target="https://github.com/rgwilton/draft-yp-observability/issues/17">issue 17</eref></t>
          </li>
          <li>
            <t>We have a updated-completed flag/notification to allow deleted data to be implicitly detected.  Something similar may be added to gNMI.  <eref target="https://github.com/rgwilton/draft-yp-observability/issues/12">issue 12</eref></t>
          </li>
          <li>
            <t>We use a string identifier to uniquely identify a subscription rather than a numeric id.  Reserve 'dyn-' for server allocated dynamic subscription ids.  Agreed config/dynamic conflict policy.  Restricted names for fitler-id and receiver name.  Don't use a union type (could be added in future). (Dec 8th)</t>
          </li>
          <li>
            <t>Draft renamed from Yang Push Lite to Yang Push 2. (Dec 8th)</t>
          </li>
          <li>
            <t>ietf-yp2-config no longer augments dynamic subscriptions with a reference to a configured filter <eref target="https://github.com/rgwilton/draft-yp-observability/issues/19">issue 19</eref></t>
          </li>
          <li>
            <t>Publisher <bcp14>MUST NOT</bcp14> send more notifications after a subscription terminated message <eref target="https://github.com/rgwilton/draft-yp-observability/issues/13">Issue 13</eref>.</t>
          </li>
          <li>
            <t>on-change notifications <bcp14>SHOULD</bcp14> send a minimal update but <bcp14>MAY</bcp14> send additional unchanged fields.</t>
          </li>
        </ol>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIANOgOmoAA+y9+3obx5Uv+j+eokP9IRIbIEVZvog7iULrMtaMZWlL9DjZ
tvekATTIjoBupLshima0n+U8y3mys65Vq6qrQcqOM5PvjL58Dgh0173Wff3W
dDoddWW3Kk6yvT+dfvMv2ZO8y9uuborsrFgV66JrrrJ9+uXVtr3I3hVNW9ZV
dv9gb5TPZk3xTl6c8s/390bzvCvO6+bqJGu7xWi0qOdVvob2F02+7KZl0S2n
VdHN62o5vcqr8+kGXpzen967N2q3s3XZYvvd1QbeeP707Nmo2q5nRXMyWkCz
JyN4rS2qdtueZF2zLUbQ/SejvClyGMbLTdHkHbzdZnm1yF7kVX4OM6i6vdFl
3bw9b+rtBh77pujwz+wxjKA83/Ire6O3xRV8vTgZZdk0cxOmv17O2qJ5l8/K
Vdld0Tfahlsjfk4HkK9oHUfvimpbYIs39J1lPOG97+DHsjrP/gWfx+/XebmC
72XB/oCrd1g35/hT3swv4KeLrtu0J0dH+CR+Vb4rDvWxI/ziaNbUl21xJG0c
4bvnZXexncHbzflluerq6oh352ozre1k8dkVLHzbmZ70nUNu5bCsB96Wr/lp
v+nRU4cX3Xq1Nxrl2+6iho3OptBpli23qxUfnNc1HIAu+46aod9ganlV/kSr
d5I9Ltt5nb25arti3dLvBS9bwz3/YY4PHM7rNf3Y1Hjai0UJp7zf2Vf16rxo
sn8rVquiSXT2pNgWXTu/4PvxVtqUDvnlQ375Dx0/cLgo+t18WVR12WWPV3nZ
FolunsJFu+ou8Cy8fPXG9jGjN/9QuAem9aY9hMXtd/J0Bg9np01ZtIku/nVb
lRuZo7RdvM//8Bf+Ot3iv8J/2+zxdr2GjhNtflO/LXPb4l/whcM5v/CHCn/m
jYhbPruo13kLBz9fJtp9cwl0YR4uNr9xiG/8oZXfqe1RVTdrePEdXb3n0yeH
CdJT1V25nBbVu2JVb+jB188e33/w+QP5+Nn9B8f68eFD/fj5w0/v+Y/67Ref
PLjnP5pv7+vHT+9/6j8+1I+fu3YfHj/8TD/e/1TH8PDTh/rawwdfuI8Pj+m1
Lx+/On5wQsM+Pn5IDR5//mA0KqulnT98D2PSjj757Isv5OOD+5/q+D69//nn
Otl7990M7z3QoX7+qZ/h/U8f+hl+oh8fPNAJfHHPP3vvc7cEn33iXvvMP/CZ
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
opgfved72Z2YLo2QWKkJ92ZiVQ1odpZujZJ09D+FggzSDTcLWcob6Mennn4c
f3Zy77OfSz/cyCzs9o+WqpiwpZi2DBKMj7435s7QIQx+u+HCoHVkr3/IJz9n
7sc/Z+7H/+Xmzhf8o26yP38MA86HKH2Zh0IN4DbHFxc9N5kWqQUd40yhTMR3
8lQqXqDfxj32tDtdcX6v+wohTJqrXpROv1CqT91JYokDBemkBHuG6AITA67C
mPZSgaPldABV4kiPT7iDIggb0SslAG5AdJba74Lc4uL3dC6lq99Xeb9zAgLG
m9ZIEm/waJDNKlW3x5e7bQobaemHKAgZPSsW/+o2giSvW9bWlXoTGKpuxmRH
2vhUIVuoiAsV1AZpJ9kdWc+5snyXnoBUPLeJCuFM7thDRltqqrG/CTbt+k5q
OXbvtI0+Jcgv/1xQz8dMPlQ4vFslrFOW0veCQvSIlHnq3fb8UJRN7nPsPS5T
eMb3r6+/1p8srE6L8juhBu5Cak8WbXMLYsq2Hf79oNvjOO0p/yhVNjFU1EdG
KHG4Ygwvgj6uyM1Uc2iB8eC4cINdSrBLaDXb5bEHg+L12IVGP5jbLSMo36Gh
JPYj/VoJFm5LouQK/f4jIOjdvyEsekdge/8wdUB/7b+3aOebPigA/oOT0p3g
z9FL0/doeCq6flv79pBPhXlN2Ut5EKRa/E1y2h0Hlqdyl+DuH/SI98RbPdfG
YZdLLwRKNkX0rv679s/BaQeWzcBXyWEJcPuOQWXRoN41S7+KGLkHY8muxQDU
4s+9nuImpNNHfvHLjX45rerpT3VVJNbcnXESiA7+6RNUdtI2k62SebnGgvQ/
5VBixw4CSMIoqivFOzVunWDCyJuhtAx5ho+fCph/GEGbZhzUqtus8YAc5SkW
DKmr5/VK45M1SkYpmSCSRIQMc30xLMqfCudF1bBBT6cnDhafxyLhTGuYaQ47
cCV4Za0vDoWWVC4Bq57VJ28ev+JsgYZZCYKsMtTyjGNFsCpLkDXuohcdoabd
8F5bdGhvG8bdJdGxudr4VUTEbSFnY7Zwzwl+BdaGuFYSxTxeKgdjS3U1nbQs
pTXdfA1Ps0dBUL6aHL1emh2NATeSGus4l+TtI1hfRLzgAGhzaumTBrxpT3e+
V7V2YmNSKe3AwZNzjM7zV674BC7hv79+dhiPBEhSYgz/XjaYU5m9rredolwC
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

-->

</rfc>
