<?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.6.36 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-netconf-transaction-id-01" category="std" consensus="true" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title abbrev="NCTID">Transaction ID Mechanism for NETCONF</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-transaction-id-01"/>
    <author initials="J." surname="Lindblad" fullname="Jan Lindblad">
      <organization>Cisco Systems</organization>
      <address>
        <email>jlindbla@cisco.com</email>
      </address>
    </author>
    <date year="2023" month="July" day="04"/>
    <area>General</area>
    <workgroup>NETCONF</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 44?>

<t>NETCONF clients and servers often need to have a synchronized view of
the server's configuration data stores.  The volume of configuration
data in a server may be very large, while data store changes typically
are small when observed at typical client resynchronization intervals.</t>
      <t>Rereading the entire data store and analyzing the response for changes
is an inefficient mechanism for synchronization.  This document
specifies an extension to NETCONF 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 57?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>When a NETCONF client 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 the 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.</t>
      <t>One way of detecting a change for a client would be to
retrieve the entire configuration from the server, then compare
the result with a previously stored copy at the client side.  This
approach is not popular with most NETCONF users, however, since it
would often be very expensive in terms of communications and
computation cost.</t>
      <t>Furthermore, even if the configuration is reported to be unchanged,
that will not guarantee that the configuration remains unchanged
when a client sends a subsequent change request, a few moments later.</t>
      <t>In order to simplify the task of tracking changes, a NETCONF server
could 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>Evidence of a transaction id feature being demanded by clients is that
several server implementors have built proprietary and mutually
incompatible mechanisms for obtaining a transaction id from a NETCONF
server.</t>
      <t>RESTCONF, <xref target="RFC8040"/>,
defines a mechanism for detecting changes in configuration subtrees
based on Entity-Tags (ETags) and Last-Modified txid values.</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
<xref target="RFC7232"/>
"Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests".</t>
      <t>This document defines similar functionality 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, 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>
    <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>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>
        <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.</t>
        </dd>
        <dt>Txid</dt>
        <dd>
          <t>Abbreviation of Transaction-id</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 get-config, get-data, edit-config, edit-data,
discard-changes, copy-config, delete-config and commit such
that clients are able to conditionally retrieve and update the
configuration in a NETCONF server.</t>
      <t>For servers implementing YANG-Push, an extension for conveying txid
updates as part of subscription updates is also defined.  A similar
extension is also defined for servers implememnting
"Comparison of NMDA Datastores".</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
and the last-modified txid mechanism. Additional mechanisms could
be added in future.  This document is therefore divided into a two
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="use-cases">
        <name>Use Cases</name>
        <t>The common use cases for txid mecahnisms are briefly discussed here.</t>
        <dl>
          <dt>Initial configuration retrieval</dt>
          <dd>
            <t>When the 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 reread (parts of) the server's configuration,
it may be interested to leverage the txid meta data 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 meta data 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 meta data 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
meta data 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 the updated txid
meta data for the changed data trees.</t>
          </dd>
        </dl>
      </section>
      <section anchor="general-txid-principles">
        <name>General Txid Principles</name>
        <t>All servers implementing a txid mechanism MUST maintain a top level
txid meta data value for each configuration datastore supported by
the server.  Txid mechanism implementations MAY also maintain txid
meta data 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>The server returning txid values for the versioned nodes
MUST ensure 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, 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>The 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.</t>
      </section>
      <section anchor="initial-configuration-retrieval">
        <name>Initial Configuration Retrieval</name>
        <t>When a NETCONF server receives a get-config or get-data request
containing requests for txid values, it MUST return txid values for
all versioned nodes below the point requested by the client in
the reply.</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>
          <name>Initial Configuration Retrieval.  The client annotated the get-config request itself with the txid request value, which makes the server return all txid values in the entire datastore, that also fall within the requested subtree filter.  The most recent change seems to have been an update to the R8 and R9 source-port.</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>
        <t>In the call flow examples in this document we are using a 4-digit,
monotonously increasing integer as txid.  This is convenient and
enhances readability of the examples, but does not reflect a typical
implementation.  Servers may assign values randomly.  In general,
no information can be derived by observing that some txid value is
numerically or lexicographically lower than another txid value.
In general, the only operation defined on a pair of txid values is
testing them for equality.</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 get-config or
get-data requests.</t>
        <t>When a client sends in a txid value of a node that matches the
server's txid value for that versioned node, the server prunes
(does not return) that subtree from the response.  Since the
client already knows the txid for this part of the data tree, it
is obviosuly already up to date with that part of the configuration,
so sending it again would be a waste of time and energy.</t>
        <t>When a NETCONF server receives a get-config or get-data request
containing a node with a client specified txid value, there are
several different cases:</t>
        <ol spacing="normal" type="1"><li>The node is not a versioned node, i.e. the server does not
maintain a txid value for this node.  In this case, the server
MUST look up the closest ancestor that is a versioned node, and
use the txid value of that node as the txid value of this node in
the further handling below.  The datastore root is always a
versioned node.</li>
          <li>The client specified txid value is different than the server's
txid value for this node.  In this case the server MUST return
the contents as it would otherwise have done, adding the txid values
of all child versioned nodes to the response.  In case the client
has specified txid values for some child nodes, then these
cases MUST be re-evaluated for those child nodes.</li>
          <li>The client specified txid
value matches the server's txid value.  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.
A server MUST NOT ever use the txid-match value (e.g. "=") as an
actual txid value.</li>
        </ol>
        <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>
        <figure>
          <name>Response Pruning.  Client sends get-config request with known txid values.  Server prunes response where txid matches expectations.</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>
        <figure>
          <name>Out of band change detected.  Client sends get-config request with known txid values.  Server provides update where changes have happened.  Specifically ace R8 is returned since ace R8 is a child of a node for which the request had a different txid than the server, and the client did not specify any matching txid for the ace R8 node.</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: 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>
        <figure>
          <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 etag 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>
      </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 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>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 canidate.</li>
          <li>If the txid-unknown value is not returned, the server MUST return
 the txid value the node will have after commit, assuming the client
 makes no further changes of the candidate datastore.</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 txid values known to the client
in its change requests (edit-config etc.), 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 (get-config etc.) and write (edit-config etc.) operation.</t>
        <t>Clients that are also interested to know the txid assigned to the
modified versioned nodes in the model immediately in the
response could set a flag in the rpc message to request the server
to return the new txid with the ok message.</t>
        <figure>
          <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>
        <figure>
          <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>If the server rejects the transaction because one or more of the
configuration txid value(s) differs from the client's expectation,
the server MUST return at least one rpc-error 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
containing relevant details about one of the mismatching txids.
A server MAY send multiple rpc-errors when multiple txid mismatches
are detected.</t>
        <figure>
          <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 txid it knows for this part of the configuration.  Since the 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="candidate-datastore-transactions">
        <name>Candidate Datastore Transactions</name>
        <t>When working with 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 txid attributes to the
configuration payload the same way.  In case a client specifies
different txid values for the same element in successive edit-config
or edit-data operations, the 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 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 txid value that would be used if the candidate was committed without further changes (when that 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 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 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 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>discard-changes</dt>
          <dd>
            <t>The discard-changes 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>copy-config</dt>
          <dd>
            <t>The copy-config 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>delete-config</dt>
          <dd>
            <t>The server MUST ensure the datastore txid value is changed, unless it
was already empty.</t>
          </dd>
          <dt>commit</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 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>The etag attribute txid mechanism</li>
        <li>The last-modified attribute txid mechanism</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 patricular
commit, the result is undefined.</t>
      <section anchor="the-etag-attribute-txid-mechanism">
        <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 UTF-8 strings chosen freely,
except that the etag string must not contain space, backslash
or double quotes. The point of this restriction is to make it easy to
reuse implementations that adhere to section 2.3.1 in
<xref target="RFC7232"/>.  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.</t>
        <t>The detailed rules for when to update the etag value are described in
section <xref target="general-txid-principles">General Txid Principles</xref>.  These
rules are chosen to be consistent with the ETag mechanism in
RESTCONF, <xref target="RFC8040"/>,
specifically sections 3.4.1.2, 3.4.1.3 and 3.5.2.</t>
      </section>
      <section anchor="the-last-modified-attribute-txid-mechanism">
        <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 txid-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.  It is RECOMMENDED that the time stamps provided
by the server closely match the real world clock.  Servers
MUST ensure the timestamps provided are monotonously increasing for
as long as the server's operation is maintained.</t>
        <t>It is RECOMMENDED that server implementors choose the number of
digits of precision used for the fractional second timestamps
high enough so that there is no risk that multiple transactions on
the server would get the same timestamp.</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 section
<xref target="general-txid-principles">General Txid Principles</xref>.  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 subsription 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 supercede 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>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.</li>
            <li>If the versioned node is different in the candidate store
than in the running datastore, the server has a choice of what
to return. The server MAY return the special "txid-unknown" value "!".
If the txid-unknown value is not returned, the server MUST return
the txid value the versioned node will have if the client decides to
commit the candidate datastore without further updates.</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",
xmlns:ncds="urn:ietf:params:xml:ns:yang:ietf-netconf-nmda",
xmlns:sn="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications",
xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-patch" and
xmlns:ypatch="urn:ietf:params:xml:ns:yang:ietf-yang-patch":</t>
          <t>In client messages sent to a server:</t>
          <ul spacing="normal">
            <li>/nc:rpc/nc:get-config</li>
            <li>/nc:rpc/nc:get-config/nc:filter//*</li>
            <li>/nc:rpc/ncds:get-data</li>
            <li>/nc:rpc/ncds:get-data/ncds:subtree-filter//*</li>
            <li>/nc:rpc/ncds:get-data/ncds:xpath-filter//*</li>
            <li>/nc:rpc/nc:edit-config/nc:config</li>
            <li>/nc:rpc/nc:edit-config/nc:config//*</li>
            <li>/nc:rpc/ncds:edit-data/ncds:config</li>
            <li>/nc:rpc/ncds:edit-data/ncds:config//*</li>
          </ul>
          <t>In server messages sent to a client:</t>
          <ul spacing="normal">
            <li>/nc:rpc-reply/nc:data</li>
            <li>/nc:rpc-reply/nc:data//*</li>
            <li>/nc:rpc-reply/ncds:data</li>
            <li>/nc:rpc-reply/ncds:data//*</li>
            <li>/nc:rpc-reply/nc:ok</li>
            <li>/yp:push-update/yp:datastore-contents/ypatch:yang-patch/
ypatch:edit</li>
            <li>/yp:push-update/yp:datastore-contents/ypatch:yang-patch/
ypatch:edit/ypatch:value//*</li>
            <li>/yp:push-change-update/yp:datastore-contents/ypatch:yang-patch/
ypatch:edit</li>
            <li>/yp:push-change-update/yp:datastore-contents/ypatch:yang-patch/
ypatch:edit/ypatch:value//*</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>NOTE: In the etag examples below, we have chosen to use a txid
value consisting of "nc" followed by a monotonously increasing
integer.  This is convenient for the reader trying to make sense
of the examples, but is not an implementation requirement.  An
etag would often be implemented as a "random" string of characters,
with no comes-before/after relation defined.</t>
          <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="?"/>
</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="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>
]]></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>
]]></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>
]]></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>
    </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>
]]></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>
]]></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,
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: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>
]]></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>
]]></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>
      <runnign/>
    </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>
]]></sourcecode>
        <t>In case acl A1 did not have the expected etag txid value "nc7688",
when the server processed this request, it 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="15"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
    xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <ok txid:etag="nc8008"/>
</rpc-reply>
]]></sourcecode>
      </section>
      <section anchor="yang-push">
        <name>YANG-Push</name>
        <t>A client MAY request that the updates for one or more YANG-Push
subscriptions are annotated with the txid values.  The request might
look like this:</t>
        <sourcecode type="xml"><![CDATA[
<netconf:rpc message-id="16"
             xmlns:netconf="urn:ietf:params:xml:ns:netconf:base:1.0">
  <establish-subscription
      xmlns=
        "urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications"
      xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-push"
      xmlns:ietf-netconf-txid-yp=
        "urn:ietf:params:xml:ns:yang:ietf-txid-yang-push">
    <yp:datastore
        xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">
      ds:running
    </yp:datastore>
    <yp:datastore-xpath-filter
        xmlns:acl=
          "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
      /acl:acls
    </yp:datastore-xpath-filter>
    <yp:on-change/>
    <ietf-netconf-txid-yp:with-etag>
      true
    </ietf-netconf-txid-yp:with-etag>
  </establish-subscription>
</netconf:rpc>
]]></sourcecode>
        <t>In case a client wishes to modify a previous subscription request in
order to no longer receive YANG-Push subscription updates, the request
might look like this:</t>
        <sourcecode type="xml"><![CDATA[
<rpc message-id="17"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <modify-subscription
      xmlns=
        "urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications"
      xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-push"
      xmlns:ietf-netconf-txid-yp=
        "urn:ietf:params:xml:ns:yang:ietf-txid-yang-push">
    <id>1011</id>
    <yp:datastore
        xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">
      ds:running
    </yp:datastore>
    <ietf-netconf-txid-yp:with-etag>
      false
    </ietf-netconf-txid-yp:with-etag>
  </modify-subscription>
</rpc>
]]></sourcecode>
        <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>
      </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">
    <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"><![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;
  }

  import ietf-netconf-nmda {
    prefix ncds;
  }

  import ietf-yang-structure-ext {
    prefix sx;
  }

  import ietf-yang-types {
    prefix yang;
  }

  organization
    "IETF NETCONF (Network Configuration) Working Group";

  contact
    "WG Web:   <http://tools.ietf.org/wg/netconf/>
     WG List:  <netconf@ietf.org>

     Author:   Jan Lindblad
               <mailto:jlindbla@cisco.com>";

  description
    "NETCONF Transaction ID aware operations for NMDA.

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

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

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

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

  revision 2023-03-01 {
    description
      "Initial revision";
    reference
      "RFC XXXX: Xxxxxxxxx";
  }

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

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

  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 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 txid-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 txid-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 additonal
          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 txid-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"><![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-yang-patch {
    prefix ypatch;
    reference
      "RFC 8072: YANG Patch Media Type";
  }

  import ietf-netconf-txid {
    prefix ietf-netconf-txid;
    reference
      "RFC XXXX: Xxxxxxxxx";
  }

  organization
    "IETF NETCONF (Network Configuration) Working Group";

  contact
    "WG Web:   <http://tools.ietf.org/wg/netconf/>
     WG List:  <netconf@ietf.org>

     Author:   Jan Lindblad
               <mailto:jlindbla@cisco.com>";

  description
    "NETCONF Transaction ID aware operations for YANG Push.

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

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

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

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

  revision 2022-04-01 {
    description
      "Initial revision";
    reference
      "RFC XXXX: Xxxxxxxxx";
  }

  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"><![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: Xxxxxxxxx";
  }

  organization
    "IETF NETCONF (Network Configuration) Working Group";

  contact
    "WG Web:   <http://tools.ietf.org/wg/netconf/>
     WG List:  <netconf@ietf.org>

     Author:   Jan Lindblad
               <mailto:jlindbla@cisco.com>";

  description
    "NETCONF Transaction ID aware operations for NMDA Compare.

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

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

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

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

  revision 2023-05-01 {
    description
      "Initial revision";
    reference
      "RFC XXXX: Xxxxxxxxx";
  }

  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 {
      uses ietf-netconf-txid:txid-value-grouping;
    }
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <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 acessible 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>
      <t>This document registers the following capability identifier URN in
the 'Network Configuration Protocol (NETCONF) Capability URNs'
registry:</t>
      <artwork><![CDATA[
  urn:ietf:params:netconf:capability:txid:1.0
]]></artwork>
      <t>This document registers four XML namespace URNs in the 'IETF XML
registry', following the format defined in
<xref target="RFC3688"/>.</t>
      <artwork><![CDATA[
  URI: urn:ietf:params:xml:ns:netconf:txid:1.0

  URI: urn:ietf:params:xml:ns:yang:ietf-netconf-txid

  URI: urn:ietf:params:xml:ns:yang:ietf-netconf-txid-yang-push

  URI: urn:ietf:params:xml:ns:yang:ietf-netconf-txid-nmda-compare

  Registrant Contact: The NETCONF WG of the IETF.

  XML: N/A, the requested URIs are XML namespaces.
]]></artwork>
      <t>This document registers three module names in the 'YANG Module Names'
registry, defined in <xref target="RFC6020"/>.</t>
      <artwork><![CDATA[
  name: ietf-netconf-txid

  prefix: ietf-netconf-txid

  namespace: urn:ietf:params:xml:ns:yang:ietf-netconf-txid

  RFC: XXXX
]]></artwork>
      <t>and</t>
      <artwork><![CDATA[
  name: ietf-netconf-txid-yp

  prefix: ietf-netconf-txid-yp

  namespace: urn:ietf:params:xml:ns:yang:ietf-netconf-txid-yang-push

  RFC: XXXX
]]></artwork>
      <t>and</t>
      <artwork><![CDATA[
  name: ietf-netconf-txid-nmda-compare

  prefix: ietf-netconf-txid-nmda-compare

  namespace:
    urn:ietf:params:xml:ns:yang:ietf-netconf-txid-nmda-compare

  RFC: XXXX
]]></artwork>
    </section>
    <section anchor="changes">
      <name>Changes</name>
      <section anchor="major-changes-in-01-since-00">
        <name>Major changes in -01 since -00</name>
        <ul spacing="normal">
          <li>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.</li>
          <li>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.</li>
          <li>Added note clarifying that the txid attributes used in the XML
encoding are never used in JSON (since RESTCONF uses HTTP headers
instead).</li>
          <li>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.</li>
          <li>Added note clarifying that this entire document is about config
true data only.</li>
          <li>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.</li>
          <li>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.</li>
          <li>Corrected acl data model examples to conform to their YANG module.</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>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 "!".</li>
          <li>Changed the logic of copy-config to be similar to edit-config.</li>
          <li>Clarified how txid values interact with when-dependencies
together with default values.</li>
          <li>Added content to security considerations.</li>
          <li>Added a high-level example for YANG-Push subscriptions with txid.</li>
          <li>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.</li>
          <li>Some rewording and minor additions for clarification, based
on mailing list feedback.</li>
          <li>Divided RFC references into normative and informative.</li>
          <li>Corrected a logic error in the second figure (figure 6) in the
"Conditional Transactions" section</li>
        </ul>
      </section>
      <section anchor="major-changes-in-02-since-01">
        <name>Major changes in -02 since -01</name>
        <ul spacing="normal">
          <li>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.</li>
          <li>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.</li>
          <li>Changed name of "versioned elements". They are now called
"versioned nodes".</li>
          <li>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.</li>
          <li>Examples provided for the abstract mechanism level with simple
message flow diagrams.</li>
          <li>More examples on protocol level, and with ietf-interfaces as
example target module replaced with ietf-access-control to reduce
confusion.</li>
          <li>Explicit list of XPaths to clearly state where etag or
last-modified attributes may be added by clients and servers.</li>
          <li>Document introduction restructured to remove duplication between
sections and to allow multiple (etag and last-modified) txid
mechanisms.</li>
          <li>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.</li>
        </ul>
      </section>
      <section anchor="major-changes-in-01-since-00-1">
        <name>Major changes in -01 since -00</name>
        <ul spacing="normal">
          <li>Updated the text on numerous points in order to answer questions
that appeared on the mailing list.</li>
          <li>Changed the document structure into a general transaction id part
and one etag specific part.</li>
          <li>Renamed entag attribute to etag, prefix to txid, namespace to
urn:ietf:params:xml:ns:yang:ietf-netconf-txid.</li>
          <li>Set capability string to
urn:ietf:params:netconf:capability:txid:1.0</li>
          <li>Changed YANG module name, namespace and prefix to match names above.</li>
          <li>Harmonized/slightly adjusted etag value space with RFC 7232 and
RFC 8040.</li>
          <li>Removed all text discussing etag values provided by the client
(although this is still an interesting idea, if you ask the author)</li>
          <li>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.</li>
          <li>Added a mechanism for returning the server assigned etag value in
get-config and get-data.</li>
          <li>Added section describing how the NETCONF discard-changes,
copy-config, delete-config and commit operations work with respect to
etags.</li>
          <li>Added IANA Considerations section.</li>
          <li>Removed all comments about open questions.</li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC6991">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces a collection of common data types to be used with the YANG data modeling language. This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6991"/>
          <seriesInfo name="DOI" value="10.17487/RFC6991"/>
        </reference>
        <reference anchor="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="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="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="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
        <reference anchor="RFC7232">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application- level protocol for distributed, collaborative, hypertext information systems. This document defines HTTP/1.1 conditional requests, including metadata header fields for indicating state changes, request header fields for making preconditions on such state, and rules for constructing the responses to a conditional request when one or more preconditions evaluate to false.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7232"/>
          <seriesInfo name="DOI" value="10.17487/RFC7232"/>
        </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="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>
      </references>
    </references>
    <?line 3006?>

<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:
Per Andersson, James Cumming, Kent Watsen, Andy Bierman, Robert Wilton,
Qiufang Ma, Jason Sterne and Robert Varga.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
hJ8lnT7Z3OLzsR3Qz2iLD8V233ZgAx5NAlmPjptmO5bB1MaviR9W+GgTPDyx
A/EIltkqd5ijvFvDe4frj9PqbG83zdGimzSlhaas8AhOirz+hOToR7veLx6f
rfNwuSi3qsOoKEeMTo978HGaxmjS7LFtrWOY9m7XUaN2WeFgb+9gpaSwpo9Q
Tunaz/3V+znGDF3X284ktXrHplvqNXmSzSPbIYHdf7hih68E87XS2SVgXpfZ
QGJzFLHN9nhskp5Z2zjIJ2+fveNctltcM/av716/QgFpFlfbQsTPqmquvj8+
frM73BlG+3t70ev/rp7Cto2i47NFP9o/iP4a5/Bg+BD+M/r63ujuXvSXl8fq
HamJIyM1DVhtVEcFEodqcLycQxfxfD4VwZEXhHLDf/tZg3KofgGxrE6yR8Wi
mi+qXjSKfmE1z1u2+zWSpg5GI/fRfw1eNLQSf+7VSWnPEbye0DB6LyCfjkr6
tNMjqn4vuIXYxU8eYvzifZZXzISGXlt6aLulx0IR6y/xQaA3NqSH9R4I8UJI
+YBt6892hcMSvQwNxR9rQ/jk7BojIcWszR7a/nmjxvUhzaBMmYVAM2J4Pxti
XWv8ceVqNz7tPRgNqbPffdDZCmzZX40tTG+vgSwedbwqwngb4fdGMPaI8WrU
uRQwyR/jA9N+NlG3/Av+96P6KPor2WCjl0WymIKIifrst6jHzegH9vGi8ANE
VPKBE7n8V4R0RslbjWkScIgSGdUSiOo38BuaCvQc6Q5N5c6lBMY72MO8TCfZ
h+aQ3yh4mM1Qiwkeyj5Js3z8Da2+/V2Cbr1Bolub0Oo0HMpxtSjTQfqhChvq
D93NMP5bh6/j77ZBUZ7GefbP2Nqde8+fHX9nE7JvvQKCXJTvw/uQ29GP8Bty
t79gkYUeAYRCfsccmtH78S/Rj+nJCD4+Qm432t2timKqd3BiOzDm7sWp8QGY
XHvQ5EWmqxGae/jJn83bTxS/criozkCyg0/IH19keXIyjZM6wXk0i0HpKkY/
T/mFP48zPS52AJOf8Ey9Q8KzNas99q5qPX8axReo3dvzznYONMHsyHyOivmy
JJvt1ng7QrNmRNA7LheU8JQdsNBeY+ssAVYndf7EyhbTgrSxhoyLJN2BZU6n
EXVLadCRxydmxLdAmjQ753GSOMSC5Q4m/fTLSZbH5ZKEDnONqhBVV2IT2KUi
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
3f8BvB5w4f8HugZqfpifAQA=

-->

</rfc>
