<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc, which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [

<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC793 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.0793.xml">
<!ENTITY RFC2460 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2460.xml">
<!ENTITY RFC3986 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3986.xml">

]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt'?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), please see ttp://xml.resource.org/authoring/README.html. -->
<?rfc strict="yes"?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->

<rfc category="std" docName="draft-cheng-oftest-cont-rate-00" ipr="trust200902">

<!-- category values: std, bcp, info, exp, and historic ipr values: trust200902, noModificationTrust200902, noDerivativesTrust200902, or pre5378Trust200902 you can add the attributes updates="NNNN" and obsoletes="NNNN" they will automatically be output with "(if approved)" -->


  <!-- ***** FRONT MATTER ***** -->
  <front>
  <!-- The abbreviated title is used in the page header - it is only necessary if the full title is longer than 39 characters -->

    <title abbrev="Flow Setup Rate Test for OpenFlow Controller">    
    Flow Setup Rate Test for OpenFlow Controller
    </title>

    <author fullname="Mike Cheng" initials="M." surname="Cheng">
      <organization>BII Group Holdings Ltd.</organization>
      <address>
        <postal>
          <street></street>
          <city>Beijing</city>
          <region></region>
          <code></code>
          <country>P. R. China</country>
        </postal>
        <email>mikecheng@biigroup.com</email>
      </address>
    </author>

    <author fullname="Yaming Bao" initials="Y." surname="Bao">
      <organization>BII Group Holdings Ltd.</organization>
      <address>
        <postal>
          <street></street>
          <city>Beijing</city>
          <region></region>
          <code></code>
          <country>P. R. China</country>
        </postal>
        <email>ymbao@biigroup.cn</email>
      </address>
    </author>    
    <date year="2016"/>

    <!-- Meta-data Declarations -->
    <area>Internet</area>
    <keyword>Openflow controller, flow setup rate</keyword>


<abstract>
<t>
This document proposes the test method and test process for controller about the flow setup rate.
</t>
</abstract>


  </front>

  <!-- ***** MIDDLE MATTER ***** -->

<middle>


  <section anchor="s1" title="Introduction">

   <t>OpenFlow is an implementation of Software Defined Network. The controller represents the network operating system. It provides north bound API for application development. The controller becomes the central and key component of an OpenFlow network. The operational behavior and efficiency of the controller is a significantly influencing factor for the Software Defined Network. This document proposes the test method and test process for controller about the flow setup rate.</t>

   </section>


<section anchor="s2" title="Flow Setup Rate: Proactive Mode">
  <section anchor="s2.1" title="Objective">

      <t>The purpose of this test is to measure the rate by which an OF controller pushes a number of flows (configured statically in the controller) to a switch</t>
     </section>
  <section anchor="s2.2" title="Test Setup">
    <section anchor="s2.2.1" title="Topology">
      <t>A single switch is connected to a controller, the connection may be TCP or TLS. There are two ports of the switch where two hosts are connected.</t>
    </section>

    <section anchor="s2.2.2" title="Prerequisites and Recommendations for the test">
      <t>1. The controller is directly connected(no additional IP hops) to the switch (simulated by the test tool) to remove any error condition due to the other network activity and congestion.</t>
      <t>2. Use same switch simulators or real switches, so that switch side latencies remain a common factor for benchmarking different controllers from different vendors.</t>
      <t>3. The test tool should be capable of capturing packet on the switch side.</t>
      <t>4. Controller should run application that can populate flows in the switches proactively upon administrator request.</t>

   </section>
</section>

  <section anchor="s2.3" title="Test Configuration">
    <section anchor="s2.3.1" title="Controller Configuration">
       <t>The controller must be configured with the following configuration parameters to meet the objective of the test. Other configuration parameters must be kept at default value. It is also assumed that the switches have single table configured, so all flows are pushed to the single table by the controller.</t>
       <t>Channel Type: TCP or TLS</t>
       <t>Echo Request/Reply: Optional parameter. Might affect test result depending upon frequency of transmission.</t>
       <t>Barrier Request:Controller sends Barrier Request after every Flow Mod messages and waits for Barrier Reply from switch before sending the next Flow Mod message.</t>
       <t>Flow Profile:There has to be large number of preconfigured flows in the controller </t>
       </section>

    <section anchor="s2.3.2" title="Switch Configuration">
       <t>Following Switch parameters need to be set before proceeding with the test case.</t>
       <t>Channel Type:TCP or TLS as configured in controller</t>
       <t>Echo Request/Reply:Optional parameter.</t>
       <t>Barrier Reply:Should reply to Barrier Request received from controller.</t>
       <t>Number of Switches:Total number of switches in the topology.</t>
     
       </section>
   </section>

  <section anchor="s2.4" title="Test Steps">
     <t>1. Configure F number of flows in the controller.</t>
     <t>2. Start packet capture on the Switch.</t>
     <t>3. Start the controller followed by the switches.</t>
     <t>4. Wait for a pre-defined time period (flow push time) that the controller may take to push all the flows to the switch. This may be taken as a test input configurable by the user.</t>
     <t>5. Verify on each switch that it has got F flows populated.</t>
     <t>6. Stop Capture</t>
     <t>7. For each switch, check the packet capture and find out the time between the first and the last flow mod message from controller.</t>
     <t>8. Stop Capture</t>
     </section>

  <section anchor="s2.5" title="Test Measurement">

     <t>1.Note down the time gap between the first Flow-mod and the last Flow-mod message sent out by the controller, let it be T sec.</t>
     <t>2.There should be F number of flow-mod messages sent out by the controller.</t>
     <t>3.Find out the rate as:Flow Push Rate = (F)/T per sec.</t>
     </section>


 </section>

<section anchor="s3" title="Flow Setup Rate: Reactive Mode">
  <section anchor="s3.1" title="Objective">

      <t>The purpose of this test is to measure the rate at which an OpenFlow controller sends flow_mod messages in response to large number of packet_in messages generated by switches connected to it. The controller under test needs to be configured to generate flow_mod in response to incoming packet_in. This test counts flow_mod messages and calculates the rate of transmission.</t>
     </section>
  <section anchor="s3.2" title="Test Setup">
    <section anchor="s3.2.1" title="Topology">
      <t>A single switch is connected to a single controller; the connection may be TCP or TLS (the test is also recommended to be iterated over multiple switches).</t>
     </section>

    <section anchor="s3.2.2" title="Prerequisites and Recommendations for the test">
       <t>1. The controller is directly connected (no additional IP hops) to the switch (simulated by the test tool) to remove any error condition due to the other network activity and congestion.</t>
       <t>2. Use same switch simulator or real switches when testing with different controllers, so that switch side latencies remain a common factor for benchmarking different controllers from different vendors.</t>
       <t>3. The test tool must be capable of capturing packet on the switch side.</t>
      
       </section>

    </section>
  <section anchor="s3.3" title="Test Configuration">
    <section anchor="s3.3.1" title="Controller Configuration">
       <t>The controller must be configured with following configuration parameters to meet the objective of the test. Other configuration parameters must be kept at default. Few example iterations of the test are defined in the table below. There can be more iterations with different parameter combinations. It is assumed that the controller must run an application that sends flow_mod messages to switch in response to packet_in messages received. There should not be any flow aggregation done by the controller, that is, for each packet_in with unique L2/L3 header the controller sends a new flow_mod message.</t>
        <t>Channel Type:TCP or TLS</t>
        <t>Echo Request/Reply:Optional parameter.</t>
        <t>Barrier Request:Controller sends Barrier Request after every Flow Mod messages and waits for Barrier Reply from switch before sending the next Flow Mod message.</t>
        <t>Flow Profile:No predefined flow profile needed</t>

     </section>

     <section anchor="s3.3.2" title="Switch Configuration">
       <t>Following Switch parameters must be set before proceeding with the test. Few combinations for iteration are illustrated below, but there can be different combinations over which the test can be iterated.</t>
       <t>Channel Type:TCP or TLS as configured in controller</t>
       <t>Echo Request/Reply:Optional parameter.</t>
       <t>Barrier Reply:Should reply to Barrier Request received from controller.</t>
       <t>Number of packet_in messages:Number of packet_in messages that the switch will send out once the OF channel is established with the controller</t>
       <t>Packet_in Tx Rate:Rate at which Packet_in messages are sent out from the switch</t>
   
     </section>
   </section>

   <section anchor="s3.4" title="Test Steps">
    <t>1.  Configure each switch such that it can send large number of packet_in messages (Consider, 10k per switch). These 10k packet_in messages must be divided in two sets, set 1 which should have in_port as 1, source mac X, and destination mac Y. Set 2  must have in_port as 2, source mac Y and destination mac X (that is, the reverse of set 1). Same configuration applies for IP addresses of L3 profiles, set 1 which should have in_port as 1, source ip x.x.x.x and destination ip y.y.y.y. Set 2 should have in_port as 2, source ip y.y.y.y and destination ip x.x.x.x (that is, the reverse of set 1).Sending bi-directional traffic may be required for some controllers who do not push flows if destination Host is not yet discovered and need to see packet from both the source and destination hosts.</t>
    <t>2.  Start controller.</t>
    <t>3.  Start the switches.</t>
    <t>4.  Once the OF channel/s is/are established, start packet capture on the switch simulator.</t>
    <t>5.  Wait till all the switches have sent out the packet_in messages configured. This can be verified either by packet_in Tx count (packet_in transmitted by switch) on each switch or counting the number of packet_in messages in the capture file.</t>
    <t>6.  Wait till the controller has replied to all the packet_in messages received. This can be verified either by flow_mod Rx count (flow_mod received by the switch) on each switch or counting the number of flow_mod messages received in the capture file. If there are N number of packet_in transmitted by the switch simulator, then there should be N flow_mod messages received by it.</t>
    <t>7.  Stop capture and check the packet capture to find out the time between the first and the last flow_mod message from controller.</t>
    <t>8.  Re-iterate the test with different combination of parameter values.</t>

   </section>
 
 </section>


<section anchor="s4" title="Acknowledgements">

  <t>Funding for the RFC Editor function is currently provided by BII Group. </t>
</section>

</middle>


<!-- ***** BACK MATTER ***** -->

<back>

</back>
</rfc>


