<?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 RFC4107 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4107.xml">
<!ENTITY RFC4960 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4960.xml">
<!ENTITY RFC5339 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5339.xml">
<!ENTITY RFC5424 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5424.xml">
<!ENTITY RFC6020 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6020.xml">
<!ENTITY RFC6241 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6241.xml">
<!ENTITY RFC6242 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6242.xml">
<!ENTITY RFC6244 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6244.xml">
<!ENTITY RFC6536 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6536.xml">
<!ENTITY RFC6921 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6921.xml">
<!ENTITY RFC7158 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7158.xml">
<!ENTITY RFC7589 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7589.xml">
<!ENTITY RFC7803 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7803.xml">
<!ENTITY RFC7895 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7895.xml">
<!ENTITY RFC7920 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7920.xml">
<!ENTITY RFC7921 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7921.xml">
<!ENTITY RFC7922 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7922.xml">
<!ENTITY RFC7923 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7923.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 RFC7952 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7952.xml">
<!ENTITY RFC7958 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7958.xml">
<!ENTITY RFC8022 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8022.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-i2rs-rib-info-model SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-i2rs-rib-info-model.xml">
<!ENTITY I-D.ietf-i2rs-rib-data-model SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-i2rs-rib-data-model.xml">
<!ENTITY I-D.ietf-i2rs-yang-l3-topology SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-i2rs-yang-l3-topology.xml">

<!ENTITY I-D.ietf-i2rs-usecase-reqs-summary SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-i2rs-usecase-reqs-summary.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-netconf-yang-patch 
  SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-netconf-yang-patch.xml">
<!ENTITY I-D.ietf-netconf-yang-push 
   SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-netconf-yang-push.xml">

<!ENTITY I-D.ietf-netconf-restconf-client-server
    SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-netconf-restconf-client-server.xml">

<!ENTITY I-D.ietf-netconf-zerotouch 
   SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-netconf-zerotouch.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-netconf-netconf-event-notifications
   SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-netconf-netconf-event-notifications">

 <!ENTITY I-D.ietf-netconf-rfc5277bis
   SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-netconf-rfc5277bis">
   
   
<!ENTITY I-D.ietf-netconf-keystore
   SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-netconf-keystore.xml">
   

<!ENTITY I-D.ietf-netmod-opstate-reqs 
	SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-netmod-opstate-reqs.xml">

	
<!ENTITY I-D.ietf-netmod-syslog-model 
   SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-netmod-syslog-model.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.nmdsdt-netmod-revised-datatstores SYSTEM 
  "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.nmdsdt-netmod-revised-datastores.xml">
 
 
   <!ENTITY I-D.bierman-netconf-rfc6536bis SYSTEM 
  "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.bierman-netconf-rfc6536bis.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-01.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="2016" />
    <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 one yang model addition that 
	  will support ephemeral state and provides
	  notes for the implementers who wish to implement 
	  ephemeral state for the I2RS Protocol.  The purpose of 
	  this document is to provide implementers of ephemeral 
	  state with background and open issues that they should
	  consider when implementing ephemeral state that 
	  satifies the I2RS protocol. 
	  </t>
	 </abstract>
  </front>
  <middle>
 <section anchor="intro" title="Introduction">
    <t>This a proposal for yang additions to support the first version of 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 existing protocols 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>
	The first version of the I2RS protocol is comprised of extensions to 
   existing features of NETCONF <xref target="RFC6241"></xref> and 
   RESTCONF <xref target="I-D.ietf-netconf-restconf"></xref>. 
   The data modeling language for the I2RS protocol will be 
   Yang <xref target="RFC7950"></xref> with features 
   and extensions proposed in this draft. 
   </t>
  <t> 
   The structure of this document is:
   <list> 
   <t>Section 2 provides definitions for terms in this document.
   </t>
   <t>
   Section 3 summarizes the changes to configuration data store, NETCONF, 
   RESTCONF, and YANG.
   </t>
   <t><xref target="I-D.ietf-i2rs-ephemeral-state"></xref> specifies the I2RS requirements for the ephemeral state. Section 4 discusses how these requirements might be implemented in a
   control plane datastore. 
   </t>
   <t>Section 5 describes the one required Yang model addition for I2RS (ephemeral key word). This section also describes elements of information in the NETCONF/RESTCONF implementations that
   must be queryable by the I2RS protocol implementations.  
   </t>
   </list>
</t>   
</section> 
    <section title="Definitions Related to Ephemeral Configuration">
<t> This section reviews definitions from I2RS architecture 
<xref target="RFC7921"></xref> and 
NETCONF operational state definitions
<xref target="I-D.nmdsdt-netmod-revised-datastores"></xref>
before using these to construct a definition of the ephemeral data store. 
</t>
<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.nmdsdt-netmod-revised-datastores"></xref>
 for discussion of how the ephemeral datastore as a control plane 
 datastore interacts with intended datstore and dynamic configuration 
 protocols to form the applied 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 has the ability to 
roll back to a pervious configuration state. 
Local configuration is defined as the intended datastore
 <xref target="I-D.nmdsdt-netmod-revised-datastores"></xref>
 which is modified by dynamic configuration protocols (such as 
 DHCP) and the I2RS ephemeral data store
</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="operator-applied policy:  "> is a policy that 
an operator sets that determines how the ephemeral datastore
as a control plane data store interacts with applied datastore (as defined 
in <xref target="I-D.nmdsdt-netmod-revised-datastores"></xref>). 
This operator policy consists of policy knobs that the 
operator sets to determine how the I2RS agent control plane 
ephemeral state datastore will interact with the 
intended configuration datastor and the dynamic 
configuration protocol datastore.  Three 
policy knobs could be used to implement this policy:
<list style="symbols">
<t>policy knob 1: I2RS Ephemeral control-plane 
datastore takes takes precedence over the intended datastore 
in the routing protocols. </t>
<t>policy knob 2: Updated intended configuration datastore 
takes precedence over the I2RS ephemeral control-plane
data store in the routing protocols </t>
<t>policy knob 3: Ephemeral control plane datastore
takes precedence over any other dynamic configuration 
protocols datastore.</t>
</list>
</t>
</list>
</t>
<t>
An practical example for three states of the 
 operator-applied policy may help the 
reader understand the concept. Consider the 
following three desired outcomes with their 
policy knob states: 
<list style="hanging">
<t hangText="Monitoring Features only "> 
The policy knob settings are:
<list>
<t>Policy knob 1=false,</t>
<t>policy knob 2=true,</t>
<t>Policy knob 3=false,</t>
</list>
Action: I2RS protocol software feature is installed, but the operator does not want 
the I2RS ephemarl datastore to take precedence (that is be used)
on any variables in the applied configuration datastore. This 
policy set might be valid if I2RS is only suppose to monitor data on 
this node through newly defined parameters. 
</t>
<t hangText="I2RS Agent Changes win"> the policy knob settings would be:
<list>
<t>Policy knob 1=true,</t>
<t>policy knob 2=false,</t>
<t>Policy knob 3=false,</t>
</list>
Action: This is the normal case for the I2RS Agent where the 
ephemeral control-plane datastore takes precedence over the 
intended configuration datastore and dynamic configuration datastores.
The values from the I2RS ephemearl datastore are used rather than the
intended configuration datastore and the dynamic configuration 
protocol datastore.  When the ephemeral data is removed by the I2RS agent,
the dyanmic configuration datastore and the intended configuration datastore 
state is restored, combined and passed to the routing protocols for 
application.  
</t>
<t hangText="Just change until next configuration update">
the policy knob settings would be:
<list>
<t>Policy knob 1=true,</t>
<t>policy knob 2=true,</t>
<t>Policy knob 3=false,</t>
</list>
Action: This case can occur if the I2RS Client write to the ephemeral 
control plane data store is only suppose to 
take precedence until the next configuration cycle from a centralized
system. Suppose the local configuration is get by the centralized 
system at 11:00pm each night. The I2RS Client writes 
temporary changes to the routing system via the I2RS agent 
ephemeral write.  At 11:00pm, the local configuration update 
overwrite the ephemeral.  The I2RS Agent notifies the 
I2RS Client which is tracking which of the ephemeral changes
are being overwritten.  
</t> 
</list>
</t>
</section>
</section>

<section title="Overview of Changes"> 
   <t>This oveview reviews the following: 
   <list style="symbols">
   <t>What NETCONF <xref target="RFC6241"></xref> 
    protocol existing features required for I2RS protocol and 
    what extension for these extension features that are needed
	for the I2RS protocol version 1, 
	</t>
    <t>What RESTCONF <xref target="I-D.ietf-netconf-restconf"></xref>
	protocol existing features are required for 
	the I2RS protocol and what extensions are needed for I2RS protocol
    version 1.	
	</t>
	<t>An overview of the Yang 1.1 data modeling language<xref target="RFC7950"></xref>
	features are needed for I2RS protocol version 1.
	</t>
	<t>An overview of the extensions to Yang 1.1 data modeling
	language <xref target="RFC7950"></xref> that are needed for the I2RS protocol version 1. 
	</t>
   </list>
   </t>
 <section title="I2RS protocol requirements">
 <t>The requirements for the I2RS protocol are defined in 
 the following documents:
 <list style="symbols">
 <t>I2RS Problem Statement <xref target="RFC7920"></xref>,
 </t>
 <t>I2RS Architecture <xref target="RFC7921"></xref>, 
 </t>
 <t>I2RS Traceability <xref target="RFC7922"></xref>,
 </t>
 <t>Publication and Subscription <xref target="RFC7923"></xref>, 
 </t>
 <t>I2RS Ephemeral State Requrements, <xref target="I-D.ietf-i2rs-ephemeral-state">,</xref>
 </t>
 <t>I2RS Protocol Security Requirements, <xref target="I-D.ietf-i2rs-protocol-security-requirements"> </xref>
 </t>
 </list>
 </t>
 <t>The Interface to the routing System (I2RS) creates a new capability for the 
 routing systems, and with greater capaiblities come a greater need for security. 
 The requirements for a secure environment for I2RS is described in 
 <xref target="I-D.ietf-i2rs-security-environment-reqs"></xref>.
 </t>
</section> 
<section title="NETCONF Features and Extensions">
 <t>
 The features the I2RS protocol requires are: 
   <list style="symbols">
   <t>NETCONF <xref target="RFC6241"></xref> with its updates
   <xref target="RFC7803"></xref>, 
   </t>
   <t>Network Access Control Model <xref target="RFC6536"></xref>
   with update (draft-bierman-netconf-rf6536bis)   
   </t>
   <t>Running NETCONF over TLS with mutually X.509 authentication
   <xref target="RFC7589"></xref>
   </t>
  <t>Keystore Model <xref target=" I-D.ietf-netconf-keystore"></xref>, 
  </t>
  <t>Subscribing to Yang Datastore updates 
  <xref target="I-D.ietf-netconf-yang-push"></xref>,
  </t>
   <t>NETCONF support for Event Notifications 
   <xref target="I-D.ietf-netconf-netconf-event-notifications"></xref>,
   </t>
   <t>Subscribing to NETCONF Events (updated)
    <xref target="I-D.ietf-netconf-rfc5277bis"></xref>
   </t>
   <t>Yang Patch Media type <xref target="I-D.ietf-netconf-yang-patch"></xref>, 
    </t>
    <t>NETCONF/RESTCONF Zero Touch provisioning
	 <xref target="I-D.ietf-netconf-zerotouch"></xref>, 
   </t>
   <t>TLS Client and Server Models 
     <xref target="I-D.ietf-netconf-restconf-client-server"></xref>
   </t>
   <t>Call Home <xref target="I-D.ietf-netconf-call-home"></xref>, 
   </t>
   <t>Module library <xref target="RFC7895"></xref>,
  </t>
  <t>NETCONF/RESTCONF Zero Touch provisioning <xref target="I-D.ietf-netconf-zerotouch"></xref>, 
  </t>
  </list>  
   </t>  
   </section>
   <section title="RESTCONF features and Extensions">
   <t>This protocol strawman utilizes the following existing 
   proposed features for NETCONF and RESTCONF 
   <list style="symbols">
      <t> RESTCONF <xref target="I-D.ietf-netconf-restconf"></xref>
	  </t>
   <t>Module library <xref target="RFC7895"></xref>,
  </t>
  <t>Publication/Subscription via Push <xref target="I-D.ietf-netconf-yang-push"></xref>,
  </t>
  <t>Patch <xref target="I-D.ietf-netconf-yang-patch"></xref>, 
  </t>
  <t>syslog yang module (both <xref target="RFC5424"></xref>
   and <xref target="I-D.ietf-netmod-syslog-model"></xref>
   </t>
  </list>   
  </t>
   </section>
   <section title="Assumptions on Data Store Model Melee">
   <t>The NETMOD Working Group has been 
working to create new definitions of 
datastores based on feedback from operators on 
desiring a split between operational state
and configuration state. 
</t>
<t>This document takes <xref target="I-D.nmdsdt-netmod-revised-datastores"></xref> as the current status of the datastore discussion on configuration state, operational state, ephemeral state changes (via I2RS), and routing protocol state. The following things need to be carefully defined in this work:
<list>
<t>What is a dynamic configuration protocol (is it I2RS or DHCP)
</t>
<t>What is a control-plane datastore - (ephemeral state only or others? )
</t>
<t>How to express the policy knobs that provide preference between intended configuration, control plane datstore, and dynamic configuration protocols
</t> 
<t>How does operational state allow for operational state to be defined by ephemeral-only data models, and mixed (ephemeral + intended configuration)
</t>
</list>
   </t>
   <t> <xref target="I-D.nmdsdt-netmod-revised-datastores"></xref> is making good progress, but these additional details need to be tied down. 
   </t>
   </section>
   </section>
 
<section title="Ephemeral Data"> 

 <t> 
 This section provides an overview of the ephemeral data store as a control plane datastore
 and discusses several concepts that implementers need to consider and provide feedback on.
 The concepts include basic ephemeral datastore concepts, I2RS caching of ephemeral data, issues for massive data flow, error handling (normal and reduced), use of IPFIX or Binary for carrying I2RS ephemeral data, 
and ephemeral state. 
 </t>
 <t>This section augments  <xref target="I-D.nmdsdt-netmod-revised-datastores"></xref>
 to begin to discuss how the ephemeral state control-plane datastore 
 might be implemented. 
 </t>
 
 <t>The purpose of this section is to gather implementer wisdom on the ephemeral datastore into one place. This section discusses:
 <list>
 <t>Ephemeral state as a control plane data store
 </t>
 <t>Qualities of ephemeral datastores 
 </t>
 <t>Need to support Massive amounts of configuration data, 
 </t>
 <t>Two types of Error handling (regular, reduced)
 </t>
 <t>Should we support link to IPFIX in I2RS protocol and ephemeral state? 
 </t>
 <t>Binary encoding for RESTCONF/NETCONF
 </t>
 <t>Ephemeral state in DDoS environments. 
 </t>
 </list>
 </t>
 <t><xref target="I-D.ietf-i2rs-ephemeral-state"></xref> describes the requirements for 
 I2RS ephemeral state. 
 </t>
<t>This section augments  <xref target="I-D.nmdsdt-netmod-revised-datastores"></xref>
 to begin to discuss how the ephemeral state comtrol-plane datastore 
 might be implemented. This initial draft refines the general 
 description so that early I2RS ephemeral state implementations 
 may progress.  
 </t>
 <section title="Ephemeral Control Plane Datastore">
 <t><xref target="I-D.nmdsdt-netmod-revised-datastores"></xref> architecture 
 suggests that the applied configuration is the combination of 
 intended datastore, the dynamic configuration protocols, and 
 the control-plane datastores.  As described above, there are policy 
 knobs which allow the I2RS Agent to handle deciding what specific 
 configuration variables is installed in protocols (E.g BGP) or 
 protocol independent functions (RIB or Filters).   
 In addition, the control-plane datastore may store the parameters need to 
 provide publication of events, statistics, telementry within the 
 ephemeral control-plane datastore.
 </t>
 <t>
 The ephemeral data-store may have models which learn operational state 
 and augment it by configuration.  For example <xref target="I-D.ietf-i2rs-yang-l3-topology"></xref> 
 uploads ospf and isis topology information from the routing system and allows configuration of additional links or nodes. 
 </t>
 <t>This new architecture is a multiple panes-of-glass model 
 where the decision on what value is chosen is based on policy. 
 The extension of this model is that it is possible for 
 two or more of the control-plane datastores to be ephemeral. 
 If this occurs, then the policy knobs must define the 
 how the 2+ ephemeral datastores interact with each other and 
 the configuration state.
</t>  
</section>
<section title="Qualities of Ephemeral Datastore">
<t> Note: The requirements for ephemeral state are in:
<xref target="I-D.ietf-i2rs-ephemeral-state"></xref>). 
</t>
<t>
This section provides a discussion so that implementers 
writing code for these datastores can discuss what needs to 
be standardized and what does not need to be standardized. 
</t>
<t> 
The ephemeral data store has the following general qualities: 
<list style="numbers">
<t>Ephemeral state is not unique to I2RS work.</t>
<t>The ephemeral datastore is never locked.
 </t>
<t> The ephemeral portion of the intended configuration, 
applied state, and derived state does not persist over a reboot,
</t>
<t>an ephemeral node cannot roll-back to its previous value,          
</t>
<t>Since ephemeral data store is just data that does not presist
 over a reboot, then in theory any node or group of nodes 
 in a YANG data model could be ephemeral.
The YANG data module must indicate what portion of the data model (if any)
is ephemeral.
<list style="symbols">
<t>A YANG data module could be all ephemeral 
(e.g. <xref target="I-D.ietf-i2rs-rib-data-model"></xref>) 
with no directly associated configuration models, 
</t>
<t>A YANG model could be all ephemeral but associated with a configuration model 
</t>
<t>or a single data node or data tree could be made ephemeral.
</t>
</list>
</t>
<t>The management protocol (NETCONF/RESTCONF) needs to signal which
poritons of a data model(node, tree, or data model) are ephemeral
in the module library <xref target="RFC7895"></xref>.
</t>
</list>
</t>
</section> 
<section title="I2RS Agent Caching of Ephemeral Data ">
<t> The multiple control-plane datastore model 
<xref target="I-D.nmdsdt-netmod-revised-datastores"></xref> architecture 
allows multiple datastores which could allow an implementation of 
caching of ephemeral data in the I2RS Agent by having a main 
and a backup I2RS agent. Early implementations should at least support 
the single ephemeral data model, but MAY support the multiple 
datastore mode. It is important that these early implementations 
provide feedback for standardization on the following:
<list>
<t>the policy knobs needed to make single ephemeral control planes datastores function, 
</t>
<t>the policy knobs neeed to make multiple ephemeral control plane datastores 
which support caching work. </t>
</list>
 </t>
</section> 
 <section title="Massive Amounts of Configuration Data">
 <t>Large amounts of data can flow from the I2RS agent 
 to the I2RS client, or from the I2RS client to the I2RS Agent.
 The I2RS client may set or query ephemeral configuration in the 
 routing system via the I2RS agent and receive operational state, 
 notifications, or logging from the I2RS Agent on behalf of the I2RS
 routing system. I2RS Clients can send large amount of ephemeral configuration data 
 to the I2RS Agent.  The writes may be done 
 via NETCONF (&lt;edit-config&gt; or an rpc function), or via 
 RESTCONF (PUT, PATCH, POST).  Reads can be done via NETCONF
 &lt;get-config&gt; or RESTCONF GET or query. 
 </t>
 <t>
  The I2RS RIB Data Model <xref target="I-D.ietf-i2rs-rib-data-model"></xref> 
 also supports the use of rpc to add/delete RIBs, add/delete/update routes, 
 and add/delete nexthops.  If the I2RS client does a 
 small to medium number of writes to the I2RS ephemeral state in 
the I2RS Agent in a routing system, the full validation that NETCONF or RESTCONF 
does will be able to be done without any reduction in speed to the 
I2RS high-performance system. For example, if the I2RS RIB Data Model 
has adds a 1000 routes, the I2RS RIB use of rpc to add/delete/update 
routes should be able to provide a high-performance system.  Alternatively
the NETCONF &lt;edit-config&gt; could update these 1000 routes with a write, or 
the RESTCONF POST, PUT or PATCH should be able to add the 1000 routes.
</t>
<t>If a large number of ephemeral routes or filters are written (updates or new)  
by the I2RS Client to the ephemeral state in the I2RS agent, one of the key issues
for a high performance interface is the time it takes to validate routes.
Due to this concern, the I2RS architecture was design to allow less than the full 
NETCONF or RESTCONF validation.  The concept is that the I2RS routes would 
be validated within the I2RS client and sent via a 99.999% reliable
connection.  In this scenario, the I2RS Agent would trust the validation 
that the I2RS Client did, and the communication of the route additions
via the network connection.
</t>
<t>An experiment regarding this has been done with the 
ODL code base update of ephemeral routes, but additional 
experimentation needs to be done prior to finalizing this design. 
Section 3.4.2 reviews how this process might be done, but many 
open issues exist in implementing this "low-validation" interface.
Without additional experimentation and prototype code, 
this type of "low-validation", 
</t>
</section>
<section title="Write Error handling">
<t>This section reviews  I2RS normal error handling and 
error handling for rpc with no validation checks. 
</t>
<section title="Normal validation checks ">
<t>
An I2RS agent validates an I2RS client's information 
by examining the following: 
<list style="symbols"> 
<t>message syntax validation,  </t>
<t>syntax validation for nodes of data model,</t>
<t>referential checks (leafref checks
MUST clauses, and instance indentifier),  </t>
<t>checks groups of data within a data model or 
groups of data across data models, </t>
<t>write access to data,  </t>
<t>if write access and values already exist, if I2RS client 
write access is higher than existing priority.</t>
</list>
</t>
<section title="Reduced Validation (Experimental)">
<t>Can the I2RS protocol allow for reduced error checking? 
The need for speed in the I2RS protocol insertions in to 
the I2RS RIB suggest that it is worth experimenting 
for reduced validation in order to obtain high levels of 
throughput. If NETCONF or RESTCONf streams pre-checked 
routes to the datastore, what happens? Implementation 
experience is needed to determine the feasibility of this 
approach. 
</t>
<t>This feature 
may require a operator-applied policy knob swith 
a "no validation" feature 
<list style="symbols">
<t>operator-applied policy knob enabling this feature; 
</t>
<t>rpc in a data model with the yang 
"ephemeral-validation no-check;"
</t>
</list> 
</t>
</section>
</section> 
</section> 
 <section title="IPFIX for traffic monitoring">
	<t>Due to the potentially large data flow the traffic measurment 
   statistics generate, these statistics are best handled by 
   publication techniques within NETCONF or a separate protocol such as IPFIX.  
   In the future version of the I2RS protocol may desire to 
   support a data stream outbound from the I2RS Agent to an I2RS 
   client via the IPFIX protocol.
    </t>   
	</section>
<section title="Binary encoding of RESTCONF/NETCONF">
<t>The binary encoding of JSON or XML encodnig in RESTCONF or NETCONF
may provide a better throughput. Research needs to be done on what
is the appropriate binary encoding. 
</t>
</section>
<section title="Ephemeral state in DDoS environments">
<t>I2RS ephemeral state may operate in places where 
there is a DDoS attacks where the network devices are attacked. 
Is one attack plane the ability to remove all tracing if 
the I2RS reboots an attack vector?  
</t>
</section>
</section>
<section title="Yang Changes">
<t>
The data modules supporting the ephemeral datastore 
can use the Yang module library to describe their datastore. 
</t>
<t>
The following key word must be able to specify ephemeral
<list>
<t>ephemeral true; 
</t>
</list>
</t>
<t>Nice to have features: 
</t>
<t>
It would be helpful for implementation of I2RS ephemeral data models to determine if the 
I2RS protocol feature set can support the I2RS data model needs.  For this reason, it is 
helpful to group protocol features into "versions" and to put flags in the data model.
At this point, the best place to put the summary of features is in an data model 
which defines these features.  The discussion between implementers should be whether
it is useful to have this features in some general yang location. 
An example of features that might be needed are: 
</t>
<t> 
<list style="symbols">
<t>i2rs version indicator;</t>
<t>i2rs transport-nonsecure "ok-to-use";</t>
<t>i2rs ephemeral-validation nocheck; </t>
<t>I2rs caching</t>
</list>
</t>

</section>



<section anchor="IANA" title="IANA Considerations">
 <t>This is a protocol strawman - nothing is going to IANA.  </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 the I2RS protocol
 should consider both security requirements.  
</t>
</section>
<section anchor="Acknowledgements" title="Acknowledgements">
	<t>
	    This document good work arises out of discussions with many experts in
		NETCONF, NETMOD, and I2RS WGs including:  
	    <list style="symbols">
		<t>Alia Atlas,</t>
		<t>Ignas Bagdonas,</t>
		<t>Andy Bierman,</t>
		<t>Alex Clemm,</t>
		<t>Eric Voit,</t>
		<t>Kent Watsen, </t>
		<t>Jeff Haas,</t>
		<t>Russ White, </t>
		<t>Keyur Patel,</t>
		<t>Hariharan Ananthakrishnan,</t>
		<t>Dean Bogdanavich,</t>
		<t>Anu Nair,</t>
		<t>Juergen Schoenwaelder, and</t>
		<t>Kent Watsen.</t>
	    </list>
	</t>
	<t>Any errors or assumptions should be blamed on the authors, and not these experts.
	</t>
</section>
</middle>
 <back>
    <references title="Normative References:">
	 &RFC2119;
	 &RFC4107;
	 &RFC4960;
	 &RFC5339;
	 &RFC5424;
	 &RFC6020;
	 &RFC6241;
	 &RFC6242;
	 &RFC6244;
	 &RFC6536;
	 &RFC7158;
	 &RFC7589;
 	 &RFC7895;
	 &RFC7803;
	 &RFC7920;
	 &RFC7921;
	 &RFC7922;
	 &RFC7923;
	 &RFC7950;
	 &RFC7952;
	 &RFC7958;
 
	 </references>
	 <references title="Informative References">
	 &I-D.ietf-netconf-keystore;
	 &I-D.nmdsdt-netmod-revised-datatstores;
	 &I-D.ietf-i2rs-ephemeral-state;
	 &I-D.ietf-i2rs-protocol-security-requirements;
	 &I-D.ietf-i2rs-security-environment-reqs;	
	 &I-D.ietf-i2rs-yang-l3-topology;
     &I-D.ietf-i2rs-rib-info-model;
	 &I-D.ietf-i2rs-rib-data-model;
	 &I-D.ietf-netconf-yang-patch;
	 &I-D.ietf-netconf-yang-push;
     &I-D.ietf-netconf-restconf;
	 &I-D.ietf-netconf-call-home;
	 &I-D.ietf-netconf-zerotouch;
	 &I-D.ietf-netmod-syslog-model;
  	 &I-D.ietf-netmod-schema-mount;
	 &I-D.ietf-netconf-netconf-event-notifications;
	 &I-D.ietf-netconf-rfc5277bis;
	 &I-D.ietf-netconf-restconf-client-server;
	 </references>
  </back>
</rfc>