<?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.29 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-wilton-netconf-yang-push-lite-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="YANG-Push Lite">YANG Datastore Telemetry (YANG Push Lite)</title>
    <seriesInfo name="Internet-Draft" value="draft-wilton-netconf-yang-push-lite-01"/>
    <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>Huawei</organization>
      <address>
        <email>benoit.claise@huawei.com</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="2025" month="July" day="07"/>
    <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 127?>

<t>YANG Push Lite is a YANG datastore telemetry solution, as an alternative 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-wilton-netconf-yang-push-lite/"/>.
      </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 131?>

<section anchor="document-status">
      <name>Document Status</name>
      <t><em>RFC Editor: If present, please remove this section before publication.</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 Lite 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 Lite", an lightweight alternative to Subscribed Notifications <xref target="RFC8639"/> and YANG Push <xref target="RFC8641"/>. YANG Push Lite 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 Lite 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 Lite 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-lite">
        <name>Background and Motivation for YANG Push Lite</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, 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 Lite.</t>
        <t>The implementation efforts also gave arise 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>**TODO More needs to be added here, e.g., encoding, on-change considerations.  Splitting subscriptions up. **</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 introduces the fairly intuitive "periodic-and-on-change" update trigger that creates a combined periodic and on-change subscription, and allows the same parameters to be configured.  For some use cases, e.g., where a time-series database is being updated, the new encoding format proposed previously may be most useful.</t>
        </section>
      </section>
      <section anchor="DraftRelationships">
        <name>Relationships to existing RFCs and Internet Drafts</name>
        <t>This document, specifying YANG Push Lite, 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 Lite 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>
        <t>** Note, an alternative approach, but not proposed at this time, could be to create bis versions of various documents to also cover YANG Push Lite, e.g., <xref target="I-D.draft-netana-netconf-yp-transport-capabilities"/>, and perhaps <xref target="RFC9196"/>.**</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 Lite 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 Lite compares to <xref target="RFC8639"/> and <xref target="RFC8641"/> is given in <xref target="DifferencesFromYangPush"/>.</t>
        </section>
        <section anchor="i-ddraft-netana-netconf-notif-envelope-and-rfc-5277">
          <name><xref target="I-D.draft-netana-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 on and use the notification envelope format defined in <xref target="I-D.draft-netana-netconf-notif-envelope"/>.</t>
          <t>As such, this specification does not make use of the notification format defined in <xref target="RFC5277"/>.  Of course, devices may also use <xref target="RFC5277"/> 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-yp-lite YANG module, to augment YANG Push Lite 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-yp-lite 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 Lite 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-yp-lite data model.</t>
        </section>
        <section anchor="i-ddraft-ietf-netconf-distributed-notif">
          <name><xref target="I-D.draft-ietf-netconf-distributed-notif"/></name>
          <t><strong>TODO.  It is likely that some of the base support for distributed notifications will be incorporated into this draft.  If so, add acknowledgements to the authors.</strong></t>
        </section>
      </section>
    </section>
    <section anchor="overview">
      <name>YANG Push Lite 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 lite 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 datstore 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 <strong>TODO, add reference</strong>.</t>
        </li>
        <li>
          <t>a chosen encoding of the messages, e.g., JSON, or CBOR.</t>
        </li>
        <li>
          <t>a set of one or more receivers for 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 one or more receivers 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 receivers, 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>NACM <xref target="RFC8341"/> based access control is used to ensure the receivers only get access to the information for which they are allowed.  This is further described in <xref target="security"/>. <strong>TODO Do we need to tie YANG Push Lite to NACM?</strong></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="yp-lite-yang-module"/> and associated tree view in <xref target="yp-lite-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><strong>TODO, if this document progresses, we should check which of this terminology we actually use/re-use, and what new terminology should be introduced in this document.  And also an action to check that it is used consistently.</strong></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 that one or more receivers wish 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>All <em>YANG tree diagrams</em> used in this document follow the notation defined in <xref target="RFC8340"/>.</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(s).</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 Lite 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> selection filter is a full XPath expression that returns a node set.  (XPath is a query language for selecting nodes in an XML document; see <xref target="XPATH"/> for details.)  When specified, updates will only come from the selected datastore nodes that match 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 basic path filters, and <bcp14>MAY</bcp14> also support subtree or xpath filters.</t>
      <t>XPath itself provides powerful filtering constructs, and care must be used in filter definition.  Consider an XPath filter that only passes a datastore node when an interface is up.  It is up to the receiver to understand the implications of the presence or absence of objects in each update.</t>
      <t>For both path and xpath based filters, each filter may define a list of paths/xpaths.  Each of these filter paths is processed by the publisher independently, and if two or more filter paths 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-yp-lite-yang"/>.</t>
        <figure anchor="FilterContainerYangTree">
          <sourcecode type="yangtree"><![CDATA[
module: ietf-yp-lite
  +--rw datastore-telemetry!
     +--rw filters
        +--rw filter* [name]
           +--rw name             string
           +--rw (filter-spec)?
              +--:(path)
              |  +--rw path?      ypath
              +--:(subtree)
              |  +--rw subtree?   <anydata> {ypl:subtree}?
              +--:(xpath)
                 +--rw xpath?     yang:xpath1.0 {ypl:xpath}?
]]></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 Lite 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 update 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 (referred to as an <em>object</em>), and avoids the 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 represents 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 update messages, and with separate, perhaps more precise, timestamps.</t>
          </li>
          <li>
            <t>A Publisher <bcp14>MAY</bcp14> split large lists into multiple separate update messages, each with separate timestamps.  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. <strong>TODO We need a mechanism so that the client knows all list entries have been returned, and hence it can delete stale entries?  E.g., something like a <em>more_data</em> flag.</strong></t>
          </li>
          <li>
            <t>A Publisher is allowed to generate on-change notifications at an <em>object</em> 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 <em>/ietf-interfaces:interfaces/interface[name = *]/oper-status</em>, and if interface <em>eth1</em> had a change in the <em>oper-status</em> leaf state, then rather than just publishing the updated <em>oper-status</em> leaf, the publisher may instead publish all the data associated with that interface entry object, i.e., everything under <em>/ietf-interfaces:interface/interface[name = eth1]</em>.  <strong>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?</strong></t>
          </li>
        </ol>
        <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>
        <t><strong>TODO We should consider adding a <em>update-complete</em> message (potentially including an incrementing collection counter) to indicate when a periodic update has completed for a subscription.</strong></t>
      </section>
    </section>
    <section anchor="events">
      <name>Datastore Event Streams</name>
      <t>In YANG Push Lite, 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(s) 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>
      <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-netana-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> leaves in all messages.</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>
        <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-yp-lite:update": {
        "id": 1011,
        "snapshot-type": "periodic",
        "observation-time": "2024-10-10T08:00:05.11Z",
        "updates": [
          {
            "target-path": "ietf-interfaces:interfaces/interface",
            "data": {
              "ietf-interfaces:interfaces": {
                "ietf-interfaces: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"
                  }
                ]
              }
            }
          }
        ]
      }
    }
  }
}
]]></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?          <anydata>
       +--ro incomplete?         empty
]]></sourcecode>
        </figure>
        <t>The normative definitions for the notifications fields are given in the YANG module in <xref target="ietf-yp-lite-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, either providing the replacement data for, or that data node that is being deleted.</t>
          </li>
          <li>
            <t><em>data</em> - the full replacement data subtree for the content at the target-path, encoded from the path-prefix.</t>
          </li>
          <li>
            <t><em>incomplete</em> - indicates that the message is incomplete for any reason.  For example, perhaps a periodic subscription expects to retrieve data from multiple data sources, but one of those data sources is unavailable.  Normally, a receiver can use the absence of a field in an update message to implicitly indicate that the field has been deleted, but that should not be inferred if the incomplete-update leaf is present because not all changes that have occurred since the last update are actually included with this update.</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="types-of-subscription-event-monitoring">
        <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-yp-lite
  +--rw datastore-telemetry!
     +--rw subscriptions
        +--rw subscription* [name]
           +--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
]]></sourcecode>
        </figure>
        <t><strong>TODO Minor - is providing the structure from root helpful, or should this just report the update-trigger container.</strong></t>
        <t>The normative definitions for the update-trigger fields are given in the <em>ietf-yp-lite</em> YANG module in <xref target="ietf-yp-lite-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>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. <em>update</em> records <bcp14>SHOULD</bcp14> be generated at the same subtree as equivalent periodic subscription rather than only the specific data node that is on-change notifiable.  The goal is to ensure that the <em>update</em> message contains a consistent set of data on the subscription path.</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 an a delete flag?</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.</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 are 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 Lite?</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> suspend the subscription.</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><strong>TODO, Generate new JSON based example of a periodic, and delete messages.  Current placeholders are the existing YANG Push Notifications.</strong></t>
        <t>Figure XXX provides an example of a notification message for a subscription tracking the operational status of a single Ethernet interface (per <xref target="RFC8343"/>).  This notification message is encoded XML <em>W3C.REC-xml-20081126</em> over the Network Configuration Protocol
(NETCONF) as per <xref target="RFC8640"/>.</t>
        <figure>
          <name>Example 'update' periodic notification</name>
          <artwork align="left"><![CDATA[
<notification
  xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
<eventTime>2017-10-25T08:00:11.22Z</eventTime>
<push-update xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-push">
  <id>1011</id>
  <datastore-contents>
    <interfaces
     xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
      <interface>
        <name>eth0</name>
        <oper-status>up</oper-status>
      </interface>
    </interfaces>
  </datastore-contents>
</push-update>
</notification>
]]></artwork>
        </figure>
        <t>Figure XXX provides an example of an on-change notification message for
the same subscription.</t>
        <figure>
          <name>Example 'update' on-change notification</name>
          <artwork align="left"><![CDATA[
<notification
  xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
<eventTime>2017-10-25T08:22:33.44Z</eventTime>
<push-change-update
    xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-push">
  <id>89</id>
  <datastore-changes>
    <yang-patch>
      <patch-id>0</patch-id>
      <edit>
        <edit-id>edit1</edit-id>
        <operation>replace</operation>
        <target>/ietf-interfaces:interfaces</target>
        <value>
          <interfaces
              xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
            <interface>
              <name>eth0</name>
              <oper-status>down</oper-status>
            </interface>
          </interfaces>
        </value>
      </edit>
    </yang-patch>
  </datastore-changes>
</push-change-update>
</notification>
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="ReceiversEtAl">
      <name>Receivers, Transports, and Encodings</name>
      <section anchor="receivers">
        <name>Receivers</name>
        <t>Every subscription is associated with one or more receivers, which each identify 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>
          <t>Configured subscriptions <bcp14>MAY</bcp14> have multiple receivers.  Multiple receivers facilitate redundancy at the receivers.  Each receiver <bcp14>MAY</bcp14> be configured with different transports and associated transport settings, but they <bcp14>MUST</bcp14> all share the same encoding.  All subscription notifications, including lifecycle notifications, are sent to all receivers except for the receiver-disconnected notification, which is only sent to the affected receiver, and only if the subscription remains active because of other active receivers.</t>
          <t>are sent to all receivers except for the notification that a receiver is been disconnected, but other receivers and active and hence the subscription is still active.</t>
          <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="yp-lite-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-yp-lite
  +--rw datastore-telemetry!
     +--rw receivers {configured}?
        +--rw receiver* [name]
           +--rw name                      string
           +--rw encoding?                 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)
]]></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>optional transport-specific related parameters, 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="yp-lite-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 must obviously 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 such an augmentation, see <xref target="I-D.draft-ietf-netconf-udp-notif"/>. <strong>TODO, update this reference to a UDP bis document</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>
          <t><strong>Potential Future - we could allow a dynamic subscription to choose a configured receiver as the receiver for notifications.  E.g., this could be helpful to allow a client to temporarily debug an issue by allowing additional information to be sent to an existing telemetry collector.</strong></t>
        </section>
        <section anchor="receiver-session-states-and-state-machine">
          <name>Receiver Session States and State Machine</name>
          <t>Each subscription will need to establish a subcription to the specified receiver.  Multiple subscriptions may share one or more transport sessions to the same receiver,</t>
          <t>A receiver in YANG Push Lite 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>
          <artwork><![CDATA[
                    .-------------------.
                    |                   |
                    |    Disconnected   |
                    |                   |
                    '-------------------'
                            |  ^
  Receiver is referenced by |  |  No configured subscriptions
  1 or more subscriptions   |  |  reference the receiver
                            v  |
                    .-------------------.
                    |                   |
                    |    Connecting     |
                    |                   |
                    '-------------------'
                            |  ^
  Transport and/or security |  | Transport or securty session
  has been established.     |  |  hast beee lost or failed.
                            v  |
                    .-------------------.
                    |                   |
                    |      Active       |
                    |                   |
                    '-------------------'

State Descriptions:
  Configured - receiver configuration is present.
  Connecting - the publisher is trying to establish a connection.
  Active     - connection established, publisher can send messages.
]]></artwork>
          <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>
        </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 Lite.  The requirements for these transport specifications are documented in the following section:</t>
        <section anchor="requirements-for-yang-push-lite-transport-specifications">
          <name>Requirements for Yang Push Lite Transport Specifications</name>
          <t>This section provides requirements for any transport specifications supporting the YANG Push Lite solution presented in this document.</t>
          <t>The transport specification <bcp14>MUST</bcp14> provide a YANG module (to be implemented by publishers) that 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>
          <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 specification <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>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>Any transport specification <bcp14>SHOULD</bcp14> ensure that the receiver application can be notified of the <em>subscription-started</em> lifecycle notification before any associated <em>update</em> messages.</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>Any transport specification <bcp14>SHOULD</bcp14> provide an extensible mechanism to indicate which encodings are supported, e.g., via an IANA registry or protocol negotiation.  Supported encodings for a given transport are advertised via the ietf-yp-lite-capabilities YANG Model <xref target="yp-lite-yang-capabilities-module"/>.</t>
          <t>Additional transport requirements may be dictated by the choice of transport used with a subscription.</t>
        </section>
        <section anchor="DSCP">
          <name>DSCP Marking</name>
          <t>YANG Push Lite 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>Different DSCP code points require different transport connections.  As a result, where TCP is used, a publisher that supports the "dscp" feature must ensure that a subscription's notification messages are returned in a single TCP transport session where all traffic shares the subscription's "dscp" leaf value.  If this cannot be guaranteed, any "establish-subscription" RPC request <bcp14>SHOULD</bcp14> be rejected with a "dscp-unavailable" error.  <strong>TODO - Is this text still relevant?</strong></t>
        </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.  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-yp-lite.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-yp-lite-capabilities YANG module's transport capabilities <xref target="yp-lite-yang-capabilities-module"/>.</t>
        <t>For configured subscriptions, the encoding is configured as part of the receiver configuration (<xref target="ReceiversYangTree"/>).</t>
        <t>For dynamic subscriptions, the encoding is selected as part of the establish-subscription RPC (<xref target="EstablishSubscriptionYangTree"/>).</t>
        <t><strong>TODO For dynamic subscriptions, Yang Push will infer the encoding from incoming RPC if not provided.  Do we want to preserve the existing behavior or just be explicit and enforce that an encoding must always be specified?</strong></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 controlled solely by configuration.</t>
        </li>
        <li>
          <t>Dynamic Subscriptions - a subscription created and controlled via a YANG RPC 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.</t>
      <t>Both configured and dynamic subscriptions are represented in the list <em>datastore-telemetry/subscriptions/subscription</em>, and most of the functionality and behavior of configured and dynamic subscriptions described in this document is specified to be the same or very similar.  However, they differ in how they are created and in the associated lifecycle management, described in the following sections:</t>
      <t>Additional characteristics differentiating configured from dynamic subscriptions include the following:</t>
      <ul spacing="normal">
        <li>
          <t>The lifetime of a dynamic subscription is bound by the transport session used to establish it.  For connection-oriented stateful transports like NETCONF, the loss of the transport session will result in the immediate termination of any associated dynamic subscriptions.  For connectionless or stateless transports like HTTP, a lack of receipt acknowledgment of a sequential set of notification messages and/or keep-alives can be used to trigger a termination of a dynamic subscription.  Contrast this to the lifetime of a configured subscription.  This lifetime is driven by relevant configuration being present in the publisher's applied configuration.  Being tied to configuration operations implies that (1) configured subscriptions can be configured to persist across reboots and (2) a configured subscription can persist even when its publisher is fully disconnected from any network. <strong>TODO, the configured subscription doesn't really persist, since it is torn down and re-created.  This explanation needs to be improved.</strong></t>
        </li>
        <li>
          <t>Configured subscriptions can be modified by any configuration client with write permission on the configuration of the subscription.  Dynamic subscriptions can only be modified via an RPC request made by the original subscriber or by a change to configuration data referenced by the subscription.</t>
        </li>
      </ul>
      <t>Note that there is no mixing and matching of dynamic and configured operations on a single subscription.  Specifically, a configured subscription cannot be modified or deleted using RPCs defined in this document.  Similarly, a dynamic subscription cannot be directly modified or deleted by configuration operations.  It is, however, possible to perform a configuration operation that indirectly impacts a dynamic subscription.  By changing the value of a preconfigured filter referenced by an existing dynamic subscription, the selected event records passed to a receiver might change.</t>
      <t>A publisher <bcp14>MAY</bcp14> terminate a dynamic subscription at any time. Similarly, it <bcp14>MAY</bcp14> decide to temporarily suspend the sending of notification messages for any dynamic subscription, or for one or more receivers of a configured subscription.  Such termination or suspension is driven by internal considerations of the publisher.</t>
      <t>**TODO, do we want to add text that if a subscription is ever changes (config or dynamic (e.g., referenced filter)) then the subscription <bcp14>MUST</bcp14> be terminated and restarted.</t>
      <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.  Support for configured subscriptions is <bcp14>OPTIONAL</bcp14>, with its availability advertised via the <em>configured</em> YANG feature in the ietf-yp-lite YANG module <xref target="yp-lite-yang-module"/>.</t>
        <t>A configured subscription comprises:</t>
        <ul spacing="normal">
          <li>
            <t>the target datastore for the subscription, 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>
          <li>
            <t>configuration for how update notifications for the data nodes are triggered.  I.e., either periodic sampling, on-change event-driven, or both. (<strong>TODO add section reference</strong>)</t>
          </li>
          <li>
            <t>a set of associated receivers (as described in <xref target="receivers"/>) that specify transport, receiver, and encoding parameters.</t>
          </li>
        </ul>
        <t>Configured subscriptions have several characteristics distinguishing them from dynamic subscriptions:</t>
        <ul spacing="normal">
          <li>
            <t>persistence across publisher reboots,</t>
          </li>
          <li>
            <t>a reference to receiver, is explicitly configured rather than being implicitly associated with the transport session, as would be the case for a dynamic subscription.</t>
          </li>
          <li>
            <t>an ability to send notification messages to more than one receiver.  All receivers for a given subscription must use the same encoding and type of transport (<strong>TODO What about DSCP settings?</strong>).  <em>Note that receivers are unaware of the existence of any other receivers.</em></t>
          </li>
          <li>
            <t>persistence even when transport or receiver is unavailable.  In this scenario, the publishers will terminate a subscription that it cannot keep active, but it will periodically attempt to restablish connection to the receiver and re-activate the configured subscription.</t>
          </li>
        </ul>
        <t>Multiple configured subscriptions <bcp14>MUST</bcp14> be supportable over a single transport session. <strong>TODO, James is suggesting that this should be <bcp14>MAY</bcp14>, either way, I think that this should move to be under the transport considerations section of the document.</strong></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="yp-lite-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-yp-lite
  +--rw datastore-telemetry!
     +--rw subscriptions
        +--rw subscription* [name]
           +--rw name              subscription-name
           +--rw purpose?          string
           +--rw target
           |  +--rw datastore?             identityref
           |  +--rw (filter)?
           |     +--:(by-reference)
           |     |  +--rw filter-ref       filter-ref
           |     +--:(within-subscription)
           |        +--rw (filter-spec)?
           |           +--:(path)
           |           |  +--rw path?      ypath
           |           +--:(subtree)
           |           |  +--rw subtree?   <anydata> {ypl:subtree}?
           |           +--:(xpath)
           |              +--rw xpath?     yang:xpath1.0 {ypl:xpath}?
           +--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 receivers* [name]
           |  +--rw name
           |  |       -> /datastore-telemetry/receivers/receiver/name
           |  +--ro status?   enumeration
           +--ro id                subscription-id
           +--ro status?           subscription-status
           +--ro statistics
           |  +--ro update-record-count?
           |  |       yang:zero-based-counter64
           |  +--ro excluded-event-records?
           |          yang:zero-based-counter64
           +---x reset {configured}?
]]></sourcecode>
        </figure>
        <section anchor="configured-subscription-state-machine">
          <name>Configured Subscription State Machine</name>
          <t>Below is the state machine for a configured subscription on the publisher.  This state machine describes the three states (<em>valid</em>, <em>invalid</em>, and <em>concluded</em>) as well as the transitions between these states.  Start and end states are depicted to reflect configured subscription creation and deletion events.  The creation or modification of a configured subscription, referenced filter or receiver initiates an evaluation by the publisher to determine if the subscription is in the <em>valid</em> state or the <em>invalid</em> state.  The publisher uses its own criteria in making this determination.  If in the <em>valid</em> state, the subscription becomes operational.  See (1) in the diagram below.</t>
          <t>**TODO - Add a new 'Active state' to the subscription state machine.  I.e., a subscription is active as long as it has at least one valid receiver (in some cases this would mean that negotiation with the receiver is complete, for others, such as simple UDP, is just requires configuration to be valid.)</t>
          <t>Publishers <bcp14>SHOULD NOT</bcp14> send <em>update</em> messages for a subscription that is not active.  I.e., a publisher <bcp14>SHOULD NOT</bcp14> send <em>update</em> messages before a <em>subscription-started</em> notification or after a <em>subscription-terminated</em> notification.</t>
          <t>Similarly, receivers <bcp14>SHOULD</bcp14> ignore any <em>update</em> messages received for a subscription that is not active.</t>
          <figure>
            <name>Publisher's State Machine for a Configured Subscription</name>
            <artwork><![CDATA[
.........
: start :-.
:.......: |
     create  .---modify----<-----.
          |  |                   |
          V  V               .-------.         .......
 .----[evaluate]--no-------->|invalid|-delete->: end :
 |                           '-------'         :.....:
 |-[re-evaluate]--no--(2)-.      ^                ^
 |        ^               |      |                |
yes       |               '->unsupportable      delete
 |      modify             (subscription-   (subscription-
 |        |                 terminated*)     terminated*)
 |        |                      |                |
(1)       |                     (3)              (4)
 |   .---------------------------------------------------.
 '-->|                     valid                         |
     '---------------------------------------------------'

Legend:
  Dotted boxes: subscription added or removed via configuration
  Dashed boxes: states for a subscription
  [evaluate]: decision point on whether the subscription
              is supportable
  (*): resulting subscription state change notification
]]></artwork>
          </figure>
          <t>A subscription in the <em>valid</em> state may move to the <em>invalid</em> state in one of two ways.  First, it may be modified in a way that fails a re-evaluation.  See (2) in the diagram.  Second, the publisher might determine that the subscription is no longer supportable.  This could be because of an unexpected but sustained increase in an event stream's event records, degraded CPU capacity, a more complex referenced filter, or other subscriptions that have usurped resources.  See (3) in the diagram.  No matter the case, a <em>subscription-terminated</em> notification is sent to any receivers in the <em>active</em> or state.  Finally, a subscription may be deleted by configuration (4).</t>
          <t>When a subscription is in the <em>valid</em> state, a publisher will attempt to connect with all receivers of a configured subscription and deliver notification messages.  Below is the state machine for each receiver of a configured subscription.  This receiver state machine is fully contained in the state machine of the configured subscription and is only relevant when the configured subscription is in the <em>valid</em> state.</t>
          <figure>
            <name>Receiver State Machine for a Configured Subscription on a Publisher</name>
            <artwork><![CDATA[
.-----------------------------------------------------------.
|                         valid                             |
|   .----------.                           .------------.   |
|   | receiver |---timeout---------------->|  receiver  |   |
|   |connecting|<----------------reset--(c)|disconnected|   |
|   |          |<-transport                '------------'   |
|   '----------'  loss,reset                                |
|      (a)          |                                       |
|  subscription-   (b)                                      |
|  started*    .--------.                                   |
|       '----->|        |                                   |
|              |receiver|                                   |
|              | active |                                   |
|              |        |                                   |
|              '--------'                                   |
'-----------------------------------------------------------'

Legend:
  Dashed boxes that include the word *receiver* show the possible
  states for an individual receiver of a valid configured
  subscription.

* indicates a subscription state change notification
]]></artwork>
          </figure>
          <t>When a configured subscription first moves to the <em>valid</em> state, the <em>state</em> leaf of each receiver is initialized to the <em>connecting</em> state.  If transport connectivity is not available to any receivers and there are any notification messages to deliver, a transport session is established (e.g., per <xref target="RFC8071"/>).  Individual receivers are moved to the <em>active</em> state when a <em>subscription-started</em> subscription state change notification is successfully passed to that receiver (a).  Event records are only sent to active receivers. Receivers of a configured subscription remain active on the publisher if both (1) transport connectivity to the receiver is active and (2) event records are not being dropped due to a publisher's sending capacity being reached.  In addition, a configured subscription's receiver <bcp14>MUST</bcp14> be moved to the "connecting" state if the receiver is reset via the "reset" action (b), (c).  For more on the "reset" action, see Section 2.5.5.  If transport connectivity cannot be achieved while in the "connecting" state, the receiver <bcp14>MAY</bcp14> be moved to the "disconnected" state.</t>
          <t>A configured subscription's receiver <bcp14>MUST</bcp14> be moved to the "suspended" state if there is transport connectivity between the publisher and receiver but (1) delivery of notification messages is failing due to a publisher's buffer capacity being reached or (2) notification messages cannot be generated for that receiver due to insufficient CPU (d).  This is indicated to the receiver by the "subscription-suspended" subscription state change notification.</t>
          <t>A configured subscription's receiver <bcp14>MUST</bcp14> be returned to the "active" state from the "suspended" state when notification messages can be generated, bandwidth is sufficient to handle the notification messages, and a receiver has successfully been sent a "subscription-resumed" or "subscription-modified" subscription state change notification (e).  The choice as to which of these two subscription state change notifications is sent is determined by whether the subscription was modified during the period of suspension.</t>
          <t>Modification of a configured subscription is possible at any time.  A "subscription-modified" subscription state change notification will be sent to all active receivers, immediately followed by notification messages conforming to the new parameters.  Suspended receivers will
also be informed of the modification.  However, this notification will await the end of the suspension for that receiver (e).</t>
        </section>
        <section anchor="creating-a-configured-subscription">
          <name>Creating a Configured Subscription</name>
          <t>Configured subscriptions are created using configuration operations against the top-level <em>subscriptions</em> subtree.</t>
          <t>After a subscription is successfully established, the publisher immediately sends a "subscription-started" subscription state change notification to each 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.  In this case, when there is something to transport for an active subscription, transport-specific "call home" operations <xref target="RFC8071"/> will be used to establish the connection.  When transport connectivity is available, notification messages may then be pushed.</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 must be sent, followed by a new subscription-started" notification. These notifications indicate an event record discontinuity has occurred.</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 may end up being modified due to configuration changes in the <em>datastore-telemetry</em> container.</t>
          <t>If the modification involves adding receivers, then those receivers are placed in the <em>connecting</em> state.  If a receiver is removed, the subscription state change notification <em>subscription-terminated</em> is sent to that receiver if that receiver is active or suspended.</t>
          <t><strong>TODO Do we want a common here about tearing down a subscription, or is having it in the common section sufficient?</strong></t>
        </section>
        <section anchor="deleting-a-configured-subscription">
          <name>Deleting a Configured Subscription</name>
          <t>Configured subscriptions can be deleted via configuration.  After a subscription has been removed from configuration, the publisher <bcp14>MAY</bcp14> complete their current collection if one is in progress, then the publisher sends <em>subscription-terminated</em> notification to all of the subscription's receivers to indicate that the subscription is no longer active.</t>
          <t><strong>TODO, do we need a comment about closing the transport session if there are no more subscription to that receiver?  Possibly the Transports section of the document should have a section that describes the lifecycle of a transport session (or will that end up differing between configured and dyanmic subscriptions?)</strong></t>
        </section>
        <section anchor="reset">
          <name>Resetting a Configured Subscription</name>
          <t>It is possible that a configured subscription needs to be reset, e.g., if the receiver wasn't ready to start processing the subscription notifications.  This can be accomplished via invoking one of the two YANG <em>reset</em> actions in the ietf-yp-lite YANG module:</t>
          <ol spacing="normal" type="1"><li>
              <t>the <em>reset</em> action at <em>/datastore-telemetry/subscriptions/subscription/reset</em> resets a single subscription, or</t>
            </li>
            <li>
              <t>the <em>reset</em> action at <em>/datastore-telemetry/receivers/receiver/reset</em> resets all subscriptions that reference that receiver.</t>
            </li>
          </ol>
          <t>These actions may be useful in cases 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 subscription configuration.</t>
          <t>Although the reset action acts at the subscription application level, the publisher <bcp14>MAY</bcp14> reset any transport session(s) associated with the subscription or attempt to reconnect to the receiver if a transport session could not connect.  Publishers <bcp14>SHOULD NOT</bcp14> reset the transport session if the transport session is shared with other subscriptions.</t>
        </section>
      </section>
      <section anchor="dynamic-subscriptions">
        <name>Dynamic Subscriptions</name>
        <t>Dynamic subscriptions, where a subscriber initiates a subscription negotiation with a publisher via an RPC.  If the publisher is able to serve this request, it accepts it and then starts pushing notification messages back to the subscriber.  If the publisher is not able to serve it as requested, then an error response is returned.</t>
        <t>Support for dynamic subscriptions is <bcp14>OPTIONAL</bcp14>, with its availability advertised via the <em>dynamic</em> YANG feature in the ietf-yp-lite YANG module <xref target="yp-lite-yang-module"/>.</t>
        <t>Dynamic subscriptions are managed via protocol operations (in the form of RPCs, per <xref target="RFC7950"/>, Section 7.14) made against targets located in the publisher.</t>
        <section anchor="dynamic-subscription-state-machine">
          <name>Dynamic Subscription State Machine</name>
          <t>Below is the publisher's state machine for a dynamic subscription. Each state is shown in its own box.  It is important to note that such a subscription doesn't exist at the publisher until an <em>establish-subscription</em> RPC is accepted.  The mere request by a subscriber to establish a subscription is not sufficient for that subscription to be externally visible.  Start and end states are depicted to reflect subscription creation and deletion events.</t>
          <figure>
            <name>Publisher's State Machine for a Dynamic Subscription</name>
            <artwork><![CDATA[
                  .........
                  : start :
                  :.......:
                      |
              establish-subscription
                      |
                      |
                      v
                 .-----------.
                 | receiver  |
                 |  active   |
                 |           |
                 '-----------'
                      |
            delete/kill-subscription
                      |
                      v
                  .........
                  :  end  :
                  :.......:
]]></artwork>
          </figure>
          <t>Of interest in this state machine are the following:</t>
          <ul spacing="normal">
            <li>
              <t>Successful "establish-subscription" RPCs move the subscription to the "active" state.</t>
            </li>
            <li>
              <t>A "delete-subscription" or "kill-subscription" RPC will end the subscription.</t>
            </li>
            <li>
              <t>A publisher may choose to end a subscription when there is not sufficient CPU or bandwidth available to service the subscription.  This is announced to the subscriber via the <em>subscription-terminated</em> subscription state change notification.  The receiver will need to establish a new subscription.</t>
            </li>
          </ul>
        </section>
        <section anchor="EstablishDynamic">
          <name>Establishing a Dynamic Subscription</name>
          <t>The "establish-subscription" RPC allows a subscriber to request the creation of a subscription.</t>
          <t>The input parameters of the operation are:</t>
          <t>o  An event stream filter, which may reduce the set of event records pushed.</t>
          <t>If the publisher can satisfy the "establish-subscription" request, it replies with an identifier for the subscription and then immediately starts streaming notification messages.</t>
          <t>Below is a tree diagram for "establish-subscription".  All objects contained in this tree are described in the YANG module in <xref target="yp-lite-yang-module"/>.</t>
          <figure anchor="EstablishSubscriptionYangTree">
            <name>establish-subscription YANG RPC</name>
            <sourcecode type="yangtree"><![CDATA[
    +---x establish-subscription {dynamic}?
    |  +---w input
    |  |  +---w name              subscription-name
    |  |  +---w purpose?          string
    |  |  +---w target
    |  |  |  +---w datastore?             identityref
    |  |  |  +---w (filter)?
    |  |  |     +--:(by-reference)
    |  |  |     |  +---w filter-ref       filter-ref
    |  |  |     +--:(within-subscription)
    |  |  |        +---w (filter-spec)?
    |  |  |           +--:(path)
    |  |  |           |  +---w path?      ypath
    |  |  |           +--:(subtree)
    |  |  |           |  +---w subtree?   <anydata> {ypl:subtree}?
    |  |  |           +--:(xpath)
    |  |  |              +---w xpath?     yang:xpath1.0 {ypl: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 Section 2.4.6.</t>
          <t>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 Section 4.</t>
          <figure>
            <name>"establish-subscription-stream-error-info" Tree Diagram</name>
            <artwork align="left"><![CDATA[
    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
]]></artwork>
          </figure>
          <section anchor="negotiation-of-subscription-policies">
            <name>Negotiation of Subscription Policies</name>
            <t>A dynamic subscription request <bcp14>SHOULD</bcp14> be declined if a publisher determines that it may be unable to provide update records meeting the terms of an "establish-subscription" RPC request.</t>
          </section>
        </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>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>
          <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 request.  The publisher <bcp14>SHOULD NOT</bcp14> send any further events related to the subscription after the <em>subscription-terminated</em> notification and</t>
          <t><strong>TODO, I think that we should relax this to a <bcp14>SHOULD</bcp14>, but also this should be common with configured subscriptions, so perhaps not in this section.</strong>  If the publisher accepts the request and the publisher has indicated success, the publisher <bcp14>SHOULD NOT</bcp14> send any more notification messages for this subscription.</t>
        </section>
        <section anchor="killing-a-dynamic-subscription">
          <name>Killing a Dynamic Subscription</name>
          <t>The "kill-subscription" RPC operation permits a client to forcibly end any arbitrary dynamic subscription, identified by subscription-id, including those not associated with the transport session used for the RPC.  Note, configured subscriptions cannot be killed using this RPC, and requests to do <bcp14>MUST</bcp14> be rejected.</t>
        </section>
        <section anchor="rpc-failures">
          <name>RPC Failures</name>
          <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 anchor="implementation-considerations-from-rfc-8639">
        <name>Implementation Considerations (from RFC 8639)</name>
        <t><strong>TODO, we should rework this to strings for subscription names instead</strong></t>
        <t>To support deployments that include both configured and dynamic
subscriptions, it is recommended that the subscription "id" domain be
split into static and dynamic halves.  This will eliminate the
possibility of collisions if the configured subscriptions attempt to
set a "subscription-id" that might have already been dynamically
allocated.  A best practice is to use the lower half of the "id"
object's integer space when that "id" is assigned by an external
entity (such as with a configured subscription).  This leaves the
upper half of the subscription integer space available to be
dynamically assigned by the publisher.</t>
        <t>If a subscription is unable to marshal a series of filtered event
records into transmittable notification messages, the receiver should
be terminated with the reason "XXX TBD (Was unsupportable volume)".</t>
        <t>For configured subscriptions, operations are performed against the
set of receivers using the subscription "id" as a handle for that
set.  But for streaming updates, subscription state change
notifications are local to a receiver.  In the case of this
specification, receivers do not get any information from the
publisher about the existence of other receivers.  But if a network
operator wants to let the receivers correlate results, it is useful
to use the subscription "id" across the receivers to allow that
correlation.  Note that due to the possibility of different access
control permissions per receiver, each receiver may actually get a
different set of event records.</t>
      </section>
      <section anchor="event-record-delivery">
        <name>Event Record Delivery</name>
        <t>Whether dynamic or configured, once a subscription has been set up,
the publisher streams event records via notification messages per the
terms of the subscription.  For dynamic subscriptions, notification
messages are sent over the session used to establish the
subscription.  For configured subscriptions, notification messages
are sent over the connections specified by the transport and each
receiver of a configured subscription.</t>
        <t>A notification message is sent to a receiver when an event record is
not blocked by either the specified filter criteria or receiver
permissions.  This notification message <bcp14>MUST</bcp14> include an &lt;eventTime&gt;
object, as shown in <xref target="RFC5277"/>, Section 4.  This &lt;eventTime&gt; <bcp14>MUST</bcp14> be
at the top level of a YANG structured event record.</t>
        <t>The following example of XML <em>W3C.REC-xml-20081126</em>, adapted from
Section 4.2.10 of <xref target="RFC7950"/>, illustrates a compliant message:</t>
        <artwork><![CDATA[
  <notification
          xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
      <eventTime>2007-09-01T10:00:00Z</eventTime>
      <link-failure xmlns="https://acme.example.com/system">
          <if-name>so-1/2/3.0</if-name>
          <if-admin-status>up</if-admin-status>
          <if-oper-status>down</if-oper-status>
      </link-failure>
  </notification>

            Figure 10: Subscribed Notification Message
]]></artwork>
        <t><xref target="RFC5277"/>, Section 2.2.1 states that a notification message is to be
sent to a subscriber that initiated a &lt;create-subscription&gt;.  With
this document, this statement from <xref target="RFC5277"/> should be more broadly
interpreted to mean that notification messages can also be sent to a
subscriber that initiated an "establish-subscription" or to a
configured receiver that has been sent a "subscription-started".</t>
        <t>When a dynamic subscription has been started with
"establish-subscription", respectively, event records matching the newly applied filter criteria <bcp14>MUST NOT</bcp14> be
sent until after the RPC reply has been sent. <strong>TODO, do we want to keep this?</strong></t>
        <t>When a configured subscription has been started or modified, event
records matching the newly applied filter criteria <bcp14>MUST NOT</bcp14> be sent
until after the "subscription-started" notification has been sent.</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="subscription-started">
        <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 subscription started notification may be sent for any of these reasons:</t>
        <ol spacing="normal" type="1"><li>
            <t>A new subscription has been configured.</t>
          </li>
          <li>
            <t>A receiver has been added to a configured subscription.</t>
          </li>
          <li>
            <t>The configuration for a configured subscription has been changed, in which case a <em>subscription-terminated</em> notification should be sent, followed by a <em>subscription-started</em> notification if the new configuration is 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 starting to send datastore event records again.</t>
          </li>
          <li>
            <t>A dynamic subscription has been established.</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="yp-lite-yang-module"/>.</t>
        <figure>
          <name>subscription-started Notification Tree Diagram</name>
          <sourcecode type="yangtree"><![CDATA[
    +---n subscription-started
    |  +--ro id                subscription-id
    |  +--ro name              subscription-name
    |  +--ro purpose?          string
    |  +--ro target
    |  |  +--ro datastore?             identityref
    |  |  +--ro (filter)?
    |  |     +--:(by-reference)
    |  |     |  +--ro filter-ref       filter-ref
    |  |     +--:(within-subscription)
    |  |        +--ro (filter-spec)?
    |  |           +--:(path)
    |  |           |  +--ro path?      ypath
    |  |           +--:(subtree)
    |  |           |  +--ro subtree?   <anydata> {ypl:subtree}?
    |  |           +--:(xpath)
    |  |              +--ro xpath?     yang:xpath1.0 {ypl:xpath}?
    |  +--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
]]></sourcecode>
        </figure>
        <t><strong>TODO, Should the subscription-started notification report decomposed subscription paths?</strong></t>
      </section>
      <section anchor="subscription-terminated">
        <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 receiver has been removed from a configured subscription.</t>
          </li>
          <li>
            <t>A configured subscription has been removed.</t>
          </li>
          <li>
            <t>The configuration for a configured subscription has been changed, in which case a <em>subscription-terminated</em> notification should be sent, followed by a <em>subscription-started</em> notification if the new configuration is valid.</t>
          </li>
          <li>
            <t>A dynamic subscription was deleted via a "delete-subscription* or <em>kill-subscription</em> RPC.</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="yp-lite-yang-module"/>.</t>
        <figure>
          <name>subscription-terminated Notification Tree Diagram</name>
          <sourcecode type="yangtree"><![CDATA[
    +---n subscription-terminated
    |  +--ro name      subscription-name
    |  +--ro id        subscription-id
    |  +--ro reason    identityref
]]></sourcecode>
        </figure>
        <t><strong>TODO Augmenting extra fields is better for clients?</strong>  The <em>reason</em> datanode identifyref indicates why a subcription has been terminated, and could be extended with further reasons in future.</t>
      </section>
      <section anchor="replay-completed">
        <name>"replay-completed"</name>
        <t><strong>TODO: Need to consider how this works when notifications are split up.  Possibly need to replace this with an opt-in message for a per collection complete message.  I.e., a notification that would be sent whenever every periodic collection is complete.</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 "replay-completed" 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 "replay-completed".  All objects contained in this tree are described in the YANG module in Section 4.</t>
        <figure>
          <name>replay-completed Notification Tree Diagram</name>
          <sourcecode type="yangtree"><![CDATA[
    +---n replay-completed
    |  +--ro id    subscription-id
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="performance-reliability-and-subscription-monitoring">
      <name>Performance, Reliability, and Subscription Monitoring</name>
      <t><strong>TODO.  Needs updating.  Not sure if this text doesn't end up elsewhere?</strong></t>
      <t>A subscription to updates from a datastore is intended to obviate the need for polling.  However, in order to do so, it is critical that subscribers can rely on the subscription and have confidence that they will indeed receive the subscribed updates without having to worry about updates being silently dropped.  In other words, a subscription constitutes a promise on the side of the publisher to provide the receivers with updates per the terms of the subscription, or otherwise notify the receiver if t</t>
      <t>Now, there are many reasons why a publisher may at some point no longer be able to fulfill the terms of the subscription, even if the subscription had been initiated in good faith.  For example, the volume of datastore nodes may be larger than anticipated, the interval may prove too short to send full updates in rapid succession, or an internal problem may prevent objects from being collected.  For this reason, the solution defined in this document (1) mandates that a publisher notify receivers immediately and reliably whenever it encounters a situation in which it is unable to keep the terms of the subscription and (2) provides the publisher with the option to suspend the subscription in such a case.  This includes indicating the fact that an update is incomplete as part of a "push-update" or "push-change-update" notification, as well as emitting a "subscription-suspended" notification as applicable.  This is described further in Section 3.11.1.</t>
      <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.  In such cases, it is preferable to have a subscriber request a less resource-intensive subscription than to deal with frequently degraded behavior.</t>
      <t>The solution builds on <xref target="RFC8639"/>.  As defined therein, any loss of an underlying transport connection will be detected and result in subscription termination (in the case of dynamic subscriptions) or suspension (in the case of configured subscriptions), ensuring that situations where the loss of update notifications would go unnoticed will not occur.</t>
      <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>Dynamic subscriptions are only present in the <em>datastore-telemetry/subscriptions/subscription</em> list when they are active, and are removed as soon as they are terminated.  Whereas configured subscriptions are present if the list if they are configured, regardless of whether they are active.</t>
        <t><strong>TODO, should dynamic receivers be listed?  Do we need to report per-receiver stats for dynamic subscriptions?</strong></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 Lite 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="robustness-and-reliability">
        <name>Robustness and Reliability</name>
        <t>It is important that updates as discussed in this document, and
on-change updates in particular, do not get lost.  If the loss of an
update is unavoidable, it is critical that the receiver be notified
accordingly.</t>
        <t>Update records for a single subscription <bcp14>MUST NOT</bcp14> be resequenced
prior to transport.</t>
        <t>It is conceivable that, under certain circumstances, a publisher will
recognize that it is unable to include in an update record the full
set of objects desired per the terms of a subscription.  In this
case, the publisher <bcp14>MUST</bcp14> act as follows:</t>
        <ul spacing="normal">
          <li>
            <t>The publisher <bcp14>MUST</bcp14> set the "incomplete-update" flag on any update
    record that is known to be missing information.</t>
          </li>
          <li>
            <t>The publisher <bcp14>MAY</bcp14> choose to suspend the subscription as per
    <xref target="RFC8639"/>.  If the publisher does not create an update record at
    all, it <bcp14>MUST</bcp14> suspend the subscription.</t>
          </li>
          <li>
            <t>When resuming an on-change subscription, the publisher <bcp14>SHOULD</bcp14>
    generate a complete patch from the previous update record.  If
    this is not possible and the "sync-on-start" option is set to
    "true" for the subscription, then the full datastore contents <bcp14>MAY</bcp14>
    be sent via a "push-update" instead (effectively replacing the
    previous contents).  If neither scenario above is possible, then
    an "incomplete-update" flag <bcp14>MUST</bcp14> be included on the next
    "push-change-update".</t>
          </li>
        </ul>
        <t>Note: It is perfectly acceptable to have a series of "push-change-
update" notifications (and even "push-update" notifications) serially
queued at the transport layer awaiting transmission.  It is not
required for the publisher to merge pending update records sent at
the same time.</t>
        <t>On the receiver side, what action to take when a record with an
"incomplete-update" flag is received depends on the application.  It
could simply choose to wait and do nothing.  It could choose to
resync, actively retrieving all subscribed information.  It could
also choose to tear down the subscription and start a new one,
perhaps with a smaller scope that contains fewer objects.</t>
      </section>
      <section anchor="publisher-capacity">
        <name>Publisher Capacity</name>
        <t>It is far preferable to decline a subscription request than to accept
such a request when it cannot be met.</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, and the number and combination of other subscriptions
that are concurrently being serviced.</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 Lite 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-yp-lite-capabilities YANG module, defined in <xref target="yp-lite-yang-capabilities-module"/>) that augments ietf-system-capabilities.</t>
        <t>The ietf-yp-lite-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-yp-lite-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 yplc:datastore-telemetry
     |        +--ro yplc:periodic-notifications-supported?
     |        |       notification-support
     |        +--ro (yplc:update-period)?
     |        |  +--:(yplc:minimum-update-period)
     |        |  |  +--ro yplc:minimum-update-period?        uint32
     |        |  +--:(yplc:supported-update-period)
     |        |     +--ro yplc:supported-update-period*      uint32
     |        +--ro yplc:on-change-supported?
     |                notification-support
     +--ro yplc:datastore-telemetry
        +--ro yplc:periodic-notifications-supported?
        |       notification-support
        +--ro (yplc:update-period)?
        |  +--:(yplc:minimum-update-period)
        |  |  +--ro yplc:minimum-update-period?        uint32
        |  +--:(yplc:supported-update-period)
        |     +--ro yplc:supported-update-period*      uint32
        +--ro yplc:on-change-supported?
        |       notification-support
        +--ro yplc:transport
           +--ro yplc:transport-capability* [transport-protocol]
              +--ro yplc:transport-protocol    identityref
              +--ro yplc:security-protocol?    identityref
              +--ro yplc:encoding-format*      identityref
]]></sourcecode>
        </figure>
        <t>TODO  Do we need to add capabilities to indicate:</t>
        <ol spacing="normal" type="1"><li>
            <t>Which fields are on-change notifiable.</t>
          </li>
          <li>
            <t>At which level <em>bags</em> exist internally (for performance reasons).</t>
          </li>
          <li>
            <t>The points at which subscriptions are decomposed to.</t>
          </li>
        </ol>
      </section>
      <section anchor="subscription-content-schema-identification">
        <name>Subscription Content Schema Identification</name>
        <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="ietf-yp-lite-yang">
      <name>YANG</name>
      <section anchor="yp-lite-tree">
        <name>ietf-yp-lite YANG tree</name>
        <t>This section shows the full tree output for ietf-yp-lite 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 Lite Module Tree Output</name>
          <sourcecode type="yangtree"><![CDATA[
module: ietf-yp-lite
  +--rw datastore-telemetry!
     +--rw filters
     |  +--rw filter* [name]
     |     +--rw name             string
     |     +--rw (filter-spec)?
     |        +--:(path)
     |        |  +--rw path?      ypath
     |        +--:(subtree)
     |        |  +--rw subtree?   <anydata> {ypl:subtree}?
     |        +--:(xpath)
     |           +--rw xpath?     yang:xpath1.0 {ypl:xpath}?
     +--rw subscriptions
     |  +--rw subscription* [name]
     |     +--rw name              subscription-name
     |     +--rw purpose?          string
     |     +--rw target
     |     |  +--rw datastore?             identityref
     |     |  +--rw (filter)?
     |     |     +--:(by-reference)
     |     |     |  +--rw filter-ref       filter-ref
     |     |     +--:(within-subscription)
     |     |        +--rw (filter-spec)?
     |     |           +--:(path)
     |     |           |  +--rw path?      ypath
     |     |           +--:(subtree)
     |     |           |  +--rw subtree?   <anydata> {ypl:subtree}?
     |     |           +--:(xpath)
     |     |              +--rw xpath?     yang:xpath1.0 {ypl:xpath}?
     |     +--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 receivers* [name]
     |     |  +--rw name
     |     |  |       -> /datastore-telemetry/receivers/receiver/name
     |     |  +--ro status?   enumeration
     |     +--ro id                subscription-id
     |     +--ro status?           subscription-status
     |     +--ro statistics
     |     |  +--ro update-record-count?
     |     |  |       yang:zero-based-counter64
     |     |  +--ro excluded-event-records?
     |     |          yang:zero-based-counter64
     |     +---x reset {configured}?
     +--rw receivers {configured}?
        +--rw receiver* [name]
           +--rw name                      string
           +--rw encoding?                 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)

  rpcs:
    +---x establish-subscription {dynamic}?
    |  +---w input
    |  |  +---w name              subscription-name
    |  |  +---w purpose?          string
    |  |  +---w target
    |  |  |  +---w datastore?             identityref
    |  |  |  +---w (filter)?
    |  |  |     +--:(by-reference)
    |  |  |     |  +---w filter-ref       filter-ref
    |  |  |     +--:(within-subscription)
    |  |  |        +---w (filter-spec)?
    |  |  |           +--:(path)
    |  |  |           |  +---w path?      ypath
    |  |  |           +--:(subtree)
    |  |  |           |  +---w subtree?   <anydata> {ypl:subtree}?
    |  |  |           +--:(xpath)
    |  |  |              +---w xpath?     yang:xpath1.0 {ypl: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 delete-subscription {dynamic}?
    |  +---w input
    |     +---w name    subscription-name
    +---x kill-subscription {dynamic}?
       +---w input
          +---w name    subscription-name

  notifications:
    +---n replay-completed
    |  +--ro id    subscription-id
    +---n update-complete
    |  +--ro id    subscription-id
    +---n subscription-started
    |  +--ro id                subscription-id
    |  +--ro name              subscription-name
    |  +--ro purpose?          string
    |  +--ro target
    |  |  +--ro datastore?             identityref
    |  |  +--ro (filter)?
    |  |     +--:(by-reference)
    |  |     |  +--ro filter-ref       filter-ref
    |  |     +--:(within-subscription)
    |  |        +--ro (filter-spec)?
    |  |           +--:(path)
    |  |           |  +--ro path?      ypath
    |  |           +--:(subtree)
    |  |           |  +--ro subtree?   <anydata> {ypl:subtree}?
    |  |           +--:(xpath)
    |  |              +--ro xpath?     yang:xpath1.0 {ypl:xpath}?
    |  +--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
    +---n subscription-terminated
    |  +--ro name      subscription-name
    |  +--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?          <anydata>
       +--ro incomplete?         empty
]]></sourcecode>
        </figure>
      </section>
      <section anchor="yp-lite-yang-module">
        <name>ietf-yp-lite 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-yp-lite</name>
          <sourcecode type="yang" markers="true" name="ietf-yp-lite.yang#0.1.0"><![CDATA[
module ietf-yp-lite {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-yp-lite";
  prefix ypl;

  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-interfaces {
    prefix if;
    reference
      "RFC 8343: A YANG Data Model for Interface Management";
  }
  import ietf-netconf-acm {
    prefix nacm;
    reference
      "RFC 8341: Network Configuration Access Control Model";
  }
  import ietf-network-instance {
    prefix ni;
    reference
      "RFC 8529: YANG Data Model for Network Instances";
  }
  import ietf-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)";
  }

  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,
     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 2024-11-11 {
    description
      "Initial revision.";
    reference
      "XXX: YANG Push Lite";
  }

  /*
   * FEATURES
   */

  feature configured {
    description
      "This feature indicates that configuration of subscriptions is
       supported.";
  }

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

  feature interface-designation {
    description
      "This feature indicates that a publisher supports sourcing all
       receiver interactions for a configured subscription from a
       single designated egress interface.";
  }

  feature 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 supports-vrf {
    description
      "This feature indicates that a publisher supports VRF
       configuration for configured subscriptions.  VRF support for
       dynamic subscriptions does not require this feature.";
    reference
      "RFC 8529: YANG Data Model for Network Instances,
                 Section 6";
  }

  feature xpath {
    description
      "This feature indicates support for XPath filtering.";
    reference
      "XML Path Language (XPath) Version 1.0
       (https://www.w3.org/TR/1999/REC-xpath-19991116)";
  }

  /*
   * 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.";
  }

  /* 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-name {
    type string {
      length "1..255";
    } 
    description
      "A user friendly name for a subscription.";
  }

  typedef subscription-id {
    type uint32;
    description
      "A type for subscription identifiers.";
  }

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

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

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

  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 any
          connected receivers";
      }
      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";
  }

  /*
   * 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 filter-types {
    description
      "This grouping defines the types of selectors for objects
       from a datastore.";
    choice filter-spec {
      description
        "The content filter specification for this request.";

      leaf path {
        type ypath;
        description
          "A basic path filter that allows wildcard, regex, or
           fixed value for list keys.  Each format is TODO";
      }
      anydata subtree {
        if-feature "ypl:subtree";
        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 "ypl:xpath";
        type yang:xpath1.0;
        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-common {
    description
      "Common settings that are shared between dynamic and
       configured subscriptions.";

    leaf name {
      type subscription-name;
      mandatory true;
      description
        "The client provided name for the subscription.

         This MUST be unique across all subscriptions.  Configuring
         a subscription with a name already used by a dynamic
         subscription will replace the dynamic subscription, forcing
         it to be terminated.";
    }

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

    container target {
      description
        "Identifies the source of information against which a
         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";
      }

      choice filter {
        description
          "The source of the selection filter applied to the
           subscription.  This will either (1) come referenced from
           a global list or (2) be provided in the subscription
           itself.";
        case by-reference {
          description
            "Incorporates a filter that has been configured
            separately.";
          leaf filter-ref {
            type filter-ref;
            mandatory true;
            description
              "References an existing selection filter that is to be
              applied to the subscription.";
          }
        }
        case within-subscription {
          description
            "A local definition allows a filter to have the same
            lifecycle as the subscription.";
          uses filter-types;
        }
      }
    }

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

  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 name {
        type subscription-name;
        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 name {
        type subscription-name;
        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
   */

  // TODO - Need to signal when an initial replay has completed, or
  //        possibly when any period subscription has completed.
  // TODO - Need to think about list key entries that are no longer
  //        present.
  notification replay-completed {
    //ypl:subscription-state-notification;
    //if-feature "replay";
    description
      "This notification is sent to indicate that all of the replay
       notifications have been sent.";
    leaf id {
      type subscription-id;
      mandatory true;
      description
        "This references the affected subscription.";
    }
  }

  notification update-complete {
    //ypl:subscription-state-notification;
    //if-feature "replay";
    description
      "This notification indicates the end of a periodic collection,
       and can be used to purge old state";
    leaf id {
      type subscription-id;
      mandatory true;
      description
        "This references the affected subscription.";
    }
  }

  notification subscription-started {
    //ypl:subscription-state-notification;
    description
      "This notification indicates that a configured subscription
       has started and notifications will now be sent.";
    leaf id {
      type subscription-id;
      mandatory true;
      description
        "This references the affected subscription.";
    }
    uses subscription-common;
  }

  notification subscription-terminated {
    //ypl:subscription-state-notification;
    description
      "This notification indicates that a subscription has been
       terminated.";
    leaf name {
      type subscription-name;
      mandatory true;
      description
        "The name of the subscription that has been terminated.";
    }
    leaf id {
      type subscription-id;
      mandatory true;
      description
        "This references the affected subscription.";
    }
    leaf reason {
      type identityref {
        base subscription-terminated-reason;
      }
      mandatory true;
      description
        "Identifies the condition that resulted in the
         termination.";
    }
  }

  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.  It does
       not constitute a general-purpose notification that would be
       subscribable as part of the NETCONF event stream by any
       receiver.";
    leaf id {
      type subscription-id;
      description
        "This references the subscription that drove the
         notification to be sent.";
    }

    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.";
        }
      }
      description
        "This indicates the type of notification message that is
         being sent.";
    }

    // Could add observation time here.
    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.";
      }

      anydata data {
        description
          "This 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.

          For an on-change delete notification, the
          datastore-snapshot will be absent for the given target
          path.

          The snapshot is encoded relative to the path-prefix.";
      }
    }

    leaf incomplete {
      type empty;
      description
        "This is a flag that indicates that not all datastore nodes
         subscribed to are included with this update. Receivers of
         this data SHOULD NOT assume that any missing data has been
         implicitly deleted.";
    }
  }

/*
  * DATA NODES
  */

container datastore-telemetry {
  presence "Enables datastore telemetry";
  description
    "YANG Push Lite 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;
          description
            "A unique name to identify the selection filters.";
        }
        uses filter-types;
      }
    }
    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 "name";
        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 subscription-common;

        list receivers {
          key "name";
          min-elements 1;
          description
            "A host intended as a recipient for the notification
            messages of a subscription.  For configured
            subscriptions, transport-specific network parameters
            (or a leafref to those parameters) may be augmented to a
            specific receiver in this list.";
          leaf name {
            type leafref {
              path "/datastore-telemetry/receivers/receiver/name";
            }
            description
              "Identifies a unique 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 id {
          type subscription-id;
          config false;
          mandatory true;
          description
            "Publisher allocated identifier for a subscription;
              Unique in a given publisher.";
        }

        leaf status {
          type subscription-status;
          config false;
          description
            "The presence of this leaf indicates that the
             subscription originated from configuration, not through
             a controlchannel or RPC.  The value indicates the state
             of the subscription as established by the publisher.";
        }

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

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

               The count is initialized when the subscription
               first becomes active.

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

               TODO - Does this count include lifecycle or only
               update messages?";
          }

          leaf excluded-event-records {
            type yang:zero-based-counter64;
            config false;
            description
              "The number of event records explicitly removed via
              either an event stream filter or an access control
              filter so that they are not passed to a receiver.
              This count is set to zero each time
              'sent-event-records' is initialized.";
          }
        }

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

      list receiver {
        key "name";

        leaf name {
          type string;
          description
            "An arbitrary but unique name for this receiver
            instance.";
        }

        leaf encoding {
  /*        when 'not(../transport) or derived-from(../transport,
          "ypl:configurable-encoding")';*/
          type encoding;
          description
            "The type of encoding for notification messages.  For a
             dynamic subscription, if not included as part of an
             'establish-subscription' RPC, the encoding will be
             populated with the encoding used by that RPC.  For a
             configured subscription, if not explicitly configured,
             the encoding will be the default encoding for an
             underlying transport.";
        }

        uses dscp;

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

             This action is directly equivalent to invoking the 
             'reset' action on all subscriptions that references
             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.";
      }
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="yp-lite-capabilties-tree">
        <name>ietf-yp-lite-capabilities YANG tree</name>
        <t>This section shows the tree output for ietf-yp-lite-capabilities YANG module, which augments the ietf-system-capabilities YANG module <xref target="RFC9196"/>.</t>
        <figure>
          <name>YANG tree for YANG Push Lite Capabilities Module Tree Output</name>
          <sourcecode type="yangtree"><![CDATA[
module: ietf-yp-lite-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
  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="yp-lite-yang-capabilities-module">
        <name>ietf-yp-lite-capabiltiies 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-yp-lite-capabilities</name>
          <sourcecode type="yang" markers="true" name="ietf-yp-lite-capabilities.yang#0.1.0"><![CDATA[
module ietf-yp-lite-capabilities {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-yp-lite-capabilities";
  prefix yplc;

  import ietf-system-capabilities {
    prefix sysc;
    reference
      "RFC 9196: YANG Modules Describing Capabilities for Systems
       and Datastore Update Notifications";
  }
  import ietf-yp-lite {
    prefix ypl;
    reference
      "RFC XXX: YANG Push Lite";
  }

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

  /*
   * 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 yp-lite-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 yp-lite-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 ypl: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 ypl:encoding;
          }
          description
            "Indicates supported encoding formats.";
        }
      }
    }
  }

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

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

  augment "/sysc:system-capabilities/sysc:datastore-capabilities"
        + "/sysc:per-node-capabilities" {
    description
      "Add datastore and node-level capabilities";
    uses yp-lite-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="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><strong>TODO - Check that this section is still correct at WG LC, and before/after IESG Evaluation, if the YANG data model changes at all</strong>.</t>
        <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-yp-lite" 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 preconfigured 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>
        <t><strong>TODO - As per the template in <xref target="I-D.draft-ietf-netmod-rfc8407bis"/>, we would need to add text for groupings if we add any groupings from elsewhere, or the modules define groupings that are expected to be used by other modules.</strong></t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers the following namespace URI in the "IETF XML Registry" <xref target="RFC3688"/>:</t>
      <t>URI: urn:ietf:params:xml:ns:yang:ietf-yp-lite</t>
      <t>Registrant Contact: The IESG.</t>
      <t>XML: N/A; the requested URI is an XML namespace.</t>
      <t>This document registers the following YANG module in the "YANG Module Names" registry <xref target="RFC6020"/>:</t>
      <t>Name: ietf-yp-lite</t>
      <t>Namespace: urn:ietf:params:xml:ns:yang:ietf-yp-lite</t>
      <t>Prefix: ypl</t>
      <t>Reference: RFC XXXX</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This inital 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>
    </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 (TBD)</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-netana-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>Huawei</organization>
            </author>
            <date day="28" month="January" year="2025"/>
            <abstract>
              <t>   This document defines a new extensible notification structure,
   defined in YANG, for use in YANG-Push Notification messages 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 caracterizing the moment when the changed data was
   observed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-netana-netconf-notif-envelope-02"/>
        </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="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>
        <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>
      </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="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="RFC8071">
          <front>
            <title>NETCONF Call Home and RESTCONF Call Home</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="February" year="2017"/>
            <abstract>
              <t>This RFC presents NETCONF Call Home and RESTCONF Call Home, which enable a NETCONF or RESTCONF server to initiate a secure connection to a NETCONF or RESTCONF client, respectively.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8071"/>
          <seriesInfo name="DOI" value="10.17487/RFC8071"/>
        </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="8" month="May" year="2025"/>
            <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-03"/>
        </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="3" month="March" year="2025"/>
            <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-07"/>
        </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="14" month="May" year="2025"/>
            <abstract>
              <t>   This document describes a UDP-based transport for YANG notifications
   to collect data from network nodes.  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 enable 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-21"/>
        </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="8" month="June" year="2025"/>
            <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.


              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-distributed-notif-14"/>
        </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="8" month="June" year="2025"/>
            <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.


              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-distributed-notif-14"/>
        </reference>
        <reference anchor="I-D.netana-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>Huawei</organization>
            </author>
            <date day="28" month="January" year="2025"/>
            <abstract>
              <t>   This document defines a new extensible notification structure,
   defined in YANG, for use in YANG-Push Notification messages 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 caracterizing the moment when the changed data was
   observed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-netana-netconf-notif-envelope-02"/>
        </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 3425?>

<section anchor="DifferencesFromYangPush">
      <name>Functional changes between YANG Push Lite and YANG Push</name>
      <t>This non-normative section highlights the significant functional changes where the YANG Push Lite 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 Lite 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 Lite.</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.  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>
        </ul>
      </section>
      <section anchor="changed-functionality">
        <name>Changed Functionality</name>
        <t>This section documents behavior that exists in both YANG Push and YANG Push Lite, but the behavior differs between the two:</t>
        <ul spacing="normal">
          <li>
            <t>All YANG Push Lite notifications messages use <xref target="I-D.draft-netana-netconf-notif-envelope"/> rather than <xref target="RFC5277"/> used by YANG Push.</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>If a subscription uses multiple receivers then:      </t>
                <ul spacing="normal">
                  <li>
                    <t>Update messages and lifecycle notifications are sent to all receivers (to preserve sequence numbers)</t>
                  </li>
                  <li>
                    <t>all receivers must be configured with the same encoding</t>
                  </li>
                </ul>
              </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>On-change dampening:  </t>
            <ul spacing="normal">
              <li>
                <t>Client configurable on-change dampening has been removed.</t>
              </li>
              <li>
                <t>However, YANG Push Lite 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 Lite.</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 RFC 8639/RFC 8649:  </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 Lite 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>A <em>collection-complete</em> notification, and associated configuration, has been defined to inform collectors when a subscription's periodic collection cycle is complete.</t>
          </li>
          <li>
            <t>TODO - More operational data on the subscription load and performance.</t>
          </li>
          <li>
            <t>All YANG Push Lite 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.netana-netconf-notif-envelope"/>.  Only the full notification example in <xref target="FullNotificationExample"/> includes the notification header.</t>
        </li>
        <li>
          <t>These examples have been given using a JSON encoding of the regular YANG-Push notification format, i.e., encoded using <xref target="RFC5277"/>, but it is anticipated that these notifications could be defined to exclusively use the new format proposed by <xref target="I-D.netana-netconf-notif-envelope"/>.</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-update-message-using-the-new-style-update-message">
        <name>Example of update message using the new style update message</name>
        <t>The subscription was made on "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces", but for efficiency reasons, the device has split the subscription into separate child subscriptions for the different data providers, and makes use of the new message format.</t>
        <t>Hence, this first periodic message is being published for the "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces/interface-summary" container, but it is encoded rooted relative to the schema for "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces".</t>
        <artwork><![CDATA[
{
  "ietf-notification:notification": {
    "eventTime": "2024-09-27T14:16:27.773Z",
    "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/interface-summary",
      "snapshot-type": "periodic"
      "observation-time": "2024-09-27T14:16:27.773Z",
      "datastore-snapshot": {
        "interface-summary" : {
          "interface-type": [
            {
              "interface-type-name": "IFT_GETHERNET",
              "interface-type-description": "GigabitEthernet",
              "interface-counts": {
                "interface-count": 5,
                "up-interface-count": 2,
                "down-interface-count": 0,
                "admin-down-interface-count": 3
              }
            }
          ],
          "interface-counts": {
            "interface-count": 8,
            "up-interface-count": 5,
            "down-interface-count": 0,
            "admin-down-interface-count": 3
          }
        }
      }
    }
  }
}
]]></artwork>
        <t>The second periodic message is being published for the "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces/interfaces/interface" list, but again, it is encoded rooted relative to the schema for "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces".  This message has a separate observation time that represents the more accurate time that this periodic date was read.</t>
        <artwork><![CDATA[
{
  "ietf-notification:notification": {
    "eventTime": "2024-09-27T14:16:27.973Z",
    "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[]",
      "snapshot-type": "periodic"
      "observation-time": "2024-09-27T14:16:27.973Z",
      "datastore-snapshot": {
        "interfaces": {
          "interface": [
            {
              "interface-name": "GigabitEthernet0/0/0/0",
              "interface": "GigabitEthernet0/0/0/0",
              "state": "im-state-admin-down",
              "line-state": "im-state-admin-down"
            },
            {
              "interface-name": "GigabitEthernet0/0/0/4",
              "interface": "GigabitEthernet0/0/0/4",
              "state": "im-state-admin-down",
              "line-state": "im-state-admin-down"
            },
          ]
        }
      }
    }
  }
}
]]></artwork>
        <t>Each child subscription would use the same period and anchor time as the configured subscription, possibly with a little bit of initial jitter to avoid all daemons attempting to publish the data at exactly the same time.</t>
      </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>
        <artwork><![CDATA[
{
  "ietf-notification:notification": {
    "eventTime": "2024-09-27T14:16:30.973Z",
    "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"
            }
          ]
        }
      }
    }
  }
}
]]></artwork>
      </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>
        <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.  Of note:</t>
        <ul spacing="normal">
          <li>
            <t>The on-change-delete snapshot type doesn't include a "datastore-snapshot", instead it represents a delete of the list entry at the path identified by the target-path, which is similar to a YANG Patch delete notification.</t>
          </li>
        </ul>
        <artwork><![CDATA[
{
  "ietf-notification:notification": {
    "eventTime": "2024-09-27T14:16:40.973Z",
    "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-delete"
      "observation-time": "2024-09-27T14:16:40.973Z",
    }
  }
}
]]></artwork>
      </section>
      <section anchor="subscription-rpc-examples-from-rfc-8641">
        <name>Subscription RPC examples (from RFC 8641)</name>
        <t>YANG-Push subscriptions are established, modified, and deleted using
RPCs augmented from <xref target="RFC8639"/>.</t>
        <section anchor="establish-subscription-rpc">
          <name>"establish-subscription" RPC</name>
          <t>The subscriber sends an "establish-subscription" RPC with the
parameters listed in Section 3.1.  An example might look like:</t>
          <artwork><![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-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:periodic>
       <yp:period>500</yp:period>
     </yp:periodic>
   </establish-subscription>
 </netconf:rpc>

                  Figure 10: "establish-subscription" RPC
]]></artwork>
          <t>A positive response includes the "id" of the accepted subscription.
In that case, a publisher may respond as follows:</t>
          <artwork><![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-subscribed-notifications">
       52
    </id>
 </rpc-reply>

         Figure 11: "establish-subscription" Positive RPC Response
]]></artwork>
          <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 anchor="resync-subscription-rpc">
          <name>"resync-subscription" RPC</name>
          <t>This RPC is supported only for on-change subscriptions previously
established using an "establish-subscription" RPC.  For example:</t>
          <artwork><![CDATA[
  <rpc message-id="103"
        xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <resync-subscription
        xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-push">
      <id>1011</id>
    </resync-subscription>
  </rpc>

                  Figure 15: "resync-subscription"
]]></artwork>
          <t>On receipt, a publisher must either (1) accept the request and
quickly follow with a "push-update" or (2) send an appropriate error
in an RPC error response.  In its error response, the publisher <bcp14>MAY</bcp14>
include, in the yang-data structure "resync-subscription-error",
supplemental information about the reasons for the error.</t>
        </section>
      </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"/>.</t>
          </li>
          <li>
            <t>Do we need to fold in any text from RFC 8640? and RESTCONF.  I.e., there was this text in the one of the previous docs:   Bindings for subscribed event record delivery for NETCONF and RESTCONF are defined in <xref target="RFC8640"/> and <strong>RESTCONF-Notif</strong>, respectively.
            </t>
            <ul spacing="normal">
              <li>
                <t>Rob: If text is needed for NETCONF and/or RESTCONF then I suspect that it would be better added to this document than to require small separate documents (as was done before).</t>
              </li>
            </ul>
          </li>
          <li>
            <t>What is the right name.  Should we be calling this Yang Push 2 (YPv2) to more clearly indicate that this is intended to be a replacement for Yang Push?  We need to be slightly careful in that this is only specifying implementing a subset of the functionality.</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?  This may be better than data node subtree, or the equivalent, and could be better than introducing <em>bags</em>?
            </t>
            <ul spacing="normal">
              <li>
                <t>Holger: should try and use same terminology as existing YANG Push RFCs.</t>
              </li>
              <li>
                <t>Rob: This issue can be a place holder, to go through and check/update the terminology used, and see if any of the referenced terminology isn't neeed in YP Lite.</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="issues-related-to-yang-push-lite-overview">
        <name>Issues related to YANG Push Lite 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.
            </t>
            <ul spacing="normal">
              <li>
                <t>Vendors already support a simple JSON like path (e.g., using module-names rather than XML namespaces).</t>
              </li>
              <li>
                <t><strong>Open questions (for further discussion):</strong>
                </t>
                <ul spacing="normal">
                  <li>
                    <t>Do we support filtering on non-keys, e.g., this example from Thomas (but which filters on a non-key):
 /if:interfaces-state/if:interface[if:type='ianaift:ethernetCsmacd']/if:statistics</t>
                  </li>
                  <li>
                    <t>Do we support simple regex filtering on the keys (and if so, how would that be expressed, would it be compatible with JSON Path)</t>
                  </li>
                  <li>
                    <t>Do we need any more complex filtering (e.g., Holger's example of only getting entries from a list if they are in a particular state.), or do we always use subtree filters for that?</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><strong>Authors: I provides some suggested text in <xref target="YPaths"/>, but I expect further discussion may be needed. (E.g., how multiple keys should be expressed)</strong></t>
              </li>
            </ul>
          </li>
          <li>
            <t>The draft retains <bcp14>OPTIONAL</bcp14> subtree filtering (under a feature statement):
            </t>
            <ul spacing="normal">
              <li>
                <t>What is the schema associated with this subtree (compared to a simple path), and how is this expressed?</t>
              </li>
              <li>
                <t>Does the subtree filter get put into the subscription-started message?</t>
              </li>
            </ul>
          </li>
          <li>
            <t>xpath filtering - conslusion is that we should keep this in a draft as a <bcp14>MAY</bcp14> (under a feature statement).
            </t>
            <ul spacing="normal">
              <li>
                <t>Do we allow implementations to support a subset of xpath syntax, or should they support all of xpath.</t>
              </li>
              <li>
                <t><strong>Proposal: From an IETF draft perspective, don't say anything, i.e., it just indicates support for XPath filtering without explicitly saying whether or not it must all be supported</strong></t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="issues-related-to-datastore-event-streams">
        <name>Issues related to Datastore Event Streams</name>
        <section anchor="further-refinements-on-how-a-subscription-can-be-decomposed-internally-into-child-subscriptions-with-the-data-returned-for-each-child-subscription">
          <name>Further refinements on how a subscription can be decomposed internally into child subscriptions with the data returned for each child subscription:</name>
          <ol spacing="normal" type="1"><li>
              <t>Handling lists with separate producers of list entries.  </t>
              <ul spacing="normal">
                <li>
                  <t>If a subscription is decomposed, then should the subscription started message for the configured subscription indicate how that subscription has been decomposed?</t>
                </li>
                <li>
                  <t>Do we need to add an optional replay-end (i.e., after a sync-on-start) or collection-end (i.e., after every collection) notification so that clients can determine when data can be implicitly deleted.      </t>
                  <ul spacing="normal">
                    <li>
                      <t>Rob: I think that we should add the latter, but make it a subscription config option to turn it on.</t>
                    </li>
                    <li>
                      <t>Holger, strong support for adding this, often requested.</t>
                    </li>
                    <li>
                      <t>Thomas, yes we need this, but need to determine whether this is per subscription or per publisher.</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ol>
        </section>
        <section anchor="questionscomments-on-the-notification-message-format">
          <name>Questions/comments on the notification message format:</name>
          <ol spacing="normal" type="1"><li>
              <t>We allow multiple updates within a single message (primary use case is for the on-change case).  What about the timestamp, which is still just once per message (like gNMI)?  Should message bundling be optional/configurable to implement (if they all use a single shared timestamp)?  </t>
              <ul spacing="normal">
                <li>
                  <t>on-change deletes are implicit by an update that replaces an existing entry with an empty data node (e.g., "{}" in JSON)      </t>
                  <ul spacing="normal">
                    <li>
                      <t>An alternative choice here could be an explicit delete flag, we need to decide which would be simpler/better.</t>
                    </li>
                  </ul>
                </li>
                <li>
                  <t>The update message also currently includes a path-prefix to allow (like gNMI) so that they don't necessarily need to be encoded from root, specifically, I think that this makes on-change messages nicer, since the on-change is rooted to the thing that is changing rather than the root of the tree.  We need to define semantics of how this works, e.g., this should probably be controlled via configuration.
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t>Ideally, the path prefix would be exactly the same as the YPath format that is being specified for configuration.</t>
                    </li>
                  </ul>
                </li>
                <li>
                  <t>Do we keep the "incomplete" update flag?  Otherwise how would a publisher indicate that a message was not complete.      </t>
                  <ul spacing="normal">
                    <li>
                      <t>Thomas: We should keep this.</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ol>
          <ul spacing="normal">
            <li>
              <t><em>Further discussion of this issue is needed</em></t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="issues-related-to-receivers-transports-encodings">
        <name>Issues related to Receivers, Transports, &amp; Encodings</name>
        <section anchor="constraints-on-supporting-multiple-receivers">
          <name>Constraints on supporting multiple receivers:</name>
          <ol spacing="normal" type="1"><li>
              <t>Encoding is set per receiver, but do we need to support a subscription supporting more than one receiver with different encodings?
              </t>
              <ul spacing="normal">
                <li>
                  <t>Rob: Note, it is always possible for a client to setup different subscriptions.</t>
                </li>
                <li>
                  <t>Thomas: This could be useful, e.g., when migrating from one encoding to another, particularly, if it reduced the load on the publisher (compared to creating a new separate subscription).</t>
                </li>
                <li>
                  <t>Rob: I don't think that we would end up optimizing for this case (but would need to check).</t>
                </li>
                <li>
                  <t>Also need to check with Nokia/Huawei would support this.</t>
                </li>
                <li>
                  <t><strong>Current status: Left open for further discussion.</strong></t>
                </li>
                <li>
                  <t>Note: This may also have a minor impact on the data model.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Lifecycle message should be sent per subscription, not per receiver (i.e., every receiver gets the same message (ignoring transport headers)):
              </t>
              <ul spacing="normal">
                <li>
                  <t>Consensus agreed this is the right thing to do.</t>
                </li>
                <li>
                  <t><strong>Action on Rob to check/update the draft.</strong></t>
                </li>
                <li>
                  <t>Notes:
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t>Every receiver gets the same sequence number in the message.</t>
                    </li>
                    <li>
                      <t>subscription-created notification could perhaps have an enum giving a reason for the notification (e.g., new subscription, receiver added).</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
            <li>
              <t>Do we need a per-receiver notification to indicate to a specific receiver that it has been disconnected?
              </t>
              <ul spacing="normal">
                <li>
                  <t>This would seem to only apply to configured subscriptions (since dynamic cannot have more than one receiver).</t>
                </li>
                <li>
                  <t>If the transport session went down, then the publisher would be expected to reconnect anyway.</t>
                </li>
                <li>
                  <t>So, the specific use case is likely to be unconfiguring a receiver for a subscription that has multiple receivers.</t>
                </li>
                <li>
                  <t><strong>Currently parked for further discussion.</strong></t>
                </li>
              </ul>
            </li>
          </ol>
        </section>
        <section anchor="issues-related-to-transports">
          <name>Issues related to Transports:</name>
          <ol spacing="normal" type="1"><li>
              <t><xref target="transports"/> lists quite a lot of rules on what are valid transports and what negotation/etc is required.  I think we need to check whether we can weaken some of these (although it is possible that these were imposed during a transport directorate review).
              </t>
              <ul spacing="normal">
                <li>
                  <t><strong>Rob: Authors, I've updated the transport section, <xref target="transports"/>, please can you re-review.</strong></t>
                </li>
              </ul>
            </li>
            <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>
          <t>Note some of these apply or impact dynamic subscriptions as well.</t>
          <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"/>.</t>
            </li>
            <li>
              <t>We should allow devices to limit which datastores subscriptions can be made against (e.g., not candidate or factory-default as some obvious examples).  Should these be advertised in the capabilities?</t>
            </li>
            <li>
              <t>(James) Should we even document the configuration data model in this document at all, or should it be in a separate document?</t>
            </li>
            <li>
              <t>Some other changes/proposed changes:  </t>
              <ul spacing="normal">
                <li>
                  <t>I've removed some of the YANG features for 'small' one/two changes in configuration.  I propose that we don't need features for these at all (e.g., DSCP settings), or in other cases we can use operational capabilities, or rely on deviations.
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t>I've renamed the encodings (e.g., from "encode-json" to just "json")</t>
                    </li>
                    <li>
                      <t>Maybe further simplification of the receivers list under the subscription.  E.g., do we need stats per subscription per receiver, or just per subscription?  Do want stats across all subscriptions to a given receiver?
                      </t>
                      <ul spacing="normal">
                        <li>
                          <t>Holger: Stats per subscription should be sufficient.  No need for per subscription/pre-receiver stats (which would allow the data model to be simplified a little bit).</t>
                        </li>
                      </ul>
                    </li>
                    <li>
                      <t>Subscription-ids are currently numeric values with the space split between configured and dynamic subscriptions, but I think that the config model would be cleaner if we used names for the configured subscriptions (and we could reserve a prefix "dyn-" for dynamic subscriptions).
                      </t>
                      <ul spacing="normal">
                        <li>
                          <t>Holger, Rob: Strong preference to names.</t>
                        </li>
                        <li>
                          <t>Thomas, keep ids, but rename 'purpose' to name.  Also give receivers an ids and be keyed this.</t>
                        </li>
                      </ul>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ol>
        </section>
        <section anchor="issues-related-to-dynamic-subscriptions">
          <name>Issues related to dynamic subscriptions:</name>
          <ol spacing="normal" type="1"><li>
              <t>In YP Lite, dynamic subscriptions are designed to be closer to configured subscriptions and share more of the data model and lifecycle handling.  I.e., the primary differentiator is meant to be how they are instantiated.
              </t>
              <ul spacing="normal">
                <li>
                  <t>James, Rob: More alignment is better.</t>
                </li>
              </ul>
            </li>
            <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).</t>
            </li>
            <li>
              <t>Do we need to allow a dynamic subscription to be modified?  If we do, then it would be better to change the establish-subscription RPC to have an optional existing subscription-id rather than define a separate RPC.  However, my preference is that the existing subscription is deleted and recreated (or if we allow the client to specify the subscription-id then they could just overwrite the subscription)
              </t>
              <ul spacing="normal">
                <li>
                  <t>Holger: Overwrite is a neat idea, but delete/recreate would also be sufficient.</t>
                </li>
                <li>
                  <t>Rob: Related to this, do we allow the client to optionally name dynamic subscriptions (what is config and dynamic subscription names collide)?</t>
                </li>
              </ul>
            </li>
            <li>
              <t>For operational data, should be list dynamic receivers in the receiver list so that they are handled the same as configured subscription?  Or should the information for them be inlined in the subscriptions container?
              </t>
              <ul spacing="normal">
                <li>
                  <t>Rob this requires further thought on exactly how configured/dynamic subscriptions may to underlying transport sessions.  I.e., how fixed or flexible is this depending on the transport.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Proposal is to make specifying an encoding mandatory.</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>Use subscription name as the unique identifier for the subscription configuration.  Subscription id identifies a subscription session.  I.e., if a configured subscription is terminated and re-established then a new subscription id is allocated.</t>
          </li>
          <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?
            </t>
            <ul spacing="normal">
              <li>
                <t>Rob: I think that we should do this (i.e., as optimized version of content-id)</t>
              </li>
              <li>
                <t>Would this also be impacted by a change to access control? (Rob: Probably not)</t>
              </li>
              <li>
                <t><strong>Thomas would like to align to the same mechanism in YANG Push, i.e., in the existing drafts, and we should use the same mechanism</strong></t>
              </li>
              <li>
                <t>Rob: I would like to understand what the long term complete solution is here.</t>
              </li>
              <li>
                <t>Benoit: Also related to the data manifest draft (in WGLC in OPSWG.)
                </t>
                <ul spacing="normal">
                  <li>
                    <t>Should discuss all of this together.  IETF 122 discussion.</t>
                  </li>
                </ul>
              </li>
            </ul>
          </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?
            </t>
            <ul spacing="normal">
              <li>
                <t>Thomas: Do we need referenced filters at all?  Subscriptions could be simplified if everything was done inline.</t>
              </li>
              <li>
                <t>gNMI is only done inline.</t>
              </li>
              <li>
                <t>Juniper also supports filters.</t>
              </li>
              <li>
                <t>Thomas try to simplify as much as possible, then do we need templating?</t>
              </li>
            </ul>
          </li>
          <li>
            <t>When a subscription is terminated, should it be <bcp14>MUST NOT</bcp14> send any more notifications after the terminated message, or <bcp14>SHOULD NOT</bcp14>?  For a dynamic subscription, should the RPC be synchronous and not reply until it knows that all queues have been drained?
            </t>
            <ul spacing="normal">
              <li>
                <t>Holger, Thomas, Benoit: <bcp14>MUST NOT</bcp14></t>
              </li>
              <li>
                <t>James: <bcp14>SHOULD NOT</bcp14></t>
              </li>
              <li>
                <t><bcp14>MUST NOT</bcp14> is clearer from an implementation POV, but probably doesn't really matter.</t>
              </li>
              <li>
                <t>What does the receiver do when it gets this message anyway.</t>
              </li>
            </ul>
          </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?
            </t>
            <ul spacing="normal">
              <li>
                <t>Holger, terminate &amp; recreate.</t>
              </li>
              <li>
                <t>gNMI, not specified.</t>
              </li>
              <li>
                <t>Thomas: Keep this as implementation detail.</t>
              </li>
              <li>
                <t>Sequence-id indicates that a client is dropping message anyway.</t>
              </li>
              <li>
                <t>Receiver can already monitor and see that there is a problem anyway.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If the parameters for a subscription change in any way (e.g., the config changes for a configured subscription, or a referenced filter changes in a dynamic subscription) then do we want to say that the subscription <bcp14>MUST</bcp14> be killed and recreated.  I.e., with subscription-terminated/subscription-started notifications? (Section 11)
            </t>
            <ul spacing="normal">
              <li>
                <t>Holger, kill/re-create.</t>
              </li>
              <li>
                <t>Collector would need to no.</t>
              </li>
              <li>
                <t>Ebben: Includes addition or deletion of the path.</t>
              </li>
              <li>
                <t>Benoit: Which parameters are changing, this could impact.  It depends.  Maybe forcing it down keeps it simple.  Would need further definition of what parameters would cause this to be pulled down.</t>
              </li>
              <li>
                <t>Locally relevant, e.g., modifying transport parameters doesn't force a change.</t>
              </li>
              <li>
                <t>Benoit: If you are not sure what you are doing you must recreate.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Should we have a YANG Action to reset a receiver or a subscription?  E.g., discussed in <xref target="reset"/>.
            </t>
            <ul spacing="normal">
              <li>
                <t>There seems to be consensus that having/keeping such a YANG action is useful if a configured subscription is stuck.</t>
              </li>
              <li>
                <t>Further discussion is needed to indicate where such an RPC should be in the data model, and what effect it should have:
                </t>
                <ul spacing="normal">
                  <li>
                    <t>It could be under the subscription list, which would effectively be equivalent to forcing the subscription to terminate and re-initialise across all receivers.</t>
                  </li>
                  <li>
                    <t>It could also be under the receiver list, which would effectively be equivalent to forcing all subscriptions using that receiver to terminate and re-initialise.</t>
                  </li>
                  <li>
                    <t><strong>We also need to consider whether this would clear subscription counters or not.</strong></t>
                  </li>
                  <li>
                    <t><strong>We also consider whether configured subscription <bcp14>MAY</bcp14>/<bcp14>SHOULD</bcp14> share transport sessions where possible, or whether each subscription uses a separate transport session, or whether this is down to the transport session definition.  This decision may impact the design of the data model, and pehaps the transport requirements text.</strong></t>
                  </li>
                  <li>
                    <t><strong>Rob: I've written up some text for the reset action on a subscription and under the receiver (that applies to all subscriptions that reference the receiver configuration).  Unlike the existing reset action, I've removed the return parameter (timestamp of when it took effect), and I think that we should allow it to be processed asynchronously w.r.t the RPC caller.  Authors, please check the latest text.</strong></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>Should we support configurable subscription-level keepalives?
            </t>
            <ul spacing="normal">
              <li>
                <t>This would probably entail periodically sending a small message on on-change subscriptions so that the receiver (message broker) knows that the collection is still alive and active.</t>
              </li>
              <li>
                <t>The presumption is that would be configurable option on an on-change subscription (configured or dynamic)</t>
              </li>
              <li>
                <t>Note, some transport sessions may already support keepalives, which is a separate, transport specific consideration.</t>
              </li>
              <li>
                <t>An alternative would be to configure a joint periodic and on-change subscription, but depending on the keepalive interval this would likely involve sending more data on a periodic basis.</t>
              </li>
              <li>
                <t>Another alternative is to monitor the operational state of the subscription to keep that all the expected subscriptions are active.</t>
              </li>
              <li>
                <t><strong>Discussed, but no consensus reached yet</strong></t>
              </li>
            </ul>
          </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>
              </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?
              </t>
              <ul spacing="normal">
                <li>
                  <t>Thomas: Two sets of counters, one is at the subscription which is about fetching the data, and the other is on the receiver.</t>
                </li>
                <li>
                  <t>James: Can think of some uses cases where listing drop counters per subscription may be helpful.</t>
                </li>
                <li>
                  <t>Rob: Thinking about it further, it probably needs to be separate, since for some transports, each subscription may open a separate transport session to the receiver rather than trying to mux into a single transport (e.g., TCP).</t>
                </li>
              </ul>
            </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>
            <ul spacing="normal">
              <li>
                <t>The current doc uses a mixture of both (e.g., features for supporting config vs dyanmic subscriptions), capabilities for advertising other capabilities that either cannot be advertised via features, or would arguably be too fine grained.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>For on-change, should a subscription be rejected (or not brought up) if there are no on-change notifiable nodes?  Alternative is to offer implementation flexibility between these two approaches.
            </t>
            <ul spacing="normal">
              <li>
                <t>Holger: Prefer for the subscription to be rejected.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>CBOR SID encoding:
            </t>
            <ul spacing="normal">
              <li>
                <t>In terms of conformance, we have <bcp14>SHOULD</bcp14> for CBOR, but the draft is silent on whether this means with SIDs or not.</t>
              </li>
              <li>
                <t>Further discussion is required on how to manage SID files.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Check of the current approach in the draft of using a separate tree for YP Lite capbilities rather than reusing the YP capabilities (and augmentations) previously defined.
            </t>
            <ul spacing="normal">
              <li>
                <t>Rob: The draft currently includes a separate tree, which I think is necessary because the supported functionality is different (e.g., dampening), and a implementation may support both YANG Push and YANG Push Lite.</t>
              </li>
            </ul>
          </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>
      </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 Lite, 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>
            <ul spacing="normal">
              <li>
                <t>(James) Take out tight binding to NACM from YANG Push Lite altogether.  I.e., decouple YANG Push Lite from what security mechanism is being used.</t>
              </li>
              <li>
                <t>(Rob) Another choice could be to use NACM as an example rather than the only way.</t>
              </li>
            </ul>
          </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>
      </section>
      <section anchor="issues-related-to-the-iana">
        <name>Issues related to the IANA</name>
        <ol spacing="normal" type="1"><li>
            <t>Need to add in registration for ietf-yp-lite-capabilities.yang</t>
          </li>
        </ol>
      </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 most of the 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 susbcriptions to 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>
        </ol>
      </section>
      <section anchor="changes">
        <name>Changes</name>
        <ol spacing="normal" type="1"><li>
            <t>Aligned configured and dynamic subscription data models:
 - Both are configured by name.
 - Made "purpose" field common (limited to 1k max characters, previously unrestricted), i.e., now available for dynamic subscriptions.</t>
          </li>
        </ol>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAGcrbGgAA+S9+3obR3Yv+j+eokP9IRIbAElJvojRyCNLcqzElrQlTTyT
8SRpAE2yI6Ab6W6QomXtZ9nPcp7srGvVqupqEPLM7POdbyv5PCDQXfda9/Vb
0+l01JXdqjjLDv705OU/Zc/yLm+7uimyd8WqWBddc5Md0i+vt+1l9kPZFUcH
o3w+b4oreWfqfjkYLfKuuKibm7Os7Zaj0bJeVPkaGl82+Xk3vS5XXV1Nq6Jb
1NX59CavLqYbeHm6gpenJ6ejdjtfl21b1lV3s4HXXjx/992o2q7nRXM2WkLb
ZyN4sy2qdtueZV2zLUYwivujvClyGM2rTdHkHbzdZnm1zH7Mq/wC5lB1B6Pr
unl/0dTbDTz2sujwz+wpDKK82PIrB6P3xQ18vTwbZdk0c1Omv17N26K5yucl
DPSGvtE23CrxczqAfEUrOboqqm2BLd7Sd5bxhA9+gh/L6iL7J3wev1/n5Qq+
lzX7fVl057O6ucCf8mZxCT9ddt2mPTs+xifxq/KqmOljx/jF8bypr9viWNo4
xncvyu5yO4e3mwvelWPeopvNtLaTxWdXsPBtZ3rSd2bcyqysB94+Tu979NTs
sluvDkajfNtd1rDR2RQ6zbLz7WrFp+dNDQegy36iZug3mFpelb/Q6p1lT8t2
UWdvb9quWLf0e8HL1nDPv1/gA7NFvaYfmxrPe7Es4Zz3O/u+Xl0UTfYvxWpV
NInOnhXbomsXl3xD3kub0iG/POOXf9/xA7Nl0e/m26Kqyy57usrLtkh08/02
vy5K2/ac3pgt6I3fX9LvPKe47edzeDZ70pRFm2j5n7dVuZGpSdPFh/z3/8Vf
z2CX+i3+M/y3zZ5u12s4nIk2X9bvy9y2+F/4wmzBL/y+wp/TY313Wa/zFs57
fp5o9+01kINFuMb8xgzf+H0rv1Pbo6pu1vDiFd24F9NnMz5+MCOgBO74VXVX
nk+L6qpY1Rt69M13T+89+OqBfPzy3oNT/fjwoX786uEXJ/6jfvv1/Qcn/qP5
9p5+/OLeF/7jQ/34lWv34enDL/XjvS90DA+/eKivPXzwNXwcldW5nR38AP1p
I/e//Ppr+fjg3hfa95cn99yQTx5o31994Yd874uHfsj39eODBzqir0/8sydf
nfqPbnpf3nctfOmf/dItxcOTk5NwN5A04V6s6+W0OV98/eDkq3nZ6jP867re
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
fcbJMjssz924jyaJkbMNmAbYtgyd6aCpJwOLKNHKVACnByUWbee7S5ct7oJw
lZEEzggP4rnkeCNBgEhi182m/X+z5JO/pr4bfvKZtd7ufHKvNu8mxnk3+aRp
+9/hgTfmFoY3kC08L+tByRDePvUI1MEtVftQ2uywc1xXQ1P8u22FJwK3PblX
m795K95Zx+AxldCWS0SL6X/Wn7obvZPwdupWzrT5X+l3FHtAUFAQlvO8JIln
19D+z+8GRj+SMX+PJ/doM70bI+bjzwp/Zs9GmXXFTYdM4B5WaTYKzs60T8BA
vkhwAM+VsAUz26llWGYbJxZZIK+YHnqwYiJeomBzmgDpYAIeFIdIk7uHoiSk
CuhixfmESxaNtjhIBWIwEfGaYCFRlNaPyyG+7gmtICX8CcSJhVslpfTBC7km
UXF6KcKvCaKT99h9vGMMATJbVbycc6W1/GqaX1Rw0kGM9YV3DJLSXHbGqa6c
5OcEQ8xz4nwXF5EYmC80UcwnrYk9wbgZGbxLFOZQ5pLsdHmf9WRRBQITRKJP
nfYOtJczlWSj1lEZMHKfJylvg270NMlRdOFQvdGitDI4VmNccDYM3zchGXLr
dJuM00wnKFx9oANWyRQjLA+sQYcs+buzzxzNJwIexRYK1LB2Wx8io4NaYzym
tuBtefwpD9I1aCtn0U9BB1arxFytEWo0+oPA5hD9ty3Bsr15/vTVjz8+f/ns
+TM6XVsKgBncoHj9/C3xQePSDdaD3lb6nhKHkNyxl8GrGDlZGUqqSHVVNnW1
NqY9Tb/DJsSf7Ee5ym8Qk8cb3S1rjKaAmRCUwq2aeXTZt5W0UyzDWbQWB03r
SHC6RDQQx4WdnqJwIYVm7YebqnKyR0ihVWSLX16x/9oN00NTSuwavOByOL1h
wq4i4UFihuQqn6NBb8ceCyiH0qD1lmzrXh6ulnYLtxj60Tn0uS6aGK1H/1Jq
qZew2qNkH7BRPjwqHinESfhufKL8HqTNHQc+I2ed+4LBaWvUbeQDzo7spYGV
6SvUlF8ZGUI0Jdg7c7iQHJ9HNGIMFI1JaeeaRiVvfECtmROySOFfJme2x6bH
cCd+133CmB5/h+OhWI1BmDzhEYDCPxC+Ag2cU9oljMlokjG8CtXAiYbK+pmf
yHxbrhCYoI5YAY3T+SY4/UacU249pdIP5SVUIACpZe3N66cusCksC2NzmWnW
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
uWTUJ1d/r/f/Aa5w/9UOZgMA

-->

</rfc>
