wiki:GENIExperimenter/ExperimentExample-OF-FOAM

Version 103 (modified by lnevers@bbn.com, 12 years ago) (diff)

--

GENI OpenFlow Experiment Example 2

This page illustrates an OpenFlow (OF) example for the Omni How-to page. OpenFlow is used for the control of the network resources in the GENI backbone and at Meso-scale campus locations. Experimenters can use GENI resources without learning OpenFlow. Experimenters can choose to control the network switching fabric in their slices by running an OpenFlow controller. Many experimenters use existing OpenFlow controller code as-is, some use controllers with relatively simple modifications, and some experimenters have written their own controller. The GPO is available to help design your controller and plan your experiment configuration. Feel free to contact us at help@geni.net.

The experiment in this page uses credentials from the GPO ProtoGENI Clearinghouse (pgeni.gpolab.bbn.com) to set up a 3 Meso-scale sites OpenFlow experiment. The sites are BBN, Wisconsin and Clemson each with a MyPLC compute resource. If you are interested in using PG resources, see the HelloGENI experiment page for an OpenFlow experiment using PG nodes.

No image "OF-FOAM-experiment.jpg" attached to GENIExperimenter/ExperimentExample-OF-FOAM

Omni tools are used to reserve resources in each of the site's FlowVisor OpenFlow Aggregate Manager (FOAM) and GENI Aggregate Managers. Steps required to set up this OpenFlow experiment are detailed in this page:

  • Authentication and Omni tools configuration
  • Determine Resources Availability
  • Define Compute Resources RSpecs
  • Define OpenFlow Network Resources RSpecs
  • Create Slice and Request Resources
  • Run Experiment
  • Release Resources

Note: FOAM sites must be federated in order to trust a Clearinghouse. This is an OpenFlow administrator task that must take place before any of the user OpenFlow operations can take place.

Authentication and Omni tools configuration

This example assumes that GENI credentials have been set up as detailed in the GENI Credentials section of the Omni how-to page.

The following omni_config was used for this experiment along with the credentials from the GPO Clearinghouse to access the GENI Aggregate Managers in this experiment:

[omni]
default_cf = pgeni
users = lnevers

# ---------- Users ----------
[lnevers]
urn = urn:publicid:IDN+pgeni.gpolab.bbn.com+user+lnevers
keys = ~/.ssh/id_rsa.pub

# ---------- Frameworks ----------
[pgeni]
type = pg
ch = https://www.emulab.net:443/protogeni/xmlrpc/ch
sa = https://www.pgeni.gpolab.bbn.com:443/protogeni/xmlrpc/sa
cert = ~/.ssl/pgeni/encrypted-cleartext.pem
key = ~/.ssl/pgeni/encrypted-cleartext.pem
verbose=false

[pg]
type=pg
ch = https://www.emulab.net:443/protogeni/xmlrpc/ch
sa = https://www.emulab.net:443/protogeni/xmlrpc/sa
cert = ~/.ssl/protogeni/encrypted-cleartext.pem
key = ~/.ssl/protogeni/encrypted-cleartext.pem

[aggregate_nicknames]
plc-gpo=,http://myplc.gpolab.bbn.com:12346/
plc-clemson=,http://myplc.clemson.edu:12346/
plc-wisconsin=,https://wings-openflow-1.wail.wisc.edu:12346/
of-gpo=,https://foam.gpolab.bbn.com:3626/foam/gapi/1
of-clemson=,https://foam.clemson.edu:3626/foam/gapi/1
of-wisconsin=,https://foam.wail.wisc.edu:3626/foam/gapi/1
of-nlr=,https://foam.nlr.net:3626/foam/gapi/1

Note: You can use the aggregate_nicknames defined above to specify an aggregate. For example, the Omni command argument "-a http://myplc.gpolab.bbn.com:12346/" can be replaced by "-a plc-gpo" in any Omni command shown below.

A complete list of Aggregate managers is compiled in the GENI Aggregate page, if your site is not listed on this page you should contact your site administrator, or help@geni.net.

Reserve GENI IP subnet

In the Meso-scale network a layer 3 experiment requires its own separate IP subnet in order to control all traffic without interfering with traffic from other experiments. Before you start this experiment, you need to request an IP subnet from the gpo-infra@geni.net mail list along with a duration for the subnet reservation. To view the current list of subnets and their current allocation see the GENI Network Core Subnet page.

Determine Resources Availability

Each of the 3 sites requires an OpenFlow RSpec and a compute resource RSpec. Also, an OpenFlow RSpec is required for the GENI Core (NLR in this example). To find out what resources are available use Omni tools to get a list of available resources from the available aggregates. Following is a list of MyPLC and FOAM aggregates available in the Meso-scale network:

Site MyPLC Aggregate URL FOAM Aggregate URL
BBN http://myplc.gpolab.bbn.com:12346/ https://foam.gpolab.bbn.com:3626/foam/gapi/1
Clemson http://myplc.clemson.edu:12346/ https://foam.clemson.edu:3626/foam/gapi/1
NLR https://foam.nlr.net:3626/foam/gapi/1
Wisconsin https://wings-openflow-1.wail.wisc.edu:12346/https://foam.wail.wisc.edu:3626/foam/gapi/1

The experiment captured in this page uses the BBN, Clemson, Wisconsin and NLR Aggregates. For a complete list of available aggregates see the GENI Aggregates page.

Define Compute Resources RSpecs

This experiment uses Omni V1.6.1 to set up the experiment. As a first step, the experimenter determines the available compute resources at each site. Following are the omni commands issued to get the advertisements of available compute resources from the BBN, Clemson and Wisconsin MyPLC aggregates:

 $ ./src/omni.py -a http://myplc.gpolab.bbn.com:12346/ listresources -o             # generates rspec-myplc-gpolab-bbn-com-12346-.xml
 $ ./src/omni.py -a  http://myplc.clemson.edu:12346/ listresources -o               # generates rspec-myplc-clemson-edu-12346-.xml
 $ ./src/omni.py -a https://wings-openflow-1.wail.wisc.edu:12346/ listresources -o  # generates rspec-wings-openflow-1-wail-wisc-edu-12346-.xml

The Omni commands above used the -o argument to get the listresources output into advertisement RSpec files, which are all attached to this page as a reference. The advertisement RSpecs are used to generate the request RSpecs to reserve the resources. Following are the compute resources request RSpec defined based on the output of the listresources commands above.

BBN MyPLC Compute Resource RSpec

<?xml version="1.0"?>
<!--
This rspec will create a container on each of the BBN production MyPLC plnodes.
AM: https://myplc.gpolab.bbn.com:12346/
-->
<RSpec type="SFA">
  <network name="plc.gpolab">
       <node component_id="urn:publicid:IDN+plc:gpolab:gpolab+node+navis.gpolab.bbn.com" 
       component_manager_id="urn:publicid:IDN+plc:gpolab+authority+sa" 
       node_id="n1" site_id="urn:publicid:IDN+plc:gpolab:gpolab+authority+sa">      
            <hostname>        navis.gpolab.bbn.com      </hostname>      
        </node>    
  </network>
</RSpec>

Clemson MyPLC Compute Resources RSpec

<?xml version="1.0" ?>
<!-- Resources at AM:
        URL: http://myplc.clemson.edu:12346/
-->
<RSpec type="SFA">  
    <network name="plc">    
        <node component_id="urn:publicid:IDN+plc:cu+node+planetlab4.clemson.edu" 
             component_manager_id="urn:publicid:IDN+plc+authority+sa" 
                node_id="n1" site_id="urn:publicid:IDN+plc:cu+authority+sa">     
            <hostname>        planetlab4.clemson.edu      </hostname>      
        </node>    
    </network>
</RSpec>

Wisconsin MyPLC Compute Resources RSpec

<?xml version="1.0" ?>
<!-- Resources at AM:
        URL: https://wings-openflow-1.wail.wisc.edu:12346/
-->
<RSpec type="SFA">  
    <network name="plc">    
        <node component_id="urn:publicid:IDN+plc:wisc+node+wings-openflow-2.wail.wisc.edu" 
              component_manager_id="urn:publicid:IDN+plc+authority+sa" 
                node_id="n9" site_id="urn:publicid:IDN+plc:wisc+authority+sa">    
            <hostname>        wings-openflow-2.wail.wisc.edu      </hostname>   
        </node>    
    </network>  
</RSpec>

The MyPLC plnodes are pre-configured to use pre-defined addresses; MyPLC doesn't allow experimenters to change that configuration. When the experiment is running you will need to choose the appropriate interface for your experiment traffic based on the IP subnet assigned to you by the GPO infrastructure group as described in the section above.

Define OpenFlow Network Resources Rspecs

To write an OF RSpec you must determine the end-to-end OF path that will be used for the experiment. This section describes this process, which is comprised of the following steps:

Step 1. Collect listresources from all FOAM Aggregates. Note that these OpenFlow advertisement RSpecs provide insight into all resources at the aggregate, but do not provide any insight into whether they are available.
Step 2. Review GeniAggregate to determine how each experiment MyPLC host maps to the site's OpenFlow switch. Determine addresses and ports, and define site specific OF Group rules.
Step 3. Using guidelines from the Writing OF V3 RSpec page merge the information from Step 2 to generate the request RSpecs.

Each of the above steps is covered in detail below:

Step 1: Collect listresources from all FOAM Aggregate

  1. Clemson FOAM aggregate:
     $ ./src/omni.py -a https://foam.clemson.edu:3626/foam/gapi/1 listresources -o    # generates output file rspec-foam-clemson-edu-3626-foam-gapi-1.xml
    
  2. Wisconsin FOAM aggregate:
     $ ./src/omni.py -a https://foam.wail.wisc.edu:3626/foam/gapi/1 listresources -o  # generates rspec-foam-wail-wisc-edu-3626-foam-gapi-1.xml
    
  3. BBN FOAM aggregate:
     $ ./src/omni.py -a https://foam.gpolab.bbn.com:3626/foam/gapi/1 listresources -o # generates rspec-foam-gpolab-bbn-com-3626-foam-gapi-1.xml
    
  4. NLR OpenFlow Core FOAM aggregate:
     $ ./src/omni.py -a https://foam.nlr.net:3626/foam/gapi/1 listresources -o        # generates rspec-foam-nlr-net-3626-foam-gapi-1.xml
    

The Omni commands above used the -o argument to get the listresources output into advertisement RSpec files, which are all attached to this page as a reference. The output Advertisement RSpec files provide the switch and the port information to be used in the OpenFlow request RSpec.

Step 2: Determine site specific OpenFlow details

This sections shows you how to determine the site specific OpenFlow RSpec details by walking through the information gathering process. To determine which OpenFlow resources to use, go to the GeniAggregate page and select the OpenFlow Aggregate links for BBN, Clemson and Wisconsin. Each of these OpenFlow Aggregate pages contain a site diagram. The OpenFlow site diagrams show ports, DPIDs, and hosts mapping for the site's OpenFlow switch. In addition to the information from the OpenFlow site diagram, OpenFlow groups rules must defined for each site to handle traffic for the hosts. Each site Rspec will include a group definition that looks as follows:

    <openflow:match>
      <openflow:use-group name="group-name" />
      <openflow:packet>
        <openflow:dl_type value="0x800,0x806"/>
        <openflow:nw_dst value="10.42.11.0/24"/>
        <openflow:nw_src value="10.42.11.0/24"/>
      </openflow:packet>
    </openflow:match>

Note: The group-name above will be replace by the actual group name values defined in flowspec.
Note: The address 10.42.11.0/24 was requested as described in the section above.

Now, let's map the 3 nodes we chose in the compute resource RSpecs to the appropriate OpenFlow switch ports and determine how they connect to the GENI CORE network VLAN 3715.

BBN OpenFlow Aggregate

To define the OpenFlow request RSpec for the BBN site we need to consider the compute resource we selected, which is the MyPLC node navis.gpolab.bbn.com. We then determine how the node navis is connected to the OpenFlow switch, then we find the Data Path IDentifier (DPID) for the switch VLAN 1750 which is used at every meso-scale site for MyPLC resources to access the backbone OpenFlow VLANs, and finally we determine the path required to connects to the network core OF VLAN 3715. All this information can be found in the BBN OF Aggregate diagram, which is shown below with the relevant BBN OpenFlow request RSpec details highlighted:

No image "BBNOFAggregateResources.jpg" attached to GENIExperimenter/ExperimentExample-OF-FOAM

The BBN OpenFlow Aggregate image above shows the information required for the OpenFlow RSpec:

  • Host navis.bbn.com is connected to port 32 of the OF switch named habanero
  • OF switch habanero has a DPID of 06:d6:00:24:a8:c4:b9:00 for VLAN 1750.
  • OF switch habanero uses port 47 to connect to port 20 on the OF switch poblano.
  • OF switch poblano has a DPID of 06:d6:00:12:e2:b8:a5:d0 for VLAN 1750.
  • VLAN 1750 is mapped to the Core VLAN 3715 on poblano port 3.

Note: For the BBN habanero OF switch *only*, you must add 24 to the physical port number to determine the port to use in the rspec. The host navis.bbn.com is on port 32 (+24=56), which means your rspec will use port 56 and port 47 (+24=71) maps to 71 to get to poblano. The syntax for each of these can be "borrowed" from the listresources associated to each DPID.

Now we have all the site specific information needed to define the BBN OF resource request RSpec. These are the RSpec lines that define the ports on habanero:

  <openflow:group name="bbn-1750-nodes">

    <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.gpolab.bbn.com+datapath+06:d6:00:24:a8:c4:b9:00"     
                       component_manager_id="urn:publicid:IDN+openflow:foam:foam.gpolab.bbn.com+authority+am" 
                       dpid="06:d6:00:24:a8:c4:b9:00">
     <openflow:port name="32" num="56"/>
     <openflow:port name="47" num="71"/>
   </openflow:datapath>
 </openflow:group>

These are the RSpec lines that define the ports on poblano:

 <openflow:group name="bbn-1750-3715">
     <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.gpolab.bbn.com+datapath+06:d6:00:12:e2:b8:a5:d0" 
                        component_manager_id="urn:publicid:IDN+openflow:foam:foam.gpolab.bbn.com+authority+am" 
                        dpid="06:d6:00:12:e2:b8:a5:d0">
       <openflow:port num="3"/>
        <openflow:port num="20"/>
      </openflow:datapath>
 </openflow:group>

In addition each of the groups must be allowed to share traffic for the IP subnet range reserved for the experiment:

   <openflow:match>

      <openflow:use-group name="bbn-1750-nodes" />
      <openflow:use-group name="bbn-1750-3715" />
      <openflow:packet>
        <openflow:dl_type value="0x800,0x806"/>
        <openflow:nw_dst value="10.42.11.0/24"/>
        <openflow:nw_src value="10.42.11.0/24"/>
      </openflow:packet>

    </openflow:match>

The BBN OpenFlow request RSpec will be completed in Step 3.

Clemson OpenFlow Aggregate

To define the OF RSpec for the Clemson site review the information in the Clemson OF Aggregate diagram. The compute resource used is the MyPLC node planetlab4.clemson.edu. The following image highlights the the information required from the Clemson OpenFlow Aggregate site diagram:

No image "ClemsonOFAggregateResources.jpg" attached to GENIExperimenter/ExperimentExample-OF-FOAM

These are the lines from the Advertisement that should be used in the OpenFlow request RSpec:

  <openflow:group name="clemson-1750-3715">

     <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam+datapath+06:d6:00:26:f1:3f:e4:80" 
                    component_manager_id="urn:publicid:IDN+openflow:foam:foam+authority+am" dpid="06:d6:00:26:f1:3f:e4:80">
        <openflow:port name="39" num="39"/>
        <openflow:port name="43" num="43"/>
      </openflow:datapath>
  </openflow:group>

In addition each of the groups must be allowed to share traffic for the IP subnet range reserved for the experiment:

   <openflow:match>

      <openflow:use-group name="clemson-1750-3715" />

      <openflow:packet>
	<openflow:dl_type value="0x800,0x806"/>
	<openflow:nw_dst value="10.42.11.0/24"/>
	<openflow:nw_src value="10.42.11.0/24"/>
      </openflow:packet>

    </openflow:match>

The Clemson OpenFlow request RSpec will be completed in Step 3.

Wisconsin OpenFlow Aggregate

To define the OpenFlow RSpec for the Wisconsin site review the Winsconsin OF Aggregate diagram. The compute resource used is the MyPLC node wings-openflow-2.wail.wisc.edu. The Winsconsin OF Aggregate diagram only shows the MAC address for the OpenFlow switch, to determine the DPID simply combine the hexadecimal value for 1750 (06d6) and the MAC address of the switch (00:23:47:CC:44:00) to create the DPID (06:d6:00:23:47:CC:44:00). The following image highlights the the information required from the Wisconsin OpenFlow Aggregate site diagram:

No image "WisconsinOFAggregateResources.jpg" attached to GENIExperimenter/ExperimentExample-OF-FOAM

These are the lines from the Wisconsin OF Advertisement that should be used in the OpenFlow request RSpec:

    <openflow:group name="wisconsin-nodes-1750">
      <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.wail.wisc.edu+datapath+06:d6:00:23:47:cc:44:00"
                         component_manager_id="urn:publicid:IDN+openflow:foam:foam.wail.wisc.edu+authority+am">
        <openflow:port num="1"/>
        <openflow:port num="22"/>
      </openflow:datapath>
    </openflow:group>

    <openflow:group name="wisconsin-1750-3715">
      <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.wail.wisc.edu+datapath+06:d6:00:21:f7:be:8d:00"
                         component_manager_id="urn:publicid:IDN+openflow:foam:foam.wail.wisc.edu+authority+am">
        <openflow:port num="3"/>
        <openflow:port num="51"/>
      </openflow:datapath>
    </openflow:group>

In addition each of the groups must be allowed to share traffic for the IP subnet range reserved for the experiment:

    <openflow:match>

      <openflow:use-group name="wisconsin-nodes-1750" />
      <openflow:use-group name="wisconsin-1750-3715" />

      <openflow:packet>
        <openflow:dl_type value="0x800,0x806"/>
        <openflow:nw_dst value="10.42.11.0/24"/>
        <openflow:nw_src value="10.42.11.0/24"/>
      </openflow:packet>

    </openflow:match>

The Wisconsin OpenFlow request RSpec will be completed in Step 3.

NLR OpenFlow Aggregate

To define the NLR OF RSpec review the OpenFlow DPIDs table for the core in the National LambaRail GENI page. From the table you can see the DPIDs for NLR OpenFlow VLAN 3715. You may choose to use only the two core sites (Chicago and Atlanta) associated with the three experiment sites, but you can also choose to define all DPIDs in the NLR Core for VLAN 3715, which is how this example is shown:

   <openflow:group name="nlr-3715">
     <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+datapath+0e:83:00:23:47:c8:bc:00" component_manager_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+authority+am" />
     <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+datapath+0e:83:00:23:47:ca:bc:40" component_manager_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+authority+am" />
     <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+datapath+0e:83:00:24:a8:d2:48:00" component_manager_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+authority+am" />
     <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+datapath+0e:83:00:24:a8:d2:b8:40" component_manager_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+authority+am" />
     <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+datapath+0e:83:00:26:f1:40:a8:00" component_manager_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+authority+am" />
   </openflow:group>

   <openflow:match>
      <openflow:use-group name="nlr-3715" />
      <openflow:packet>
        <openflow:dl_type value="0x800,0x806"/>
        <openflow:nw_dst value="10.42.11.0/24"/>
        <openflow:nw_src value="10.42.11.0/24"/>
      </openflow:packet>
   </openflow:match>

The NLR OpenFlow request RSpec will be completed in Step 3.

Step 3: Generate OpenFlow V3 RSpec

This section uses guidelines from the Writing OF V3 RSpec page to merge information from Step 2 and generate the complete BBN, Clemson, Wisconsin and NLR OpenFlow request RSpecs.

The following OpenFlow V3 RSpec template is used to start each RSpec:

<?xml version="1.1" encoding="UTF-8"?>
<rspec  xmlns="http://www.geni.net/resources/rspec/3"
        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:openflow="http://www.geni.net/resources/rspec/ext/openflow/3"
        xs:schemaLocation="http://www.geni.net/resources/rspec/3
              http://www.geni.net/resources/rspec/3/request.xsd
              http://www.geni.net/resources/rspec/ext/openflow/3
              http://www.geni.net/resources/rspec/ext/openflow/3/of-resv.xsd"
    type="request">
    
    <openflow:sliver email="user@geni.net" description="OF Experiment" ref="http://www.geni.net">
      <openflow:controller url="tcp:example.geni.net:9933" type="primary" />

        <!-- RSpec details from Step 2 here -->

    </openflow:sliver>
</rspec>

For the above template you must modify the following settings:

  • In the "openflow:sliver" line, replace the "user@geni.net" with your valid email address, and update the sliver description.
  • In the "openflow:controller" line, include your OpenFlow controller name and port information.

Note: You must run an OpenFlow Controller to manage your experiment. If you do not have an OpenFlow controller, see the following page for instructions on how-to Setup an OpenFlow Controller. Also, attached to this page is a capture of the OpenFlow Controller software installation, and runtime commands used to run the experiment in this page.

The modified OpenFlow V3 Rspec template is shown below with the setting changes specific to our experiment:

<?xml version="1.1" encoding="UTF-8"?>
<rspec  xmlns="http://www.geni.net/resources/rspec/3"
        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:openflow="http://www.geni.net/resources/rspec/ext/openflow/3"
        xs:schemaLocation="http://www.geni.net/resources/rspec/3
              http://www.geni.net/resources/rspec/3/request.xsd
              http://www.geni.net/resources/rspec/ext/openflow/3
              http://www.geni.net/resources/rspec/ext/openflow/3/of-resv.xsd"
    type="request">
    
    <openflow:sliver email="lnevers@geni.net" description="OF Experiment" ref="http://www.geni.net">
     <openflow:controller url="tcp:navis.gpolab.bbn.com:33017" type="primary" />

        <!-- RSpec details from Step 2 here -->

    </openflow:sliver>
</rspec>

Using the modified OpenFlow V3 RSpec template we generate the 3 site OpenFlow Rspecs by combining details from wiki:GENIExperimenter/ExperimentExample-OF-FOAM#Step2:DeterminesitespecificOpenFlowdetails Step 2] with the modified template. Following are the completed site OpenFlow RSpecs for the 3 sites in this experiment:

BBN OpenFlow RSpec

<?xml version="1.1" encoding="UTF-8"?>
<rspec  xmlns="http://www.geni.net/resources/rspec/3"
        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:openflow="http://www.geni.net/resources/rspec/ext/openflow/3"
        xs:schemaLocation="http://www.geni.net/resources/rspec/3
              http://www.geni.net/resources/rspec/3/request.xsd
              http://www.geni.net/resources/rspec/ext/openflow/3
              http://www.geni.net/resources/rspec/ext/openflow/3/of-resv.xsd"
    type="request">
  
<openflow:sliver email="lnevers@geni.net" description="OF Experiment" ref="http://www.geni.net">
   <openflow:controller url="tcp:navis.gpolab.bbn.com:33017" type="primary" />

   <openflow:group name="bbn-1750-nodes">
     <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.gpolab.bbn.com+datapath+06:d6:00:24:a8:c4:b9:00"     
                       component_manager_id="urn:publicid:IDN+openflow:foam:foam.gpolab.bbn.com+authority+am" 
                       dpid="06:d6:00:24:a8:c4:b9:00">
      <openflow:port name="32" num="56"/>
      <openflow:port name="47" num="71"/>
    </openflow:datapath>
  </openflow:group>

  <openflow:group name="bbn-1750-3715">
      <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.gpolab.bbn.com+datapath+06:d6:00:12:e2:b8:a5:d0" 
                        component_manager_id="urn:publicid:IDN+openflow:foam:foam.gpolab.bbn.com+authority+am" 
                        dpid="06:d6:00:12:e2:b8:a5:d0">
        <openflow:port num="3"/>
        <openflow:port num="20"/>
       </openflow:datapath>
  </openflow:group>

  <openflow:match>

      <openflow:use-group name="bbn-1750-nodes" />
      <openflow:use-group name="bbn-1750-3715" />

      <openflow:packet>
        <openflow:dl_type value="0x800,0x806"/>
        <openflow:nw_dst value="10.42.11.0/24"/>
        <openflow:nw_src value="10.42.11.0/24"/>
      </openflow:packet>

   </openflow:match>

 </openflow:sliver>
</rspec>

Clemson OpenFlow RSpec

<?xml version="1.1" encoding="UTF-8"?>
<rspec  xmlns="http://www.geni.net/resources/rspec/3"
        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:openflow="http://www.geni.net/resources/rspec/ext/openflow/3"
        xs:schemaLocation="http://www.geni.net/resources/rspec/3
              http://www.geni.net/resources/rspec/3/request.xsd
              http://www.geni.net/resources/rspec/ext/openflow/3
              http://www.geni.net/resources/rspec/ext/openflow/3/of-resv.xsd"
    type="request">
    
<openflow:sliver email="lnevers@geni.net" description="OF Experiment" ref="http://www.geni.net">
  <openflow:controller url="tcp:navis.gpolab.bbn.com:33017" type="primary" />

  <openflow:group name="clemson-1750-3715">
     <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam+datapath+06:d6:00:26:f1:3f:e4:80" 
                    component_manager_id="urn:publicid:IDN+openflow:foam:foam+authority+am" dpid="06:d6:00:26:f1:3f:e4:80">
        <openflow:port name="39" num="39"/>
        <openflow:port name="43" num="43"/>
      </openflow:datapath>
  </openflow:group>

  <openflow:match>
      <openflow:use-group name="clemson-1750-3715" />
      <openflow:packet>
        <openflow:dl_type value="0x800,0x806"/>
        <openflow:nw_dst value="10.42.11.0/24"/>
        <openflow:nw_src value="10.42.11.0/24"/>
      </openflow:packet>
    </openflow:match>

</openflow:sliver>
</rspec>

Wisconsin OpenFlow RSpec

<?xml version="1.1" encoding="UTF-8"?>
<rspec  xmlns="http://www.geni.net/resources/rspec/3"
        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:openflow="http://www.geni.net/resources/rspec/ext/openflow/3"
        xs:schemaLocation="http://www.geni.net/resources/rspec/3
              http://www.geni.net/resources/rspec/3/request.xsd
              http://www.geni.net/resources/rspec/ext/openflow/3
              http://www.geni.net/resources/rspec/ext/openflow/3/of-resv.xsd"
    type="request">
    
<openflow:sliver email="lnevers@geni.net" description="OF Experiment" ref="http://www.geni.net">
  <openflow:controller url="tcp:navis.gpolab.bbn.com:33017" type="primary" />

   <openflow:group name="wisconsin-nodes-1750">
      <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.wail.wisc.edu+datapath+0
6:d6:00:23:47:cc:44:00"
                         component_manager_id="urn:publicid:IDN+openflow:foam:foam.wail.wisc.edu+au
thority+am">
        <openflow:port num="1"/>
        <openflow:port num="22"/>
      </openflow:datapath>
   </openflow:group>

   <openflow:group name="wisconsin-1750-3715">
      <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.wail.wisc.edu+datapath+0
6:d6:00:21:f7:be:8d:00"
                         component_manager_id="urn:publicid:IDN+openflow:foam:foam.wail.wisc.edu+au
thority+am">
        <openflow:port num="3"/>
        <openflow:port num="51"/>
      </openflow:datapath>
   </openflow:group>

   <openflow:match>
      <openflow:use-group name="wisconsin-nodes-1750" />
      <openflow:use-group name="wisconsin-1750-3715" />
      <openflow:packet>
        <openflow:dl_type value="0x800,0x806"/>
        <openflow:nw_dst value="10.42.11.0/24"/>
        <openflow:nw_src value="10.42.11.0/24"/>
      </openflow:packet>
    </openflow:match>


</openflow:sliver>
</rspec>

NLR OpenFlow RSpec

<?xml version="1.1" encoding="UTF-8"?>
<rspec  xmlns="http://www.geni.net/resources/rspec/3"
        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:openflow="http://www.geni.net/resources/rspec/ext/openflow/3"
        xs:schemaLocation="http://www.geni.net/resources/rspec/3
              http://www.geni.net/resources/rspec/3/request.xsd
              http://www.geni.net/resources/rspec/ext/openflow/3
              http://www.geni.net/resources/rspec/ext/openflow/3/of-resv.xsd"
    type="request">
    
<openflow:sliver email="lnevers@geni.net" description="OF Experiment" ref="http://www.geni.net">
  <openflow:controller url="tcp:navis.gpolab.bbn.com:33017" type="primary" />

   <openflow:group name="nlr-3715">
     <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+datapath+0e:83:00:23:47:c8:bc:00" component_manager_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+authority+am" />
     <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+datapath+0e:83:00:23:47:ca:bc:40" component_manager_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+authority+am" />
     <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+datapath+0e:83:00:24:a8:d2:48:00" component_manager_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+authority+am" />
     <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+datapath+0e:83:00:24:a8:d2:b8:40" component_manager_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+authority+am" />
     <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+datapath+0e:83:00:26:f1:40:a8:00" component_manager_id="urn:publicid:IDN+openflow:foam:foam.nlr.net+authority+am" />
   </openflow:group>

   <openflow:match>
      <openflow:use-group name="nlr-3715" />
      <openflow:packet>
        <openflow:dl_type value="0x800,0x806"/>
        <openflow:nw_dst value="10.42.11.0/24"/>
        <openflow:nw_src value="10.42.11.0/24"/>
      </openflow:packet>
   </openflow:match>
</openflow:sliver>
</rspec>

Setup Experiment

Using the OpenFlow and compute resource RSpecs we defined above, we can now set up an experimennt with Omni. First, we create a slice using the GPO Clearinghouse credentials as defined in the Omni configuration. Note, you should choose a slice name that is meaningful to you. Then, we create a sliver for each resource aggregate. In this example there are 4 OpenFlow aggregates (one per site plus one for the GENI core) and 3 compute resource aggregates (3 MyPLC), which maps to creating 7 slivers. The following commands are executed to set up the experiment:

 $ cd gcf-1.6.1
 $ ./src/omni.py createslice 3sites-OF-Exp
 $ ./src/omni.py -a https://foam.gpolab.bbn.com:3626/foam/gapi/1 createsliver 3sites-OF-Exp openflow-bbn.rspec
 $ ./src/omni.py -a https://foam.clemson.edu:3626/foam/gapi/1 createsliver 3sites-OF-Exp openflow-clemson.rspec   
 $ ./src/omni.py -a https://foam.wail.wisc.edu:3626/foam/gapi/1 createsliver 3sites-OF-Exp openflow-wisconsin.rspec
 $ ./src/omni.py -a https://foam.nlr.net:3626/foam/gapi/1 createsliver 3sites-OF-Exp openflow-nlr.rspec
 $ ./src/omni.py -a http://myplc.gpolab.bbn.com:12346/ createsliver 3sites-OF-Exp myplc-bbn.rspec 
 $ ./src/omni.py -a http://myplc.clemson.edu:12346/ createsliver  3sites-OF-Exp  myplc-clemson.rspec
 $ ./src/omni.py -a https://wings-openflow-1.wail.wisc.edu:12346/ createsliver 3sites-OF-Exp myplc-wisc.rspec
                   

The output for running each of the above commands is attached here.

Remember, to renew the slice and slivers reservation time, as the default time is 8 hours. You may find out the current expiration time by using Omni sliverstatus commands. Following are the commands to determine the current sliverstatus along with the expiration times at each aggregate:

./src/omni.py -a https://foam.gpolab.bbn.com:3626/foam/gapi/1 sliverstatus 3sites-OF-Exp
./src/omni.py -a https://foam.clemson.edu:3626/foam/gapi/1 sliverstatus 3sites-OF-Exp
./src/omni.py -a https://foam.wail.wisc.edu:3626/foam/gapi/1 sliverstatus 3sites-OF-Exp
./src/omni.py -a https://foam.nlr.net:3626/foam/gapi/1 sliverstatus 3sites-OF-Exp
./src/omni.py -a http://myplc.clemson.edu:12346/ sliverstatus 3sites-OF-Exp
./src/omni.py -a https://wings-openflow-1.wail.wisc.edu:12346/  sliverstatus 3sites-OF-Exp
./src/omni.py -a http://myplc.gpolab.bbn.com:12346/ sliverstatus 3sites-OF-Exp

The output for running each of the above commands is attached here.

You can now renew the slice and slivers. Following are the commands to extend the reservation for the resources:

 $ ./src/omni.py renewslice  3sites-OF-Exp 2012-04-27
 $ ./src/omni.py -a https://foam.gpolab.bbn.com:3626/foam/gapi/1 renewsliver 3sites-OF-Exp 2012-04-27
 $ ./src/omni.py -a https://foam.clemson.edu:3626/foam/gapi/1 renewsliver 3sites-OF-Exp 2012-04-27
 $ ./src/omni.py -a https://foam.wail.wisc.edu:3626/foam/gapi/1 renewsliver 3sites-OF-Exp 2012-04-27
 $ ./src/omni.py -a https://foam.nlr.net:3626/foam/gapi/1 renewsliver 3sites-OF-Exp 2012-04-27
 $ ./src/omni.py -a http://myplc.clemson.edu:12346/ renewsliver 3sites-OF-Exp 2012-04-27
 $ ./src/omni.py -a https://wings-openflow-1.wail.wisc.edu:12346/  renewsliver 3sites-OF-Exp 2012-04-27
 $ ./src/omni.py -a http://myplc.gpolab.bbn.com:12346/ renewsliver 3sites-OF-Exp 2012-04-27

The output for running each of the above renew commands is attached here.

FOAM sliver approval

Each of the OpenFlow slivers must be approved by an administrator at each of the OpenFlow Aggregates. You do not need to take any action, an email notification will be sent for each of the FOAM aggregates that looks as follows:

No image "FOAM-sliver-approve.jpg" attached to GENIExperimenter/ExperimentExample-OF-FOAM

In the scenario captured in this page, there are 4 sliver approval notifications, one from each of the FOAM aggregates (BBN, Clemson, NLR and Wisconsin).

Run Experiment

Once your flowspace has been opted in, you should be able login to each of the MyPLC hosts and exchange traffic over the approved flows. Simply SSH into one of the hosts and ping any of the other hosts to verify connectivity. If you have connectivity between the allocated hosts, you may start your experiment, if you do not have connectivity, contact help@geni.net.

Login to a MyPLC host

To figure out how to login to the MyPLC hosts that you reserved use the Omni sliverstatus commands. Following are examples for the experiment captured in this page:

 $ ./src/omni.py -a http://myplc.clemson.edu:12346/ sliverstatus 3sites-OF-Exp
 $ ./src/omni.py -a http://myplc.gpolab.bbn.com:12346/ sliverstatus 3sites-OF-Exp 
 $ ./src/omni.py -a https://wings-openflow-1.wail.wisc.edu:12346/ sliverstatus 3sites-OF-Exp

The output for running each of the above sliverstatus commands is attached here.

From the output of the sliverstatus commands, we use the pl_login and the pl_hostname to ssh into the MyPLC hosts. Following is a summary for the sites in this experiment:

MyPLC Site Login (pl_login) MyPLC Host (pl_hostname) Command to connect
BBN pgenigpolabbbncom_3sitesOFExp navis.gpolab.bbn.com ssh pgenigpolabbbncom_3sitesOFExp@navis.gpolab.bbn.com
Clemson pgenigpolabbbncom_3sitesOFExp planetlab4.clemson.edu ssh pgenigpolabbbncom_3sitesOFExp@planetlab4.clemson.edu
Wisconsin pgenigpolabbbncom_3sitesOFExp wings-openflow-2.wail.wisc.edu ssh pgenigpolabbbncom_3sitesOFExp@wings-openflow-2.wail.wisc.edu

Login to each of the 3 hosts to determine the host address for the network 10.42.11.0/24, which is the network reserved and configured for the OpenFlow groups. Here is an example for the node navis:

$ ssh pgenigpolabbbncom_3sitesOFExp@navis.gpolab.bbn.com
Last login: Fri Apr 20 15:22:13 2012 from sendaria.gpolab.bbn.com
[pgenigpolabbbncom_3sitesOFExp@navis ~]$ /sbin/ifconfig |egrep "10.42.11\." -A 1 -B 1
eth1.1750:42011 Link encap:Ethernet  HWaddr 00:1B:21:5A:E6:A9  
          inet addr:10.42.11.55  Bcast:10.42.11.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

You should verify connectivity between the MyPLC hosts before running your experiment. The following example show connectivity from BBN host navis to Clemson host planetlab4:

[pgenigpolabbbncom_3sitesOFExp@navis ~]$ ping 10.42.11.104 -c 3
PING 10.42.11.104 (10.42.11.104) 56(84) bytes of data.
64 bytes from 10.42.11.104: icmp_seq=1 ttl=64 time=59.3 ms
64 bytes from 10.42.11.104: icmp_seq=2 ttl=64 time=59.3 ms
64 bytes from 10.42.11.104: icmp_seq=3 ttl=64 time=59.3 ms

--- 10.42.11.104 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2006ms
rtt min/avg/max/mdev = 59.327/59.337/59.354/0.199 ms
[pgenigpolabbbncom_3sitesOFExp@navis ~]$ 

You can now run an experiment!

Release Resources

When the experiment is completed, you should release the resources by deleting the sliver for each of the resource aggregates in the Experiment. In the example experiment in this page, the following commands should be issued to release resources:

./src/omni.py -a https://foam.gpolab.bbn.com:3626/foam/gapi/1 deletesliver 3sites-OF-Exp
./src/omni.py -a https://foam.noc.iu.edu:3626/foam/gapi/1 deletesliver 3sites-OF-Exp
./src/omni.py -a https://foam.wail.wisc.edu:3626/foam/gapi/1 deletesliver 3sites-OF-Exp
./src/omni.py -a https://foam.nlr.net:3626/foam/gapi/1 deletesliver 3sites-OF-Exp
./src/omni.py -a http://myplc.clemson.edu:12346/ deletesliver  3sites-OF-Exp  
./src/omni.py -a https://wings-openflow-1.wail.wisc.edu:12346/ deletesliver 3sites-OF-Exp 
./src/omni.py -a http://myplc.gpolab.bbn.com:12346/ deletesliver 3sites-OF-Exp 


Email us with any questions and feedback on this page!