<?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-ietf-netconf-transaction-id-09" category="std" consensus="true" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="NETCONF Txid">Transaction ID Mechanism for NETCONF</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-transaction-id-09"/>
    <author initials="J." surname="Lindblad" fullname="Jan Lindblad">
      <organization>All For Eco</organization>
      <address>
        <email>jan.lindblad+ietf@for.eco</email>
      </address>
    </author>
    <date year="2025" month="July" day="02"/>
    <area>ops</area>
    <workgroup>NETCONF</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 52?>

<t>NETCONF clients and servers often need to have a synchronized view of
the server's configuration data stores.  The volume of configuration
data in a server may be very large, while data store changes typically
are small when observed at typical client resynchronization intervals.</t>
      <t>Rereading the entire data store and analyzing the response for changes
is inefficient for synchronization.  This document
specifies a NETCONF extension that allows clients and servers to
keep synchronized with a much smaller data exchange and without any
need for servers to store information about the clients.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Network Configuration Working Group mailing list (netconf@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/netconf/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/netconf-wg/transaction-id"/>.</t>
    </note>
  </front>
  <middle>
    <?line 65?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>When a NETCONF client <xref target="RFC6241"/> wishes to initiate a new configuration transaction
with a NETCONF server, a frequently occurring use case is for the
client to find out if the configuration has changed since the client
last communicated with that server.  Such changes could occur, for
example, if another NETCONF client has made changes, or another system
or operator made changes through other means than NETCONF (e.g., local configuration).</t>
      <t>One way of detecting a change for a client would be to
retrieve the entire configuration from the server, then compare
the result with a previously stored copy at the client side.  This
approach is not popular with most NETCONF users, however, since it
would often be very expensive in terms of communications and
computation cost.</t>
      <t>Furthermore, even if the configuration is reported to be unchanged,
that will not guarantee that the configuration remains unchanged
when a client sends a subsequent change request, a few moments later.</t>
      <t>In order to simplify the task of tracking changes, a NETCONF server
may implement a meta level transaction tag or timestamp for an entire
configuration datastore or YANG subtree, and offer clients a way to
read and compare this tag or timestamp.  If the tag or timestamp is
unchanged, clients can avoid performing expensive operations.  Such
tags and timestamps are referred to as a 'transaction id' (txid) in this
document.</t>
      <t>Note that several server implementors have built proprietary and mutually
incompatible mechanisms for obtaining a transaction id from a NETCONF
server. This document solves the interoperability issue.</t>
      <t>RESTCONF, <xref target="RFC8040"/>,
defines a mechanism for detecting changes in configuration subtrees
based on Entity-Tags (ETags) and Last-Modified headers. An example is depicted in Appendix B.2.2 of <xref target="RFC8040"/></t>
      <t>In conjunction with this, RESTCONF
provides a way to make configuration changes conditional on the server
configuration being untouched by others.  This mechanism leverages
conditional requests per <xref section="13" sectionFormat="of" target="RFC9110"/>.</t>
      <t>This document defines similar mechanism for NETCONF,
<xref target="RFC6241"/>, for config true data.  It also ties this in
with YANG-Push, <xref target="RFC8641"/>, and "Comparison of Network
Management Datastore Architecture (NMDA) Datastores",
<xref target="RFC9144"/>.  'Config false' data (operational data, state, and statistics)
is left out of scope from this document.</t>
      <t>This document does not change the RESTCONF protocol in any way, and
is carefully written to allow implementations to share much of the
code between NETCONF and RESTCONF.  Note that the NETCONF txid
mechanism described in this document uses XML attributes, but the
RESTCONF mechanism relies on HTTP Headers instead, and use none of
the XML attributes described in this document, nor JSON Metadata
(see <xref target="RFC7952"/>).</t>
      <section anchor="how-to-read-this-document">
        <name>How to Read this Document</name>
        <t>At the heart of this document, in chapter <xref target="txid-mechanisms">Txid Mechanisms</xref>, there are two transaction-id handling mechanisms defined, the "Etag" and "Last-Modified" Transaction-id mechanisms.</t>
        <t>The common and general principles for all transaction-id mechanisms are defined in the chapter before that, <xref target="netconf-txid-extension">NETCONF Txid Extension</xref>.  Since the two Transaction-id mechanisms defined in this document have a lot in common, and the future might bring additional such mechanisms, this arrangement keeps the repetition to a minimum.  By necessity, this chapter is a bit abstract.  The details of how the principles are expressed in a specific Transaction-id mechanism follows in the <xref target="txid-mechanisms">Txid Mechanisms</xref> chapter.</t>
        <t>Next after the central chapter with the definitions of the Transaction-id handling mechanisms, there is an extensive chapter with usage examples.  This chapter is called <xref target="txid-mechanism-examples">Txid Mechanism Examples</xref>.</t>
        <t>Towards the end, there is also a chapter with <xref target="yang-modules">YANG Modules</xref>.  These are necessary for a correct implementation, but reading them will not provide much for the understanding of this document.  The mechanisms defined in this document are largely on the NETCONF protocol level, and most aspects cannot be described by YANG modules.</t>
        <t>The examples found throughout this document are referencing acls, aces, dscp and many other related names defined in YANG modules. Interested readers can find definitions of the relevant YANG structures in <xref target="RFC8519"/>. For the purposes of understanding this document, going there is entirely optional.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>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 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.
<?line -6?>
      </t>
      <t>This document uses the terminology defined in
<xref target="RFC6241"/>,
<xref target="RFC7950"/>,
<xref target="RFC7952"/>,
<xref target="RFC8040"/>,
<xref target="RFC8641"/>, and
<xref target="RFC9144"/>.</t>
      <t>In addition, this document defines the following terms:</t>
      <dl>
        <dt>C-txid:</dt>
        <dd>
          <t>Client side transaction-id, i.e., a txid value maintained or provided
by a NETCONF client.</t>
        </dd>
        <dt>Etag:</dt>
        <dd>
          <t>One protocol mechanism that conforms to the definitions in the
<xref target="netconf-txid-extension">NETCONF Txid Extension</xref> section in this
document.  Also the name of the XML attribute that this mechanism
uses in the NETCONF stream, and the message header used in RESTCONF.</t>
        </dd>
        <dt>Last-Modified:</dt>
        <dd>
          <t>Another protocol mechanism that conforms to the definitions in the
<xref target="netconf-txid-extension">NETCONF Txid Extension</xref> section in this
document.  Also the name of the XML attribute that this mechanism
uses in the NETCONF stream, and the message header used in RESTCONF.</t>
        </dd>
        <dt>S-txid:</dt>
        <dd>
          <t>Server side transaction-id, i.e., a txid value maintained or sent by
a NETCONF server.</t>
        </dd>
        <dt>Transaction-id Mechanism:</dt>
        <dd>
          <t>A protocol implementation that fulfills the principles described in
the first part, <xref target="netconf-txid-extension">NETCONF Txid Extension</xref>, of
this document.  See also Etag and Last-Modified.</t>
        </dd>
        <dt>Txid:</dt>
        <dd>
          <t>Abbreviation of Transaction-id.  A transaction-id is an UTF-8
string of characters.  The specific format depends on the protocol
mechanism used (e.g. Etag or Last-Modified).</t>
        </dd>
        <dt>Txid History:</dt>
        <dd>
          <t>Temporally ordered list of txid values used by the server.  Allows
the server to determine if a given txid occurred more recently than
another txid.</t>
        </dd>
        <dt>Versioned node:</dt>
        <dd>
          <t>A node in the instantiated YANG data tree for which
the server maintains a transaction id (txid) value.</t>
        </dd>
      </dl>
    </section>
    <section anchor="netconf-txid-extension">
      <name>NETCONF Txid Extension</name>
      <t>This document describes a NETCONF extension which modifies the
behavior of <tt>&lt;get-config&gt;</tt>, <tt>&lt;get-data&gt;</tt>, <tt>&lt;edit-config&gt;</tt>, <tt>&lt;edit-data&gt;</tt>,
<tt>&lt;discard-changes&gt;</tt>, <tt>&lt;copy-config&gt;</tt>, <tt>&lt;delete-config&gt;</tt>, and <tt>&lt;commit&gt;</tt> operations such
that clients are able to conditionally retrieve and update the
configuration in a NETCONF server.</t>
      <t>For servers implementing YANG-Push <xref target="RFC8641"/>, an extension for conveying txid
updates as part of subscription updates is also defined.  A similar
extension is also defined for servers implementing
"Comparison of NMDA Datastores" <xref target="RFC9144"/>.</t>
      <t>Several low level mechanisms could be defined to fulfill the
requirements for efficient client/server txid synchronization.
This document defines two such mechanisms, the 'etag txid' mechanism (<xref target="sec-etag"/>)
and the 'last-modified txid' mechanism (<xref target="sec-lm"/>). However, additional txid mechanisms may be defined in the future. Such mechanisms have to adhere
to the principles defined in <xref target="sec-principles"/>.</t>
      <t>This document is divided into a two
main parts; the first part discusses the txid mechanism in an abstract,
protocol-neutral way.  The second part,
<xref target="txid-mechanisms">Txid Mechanisms</xref>, then adds the protocol layer,
and provides concrete encoding examples.</t>
      <section anchor="sample-use-cases">
        <name>Sample Use Cases</name>
        <t>The common use cases for txid mechanisms are briefly discussed in this section.</t>
        <dl>
          <dt>Initial configuration retrieval:</dt>
          <dd>
            <t>When a client initially connects to a server, it may be interested
to acquire a current view of (parts of) the server's configuration.
In order to be able to efficiently detect changes later, it may also
be interested to store meta level txid information for
subtrees of the configuration.</t>
          </dd>
          <dt>Subsequent configuration retrieval:</dt>
          <dd>
            <t>When a client needs to retrieve again (parts of) the server's configuration,
it may be interested to leverage the txid metadata it has
stored by requesting the server to prune the response so that it does
not repeat configuration data that the client is already aware of.</t>
          </dd>
          <dt>Configuration update with txid return:</dt>
          <dd>
            <t>When a client issues a transaction towards a server, it may be
interested to also learn the new txid metadata that the server
has stored for the updated parts of the configuration.</t>
          </dd>
          <dt>Conditional configuration change:</dt>
          <dd>
            <t>When a client issues a transaction towards a server, it may specify
txid metadata for the transaction in order to allow the server to
verify that the client is up to date with any changes in the parts of
the configuration that it is concerned with.  If the txid
metadata in the server is different than the client expected, the
server rejects the transaction with a specific error message.</t>
          </dd>
          <dt>Subscribe to configuration changes with txid return:</dt>
          <dd>
            <t>When a client subscribes to configuration change updates through
YANG-Push, it may be interested to also learn the updated txid
metadata for the changed data trees, and recognize the YANG-Push
echo of its own changes.</t>
          </dd>
          <dt>Compare datastores:</dt>
          <dd>
            <t>When a client compares datastores, it may be interested to get the
latest txid values of the nodes being compared.</t>
          </dd>
        </dl>
        <t>This chapter will also provide some details about how to handle the (or a) candidate datastore, dependencies within a transaction, and txid handling in a few other NETCONF operations (e.g. copy-config).</t>
      </section>
      <section anchor="sec-principles">
        <name>General Txid Principles</name>
        <t>All servers implementing a txid mechanism MUST maintain a top level
server side txid (s-txid) metadata value for each configuration datastore
supported by the server.
Txid mechanism implementations MAY also maintain txid
metadata values for nodes deeper in the YANG data tree.  The nodes
for which the server maintains txids are collectively referred to as
the "Versioned Nodes".</t>
        <t>Server implementations MAY use the YANG extension statement
ietf-netconf-txid:versioned-node to inform potential clients about
which YANG nodes the server maintains a txid value for.  Another way
to discover (a partial) set of Versioned Nodes is for a client to
request the current configuration with txids.  The returned
configuration will then have the Versioned Nodes decorated with their
txid values.</t>
        <t>Regardless of whether a server declares the Versioned Nodes or not,
the set of Versioned Nodes in the server's YANG tree MUST remain
constant, except at system redefining events, such as software upgrades
or entitlement (a.k.a. "license") installations or removals. If a
Versioned Node was allowed to change status to a non-Versioned Node
(or vice versa), the client would no longer be able to reason about
the change. The effective txid of some nodes would sometimes seem to
change even when no configuration change had taken place.</t>
        <t>The server returning txid values for the Versioned Nodes
MUST ensure that the txid values are changed every time there has
been a configuration change at or below the node associated with
the txid value.  This means any update of a config true node will
result in a new txid value for all ancestor Versioned Nodes, up
to and including the datastore root itself.</t>
        <t>This also means a server MUST update the txid value for any
nodes that change as a result of a configuration change, and their
ancestors, regardless
of source, even if the changed nodes are not explicitly part
of the change payload.  An example of this is dependent data under
YANG <xref target="RFC7950"/> "when" or "choice" statements.</t>
        <t>A server MUST NOT change the txid value of a versioned node
unless the node itself or a child node of that node has
been changed.  The server MUST NOT change any txid values due to
changes in config false data, or any kind of metadata that the
server may maintain for YANG data tree nodes.</t>
      </section>
      <section anchor="initial-configuration-retrieval">
        <name>Initial Configuration Retrieval</name>
        <t>When a NETCONF server receives a <tt>&lt;get-config&gt;</tt> or <tt>&lt;get-data&gt;</tt> request (<xref section="3.1.1" sectionFormat="of" target="RFC8526"/>)
containing requests for txid values, and assuming no authorization or validation error is encountered,  it MUST, in the reply, return
txid values for all Versioned Nodes below the point requested by
the client.</t>
        <t>The exact encoding varies by mechanism, but all txid mechanisms
would have a special "txid-request" txid value (e.g., "?") which is
guaranteed to never be used as a normal txid value.  Clients MAY use
this special txid value associated with one or more nodes in the
data tree to indicate to the server that they are interested in
txid values below that point of the data tree.</t>
        <figure anchor="fig-baseline">
          <name>Initial Configuration Retrieval.  The client annotated the get-config request itself with the txid request value, which makes the server return all txid values in the entire datastore, that also fall within the requested subtree filter.  The most recent change seems to have been an update to ace R8 and R9.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config (txid: ?)                          |
       |     acls                                        |
       |                                                 |
       |   <------------------------------------------   |
       |   data (txid: 5152)                             |
       |     acls (txid: 5152)                           |
       |       acl A1 (txid: 4711)                       |
       |         aces (txid: 4711)                       |
       |           ace R1 (txid: 4711)                   |
       |             matches ipv4 protocol 17            |
       |             actions forwarding accept           |
       |       acl A2 (txid: 5152)                       |
       |         aces (txid: 5152)                       |
       |           ace R7 (txid: 4711)                   |
       |             matches ipv4 dscp 10                |
       |             actions forwarding accept           |
       |           ace R8 (txid: 5152)                   |
       |             matches udp source-port port 22     |
       |             actions forwarding accept           |
       |           ace R9 (txid: 5152)                   |
       |             matches tcp source-port port 22     |
       |             actions forwarding accept           |
       v                                                 v
]]></artwork>
        </figure>
        <ul empty="true">
          <li>
            <t>The call flow examples in this document use a 4-digit,
strictly increasing integer as txid.  The same txid value
is also used for all changed nodes in a given transaction.
These conventions of the examples are convenient and enhances
readability of the examples, but do not necessarily
reflect a typical implementation.</t>
          </li>
        </ul>
        <t>Txid values are opaque strings that uniquely identify
a particular configuration state.  Servers are expected to know which
txid values it has used in the recent past, and in which order they
were assigned to configuration change transactions.  This information
is known as the server's Txid History.</t>
        <t>How many historical txid values to track is up to each server
implementor to decide, and a server MAY decide not to store any
historical txid values at all.  The more txid values in the server's
Txid History, the more efficient the client synchronization may be, as
described in the coming sections. Servers may expose a configuration parameter
to control the history depth. Such control depends on the local server capabilities.
Refer to <xref target="sec-histo-size"/> for more considerations about history size.</t>
        <t>Some server implementors may decide to use a strictly increasing
integer as the txid value or a timestamp.  Doing so obviously makes
it very easy for the server to determine the sequence of historical
transaction ids.</t>
        <t>Some server implementors may decide to use a completely different txid
value sequence, to the point that the sequence may appear completely
random to outside observers.</t>
      </section>
      <section anchor="subsequent-configuration-retrieval">
        <name>Subsequent Configuration Retrieval</name>
        <t>Clients MAY request the server to return txid values in the response
by adding one or more txid values received previously in <tt>&lt;get-config&gt;</tt> or
<tt>&lt;get-data&gt;</tt> requests.  Txid values sent by a client are referred to as
c-txid.</t>
        <t>When a client sends a c-txid value of a node that matches the
server's s-txid value for that Versioned Node, or matches a more recent
s-txid value in the server's Txid History,
the server prunes (i.e., does not return) that subtree from
the response.  Since the client already knows the txid for that part
of the data tree, or a txid that occurred more recently, it
is obviously already up to date with that part of the configuration.
Sending it again would be a waste of time and energy.</t>
        <t><xref target="tab-rules"/> describes in detail how the client side (c-txid) and
server side txid (s-txid) values are determined and compared when the
server processes each data tree reply node from a get-config or
get-data request.</t>
        <t>Servers MUST process each of the config true nodes as follows:</t>
        <table anchor="tab-rules">
          <name>The Txid rules for response pruning.</name>
          <thead>
            <tr>
              <th align="left">Case</th>
              <th align="left">Condition</th>
              <th align="left">Behavior</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">1. NO CLIENT TXID</td>
              <td align="left">In its request, the client did not specify a c-txid value for the current node, nor any ancestor of this node.</td>
              <td align="left">In this case, the server MUST return the current node according to the normal NETCONF specifications.  The rules below do not apply to the current node.  Any child nodes MUST also be evaluated with respect to these rules.</td>
            </tr>
            <tr>
              <td align="left">2. CLIENT ANCESTOR TXID</td>
              <td align="left">The client did not specify a c-txid value for the current node, but did specify a c-txid value for one or more ancestors of this node.</td>
              <td align="left">In this case, the current node MUST inherit the c-txid value of the closest ancestor node in the client's request that has a c-txid value.  Processing of the current node continues according to the rules below.</td>
            </tr>
            <tr>
              <td align="left">3. SERVER ANCESTOR TXID</td>
              <td align="left">The node is not a Versioned Node, i.e. the server does not maintain a s-txid value for this node.</td>
              <td align="left">In this case, the current node MUST, for the purposes of these rules, temporarily inherit the server's s-txid value of the closest ancestor that is a Versioned Node (has a server side s-txid value).  The datastore root is always a Versioned Node.  Processing of the current node continues according to the rules below.</td>
            </tr>
            <tr>
              <td align="left">4. CLIENT TXID UP TO DATE</td>
              <td align="left">The client specified c-txid for the current node value is "up to date", i.e. it matches the server's s-txid value, or matches a s-txid value from the server's Txid History that is more recent than the server's s-txid value for this node.</td>
              <td align="left">In this case the server MUST return the node decorated with a special "txid-match" txid value (e.g. "=") to the matching node, pruning any value and child nodes.</td>
            </tr>
            <tr>
              <td align="left">5. CLIENT TXID OUT OF DATE</td>
              <td align="left">The specified c-txid is "outdated" or "unknown" to the server, i.e. it does not match the server's s-txid value for this node, nor does the client c-txid value match any s-txid value in the server's Txid History that is more recent than the server's s-txid value for this node.</td>
              <td align="left">In this case the server MUST return the current node according to the normal NETCONF specifications.  If the current node is a Versioned Node, it MUST be decorated with the s-txid value.  Any child nodes MUST also be evaluated with respect to these rules.</td>
            </tr>
          </tbody>
        </table>
        <t>For list elements, pruning child nodes means that top-level
key nodes MUST be included in the response, and other child nodes
MUST NOT be included.  For containers, child nodes MUST NOT
be included.</t>
        <section anchor="when-there-is-no-change">
          <name>When there is No Change</name>
          <t>Here follows a couple of examples of how the rules above are applied.
See <xref target="fig-baseline">the example above</xref> for the most recent server
configuration state that the client is aware of, before this happens:</t>
          <figure anchor="fig-pruning">
            <name>Response Pruning.  Client sends get-config request with known txid values.  Server prunes response where the c-txid matches expectations.  In this case, the server had no changes, and pruned the response at the earliest point offered by the client.</name>
            <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config                                    |
       |     acls (txid: 5152)                           |
       |       acl A1 (txid: 4711)                       |
       |         aces (txid: 4711)                       |
       |       acl A2 (txid: 5152)                       |
       |         aces (txid: 5152)                       |
       |                                                 |
       |   <------------------------------------------   |
       |   data                                          |
       |     acls (txid: =)                              |
       v                                                 v
]]></artwork>
          </figure>
          <t>In this case, the server's txid-based pruning saved a substantial
amount of information that is already known by the client to be sent
to and processed by the client.</t>
        </section>
        <section anchor="when-there-is-an-out-of-band-oob-change">
          <name>When there is an Out-Of-Band (OOB) Change</name>
          <t>In the following example someone has made a change to the
configuration on the server.  This server has chosen to implement
a Txid History with up to 5 entries.  The 5 most recently used
s-txid values on this example server are currently: 4711, 5152, 5550,
6614, 7770 (most recent).  Then a client sends this request:</t>
          <figure anchor="fig-oob-change">
            <name>Out of band change detected.  Client sends get-config request with known txid values.  Server provides updates only where changes have happened.  (Txid 7770 does not appear in this subtree, so that transaction must relate to some changes elsewhere.)</name>
            <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config                                    |
       |     acls (txid: 5152)                           |
       |       acl A1 (txid: 4711)                       |
       |       acl A2 (txid: 5152)                       |
       |                                                 |
       |   <------------------------------------------   |
       |   data                                          |
       |     acls (txid: 6614)                           |
       |       acl A1 (txid: =)                          |
       |       acl A2 (txid: 6614)                       |
       |         aces (txid: 6614)                       |
       |           ace R7 (txid: =)                      |
       |           ace R8 (txid: =)                      |
       |           ace R9 (txid: 6614)                   |
       |             matches tcp source-port port 830    |
       |             actions forwarding accept           |
       v                                                 v
]]></artwork>
          </figure>
          <t>In the example depicted in <xref target="fig-oob-change"/>, the server returns the acls container because
the client supplied c-txid value (5152) differs from the s-txid value
held by the server (6614), and 5152 is less recent in the server's
Txid History than 6614.  The client is apparently unaware of the
latest config developments in this part of the server config tree.</t>
          <t>The server prunes list entry acl A1 is because it has the same s-txid
value as the c-txid supplied by the client (4711). The server returns
the list entry acl A2 because 5152 (specified by the client) is less
recent than 6614 (held by the server).</t>
          <t>The container aces under acl A2 is returned because 5152 is less recent
than 6614. The server prunes ace R7 because the c-txid for this
node is 5152 (from acl A2), and 5152 is more recent than the closest
ancestor Versioned Node (with txid 4711).</t>
          <t>The server also prunes acl R8 because the server and client txids
exactly match (5152). Finally, acl R9 is returned because of its less
recent c-txid value given by the client (5152, on the closest ancestor
acl A2) than the s-txid held on the server (6614).</t>
        </section>
        <section anchor="when-a-txid-value-is-inherited-from-an-ancestor-node">
          <name>When a Txid value is Inherited from an Ancestor Node</name>
          <t>In the example shown in <xref target="fig-vn"/>, the client specifies the c-txid for a node that
the server does not maintain a s-txid for, i.e., it is not a
Versioned Node.</t>
          <figure anchor="fig-vn">
            <name>Versioned Nodes.  Server lookup of dscp txid gives 4711, as closest ancestor is ace R7 with txid 4711.  Since the server's and client's txid match, the txid value is '=', and the leaf value is pruned.</name>
            <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config                                    |
       |     acls                                        |
       |       acls A2                                   |
       |         aces                                    |
       |           ace R7                                |
       |             matches                             |
       |               ipv4                              |
       |                 dscp (txid: 4711)               |
       |                                                 |
       |   <------------------------------------------   |
       |   data                                          |
       |     acls                                        |
       |       acl A2                                    |
       |         aces                                    |
       |           ace R7                                |
       |             matches                             |
       |               ipv4                              |
       |                 dscp (txid: =)                  |
       v                                                 v
]]></artwork>
          </figure>
          <t>Here, the server looks up the closest ancestor node that is a
Versioned Node.  This particular server has chosen to keep a s-txid
for the list entry ace R7, but not for any of its children.  Thus
the server finds the server side s-txid value to be 4711 (from ace R7),
which matches the client's c-txid value of 4711.</t>
          <t>Servers MUST NOT use the special txid values, txid-match,
txid-request, txid-unknown (e.g., "=", "?", or "!") as actual
txid values.</t>
        </section>
      </section>
      <section anchor="candidate-datastore-configuration-retrieval">
        <name>Candidate Datastore Configuration Retrieval</name>
        <t>When a client retrieves the configuration from the (or a) candidate
datastore, some of the configuration nodes may hold the same data as
the corresponding node in the running datastore.  In such cases, the
server MUST return the same s-txid value for nodes in the candidate
datastore as in the running datastore.</t>
        <t>If a node in the candidate datastore holds different data than in the
running datastore, the server has a choice of what to return:</t>
        <ul spacing="normal">
          <li>
            <t>The server MAY return a txid-unknown value (e.g., "!").  This may
  be convenient in servers that do not know a priori what txids will
  be used in a future, possible commit of the candidate.</t>
          </li>
          <li>
            <t>If the txid-unknown value is not returned, the server MUST return
  the s-txid value the node will have after commit, assuming the client
  makes no further changes of the candidate datastore.  If a client
  makes further changes in the candidate datastore, the s-txid value
  MAY change again, i.e. the server is not required to stick with the
  s-txid value just returned.</t>
          </li>
        </ul>
        <t>See the example in
<xref target="candidate-datastore-transactions">Candidate Datastore Transactions</xref>.</t>
      </section>
      <section anchor="conditional-transactions">
        <name>Conditional Transactions</name>
        <t>Conditional transactions are useful when a client is interested
to make a configuration change, being sure that relevant parts of
the server configuration have not changed since the client last
inspected it.</t>
        <t>By supplying the latest c-txid values known to the client
in its change requests (<tt>&lt;edit-config&gt;</tt>, for example), it can request the server
to reject the transaction in case any relevant changes have occurred
at the server that the client is not yet aware of.</t>
        <t>This allows a client to reliably compute and send configuration
changes to a server without either acquiring a global datastore lock
for a potentially extended period of time, or risk that a change
from another client disrupts the intent in the time window between a
read (<tt>&lt;get-config&gt;</tt>, for example) and write (<tt>&lt;edit-config&gt;</tt>, for example) operation.</t>
        <t>Clients that are also interested to know the s-txid assigned to the
root Versioned Node in the model immediately in the
response could set a flag in the <tt>&lt;rpc&gt;</tt> element to request the server
to return the new s-txid with the <tt>&lt;ok&gt;</tt> element.</t>
        <figure anchor="base-edit-config">
          <name>Conditional transaction towards the Running datastore successfully executed.  As all the txid values specified by the client matched those on the server, the transaction was successfully executed.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   edit-config (request new txid in response)    |
       |     config (txid: 5152)                         |
       |       acls (txid: 5152)                         |
       |         acl A1 (txid: 4711)                     |
       |           aces (txid: 4711)                     |
       |             ace R1 (txid: 4711)                 |
       |               matches ipv4 protocol 6           |
       |               actions forwarding accept         |
       |                                                 |
       |   <------------------------------------------   |
       |   ok (txid: 7688)                               |
       v                                                 v
]]></artwork>
        </figure>
        <t>After the above edit-config, the client might issue a get-config to
observe the change.  It would look like this:</t>
        <figure anchor="fig-updated-all">
          <name>The txids are updated on all Versioned Nodes that were modified themselves or have a child node that was modified.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config                                    |
       |     acls (txid: ?)                              |
       |                                                 |
       |   <------------------------------------------   |
       |   data                                          |
       |     acls (txid: 7688)                           |
       |       acl A1 (txid: 7688)                       |
       |         aces (txid: 7688)                       |
       |           ace R1 (txid: 7688)                   |
       |             matches ipv4 protocol 6             |
       |             actions forwarding accept           |
       |       acl A2 (txid: 6614)                       |
       |         aces (txid: 6614)                       |
       |           ace R7 (txid: 4711)                   |
       |             matches ipv4 dscp 10                |
       |             actions forwarding accept           |
       |           ace R8 (txid: 5152)                   |
       |             matches udp source-port port 22     |
       |             actions forwarding accept           |
       |           ace R9 (txid: 6614)                   |
       |             matches tcp source-port port 830    |
       |             actions forwarding accept           |
       v                                                 v
]]></artwork>
        </figure>
        <t>When a client sends in a c-txid value of a node, the server MUST consider it a match if the server's s-txid value is identical to the client, or if the server's value is found earlier in the server's Txid History than the value supplied by the client.</t>
        <section anchor="error-response-on-out-of-band-changes">
          <name>Error Response on Out-of-Band Changes</name>
          <t>If the server rejects the transaction because one or more of the
configuration s-txid value(s) differs from the client's expectation,
the server MUST return at least one <tt>&lt;rpc-error&gt;</tt> with the following
values:</t>
          <artwork><![CDATA[
   error-tag:      operation-failed
   error-type:     protocol
   error-severity: error
]]></artwork>
          <t>Additionally, the error-info tag MUST contain an sx:structure <xref target="RFC8791"/>
containing relevant details about one of the mismatching txids.
A server MAY send multiple rpc-errors when multiple txid mismatches
are detected.</t>
          <figure anchor="fig-cond-fails">
            <name>Conditional transaction that fails a txid check.  The client wishes to ensure there has been no changes to the particular acl entry it edits, and therefore sends the c-txid it knows for this part of the configuration.  Since the s-txid has changed (out of band), the server rejects the configuration change request and reports an error with details about where the mismatch was detected.</name>
            <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   edit-config                                   |
       |     config                                      |
       |       acls                                      |
       |         acl A1 (txid: 4711)                     |
       |           aces (txid: 4711)                     |
       |             ace R1 (txid: 4711)                 |
       |               matches ipv4 dscp 20              |
       |               actions forwarding accept         |
       |                                                 |
       |   <------------------------------------------   |
       |   rpc-error                                     |
       |     error-tag       operation-failed            |
       |     error-type      protocol                    |
       |     error-severity  error                       |
       |     error-info                                  |
       |       mismatch-path /acls/acl[A1]               |
       |       mismatch-etag-value 6912                  |
       v                                                 v
]]></artwork>
          </figure>
        </section>
        <section anchor="sec-histo-size">
          <name>Txid History Size Consideration</name>
          <t>It may be tempting for a client implementor to send a single
c-txid value for the tree being edited.  In many cases, that
would certainly work just fine.  This is a way for the client to
request the server to go ahead with the change as long as there
has not been any changes more recent in the subtree below the
c-txid provided.</t>
          <t>Here the client is sending the same change as in
<xref target="base-edit-config">the example above</xref>, but with only a single
c-txid value that reflects the latest txid the client is
aware of anywhere in the configuration.</t>
          <figure>
            <name>Conditional transaction towards the Running datastore successfully executed.  As all the c-txid values specified by the client were the same or more recent in the server's Txid History, so the transaction was successfully executed.</name>
            <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   edit-config (request new txid in response)    |
       |     config                                      |
       |       acls                                      |
       |         acl A1 (txid: 8602)                     |
       |           aces                                  |
       |             ace R1                              |
       |               matches ipv4 protocol 6           |
       |               actions forwarding accept         |
       |                                                 |
       |   <------------------------------------------   |
       |   ok (txid: 9009)                               |
       v                                                 v
]]></artwork>
          </figure>
          <t>This approach works well in the example above because the c-txid
value 8602 is inherited down in the child nodes, from acl A1 to aces,
ace R1, and onwards. The server compares the c-txid value 8602
with the s-txid value in the data tree.  The server finds that the
values do not match (e.g., s-txid 7688 for ace R1 is not equal to
c-txid 8602), but finds that 8602 is a more recent txid than 7688
by looking in the server's Txid History, and therefore accepts the
transaction.</t>
          <t>Clients relying on the server's Txid History being long enough,
could see their changes rejected if some of the s-txid have
fallen out of the server's Txid History (e.g., if the txid 7688
happened so long ago that the it is no longer in the server's
Txid History).  Some servers may have a Txid History size of zero.
A client specifying a single c-txid value for a change like the one
above towards such a server would not be able to get the transaction
accepted.</t>
          <t>Choosing a Txid History size greater than zero in a server is an
optimization allowing clients to be less explicit, saving both on
communications and processing. Servers implementing a Txid Mechanism
using txid values with a natural order (e.g. strictly increasing
integers or timestamps) may be able to implement an infinite history
very easily. Other schemes might need to store recently used txids in
a database.</t>
          <t>It is RECOMMENDED that server implementors that implement Txid History
at all choose a Txid History size that is at least large enough to
hold twice as many txids as this type of server normally experiences
between the typical connection interval by clients, and not less than
100. In a server near the core of a network, the number of transactions
would often be high, but the connection interval by clients typically
short. Servers closer to the edge might see fewer transactions, but
also be visited by clients less often.</t>
        </section>
      </section>
      <section anchor="candidate-datastore-transactions">
        <name>Candidate Datastore Transactions</name>
        <t>When using the (or a) Candidate datastore, the txid validation
happens at commit time, rather than at individual edit-config or
edit-data operations.  Clients add their c-txid attributes to the
configuration payload the same way.  In case a client specifies
different c-txid values for the same element in successive edit-config
or edit-data operations, the c-txid value specified last MUST be used
by the server at commit time.</t>
        <figure>
          <name>Conditional transaction towards the Candidate datastore successfully executed.  As all the c-txid values specified by the client matched those on the server at the time of the commit, the transaction was successfully executed.  If a client issues a get-config towards the candidate datastore, the server may choose to return the special txid-unknown value (e.g., "!") or the s-txid value that would be used if the candidate was committed without further changes (when that s-txid value is known in advance by the server).</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   edit-config (operation: merge)                |
       |     config (txid: 5152)                         |
       |       acls (txid: 5152)                         |
       |         acl A1 (txid: 4711)                     |
       |           type ipv4                             |
       |                                                 |
       |   <------------------------------------------   |
       |   ok                                            |
       |                                                 |
       |   ------------------------------------------>   |
       |   edit-config (operation: merge)                |
       |     config                                      |
       |       acls                                      |
       |         acl A1                                  |
       |           aces (txid: 4711)                     |
       |             ace R1 (txid: 4711)                 |
       |               matches ipv4 protocol 6           |
       |               actions forwarding accept         |
       |                                                 |
       |   <------------------------------------------   |
       |   ok                                            |
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config                                    |
       |     config                                      |
       |       acls                                      |
       |         acl A1                                  |
       |           aces (txid: ?)                        |
       |                                                 |
       |   <------------------------------------------   |
       |     config                                      |
       |       acls                                      |
       |         acl A1                                  |
       |           aces (txid: 7688  or !)               |
       |             ace R1 (txid: 7688 or !)            |
       |               matches ipv4 protocol 6           |
       |               actions forwarding accept         |
       |             ace R2 (txid: 2219)                 |
       |               matches ipv4 dscp 21              |
       |               actions forwarding accept         |
       |                                                 |
       |   ------------------------------------------>   |
       |   commit (request new txid in response)         |
       |                                                 |
       |   <------------------------------------------   |
       |   ok (txid: 7688)                               |
       v                                                 v
]]></artwork>
        </figure>
      </section>
      <section anchor="dependencies-within-transactions">
        <name>Dependencies within Transactions</name>
        <t>YANG modules that contain 'when' statements referencing remote
parts of the model will cause the s-txid to change even in parts of the
data tree that were not modified directly.</t>
        <t>Let's say there is an energy-example.yang module that defines a
mechanism for clients to request the server to measure the amount of
energy that is consumed by a given access control rule.  The
"energy-example" module augments the access control module as follows:</t>
        <sourcecode type="yang"><![CDATA[
module energy-example {
...

  container energy {
    leaf metering-enabled {
      type boolean;
      default false;
    }
  }

  augment /acl:acls/acl:acl {
    when /energy-example:energy/energy-example:metering-enabled;
    leaf energy-tracing {
      type boolean;
      default false;
    }
    leaf energy-consumption {
      config false;
      type uint64;
      units J;
    }
  }
}
]]></sourcecode>
        <t>This means there is a system wide switch leaf metering-enabled in
energy-example which disables all energy measurements in the system when
set to false, and that there is a boolean leaf energy-tracing that
controls whether energy measurement is happening for each acl rule
individually.</t>
        <t>In this example, we have an initial configuration like this:</t>
        <figure>
          <name>Initial configuration for the energy example.  Note the energy metering-enabled leaf at the top and energy-tracing leafs under each acl.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config                                    |
       |     energy (txid: ?)                            |
       |     acls (txid: ?)                              |
       |                                                 |
       |   <------------------------------------------   |
       |   data (txid: 7688)                             |
       |     energy metering-enabled true (txid: 4711)   |
       |     acls (txid: 7688)                           |
       |       acl A1 (txid: 7688)                       |
       |         energy-tracing false                    |
       |         aces (txid: 7688)                       |
       |           ace R1 (txid: 7688)                   |
       |             matches ipv4 protocol 6             |
       |             actions forwarding accept           |
       |       acl A2 (txid: 6614)                       |
       |         energy-tracing true                     |
       |         aces (txid: 6614)                       |
       |           ace R7 (txid: 4711)                   |
       |             matches ipv4 dscp 10                |
       |             actions forwarding accept           |
       |           ace R8 (txid: 5152)                   |
       |             matches udp source-port port 22     |
       |             actions forwarding accept           |
       |           ace R9 (txid: 6614)                   |
       |             matches tcp source-port port 830    |
       |             actions forwarding accept           |
       v                                                 v
]]></artwork>
        </figure>
        <t>At this point, a client updates metering-enabled to false.  This causes
the when-expression on energy-tracing to turn false, removing the leaf
entirely.  This counts as a configuration change, and the s-txid must
be updated appropriately.</t>
        <figure>
          <name>Transaction changing a single leaf.  This leaf is the target of a when-statement, however, which means other leafs elsewhere may be indirectly modified by this change.  Such indirect changes will also result in s-txid changes.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   edit-config (request new txid in response)    |
       |     config                                      |
       |       energy metering-enabled false             |
       |                                                 |
       |   <------------------------------------------   |
       |   ok (txid: 9118)                               |
       v                                                 v
]]></artwork>
        </figure>
        <t>After the transaction above, the new configuration state has the
energy-tracing leafs removed.  Every such removal or (re)introduction
of a node counts as a configuration change from a txid perspective,
regardless of whether the change has any net configuration change
effect in the server.</t>
        <figure>
          <name>The txid for the energy subtree has changed since that was the target of the edit-config.  The txids of the ACLs have also changed since the energy-tracing leafs are now removed by the now false when-expression.  Both acl A1 and acl A2 have their txids updated, even though energy-tracing was already false for acl A1.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config                                    |
       |     energy (txid: ?)                            |
       |     acls (txid: ?)                              |
       |                                                 |
       |   <------------------------------------------   |
       |   data (txid: 9118)                             |
       |     energy metering-enabled false (txid: 9118)  |
       |     acls (txid: 9118)                           |
       |       acl A1 (txid: 9118)                       |
       |         aces (txid: 7688)                       |
       |           ace R1 (txid: 7688)                   |
       |             matches ipv4 protocol 6             |
       |             actions forwarding accept           |
       |       acl A2 (txid: 9118)                       |
       |         aces (txid: 6614)                       |
       |           ace R7 (txid: 4711)                   |
       |             matches ipv4 dscp 10                |
       |             actions forwarding accept           |
       |           ace R8 (txid: 5152)                   |
       |             matches udp source-port port 22     |
       |             actions forwarding accept           |
       |           ace R9 (txid: 6614)                   |
       |             matches tcp source-port port 830    |
       |             actions forwarding accept           |
       v                                                 v
]]></artwork>
        </figure>
      </section>
      <section anchor="other-netconf-operations">
        <name>Other NETCONF Operations</name>
        <dl>
          <dt><tt>&lt;discard-changes&gt;</tt>:</dt>
          <dd>
            <t>The <tt>&lt;discard-changes&gt;</tt> operation resets the candidate datastore to the
contents of the running datastore.  The server MUST ensure the
txid values in the candidate datastore get the same txid values
as in the running datastore when this operation runs.</t>
          </dd>
          <dt><tt>&lt;copy-config&gt;</tt>:</dt>
          <dd>
            <t>The <tt>&lt;copy-config&gt;</tt> operation can be used to copy contents between
datastores.  The server MUST ensure the txid values are retained
and changed as if the data being copied had been sent in through an
edit-config operation.</t>
          </dd>
          <dt><tt>&lt;delete-config&gt;</tt>:</dt>
          <dd>
            <t>The server MUST ensure the datastore txid value is changed, unless it
was already empty.</t>
          </dd>
          <dt><tt>&lt;commit&gt;</tt>:</dt>
          <dd>
            <t>At commit, with regards to the txid values, the server MUST
treat the contents of the candidate datastore as if any txid
value provided by the client when updating the candidate was provided
in a single edit-config towards the running datastore.  If the
transaction is rejected due to txid value mismatch,
an rpc-error as described in section
<xref target="conditional-transactions">Conditional Transactions</xref> MUST be sent.</t>
          </dd>
        </dl>
      </section>
      <section anchor="yang-push-subscriptions">
        <name>YANG-Push Subscriptions</name>
        <t>A client issuing a YANG-Push establish-subscription or
modify-subscription request or configuring a YANG-Push subscription
towards a server that supports
ietf-netconf-txid-yang-push.yang MAY request that the server
provides updated txid values in YANG-Push on-change subscription
updates.</t>
        <t>This functionality pertains only to on-change updates.  This RPC may
also be invoked over RESTCONF or other protocols, and might
therefore be encoded in JSON.</t>
        <t>To request txid values (e.g. etag), the client adds a flag in the
request (e.g., with-etag).  The server then returns the txid
(e.g., etag) value in the yang-patch payload (e.g., as etag-value).</t>
        <figure>
          <name>A client requests a YANG-Push subscription for a given path with txid value included.  When the server delivers a push-change-update notification, the txid value pertaining to the entire patch is included.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   rpc                                           |
       |     establish-subscription                      |
       |       datastore running                         |
       |       datastore-xpath-filter /acls              |
       |       on-change                                 |
       |       with-etag true                            |
       |                                                 |
       |   <------------------------------------------   |
       |   ok                                            |
       |                                                 |
       |   <------------------------------------------   |
       |   notification                                  |
       |     eventTime 2022-04-04T06:00:24.16Z           |
       |     push-change-update                          |
       |       id 89                                     |
       |       datastore-changes                         |
       |         yang-patch                              |
       |           patch-id 0                            |
       |           edit                                  |
       |             edit-id edit1                       |
       |             operation delete                    |
       |             target /acls/acl[A1]                |
       |           edit                                  |
       |             edit-id edit2                       |
       |             operation merge                     |
       |             target /acls/acl[A2]/ace[R7]        |
       |               value                             |
       |                 matches ipv4 dscp 10            |
       |                 actions forwarding accept       |
       |           etag-value 8008                       |
       |                                                 |
       v                                                 v
]]></artwork>
        </figure>
      </section>
      <section anchor="comparing-yang-datastores">
        <name>Comparing YANG Datastores</name>
        <t>A client issuing an NMDA Datastore compare request towards a server
that supports ietf-netconf-txid-nmda-compare.yang MAY request that
the server provides updated txid values in the compare reply.
Besides NETCONF, this RPC may also be invoked over RESTCONF or other
protocols, and might therefore be encoded in JSON.</t>
        <t>To request txid values (e.g. etag), the client adds a flag in the
request (e.g. with-etag).  The server then returns the txid
(e.g. etag) value in the yang-patch payload (e.g. as etag-value).</t>
        <t>The txid value returned by the server MUST be the txid value
pertaining to the target node in the source or target datastores
that is the most recent.  If one of the datastores being
compared is not a configuration datastore, the txid in the
configuration datastore MUST be used.  If none of the datastores
being compared are a configuration datastore, then txid values
MUST NOT be returned at all.</t>
        <t>The txid to return is the one that pertains to the target node, or
in the case of delete, the closest surviving ancestor of the target
node.</t>
        <figure>
          <name>A client requests a NMDA Datastore compare for a given path with txid values included. When the server delivers the reply, the txid is included for each edit.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   rpc                                           |
       |     compare                                     |
       |       source ds:running                         |
       |       target ds:operational                     |
       |       with-etag true                            |
       |                                                 |
       |   <------------------------------------------   |
       |   differences                                   |
       |     yang-patch                                  |
       |       patch-id 0                                |
       |       edit                                      |
       |         edit-id edit1                           |
       |         operation delete                        |
       |         target /acls/acl[A1]                    |
       |         etag-value 8008                         |
       |       edit                                      |
       |         edit-id edit2                           |
       |         operation merge                         |
       |         target /acls/acl[A2]/ace[R7]            |
       |           value                                 |
       |             matches ipv4 dscp 10                |
       |             actions forwarding accept           |
       |         etag-value 8008                         |
       |                                                 |
       v                                                 v
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="txid-mechanisms">
      <name>Txid Mechanisms</name>
      <t>This document defines two txid mechanisms:</t>
      <ul spacing="normal">
        <li>
          <t>The etag attribute txid mechanism (<xref target="sec-etag"/>)</t>
        </li>
        <li>
          <t>The last-modified attribute txid mechanism (<xref target="sec-lm"/>)</t>
        </li>
      </ul>
      <t>Servers implementing this specification MUST support the etag
attribute txid mechanism and MAY support the last-modified
attribute txid mechanism.</t>
      <t>Section <xref target="netconf-txid-extension">NETCONF Txid Extension</xref> describes
the logic that governs all txid mechanisms.  This section describes
the mapping from the generic logic to specific mechanism and encoding.</t>
      <t>If a client uses more than one txid mechanism, such as both etag and
last-modified in a particular message to a server, or particular
commit, the result is undefined.</t>
      <section anchor="sec-etag">
        <name>The ETag Attribute txid Mechanism</name>
        <t>The etag txid mechanism described in this section is centered around
a meta data XML attribute called "etag".  The etag attribute is
defined in the namespace "urn:ietf:params:xml:ns:netconf:txid:1.0".
The etag attribute is added to XML elements in the NETCONF payload
in order to indicate the txid value for the YANG node represented by
the element.</t>
        <t>NETCONF servers that support this extension MUST announce the
capability "urn:ietf:params:netconf:capability:txid:etag:1.0".</t>
        <t>The etag attribute values are opaque strings chosen freely.  They MUST
consist of ASCII printable characters (VCHAR), except that the etag
string MUST NOT contain space, backslash or double quotes. The point of
these restrictions is to make it easy to reuse implementations that
adhere to section 8.8.3.1 in <xref target="RFC9110"/>.  The probability
SHOULD be made very low that an etag value that has been used
historically by a server is used again by that server if the
configuration is different.</t>
        <t>It is RECOMMENDED that the same etag txid values are used across all
management interfaces (i.e. NETCONF, RESTCONF and any other the server
might implement), if it implements more than one.  It is RECOMMENDED
that the etag txid has an encoding specific suffix, especially when it
is not encoded in XML.  E.g. a response encoded in JSON might append
"+json" at the end of the etag value. This is in line with the language
in <xref target="RFC9110"/> and traditions in the HTTP world at large.</t>
        <t>The detailed rules for when to update the etag value are described in
<xref target="sec-principles"/>.  These
rules are chosen to be consistent with the ETag mechanism in
RESTCONF, specifically Sections <xref target="RFC8040" section="3.4.1.2" sectionFormat="bare"/>, <xref target="RFC8040" section="3.4.1.3" sectionFormat="bare"/> and <xref target="RFC8040" section="3.5.2" sectionFormat="bare"/> of <xref target="RFC8040"/>.</t>
      </section>
      <section anchor="sec-lm">
        <name>The Last-Modified Attribute txid Mechanism</name>
        <t>The last-modified txid mechanism described in this section is
centered around a meta data XML attribute called "last-modified".
The last-modified attribute is defined in the namespace
"urn:ietf:params:xml:ns:netconf:txid:1.0".  The last-modified
attribute is added to XML elements in the NETCONF payload in
order to indicate the txid value for the YANG node represented by
the element.</t>
        <t>NETCONF servers that support this extension MUST announce the
feature last-modified defined in ietf-netconf-txid.yang.</t>
        <t>The last-modified attribute values are yang:date-and-time values as
defined in ietf-yang-types.yang, <xref target="RFC6991"/>.</t>
        <t>"2022-04-01T12:34:56.123456Z" is an example of what this time stamp
format looks like.  Servers MUST ensure the timestamps provided are
strictly increasing for as long as the server's operation is
maintained.</t>
        <t>It is RECOMMENDED that the same last-modified txid values are used
across all management interfaces (i.e. NETCONF and any other the
server might implement), except RESTCONF.</t>
        <t>RESTCONF, as defined in
<xref target="RFC8040"/>,
is using a different format for the time stamps which is
limited to one second resolution.  Server implementors that support
the Last-Modified txid mechanism over both RESTCONF and other
management protocols are RECOMMENDED to use Last-Modified timestamps
that match the point in time referenced over RESTCONF, with the
fractional seconds part added.</t>
        <t>The detailed rules for when to update the last-modified value are
described in <xref target="sec-principles"/>.  These rules
are chosen to be consistent with the Last-Modified mechanism in
RESTCONF, <xref target="RFC8040"/>,
specifically sections 3.4.1.1, 3.4.1.3 and 3.5.1.</t>
      </section>
      <section anchor="common-features-to-both-etag-and-last-modified-txid-mechanisms">
        <name>Common features to both etag and last-modified txid mechanisms</name>
        <t>Clients MAY add etag or last-modified attributes to zero or
more individual elements in the get-config or get-data filter, in
which case they pertain to the subtree(s) rooted at the element(s)
with the attributes.</t>
        <t>Clients MAY also add such attributes directly to the get-config or
get-data tags (e.g. if there is no filter), in which case it
pertains to the txid value of the datastore root.</t>
        <t>Clients might wish to send a txid value that is guaranteed to never
match a server constructed txid.  With both the etag and
last-modified txid mechanisms, such a txid-request value is "?".</t>
        <t>Clients MAY add etag or last-modified attributes to the payload
of edit-config or edit-data requests, in which case they indicate
the client's txid value of that element.</t>
        <t>Clients MAY request servers that also implement YANG-Push to return
configuration change subscription updates with etag or
last-modified txid attributes.  The client requests this service by
adding a with-etag or with-last-modified flag with the value 'true'
to the subscription request or yang-push configuration.  The server
MUST then return such txids on the YANG Patch edit tag and to the
child elements of the value tag.  The txid attribute on the edit tag
reflects the txid associated with the changes encoded in this edit
section, as well as parent nodes.  Later edit sections in the same
push-update or push-change-update may still supersede the txid value
for some or all of the nodes in the current edit section.</t>
        <t>Servers returning txid values in get-config, edit-config, get-data,
edit-data and commit operations MUST do so by adding etag and/or
last-modified txid attributes to the data and ok tags.  When
servers prune output due to a matching txid value, the server
MUST add a txid-match attribute to the pruned element, and MUST set
the attribute value to "=", and MUST NOT send any element value.</t>
        <t>Servers returning a txid mismatch error MUST return an rpc-error
as defined in section
<xref target="conditional-transactions">Conditional Transactions</xref> with an
error-info tag containing a txid-value-mismatch-error-info
structure.</t>
        <section anchor="candidate-datastore">
          <name>Candidate Datastore</name>
          <t>When servers return txid values in get-config and get-data operations
towards the candidate datastore, the txid values returned MUST adhere
to the following rules:</t>
          <ul spacing="normal">
            <li>
              <t>If the versioned node holds the same data as in the running
datastore, the same txid value as the versioned node in running
MUST be used.</t>
            </li>
            <li>
              <t>If the versioned node is different in the candidate store
than in the running datastore, the server has a choice of what
to return. The server MAY return the special "txid-unknown" value "!".
If the txid-unknown value is not returned, the server MUST return
the txid value the versioned node will have if the client decides to
commit the candidate datastore without further updates.</t>
            </li>
          </ul>
        </section>
        <section anchor="namespaces-and-attribute-placement">
          <name>Namespaces and Attribute Placement</name>
          <t>The txid attributes are valid on the following NETCONF tags,
where xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" <xref target="RFC4741"/> <xref target="RFC6241"/>,
xmlns:ncds="urn:ietf:params:xml:ns:yang:ietf-netconf-nmda" <xref target="RFC8526"/>,
xmlns:sn="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications" <xref target="RFC8639"/>,
xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-push" <xref target="RFC8641"/> <xref target="RFC8072"/>:</t>
          <t>In client messages sent to a server:</t>
          <ul spacing="normal">
            <li>
              <t>/nc:rpc/nc:get-config</t>
            </li>
            <li>
              <t>/nc:rpc/nc:get-config/nc:filter//*</t>
            </li>
            <li>
              <t>/nc:rpc/ncds:get-data</t>
            </li>
            <li>
              <t>/nc:rpc/ncds:get-data/ncds:subtree-filter//*</t>
            </li>
            <li>
              <t>/nc:rpc/ncds:get-data/ncds:xpath-filter//*</t>
            </li>
            <li>
              <t>/nc:rpc/nc:edit-config/nc:config</t>
            </li>
            <li>
              <t>/nc:rpc/nc:edit-config/nc:config//*</t>
            </li>
            <li>
              <t>/nc:rpc/ncds:edit-data/ncds:config</t>
            </li>
            <li>
              <t>/nc:rpc/ncds:edit-data/ncds:config//*</t>
            </li>
          </ul>
          <t>In server messages sent to a client:</t>
          <ul spacing="normal">
            <li>
              <t>/nc:rpc-reply/nc:data</t>
            </li>
            <li>
              <t>/nc:rpc-reply/nc:data//*</t>
            </li>
            <li>
              <t>/nc:rpc-reply/ncds:data</t>
            </li>
            <li>
              <t>/nc:rpc-reply/ncds:data//*</t>
            </li>
            <li>
              <t>/nc:rpc-reply/nc:ok</t>
            </li>
            <li>
              <t>/yp:push-update/yp:datastore-contents/yp:yang-patch/
yp:edit</t>
            </li>
            <li>
              <t>/yp:push-update/yp:datastore-contents/yp:yang-patch/
yp:edit/yp:value//*</t>
            </li>
            <li>
              <t>/yp:push-change-update/yp:datastore-contents/yp:yang-patch/
yp:edit</t>
            </li>
            <li>
              <t>/yp:push-change-update/yp:datastore-contents/yp:yang-patch/
yp:edit/yp:value//*</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="txid-mechanism-examples">
      <name>Txid Mechanism Examples</name>
      <section anchor="initial-configuration-response">
        <name>Initial Configuration Response</name>
        <section anchor="with-etag">
          <name>With etag</name>
          <t>To retrieve etag attributes across the entire NETCONF server
configuration, a client might send:</t>
          <sourcecode type="xml"><![CDATA[
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1"
     xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <get-config txid:etag="?">
    <source>
      <running/>
    </source>
  </get-config>
</rpc>
]]></sourcecode>
          <t>The server's reply might then be:</t>
          <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="1"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data txid:etag="fd6a52d9-5152-411c-a117-b99d3b723c93">
    <acls xmlns=
            "urn:ietf:params:xml:ns:yang:ietf-access-control-list"
          txid:etag="fd6a52d9-5152-411c-a117-b99d3b723c93">
      <acl txid:etag="2c4b50e4-4711-49f8-a2b2-2e20aebe120f">
        <name>A1</name>
        <aces txid:etag="2c4b50e4-4711-49f8-a2b2-2e20aebe120f">
          <ace txid:etag="2c4b50e4-4711-49f8-a2b2-2e20aebe120f">
            <name>R1</name>
            <matches>
              <ipv4>
                <protocol>17</protocol>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
      ...
    </acls>
    ...
  </data>
</rpc-reply>
]]></sourcecode>
          <t>It is up to the server implementor to decide on the format of the
etag txid value.  In the example above, the server used "random"
UUIDv4 values <xref target="RFC9562"/>.  This is one valid implementation choice.</t>
          <t>For the etag txid examples below, we have chosen to use an etag txid
value consisting of "nc" (or "cli" in some cases) followed by a
strictly increasing integer.  This is another valid implementation
choice.  This format is convenient for the reader trying to make
sense of the examples, but is not an implementation requirement.</t>
          <t>Clients have to be prepared to receive etag txid values in different
formats.</t>
          <t>Repeating the example above, but now with a server returning more
human readable etag txid values, the server's reply might be:</t>
          <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="1"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data txid:etag="nc5152">
    <acls xmlns=
            "urn:ietf:params:xml:ns:yang:ietf-access-control-list"
          txid:etag="nc5152">
      <acl txid:etag="nc4711">
        <name>A1</name>
        <aces txid:etag="nc4711">
          <ace txid:etag="nc4711">
            <name>R1</name>
            <matches>
              <ipv4>
                <protocol>17</protocol>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
      <acl txid:etag="nc5152">
        <name>A2</name>
        <aces txid:etag="nc5152">
          <ace txid:etag="nc4711">
            <name>R7</name>
            <matches>
              <ipv4>
                <dscp>10</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc5152">
            <name>R8</name>
            <matches>
              <udp>
                <source-port>
                  <port>22</port>
                </source-port>
              </udp>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc5152">
            <name>R9</name>
            <matches>
              <tcp>
                <source-port>
                  <port>22</port>
                </source-port>
              </tcp>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
    <nacm xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-acm"
          txid:etag="nc3072">
      <groups txid:etag="nc3072">
        <group txid:etag="nc3072">
          <name>admin</name>
          <user-name>sakura</user-name>
          <user-name>joe</user-name>
        </group>
      </groups>
    </nacm>
  </data>
</rpc-reply>
]]></sourcecode>
          <t>To retrieve etag attributes for a specific ACL using an xpath
filter, a client might send:</t>
          <sourcecode type="xml"><![CDATA[
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="2"
     xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <get-config>
    <source>
      <running/>
    </source>
    <filter type="xpath"
      xmlns:acl=
        "urn:ietf:params:xml:ns:yang:ietf-access-control-list"
      select="/acl:acls/acl:acl[acl:name='A1']"
      txid:etag="?"/>
  </get-config>
</rpc>
]]></sourcecode>
          <t>To retrieve etag attributes for "acls", but not for "nacm",
a client might send:</t>
          <sourcecode type="xml"><![CDATA[
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="3"
     xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <get-config>
    <source>
      <running/>
    </source>
    <filter>
      <acls
        xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
        txid:etag="?"/>
      <nacm xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-acm"/>
    </filter>
  </get-config>
</rpc>
]]></sourcecode>
          <t>If the server considers "acls", "acl", "aces" and "acl" to be
Versioned Nodes, the server's response to the request above
might look like:</t>
          <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="3"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls xmlns=
            "urn:ietf:params:xml:ns:yang:ietf-access-control-list"
          txid:etag="nc5152">
      <acl txid:etag="nc4711">
        <name>A1</name>
        <aces txid:etag="nc4711">
          <ace txid:etag="nc4711">
            <name>R1</name>
            <matches>
              <ipv4>
                <protocol>17</protocol>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
      <acl txid:etag="nc5152">
        <name>A2</name>
        <aces txid:etag="nc5152">
          <ace txid:etag="nc4711">
            <name>R7</name>
            <matches>
              <ipv4>
                <dscp>10</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc5152">
            <name>R8</name>
            <matches>
              <udp>
                <source-port>
                  <port>22</port>
                </source-port>
              </udp>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc5152">
            <name>R9</name>
            <matches>
              <tcp>
                <source-port>
                  <port>22</port>
                </source-port>
              </tcp>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
    <nacm xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-acm">
      <groups>
        <group>
          <name>admin</name>
          <user-name>sakura</user-name>
          <user-name>joe</user-name>
        </group>
      </groups>
    </nacm>
  </data>
</rpc-reply>
]]></sourcecode>
        </section>
        <section anchor="with-last-modified">
          <name>With last-modified</name>
          <t>To retrieve last-modified attributes for "acls", but not for "nacm",
a client might send:</t>
          <sourcecode type="xml"><![CDATA[
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"
     xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <get-config>
    <source>
      <running/>
    </source>
    <filter>
      <acls
        xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
        txid:last-modified="?"/>
      <nacm xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-acm"/>
    </filter>
  </get-config>
</rpc>
]]></sourcecode>
          <t>If the server considers "acls", "acl", "aces" and "acl" to be
Versioned Nodes, the server's response to the request above
might look like:</t>
          <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="4"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
      txid:last-modified="2022-04-01T12:34:56.789012Z">
      <acl txid:last-modified="2022-03-20T16:20:11.333444Z">
        <name>A1</name>
        <aces txid:last-modified="2022-03-20T16:20:11.333444Z">
          <ace txid:last-modified="2022-03-20T16:20:11.333444Z">
            <name>R1</name>
            <matches>
              <ipv4>
                <protocol>17</protocol>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
      <acl txid:last-modified="2022-04-01T12:34:56.789012Z">
        <name>A2</name>
        <aces txid:last-modified="2022-04-01T12:34:56.789012Z">
          <ace txid:last-modified="2022-03-20T16:20:11.333444Z">
            <name>R7</name>
            <matches>
              <ipv4>
                <dscp>10</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:last-modified="2022-04-01T12:34:56.789012Z">
            <name>R8</name>
            <matches>
              <udp>
                <source-port>
                  <port>22</port>
                </source-port>
              </udp>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:last-modified="2022-04-01T12:34:56.789012Z">
            <name>R9</name>
            <matches>
              <tcp>
                <source-port>
                  <port>22</port>
                </source-port>
              </tcp>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
    <nacm xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-acm">
      <groups>
        <group>
          <name>admin</name>
          <user-name>sakura</user-name>
          <user-name>joe</user-name>
        </group>
      </groups>
    </nacm>
  </data>
</rpc-reply>
]]></sourcecode>
        </section>
      </section>
      <section anchor="configuration-response-pruning">
        <name>Configuration Response Pruning</name>
        <t>A NETCONF client that already knows some txid values MAY request that
the configuration retrieval request is pruned with respect to the
client's prior knowledge.</t>
        <t>To retrieve only changes for "acls" that do not have the
last known etag txid value, a client might send:</t>
        <sourcecode type="xml"><![CDATA[
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"
     xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <get-config>
    <source>
      <running/>
    </source>
    <filter>
      <acls
        xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
        txid:etag="nc5152">
        <acl txid:etag="nc4711">
          <name>A1</name>
          <aces txid:etag="nc4711"/>
        </acl>
        <acl txid:etag="nc5152">
          <name>A2</name>
          <aces txid:etag="nc5152"/>
        </acl>
      </acls>
    </filter>
  </get-config>
</rpc>
]]></sourcecode>
        <t>Assuming the NETCONF server configuration is the same as
in the previous rpc-reply example, the server's response to request
above might look like:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="6"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
      txid:etag="="/>
  </data>
</rpc-reply>
]]></sourcecode>
        <t>Or, if a configuration change has taken place under /acls since the
client was last updated, the server's response may look like:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="6"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
      txid:etag="nc6614">
      <acl txid:etag="=">
        <name>A1</name>
      </acl>
      <acl txid:etag="nc6614">
        <name>A2</name>
        <aces txid:etag="nc6614">
          <ace txid:etag="nc4711">
            <name>R7</name>
            <matches>
              <ipv4>
                <dscp>10</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc5152">
            <name>R8</name>
            <matches>
              <ipv4>
                <source-port>
                  <port>22</port>
                </source-port>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc6614">
            <name>R9</name>
            <matches>
              <ipv4>
                <source-port>
                  <port>830</port>
                </source-port>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
  </data>
</rpc-reply>
]]></sourcecode>
        <t>In case the client provides a txid value for a non-versioned node,
the server needs to treat the node as having the same txid value as
the closest ancestor that does have a txid value.</t>
        <sourcecode type="xml"><![CDATA[
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="7"
     xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <get-config>
    <source>
      <running/>
    </source>
    <filter>
      <acls
        xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list">
        <acl>
          <name>A2</name>
          <aces>
            <ace>
              <name>R7</name>
              <matches>
                <ipv4>
                  <dscp txid:etag="nc4711"/>
                </ipv4>
              </matches>
            </ace>
          </aces>
        </acl>
      </acls>
    </filter>
  </get-config>
</rpc>
]]></sourcecode>
        <t>If a txid value is specified for a leaf, and the txid value matches
(i.e. is identical to the server's txid value, or found earlier in
the server's Txid History), the leaf value is pruned.</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="7"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list">
      <acl>
        <name>A2</name>
        <aces>
          <ace>
            <name>R7</name>
            <matches>
              <ipv4>
                <dscp txid:etag="="/>
              </ipv4>
            </matches>
          </ace>
        </aces>
      </acl>
    </acls>
  </data>
</rpc-reply>
]]></sourcecode>
      </section>
      <section anchor="configuration-change">
        <name>Configuration Change</name>
        <t>A client that wishes to update the ace R1 protocol to tcp might send:</t>
        <sourcecode type="xml"><![CDATA[
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8">
  <edit-config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
               xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0"
               xmlns:ietf-netconf-txid=
                "urn:ietf:params:xml:ns:yang:ietf-netconf-txid">
    <target>
      <running/>
    </target>
    <test-option>test-then-set</test-option>
    <ietf-netconf-txid:with-etag>true</ietf-netconf-txid:with-etag>
    <config>
      <acls
        xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
        txid:etag="nc5152">
        <acl txid:etag="nc4711">
          <name>A1</name>
          <aces txid:etag="nc4711">
            <ace txid:etag="nc4711">
              <matches>
                <ipv4>
                  <protocol>6</protocol>
                </ipv4>
              </matches>
              <actions>
                <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                  acl:accept
                </forwarding>
              </actions>
            </ace>
          </aces>
        </acl>
      </acls>
    </config>
  </edit-config>
</rpc>
]]></sourcecode>
        <t>The server would update the protocol leaf in the running datastore,
and return an rpc-reply as follows:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="8"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <ok txid:etag="nc7688"/>
</rpc-reply>
]]></sourcecode>
        <t>A subsequent get-config request for "acls", with txid:etag="?" might
then return:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="9"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
      txid:etag="nc7688">
      <acl txid:etag="nc7688">
        <name>A1</name>
        <aces txid:etag="nc7688">
          <ace txid:etag="nc7688">
            <name>R1</name>
            <matches>
              <ipv4>
                <protocol>6</protocol>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
      <acl txid:etag="nc6614">
        <name>A2</name>
        <aces txid:etag="nc6614">
          <ace txid:etag="nc4711">
            <name>R7</name>
            <matches>
              <ipv4>
                <dscp>10</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc5152">
            <name>R8</name>
            <matches>
              <udp>
                <source-port>
                  <port>22</port>
                </source-port>
              </udp>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc6614">
            <name>R9</name>
            <matches>
              <tcp>
                <source-port>
                  <port>830</port>
                </source-port>
              </tcp>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
  </data>
</rpc-reply>
]]></sourcecode>
        <t>In case the server at this point received a configuration change from
another source, such as a CLI operator, removing ace R8 and R9 in
acl A2, a subsequent get-config request for acls, with txid:etag="?"
might then return:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="9"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
      txid:etag="cli2222">
      <acl txid:etag="nc7688">
        <name>A1</name>
        <aces txid:etag="nc7688">
          <ace txid:etag="nc7688">
            <name>R1</name>
            <matches>
              <ipv4>
                <protocol>6</protocol>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
      <acl txid:etag="cli2222">
        <name>A2</name>
        <aces txid:etag="cli2222">
          <ace txid:etag="nc4711">
            <name>R7</name>
            <matches>
              <ipv4>
                <dscp>10</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
  </data>
</rpc-reply>
]]></sourcecode>
      </section>
      <section anchor="conditional-configuration-change">
        <name>Conditional Configuration Change</name>
        <t>If a client wishes to delete acl A1 if and only if its configuration
has not been altered since this client last synchronized its
configuration with the server, at which point it received the etag
"nc7688" for acl A1, regardless of any possible changes to other
acls, it might send:</t>
        <sourcecode type="xml"><![CDATA[
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"
     xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"
     xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0"
     xmlns:ietf-netconf-txid=
       "urn:ietf:params:xml:ns:yang:ietf-netconf-txid">
  <edit-config>
    <target>
      <running/>
    </target>
    <test-option>test-then-set</test-option>
    <ietf-netconf-txid:with-etag>true</ietf-netconf-txid:with-etag>
    <config>
      <acls xmlns=
          "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
        <acl nc:operation="delete"
             txid:etag="nc7688">
          <name>A1</name>
        </acl>
      </acls>
    </config>
  </edit-config>
</rpc>
]]></sourcecode>
        <t>If acl A1 now has the etag txid value "nc7688", as expected by the
client, the transaction goes through, and the server responds
something like:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="10"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <ok txid:etag="nc8008"/>
</rpc-reply>
]]></sourcecode>
        <t>A subsequent get-config request for acls, with txid:etag="?" might
then return:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="11"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
      txid:etag="nc8008">
      <acl txid:etag="cli2222">
        <name>A2</name>
        <aces txid:etag="cli2222">
          <ace txid:etag="nc4711">
            <name>R7</name>
            <matches>
              <ipv4>
                <dscp>10</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
  </data>
</rpc-reply>
]]></sourcecode>
        <t>In case acl A1 did not have the expected etag txid value "nc7688"
when the server processed this request, nor was the client's txid
value found later in the server's Txid History, then the server
rejects the transaction, and might send:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:acl=
            "urn:ietf:params:xml:ns:yang:ietf-access-control-list"
           xmlns:ietf-netconf-txid=
             "urn:ietf:params:xml:ns:yang:ietf-netconf-txid"
           message-id="11">
  <rpc-error>
    <error-type>protocol</error-type>
    <error-tag>operation-failed</error-tag>
    <error-severity>error</error-severity>
    <error-info>
      <ietf-netconf-txid:txid-value-mismatch-error-info>
        <ietf-netconf-txid:mismatch-path>
          /acl:acls/acl:acl[acl:name="A1"]
        </ietf-netconf-txid:mismatch-path>
        <ietf-netconf-txid:mismatch-etag-value>
          cli6912
        </ietf-netconf-txid:mismatch-etag-value>
      </ietf-netconf-txid:txid-value-mismatch-error-info>
    </error-info>
  </rpc-error>
</rpc-reply>
]]></sourcecode>
      </section>
      <section anchor="reading-from-the-candidate-datastore">
        <name>Reading from the Candidate Datastore</name>
        <t>Let's assume that a get-config towards the running datastore
currently contains the following data and txid values:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="12"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
      txid:etag="nc4711">
      <acl txid:etag="nc4711">
        <name>A1</name>
        <aces txid:etag="nc4711">
          <ace txid:etag="nc4711">
            <name>R1</name>
            <matches>
              <ipv4>
                <protocol>17</protocol>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc2219">
            <name>R2</name>
            <matches>
              <ipv4>
                <dscp>21</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
  </data>
</rpc-reply>
]]></sourcecode>
        <t>A client issues discard-changes (to make the candidate datastore
equal to the running datastore), and issues an edit-config to
change the R1 protocol from udp (17) to tcp (6), and then executes a
get-config with the txid-request attribute "?" set on the acl A1,
the server might respond:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="13"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list">
      <acl txid:etag="!">
        <name>A1</name>
        <aces txid:etag="!">
          <ace txid:etag="!">
            <name>R1</name>
            <matches>
              <ipv4>
                <protocol>6</protocol>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc2219">
            <name>R2</name>
            <matches>
              <ipv4>
                <dscp>21</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
  </data>
</rpc-reply>
]]></sourcecode>
        <t>Here, the txid-unknown value "!" is sent by the server.  This
particular server implementation does not know beforehand which
txid value would be used for this versioned node after commit.
It will be a value different from the current corresponding
txid value in the running datastore.</t>
        <t>In case the server is able to predict the txid value that would
be used for the versioned node after commit, it could respond
with that value instead.  Let's say the server knows the txid
would be "7688" if the candidate datastore was committed without
further changes, then it would respond with that value in each
place where the example shows "!" above.</t>
      </section>
      <section anchor="commit">
        <name>Commit</name>
        <t>The client MAY request that the new etag txid value is returned as an
attribute on the ok response for a successful commit.  The client
requests this by adding with-etag to the commit operation.</t>
        <t>For example, a client might send:</t>
        <sourcecode type="xml"><![CDATA[
<rpc message-id="14"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
    xmlns:ietf-netconf-txid=
      "urn:ietf:params:xml:ns:yang:ietf-netconf-txid">
  <commit>
    <ietf-netconf-txid:with-etag>true</ietf-netconf-txid:with-etag>
  </commit>
</rpc>
]]></sourcecode>
        <t>Assuming the server accepted the transaction, it might respond:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="14"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
    xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <ok txid:etag="nc8008"/>
</rpc-reply>
]]></sourcecode>
      </section>
      <section anchor="yang-push">
        <name>YANG-Push</name>
        <t>A client MAY request that the updates for one or more YANG-Push
subscriptions are annotated with the txid values.  The request might
look like this:</t>
        <sourcecode type="xml"><![CDATA[
<netconf:rpc message-id="16"
             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"
      xmlns:ietf-netconf-txid-yp=
        "urn:ietf:params:xml:ns:yang:ietf-txid-yang-push">
    <yp:datastore
        xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">
      ds:running
    </yp:datastore>
    <yp:datastore-xpath-filter
        xmlns:acl=
          "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
      /acl:acls
    </yp:datastore-xpath-filter>
    <yp:on-change/>
    <ietf-netconf-txid-yp:with-etag>
      true
    </ietf-netconf-txid-yp:with-etag>
  </establish-subscription>
</netconf:rpc>
]]></sourcecode>
        <t>A server might send a subscription update like this:</t>
        <sourcecode type="xml"><![CDATA[
<notification
  xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0"
  xmlns:ietf-netconf-txid-yp=
    "urn:ietf:params:xml:ns:yang:ietf-netconf-txid-yang-push">
  <eventTime>2022-04-04T06:00:24.16Z</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>delete</operation>
          <target xmlns:acl=
            "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
            /acl:acls
          </target>
          <value>
            <acl xmlns=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
              <name>A1</name>
            </acl>
          </value>
        </edit>
        <ietf-netconf-txid-yp:etag-value>
          nc8008
        </ietf-netconf-txid-yp:etag-value>
      </yang-patch>
    </datastore-changes>
  </push-change-update>
</notification>
]]></sourcecode>
        <t>In case a client wishes to modify a previous subscription request in
order to no longer receive YANG-Push subscription updates, the request
might look like this:</t>
        <sourcecode type="xml"><![CDATA[
<rpc message-id="17"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <modify-subscription
      xmlns=
        "urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications"
      xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-push"
      xmlns:ietf-netconf-txid-yp=
        "urn:ietf:params:xml:ns:yang:ietf-txid-yang-push">
    <id>1011</id>
    <yp:datastore
        xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">
      ds:running
    </yp:datastore>
    <ietf-netconf-txid-yp:with-etag>
      false
    </ietf-netconf-txid-yp:with-etag>
  </modify-subscription>
</rpc>
]]></sourcecode>
      </section>
      <section anchor="nmda-compare">
        <name>NMDA Compare</name>
        <t>The following example is taken from section 5 of <xref target="RFC9144"/>.
It compares the difference between the operational and intended
datastores for a subtree under "interfaces".</t>
        <t>In this version of the example, the client requests that txid
values, in this case etag-values, are annotated to the result.</t>
        <sourcecode type="xml"><![CDATA[
<rpc message-id="101"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <compare xmlns="urn:ietf:params:xml:ns:yang:ietf-nmda-compare"
      xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"
      xmlns:ietf-netconf-txid-nmda-compare=
        "urn:ietf:params:xml:ns:yang:ietf-netconf-txid-nmda-compare">
    <source>ds:operational</source>
    <target>ds:intended</target>
    <report-origin/>
    <ietf-netconf-txid-nmda-compare:with-etag>
      true
    </ietf-netconf-txid-nmda-compare:with-etag>
    <xpath-filter
        xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces">
      /if:interfaces
    </xpath-filter>
  </compare>
</rpc>
]]></sourcecode>
        <t>RPC reply when a difference is detected:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
    message-id="101">
  <differences
    xmlns="urn:ietf:params:xml:ns:yang:ietf-nmda-compare"
    xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin"
    xmlns:ietf-netconf-txid-nmda-compare=
      "urn:ietf:params:xml:ns:yang:ietf-netconf-txid-nmda-compare"
    xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces">
    <yang-patch>
      <patch-id>interface status</patch-id>
      <comment>
        diff between operational (source) and intended (target),
        with txid values taken from intended.
      </comment>
      <edit>
        <edit-id>1</edit-id>
        <operation>replace</operation>
        <target>/ietf-interfaces:interface=eth0/enabled</target>
        <value>
          <if:enabled>false</if:enabled>
        </value>
        <source-value>
          <if:enabled or:origin="or:learned">true</if:enabled>
        </source-value>
        <ietf-netconf-txid-nmda-compare:etag-value>
          4004
        </ietf-netconf-txid-nmda-compare:etag-value>
      </edit>
      <edit>
        <edit-id>2</edit-id>
        <operation>create</operation>
        <target>/ietf-interfaces:interface=eth0/description</target>
        <value>
          <if:description>ip interface</if:description>
        </value>
        <ietf-netconf-txid-nmda-compare:etag-value>
          8008
        </ietf-netconf-txid-nmda-compare:etag-value>
      </edit>
    </yang-patch>
  </differences>
</rpc-reply>
]]></sourcecode>
        <t>The same response in RESTCONF (using JSON format):</t>
        <sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Date: Thu, 24 Jan 2019 20:56:30 GMT
Server: example-server
Content-Type: application/yang-data+json

{ "ietf-nmda-compare:output" : {
    "differences" : {
      "ietf-yang-patch:yang-patch" : {
        "patch-id" : "interface status",
        "comment" : "diff between intended (source) and operational",
        "edit" : [
          {
            "edit-id" : "1",
            "operation" : "replace",
            "target" : "/ietf-interfaces:interface=eth0/enabled",
            "value" : {
              "ietf-interfaces:interface/enabled" : "false"
            },
            "source-value" : {
              "ietf-interfaces:interface/enabled" : "true",
              "@ietf-interfaces:interface/enabled" : {
                "ietf-origin:origin" : "ietf-origin:learned"
              }
            },
            "ietf-netconf-txid-nmda-compare:etag-value": "4004"
          },
          {
            "edit-id" : "2",
            "operation" : "create",
            "target" : "/ietf-interfaces:interface=eth0/description",
            "value" : {
              "ietf-interface:interface/description" : "ip interface"
            },
            "ietf-netconf-txid-nmda-compare:etag-value": "8008"
          }
        ]
      }
    }
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="yang-modules">
      <name>YANG Modules</name>
      <section anchor="base-module-for-txid-in-netconf">
        <name>Base module for txid in NETCONF</name>
        <sourcecode type="yang" markers="true" name="ietf-netconf-txid@2023-03-01.yang"><![CDATA[
module ietf-netconf-txid {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-txid";
  prefix ietf-netconf-txid;

  import ietf-netconf {
    prefix nc;
    reference
      "RFC 6241: Network Configuration Protocol (NETCONF)";
  }
  import ietf-netconf-nmda {
    prefix ncds;
    reference
      "RFC 8342: Network Management Datastore Architecture (NMDA)";
  }
  import ietf-yang-structure-ext {
    prefix sx;
    reference
      "RFC 8791: YANG Data Structure Extensions.";
  }
  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: Common YANG Data Types";
  }

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

     Author:   Jan Lindblad
               <mailto:jlindbla@cisco.com>";
  description
    "NETCONF Transaction ID aware operations for NMDA.

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

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

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

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

  revision 2023-03-01 {
    description
      "Initial revision";
    reference
      "RFC XXXX: Transaction ID Mechanism for NETCONF";
  }

  feature last-modified {
    description
      "Servers implementing this module MUST support the
       etag txid mechanism.  Servers MAY also support the
       last-modified txid mechanism.  Support is shown by announcing
       this feature.";
  }

  extension versioned-node {
    description
      "This statement is used by servers to declare that a
       the server is maintaining a Txid for the YANG node with this
       statement.  Which YANG nodes are versioned nodes may be useful
       information for clients (especially during development).

       Servers are not required to use this statement to declare
       which nodes are versioned nodes.

       Example of use:

       container interfaces {
       ietf-netconf-txid:versioned-node;
       ...
       }
      ";
  }

  typedef etag-t {
    type string {
      pattern '.* .*' {
        modifier "invert-match";
      }
      pattern '.*".*' {
        modifier "invert-match";
      }
      pattern '.*\.*' {
        modifier "invert-match";
      }
    }
    description
      "Unique Entity-tag txid value representing a specific
       transaction.  Could be any string that does not contain
       spaces, double quotes or backslash.

       The txid values '?', '!' and '=' have special meaning:

       '?' This txid value is used by clients and is
          guaranteed not to match any txid on the server.

       '!' This txid value used by servers to indicate
          the node in the candidate datastore has changed
          relative to the running datastore, but not yet received
          a new txid value on the server.

       '=' This txid value used by servers to indicate
          that contents has been pruned due to txid match
          between client and server.
      ";
  }

  typedef last-modified-t {
    type union {
      type yang:date-and-time;
      type enumeration {
        enum ? {
          description
            "Txid value used by clients that is
             guaranteed not to match any txid on the server.";
        }
        enum ! {
          description
            "Txid value used by servers to indicate
             the node in the candidate datastore has changed
             relative to the running datastore, but not yet received
             a new txid value on the server.";
        }
        enum = {
          description
            "Txid value used by servers to indicate
             that contents has been pruned due to txid match
             between client and server.";
        }
      }
    }
    description
      "Last-modified txid value representing a specific transaction.
       The txid values '?', '!' and '=' have special meaning.";
  }

  grouping txid-grouping {
    leaf with-etag {
      type boolean;
      description
        "Indicates whether the client requests the server to include
         a txid:etag txid attribute when the configuration has
         changed.";
    }
    leaf with-last-modified {
      if-feature "last-modified";
      type boolean;
      description
        "Indicates whether the client requests the server to include
         a txid:last-modified attribute when the configuration has
         changed.";
    }
    description
      "Grouping for txid mechanisms, to be augmented into
       RPCs that modify configuration data stores.";
  }

  grouping txid-value-grouping {
    leaf etag-value {
      type etag-t;
      description
        "Indicates server's txid value for a YANG node.";
    }
    leaf last-modified-value {
      if-feature "last-modified";
      type last-modified-t;
      description
        "Indicates server's txid value for a YANG node.";
    }
    description
      "Grouping for txid mechanisms, to be augmented into
       output of RPCs that return txid metadata for configuration
       data stores.";
  }

  augment "/nc:edit-config/nc:input" {
    uses txid-grouping;
    description
      "Injects the txid mechanisms into the
       edit-config operation";
  }

  augment "/nc:commit/nc:input" {
    uses txid-grouping;
    description
      "Injects the txid mechanisms into the
       commit operation";
  }

  augment "/ncds:edit-data/ncds:input" {
    uses txid-grouping;
    description
      "Injects the txid mechanisms into the
       edit-data operation";
  }

  sx:structure txid-value-mismatch-error-info {
    container txid-value-mismatch-error-info {
      description
        "This error is returned by a NETCONF server when a client
         sends a configuration change request, with the additional
         condition that the server aborts the transaction if the
         server's configuration has changed from what the client
         expects, and the configuration is found not to actually
         not match the client's expectation.";
      leaf mismatch-path {
        type instance-identifier;
        description
          "Indicates the YANG path to the element with a mismatching
           etag txid value.";
      }
      leaf mismatch-etag-value {
        type etag-t;
        description
          "Indicates server's txid value of the etag
           attribute for one mismatching element.";
      }
      leaf mismatch-last-modified-value {
        if-feature "last-modified";
        type last-modified-t;
        description
          "Indicates server's txid value of the last-modified
           attribute for one mismatching element.";
      }
    }
  }
}
]]></sourcecode>
      </section>
      <section anchor="additional-support-for-txid-in-yang-push">
        <name>Additional support for txid in YANG-Push</name>
        <sourcecode type="yang" markers="true" name="ietf-netconf-txid-yang-push@2022-04-01.yang"><![CDATA[
module ietf-netconf-txid-yang-push {
  yang-version 1.1;
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-netconf-txid-yang-push";
  prefix ietf-netconf-txid-yp;

  import ietf-subscribed-notifications {
    prefix sn;
    reference
      "RFC 8639: Subscription to YANG Notifications";
  }
  import ietf-yang-push {
    prefix yp;
    reference
      "RFC 8641: Subscriptions to YANG Datastores";
  }
  import ietf-netconf-txid {
    prefix ietf-netconf-txid;
    reference
      "RFC XXXX: Transaction ID Mechanism for NETCONF";
  }

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

     Author:   Jan Lindblad
               <mailto:jlindbla@cisco.com>";
  description
    "NETCONF Transaction ID aware operations for YANG Push.

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

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

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

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

  revision 2022-04-01 {
    description
      "Initial revision";
    reference
      "RFC XXXX: Transaction ID Mechanism for NETCONF";
  }

  augment "/sn:establish-subscription/sn:input" {
    description
      "This augmentation adds additional subscription parameters
       that apply specifically to datastore updates to RPC input.";
    uses ietf-netconf-txid:txid-grouping;
  }

  augment "/sn:modify-subscription/sn:input" {
    description
      "This augmentation adds additional subscription parameters
       specific to datastore updates.";
    uses ietf-netconf-txid:txid-grouping;
  }

  augment "/sn:subscriptions/sn:subscription" {
    description
      "This augmentation adds additional subscription parameters
       specific to datastore updates.";
    uses ietf-netconf-txid:txid-grouping;
  }

  augment "/yp:push-change-update/yp:datastore-changes/"
        + "yp:yang-patch" {
    description
      "This augmentation makes it possible for servers to return
       txid-values.";
    uses ietf-netconf-txid:txid-value-grouping;
  }
}
]]></sourcecode>
      </section>
      <section anchor="additional-support-for-txid-in-nmda-compare">
        <name>Additional support for txid in NMDA Compare</name>
        <sourcecode type="yang" markers="true" name="ietf-netconf-txid-nmda-compare@2023-05-01.yang"><![CDATA[
module ietf-netconf-txid-nmda-compare {
  yang-version 1.1;
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-netconf-txid-nmda-compare";
  prefix ietf-netconf-txid-nmda-compare;

  import ietf-nmda-compare {
    prefix cmp;
    reference
      "RFC 9144: Comparison of Network Management Datastore
       Architecture (NMDA) Datastores";
  }
  import ietf-netconf-txid {
    prefix ietf-netconf-txid;
    reference
      "RFC XXXX: Transaction ID Mechanism for NETCONF";
  }

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

     Author:   Jan Lindblad
               <mailto:jlindbla@cisco.com>";
  description
    "NETCONF Transaction ID aware operations for NMDA Compare.

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

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

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

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

  revision 2023-05-01 {
    description
      "Initial revision";
    reference
      "RFC XXXX: Transaction ID Mechanism for NETCONF";
  }

  augment "/cmp:compare/cmp:input" {
    description
      "This augmentation makes it possible for clients to request
       txids to be returned.";
    uses ietf-netconf-txid:txid-grouping;
  }

  augment "/cmp:compare/cmp:output/cmp:compare-response/"
        + "cmp:differences/cmp:differences/cmp:yang-patch/cmp:edit" {
    description
      "This augmentation makes it possible for servers to return
       txid-values.";
    container most-recent {
      description
        "The txid value returned by the server MUST be the
         txid value pertaining to the target node in the source or
         target datastores that is the most recent.";
      uses ietf-netconf-txid:txid-value-grouping;
    }
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The YANG modules specified in this document define YANG types, groupings, structures and additional RPC parameters for data that is designed to be accessed via network management protocols such as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>. The lowest NETCONF layer is the secure transport layer, and the mandatory-to-implement secure transport is Secure Shell (SSH) <xref target="RFC6242"/>. The lowest RESTCONF layer is HTTPS, and the mandatory-to-implement secure transport is TLS <xref target="RFC8446"/>.</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>In the YANG modules published with this document, there is no configuration, state data, new RPCs, or notifications.  This document defines additional XML attributes and headers, however, that merit consideration from a security perspective.</t>
      <section anchor="nacm-access-control">
        <name>NACM Access Control</name>
        <t>NACM, <xref target="RFC8341"/>, access control
processing happens as usual, independently of any txid handling, if
supported by the server and enabled by the NACM configuration.</t>
        <t>It should be pointed out however, that when txid information is added
to a reply, it may occasionally be possible for a client to deduce
that a configuration change has happened in some part of the
configuration to which it has no access rights.</t>
        <t>For example, a client may notice that the root node txid has changed
while none of the subtrees it has access to have changed, and thereby
conclude that someone else has made a change to some part of the
configuration that is not accessible by the client.</t>
        <section anchor="hash-based-txid-algorithms">
          <name>Hash-based Txid Algorithms</name>
          <t>Servers that implement NACM and choose to implement a hash-based txid
algorithm over the configuration may reveal to a client that the
configuration of a subtree that the client has no access to is the
same as it was at an earlier point in time.</t>
          <t>For example, a client with partial access to the configuration might
observe that the root node txid was 1234. After a few configuration
changes by other parties, the client may again observe that the root
node txid is 1234.  It may then deduce that the configuration is the
same as earlier, even in the parts of the configuration it has no
access to.</t>
          <t>In some use cases, this behavior may be considered a feature, since it
allows a security client to verify that the configuration is the same
as expected, without transmitting or storing the actual configuration.</t>
        </section>
      </section>
      <section anchor="unchanged-configuration">
        <name>Unchanged Configuration</name>
        <t>It will also be possible for clients to deduce that a configuration
change has not happened during some period, by simply observing that
the root node (or other subtree) txid remains unchanged.  This is
true regardless of NACM being deployed or choice of txid algorithm.</t>
        <t>Again, there may be use cases where this behavior may be considered a
feature, since it allows a security client to verify that the
configuration is the same as expected, without transmitting or storing
the actual configuration.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="netconf-capability-urn">
        <name>NETCONF Capability URN</name>
        <t>This document requests IANA to register the following capability identifier URN in
the 'Network Configuration Protocol (NETCONF) Capability URNs'
registry:</t>
        <t>RFC Ed.: replace XXXX with actual RFC number and remove this note.</t>
        <artwork><![CDATA[
Capability: :txid
Capability Identifier: urn:ietf:params:netconf:capability:txid:1.0
Reference: RFC XXXX
]]></artwork>
      </section>
      <section anchor="ietf-xml-registry">
        <name>IETF XML Registry</name>
        <t>This document request IANA to register four XML namespace URIs in the "ns"
subregistry within the "IETF XML Registry" <xref target="RFC3688"/>:</t>
        <artwork><![CDATA[
  URI: urn:ietf:params:xml:ns:netconf:txid:1.0
  Registrant Contact: The IESG.
  XML: N/A, the requested URIs are XML namespaces.

  URI: urn:ietf:params:xml:ns:yang:ietf-netconf-txid
  Registrant Contact: The IESG.
  XML: N/A, the requested URIs are XML namespaces.

  URI: urn:ietf:params:xml:ns:yang:ietf-netconf-txid-yang-push
  Registrant Contact: The IESG.
  XML: N/A, the requested URIs are XML namespaces.

  URI: urn:ietf:params:xml:ns:yang:ietf-netconf-txid-nmda-compare
  Registrant Contact: The IESG.
  XML: N/A, the requested URIs are XML namespaces.
]]></artwork>
      </section>
      <section anchor="yang-module-names">
        <name>YANG Module Names</name>
        <t>This document requests IANA to register three module names in the "YANG
Module Names" subregistry <xref target="RFC6020"/> within the "YANG Parameters"
registry.</t>
        <t>RFC Ed.: replace XXXX with actual RFC number in this document as well as in the following YANG modules, and remove this note:
ietf-netconf-txid-nmda-compare.yang:      "RFC XXXX: Transaction ID Mechanism for NETCONF";
ietf-netconf-txid-nmda-compare.yang:     This version of this YANG module is part of RFC XXXX
ietf-netconf-txid-nmda-compare.yang:     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
ietf-netconf-txid-nmda-compare.yang:      "RFC XXXX: Transaction ID Mechanism for NETCONF";
ietf-netconf-txid-yang-push.yang:      "RFC XXXX: Transaction ID Mechanism for NETCONF";
ietf-netconf-txid-yang-push.yang:     This version of this YANG module is part of RFC XXXX
ietf-netconf-txid-yang-push.yang:     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
ietf-netconf-txid-yang-push.yang:      "RFC XXXX: Transaction ID Mechanism for NETCONF";
ietf-netconf-txid.yang:     This version of this YANG module is part of RFC XXXX
ietf-netconf-txid.yang:     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
ietf-netconf-txid.yang:      "RFC XXXX: Transaction ID Mechanism for NETCONF";</t>
        <artwork><![CDATA[
  name: ietf-netconf-txid
  prefix: ietf-netconf-txid
  namespace: urn:ietf:params:xml:ns:yang:ietf-netconf-txid
  maintained by IANA? N
  RFC: XXXX

  name: ietf-netconf-txid-yang-push
  prefix: ietf-netconf-txid-yp
  namespace: urn:ietf:params:xml:ns:yang:ietf-netconf-txid-yang-push
  maintained by IANA? N
  RFC: XXXX

  name: ietf-netconf-txid-nmda-compare
  prefix: ietf-netconf-txid-nmda-compare
  namespace:
    urn:ietf:params:xml:ns:yang:ietf-netconf-txid-nmda-compare
  maintained by IANA? N
  RFC: XXXX
]]></artwork>
      </section>
    </section>
    <section anchor="changes-to-be-deleted-by-rfc-editor">
      <name>Changes (to be deleted by RFC Editor)</name>
      <section anchor="major-changes-in-09-since-08">
        <name>Major changes in -09 since -08</name>
        <t>Changes based on shepherd review.</t>
        <ul spacing="normal">
          <li>
            <t>Updated references to RFC 7232 (Etag, etc.) to the corresponding
sections of RFC 9110, which obsoletes RFC 7232. Added a normative
reference to RFC 9562 (UUIDs, etc.).</t>
          </li>
          <li>
            <t>Made sure all YANG imports have references to the corresponding
RFC document. Updated the copyright year to 2025 in a few modules.</t>
          </li>
          <li>
            <t>Broke out NETCONF example messages into separate files, and added
build logic to perform XML validation on them. Corrected a number of
example message errors.</t>
          </li>
          <li>
            <t>Changed some document IETF metadata values (abbrev, area, author's
affiliation).</t>
          </li>
          <li>
            <t>Corrected IANA registration parameters for
ietf-netconf-txid-yang-push</t>
          </li>
          <li>
            <t>Spelling and formatting updates.</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-08-since-07">
        <name>Major changes in -08 since -07</name>
        <ul spacing="normal">
          <li>
            <t>Added brief motivation to why the server's set of Versioned Nodes
must not change unless the server at a discontinuity point
(software upgrades, etc.)</t>
          </li>
          <li>
            <t>Added a few lines to the beginning of chapter 3 to better describe
the contents later in that chapter.</t>
          </li>
          <li>
            <t>Added some guidance regarding the recommended Txid History size.</t>
          </li>
          <li>
            <t>Mention that examples are based on the RFC8519 YANG module for
Network Access Control Lists.</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-07-since-06">
        <name>Major changes in -07 since -06</name>
        <ul spacing="normal">
          <li>
            <t>Changed "monotonically increasing" to "strictly increasing" in
multiple locations. Removed recommendation about timestamps in the
last-modified txid mechanism being similar to wall clock time.</t>
          </li>
          <li>
            <t>Removed two clumsily formulated sentences stating that clients MUST NOT infer temporal order from txid values.  The remaining wording states that some servers use sequences of txid values that may appear random to outside observers.</t>
          </li>
          <li>
            <t>Added brief explanation that entitlements are sometimes also
known as "licenses".</t>
          </li>
          <li>
            <t>Added introductory section on "How to Read this Document"</t>
          </li>
          <li>
            <t>Added an example to highlight that the etag txid values can have different formats, and do not need to consist of strictly increasing integers, as in most of the examples.</t>
          </li>
          <li>
            <t>Changed WG URLs in YANG modules to new datatracker format, e.g. https://datatracker.ietf.org/wg/netconf/</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-06-since-05">
        <name>Major changes in -06 since -05</name>
        <ul spacing="normal">
          <li>
            <t>Many language, style, spelling and formatting improvements thanks
to reviews by Reshad Rahman and Med Boucadair</t>
          </li>
          <li>
            <t>Clarified Txid History Size Consideration example</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-05-since-04">
        <name>Major changes in -05 since -04</name>
        <ul spacing="normal">
          <li>
            <t>Corrected namespace for reference to elements in ietf-yang-push</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-04-since-03">
        <name>Major changes in -04 since -03</name>
        <ul spacing="normal">
          <li>
            <t>Updated security considerations.</t>
          </li>
          <li>
            <t>Added several normative RFC references.</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-03-since-02">
        <name>Major changes in -03 since -02</name>
        <ul spacing="normal">
          <li>
            <t>Updated language slightly regarding format of etag values, and some
recommendations for implementors that support etags in multiple management
protocols (NETCONF, RESTCONF, ...) and encodings (XML, JSON, ...).</t>
          </li>
          <li>
            <t>Added missing normative RFC references.</t>
          </li>
          <li>
            <t>Corrected the YANG-push namespace reference.</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-02-since-01">
        <name>Major changes in -02 since -01</name>
        <ul spacing="normal">
          <li>
            <t>Added optional to implement Txid History concept in order to make
the algorithm both more efficient and less verbose.  Servers may
still choose a Txid History size of zero, which makes the server
behavior the same as in earlier versions of this document.
Implementations that use txids consisting of a monotonically
increasing integer or timestamp will be able to determine the sequence
of transactions in the history directly, making this trivially simple
to implement.</t>
          </li>
          <li>
            <t>Added extension statement versioned-node, which servers may use to
declare which YANG tree nodes are Versioned Nodes.  This is entirely
optional, however, but possibly useful to client developers.</t>
          </li>
          <li>
            <t>Renamed YANG feature ietf-netconf-txid:txid-last-modified to
ietf-netconf-txid:last-modified in order to reduce redundant mentions
of "txid".</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-01-since-00">
        <name>Major changes in -01 since -00</name>
        <ul spacing="normal">
          <li>
            <t>Changed YANG-push txid mechanism to use a simple leaf rather than
an attribute to convey txid information.  This is preferable since
YANG-push content may be requested using other protocols than NETCONF
and other encodings than XML.  By removing the need for XML
attributes in this context, the mechanism becomes significantly
more portable.</t>
          </li>
          <li>
            <t>Added a section and YANG module augmenting the RFC9144 NMDA
datastore compare operation to allow request and reply with txid
information.  This too is done with augments of plain leafs for
maximum portability.</t>
          </li>
          <li>
            <t>Added note clarifying that the txid attributes used in the XML
encoding are never used in JSON (since RESTCONF uses HTTP headers
instead).</t>
          </li>
          <li>
            <t>Added note clarifying that pruning happens when client and server
txids <em>match</em>, since the server sending information to the client
only makes sense when the information on the client is out of date.</t>
          </li>
          <li>
            <t>Added note clarifying that this entire document is about config
true data only.</t>
          </li>
          <li>
            <t>Rephrased slightly when referring to the candidate datastore to
keep making sense in the event that private candidate datastores
become a reality in the future.</t>
          </li>
          <li>
            <t>Added a note early on to more clearly lay out the structure of this
document, with a first part about the generic mechanism part, and a
second part about the two specific txid mechanisms.</t>
          </li>
          <li>
            <t>Corrected acl data model examples to conform to their YANG module.</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-draft-ietf-netconf-transaction-id-00-since-02">
        <name>Major changes in draft-ietf-netconf-transaction-id-00 since -02</name>
        <ul spacing="normal">
          <li>
            <t>Changed the logic around how txids are handled in the candidate
datastore, both when reading (get-config, get-data) and writing
(edit-config, edit-data). Introduced a special "txid-unknown"
value "!".</t>
          </li>
          <li>
            <t>Changed the logic of copy-config to be similar to edit-config.</t>
          </li>
          <li>
            <t>Clarified how txid values interact with when-dependencies
together with default values.</t>
          </li>
          <li>
            <t>Added content to security considerations.</t>
          </li>
          <li>
            <t>Added a high-level example for YANG-Push subscriptions with txid.</t>
          </li>
          <li>
            <t>Updated language about error-info sent at txid mismatch in an
edit-config: error-info with mismatch details MUST be sent when
mismatch detected, and that the server can choose one of the txid
mismatch occurrences if there is more than one.</t>
          </li>
          <li>
            <t>Some rewording and minor additions for clarification, based
on mailing list feedback.</t>
          </li>
          <li>
            <t>Divided RFC references into normative and informative.</t>
          </li>
          <li>
            <t>Corrected a logic error in the second figure (figure 6) in the
"Conditional Transactions" section</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-02-since-01-1">
        <name>Major changes in -02 since -01</name>
        <ul spacing="normal">
          <li>
            <t>A last-modified txid mechanism has been added (back).  This
mechanism aligns well with the Last-Modified mechanism defined in
RESTCONF <xref target="RFC8040"/>,
but is not a carbon copy.</t>
          </li>
          <li>
            <t>YANG-Push functionality has been added.  This allows YANG-Push
users to receive txid updates as part of the configuration updates.
This functionality comes in a separate YANG module, to allow
implementors to cleanly keep all this functionality out.</t>
          </li>
          <li>
            <t>Changed name of "versioned elements". They are now called
"Versioned Nodes".</t>
          </li>
          <li>
            <t>Clarified txid behavior for transactions toward the Candidate
datastore, and some not so common situations, such
as when a client specifies a txid for a non-versioned node, and
when there are when-statement dependencies across subtrees.</t>
          </li>
          <li>
            <t>Examples provided for the abstract mechanism level with simple
message flow diagrams.</t>
          </li>
          <li>
            <t>More examples on protocol level, and with ietf-interfaces as
example target module replaced with ietf-access-control to reduce
confusion.</t>
          </li>
          <li>
            <t>Explicit list of XPaths to clearly state where etag or
last-modified attributes may be added by clients and servers.</t>
          </li>
          <li>
            <t>Document introduction restructured to remove duplication between
sections and to allow multiple (etag and last-modified) txid
mechanisms.</t>
          </li>
          <li>
            <t>Moved the actual YANG module code into proper module files that
are included in the source document.  These modules can be compiled
as proper modules without any extraction tools.</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-01-since-00-1">
        <name>Major changes in -01 since -00</name>
        <ul spacing="normal">
          <li>
            <t>Updated the text on numerous points in order to answer questions
that appeared on the mailing list.</t>
          </li>
          <li>
            <t>Changed the document structure into a general transaction id part
and one etag specific part.</t>
          </li>
          <li>
            <t>Renamed entag attribute to etag, prefix to txid, namespace to
urn:ietf:params:xml:ns:yang:ietf-netconf-txid.</t>
          </li>
          <li>
            <t>Set capability string to
urn:ietf:params:netconf:capability:txid:1.0</t>
          </li>
          <li>
            <t>Changed YANG module name, namespace and prefix to match names above.</t>
          </li>
          <li>
            <t>Harmonized/slightly adjusted etag value space with RFC 7232 and
RFC 8040.</t>
          </li>
          <li>
            <t>Removed all text discussing etag values provided by the client
(although this is still an interesting idea, if you ask the author)</t>
          </li>
          <li>
            <t>Clarified the etag attribute mechanism, especially when it comes to
matching against non-versioned elements, its cascading upwards in the
tree and secondary effects from when- and choice-statements.</t>
          </li>
          <li>
            <t>Added a mechanism for returning the server assigned etag value in
get-config and get-data.</t>
          </li>
          <li>
            <t>Added section describing how the NETCONF discard-changes,
copy-config, delete-config and commit operations work with respect to
etags.</t>
          </li>
          <li>
            <t>Added IANA Considerations section.</t>
          </li>
          <li>
            <t>Removed all comments about open questions.</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC4741">
          <front>
            <title>NETCONF Configuration Protocol</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <date month="December" year="2006"/>
            <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 on top of a simple Remote Procedure Call (RPC) layer. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4741"/>
          <seriesInfo name="DOI" value="10.17487/RFC4741"/>
        </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="RFC6242">
          <front>
            <title>Using the NETCONF Protocol over Secure Shell (SSH)</title>
            <author fullname="M. Wasserman" initials="M." surname="Wasserman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>This document describes a method for invoking and running the Network Configuration Protocol (NETCONF) within a Secure Shell (SSH) session as an SSH subsystem. This document obsoletes RFC 4742. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6242"/>
          <seriesInfo name="DOI" value="10.17487/RFC6242"/>
        </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="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC8072">
          <front>
            <title>YANG Patch Media Type</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="February" year="2017"/>
            <abstract>
              <t>This document describes a method for applying patches to configuration datastores using data defined with the YANG data modeling language.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8072"/>
          <seriesInfo name="DOI" value="10.17487/RFC8072"/>
        </reference>
        <reference anchor="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="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="RFC8526">
          <front>
            <title>NETCONF Extensions to Support the Network Management Datastore Architecture</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="2019"/>
            <abstract>
              <t>This document extends the Network Configuration Protocol (NETCONF) defined in RFC 6241 in order to support the Network Management Datastore Architecture (NMDA) defined in RFC 8342.</t>
              <t>This document updates RFCs 6241 and 7950. The update to RFC 6241 adds new and operations and augments existing,, and operations. The update to RFC 7950 requires the usage of the YANG library (described in RFC 8525) by NETCONF servers implementing the NMDA.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8526"/>
          <seriesInfo name="DOI" value="10.17487/RFC8526"/>
        </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="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="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="RFC9144">
          <front>
            <title>Comparison of Network Management Datastore Architecture (NMDA) Datastores</title>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="Y. Qu" initials="Y." surname="Qu"/>
            <author fullname="J. Tantsura" initials="J." surname="Tantsura"/>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>This document defines a Remote Procedure Call (RPC) operation to compare management datastores that comply with the Network Management Datastore Architecture (NMDA).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9144"/>
          <seriesInfo name="DOI" value="10.17487/RFC9144"/>
        </reference>
        <reference anchor="RFC9562">
          <front>
            <title>Universally Unique IDentifiers (UUIDs)</title>
            <author fullname="K. Davis" initials="K." surname="Davis"/>
            <author fullname="B. Peabody" initials="B." surname="Peabody"/>
            <author fullname="P. Leach" initials="P." surname="Leach"/>
            <date month="May" year="2024"/>
            <abstract>
              <t>This specification defines UUIDs (Universally Unique IDentifiers) --
also known as GUIDs (Globally Unique IDentifiers) -- and a Uniform
Resource Name namespace for UUIDs. A UUID is 128 bits long and is
intended to guarantee uniqueness across space and time. UUIDs were
originally used in the Apollo Network Computing System (NCS), later
in the Open Software Foundation's (OSF's) Distributed Computing
Environment (DCE), and then in Microsoft Windows platforms.</t>
              <t>This specification is derived from the OSF DCE specification with the
kind permission of the OSF (now known as "The Open Group"). Information from earlier versions of the OSF DCE specification have
been incorporated into this document. This document obsoletes RFC
4122.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9562"/>
          <seriesInfo name="DOI" value="10.17487/RFC9562"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="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="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="RFC7952">
          <front>
            <title>Defining and Using Metadata with YANG</title>
            <author fullname="L. Lhotka" initials="L." surname="Lhotka"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>This document defines a YANG extension that allows for defining metadata annotations in YANG modules. The document also specifies XML and JSON encoding of annotations and other rules for annotating instances of YANG data nodes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7952"/>
          <seriesInfo name="DOI" value="10.17487/RFC7952"/>
        </reference>
        <reference anchor="RFC8519">
          <front>
            <title>YANG Data Model for Network Access Control Lists (ACLs)</title>
            <author fullname="M. Jethanandani" initials="M." surname="Jethanandani"/>
            <author fullname="S. Agarwal" initials="S." surname="Agarwal"/>
            <author fullname="L. Huang" initials="L." surname="Huang"/>
            <author fullname="D. Blair" initials="D." surname="Blair"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>This document defines a data model for Access Control Lists (ACLs). An ACL is a user-ordered set of rules used to configure the forwarding behavior in a device. Each rule is used to find a match on a packet and define actions that will be performed on the packet.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8519"/>
          <seriesInfo name="DOI" value="10.17487/RFC8519"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
      </references>
    </references>
    <?line 3433?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author wishes to thank Benoît Claise for making this work happen,
and the following individuals, who all provided helpful comments
and reviews:
Per Andersson, James Cumming, Kent Watsen, Andy Bierman, Robert Wilton,
Qiufang Ma, Jason Sterne, Robert Varga, Reshad Rahman, Med Boucadair
and Bing Liu.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
