<?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 RFC5812 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5812.xml">
<!ENTITY RFC5810 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5810.xml">
<!ENTITY RFC5811 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5811.xml">
 
 
<!ENTITY RFC5226 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5226.xml">
 
<!ENTITY RFC4960 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4960.xml">
<!ENTITY RFC6824 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6824.xml">
<!ENTITY RFC3654 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3654.xml">
<!ENTITY RFC3746 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3746.xml">
]>


<!-- $Id: draft-khj-forces-lfb-subsidiary-management-00.xml 4340 2012-12-20 17:55:58Z khasnabish $ -->

<?rfc toc="yes"?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<?rfc strict="no" ?>
<?rfc symrefs="no" ?>
<!-- <?rfc sortrefs="yes" ?>  -->

<rfc category="std" ipr="trust200902" docName="draft-khs-forces-lfb-subsidiary-management-00.txt">

<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>


<front>

<title abbrev="IETF ForCES LFB Subsidiary Management">
IETF ForCES Logical Function Block (LFB) Subsidiary Management 

</title>

<!-- ************** AUTHORS LIST  *************** -->
<author fullname="Bhumip Khasnabish" initials="B." surname="Khasnabish">
<organization> ZTE TX, Inc.</organization>
<address>
<postal>
	<street>55 Madison Avenue, Suite 160</street>
	<!-- Reorder these if your country does things differently -->
	<city>Morristown</city>
	<region>New Jersey</region>
	<code>07960</code>
	<country>USA </country>
</postal>
<phone>+001-781-752-8003</phone>
<email>vumip1@gmail.com, bhumip.khasnabish@ztetx.com</email>
<uri>http://tinyurl.com/bhumip/</uri>
</address>
</author>

		<author fullname="Evangelos Haleplidis" initials="E.H." surname="Haleplidis">
			<organization>University of Patras</organization>
			<address>
				<postal>
					<street>Department of Electrical and Computer Engineering</street>
					<city>Patras</city>
					<region/>
					<code>26500</code>
					<country>Greece</country>
				</postal>
				<email>ehalep@ece.upatras.gr</email>
			</address>
		</author>

<author fullname="Jamal Hadi Salim" initials="J." surname="Hadi Salim">
      <organization>Mojatatu Networks</organization>
      <address>
        <postal>
          <street>Suite 400, 303 Moodie Dr.</street>
          <city>Ottawa, Ontario</city>
          <code>K2H 9R4</code>
          <country>Canada</country>
        </postal>
        <email>hadi@mojatatu.com</email>
      </address>
    </author>



<date year="2014" />
<keyword>Internet-Draft</keyword>

<abstract>
<t>
This document discusses ForCES Logical Function Block (LFB) Subsidiary Management (SM). Note that LFB SM is useful for introducing and supporting
virtualization of ForCES Network Element (NE) including control Element (CE) and Forwarding Element (FE).
</t>
</abstract>


</front>

<middle>


<section title="Introduction">

<t>
This document discusses ForCES Logical Function Block (LFB) Subsidiary Management (SM). Note that LFB SM is useful for introducing and supporting
virtualization of ForCES Network Element (NE) including control Element (CE) and Network Element (NE).
</t>

<t>
Deployment experience has demonstrated the value of using ForCES to control the Forwarding Element Manager (FEM) by creating an LFB to represent its function using the same encoding rules as for any other LFB. This allows it to be controlled by the same Control Element (CE). 
</t>

<t>
This work item assumes the presence of an initially booted FE whose configuration could then be updated at runtime via an FEM LFB for runtime config purposes (e.g., by adding a new
CE and its associated IP address). 
</t>

<t>
This work item can also be useful in addressing control of virtual FEs where individual FEM Managers can be addressed to control the creation, configuration, and resource assignment of
such virtual FEs within a physical FE. This work would result in a standards track LFB FEM library RFC.
</t>

<section title="Scope">
<t>
The scope of this document is discussion (and standardization) of utilizing
virtualized NEs (VNEs)for virtual CEs (VCEs) and virtual FEs (VFEs). 
</t>
<t>
The currently existing techniques and solutions may be either slow or not directly applicable to ForCES LFB subsidiary management.
</t>

</section>

<section title="Abbreviations">
<t>

<list style="symbols">
 <t>API:	Application Programming Interface</t>
 <t>CE:     Control Element</t>
 <t>CEM:    CE Manager</t>
 <t>CEV:	CE Visor</t>
 <t>FE:	Forwarding Element</t>
 <t>FEM:	FE Manager</t>
 <t>FEV:	FE Visor</t>
 <t>ForCES:	Forwarding and Control Element Separation</t>
 <t>LFB:	Logical Functional Block</t>
 <t>NE:	Network Element</t>
 <t>PL:	Protocol Layer</t> 
 <t>SFC:	Service Function Chaining</t>
 <t>VCE:	Virtual CE</t>
 <t>VFE:	Virtual FE</t>
 <t>VNE:	Virtual NE</t>
</list>
</t>
</section>

<section title="Conventions and Definitions">
<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"></xref>.
</t>

<t>
The following definitions are taken from <xref target="RFC3654"/>, 
<xref target="RFC3746"/> and <xref target="RFC5810"/>. They are repeated here for convenience as needed, but the normative definitions are found in the referenced RFCs:

<list style="symbols">
          
<t>
Logical Functional Block (LFB)  -- 
A template that represents a fine-grained, logically separate aspects of FE processing.
</t>

<t>Forwarding Element (FE) - A logical entity that implements the ForCES
   Protocol.  FEs use the underlying hardware to provide per-packet
   processing and handling as directed by a CE via the ForCES Protocol.
   </t>

<t>Control Element (CE) - A logical entity that implements the ForCES
   Protocol and uses it to instruct one or more FEs on how to process
   packets.  CEs handle functionality such as the execution of control
   and signaling protocols.</t>
   
<t>ForCES Network Element (NE) - An entity composed of one or more CEs
   and one or more FEs.  An NE usually hides its internal organization
   from external entities and represents a single point of management to
   entities outside the NE.</t>
   
<t>FE Manager (FEM) - A logical entity that operates in the pre-association
   phase and is responsible for determining to which CE(s) an FE should
   communicate.  This process is called CE discovery and may involve the
   FE manager learning the capabilities of available CEs. </t>

<t>CE Manager - A logical entity that operates in the pre-association
   phase and is responsible for determining to which FE(s) a CE should
   communicate.  This process is called FE discovery and may involve the
   CE manager learning the capabilities of available FEs. </t>

<t>
ForCES Protocol -- 
   The protocol used for communication communication between CEs and FEs. This protocol
   does not apply to CE-to-CE communication, FE-to-FE communication, or
   to communication between FE and CE managers.  The ForCES protocol is
   a master-slave protocol in which FEs are slaves and CEs are masters.
   This protocol includes both the management of the communication
   channel (e.g., connection establishment, heartbeats) and the control
   messages themselves.
</t>

<t>
ForCES Protocol Layer (ForCES PL) -- 
   A layer in the ForCES protocol architecture that defines the ForCES
   protocol messages, the protocol state transfer scheme, and the ForCES
   protocol architecture itself (including requirements of ForCES TML as
   shown below). Specifications of ForCES PL are defined in <xref target="RFC5810"></xref>
</t>
   
<t>
ForCES Protocol Transport Mapping Layer (ForCES TML) -- A layer in 
ForCES protocol architecture that specifically addresses the 
protocol message transportation issues, such as how the protocol 
messages are mapped to different transport media (like SCTP, IP, 
TCP, UDP, ATM, Ethernet, etc), and how to achieve and implement 
reliability, security, etc.
</t>

</list>
</t>
</section>


</section>


 

<section title="Use of Virtualized ForCES Elements">
<t>
Virtualization of ForCES Elements allows efficient, scalabl, and robust utilization of network control and transmission resources. Virtualization has been discussed (and deployed) widely in the Computing Industry (e.g., server) in the context of efficient utilization of server resources. 
</t> 
<t>
As mentioned before, the currently existing techniques and solutions may be either slow or not directly applicable to ForCES LFB subsidiary management.
</t>

<section title="Use of Virtualized CEs">
<t>
In this section we discuss the use of virtualized ForCES control elements (CEs). The resulting operating entities in virtualized environment are Virtual CEs of VCEs. The CE Visor (CEV) has the  visiblity to all of the VCEs in a domain, and can assign one of the VCEs as primary Master-VCE and another as secondary Master-VCE. CEV can dynamically manage the role of primary and secondary master-VCEs from a pool of VCEs.
</t>
</section>


<section title="Use of Virtualized FEs">
<t>
In this section we discuss the use of virtualized ForCES forwarding elements (FEs). The resulting operating entities in virtualized environment are Virtual FEs of VFEs. The FE Visor (FEV) has the  visiblity to all of the VFEs in a domain, and can assign one of the VFEs as primary Master-VFE and another as secondary Master-VFE. FEV can dynamically manage the role of primary and secondary master-VFEs from a pool of VFEs.
</t>
</section>

</section>



<section title="Potential Scenarios">
<t>
In this section we discuss a few potential scenarios that can utilize ForCES LFB subsidiary management for efficient and robust operation of networks withut using excessive additional resources. 
</t>

<section title="Recovery from CE failure">
<t>
In this section we discuss how virtualization of CEs can be used for efiicient recovery from CE failure(s).
</t>
</section>


<section title="Recovery from FE failure">
<t>
In this section we discuss how virtualization of FEs can be used for efiicient recovery from FE failure(s).
</t>
</section>

<section title="Load Balancing">
<t>
In this section we discuss efficient load balancing of both CE and FE in virtualized environment.
</t>
</section>


<section title="Scalable/Robust Service Function Chaining">
<t>
In this section we discuss how LFB subsidiary management can contribute to the robust/scalable implementation of Service Function Chaining (SFC).
</t>
</section>


<section title="Orchestration">
<t>
In this section we discuss efficient Orchestration of both CE and FE in virtualized multi-admin-domain environment.
</t>
</section>


<section title="Generic LFB Lifecycle Management">
<t>
In this section we discuss generic lifecycle management of subsidiaries of LFBs in virtualized environment(s). The typical management activities in the
life of FE/CE are discussed in the following sub-sections. 
</t>

<section title="Booting a CE/FE">
<t>
When an entity needs to boot a CE/FE, if this is a VM, some orchestration would scheme/plan to do this. In case of ForCES, we have a control App that boots a CE or an FE via a management FE. So here we have a management plane details that is described either in FEM or other LFB.
</t>
</section>

<section title="Bootstrapping the Configuration ">
<t>
The FE, e.g., the VM whihc has just been booted, as described in teh previous sub-section, needs initial bootstrap configuration (e.g., what CEs to connect to etc). This clearly falls in the FEM LFB domain.
</t>
</section> 

<section title="Runtime Management">
<t>
At runtime of the FE, for example, the management could introduce a new CE for the FE to associate with; it may also be for an FE to dissociate from a CE, and so on.
</t>
</section>


</section>

</section>



<section title="Testbed Platform">
<t>
TBD.
</t>
</section>


<section title="Reference Implementation">
<t>
TBD.
</t>
</section>

<section title="FEM Library">
      <section title="Frame Definitions"><t>This LFB does not define any frames</t></section>
      <section title="Datatype Definitions">
      <t>This library defines the following datatypes.</t>
        <texttable title="FEM Data Types" align="center">
          <ttcol>DataType Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Synopsis</ttcol>
          <!-- IPs -->
          <c>IPs</c>
          <c>A Struct of 2 components. IPv4 (byte[4]) and IPv6 (byte[16]) addresses.</c>
          <c>A struct that defines an IPv4 and an IPv6 address</c>
          <!-- LFBDefs -->
          <c>LFBDefs</c>
          <c>A Struct that contains three components. The LFB Class ID (uint32), the LFB version (string)and the LFB name (string)</c>
          <c>A struct that defines basic LFB definitions</c>
          <!-- CEParams -->
          <c>CEParams</c>
          <c>A Struct that contains two components. A CE's ID (uint32) and the CE's IPs (array of IPs)</c>
          <c>A struct that defines CE parameters.</c>
          <!-- XXX: I put array of IPs for the CE as well. We can remove that if necessary. -->
          <!-- FEParams -->
          <c>FEParams</c>
          <c>A Struct that contains four components. An FE's ID (uint32), the FE's IPs (array of IPs), the LFBs this FE supports (array of LFBDefs) and the CEs this FE is part of (array of CEParams).</c>
          <c>A struct that defines the FE parameters.</c>
        </texttable>
      </section>
      <section title="Metadata Definitions"><t>This LFB does not define any metadata definition</t></section>
      <section title="FEM">
        <t>The LFB is an LFB that standardizes and assists creation of NEs.</t>
        <section title="Data Handling">
          <t>The FEM LFB does not handle any packets. It's function is to subsidize creation of NEs. A CE or a CEM will request from the FEM the creation of the NE, it will provide the requirements, e.g. FEs, LFBs in FEs etc..., and depending on the implementation the FEM may create these FE instances, or if these instances exist, provide the bootstrap information to FEs how and where to connect to the CEs.</t>
          <!-- XXX: Should we provide also TML descriptions? SCTP TML is standard now, but what about the future? -->
        </section>
        <section title="Components">
          <t>This LFB has only one component specified. The NEs component, is a component that contains all the Network Elements this FEM is responsible for maintaining. It is a table and each row is a struct of the NEID, a uint32 and an array of FE parameters.</t>
        </section>
        <section title="Capabilities">
          <t>This LFB has no Capabilities specified.</t>
        </section>
        <section title="Events">
          <t>This LFB has three events specified. These events notify the CE whether an NE has been added, deleted or changed. The event report is the NEs row that created the event.</t>
        </section>
      </section>
</section>

    <section title="XML for FEM LFB">
        <t>
          <figure title="FEM XML LFB library" anchor="FEMLFBLibrary">
            <artwork align="center"><![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<LFBLibrary xmlns="urn:ietf:params:xml:ns:forces:lfbmodel:1.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" provides="FEM">
   <load library="FEPO"/>
   <dataTypeDefs>
      <dataTypeDef>
         <name>IPs</name>
         <synopsis>IP definition</synopsis>
         <struct>
            <component componentID="1">
               <name>FEIPv4</name>
               <synopsis>The FEs IPv4</synopsis>
               <typeRef>byte[4]</typeRef>
            </component>
            <component componentID="2">
               <name>FEIPv6</name>
               <synopsis>The FEs IPv6</synopsis>
               <typeRef>byte[16]</typeRef>
            </component>
         </struct>
      </dataTypeDef>
      <dataTypeDef>
         <name>LFBDefs</name>
         <synopsis>LFB parameters inside the FE</synopsis>
         <struct>
            <component componentID="1">
               <name>LFBClassID</name>
               <synopsis>The LFB CLass ID</synopsis>
               <typeRef>uint32</typeRef>
            </component>
            <component componentID="2">
               <name>LFBVersion</name>
               <synopsis>The Version of the LFB</synopsis>
               <typeRef>string</typeRef>
            </component>
            <component componentID="3">
               <name>LFBName</name>
               <synopsis>The name of the LFB</synopsis>
               <optional/>
               <typeRef>string</typeRef>
            </component>
         </struct>
      </dataTypeDef>
      <dataTypeDef>
         <name>CEParams</name>
         <synopsis>CE parameters</synopsis>
         <struct>
            <component componentID="1">
               <name>CEID</name>
               <synopsis>The CE ID</synopsis>
               <typeRef>uint32</typeRef>
            </component>
            <component componentID="2">
               <name>CEIP</name>
               <synopsis>The CEIP</synopsis>
               <array>
                  <typeRef>IPs</typeRef>
               </array>
            </component>
         </struct>
      </dataTypeDef>
      <dataTypeDef>
         <name>FEParams</name>
         <synopsis>FE parameters</synopsis>
         <struct>
            <component componentID="1">
               <name>FEID</name>
               <synopsis>The FEID</synopsis>
               <typeRef>uint32</typeRef>
            </component>
            <component componentID="2">
               <name>FEIP</name>
               <synopsis>The FE's IP</synopsis>
               <array>
                   <typeRef>IPs</typeRef>
               </array>
            </component>
            <component componentID="3">
               <name>LFBparameters</name>
               <synopsis>The LFBs in this FE</synopsis>
               <array>
                  <typeRef>LFBDefs</typeRef>
               </array>
            </component>
            <component componentID="4">
               <name>CEs</name>
               <synopsis>The CEs that should be associated with this
                  FE</synopsis>
               <array>
                  <typeRef>CEParams</typeRef>
               </array>
            </component>
         </struct>
      </dataTypeDef>
   </dataTypeDefs>
   <LFBClassDefs>
      <LFBClassDef LFBClassID="21">
         <name>FEM</name>
         <synopsis>The Forwarding Element Manager LFB</synopsis>
         <version>1.0</version>
         <components>
            <component componentID="1" access="read-write">
               <name>NEs</name>
               <synopsis>All the Network Elements this FEM is
                  responsible for maintaining</synopsis>
               <array>
                  <struct>
                     <component componentID="1">
                        <name>NEID</name>
                        <synopsis>ID of the Network Element</synopsis>
                        <typeRef>uint32</typeRef>
                     </component>
                     <component componentID="2">
                        <name>FEs</name>
                        <synopsis>FEs in the Network Element
                        </synopsis>
                        <array>
                           <typeRef>FEParams</typeRef>
                        </array>
                     </component>
                  </struct>
               </array>
            </component>
         </components>
         <events baseID="10">
            <event eventID="1">
               <name>NEchanged</name>
               <synopsis>The NE definition has changed</synopsis>
               <eventTarget>
                  <eventField>NEs</eventField>
               </eventTarget>
               <eventChanged/>
               <eventReports>
                  <eventReport>
                     <eventField>NEs</eventField>
                     <eventSubscript>_NEsrowid_</eventSubscript>
                  </eventReport>
               </eventReports>
            </event>
            <event eventID="2">
               <name>NEcreated</name>
               <synopsis>An NE has been created</synopsis>
               <eventTarget>
                  <eventField>NEs</eventField>
               </eventTarget>
               <eventCreated/>
               <eventReports>
                  <eventReport>
                     <eventField>NEs</eventField>
                     <eventSubscript>_NEsrowid_</eventSubscript>
                  </eventReport>
               </eventReports>
            </event>
            <event eventID="3">
               <name>NEdeleted</name>
               <synopsis>An NE has been deleted</synopsis>
               <eventTarget>
                  <eventField>NEs</eventField>
               </eventTarget>
               <eventDeleted/>
               <eventReports>
                  <eventReport>
                     <eventField>NEs</eventField>
                     <eventSubscript>_NEsrowid_</eventSubscript>
                  </eventReport>
               </eventReports>
            </event>
         </events>
      </LFBClassDef>
   </LFBClassDefs>
</LFBLibrary>
		]]></artwork>
          </figure>
        </t>
    </section>

<section title="Security Considerations">
<t>
Security considerations for ForCES LFB subsidiary management will be added in a future version of this daft.
</t>
</section>


<section title="IANA Considerations">
       <section title="LFB Class Names and LFB Class Identifiers">
      <t>LFB classes defined by this document belong to LFBs defined by
   Standards Track RFCs.  According to IANA, the registration procedure
   is Standards Action for the range 0 to 65535 and First Come First
   Served with any publicly available specification for over 65535.

   This specification includes the following LFB class names and LFB class identifiers:</t>
   
   <texttable title="Logical Functional Block (LFB) Class Names and Class Identifiers">
        <ttcol align="center">LFB Class Identifier</ttcol>
        <ttcol align="center">LFB Class Name</ttcol>
        <ttcol align="center">LFB Version</ttcol>
        <ttcol align="center">Description</ttcol>
        <ttcol align="center">Reference</ttcol>
        <c>21</c>
        <c>FEM</c>
        <c>1.0</c>
        <c>An FEM LFB to standardize creation of ForCES Network Elements</c>
        <c>This document</c>
      </texttable>
      </section>
</section>


<section title="Acknowledgments">
<t>
The authors would like to thank DJ, Joel, and many others for their discussions and support.
</t>
</section>

</middle>


<back>
<references title="Normative References">
 
 &RFC5810;
 &RFC5812;

 &RFC5226; 

 &RFC4960;
 &RFC6824;
</references>

<references title='Informative References'>
 &RFC2119; 
 &RFC3654;
 &RFC3746;
 
 
</references>

</back>


</rfc>
