<?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-11" 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-11"/>
    <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="October" day="07"/>
    <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 datastores.  The volume of configuration
data in a server may be very large, while datastore changes typically
are small when observed at typical client resynchronization intervals.</t>
      <t>Rereading the entire datastore 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,
unless explicit locking is used.</t>
      <t>In order to simplify the task of tracking changes, this document enables a NETCONF server to 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"/>,
leverages an HTTP 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 the txid values for the nodes returned. The most recent change is shown to be 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 datastore
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-netconf-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-netconf-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@2025-08-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:jan.lindblad+ietf@for.eco>";
  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 2025-08-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@2025-08-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:jan.lindblad+ietf@for.eco>";
  description
    "NETCONF Transaction ID aware operations for YANG Push.

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

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

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

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

  revision 2025-08-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@2025-08-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:jan.lindblad+ietf@for.eco>";
  description
    "NETCONF Transaction ID aware operations for NMDA Compare.

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

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

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

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

  revision 2025-08-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-11-since-10">
        <name>Major changes in -11 since -10</name>
        <ul spacing="normal">
          <li>
            <t>Wording changed about RESTCONF not defining HTTP header mechanism, but leveraging it</t>
          </li>
          <li>
            <t>Wording changed about the purpose of this document, in the introduction</t>
          </li>
          <li>
            <t>Pointed out that explicit locking could be used to remove risk of clients clobbering each other.</t>
          </li>
          <li>
            <t>Corrected spelling of datastore in a handful places</t>
          </li>
          <li>
            <t>Corrected namespace URIs in a couple of examples</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-10-since-09">
        <name>Major changes in -10 since -09</name>
        <t>Changes based on shepherd review.</t>
        <ul spacing="normal">
          <li>
            <t>Updated module revision dates, copyright year and author's
email address.</t>
          </li>
        </ul>
      </section>
      <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6241.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6242.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6991.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8040.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3688.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6020.xml">
          <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 3451?>

<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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
H8oj/Nmj23ivhFrwvReawb6S5cJaSxu+APyGBWUnpZLbQapX1xzy3PSJqLbf
RjKQ3sld3wM1c5LPe+bHH58/PdtThYz9ynfv7YrJnF3R6LpgSTmMgxClBOTw
77UAh12OzF9yc2FXZ9eZ3dHjoKEOXpa9mOKpeeI06mXjHvXn6gF/6ZFCjcYV
arm8LRK71L5u9WFJ1zq/8XLGfqK2DRnZkDwtoOYi22dJlorbRyKnYvJ6FitJ
e8DIEQN7K62BWGHALdM0QyGrQxGNdmlRt2xywQ/yTiwAZyjFgLS+cZKetURi
AGis4ikuQdSQ3iaLxFUmqGEFLgtrkUgrQNvpWy0f6B4wp8s52jdguxSqU5/Y
x60a5/vnZHrZGLnLr8nWghmbjCsbI2O4CmtqvNlkPi2P3LCXL5C9NJEiwBmL
FLsbIEXtzcshxf1PgRQYz/5ktAOcEX+5QQb7YbL+WBonZ4/lwaWOZTlpQN1q
QVTtq/ktXmX8YhcwrP0J1ZNaB3h0uzHnzZlecKYPL3WmVfMmffYzbcz5L3im
nUTb1wTgRMfzC8SbpskX3ukUGe7s3PdEhpMiXy7KNU/oM2sfUcyLJ/M0ayLf
IxDZiwF9Wsbvl0UMl9p+0v7cz3nS+tCj27QaBzXegAIOofVkreq0znjF+T42
rvfg8IWGb2URWXGNBrB8ZrPV7qczW13WUIV3i8vrYPDh4x7tW5Gp5apdS54t
E3TfP+41GvD8hP/iyT++dTC69Vd9PjDB3b7ArnbBQfdwvp7qMqyf9RB/en3z
mY/3zhdwvL58WNrT3JTQrNVRmqd0PUpmt+FW3n3s4pn0wqDSCTqn9bjxX/4n
KXvk+KNPWGM2f7QuyFcYeNHQUSVcX8wuGjVDWrHkHWA0LQXTXqzC3vkiVNgb
ffVGX/1iRJ8bffVfDxlu9NXaCP9yZ3qjr9LPF36mn1lframkdf3zn1LZtIET
YdJcoJt0Rsn/g5WUvX8BJSWA/Y22slZb2fvStBWzyUo2woY2XGjLr7z/4OHO
aPc/WxSY1pfvDHZ3jkb39nd39kej4Z07d/b29v7zcurNlcb1me8VB7hRjb44
Lnshuq3H1Y0UpyuN+ynR7Ubpqu/mVxDQr3jqNypZ+NC/0InfKGz084Wf+I3C
dgWFrSMIPnoD6gqmc5kDG9Eu6pekDXMLIkyFKjnW0A+yay1XHeYRi0IYz+yD
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
0tYBAgA=

-->

</rfc>
