<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.1 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-netconf-transaction-id-02" category="std" consensus="true" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.1 -->
  <front>
    <title abbrev="NCTID">Transaction ID Mechanism for NETCONF</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-transaction-id-02"/>
    <author initials="J." surname="Lindblad" fullname="Jan Lindblad">
      <organization>Cisco Systems</organization>
      <address>
        <email>jlindbla@cisco.com</email>
      </address>
    </author>
    <date year="2023" month="October" day="10"/>
    <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>
        <dt>C-txid</dt>
        <dd>
          <t>Client side transaction-id, i.e. a txid value maintained or provided
by a NETCONF client application.</t>
        </dd>
        <dt>S-txid</dt>
        <dd>
          <t>Server side transaction-id, i.e. a txid value maintained or sent by
a NETCONF server.</t>
        </dd>
        <dt>Txid History</dt>
        <dd>
          <t>Temporally ordered list of txid values used by the server.  Allows
the server to determine if a given txid occurred more recently than
another txid.</t>
        </dd>
      </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
server side txid meta data value for each configuration datastore
supported by the server.  Server side txid is often abbreviated s-txid.
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>Server implementors MAY use the YANG extension statement
ietf-netconf-txid:versioned-node to inform potential clients about
which YANG nodes the server maintains a txid value for.  Another way
to discover (a partial) set of Versioned Nodes is for a client to
request the current configuration with txids.  The returned
configuration will then have the Versioned Nodes decorated with their
txid values.</t>
        <t>Regardless of whether the server declares the Versioned Nodes or not,
the set of Versioned Nodes in the server's YANG tree MUST remain
constant, except at system redefining events, such as software upgrades
or entitlement installations or removals.</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, and their
ancestors, regardless
of source, even if the changed nodes are not explicitly part
of the change payload.  An example of this is dependent data under
YANG <xref target="RFC7950"/> when- or choice-statements.</t>
        <t>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, or any kind of metadata that the
server may maintain for YANG data tree nodes.</t>
      </section>
      <section anchor="initial-configuration-retrieval">
        <name>Initial Configuration Retrieval</name>
        <t>When a NETCONF server receives a get-config or get-data request
containing requests for txid values, it MUST, in the reply, return
txid values for all Versioned Nodes below the point requested by
the client.</t>
        <t>The exact encoding varies by mechanism, but all txid mechanisms
would have a special "txid-request" txid value (e.g. "?") which is
guaranteed to never be used as a normal txid value.  Clients MAY use
this special txid value associated with one or more nodes in the
data tree to indicate to the server that they are interested in
txid values below that point of the data tree.</t>
        <figure anchor="fig-baseline">
          <name>Initial Configuration Retrieval.  The client annotated the get-config request itself with the txid request value, which makes the server return all txid values in the entire datastore, that also fall within the requested subtree filter.  The most recent change seems to have been an update to ace R8 and R9.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config (txid: ?)                          |
       |     acls                                        |
       |                                                 |
       |   <------------------------------------------   |
       |   data (txid: 5152)                             |
       |     acls (txid: 5152)                           |
       |       acl A1 (txid: 4711)                       |
       |         aces (txid: 4711)                       |
       |           ace R1 (txid: 4711)                   |
       |             matches ipv4 protocol 17            |
       |             actions forwarding accept           |
       |       acl A2 (txid: 5152)                       |
       |         aces (txid: 5152)                       |
       |           ace R7 (txid: 4711)                   |
       |             matches ipv4 dscp 10                |
       |             actions forwarding accept           |
       |           ace R8 (txid: 5152)                   |
       |             matches udp source-port port 22     |
       |             actions forwarding accept           |
       |           ace R9 (txid: 5152)                   |
       |             matches tcp source-port port 22     |
       |             actions forwarding accept           |
       v                                                 v
]]></artwork>
        </figure>
        <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 necessarily
reflect a typical implementation.</t>
        <t>In principle, txid values are opaque strings that uniquely identify
a particular configuration state.  Servers are expected to know which
txid values it has used in the recent past, and in which order they
were assigned to configuration change transactions.  This information
is known as the server's Txid History.</t>
        <t>How many historical txid values to track is up to each server
implementor to decide, and a server MAY decide not to store any
historical txid values at all.  The more txid values in the server's
Txid History, the more efficient the client synchronization may be, as
described in the coming sections.</t>
        <t>Some server implementors may decide to use a monotonically increasing
integer as the txid value, or a timestamp.  Doing so obviously makes
it very easy for the server to determine the sequence of historical
transaction ids.</t>
        <t>Some server implementors may decide to use a completely different txid
value sequence, to the point that the sequence may appear completely
random to outside observers.  Clients MUST NOT generally assume that
servers use a txid value scheme that reveals information about the
temporal sequence of txid values.</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.  Txid values sent by a client are often abbreviated
c-txid.</t>
        <t>When a client sends in a c-txid value of a node that matches the
server's s-txid value for that Versioned Node, or matches a more recent
s-txid value in the server's Txid History,
the server prunes (does not return) that subtree from
the response.  Since the client already knows the txid for this part
of the data tree, or a txid that occurred more recently, it
is obviosuly already up to date with that part of the configuration.
Sending it again would be a waste of time and energy.</t>
        <t>The table below describes in detail how the client side (c-txid) and
server side txid (s-txid) values are determined and compared when the
server processes each data tree reply node from a get-config or
get-data request.</t>
        <t>Servers MUST process each of the config true nodes as follows:</t>
        <table>
          <name>The Txid rules for response pruning.</name>
          <thead>
            <tr>
              <th align="left">Case</th>
              <th align="left">Condition</th>
              <th align="left">Behavior</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">1. NO CLIENT TXID</td>
              <td align="left">In its request, the client did not specify a c-txid value for the current node, nor any ancestor of this node.</td>
              <td align="left">In this case, the server MUST return the current node according to the normal NETCONF specifications.  The rules below do not apply to the current node.  Any child nodes MUST also be evaluated with respect to these rules.</td>
            </tr>
            <tr>
              <td align="left">2. CLIENT ANCESTOR TXID</td>
              <td align="left">The client did not specify a c-txid value for the current node, but did specify a c-txid value for one or more ancestors of this node.</td>
              <td align="left">In this case, the current node MUST inherit the c-txid value of the closest ancestor node in the client's request that has a c-txid value.  Processing of the current node continues according to the rules below.</td>
            </tr>
            <tr>
              <td align="left">3. SERVER ANCESTOR TXID</td>
              <td align="left">The node is not a Versioned Node, i.e. the server does not maintain a s-txid value for this node.</td>
              <td align="left">In this case, the current node MUST inherit the server's s-txid value of the closest ancestor that is a Versioned Node (has a server side s-txid value).  The datastore root is always a Versioned Node.  Processing of the current node continues according to the rules below.</td>
            </tr>
            <tr>
              <td align="left">4. CLIENT TXID UP TO DATE</td>
              <td align="left">The client specified c-txid for the current node value is "up to date", i.e. it matches the server's s-txid value, or matches a s-txid value from the server's Txid History that is more recent than the server's s-txid value for this node.</td>
              <td align="left">In this case the server MUST return the node decorated with a special "txid-match" txid value (e.g. "=") to the matching node, pruning any value and child nodes.</td>
            </tr>
            <tr>
              <td align="left">5. CLIENT TXID OUT OF DATE</td>
              <td align="left">The specified c-txid is "outdated" or "unknown" to the server, i.e. it does not match the server's s-txid value for this node, nor does the client c-txid value match any s-txid value in the server's Txid History that is more recent than the server's s-txid value for this node.</td>
              <td align="left">In this case the server MUST return the current node according to the normal NETCONF specifications.  If the current node is a Versioned Node, it MUST be decorated with the s-txid value.  Any child nodes MUST also be evaluated with respect to these rules.</td>
            </tr>
          </tbody>
        </table>
        <t>For list elements, pruning child nodes means that top-level
key nodes MUST be included in the response, and other child nodes
MUST NOT be included.  For containers, child nodes MUST NOT
be included.</t>
        <t>Here follows a couple of examples of how the rules above are applied.
See <xref target="fig-baseline">the example above</xref> for the most recent server
configuration state that the client is aware of, before this happens:</t>
        <figure>
          <name>Response Pruning.  Client sends get-config request with known txid values.  Server prunes response where the c-txid matches expectations.  In this case, the server had no changes, and pruned the response at the earliest point offered by the client.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config                                    |
       |     acls (txid: 5152)                           |
       |       acl A1 (txid: 4711)                       |
       |         aces (txid: 4711)                       |
       |       acl A2 (txid: 5152)                       |
       |         aces (txid: 5152)                       |
       |                                                 |
       |   <------------------------------------------   |
       |   data                                          |
       |     acls (txid: =)                              |
       v                                                 v
]]></artwork>
        </figure>
        <t>In this case, the server's txid-based pruning saved a substantial
amount of information that is already known by the client to be sent
to and processed by the client.</t>
        <t>In the following example someone has made a change to the
configuration on the server.  This server has chosen to implement
a Txid History with up to 5 entries.  The 5 most recently used
s-txid values on this example server are currently: 4711, 5152, 5550,
6614, 7770 (most recent).  Then a client sends this request:</t>
        <figure>
          <name>Out of band change detected.  Client sends get-config request with known txid values.  Server provides updates only where changes have happened.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config                                    |
       |     acls (txid: 5152)                           |
       |       acl A1 (txid: 4711)                       |
       |       acl A2 (txid: 5152)                       |
       |                                                 |
       |   <------------------------------------------   |
       |   data                                          |
       |     acls (txid: 6614)                           |
       |       acl A1 (txid: =)                          |
       |       acl A2 (txid: 6614)                       |
       |         aces (txid: 6614)                       |
       |           ace R7 (txid: =)                      |
       |           ace R8 (txid: =)                      |
       |           ace R9 (txid: 6614)                   |
       |             matches tcp source-port port 830    |
       |             actions forwarding accept           |
       v                                                 v
]]></artwork>
        </figure>
        <t>In the example above, the server returns the acls container because
the client supplied c-txid value (5152) differs from the s-txid value
held by the server (6614), and 5152 is less recent in the server's
Txid History than 6614.  The client is apparently unaware of the
latest config developments in this part of the server config tree.</t>
        <t>The server prunes list entry acl A1 is because it has the same s-txid
value as the c-txid supplied by the client (4711). The server returns
the list entry acl A2 because 5152 (specified by the client) is less
recent than 6614 (held by the server).</t>
        <t>The container aces under acl A2 is returned because 5152 is less recent
than 6614. The server prunes ace R7 because the c-txid for this
node is 5152 (from acl A2), and 5152 is more recent than the closest
ancestor Versioned Node (with txid 4711).</t>
        <t>The server also prunes acl R8 because the server and client txids
exactly match (5152). Finally, acl R9 is returned because of its less
recent c-txid value given by the client (5152, on the closest ancestor
acl A2) than the s-txid held on the server (6614).</t>
        <t>In the next example, the client specifies the c-txid for a node that
the server does not maintain a s-txid for, i.e. it's not a
Versioned Node.</t>
        <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>
        <t>Here, the server looks up the closest ancestor node that is a
Versioned Node.  This particular server has chosen to keep a s-txid
for the list entry ace R7, but not for any of its children.  Thus
the server finds the server side s-txid value to be 4711 (from ace R7),
which matches the client's c-txid value of 4711.</t>
        <t>Servers MUST NOT ever use the special txid values, txid-match, txid-request, txid-unknown (e.g. "=", "?", "!") as actual
txid values.</t>
      </section>
      <section anchor="candidate-datastore-configuration-retrieval">
        <name>Candidate Datastore Configuration Retrieval</name>
        <t>When a client retrieves the configuration from the (or a) candidate
datastore, some of the configuration nodes may hold the same data as
the corresponding node in the running datastore.  In such cases, the
server MUST return the same s-txid value for nodes in the candidate
datastore as in the running datastore.</t>
        <t>If a node in the candidate datastore holds different data than in the
running datastore, the server has a choice of what to return.</t>
        <ul spacing="normal">
          <li>
            <t>The server MAY return a txid-unknown value (e.g. "!").  This may
be convenient in servers that do not know a priori what txids will
be used in a future, possible commit of the canidate.</t>
          </li>
          <li>
            <t>If the txid-unknown value is not returned, the server MUST return
 the s-txid value the node will have after commit, assuming the client
 makes no further changes of the candidate datastore.  If a client
 makes further changes in the candidate datastore, the s-txid value
 MAY change.</t>
          </li>
        </ul>
        <t>See the example in
<xref target="candidate-datastore-transactions">Candidate Datastore Transactions</xref>.</t>
      </section>
      <section anchor="conditional-transactions">
        <name>Conditional Transactions</name>
        <t>Conditional transactions are useful when a client is interested
to make a configuration change, being sure that relevant parts of
the server configuration have not changed since the client last
inspected it.</t>
        <t>By supplying the latest c-txid values known to the client
in its change requests (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 s-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 s-txid with the ok message.</t>
        <figure anchor="base-edit-config">
          <name>Conditional transaction towards the Running datastore successfully executed.  As all the txid values specified by the client matched those on the server, the transaction was successfully executed.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   edit-config (request new txid in response)    |
       |     config (txid: 5152)                         |
       |       acls (txid: 5152)                         |
       |         acl A1 (txid: 4711)                     |
       |           aces (txid: 4711)                     |
       |             ace R1 (txid: 4711)                 |
       |               matches ipv4 protocol 6           |
       |               actions forwarding accept         |
       |                                                 |
       |   <------------------------------------------   |
       |   ok (txid: 7688)                               |
       v                                                 v
]]></artwork>
        </figure>
        <t>After the above edit-config, the client might issues a get-config to
observe the change.  It would look like this:</t>
        <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>When a client sends in a c-txid value of a node, the server MUST consider it a match if the server's s-txid value is identical to the client, or if the server's value is found earlier in the server's Txid History than the value supplied by the client.</t>
        <section anchor="error-response-on-out-of-band-change">
          <name>Error response on Out of band change</name>
          <t>If the server rejects the transaction because one or more of the
configuration s-txid value(s) differs from the client's expectation,
the server MUST return at least one 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 c-txid it knows for this part of the configuration.  Since the s-txid has changed (out of band), the server rejects the configuration change request and reports an error with details about where the mismatch was detected.</name>
            <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   edit-config                                   |
       |     config                                      |
       |       acls                                      |
       |         acl A1 (txid: 4711)                     |
       |           aces (txid: 4711)                     |
       |             ace R1 (txid: 4711)                 |
       |               matches ipv4 dscp 20              |
       |               actions forwarding accept         |
       |                                                 |
       |   <------------------------------------------   |
       |   rpc-error                                     |
       |     error-tag       operation-failed            |
       |     error-type      protocol                    |
       |     error-severity  error                       |
       |     error-info                                  |
       |       mismatch-path /acls/acl[A1]               |
       |       mismatch-etag-value 6912                  |
       v                                                 v
]]></artwork>
          </figure>
        </section>
        <section anchor="txid-history-size-consideration">
          <name>Txid History size consideration</name>
          <t>It may be tempting for a client implementor to send only the top
level c-txid value for the tree being edited.  In most cases, that
would certainly work just fine.  This is a way for the client to
request the server to go ahead with the change as long as there
has not been any changes more recent than the client provided c-txid.</t>
          <t>Here the client is sending the same change as in
<xref target="base-edit-config">the example above</xref>, but with only one top level
c-txid value.</t>
          <figure>
            <name>Conditional transaction towards the Running datastore successfully executed.  As all the c-txid values specified by the client were the same or more recent in the server's Txid History, so the transaction was successfully executed.</name>
            <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   edit-config (request new txid in response)    |
       |     config (txid: 5152)                         |
       |       acls                                      |
       |         acl A1                                  |
       |           aces                                  |
       |             ace R1                              |
       |               matches ipv4 protocol 6           |
       |               actions forwarding accept         |
       |                                                 |
       |   <------------------------------------------   |
       |   ok (txid: 7688)                               |
       v                                                 v
]]></artwork>
          </figure>
          <t>This approach works well because the top level value is inherited
down in the child nodes and the server finds this value to either
match exactly or be a more recent s-txid value in the server's Txid
History.</t>
          <t>The only caveat is that by relying on the server's Txid History being
long enough, the change could be rejected if the top level c-txid has
fallen out of the server's Txid History.  Some servers may have a
Txid History size of zero.  A client specifying a single top-level
c-txid value towards such a server would not be able to get the
transaction accepted.</t>
        </section>
      </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 c-txid attributes to the
configuration payload the same way.  In case a client specifies
different c-txid values for the same element in successive edit-config
or edit-data operations, the c-txid value specified last MUST be used
by the server at commit time.</t>
        <figure>
          <name>Conditional transaction towards the Candidate datastore successfully executed.  As all the c-txid values specified by the client matched those on the server at the time of the commit, the transaction was successfully executed.  If a client issues a get-config towards the candidate datastore, the server may choose to return the special txid-unknown value (e.g. "!") or the s-txid value that would be used if the candidate was committed without further changes (when that s-txid value is known in advance by the server).</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   edit-config (operation: merge)                |
       |     config (txid: 5152)                         |
       |       acls (txid: 5152)                         |
       |         acl A1 (txid: 4711)                     |
       |           type ipv4                             |
       |                                                 |
       |   <------------------------------------------   |
       |   ok                                            |
       |                                                 |
       |   ------------------------------------------>   |
       |   edit-config (operation: merge)                |
       |     config                                      |
       |       acls                                      |
       |         acl A1                                  |
       |           aces (txid: 4711)                     |
       |             ace R1 (txid: 4711)                 |
       |               matches ipv4 protocol 6           |
       |               actions forwarding accept         |
       |                                                 |
       |   <------------------------------------------   |
       |   ok                                            |
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config                                    |
       |     config                                      |
       |       acls                                      |
       |         acl A1                                  |
       |           aces (txid: ?)                        |
       |                                                 |
       |   <------------------------------------------   |
       |     config                                      |
       |       acls                                      |
       |         acl A1                                  |
       |           aces (txid: 7688  or !)               |
       |             ace R1 (txid: 7688 or !)            |
       |               matches ipv4 protocol 6           |
       |               actions forwarding accept         |
       |             ace R2 (txid: 2219)                 |
       |               matches ipv4 dscp 21              |
       |               actions forwarding accept         |
       |                                                 |
       |   ------------------------------------------>   |
       |   commit (request new txid in response)         |
       |                                                 |
       |   <------------------------------------------   |
       |   ok (txid: 7688)                               |
       v                                                 v
]]></artwork>
        </figure>
      </section>
      <section anchor="dependencies-within-transactions">
        <name>Dependencies within Transactions</name>
        <t>YANG modules that contain when-statements referencing remote
parts of the model will cause the s-txid to change even in parts of the
data tree that were not modified directly.</t>
        <t>Let's say there is an energy-example.yang module that defines a
mechanism for clients to request the server to measure the amount of
energy that is consumed by a given access control rule.  The
energy-example module augments the access control module as follows:</t>
        <sourcecode type="yang"><![CDATA[
module energy-example {
...

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

  augment /acl:acls/acl:acl {
    when /energy-example:energy/energy-example:metering-enabled;
    leaf energy-tracing {
      type boolean;
      default false;
    }
    leaf energy-consumption {
      config false;
      type uint64;
      units J;
    }
  }
}
]]></sourcecode>
        <t>This means there is a system wide switch leaf metering-enabled in
energy-example which disables all energy measurements in the system when
set to false, and that there is a boolean leaf energy-tracing that
controls whether energy measurement is happening for each acl rule
individually.</t>
        <t>In this example, we have an initial configuration like this:</t>
        <figure>
          <name>Initial configuration for the energy example.  Note the energy metering-enabled leaf at the top and energy-tracing leafs under each acl.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config                                    |
       |     energy (txid: ?)                            |
       |     acls (txid: ?)                              |
       |                                                 |
       |   <------------------------------------------   |
       |   data (txid: 7688)                             |
       |     energy metering-enabled true (txid: 4711)   |
       |     acls (txid: 7688)                           |
       |       acl A1 (txid: 7688)                       |
       |         energy-tracing false                    |
       |         aces (txid: 7688)                       |
       |           ace R1 (txid: 7688)                   |
       |             matches ipv4 protocol 6             |
       |             actions forwarding accept           |
       |       acl A2 (txid: 6614)                       |
       |         energy-tracing true                     |
       |         aces (txid: 6614)                       |
       |           ace R7 (txid: 4711)                   |
       |             matches ipv4 dscp 10                |
       |             actions forwarding accept           |
       |           ace R8 (txid: 5152)                   |
       |             matches udp source-port port 22     |
       |             actions forwarding accept           |
       |           ace R9 (txid: 6614)                   |
       |             matches tcp source-port port 830    |
       |             actions forwarding accept           |
       v                                                 v
]]></artwork>
        </figure>
        <t>At this point, a client updates metering-enabled to false.  This causes
the when-expression on energy-tracing to turn false, removing the leaf
entirely.  This counts as a configuration change, and the s-txid MUST
be updated appropriately.</t>
        <figure>
          <name>Transaction changing a single leaf.  This leaf is the target of a when-statement, however, which means other leafs elsewhere may be indirectly modified by this change.  Such indirect changes will also result in s-txid changes.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   edit-config (request new txid in response)    |
       |     config                                      |
       |       energy metering-enabled false             |
       |                                                 |
       |   <------------------------------------------   |
       |   ok (txid: 9118)                               |
       v                                                 v
]]></artwork>
        </figure>
        <t>After the transaction above, the new configuration state has the
energy-tracing leafs removed.  Every such removal or (re)introduction
of a node counts as a configuration change from a txid perspective,
regardless of whether the change has any net configuration change
effect in the server.</t>
        <figure>
          <name>The txid for the energy subtree has changed since that was the target of the edit-config.  The txids of the ACLs have also changed since the energy-tracing leafs are now removed by the now false when-expression.  Both acl A1 and acl A2 have their txids updated, even though energy-tracing was already false for acl A1.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config                                    |
       |     energy (txid: ?)                            |
       |     acls (txid: ?)                              |
       |                                                 |
       |   <------------------------------------------   |
       |   data (txid: 9118)                             |
       |     energy metering-enabled false (txid: 9118)  |
       |     acls (txid: 9118)                           |
       |       acl A1 (txid: 9118)                       |
       |         aces (txid: 7688)                       |
       |           ace R1 (txid: 7688)                   |
       |             matches ipv4 protocol 6             |
       |             actions forwarding accept           |
       |       acl A2 (txid: 9118)                       |
       |         aces (txid: 6614)                       |
       |           ace R7 (txid: 4711)                   |
       |             matches ipv4 dscp 10                |
       |             actions forwarding accept           |
       |           ace R8 (txid: 5152)                   |
       |             matches udp source-port port 22     |
       |             actions forwarding accept           |
       |           ace R9 (txid: 6614)                   |
       |             matches tcp source-port port 830    |
       |             actions forwarding accept           |
       v                                                 v
]]></artwork>
        </figure>
      </section>
      <section anchor="other-netconf-operations">
        <name>Other NETCONF Operations</name>
        <dl>
          <dt>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>
          <t>The etag attribute txid mechanism</t>
        </li>
        <li>
          <t>The last-modified attribute txid mechanism</t>
        </li>
      </ul>
      <t>Servers implementing this specification MUST support the etag
attribute txid mechanism and MAY support the last-modified
attribute txid mechanism.</t>
      <t>Section <xref target="netconf-txid-extension">NETCONF Txid Extension</xref> describes
the logic that governs all txid mechanisms.  This section describes
the mapping from the generic logic to specific mechanism and encoding.</t>
      <t>If a client uses more than one txid mechanism, such as both etag and
last-modified in a particular message to a server, or 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 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>
              <t>If the versioned node holds the same data as in the running
datastore, the same txid value as the versioned node in running
MUST be used.</t>
            </li>
            <li>
              <t>If the versioned node is different in the candidate store
than in the running datastore, the server has a choice of what
to return. The server MAY return the special "txid-unknown" value "!".
If the txid-unknown value is not returned, the server MUST return
the txid value the versioned node will have if the client decides to
commit the candidate datastore without further updates.</t>
            </li>
          </ul>
        </section>
        <section anchor="namespaces-and-attribute-placement">
          <name>Namespaces and Attribute Placement</name>
          <t>The txid attributes are valid on the following NETCONF tags,
where xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0",
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>
              <t>/nc:rpc/nc:get-config</t>
            </li>
            <li>
              <t>/nc:rpc/nc:get-config/nc:filter//*</t>
            </li>
            <li>
              <t>/nc:rpc/ncds:get-data</t>
            </li>
            <li>
              <t>/nc:rpc/ncds:get-data/ncds:subtree-filter//*</t>
            </li>
            <li>
              <t>/nc:rpc/ncds:get-data/ncds:xpath-filter//*</t>
            </li>
            <li>
              <t>/nc:rpc/nc:edit-config/nc:config</t>
            </li>
            <li>
              <t>/nc:rpc/nc:edit-config/nc:config//*</t>
            </li>
            <li>
              <t>/nc:rpc/ncds:edit-data/ncds:config</t>
            </li>
            <li>
              <t>/nc:rpc/ncds:edit-data/ncds:config//*</t>
            </li>
          </ul>
          <t>In server messages sent to a client:</t>
          <ul spacing="normal">
            <li>
              <t>/nc:rpc-reply/nc:data</t>
            </li>
            <li>
              <t>/nc:rpc-reply/nc:data//*</t>
            </li>
            <li>
              <t>/nc:rpc-reply/ncds:data</t>
            </li>
            <li>
              <t>/nc:rpc-reply/ncds:data//*</t>
            </li>
            <li>
              <t>/nc:rpc-reply/nc:ok</t>
            </li>
            <li>
              <t>/yp:push-update/yp:datastore-contents/ypatch:yang-patch/
ypatch:edit</t>
            </li>
            <li>
              <t>/yp:push-update/yp:datastore-contents/ypatch:yang-patch/
ypatch:edit/ypatch:value//*</t>
            </li>
            <li>
              <t>/yp:push-change-update/yp:datastore-contents/ypatch:yang-patch/
ypatch:edit</t>
            </li>
            <li>
              <t>/yp:push-change-update/yp:datastore-contents/ypatch:yang-patch/
ypatch:edit/ypatch:value//*</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="txid-mechanism-examples">
      <name>Txid Mechanism Examples</name>
      <section anchor="initial-configuration-response">
        <name>Initial Configuration Response</name>
        <section anchor="with-etag">
          <name>With etag</name>
          <t>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.</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
(i.e. is identical to the server's txid value, or found earlier in
the server's Txid History), the leaf value is pruned.</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="7"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list">
      <acl>
        <name>A2</name>
        <aces>
          <ace>
            <name>R7</name>
            <matches>
              <ipv4>
                <dscp txid:etag="="/>
              </ipv4>
            </matches>
          </ace>
        </aces>
      </acl>
    </acls>
  </data>
</rpc-reply>
]]></sourcecode>
      </section>
      <section anchor="configuration-change">
        <name>Configuration Change</name>
        <t>A client that wishes to update the ace R1 protocol to tcp might send:</t>
        <sourcecode type="xml"><![CDATA[
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8">
  <edit-config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
               xmlns: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>
      <running/>
    </target>
    <test-option>test-then-set</test-option>
    <ietf-netconf-txid:with-etag>true</ietf-netconf-txid:with-etag>
    <config>
      <acls xmlns=
          "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
        <acl nc:operation="delete"
             txid:etag="nc7688">
          <name>A1</name>
        </acl>
      </acls>
    </config>
  </edit-config>
</rpc>
]]></sourcecode>
        <t>If acl A1 now has the etag txid value "nc7688", as expected by the
client, the transaction goes through, and the server responds
something like:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="10"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <ok txid:etag="nc8008"/>
</rpc-reply>
]]></sourcecode>
        <t>A subsequent get-config request for acls, with txid:etag="?" might
then return:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="11"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
      txid:etag="nc8008">
      <acl txid:etag="cli2222">
        <name>A2</name>
        <aces txid:etag="cli2222">
          <ace txid:etag="nc4711">
            <name>R7</name>
            <matches>
              <ipv4>
                <dscp>10</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              <forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
  </data>
</rpc>
]]></sourcecode>
        <t>In case acl A1 did not have the expected etag txid value "nc7688"
when the server processed this request, nor was the client's txid
value found later in the server's Txid History, then the server
rejects the transaction, and might send:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:acl=
            "urn:ietf:params:xml:ns:yang:ietf-access-control-list"
           xmlns:ietf-netconf-txid=
             "urn:ietf:params:xml:ns:yang:ietf-netconf-txid"
           message-id="11">
  <rpc-error>
    <error-type>protocol</error-type>
    <error-tag>operation-failed</error-tag>
    <error-severity>error</error-severity>
    <error-info>
      <ietf-netconf-txid:txid-value-mismatch-error-info>
        <ietf-netconf-txid:mismatch-path>
          /acl:acls/acl:acl[acl:name="A1"]
        </ietf-netconf-txid:mismatch-path>
        <ietf-netconf-txid:mismatch-etag-value>
          cli6912
        </ietf-netconf-txid:mismatch-etag-value>
      </ietf-netconf-txid:txid-value-mismatch-error-info>
    </error-info>
  </rpc-error>
</rpc-reply>
]]></sourcecode>
      </section>
      <section anchor="reading-from-the-candidate-datastore">
        <name>Reading from the Candidate Datastore</name>
        <t>Let's assume that a get-config towards the running datastore
currently contains the following data and txid values:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="12"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
      txid:etag="nc4711">
      <acl txid:etag="nc4711">
        <name>A1</name>
        <aces txid:etag="nc4711">
          <ace txid:etag="nc4711">
            <name>R1</name>
            <matches>
              <ipv4>
                <protocol>17</protocol>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              <forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc2219">
            <name>R2</name>
            <matches>
              <ipv4>
                <dscp>21</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              <forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
  </data>
</rpc-reply>
]]></sourcecode>
        <t>A client issues discard-changes (to make the candidate datastore
equal to the running datastore), and issues an edit-config to
change the R1 protocol from udp (17) to tcp (6), and then executes a
get-config with the txid-request attribute "?" set on the acl A1,
the server might respond:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="13"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list">
      <acl txid:etag="!">
        <name>A1</name>
        <aces txid:etag="!">
          <ace txid:etag="!">
            <name>R1</name>
            <matches>
              <ipv4>
                <protocol>6</protocol>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              <forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc2219">
            <name>R2</name>
            <matches>
              <ipv4>
                <dscp>21</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              <forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
  </data>
</rpc-reply>
]]></sourcecode>
        <t>Here, the txid-unknown value "!" is sent by the server.  This
particular server implementation does not know beforehand which
txid value would be used for this versioned node after commit.
It will be a value different from the current corresponding
txid value in the running datastore.</t>
        <t>In case the server is able to predict the txid value that would
be used for the versioned node after commit, it could respond
with that value instead.  Let's say the server knows the txid
would be "7688" if the candidate datastore was committed without
further changes, then it would respond with that value in each
place where the example shows "!" above.</t>
      </section>
      <section anchor="commit">
        <name>Commit</name>
        <t>The client MAY request that the new etag txid value is returned as an
attribute on the ok response for a successful commit.  The client
requests this by adding with-etag to the commit operation.</t>
        <t>For example, a client might send:</t>
        <sourcecode type="xml"><![CDATA[
<rpc message-id="14"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    xmlns:ietf-netconf-txid=
      "urn:ietf:params:xml:ns:yang:ietf-netconf-txid"
  <commit>
    <ietf-netconf-txid:with-etag>true</ietf-netconf-txid:with-etag>
  </commit>
</rpc>
]]></sourcecode>
        <t>Assuming the server accepted the transaction, it might respond:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="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 last-modified {
    description "Servers implementing this module MUST support the
      etag txid mechanism.  Servers MAY also support the 
      last-modified txid mechanism.  Support is shown by announcing
      this feature.";
  }

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

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

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

  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 last-modified;
      type boolean;
      description 
        "Indicates whether the client requests the server to include
         a txid:last-modified attribute when the configuration has 
         changed.";
    }
    description
      "Grouping for txid mechanisms, to be augmented into 
       rpcs that modify configuration data stores.";
  }

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

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

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

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

  sx:structure txid-value-mismatch-error-info {
    container txid-value-mismatch-error-info {
      description
         "This error is returned by a NETCONF server when a client
          sends a configuration change request, with the 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 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-02-since-01">
        <name>Major changes in -02 since -01</name>
        <ul spacing="normal">
          <li>
            <t>Added optional to implement Txid History concept in order to make
the algorithm both more efficient and less verbose.  Servers may
still choose a Txid History size of zero, which makes the server
behavior the same as in earlier versions of this document.
Implementations that use txids consisting of a monotonically
increasing integer or timestamp will be able to determine the sequnce
of transactions in the history directly, making this trivially simple
to implement.</t>
          </li>
          <li>
            <t>Added extension statement versioned-node, which servers may use to
declare which YANG tree nodes are Versioned Nodes.  This is entirely
optional, however, but possibly useful to client developers.</t>
          </li>
          <li>
            <t>Renamed YANG feature ietf-netconf-txid:txid-last-modified to
ietf-netconf-txid:last-modified in order to reduce redundant mentions
of "txid".</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-01-since-00">
        <name>Major changes in -01 since -00</name>
        <ul spacing="normal">
          <li>
            <t>Changed YANG-push txid mechanism to use a simple leaf rather than
an attribute to convey txid information.  This is preferable since
YANG-push content may be requested using other protocols than NETCONF
and other encodings than XML.  By removing the need for XML
attributes in this context, the mechanism becomes significantly
more portable.</t>
          </li>
          <li>
            <t>Added a section and YANG module augmenting the RFC9144 NMDA
datastore compare operation to allow request and reply with txid
information.  This too is done with augments of plain leafs for
maximum portability.</t>
          </li>
          <li>
            <t>Added note clarifying that the txid attributes used in the XML
encoding are never used in JSON (since RESTCONF uses HTTP headers
instead).</t>
          </li>
          <li>
            <t>Added note clarifying that pruning happens when client and server
txids <em>match</em>, since the server sending information to the client
only makes sense when the information on the client is out of date.</t>
          </li>
          <li>
            <t>Added note clarifying that this entire document is about config
true data only.</t>
          </li>
          <li>
            <t>Rephrased slightly when referring to the candidate datastore to
keep making sense in the event that private candidate datastores
become a reality in the future.</t>
          </li>
          <li>
            <t>Added a note early on to more clearly lay out the structure of this
document, with a first part about the generic mechanism part, and a
second part about the two specific txid mechanisms.</t>
          </li>
          <li>
            <t>Corrected acl data model examples to conform to their YANG module.</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-draft-ietf-netconf-transaction-id-00-since-02">
        <name>Major changes in draft-ietf-netconf-transaction-id-00 since -02</name>
        <ul spacing="normal">
          <li>
            <t>Changed the logic around how txids are handled in the candidate
datastore, both when reading (get-config, get-data) and writing
(edit-config, edit-data). Introduced a special "txid-unknown"
value "!".</t>
          </li>
          <li>
            <t>Changed the logic of copy-config to be similar to edit-config.</t>
          </li>
          <li>
            <t>Clarified how txid values interact with when-dependencies
together with default values.</t>
          </li>
          <li>
            <t>Added content to security considerations.</t>
          </li>
          <li>
            <t>Added a high-level example for YANG-Push subscriptions with txid.</t>
          </li>
          <li>
            <t>Updated language about error-info sent at txid mismatch in an
edit-config: error-info with mismatch details MUST be sent when
mismatch detected, and that the server can choose one of the txid
mismatch occurrences if there is more than one.</t>
          </li>
          <li>
            <t>Some rewording and minor additions for clarification, based
on mailing list feedback.</t>
          </li>
          <li>
            <t>Divided RFC references into normative and informative.</t>
          </li>
          <li>
            <t>Corrected a logic error in the second figure (figure 6) in the
"Conditional Transactions" section</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-02-since-01-1">
        <name>Major changes in -02 since -01</name>
        <ul spacing="normal">
          <li>
            <t>A last-modified txid mechanism has been added (back).  This
mechanism aligns well with the Last-Modified mechanism defined in
RESTCONF <xref target="RFC8040"/>,
but is not a carbon copy.</t>
          </li>
          <li>
            <t>YANG-Push functionality has been added.  This allows YANG-Push
users to receive txid updates as part of the configuration updates.
This functionality comes in a separate YANG module, to allow
implementors to cleanly keep all this functionality out.</t>
          </li>
          <li>
            <t>Changed name of "versioned elements". They are now called
"Versioned Nodes".</t>
          </li>
          <li>
            <t>Clarified txid behavior for transactions toward the Candidate
datastore, and some not so common situations, such
as when a client specifies a txid for a non-versioned node, and
when there are when-statement dependencies across subtrees.</t>
          </li>
          <li>
            <t>Examples provided for the abstract mechanism level with simple
message flow diagrams.</t>
          </li>
          <li>
            <t>More examples on protocol level, and with ietf-interfaces as
example target module replaced with ietf-access-control to reduce
confusion.</t>
          </li>
          <li>
            <t>Explicit list of XPaths to clearly state where etag or
last-modified attributes may be added by clients and servers.</t>
          </li>
          <li>
            <t>Document introduction restructured to remove duplication between
sections and to allow multiple (etag and last-modified) txid
mechanisms.</t>
          </li>
          <li>
            <t>Moved the actual YANG module code into proper module files that
are included in the source document.  These modules can be compiled
as proper modules without any extraction tools.</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-01-since-00-1">
        <name>Major changes in -01 since -00</name>
        <ul spacing="normal">
          <li>
            <t>Updated the text on numerous points in order to answer questions
that appeared on the mailing list.</t>
          </li>
          <li>
            <t>Changed the document structure into a general transaction id part
and one etag specific part.</t>
          </li>
          <li>
            <t>Renamed entag attribute to etag, prefix to txid, namespace to
urn:ietf:params:xml:ns:yang:ietf-netconf-txid.</t>
          </li>
          <li>
            <t>Set capability string to
urn:ietf:params:netconf:capability:txid:1.0</t>
          </li>
          <li>
            <t>Changed YANG module name, namespace and prefix to match names above.</t>
          </li>
          <li>
            <t>Harmonized/slightly adjusted etag value space with RFC 7232 and
RFC 8040.</t>
          </li>
          <li>
            <t>Removed all text discussing etag values provided by the client
(although this is still an interesting idea, if you ask the author)</t>
          </li>
          <li>
            <t>Clarified the etag attribute mechanism, especially when it comes to
matching against non-versioned elements, its cascading upwards in the
tree and secondary effects from when- and choice-statements.</t>
          </li>
          <li>
            <t>Added a mechanism for returning the server assigned etag value in
get-config and get-data.</t>
          </li>
          <li>
            <t>Added section describing how the NETCONF discard-changes,
copy-config, delete-config and commit operations work with respect to
etags.</t>
          </li>
          <li>
            <t>Added IANA Considerations section.</t>
          </li>
          <li>
            <t>Removed all comments about open questions.</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-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 anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
        <reference anchor="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 3189?>

<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:
H4sIAAAAAAAAA+296XYb19Ug+v88xTH8Q2QaAAfRGmBJCU3JsdKaPomO88Wd
1asIFMiygCqkBlKwP2X1i9y17hPch7j9Jv0kvacz1QACpGTLCrkSiwSqzrDP
PnseBoOBKsoonfzPaJal8UiXeRWrZJHTb0W5v7t7f3dflUk5gy97x3mUFtG4
TLJUP32sn8fjsyhNirmeZrl+8eT46OWLb3sqOjnJ43N4/MXR8dPHPTWOyvg0
y5cjXZQTVVQn86QoYIhyuYBBnz45/lZFeRyN9J/jNM6jmbrI8reneVYtRmZQ
pSbZOI3m8Pwkj6blIInL6SCNy3GWTgelW9YgmQxgwWoWpacjHafqbbyE4SYj
pfVAP03LOIe3Bo9xEKUWCX9eZmP6t8jyMo+nBf+xnNPvKs3yeVQm5zE+/Prb
o/29vfvy6539gz3z6/375te797/alV/v7R7YX+/YZ+/vHRyMlErSaW3o23fu
3TPj7e6bN+/u3953Q5tf793G8VRUlWdZzvtI0mKk/zLUz5J0cjKLJvCh1gy2
v0Rp+HGWn8LZ/Rwh1Eb6KCnGmX6zLMp4XtD38TxKZiP904xf+tMYnxiOs7lS
g8FARycFgH0MQJQj0uNZEqdloQGbdBHn53Fe6GxaxqlO43gCMNZn0XmsIwBs
Oj7LM5gcPj5P4gt4TJVnsbx1q9B4qslpldPi9CQq4aUyy+NiqPUxPHiezap5
DK+FTyp6MklxDhpKz6OlPoHn43ypZ1F+Gvf1xVkyi70xNeLwaVxoQMdkHM1m
S8RGXczhV3gYlp+d0GgTHZXmIdmshiXZzfBiE0Sx82hWDJV6HQNaT5L0VOPu
4PkkD2ZGSEVpNFv+bJ6B8RZZWsR0oWRhKkGYwsDxdJqMadp5cPFqSyAYwTtw
YwBIaamKRTxOpklMw8Tv4ETw9uGBmKMrz2BrsN/somg9xjKDexQvwpO7SMoz
gPS8Gp8xtADetLn4Ha+chsCnsgpGT5eK8IBWbMcVSNibAOuKTvB5hIYsZcgY
N08mk1ms1Jd4jfNsUtGFV+oHPKNIh2gI8xZnMc2QpEmZAAmCZ1LAtRC3PNKh
ZENmIF5kHz6Z5vE/Kxh0ttTZeFzlOR5XBac0juA/AGrcEyxYydww6RRujcZ9
JFPeSjDrWVTI6QKMk3Qce9sF0lWU8Px8XqUJkk6BtLsgcMBvEOgGccdZNZvw
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

-->

</rfc>
