<?xml version='1.0'?>   
    <!DOCTYPE rfc SYSTEM 'rfc2629.dtd' [ 
    	<!ENTITY rfc2629 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml'> 
		]>
<?rfc strict="yes"?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="info" docName="draft-khc-spring-openflow-interworking-req-01.txt"
     ipr="trust200902">
  <!-- ***** FRONT MATTER ***** -->
  <front>
    <title abbrev="SR OF Interworking Req.">SPRING OpenFlow Interworking Requirements </title>
	


<author fullname="Fangwei Hu" initials="F." surname="Hu">
      <organization>ZTE Corporation</organization>

      <address>
        <postal>
          <street>No.889 Bibo Rd</street>
          
          <city>Shanghai</city>
          
          <region></region>
  
          <code>201203</code>

          <country>China</country>
        </postal>

        <phone>+86 21 68897637</phone>

        <email>hu.fangwei@zte.com.cn</email>
      </address>
</author>
	
<author fullname="Bhumip Khasnabish" initials="B." surname="Khasnabish">
      <organization>ZTE TX Inc.</organization>

      <address>
        <postal>
          <street>55 Madison Avenue, Suite 160</street>
          
          <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="Hakki Cankaya" initials="H" surname="Cankaya">
      <organization>Fujitsu</organization>

      <address>
        <postal>
          <street>2800 Telecom Parkway,</street>
          
          <city>Richardson</city>
          
          <region>TX</region>
  
          <code>75080</code>

          <country>USA</country>
        </postal>

        <email>Hakki.Cankaya@us.fujitsu.com</email>
      </address>
    </author>


	<date year="2015"/>	

    <area>Routing</area>
    <workgroup>SPRING WG</workgroup>
    <keyword>SPRING, OpenFlow</keyword>

    <abstract>
   <t> This draft reviews the use cases and lists the requirements for 
   interworking (IW) between OpenFlow (OF) and Segment routing (SR).  Although the details and
   specifics of IW depend on both the architecture and framework, there
   are some common requirements.  We specify those common requirements
   and show a simple architecture framework.

     </t>
    </abstract>
  </front>

  <!-- ***** MIDDLE MATTER ***** -->

  <middle>
    <section title="Introduction">
      <t>Segment Routing (SR) leverages the source routing paradigm. 
	  An ingress node steers a packet through a controlled set of 
	  instructions, called segments, by pre-pending the packet 
	  with an SR header.  A segment can represent any instruction, 
	  topological or service-based. A segment can have a local 
	  semantic to an SR node or global within an SR domain. 
	  Segment Routing allows one to enforce a flow through any
	  topological path and service chaining while maintaining
	  per-flow state only at the ingress node to the Segment
	  Routing domain</t> 

      <t>The Segment Routing architecture is described in 
	  (<xref target="I-D.filsfils-rtgwg-segment-routing"></xref>)
	  The Segment Routing control plane is agnostic
	  to the data plane, and hence it can be applied
	  to both MPLS (and its many variants) and IPv6.
	  </t>
	 <t>OpenFlow is a communications protocol and open
	 interface defined between the control and 
	 forwarding layers(<xref target="OpenFlow"></xref>). 
	 It allows direct access to
	 and manipulation of the forwarding plane 
	 of network devices such as switches and routers, 
	 both physical and virtual (hypervisor-based).</t> 
    
	 <t>This document introduces several scenarios
	 and discusses the interworking between segment routing 
	  and openflow.</t>

	 </section> 
	  

<section title="Conventions and Abbreviations">
<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 [RFC2119].
</t>

</section>


	<section title="Data Center (DC) Inter-connection">
	<t>Modern day DCs are increasingly utilizing Openflow protocol now, while
   the WAN network keeps maintaining the traditional IP/MPLS network. Therefore,
   there exits a need for interworking between OpenFlow and the traditional
   IP/MPLS network. This scenario discusses how to control the inter-DC flow
   based on the SDN architecture and segment routing technology.</t>
	<t> As shown in  Figure 1, the data center is controlled by one or
   several OF controllers, and all the switches and routers support flow
   forwarding.  The switches and routers communicate with OF controller
   by OpenFlow protocol.  The router is the layer 3 gateway for that
   data center.  The IP/MPLS network between the data centers support
   segment routing technology.  The segment routing label stacks are
   encapsulated in the edge routers of the data center.</t>
	<t>The security app and Traffic Engineering app are the application
   layer.  They communicate with controller through north bound
   interface.  If there are some policies, such as TE App, or
   security App and policy App for the inter-flow forwarding, the Apps download the
   service decision to the controller to result into forwarding instance,
   and the forwarding instances are downloaded to the gateway router of
   the data center to or from the forwarding label stack.</t>

	<figure  align="center">
            <artwork align="center"><![CDATA[			
                 +--------------+     +-------------+    +-------------+
                 |   TE App     |     |Security App |    | Policy App  |
                 +--------------+     +-------------+    +-------------+        
.....................................................................................
         +-------------+                                    +-------------+
         |OF Controller|                                    |OF Controller|
         +------+------+                                    +------+------+     
                |                                                  |
................|..................................................|................
+---------------+--------------+                     +-------------+---------------+
|                              |                     |                             |
|         +-------+            |      --------       |            +-------+        |
| +---+   | Switch|            |     /         \     |            | Switch|  +---+ |
| |VM |   +-------+  +-------+ |   /  IP/MPLS   \    | +-------+  +-------+  |VM | |
| +---+              | Router| ---|- ------------|---| | Router|             +---+ |
|                    +-------+ |   \  (Segment   /   | +-------+                   |
|         +-------+            |    \Forwarding)/    |            +-------+        |
|         |Switch |            |     ----------      |            |Switch |        |
|         +-------+            |                     |            +-------+        |
|      Data Center 1           |                     |      Data Center 2          |
+------------------------------+                     +-----------------------------+

                   Figure 1: Data Center Inter-connection (DCI)
            ]]></artwork>
       <postamble></postamble>
      </figure>	 

	 <section title="List of Req. for DCI">
	 <t>
	 <list style="symbols">
	  <t>OF-based DCI-Req-1: All switches and routers in DCs should support flow forwarding.</t>
      <t>OF-based DCI-Req-2: All switches and routers in DCs should support OpenFlow protocol.</t>
      <t>OF-based DCI-Req-3: Routers in DCs should support IP/MPLS and SR technologies.</t>
      <t>OF-based DCI-Req-4: Interworking function should be transparent at the edge routers of DCs that facilitate the label stacks and SIDs.</t> 
      <t>OF-based DCI-Req-5: The Interworking function should not introduce a considerable delay to the inter DC communication.</t>
      <t>OF-based DCI-Req-6: The ECMP-based path placement and explicit path mechanisms should be supported.</t>
      <t>OF-based DCI-Req-7:  State information is only maintained at head-end. Tail-end and intermediate nodes do not maintain state info. Policy changes should happen at the head-end.</t>
      <t>OF-based DCI-Req-8:  The interworking function should support OAM functions that is needed to manage SPRING and OF.</t>
     </list>
	 </t>
	 </section>
	  
	</section>
   
	 
	<section title="OpenFlow Based WAN Control">
	<t>Figure 2 shows an SDN based WAN control scenario. The controller is introduced to 
	the WAN network. The controller should support an externally visible
	Discovery Service and a Routing Service. The Discovery Service is
	responsible for bootstrapping and configuring the network, 
	discovering node-capabilities, discovering and maintaining the 
	topology graph, providing statistics and troubleshooting services
	and finally implementing an API for the Routing Service as well 
	as external requests. The Routing Service is responsible 
	for default routing on the configured network using Segment
	Routing principles like Node Segments and ECMP. It should
	also support capabilities allowing for Policy Routing, 
	Traffic Engineering and Steering. </t>
	
	<t>The transit routers (Route 2 and Router 3) are only 
	responsible for MPLS label forwarding. The SR 
	forwarding tables could be built by the controller 
	or the IGP protocols 
	(<xref target="I-D.ietf-isis-segment-routing-extensions"></xref>)
    (<xref target="I-D.ietf-ospf-segment-routing-extensions"></xref>).
    </t>
	
	<figure  align="center">
	<artwork align="center"><![CDATA[
          +-------+   +---------+   +----------+
          |Routing|   |Discovery|   |Forwarding|
          |Service|   |Service  |   |Service   | 
          +-------+   +---------+   +----------+
                         |  |
                         |  |            Service Plane
.........................|..|............................ 
                  o------v--v----o
                  | Controller   |
                  o--------------o \
                /     |         |   \    Control Plane
.............../......|.........|....\................... 
              /    +--v-----+   |     \
             /     |Router2 |   |      \
   +--------++     +--------+   |     +---------+
   | Ingress |                  |     | Router4 |
   | Router1 |                  |     +---------+
   +---------+           +------v-+        
                         | Router3|    
                         +--------+
                   Figure 2: SDN-Based WAN Control
				   
            ]]></artwork>
       <postamble></postamble>
      </figure>	 

	 <section title="List of Req. for OF-based SDN WAN">
	 <t>
	 <list style="symbols">
	  <t>OF-based-SDN-WAN-Req-1: Controller may be multiple in WAN.</t>
      <t>OF-based-SDN-WAN-Req-2: The controller should support Discovery Service, Routing Service, and Forwarding Services.</t>
      <t>OF-based-SDN-WAN-Req-3: The Discovery Service should support bootstrapping and configuring the network, discovering node-capabilities and topology, statistics and troubleshooting services, and an API for the Routing Service.</t>
      <t>OF-based-SDN-WAN-Req-4: The Routing Service should support default routing on the configured network using Segment Routing principles like Node Segments and ECMP.</t> 
      <t>OF-based-SDN-WAN-Req-5: The Routing Service should also support Policy Routing, Traffic Engineering and Steering.</t>
      <t>OF-based-SDN-WAN-Req-6: Forwarding tables should be maintained by the controller, but could be built by IGP protocol and the Routing Service.</t>
      <t>OF-based-SDN-WAN-Req-7: Routing Service and Discovery Service should support high availability.</t>
      <t>OF-based-SDN-WAN-Req-8: The ECMP-based path placement and explicit path mechanisms for WAN should be supported.</t>
     </list>
	 </t>
	 </section> 

    </section>	  
	
	<section title="Interworking of OpenFlow and BGP Edge Routers">
    <t> There are four PEs, two of them (PE1 and PE3) support Openflow protocol,
        and the other two(PE2 and PE4) support traditional BGP protocol as 
        shown in Figure 3. The routes on the PE2 and PE4 are 
	reflected to PE1 and PE3 through the BGP route reflector.
	For unified control and interoperability the OF controller needs to interpret 
      the route control messages from the BGP route reflector/controller, and vice versa.
The details of the interface and the messages that need to be exchanged between OF Controller and BGP
Route Reflector/Controller need to be determined (future work).
	</t>
	
    <t>We introduce an OF controller in the network and an application layer server. The Apps in the Server can 
	have visibility to the routes from BGP RR as the figure shows. 
	This makes it feasible to export the route 
	to OF controller. The OF controller make its forwarding 
	decision based on the route exported from application
	and the application policy. The forwarding decision 
	is made of label stack and downloaded to PE2 and PE4.
	The PE2 and PE3 are responsible for the segment
	routing encapsulation as ingress routers.</t>
	
	<figure  align="center">
     <artwork align="center"><![CDATA[			
			
                  +------------+ 
                  | Application|
                  +------------+
				    /          \
................../.............\......... 
                 /               \
   +--------------+             +--------+
   |OF Controller |-------------| BGP RR |
   +--------------+             +--------+
            |       \         /         |
  ..........|.........\...../...........|.....
            |            \/             |
          +------+      /  \    +------+|
          | PE1  |     /     \  | PE3  ||
          +------+   /        \ +------+|
                   /                    |
      +-----+    /    Traditional  +-------+
      | PE2 | /   IP/MPLS network  | PE4   |
      +-----+                      +-------+

     Figure 3: Interworking of OpenFlow and BGP Edge Routers
				   
            ]]></artwork>
       <postamble></postamble>
      </figure>	 
	 
  <section title="List of Req. for BGP-Edge and OF IW">
	 <t>
	 <list style="symbols">
	  <t>BGP-Edge-OF-IW-Req-1: The OpenFlow controller should interpret the route control messages from the BGP route reflector.</t>
      <t>BGP-Edge-OF-IW-Req-2: A routing application on the Application layer should coordinate routes between OpenFlow controller and BGP Route Reflector.</t>
      <t>BGP-Edge-OF-IW-Req-3: Segment routing encapsulation and label stacking should take place in ingress routers.</t>
      <t>BGP-Edge-OF-IW-Req-4: Forwarding decisions should be transparent to the traditional IP/MPLS network.</t> 
      <t>BGP-Edge-OF-IW-Req-5: The interworking between the OF Controller and BGP RR should not introduce considerable delay to the route convergence caused by routing changes.</t>
      <t>BGP-Edge-OF-IW-Req-6: The proposed IW function solution should be scalable as network grows.</t>
      <t>BGP-Edge-OF-IW-Req-7: All BGP extensions should be supported.</t>
      <t>BGP-Edge-OF-IW-Req-8: Latest OF version should be supported.</t>
     </list>
	 </t>
	 </section> 

<section title="Message Formats">
<t>
There are two messaging systems; (1) between OF Controller and Switches/Routers, (2) between Of Controller and Route Reflector.
</t>

<section title="Controller-to-Switch Messages">
<t>
These messages are originated by the controller and sent to the switches.Features request message: Controller sends this message to request the identification and capabilities of a certain switch. After the receipt, the switch responds to this message by reporting its identification and capabilities.
Configuration message: Controller sets and queries the switch parameters with this message. The switch responds with its parameters, if the message was a query.
Modify-State: The controller uses this message to set and manage the states of the switches. Usually it is used to add/delete/modify flow entities in the OF tables and set the switch port parameters.
Read-State message: This message is used by the controller to request the current configuration and stats from the switch.
Packet-out message: This message is used by the controller to specify a port for the packet to leave the switch. 
Barrier message: These messages used by the controller to accomplish message dependencies between switches. 
Role-request message: This message is used by the controller to either set or query the role of the OF channel to a specific switch.
Asynch-config message: Using this message, a controller can set an additional filter that it wants to receive over the OF channel.
</t>

<section title="Asynchronous and Symmetric Messages">
<t> A switch can initiate a message to the controller without being solicited by a request message from the controller. These messages will include
Packet-in message: this message transfers the control of a packet to the controller. Any event like packet loss or flow table miss is sent to the controller by the switch.
Flow removed message: Switch informs the controller about the removal of the flow table entry by using this message.
Port-status message: Switch informs the controller about a change on the port status. This change could be caused by a user who set the port down or a link failure.
Error message: Switch let controller know about any error by using this message. 
</t>
<t> Symmetric Messages: These messages can be sent in both direction (switch to controller and controller to switch) without any requests. The messages include:
Hollo message: hello messages are exchanged between controller and switch at the connection startup.
Echo message: These messages are exchanged in request/reply fashion to check if the connection between the controller and the switch is up.
</t>
  

</section> 
</section> 

</section>

<section title="OF Controller and Route Reflector Messages">
<t>
OF Controller and Route Reflector (RR) belonging to the same cluster run IBGP between them to exchange route updates. 
OF Controller becomes a client and receives all routes from the Route Reflector [RFC4456]. 
Message formats (OPEN, UPDATE, and KEEPALIVE messages), message handling and Finite State Machines (FSM) mimic [RFC4271].
</t>
 
</section>

</section>	 
   
   <section title="An SR OF IW Architecture Framework">
   <t>In this section we discuss a simple SR OF IW Architecture Framework.</t>
   	<figure  align="center">
     <artwork align="center"><![CDATA[			
			
            +-------------------------------------------+
            | Applications and Services Domain          |
            |   (BGP, OF, SPRING, etc. Apps             |
            +-------------------------------------------+
             |                |                     |
   ..........|................|.....................|......
             |                |                     |
   +--------------+     +------------------+   +--------------------+
   |OF Controller |-----|   SPRING Net     |   |SPRING Func.Entity  |
   |              |     | Cont.Func./Entity|   |                    |
   +--------------+    /+--------------|---+   +--------------------+
              |  |    /                |         /          \  
         .....|..|.../.................|......../............\.....
              |  +--/----------------+ |       /              \     
              |    /                 | |      /                \
            +------+              +------+   /                  \
            | PE1  |              | PE3  |  /                    \
            +------+              +------+ /                      \
                                          /                        \     
                                     +-----+   Traditional     +-------+
                                     | PE2 |  IP/MPLS network  | PE4   |
                                     +-----+                   +-------+


                      Figure 4:   SR OF IW Architecture
				   
        ]]></artwork>
       <postamble></postamble>
      </figure>	
	  
	<section title="Common SR OF IW Requirements">
	<t>In this section we list the common SR OF interworking requirements.</t>
	<t>
	 <list style="symbols">
	  <t>Common SR-OF-IW-Req-1: In case of multiple OpenFlow controllers, consistency between controllers should be supported [OpenFlow].</t>
      <t>Common SR-OF-IW-Req-2: Security threats should be addressed by the architecture and the Interworking Function.</t>
      <t> Common SR-OF-IW-Req-3: The Interworking function should support OAM functions.</t>
      </list>
	  </t>
	 </section>   
	  
   </section>


    <section anchor="Security" title="Security Considerations">
      <t>TBD.</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>In progress.</t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>IANA request for this document, if any, will be discussed in a future version of this draft.</t>
     </section>
  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>
  
    <references title="Normative References">

	  <?rfc include='reference.RFC.2119' ?>
	  <?rfc include='reference.I-D.ietf-isis-segment-routing-extensions'?> 
	  <?rfc include='reference.I-D.ietf-ospf-segment-routing-extensions'?>
	  <?rfc include='reference.I-D.filsfils-rtgwg-segment-routing'?>
	  
	   <reference anchor="OpenFlow">
	    <front>	
		  <title>OpenFlow Switch Specification, Version 1.3.4 </title>

		  <author>
            <organization></organization>
          </author>	  

          <date day="27" month="March" year="2014"/>
	    </front>
	  </reference>
	
    </references>

  </back>
</rfc>
