<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC6241 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6241.xml">
<!ENTITY RFC6921 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6921.xml">
<!ENTITY RFC7921 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7921.xml">
<!ENTITY RFC7950 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7950.xml">
<!ENTITY RFC7951 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7951.xml">
<!ENTITY RFC8022 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8022.xml">
<!ENTITY RFC8044 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8044.xml">

<!ENTITY I-D.ietf-i2rs-ephemeral-state SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-i2rs-ephemeral-state.xml">
<!ENTITY I-D.ietf-i2rs-protocol-security-requirements 
   SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-i2rs-protocol-security-requirements.xml">
 <!ENTITY I-D.ietf-i2rs-security-environment-reqs
   SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-i2rs-security-environment-reqs.xml">
<!ENTITY I-D.ietf-netconf-restconf SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-netconf-restconf.xml">
  
<!ENTITY I-D.ietf-netmod-schema-mount 
  SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-netmod-schema-mount.xml">
 <!ENTITY I-D.ietf-netconf-call-home SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-netconf-call-home.xml">
 
  <!ENTITY I-D.ietf-netmod-revised-datatstores SYSTEM 
  "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-netmod-revised-datastores.xml">
 

]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<?rfc iprnotified="no" ?>
<?rfc strict="no" ?>
<rfc category="info" docName="draft-hares-netmod-i2rs-yang-04.txt"  ipr="trust200902">
  <front>
    <title abbrev="I2RS Protocol Yang">Yang for I2RS Protocol</title>
	<author fullname="Susan Hares" initials="S." surname="Hares">
	<organization> Huawei </organization>
	<address>
	  <postal>
	   <street></street>
	    <city>Saline</city>
		<country>US</country>
	  </postal>
	 <email>shares@ndzh.com </email>
	</address>
	</author>
	<author fullname="Amit Daas" initials="A." surname="Dass">
	<organization> Ericsson </organization>
	<address>
	 <email>amit.dass@ericsson.com</email>
	</address>
	</author> 
    <date year="2017" />
    <area>Routing Area</area>
    <workgroup>I2RS working group</workgroup>
    <keyword>RFC</keyword>
    <keyword>Request for Comments</keyword>
    <keyword>I-D</keyword>
    <keyword>Internet-Draft</keyword>
    <keyword>I2RS</keyword>
    <abstract>
      <t>This document requests yang language additions
      for the data models that exist as part of the 
      I2RS control plane datastore.  One of these additions is 
      the ability to mark a portion of the model as having ephemeral state. 
	  </t>
	 </abstract>
  </front>
  <middle>
 <section anchor="intro" title="Introduction">
    <t>This a proposal for additions to yang 1.1 <xref target="RFC7950"></xref> to support the 
	I2RS protocol. 
    </t>
    <t>	
    The I2RS architecture <xref target="RFC7921"></xref> defines 
	the I2RS interface "a programmatic interface for state transfer in and out of 
	the Internet routing system".  The I2RS protocol is a protocol designed to a
	higher level protocol comprised of a set of IETF existing protocols (NETCONF <xref target="RFC6241"></xref>,
	RESTCONF <xref target="RFC8044"></xref>, and others) which have been extended to 
	work together to support a new interface to the routing system. 
    The I2RS protocol is a "reuse" management protocol which creates new management protocols
    by reusing existing protocols and extending these protocols for new 
	uses, and has been designed to be implemented in phases <xref target="RFC7921"></xref>.
	</t>
	<t>
     This document suggests the following additions to Yang to support the I2RS control plane datastore. 
	<xref target="I-D.ietf-i2rs-ephemeral-state"></xref> specifies the I2RS requirements for the ephemeral state. 
	</t>
	<t>Section 3 of this document defines optional additions to yang 1.1 to support I2RS ephemeral control plane datastore. 
	The main addition is the datastore statement with four new substatements (dstype, ephemeral, protosup, validation).   
	The protosup substatement has two valid substatements (protobase, protoadd). The validation substatement has 
	has three new substatements: bulkchecks, caching, and nstransport.   
	</t>
	<t>Section 4 provides the augmentation to RFC7950 tables for these optional features. </t>
</section> 
<section title="Definitions">
<section title="Requirements language">
  <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
  document are to be interpreted as described in <xref target="RFC2119">RFC 2119</xref>.
	</t>
 </section>
<section title="I2RS Definitions">
 <t>The I2RS architecture <xref target="RFC7921"></xref>
defines the following terms: 
<list style="hanging">
<t hangText="ephemeral data: "> is data which does not persist across a 
reboot (software or hardware) or a power on/off condition.  Ephemeral 
data can be configured data or data recorded from operations of the router. 
Ephemeral configuration data also has the property that a system 
cannot roll back to a previous ephemeral configuration state.
(See <xref target="RFC7921"></xref> for an architectural overview, 
 <xref target="I-D.ietf-i2rs-ephemeral-state"></xref> for requirements, 
 and <xref target="I-D.ietf-netmod-revised-datastores"></xref>
 for discussion of how the ephemeral datastore as a control plane 
 datastore interacts with intended configuration datstore, 
 the dynamic configuration protocols, and control planes datastore to 
 create the applied datastore and operational state datastore. 
</t>
<t hangText="local configuration: ">is the data on a routing system 
which does persist across a reboot (software or hardware) and a 
power on/off condition.  Local configuration is defined as the intended datastore
 as defined in <xref target="I-D.ietf-netmod-revised-datastores"></xref>. 
</t>
<t hangText="dynamic configuration protocols datastore">
are configuration protocols such as DHCP that interact
with the intended datastore (which does persist across a reboot 
(software or hardware) power on/off condition), 
and the I2RS ephemeral state control plane datastore.  
</t>
<t hangText="applied datastore  ">Read only datastore  
regarding configuration state installed in the routing system
as defined in <xref target="I-D.ietf-netmod-revised-datastores"></xref>. 
</t>
<t hangText="operational state ">Read only datastore  
that combines applied datastore and operational state
as defined in <xref target="I-D.ietf-netmod-revised-datastores"></xref>. 
</t>
<t hangText="operator-applied policy:  "> is a policy that 
an operator sets that determines how the ephemeral datastore
as a control plane data store interacts with intended configuration  
(see  <xref target="I-D.ietf-netmod-revised-datastores"></xref>). 
This operator policy consists of setting a priority 
for each of the following (per <xref target="I-D.ietf-i2rs-ephemeral-state"></xref>):
<list style="symbols">
<t>intended configuration,  </t>
<t>any dynamic configuration protocols,
 </t>
<t>any control plane datastores (one of which is ephemeral.)
</t>
</list>
</t>
</list>
</t>
</section>
</section> 
<section title="yang additions">
<section title="datastoredef">
<t>The "datastoredef" is a statement that defines a datastore provides the ability
to describe which datastore a module or submodule may be loaded into.  Each datastore
statement must refer to a name defined in a datastoredef statement.   
</t>
<t>The new substatements for the datstoredef command are 
dstype, ephemeral, module-list, precedence, protosup, and validation. 
The dstype provides information on the type of the datastore. 
The ephemeral flag indicates the datastore is ephemeral. 
The module-list provides a list of modules included in this 
datastore. the protosup indicates the protocol support 
for this datastore, and the validation provides information on the validation. 
</t>
<t>
The "dsname" must be  MUST be a nmae registered with 
IANA (see <xref target="I-D.ietf-netmod-revised-datastores"></xref>).  
</t>
<t>
<figure> 
<artwork>
Data store syntax: 

datastoredef &lt;dsname&gt; {
   &lt;sub-statements&gt;
}; 

dsname - Must be registered name for datastore 

      Figure 1 
</artwork>
</figure>
</t>
 <t>
The substatements for the datastore substatement are listed below: 
<figure> 
<artwork> 

  Table 1 
+---------------+----------+---------+-------------+
|               | This     |         |             | 
|               | document | RFC7960 |             |
| substatement  | section  | section | cardinality |
+---------------+----------+---------+-------------+
| description   |   -      | 7.21.3  | 0..1        |
| dstype        |   3.3    |   -     | 1           |
| ephemeral     |   3.4    |   -     | 0..n        |
| module        |          |  7.1    | 0..n        | 
| module-list   |   3.5    |   -     | 0..n        |
| organization  |    -     | 7.1.7   | 0..1        |
| precedence    |   3.6    |   -     | 0..n        | 
| protosup      |   3.7    |   -     | 0..n        |      
| reference     |   -      | 7.21.4  | 0..1        |
| revision      |   -      | 7.1.9   | 0..n        |
| revision-date |   -      | 7.1.5.1 | 0..1        |
| validation    |   3.8    |   -     | 0..n        | 
| version       |          | 7.1.9   | 0..n        |    
+---------------+----------+---------+-------------+
                         
</artwork>
</figure>
</t>
<t>Note:There is a variance with ephemeral control-plane datastore example 
in <xref target="I-D.ietf-netmod-revised-datastores"></xref> which 
uses "module" to define a datastore rather than datastore.  
Rather than assume the "module" will be re-used this document 
uses "datastoredef". 
</t>
<t>
<figure>
<artwork> 
Example of use:

datastoredef i2rs-agent {
	 dstype control-plane; 
     description {"I2RS Agent datastore "};
	 ephemeral true;
	 module-list ietf-i2rs-rib, ietf-network, ietf-network-topology,
          ietf-l3-unicast-topology; 
	 protosup {
		protobase netconf; 
		protoadd control-plane; 
        protoadd ephemeral;		
	 }
	 precedence applied {
	  precedenceval 5; //set to high value//
	 }
     precedence opstate {
	  precedence 5;   //set to high value//
	 }
	 revision 0.0; 
	 version 1.0; 
	 
}
</artwork>
</figure>
</t>
</section> 
<section title="datastore">
 <t>The "datastore" can be a substatement for the Yang Module statement provides the ability
to describe which datastore a module or submodule may be loaded into.  If no "datastore" 
statement exists, there is no restriction on the datastores a module or submodule
can be loaded into.
</t> 
<t>The argument the datastore is a datastore name denoted as "dsname". 
The "dsname" must be  MUST be a nmae registered with 
IANA (see <xref target="I-D.ietf-netmod-revised-datastores"></xref>).  
</t>
<t>The vaid substatements for the datastore statement are in Table 1.  The "description" substatement 
provides a description of the datastore.  The "dstype" provides 
information on the class (e.g., config or control plane) and 
the subclass of the datastore (e.g., i2rs).  The ephemeral 
indicates that entire datastore is ephemeral.  The validation 
provides alternate validation rules for the datastore.  
</t> 
<t>
<figure> 
<artwork>
Data store syntax: 

datastore &lt;dsname&gt; {
   &lt;sub-statements&gt;
}; 

dsname - must be defined in a datastoredef statement

      Figure 2 
</artwork>
</figure>
</t>
<t>
The substatements for the datastore substatement are listed below: 
<figure> 
<artwork> 

  Table 2 
+---------------+----------+---------+-------------+
|               | This     |         |             | 
|               | document | RFC7960 |             |
| substatement  | section  | section | cardinality |
+---------------+----------+---------+-------------+
| description   |   -      | 7.21.3  | 0..1        |
| dstype        |   3.4    |   -     | 1           |
| ephemeral     |   3.5    |   -     | 0..n        |
| protosup      |   3.7    |   -     | 0..n        |       
| reference     |   -      | 7.21.4  | 0..1        |
| revision      |   -      | 7.1.9   | 0..n        |
| revision-date |   -      | 7.1.5.1 | 0..1        |
| validation    |   3.8    |   -     | 0..n        | 
| version       |          | 7.1.9   | 0..n        |    
+---------------+----------+---------+-------------+
                         
</artwork>
</figure>
</t>

<t>Application Comments: 
</t>
<t>
A module may be mounted into different datastores. 
The datastore statement indicates which datastores a module 
may be mounted in, and the characteristics of each datastore. 
</t>
<t>
<figure>
<artwork> 
Example of use where a module is utilized 
in two different datastores. 

module ietf-i2rs-rib {
      yang-version 1.1; 
     namespace "urn:ietf:params:xml:ns:yang:ietf-i2rs-rib";
     // replace with iana namespace when assigned
	 prefix "iir";
	 import ietf-inet-types {
	    prefix inet;
		//rfc6991
		}
	  ....
     organization
       "IETF I2RS (Interface to Routing System) Working Group";
	  .... 
	   
      datastore i2rs-agent {
	    dstype "control-plane" "i2rs-vo";
		ephemeral true; 
		protosup {
		 protobase netconf; 
		 protoadd control-plane; 
		 protoadd ephemeral; 
		 }
	  }
	  datastore config {
		dstype config; 
		ephemeral false; 
		protosup {
		 protobase restconf; 
		}
		protosup {
		 protobase netconf;
		 }
	  }
	 
}
</artwork>
</figure>
</t>
</section> 
<section title="dstype">
<t>They substatement dstype indicates the 
datastore class and subclass of the datastore. 
A dstype substatement may only exist within a datastore 
statement. 
</t>
<t>
<figure>
<artwork>
Syntax of the dstype datastore is: 

dstype &lt;dsclass&gt; &lt;dsname&gt;;  

where: 
    dsclass: ["config" | "control-plane ] 
    dssubclass [ "i2rs-v0" ] 
	
Figure 3 
</artwork>
</figure>
</t>
</section>
<section title="ephemeral ">
<t>The ephemeral indicates that an object is ephemeral data 
which does not survive a reboot (see <xref target="I-D.ietf-i2rs-ephemeral-state"></xref>).
The definition of the object may be a datastore, a module, a submodule, an action, 
a container, a grouping, a leaf, a leaf-list, a list, or an rpc.
</t>
<t>
<figure>
<artwork>
Syntax is the following: 
ephemeral  [true | false];

The value "true" indicates the object is not ephemeral. 
The value "false" indicates the value is ephemeral.  

Figure 4 
</artwork>
</figure>
</t>
<t>Note: There is a variance with ephemeral functionality 
with <xref target="I-D.ietf-netmod-revised-datastores"></xref>.  
Rather than consider the keyword ephemeral as a identity, 
this proposes ephemeral will be a yang substatement. 
</t>
</section>
<section title="module-list ">
<t>The module list contains a list of module names. 
</t>
<t>
<figure>
<artwork>
Syntax is the following: 
module-list &lt;module-name-1&gt;, .... &lt;module-name-n&gt;;

Each name on the list (e.g. &lt;module-name-1&gt;)
must be a name in a module statement. 

Figure 5 
</artwork>
</figure>
</t>
</section>
<section title="precedence ">
<t>The precedence provides the value for precedence insertion of the  
datastores (the precedence substatement is contained) versus the datastore "dsname".  
Examples of datastore can be applied, opstate, or other control plane datastores.
If no precedence is statement is given,  the configuration 
datastore takes precedence. 
 </t>
 <t>
 The module-list restricts this precedence for just these modules.
 A submodule must belong to one of the modules in the module list, and it 
 further restricts the precedence value to just the submodule within 
 the module.  
 </t>
<t>
<figure>
<artwork>
Syntax is the following: 

precedence [applied | opstate | &lt;dsname&gt; ] {
    &lt;&lt;precedence-substatements&gt;&gt;
};

dsname - registered name for datastore 
 
Figure 6
</artwork>
</figure>
</t>
<t>
<figure>
<artwork> 

    Table 3 
+---------------+----------+---------+-------------+
|               | document | RFC7960 |             |
| substatement  | section  | section | cardinality |
+---------------+----------+---------+-------------+
| description   |    -     | 7.21.3  | 0..1        |
| module-list   |  3.x     |   -     | 0..n        |
| precedenceval |  3.x     |   -     | 1           | 
| sub-modules   |          |  7.2    | 0..n        |
+---------------+----------+---------+-------------+
</artwork> 
</figure> 
</t>
 
<section title="precedenceval">
<t>The precedenceval provides the value for precedence.
 </t>
 <t>
 </t>
<t>
<figure>
<artwork>
Syntax is the following: 

precedenceval &lt;precedence-integer&gt;; 
 
&lt;precedence-integer&gt;; - is the integer value for precedence. 
	 
 
Figure 7
</artwork>
</figure>
</t>
</section> 
</section> 
<section title="protosup statement">
<t>This indicates which protocols support this datastore. The protocols can 
be netconf, restconf, coap, gprc, and bgp. 
The substatements for protosup are protocobase and protoadd 
</t>
<t>
<figure>
<artwork>
Syntax is the following: 
protosup  {
    &lt;&lt;protosup substatements&gt;&gt;
}

Figure 8
</artwork>
</figure>
</t>
<t>
<figure>
<artwork> 

    Table 4
+---------------+----------+---------+-------------+
|               | document | RFC7960 |             |
| substatement  | section  | section | cardinality |
+---------------+----------+---------+-------------+
| description   |   -      | 7.21.3  | 0..1        |
| protobase     |  3.4.1   |   -     | 1..n        |
| protoadd      |  3.4.2   |   -     | 1..n        |
+---------------+----------+---------+-------------+
</artwork> 
</figure> 
</t>

<section title="protobase">
<t>The protobase substatement indicates the protocol 
a database can be sent over.  The syntax is below: 
<figure>
<artwork>

Syntax for protobase: 

   protobase  [netconf | restconf | coap 
               | bgp | isis | ospf | dots 
			   | &lt;protocol-name&gt; ] 
	
	
Where protocolo-name is one of protocol names 
      registered by IANA. 
 Figure 9	
</artwork>
</figure>
</t>			
</section> 
<section title="protoadd">
<t>The protoadd specifies required optional additions to a 
protocol that sends information to a datastore.  
One example of such an addition is the additions to 
RESTCONF to support the I2RS protocol denoted as "i2rs".
<figure>
<artwork>

Syntax for proto add: 
		   
   protoadd  [control-plane | i2rs | i2nsf | 
             | ephemeral | &lt;proto-add-string&gt;]
			 
Figure 10
</artwork>
</figure>
</t>	
<t>
 
 The protocol additions is the name of a capability or grouping of capabilities 
 for support.  For example, the "i2rs" capability is a capability which 
 combines the capabilities the "control-plane" netconf capability with the 
 netconf ephemeral capability.  
 
</t>
 </section>
</section>
<section title="validation ">
<t>The validation keyword indicates that the object uses alternate validation besides
the mechanisms defined by the configuration datastore as defined in <xref target="RFC7950"></xref>.
The validation subcommand is invalid in any module or submodule which is only defined
for the configuration datastore.  Unless the module has a datastore statement which includes
a datastore other than config, all validation statements in the module are ignored.  Unless the 
submodule has a datastore statement which includes a datastore other than config, 
all validation statements are ignored.  
</t> 
<t>
The validation can be set on a datastore command in a a module, a submodule, an action, 
a container, a grouping, a leaf, a leaf-list, a list, or an rpc.
The validation substatements include nstransport and bulk-checks as shown in 
table 3. 
</t>
<t>
<figure>
<artwork>
Syntax of the validation is: 
 validation {
    &lt;&lt;validation-substatements&gt;&gt;
   };
   
 Figure 11
</artwork>
</figure>
</t>
<t>
<figure>
<artwork>

    Table 5 
+---------------+----------+---------+-------------+
|               | document | RFC7960 |             |
| substatement  | section  | section | cardinality |
+---------------+----------+---------+-------------+
| description   |   -      | 7.21.3  | 0..1        |
| bulkchecks    |   3.8.1  |   -     | 0..1        |
| caching       |   3.8.2  |   -     | 0..1        |  
| nstransport   |   3.8.3  |   -     | 0..1        |
| organization  |   -      | 7.1.7   | 0..1        |
| reference     |   -      | 7.21.4  | 0..n        |
| revision-date |   -      | 7.1.5.1 | 0..1        |
| version       |          | 7.1.9   | 0..n        |     
+---------------+----------+---------+-------------+
</artwork>
</figure>
</t>
<section title="bulkcheck"> 
<t>The bulkcheck flag indicates whether this object uses bulk-check validation 
instead of the normal configuration datastore validation.  The protocol updating
the object must support bulk checking mechanism, or indicate that this 
object is not supported. 
</t>
<t>This is a new feature for control plane protocols and control plane datastores. 
In the configuration datastores, it is possible to support this feature 
at the validation level for the rpc object.  Early implemementers of this feature 
for module which may loaded in the configuration datastore are encouraged to 
place bulkcheck features within "rpc" functionality.
</t>
<t>
<figure>
<artwork>
bulkcheck syntax: 

bulkchecks  [yes | no];

Figure 12 
</artwork>
</figure>
</t>
<t>
The value "no" indicates the object does not allows "bulkchecks" of data, and uses the normal configuration datastore checking.  
The value "yes" indicates the object does not allows "bulkchecks" of data within this object.   
</t>
</section>
<section title="caching"> 
<t>The caching flag indicates whether the I2RS support caching of multiple 
client information within I2RS Agents.  
</t>
<t>Application note: This feature is not supported for the I2RS protocol 
version 0 
</t>
<t>
<figure>
<artwork>
caching syntax: 

caching  [yes | no];

Figure 13 

</artwork>
</figure>
</t>
<t>
The value "no" indicates the object does not allows "bulkchecks" of data, and uses the normal configuration datastore checking.  
The value "yes" indicates the object does not allows "bulkchecks" of data within this object.   
</t>
</section>
<section title="nstransport"> 
<t>The nstransport indicates whether this object may be sent across a non-secure transport. 
Sending data across a non-secure transport should be done only if the circumstances warrant it. 
</t>
<t>This is a new feature for the I2RS control plane protocols and control plane datastores. 
</t>
<t>
Caution: For a description of when a on-secure transport is appropriate for I2RS control plane protocol, 
please refer to the I2RS protocol security requirements <xref target="I-D.ietf-i2rs-protocol-security-requirements"></xref>.
Implementers of this feature in an I2RS implementation should also review the I2RS security 
requirements <xref target="I-D.ietf-i2rs-security-environment-reqs"></xref>.  
No data which reveals any identity for a person or confidential information should
be sent via a non-secure transport. 
</t>
<t>
<figure>
<artwork>
Syntax is the following: 

nstransport  [yes | no];
 
 Figure 14 
</artwork>
</figure>
The value "no" indicates the object does not allows "bulkchecks" of data, and uses the normal configuration datastore checking.  
The value "yes" indicates the object does not allows "bulkchecks" of data within this object. 
</t>
</section>
</section> 
</section> 

<section title="Change to RFC7950">
<t> The optional attributes add options to the tables for substatements for the 
module (section 7.1.1), submodule table, action, container, grouping, leaf, 
leaf-list, a list, and an rpc.  This section provides the revised tables. 
</t>
<section title="Additions to the Module table"> 
<t>
This is the additions to module's substatment table in 
section 7.1.1 of <xref target="RFC7950"></xref>.  
<figure>
<artwork>
     7.1.1 substatement (replacement)
  +--------------+----------+-------------+
  |              | RFC7950  |             |
  | substatement | section  | cardinality |
  +--------------+----------+-------------+
  | anydata      | 7.10     | 0..n        |
  | anyxml       | 7.11     | 0..n        |
  | augment      | 7.17     | 0..n        |
  | choice       | 7.9      | 0..n        |
  | contact      | 7.1.8    | 0..1        |
  | container    | 7.5      | 0..n        |
  | description  | 7.21.3   | 0..1        |
  | deviation    | 7.20.3   | 0..n        |
  | extension    | 7.19     | 0..n        |
  | feature      | 7.20.1   | 0..n        |
  | grouping     | 7.12     | 0..n        |
  | identity     | 7.18     | 0..n        |
  | import       | 7.1.5    | 0..n        |
  | include      | 7.1.6    | 0..n        |
  | leaf         | 7.6      | 0..n        |
  | leaf-list    | 7.7      | 0..n        |
  | list         | 7.8      | 0..n        |
  | namespace    | 7.1.3    | 1           |
  | notification | 7.16     | 0..n        |
  | organization | 7.1.7    | 0..1        |
  | prefix       | 7.1.4    | 1           |
  | reference    | 7.21.4   | 0..1        |
  | revision     | 7.1.9    |  0..n       |
  | rpc          | 7.14     | 0..n        |
  | typedef      | 7.3      | 0..n        |
  | uses         | 7.13     | 0..n        |
  | yang-version | 7.1.2    | 1           |
  +--------------+----------+-------------+
  | optional     | This     |             |
  | Yang 1.1     |document's|             |
  | substatement | section  | cardinality |
  +--------------+----------+-------------+  
  | datastore    | 3.2      | 0..n        |
  | ephemeral    | 3.4      | 0..n        |
  | validation   | 3.8      | 0..n        | 
  +--------------+----------+-------------+
  
</artwork>
</figure>
</t>
</section> 
<section title="Additions to the submodule substatement list">
<t>
Below would be the replacement for the substatement table in setion 7.2.1 of   
<xref target="RFC7950"></xref> which lists the 
valid submodule statements. 
<figure>
<artwork>

  7.2.1.  The submodule's Substatements (replcement)
 
  +--------------+----------+-------------+
  |              | RFC7950  |             |
  | substatement | section  | cardinality |
  +--------------+----------+-------------+
  | anydata      | 7.10     | 0..n        |
  | anyxml       | 7.11     | 0..n        |
  | augment      | 7.17     | 0..n        |
  | belongs-to   | 7.2.2    | 1           |
  | choice       | 7.9      | 0..n        |
  | contact      | 7.1.8    | 0..1        |
  | container    | 7.5      | 0..n        |
  | description  | 7.21.3   | 0..1        |
  | deviation    | 7.20.3   | 0..n        |
  | extension    | 7.19     | 0..n        |
  | feature      | 7.20.1   | 0..n        |
  | grouping     | 7.12     | 0..n        |
  | identity     | 7.18     | 0..n        |
  | import       | 7.1.5    | 0..n        |
  | include      | 7.1.6    | 0..n        |
  | leaf         | 7.6      | 0..n        |
  | leaf-list    | 7.7      | 0..n        |
  | list         | 7.8      | 0..n        |
  | namespace    | 7.1.3    | 1           |
  | notification | 7.16     | 0..n        |
  | organization | 7.1.7    | 0..1        |
  | reference    | 7.21.4   | 0..1        |
  | revision     | 7.1.9    |  0..n       |
  | rpc          | 7.14     | 0..n        |
  | typedef      | 7.3      | 0..n        |
  | uses         | 7.13     | 0..n        |
  | yang-version | 7.1.2    | 1           |
  +--------------+----------+-------------+
  | optional     | This     |             |
  | Yang 1.1     |document's|             |
  | substatement | section  | cardinality |
  +--------------+----------+-------------+
  | ephemeral    | 3.4      | 0..n        |
  | validation   | 3.8      | 0..n        | 
  +--------------+----------+-------------+  

  
</artwork>
</figure>
</t>
</section>
<section title="Additions to the container substatement list">
<t>
Below would be the replacement for the substatement table in section 7.5.2 of  
<xref target="RFC7950"></xref> that lists the 
legal container substatements. 
<figure>
<artwork>

7.5.2.  The container Substatements (replacement)
 
  +--------------+----------+-------------+
  |              | RFC7950  |             |
  | substatement | section  | cardinality |
  +--------------+----------+-------------+
  | action       | 7.15     | 0..n        |
  | anydata      | 7.10     | 0..n        |
  | anyxml       | 7.11     | 0..n        |
  | choice       | 7.9      | 0..n        |
  | config       | 7.21.1   | 0..1        |
  | description  | 7.21.3   | 0..1        |
  | grouping     | 7.12     | 0..n        |
  | if-feature   | 7.20.2   | 0..n        | 
  | leaf         | 7.6      | 0..n        |
  | leaf-list    | 7.7      | 0..n        |
  | list         | 7.8      | 0..n        |
  | must         | 7.5.3    | 0..n        |
  | notification | 7.16     | 0..n        |
  | presennce    | 7.5.5    | 0..1        |
  | reference    | 7.21.4   | 0..1        |
  | status       | 7.1.9    | 0..1        |
  | typedef      | 7.3      | 0..n        |
  | uses         | 7.13     | 0..n        |
  | when         | 7.21.5   | 0..1        |
  +--------------+----------+-------------+
  | optional     | This     |             |
  | Yang 1.1     |document's|             |
  | substatement | section  | cardinality |
  +--------------+----------+-------------+  
  | ephemeral    | 3.4      | 0..n        |
  | validation   | 3.8      | 0..n        | 
  +--------------+----------+-------------+ 
  
</artwork>
</figure>
</t>
</section>
<section title="Additions to leaf substatement list">
<t>
Below would be replacement for the substatement table in section 7.6.2 of 
<xref target="RFC7950"></xref> which provides the 
leaf's substatements. 
<figure>
<artwork>

7.6.2  The leaf's Substatements (replacement)
 
  +--------------+----------+-------------+
  |              | RFC7950  |             |
  | substatement | section  | cardinality |
  +--------------+----------+-------------+
  | config       | 7.21.1   | 0..1        |
  | default      | 7.6.4    | 0..1        |
  | description  | 7.21.3   | 0..1        |
  | if-feature   | 7.20.2   | 0..n        | 
  | mandatory    | 7.6.5    | 0..1        |
  | must         | 7.5.3    | 0..n        |
  | reference    | 7.21.4   | 0..1        |
  | status       | 7.21.2   | 0..1        |
  | type         | 7.6.3    | 1           |
  | units        | 7.3.3    | 0..1        |
  | when         | 7.21.5   | 0..1        |
  +--------------+----------+-------------+
  | optional     | This     |             |
  | Yang 1.1     |document's|             |
  | substatement | section  | cardinality |
  +--------------+----------+-------------+  
  | ephemeral    | 3.4      | 0..n        |
  | validation   | 3.8      | 0..n        | 
  +--------------+----------+-------------+ 
 
</artwork>
</figure>
</t>
</section>
<section title="Additions to leaf-list substatement list">
<t>
Below would be the replacement for the substatement table in section 7.7.2 in 
<xref target="RFC7950"></xref> which provides the list of the 
 leaf-lists substatements. 
<figure>
<artwork>

7.7.2  The leaf's Substatements (replacement)
 
  +--------------+----------+-------------+
  |              | RFC7950  |             |
  | substatement | section  | cardinality |
  +--------------+----------+-------------+
  | config       | 7.21.1   | 0..1        |
  | default      | 7.6.4    | 0..1        |
  | description  | 7.21.3   | 0..1        |
  | if-feature   | 7.20.2   | 0..n        |
  | max-elements | 7.7.6    | 0..1        |
  | min-elements | 7.7.5    | 0..1        |
  | must         | 7.5.3    | 0..n        |
  | ordered-by   | 7.7.7    | 0..1        |
  | reference    | 7.21.4   | 0..1        |
  | status       | 7.21.2   | 0..1        |
  | type         | 7.6.3    | 1           |
  | units        | 7.3.3    | 0..1        |
  | when         | 7.21.5   | 0..1        |
  +--------------+---------+-------------+
  | optional     | This     |             |
  | Yang 1.1     |document's|             |
  | substatement | section  | cardinality |
  +--------------+----------+-------------+  
  | ephemeral    | 3.4      | 0..n        |
  | validation   | 3.8      | 0..n        | 
  +--------------+----------+-------------+ 
 
</artwork>
</figure>
</t>
</section>
<section title="Additions to list substatement list">
<t>
Below would be the replacement for the table in section 7.8.1 in 
<xref target="RFC7950"></xref> which provides the 
list's substatements. 
<figure>
<artwork>

7.8.1  The list's Substatements (replacement)
 
  +--------------+----------+-------------+
  |              | RFC7950  |             |
  | substatement | section  | cardinality |
  +--------------+----------+-------------+
  | action       | 7.15     | 0..n        |
  | anydata      | 7.10     | 0..n        |
  | anyxml       | 7.11     | 0..n        |
  | choice       | 7.9      | 0..n        | 
  | config       | 7.21.1   | 0..1        |
  | container    | 7.5      | 0..n        | 
  | description  | 7.21.3   | 0..1        |
  | grouping     | 7.12     | 0..n        | 
  | if-feature   | 7.20.2   | 0..n        |
  | key          | 7.8.2    | 0..n        | 
  | leaf         | 7.6      | 0..n        |
  | leaf-list    | 7.7      | 0..n        | 
  | list         | 7.8      | 0..n        | 
  | max-elements | 7.7.6    | 0..1        |
  | min-elements | 7.7.5    | 0..1        |
  | must         | 7.5.3    | 0..n        |
  | notification | 7.16     | 0..n        } 
  | ordered-by   | 7.7.7    | 0..1        |
  | reference    | 7.21.4   | 0..1        |
  | status       | 7.21.2   | 0..1        |
  | typedef      | 7.3      | 0..n        |
  | uses         | 7.13     | 0..n        |
  | when         | 7.21.5   | 0..1        |
  +--------------+----------+-------------+
  | optional     | This     |             |
  | Yang 1.1     |document's|             |
  | substatement | section  | cardinality |
  +--------------+----------+-------------+  
  | ephemeral    | 3.4      | 0..n        |
  | validation   | 3.8      | 0..n        | 
  +--------------+----------+-------------+ 

   
</artwork>
</figure>
</t>
</section>
<section title="Additions to the grouping substatement table">
<t>
Below would be the replacement for the table 7.12.1 of 
<xref target="RFC7950"></xref> that lists the vaid substatments
for the container substatements. 
<figure>
<artwork>

7.12.1.  The grouping's Substatements (replacement)
 
  +--------------+----------+-------------+
  |              | RFC7950  |             |
  | substatement | section  | cardinality |
  +--------------+----------+-------------+
  | action       | 7.15     | 0..n        |
  | anydata      | 7.10     | 0..n        |
  | anyxml       | 7.11     | 0..n        |
  | choice       | 7.9      | 0..n        |
  | description  | 7.21.3   | 0..1        | 
  | grouping     | 7.12     | 0..n        |
  | leaf         | 7.6      | 0..n        |
  | leaf-list    | 7.7      | 0..n        |
  | list         | 7.8      | 0..n        |
  | notification | 7.16     | 0..n        |
  | reference    | 7.21.4   | 0..1        |
  | status       | 7.1.9    | 0..1        |
  | typedef      | 7.3      | 0..n        |
  | uses         | 7.13     | 0..n        |
  +--------------+----------+-------------+
  | optional     | This     |             |
  | Yang 1.1     |document's|             |
  | substatement | section  | cardinality |
  +--------------+----------+-------------+  
  | ephemeral    | 3.4      | 0..n        |
  | validation   | 3.8      | 0..n        | 
  +--------------+----------+-------------+ 
 
</artwork>
</figure>
</t>
</section>
<section title="Additions to the rpc substatement list">
<t>
Below would be the replacement for the table in section 7.14.1 of 
<xref target="RFC7950"></xref> that lists the 
legal rpc substatements. 
<figure>
<artwork>

7.5.2.  The rpc Substatements
 
  +--------------+----------+-------------+
  |              | RFC7950  |             |
  | substatement | section  | cardinality |
  +--------------+----------+-------------+
  | description  | 7.21.3   | 0..1        |
  | grouping     | 7.12     | 0..n        |
  | if-feature   | 7.20.2   | 0..n        |
  | input        | 7.14.2   | 0..1        |
  | output       | 7.14.3   | 0..1        |
  | reference    | 7.21.4   | 0..1        |
  | status       | 7.1.9    | 0..1        |
  | typedef      | 7.3      | 0..n        |
  +--------------+=---------+-------------+
  | optional     | This     |             |
  | Yang 1.1     |document's|             |
  | substatement | section  | cardinality |
  +--------------+----------+-------------+  
  | ephemeral    | 3.4      | 0..n        |
  | validation   | 3.8      | 0..n        | 
  +--------------+----------+-------------+ 
 
</artwork>
</figure>
</t>
</section>
<section title="Additions to the action substatement list">
<t>
Below would be the replacement for the table 7.15.1 of 
<xref target="RFC7950"></xref> that lists the 
legal action substatements. 
<figure>
<artwork>

7.5.2.  The action Substatements
 
  +--------------+----------+-------------+
  |              | RFC7950  |             |
  | substatement | section  | cardinality |
  +--------------+----------+-------------+
  | description  | 7.21.3   | 0..1        |
  | grouping     | 7.12     | 0..n        |
  | if-feature   | 7.20.2   | 0..n        |
  | input        | 7.14.2   | 0..1        |
  | output       | 7.14.3   | 0..1        |
  | reference    | 7.21.4   | 0..1        |
  | status       | 7.1.9    | 0..1        |
  | typedef      | 7.3      | 0..n        |
  +--------------+=---------+-------------+
  | optional     | This     |             |
  | Yang 1.1     |document's|             |
  | substatement | section  | cardinality |
  +--------------+----------+-------------+  
  | ephemeral    | 3.4      | 0..n        |
  | validation   | 3.8      | 0..n        | 
  +--------------+----------+-------------+ 
 
   Figure 2 
</artwork>
</figure>
</t>
</section>
</section> 
<section anchor="IANA" title="IANA Considerations">
 <t>The additions for registries go here.   </t>
 </section>
 <section title="Security Considerations">
 <t>
 The security requirements for the I2RS protocol are 
 covered in <xref target="I-D.ietf-i2rs-protocol-security-requirements"></xref>.
 The security environment the I2RS protocol is covered in
 <xref target="I-D.ietf-i2rs-security-environment-reqs"></xref>.
 Any person implementing or deploying these yang additions for 
 an I2RS protocol should consider both security requirements.  
</t>
</section>
<section anchor="Acknowledgements" title="Acknowledgements">
<t>tBD</t>
</section>
</middle>
 <back>
    <references title="Normative References:">
	 &RFC2119;
	 &RFC6241;
	 &RFC7921;
	 &RFC7950;
	 &RFC8044;
	 </references>
	 <references title="Informative References">
 	 &I-D.ietf-netmod-revised-datatstores;
	 &I-D.ietf-i2rs-ephemeral-state;
	 &I-D.ietf-i2rs-protocol-security-requirements;
	 &I-D.ietf-i2rs-security-environment-reqs;	
	 </references>
  </back>
</rfc>