Changes between Version 11 and Version 12 of GENIExperimenter/ExperimentExample-OF


Ignore:
Timestamp:
04/27/12 14:54:36 (8 years ago)
Author:
lnevers@bbn.com
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • GENIExperimenter/ExperimentExample-OF

    v11 v12  
    1 [[PageOutline]]
     1[[PageOutline(1-2)]]
    22
    33= GENI !OpenFlow Experiment Example 2 =
    44
    5 This page illustrates an operational !OpenFlow (OF) example for the [wiki:HowToUseOmni Omni How-to] page. [http://www.openflow.org/ OpenFlow] is used for control of many of the network resources in the GENI backbone and at meso-scale campus locations.  Many experimenters can use these GENI resources without learning !OpenFlow.  The GENI [mailto:help@geni.net] can help arrange connectivity across your GENI slice, including IP connectivity and/or layer 2 VLANs.
    6 
    7 For experimenters who desire control over the network switching fabric in their slices, !OpenFlow provides increased flexibility.  Your experiment will incorporate an !OpenFlow controller.  If you have never written a controller, don't panic.  Many experiments can use existing controller code as-is, or with relatively simple modifications.  The GPO is available to help design your controller and plan your experiment configuration.  Feel free to contact us at [mailto:help@geni.net].
    8 
    9 The example captured in this page uses credentials from pgeni.gpolab.bbn.com, the GPO ProtoGENI Clearinghouse, to set up an experiment that includes 3 fictional sites (1 PG and 2 MyPLC nodes). This example assumes that an !OpenFlow Controller, such as NOX, is running on a slice resource, and is available and is accessible to the !FlowVisor instances. In this scenario, two sites are Web Servers and 3 are clients, as shown in the diagram below:
    10 
    11 [[Image(OF-Experiment-example.jpg)]]
    12 
    13 Omni tools can be used to reserve OF resources in each of the site's !OpenFlow Aggregate Manager (OF AM). Steps that are to take place include:
    14     * Configure Omni tools
    15     * Define !OpenFlow RSPEC
    16     * Request flowspace resources
    17     * Opt-in Manager Administrative approval
    18     * Run the experiment
    19 
    20 Note: Open Flow Aggregate Manager sites must be federated in order to trust a Clearinghouse. This is an OF administrator task that must take place before any of the user OF operations can take place.
    21 
    22 == Authentication and Omni tools configuration ==
     5This page illustrates an !OpenFlow (OF) example for the [wiki:HowToUseOmni 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 [mailto:help@geni.net].
     6
     7The experiment in this page uses Omni V1.6.1 and 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 [http://groups.geni.net/geni/wiki/HelloGENI HelloGENI] experiment page for an !OpenFlow experiment using PG nodes.
     8
     9[[Image(OF-FOAM-experiment.jpg)]]
     10
     11Omni 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:
     12    1. [wiki:GENIExperimenter/ExperimentExample-OF#a1.AuthenticationandOmnitoolsconfiguration Authentication and Omni tools configuration]
     13    2. [wiki:GENIExperimenter/ExperimentExample-OF#a2.ReserveGENIIPsubnet Reserve IP Subnet]
     14    3. [wiki:GENIExperimenter/ExperimentExample-OF#a3.DetermineResourcesAvailability Determine Resources Availability]
     15    4. [wiki:GENIExperimenter/ExperimentExample-OF#a4.DefineComputeResourcesRSpecs Define Compute Resources RSpecs]
     16    5. [wiki:GENIExperimenter/ExperimentExample-OF#a5.DefineOpenFlowNetworkResourcesRSpecs Define OpenFlow Network Resources RSpecs]
     17    6. [wiki:GENIExperimenter/ExperimentExample-OF#a6.SetupExperiment Setup Experiment]
     18    7. [wiki:GENIExperimenter/ExperimentExample-OF#a7.RunExperiment Run Experiment]
     19    8. [wiki:GENIExperimenter/ExperimentExample-OF#a8.ReleaseResources Release Resources]
     20
     21The IP Subnet reservation is required for this example experiment because MyPLC resources are used.  Also, 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.
     22
     23== 1. Authentication and Omni tools configuration ==
    2324
    2425This example assumes that GENI credentials have been set up as detailed in the [wiki:HowToUseOmni#a1.GetGENICredentials GENI Credentials] section of the [wiki:HowToUseOmni Omni how-to] page.
    2526
    26 The settings as defined in the [wiki:GENIExperimenter/ExperimentExample#OmniConfiguration Omni Configuration] section of the non-OF Omni how-to example will work for this OF setup.  The credentials from the GPO Clearinghouse will allow access to the GPO OF aggregate manager.  A list of Aggregate managers is being compiled in the [http://groups.geni.net/geni/wiki/GeniAggregate GENI Aggregate] page, if your site is not listed on this page you should contact your site administrator, or help@geni.net.
    27 
    28 == Determine Resources ==
    29 
    30 An !OpenFlow RSPEC must be defined for each of the 3 site OF AM in order to get access to the OF resources.  The content of the OF RSPEC depends on the type OF AM resource that you may need.  You may need to define an RSPEC using any of the following:
    31   * IP Addresses
    32   * MAC Address
    33   * Data Path Identifier (DPID).
    34 
    35 To find out what OF resources are available from each of the OF Aggregate Manager, you may use Omni tools to get a list of available resources. For a list of available aggregates see the [wiki:GeniAggregate GENI Aggregates] page. Here is an example of listing resources advertised by the OF Aggregate Manager for Site 1 in native RSPEC format.
    36 
    37 NOTE: This example uses Omni V1.3 and later syntax (native is the default, and the {{{-o}}} option allows you to save the output to a file). For earlier versions of omni, you should (a) include the {{{-n}}} argument, (b) re-direct output to a file (''>'') instead of the -o option, and (c) use PG V0.2 RSpecs at Emulab and SFA format RSpecs at PlanetLab.
    38 
    39 {{{
    40 $ ./src/omni.py -a https://ofam1.site1.com:1443/openflow/gapi/ -o listresources
    41 INFO:omni:Loading config file omni_config
    42 INFO:omni:Using control framework pgeni
    43 INFO:omni:Saving output to a file.
    44 INFO:omni:Listed resources on 1 out of 1 possible aggregates.
    45 INFO:omni:Writing to 'rspec-ofam1-site1-com-1443.xml'
    46 INFO:omni: ------------------------------------------------------------
    47 INFO:omni: Completed listresources:
    48 
    49   Options as run:
    50                 aggregate: https://ofam1.site1.com:1443/openflow/gapi/
    51                 configfile: omni_config
    52                 framework: pgeni
    53                 native: True
    54                 output: True
    55 
    56   Args: listresources
    57 
    58   Result Summary: Retrieved resources from 1 aggregates.
    59 Wrote rspecs from 1 aggregates to 1 files.
    60 INFO:omni: ============================================================
    61 }}}
    62 
    63 The resulting Advertisement RSpec looks like this:
     27The 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:
     28{{{
     29[omni]
     30default_cf = pgeni
     31users = lnevers
     32
     33# ---------- Users ----------
     34[lnevers]
     35urn = urn:publicid:IDN+pgeni.gpolab.bbn.com+user+lnevers
     36keys = ~/.ssh/id_rsa.pub
     37
     38# ---------- Frameworks ----------
     39[pgeni]
     40type = pg
     41ch = https://www.emulab.net:443/protogeni/xmlrpc/ch
     42sa = https://www.pgeni.gpolab.bbn.com:443/protogeni/xmlrpc/sa
     43cert = ~/.ssl/pgeni/encrypted-cleartext.pem
     44key = ~/.ssl/pgeni/encrypted-cleartext.pem
     45verbose=false
     46
     47[pg]
     48type=pg
     49ch = https://www.emulab.net:443/protogeni/xmlrpc/ch
     50sa = https://www.emulab.net:443/protogeni/xmlrpc/sa
     51cert = ~/.ssl/protogeni/encrypted-cleartext.pem
     52key = ~/.ssl/protogeni/encrypted-cleartext.pem
     53
     54[aggregate_nicknames]
     55plc-bbn=,http://myplc.gpolab.bbn.com:12346/
     56plc-clemson=,http://myplc.clemson.edu:12346/
     57plc-wisconsin=,https://wings-openflow-1.wail.wisc.edu:12346/
     58of-bbn=,https://foam.gpolab.bbn.com:3626/foam/gapi/1
     59of-clemson=,https://foam.clemson.edu:3626/foam/gapi/1
     60of-wisconsin=,https://foam.wail.wisc.edu:3626/foam/gapi/1
     61of-nlr=,https://foam.nlr.net:3626/foam/gapi/1
     62}}}
     63
     64''Note:'' You can use the ''aggregate_nicknames'' defined above to specify an aggregate for Omni. The Omni command argument '' "-a !http://myplc.gpolab.bbn.com:12346/" '' can be replaced by '' "-a plc-bbn" '' in any Omni command used below.
     65
     66A complete list of Aggregate managers is compiled in the [http://groups.geni.net/geni/wiki/GeniAggregate GENI Aggregate] page, if your site is not listed on this page you should contact your site administrator, or help@geni.net.
     67
     68== 2. Reserve GENI IP subnet ==
     69
     70In 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 [mailto: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 [http://groups.geni.net/geni/wiki/NetworkCore/SubnetReservations GENI Network Core Subnet] page. You do not need to request a specific address, one will be chosen for you.
     71
     72
     73== 3. Determine Resources Availability ==
     74
     75Each 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).
     76To 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:
     77
     78||'''Site'''|| '''MyPLC Aggregate URL'''                    || '''MyPLC Aggregate Nickname''' || ''' FOAM Aggregate URL '''                          ||''' FOAM Aggregate Nickname '''  ||
     79||    BBN   || !http://myplc.gpolab.bbn.com:12346/          || plc-bbn                        || !https://foam.gpolab.bbn.com:3626/foam/gapi/1       || of-bbn                          ||
     80|| Clemson  || !http://myplc.clemson.edu:12346/             || plc-clemson                    || !https://foam.clemson.edu:3626/foam/gapi/1          || of-clemson                      ||
     81|| NLR      ||                                              ||                                || !https://foam.nlr.net:3626/foam/gapi/1              || of-nlr                          ||
     82||Wisconsin ||!https://wings-openflow-1.wail.wisc.edu:12346/|| plc-wisconsin                  || !https://foam.wail.wisc.edu:3626/foam/gapi/1        || of-wisconsin                    ||
     83
     84
     85The experiment captured in this page uses the BBN, Clemson, Wisconsin and NLR aggregates.  For a complete list of available GENI aggregates see the  [http://groups.geni.net/geni/wiki/GeniAggregate GENI Aggregates] page.  Also, this experiment uses ''aggregate_nicknames'' defined in the omni_config to replace the aggregate URLs used by the Omni commands.
     86
     87== 4. Define Compute Resources RSpecs ==
     88
     89To write a MyPLC RSpec you must determine which nodes will be used for the experiment at each site. This section describes this process, which is comprised of the following steps: 
     90
     91 Step 1. Collect listresources from all MyPLC Aggregates. [[BR]]
     92 Step 2. Determine the MyPLC host to be reserved. [[BR]]
     93 Step 3. Generate the MyPLC Rspecs. [[BR]]
     94
     95=== Step 1. Collect listresources from all MyPLC Aggregates ===
     96
     97As 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:
     98
     99{{{
     100 $ ./src/omni.py -a plc-bbn listresources -t ProtoGENI 2 -o             # generates rspec-myplc-gpolab-bbn-com-12346-.xml
     101 $ ./src/omni.py -a plc-clemson listresources -t ProtoGENI 2 -o               # generates rspec-myplc-clemson-edu-12346-.xml
     102 $ ./src/omni.py -a plc-wisconsin listresources -t ProtoGENI 2 -o  # generates rspec-wings-openflow-1-wail-wisc-edu-12346-.xml
     103}}}
     104
     105The Omni commands above used the following options: [[BR]]
     106''-t'' to request the advertisement in V2 RSpec format, the default MyPLc advertisement is in SFA format. [[BR]]
     107''-o'' argument to get the listresources output into advertisement RSpec files, which are all attached to this page as a reference.  [[BR]]
     108
     109=== Step 2. Determine the MyPLC hosts to be reserved ===
     110
     111From each site's advertisement RSpecs generated above, we choose one host to use in the experiment. Detailed instructions for defining a MyPLC V2 RSpec are available [http://groups.geni.net/geni/wiki/GEC12OmniTutorial/Tutorial#CreatingPlanetLabRequestRSpecsfromAdvertisementRSpecs here].   This sections shows the MyPLC node details for each site:
     112
     113==== BBN MyPLC Host ====
     114At the BBN MyPLC, we choose the host ''navis'':
     115{{{
     116   <node component_id="urn:publicid:IDN+plc:gpolab:gpolab+node+navis.gpolab.bbn.com"
     117        component_manager_id="urn:publicid:IDN+plc:gpolab+authority+am"
     118        component_name="navis.gpolab.bbn.com" client_id="navis" exclusive="false">
     119        <sliver_type name="plab-vnode">
     120        </sliver_type>
     121    </node>
     122}}}
     123
     124==== Clemson MyPLC Host ====
     125At the Clemson MyPLC, we choose the host ''planetlab4'':
     126{{{
     127    <node component_id="urn:publicid:IDN+plc:cu+node+planetlab4.clemson.edu"
     128        component_manager_id="urn:publicid:IDN+plc+authority+am"
     129        component_name="planetlab4.clemson.edu" client_id="planetlab4" exclusive="false">
     130        <sliver_type name="plab-vnode">
     131        </sliver_type>
     132    </node>
     133}}}
     134
     135==== Wisconsin MyPLC Host ====
     136At the Wisconsin MyPLC, we choose the host ''wings-openflow-1'':
     137{{{
     138    <node component_id="urn:publicid:IDN+plc:wisc+node+wings-openflow-1.wail.wisc.edu"
     139        component_manager_id="urn:publicid:IDN+plc+authority+am"
     140        component_name="wings-openflow-1.wail.wisc.edu" client_id="wings-of1" exclusive="false">
     141        <sliver_type name="plab-vnode">
     142        </sliver_type>
     143    </node>
     144
     145}}}
     146
     147=== Step 3. Generate the MyPLCs RSpecs ===
     148
     149To generate the MyPLC RSpec, we combine the request V2 RSpec template below with the node details in step 2.  Here is the RSpec V2 template:
    64150{{{
    65151#!xml
     
    67153<!-- Resources at AM:
    68154        URN: unspecified_AM_URN
    69         URL: https://ofam1.site1.com:1443/openflow/gapi/
     155        URL: http://myplc.gpolab.bbn.com:12346/
    70156 -->
    71 
    72 <rspec type="openflow">
    73   <network location="Somewhere USA " name="local-oim ">
    74     <switches>
    75       <switch urn="urn:publicid:IDN+ofam1.site1.com:expedient:openflow+switch
    76 :06:bb:00:24:88:cc:bb:00">
    77         <port urn="urn:publicid:IDN+ofam1.site1.com:expedient:openflow+switch:044:d0:02:6f:13:f3:b0:0+port:26"/>
    78       </switch>
    79     </switches>
    80     <links/>
    81   </network>
    82 </rspec>
    83 }}}
    84 
    85 
    86 The above provides the switch and the port URN information to be used in making the OF flowspace reservation.  The above results will give you some insight into what is available, but it is recommended that you coordinate with the site contact to ensure RSpec accuracy for each of the OF Aggregate Managers. 
    87 
    88 == Request Resources ==
    89 
    90 The OF RSpecs are used to request resources at each site's !OpenFlow Aggregate Manager.  This will result in your resource request being imported into the Opt-In manager, where an Administrator must approve your request for resources. Currently requesting OF resources for the sites in the experiment does not require OF setup for the Network Core path; the default handling will allow OF traffic.  This is expected to change.
    91 
    92 
    93 The OF RSpec defines a flowspace for each OF rule for your traffic sliver.  Following are example OF RSpecs that could be used to reserve the flowspaces needed for each of the generic 3 node scenario in this page. The scenario uses 3 OF Aggregate Managers (one per site) and one OF Controller at Site 1 for all sites.  The example RSpecs are for each of the 3 OF AM and assume that the flowspace is based on traffic type and port (TCP port 9080 and 9082).
    94 
    95 '''RSpec Example for Site 1 !OpenFlow Aggregate Manager'''
    96 {{{
    97 #!xml
    98 <resv_rspec type="openflow">
    99   <user affiliation="GPO" email="help@geni.net" firstname="GPO" lastname="Ops" password="xxxxxxx"/>
    100   <project description="Project description" name=" Project name"/>
    101   <slice controller_url="tcp:controller.site1.com:9933" description="description" name="name"/>
    102 <flowspace>
    103     <switch urn="urn:publicid:IDN+ofam1.site1.com:expedient:openflow+switch:044:d0:02:6f:13:f3:b0:0"/>
    104     <tp_dst from="9080" to="9082"/>
    105   </flowspace>
    106   <flowspace>
    107     <switch urn="urn:publicid:IDN+ofam1.site1.com:expedient:openflow+switch:044:d0:02:6f:13:f3:b0:0"/>
    108     <tp_src from="9080" to="9082"/>
    109   </flowspace>
    110 </resv_rspec>
    111 }}}
    112 
    113 '''RSpec Example for Site 2 !OpenFlow Aggregate Manager'''
    114 {{{
    115 #!xml
    116 <resv_rspec type="openflow">
    117   <user affiliation="GPO" email="help@geni.net" firstname="GPO" lastname="Ops" password="xxxxxxx"/>
    118   <project description="Project description" name=" Project name"/>
    119   <slice controller_url="tcp:controller.site1.com:9933" description="description" name="name"/>
    120 <flowspace>
    121     <switch urn="urn:publicid:IDN+ofam2.site2.com:expedient:openflow+switch:00:00:00:13:65:f4:21:4f"/>
    122     <tp_dst from="9080" to="9082"/>
    123   </flowspace>
    124   <flowspace>
    125     <switch urn="urn:publicid:IDN+ofam2.site2.com:expedient:openflow+switch:00:00:00:13:65:f4:21:4f"/>
    126     <tp_src from="9080" to="9082"/>
    127   </flowspace>
    128 </resv_rspec>
    129 }}}
    130 
    131 '''RSpec Example for Site 3 !OpenFlow Aggregate Manager'''
    132 {{{
    133 #!xml
    134 <resv_rspec type="openflow">
    135   <user affiliation="GPO" email="help@geni.net" firstname="GPO" lastname="Ops" password="xxxxxxx"/>
    136   <project description="Project description" name=" Project name"/>
    137   <slice controller_url="tcp:controller.site1.com:9933" description="description" name="name"/>
    138 <flowspace>
    139     <switch urn="urn:publicid:IDN+ofam3.site3.com:expedient:openflow+switch:00:00:00:21:6f:b8:f3:d0"/>
    140     <tp_dst from="9080" to="9082"/>
    141   </flowspace>
    142   <flowspace>
    143     <switch urn="urn:publicid:IDN+ofam3.site3.com:expedient:openflow+switch:00:00:00:21:6f:b8:f3:d0"/>
    144     <tp_src from="9080" to="9082"/>
    145   </flowspace>
    146 </resv_rspec>
    147 }}}
    148 
    149 
    150 '''Create Slice and Request Resources'''
    151 
    152 Using the RSpec that defines the required OF flowspace, you can now request OF resources with Omni. First create a slice using your GPO Clearinghouse credentials as defined in the omni_config. Note that the slice name should be meaningful to you:
    153 {{{
    154 $ ./src/omni.py createslice ln_OF_slice
    155 INFO:omni:Loading config file omni_config
    156 INFO:omni:Using control framework pgeni
    157 INFO:omni:Created slice with Name ln_OF_slice, URN urn:publicid:IDN+pgeni.gpolab.bbn.com+slice+ln_OF_slice, Expiration 2011-06-16 19:46:49
    158 INFO:omni: ------------------------------------------------------------
    159 INFO:omni: Completed createslice:
    160 
    161   Options as run:
    162                 configfile: omni_config
    163                 framework: pgeni
    164                 native: True
    165 
    166   Args: createslice ln_OF_slice
    167 
    168   Result Summary: Created slice with Name ln_OF_slice, URN urn:publicid:IDN+pgeni.gpolab.bbn.com+slice+ln_OF_slice, Expiration 2011-06-16 19:46:49
     157<rspec type="request" xmlns="http://www.protogeni.net/resources/rspec/2"
     158        xmlns:flack="http://www.protogeni.net/resources/rspec/ext/flack/1"
     159        xmlns:planetlab="http://www.planet-lab.org/resources/sfa/ext/planetlab/1"
     160        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     161        xsi:schemaLocation="http://www.protogeni.net/resources/rspec/2
     162        http://www.protogeni.net/resources/rspec/2/request.xsd"> 
     163
     164        <!-- Insert MyPLC node details here -->
     165   
     166</rspec>
     167}}}
     168
     169Following are the complete MyPLC RSpecs for each site:
     170
     171'''BBN MyPLC Compute Resource RSpec '''
     172{{{
     173#!xml
     174<?xml version="1.0" ?>
     175<!-- Resources at AM:
     176        URN: unspecified_AM_URN
     177        URL: http://myplc.gpolab.bbn.com:12346/
     178 -->
     179<rspec type="request" xmlns="http://www.protogeni.net/resources/rspec/2"
     180        xmlns:flack="http://www.protogeni.net/resources/rspec/ext/flack/1"
     181        xmlns:planetlab="http://www.planet-lab.org/resources/sfa/ext/planetlab/1"
     182        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     183        xsi:schemaLocation="http://www.protogeni.net/resources/rspec/2
     184        http://www.protogeni.net/resources/rspec/2/request.xsd"> 
     185   <node component_id="urn:publicid:IDN+plc:gpolab:gpolab+node+navis.gpolab.bbn.com"
     186        component_manager_id="urn:publicid:IDN+plc:gpolab+authority+am"
     187        component_name="navis.gpolab.bbn.com" client_id="navis" exclusive="false">
     188        <sliver_type name="plab-vnode">
     189        </sliver_type>
     190    </node>   
     191</rspec>
     192}}}
     193
     194''' Clemson MyPLC Compute Resources RSpec'''
     195{{{
     196#!xml
     197<?xml version="1.0" ?>
     198<!-- Resources at AM:
     199        URN: unspecified_AM_URN
     200        URL: http://myplc.gpolab.bbn.com:12346/
     201 -->
     202<rspec type="request" xmlns="http://www.protogeni.net/resources/rspec/2"
     203        xmlns:flack="http://www.protogeni.net/resources/rspec/ext/flack/1"
     204        xmlns:planetlab="http://www.planet-lab.org/resources/sfa/ext/planetlab/1"
     205        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     206        xsi:schemaLocation="http://www.protogeni.net/resources/rspec/2
     207        http://www.protogeni.net/resources/rspec/2/request.xsd"> 
     208    <node component_id="urn:publicid:IDN+plc:cu+node+planetlab4.clemson.edu"
     209        component_manager_id="urn:publicid:IDN+plc+authority+am"
     210        component_name="planetlab4.clemson.edu" client_id="planetlab4" exclusive="false">
     211        <sliver_type name="plab-vnode">
     212        </sliver_type>
     213    </node>   
     214</rspec>
     215}}}
     216
     217
     218'''Wisconsin MyPLC Compute Resources RSpec'''
     219{{{
     220#!xml
     221<?xml version="1.0" ?>
     222<!-- Resources at AM:
     223        URN: unspecified_AM_URN
     224        URL: http://myplc.gpolab.bbn.com:12346/
     225 -->
     226<rspec type="request" xmlns="http://www.protogeni.net/resources/rspec/2"
     227        xmlns:flack="http://www.protogeni.net/resources/rspec/ext/flack/1"
     228        xmlns:planetlab="http://www.planet-lab.org/resources/sfa/ext/planetlab/1"
     229        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     230        xsi:schemaLocation="http://www.protogeni.net/resources/rspec/2
     231        http://www.protogeni.net/resources/rspec/2/request.xsd"> 
     232    <node component_id="urn:publicid:IDN+plc:wisc+node+wings-openflow-1.wail.wisc.edu"
     233        component_manager_id="urn:publicid:IDN+plc+authority+am"
     234        component_name="wings-openflow-1.wail.wisc.edu" client_id="wings-of1" exclusive="false">
     235        <sliver_type name="plab-vnode">
     236        </sliver_type>
     237    </node>
     238</rspec>
     239}}}
     240
     241The 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 [wiki:GENIExperimenter/ExperimentExample-OF#ReserveGENIIPsubnet above].
    169242 
    170 INFO:omni: ============================================================
    171 }}}
    172 
    173 Then create a sliver for each resource aggregate.  In this example there are 3 OF aggregates (one per site) and 3 compute resource aggregates (1 PG & 2 MyPLC), which maps to creating 6 slivers, and the following commands are executed:
    174 {{{
    175  $ ./src/omni.py -a https://ofam1.site1.com:1443/openflow/gapi/ -o createsliver ln_OF_slice OF-site1.txt.rspec
    176  $ ./src/omni.py -a https://ofam2.site2.com:1443/openflow/gapi/ -o createsliver ln_OF_slice OF-site2.rspec
    177  $ ./src/omni.py -a https://ofam3.site3.com:1443/openflow/gapi/ -o createsliver ln_OF_slice OF-site3.rspec
    178  $ ./src/omni.py -a https://www.emulab.net/protogeni/xmlrpc/am -o createsliver ln_OF_slice emulab-site2.rspec
    179  $ ./src/omni.py -a http://myplc.site1.com:12346 -o createsliver ln_OF_slice myplc-site1.rspec
    180  $ ./src/omni.py -a http://myplc.site3.com:12346 -o createsliver ln_OF_slice myplc-site3.rspec
    181 }}}
    182 
    183 ^^ Note: Examples that detailed rspec creation examples for the PG and MyPLC resource aggregates can be found in the other non-OF [wiki:GENIExperimenter/ExperimentExample experiment] example. ^^
    184 
    185 == Opt-in Manager Administrative Approval ==
    186 
    187 The OF Aggregate Administrator has to allow traffic from various nodes to be routed as decided by your !OpenFlow controller. In this case, you are asking the administrator to route traffic on the PG and PL nodes you have just reserved. So you will need to give the site OF Aggregate Administrator:
    188   - your name
    189   - slice name and clearinghouse
    190   - PI name
    191   - duration of your experiment
    192   - IP address and names of the nodes whose traffic you need opted in (see the result of {{{listresources}}} and/or {{{sliverstatus}}})
    193   - your flowspace request in plain text - what were you looking for
    194 
    195 The OF Aggregate Administrator that opts-in your flows is responsible for resolving any conflicts between the traffic flows that you are requesting and the traffic flows requested by other experiments. If your flows are too generic (ex. all port 80 traffic) then they may overlap with other experiments; the administrator will have control over whether the conflict is resolved in your favor or someone else's.
    196 
    197 Once the OF Aggregate  Administrator has opted-in your traffic, you may start using the OF resources.
    198 
    199 == Run Experiment ==
    200 
    201 Once your flowspace has been opted in you should be able to exchange traffic over the approved flows between the hosts that have been allocated to your experiment.  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 [mailto:help@geni.net].
    202 
    203 Remember to check the expiration time for the flowspace and for each aggregate with the Omni ''sliverstatus'' and to ''renewslice'' and ''renewsliver'' to expand the duration of the resource allocation to match your experiment needs.  For an example on how to check ''sliverstatus'' and ''renewslice'' see the [wiki:GENIExperimenter/ExperimentExample#Checkingsliverresourcestatus checking status] section of the other non-OF experiment.
    204 
    205 == Release Resources ==
    206 
    207 When the experiment is completed you should release the resources by deleting the sliver for each of the Resource Aggregates used in the Experiment. In the example experiment used in this page, the following commands should be issued to release resources:
    208 {{{
    209  $ ./src/omni.py -a https://ofam1.site1.com:1443/openflow/gapi/ deletesliver ln_OF_slice
    210  $ ./src/omni.py -a https://ofam2.site2.com:1443/openflow/gapi/ deletesliver ln_OF_slice
    211  $ ./src/omni.py -a https://ofam3.site3.com:1443/openflow/gapi/ deletesliver ln_OF_slice
    212  $ ./src/omni.py -a https://www.emulab.net/protogeni/xmlrpc/am deletesliver ln_OF_slice
    213  $ ./src/omni.py -a http://myplc.site1.com:12346 deletesliver ln_OF_slice
    214  $ ./src/omni.py -a http://myplc.site3.com:12346 deletesliver ln_OF_slice
    215 }}}
     243
     244== 5. Define OpenFlow Network Resources RSpecs ==
     245
     246To write an !OpenFlow RSpec you must determine the end-to-end path that will be used for the experiment. This section describes this process, which is comprised of the following steps:
     247
     248 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. [[BR]]
     249 Step 2. Review [http://groups.geni.net/geni/wiki/GeniAggregate GeniAggregate] to determine how each experiment MyPLC host maps to the site's !OpenFlow switch. Determine addresses and ports, and define site specific !OpenFlow Group rules.  [[BR]]
     250 Step 3. Using guidelines from the [http://groups.geni.net/geni/wiki/HowTo/WriteOFv3Rspecs#WritingOpenFlowv3requestrspecs Writing OF V3 RSpec] page merge the information from Step 2 to generate the request RSpecs.  [[BR]]
     251
     252Each of the above steps is covered in detail below:
     253
     254
     255=== Step 1: Collect listresources from all FOAM Aggregate ===
     256
     257 1. Clemson FOAM aggregate:
     258{{{
     259 $ ./src/omni.py -a of-clemson listresources -o    # generates output file rspec-foam-clemson-edu-3626-foam-gapi-1.xml
     260}}}
     261 2. Wisconsin FOAM aggregate:
     262{{{
     263 $ ./src/omni.py -a of-wisconsin listresources -o  # generates rspec-foam-wail-wisc-edu-3626-foam-gapi-1.xml
     264}}}
     265 3. BBN FOAM aggregate:
     266{{{
     267 $ ./src/omni.py -a of-bbn listresources -o # generates rspec-foam-gpolab-bbn-com-3626-foam-gapi-1.xml
     268}}}
     269 4. NLR !OpenFlow Core FOAM aggregate:
     270{{{
     271 $ ./src/omni.py -a of-nlr listresources -o        # generates rspec-foam-nlr-net-3626-foam-gapi-1.xml
     272}}}
     273
     274The 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. 
     275
     276
     277=== Step 2: Determine site specific !OpenFlow details ===
     278
     279This 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 [http://groups.geni.net/geni/wiki/GeniAggregate 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, which you will have to include in the RSpec.  In addition you also have to define how the host traffic will be handled by !OpenFlow  by defining packet filters.
     280 
     281Now, 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.
     282
     283==== BBN !OpenFlow Aggregate ====
     284
     285To 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 !OpenFlow VLAN 3715.   All this information can be found in the [http://groups.geni.net/geni/wiki/GeniAggregate/GpoLabOpenFlow BBN OF Aggregate] diagram, which is shown below with the relevant BBN !OpenFlow request RSpec details highlighted:
     286
     287[[Image(BBNOFAggregateResources.jpg)]]
     288
     289The BBN !OpenFlow Aggregate image above shows the information required for the !OpenFlow RSpec:
     290   * Host ''navis.bbn.com'' is connected to port name 32 of the !OpenFlow switch named ''habanero''
     291   * !OpenFlow switch ''habanero'' has a DPID of ''06:d6:00:24:a8:c4:b9:00'' for VLAN 1750.
     292   * !OpenFlow switch ''habanero'' uses port name 47 to connect to port name 20 on the !OpenFlow switch ''poblano''.
     293   * !OpenFlow switch ''poblano'' has a DPID of ''06:d6:00:12:e2:b8:a5:d0'' for VLAN 1750.
     294   * VLAN 1750 is mapped to the Core VLAN 3715 on ''poblano'' port name 3.
     295
     296The BBN ''habanero'' !OpenFlow switch diagram states that you must add 24 to the port name to determine the port number to use in the RSpec. You do not need to worry about this! The mapping  'port name' to 'port mapping' is now done for you by the FOAM aggregate. Simply look for the port names listed above in the listresources output and "borrow" the syntax from the listresources associated to each DPID.  Now we know the site specific information and can start to define the BBN !OpenFlow resource request RSpec details.
     297
     298These are the RSpec lines that define the ports on habanero:
     299{{{
     300
     301  <openflow:group name="bbn-1750-nodes">
     302    <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.gpolab.bbn.com+datapath+06:d6:00:24:a8:c4:b9:00"     
     303                       component_manager_id="urn:publicid:IDN+openflow:foam:foam.gpolab.bbn.com+authority+am"
     304                       dpid="06:d6:00:24:a8:c4:b9:00">
     305     <openflow:port name="32" num="56"/>
     306     <openflow:port name="47" num="71"/>
     307   </openflow:datapath>
     308 </openflow:group>
     309
     310}}}
     311
     312These are the RSpec lines that define the ports on poblano:
     313
     314{{{
     315 <openflow:group name="bbn-1750-3715">
     316     <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.gpolab.bbn.com+datapath+06:d6:00:12:e2:b8:a5:d0"
     317                        component_manager_id="urn:publicid:IDN+openflow:foam:foam.gpolab.bbn.com+authority+am"
     318                        dpid="06:d6:00:12:e2:b8:a5:d0">
     319       <openflow:port num="3"/>
     320        <openflow:port num="20"/>
     321      </openflow:datapath>
     322 </openflow:group>
     323
     324}}}
     325
     326Each !OpenFlow RSpec must also include a packet filter definition to describe how the host traffic is to be handled for the experiment.  Following is an example packet filter template:
     327{{{
     328    <openflow:match>
     329      <openflow:use-group name="group-name" />
     330      <openflow:packet>
     331        <openflow:dl_type value="0x800,0x806"/>
     332        <openflow:nw_dst value="10.42.XX.0/24"/>
     333        <openflow:nw_src value="10.42.XX.0/24"/>
     334      </openflow:packet>
     335    </openflow:match>
     336}}}
     337 ''Note:'' The ''openflow:use-group'' section of the !OpenFlow RSpec defines the traffic characteristics allowed for the experiment. [[BR]]
     338 ''Note:'' The ''group-name'' should match the ''openflow:group'' specific to the !OpenFlow switch [[BR]]
     339 ''Note:''  The address ''10.42.XX.0/24'' was requested as described in the section [wiki:GENIExperimenter/ExperimentExample-OF#ReserveGENIIPsubnet above]. Your RSpec will use the subnet you reserved.
     340
     341For a detailed look at !OpenFlow configuration parameters, see the [http://groups.geni.net/geni/wiki/HowTo/WriteOFv3Rspecs/Spec OF V3 RSpec] page. On this page you will also find the list of available [http://groups.geni.net/geni/wiki/HowTo/WriteOFv3Rspecs/Spec#Filterelements packet header fields] that can be used to filter the !OpenFlow traffic.
     342
     343Let's modify the packet filter definition above so it applies to the BBN !OpenFlow resources:
     344{{{
     345   <openflow:match>
     346
     347      <openflow:use-group name="bbn-1750-nodes" />
     348      <openflow:use-group name="bbn-1750-3715" />
     349      <openflow:packet>
     350        <openflow:dl_type value="0x800,0x806"/>
     351        <openflow:nw_dst value="10.42.11.0/24"/>
     352        <openflow:nw_src value="10.42.11.0/24"/>
     353      </openflow:packet>
     354
     355    </openflow:match>
     356}}}
     357
     358The BBN !OpenFlow request RSpec will be completed in [wiki:GENIExperimenter/ExperimentExample-OF#Step3:GenerateOpenFlowV3RSpec Step 3].
     359
     360==== Clemson !OpenFlow Aggregate ====
     361
     362To define the !OpenFlow RSpec for the Clemson site review the information in the [http://groups.geni.net/geni/wiki/GeniAggregate/ClemsonOpenFlow 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:
     363
     364[[Image(ClemsonOFAggregateResources.jpg)]]
     365
     366The Clemson !OpenFlow Aggregate image above shows the information required for the !OpenFlow RSpec:
     367 * Host ''planetlab4.clemosn.edu'' is connected to port name ''39''
     368 * The !OpenFlow switch had a DPID of ''06:d6:00:26:f1:3f:e4:80''
     369 * The site !OpenFlow VLAN 1750 is connected to backbone VLAN 3715 on port name ''43''
     370
     371These are the lines from the Advertisement that should be used in the !OpenFlow request RSpec:
     372{{{
     373
     374  <openflow:group name="clemson-1750-3715">
     375
     376     <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam+datapath+06:d6:00:26:f1:3f:e4:80"
     377                    component_manager_id="urn:publicid:IDN+openflow:foam:foam+authority+am" dpid="06:d6:00:26:f1:3f:e4:80">
     378        <openflow:port name="39" num="39"/>
     379        <openflow:port name="43" num="43"/>
     380      </openflow:datapath>
     381  </openflow:group>
     382}}}
     383
     384In addition packet filters must defined to allow traffic for the IP subnet range reserved for the experiment. Following is the packet filter definitions for Clemson:
     385{{{
     386   <openflow:match>
     387
     388      <openflow:use-group name="clemson-1750-3715" />
     389
     390      <openflow:packet>
     391        <openflow:dl_type value="0x800,0x806"/>
     392        <openflow:nw_dst value="10.42.11.0/24"/>
     393        <openflow:nw_src value="10.42.11.0/24"/>
     394      </openflow:packet>
     395
     396    </openflow:match>
     397}}}
     398
     399The Clemson !OpenFlow request RSpec will be completed in [wiki:GENIExperimenter/ExperimentExample-OF#Step3:GenerateOpenFlowV3RSpec Step 3].
     400
     401==== Wisconsin !OpenFlow Aggregate ====
     402
     403To define the !OpenFlow RSpec for the Wisconsin site review the [http://groups.geni.net/geni/wiki/GeniAggregate/WisconsinOpenFlow Winsconsin OF Aggregate] diagram.  The compute resource used is the MyPLC node wings-openflow-2.wail.wisc.edu.  The [http://groups.geni.net/geni/wiki/GeniAggregate/WisconsinOpenFlow 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:
     404
     405[[Image(WisconsinOFAggregateResources.jpg)]]
     406
     407
     408The Wisonsin !OpenFlow Aggregate image above shows the information required for the !OpenFlow RSpec:
     409 * Host ''wings-openflow-2.wail.wisc.edu'' is connected to port name ''22''.
     410 * The !OpenFlow switch with the hosts has a DPID of ''06:d6:00:23:47:cc:44:00''
     411 * The !OpenFlow switch with the hosts uses port name ''1'' to connect to a second switch where VLAN 1750 is mapped to 3715.
     412 * The second !OpenFlow switch has a DPID os ''06:d6:00:21:f7:be:8d:00''.
     413 * The second !OpenFlow switch uses port name''C3'' to map VLAN 1750 to 3715. 
     414
     415Ignore the diagram instructions to add 48 to the C port name on the second !OpenFlow switch, this is done for you by FOAM. Simply look for the port names in the listresources output, and borrow the syntax from the listresources associated to each DPID.
     416
     417
     418These are the lines from the Wisconsin !OpenFlow Advertisement that should be used in the !OpenFlow request RSpec:
     419{{{
     420    <openflow:group name="wisconsin-nodes-1750">
     421      <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.wail.wisc.edu+datapath+06:d6:00:23:47:cc:44:00"
     422                         component_manager_id="urn:publicid:IDN+openflow:foam:foam.wail.wisc.edu+authority+am">
     423        <openflow:port num="1"/>
     424        <openflow:port num="22"/>
     425      </openflow:datapath>
     426    </openflow:group>
     427
     428    <openflow:group name="wisconsin-1750-3715">
     429      <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.wail.wisc.edu+datapath+06:d6:00:21:f7:be:8d:00"
     430                         component_manager_id="urn:publicid:IDN+openflow:foam:foam.wail.wisc.edu+authority+am">
     431        <openflow:port num="3"/>
     432        <openflow:port num="51"/>
     433      </openflow:datapath>
     434    </openflow:group>
     435}}}
     436
     437
     438In addition packet filters are defined to allow traffic for the IP subnet range reserved for the experiment. Following is the packet filter definition for the Wisconsin !OpenFlow resources:
     439{{{
     440    <openflow:match>
     441
     442      <openflow:use-group name="wisconsin-nodes-1750" />
     443      <openflow:use-group name="wisconsin-1750-3715" />
     444
     445      <openflow:packet>
     446        <openflow:dl_type value="0x800,0x806"/>
     447        <openflow:nw_dst value="10.42.11.0/24"/>
     448        <openflow:nw_src value="10.42.11.0/24"/>
     449      </openflow:packet>
     450
     451    </openflow:match>
     452
     453}}}
     454
     455The Wisconsin !OpenFlow request RSpec will be completed in [wiki:GENIExperimenter/ExperimentExample-OF#Step3:GenerateOpenFlowV3RSpec Step 3].
     456
     457
     458==== NLR !OpenFlow Aggregate ====
     459
     460To define the NLR !OpenFlow RSpec review the [http://groups.geni.net/geni/wiki/SiteNlr#OpenFlow OpenFlow DPIDs] table for the core in the [http://groups.geni.net/geni/wiki/SiteNlr 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. This example  uses all sites and does not define any port to simplify the experiment workflow. So if you add a site, there is no need to delete, re-create, and re-approved the sliver.  Here are the NLR definitions:
     461{{{
     462   <openflow:group name="nlr-3715">
     463     <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" />
     464     <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" />
     465     <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" />
     466     <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" />
     467     <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" />
     468   </openflow:group>
     469
     470   <openflow:match>
     471      <openflow:use-group name="nlr-3715" />
     472      <openflow:packet>
     473        <openflow:dl_type value="0x800,0x806"/>
     474        <openflow:nw_dst value="10.42.11.0/24"/>
     475        <openflow:nw_src value="10.42.11.0/24"/>
     476      </openflow:packet>
     477   </openflow:match>
     478}}}
     479
     480The NLR !OpenFlow request RSpec will be completed in [wiki:GENIExperimenter/ExperimentExample-OF#Step3:GenerateOpenFlowV3RSpec Step 3].
     481
     482=== Step 3: Generate OpenFlow V3 RSpec ===
     483
     484This section uses guidelines from the [http://groups.geni.net/geni/wiki/HowTo/WriteOFv3Rspecs#WritingOpenFlowv3requestrspecs Writing OF V3 RSpec] page to merge information from [wiki:GENIExperimenter/ExperimentExample-OF#Step2:DeterminesitespecificOpenFlowdetails Step 2] and generate the complete BBN, Clemson, Wisconsin and NLR !OpenFlow request RSpecs.
     485
     486The following !OpenFlow V3 RSpec template is used to start each RSpec:
     487
     488{{{
     489#!xml
     490<?xml version="1.1" encoding="UTF-8"?>
     491<rspec  xmlns="http://www.geni.net/resources/rspec/3"
     492        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
     493        xmlns:openflow="http://www.geni.net/resources/rspec/ext/openflow/3"
     494        xs:schemaLocation="http://www.geni.net/resources/rspec/3
     495              http://www.geni.net/resources/rspec/3/request.xsd
     496              http://www.geni.net/resources/rspec/ext/openflow/3
     497              http://www.geni.net/resources/rspec/ext/openflow/3/of-resv.xsd"
     498    type="request">
     499   
     500    <openflow:sliver email="user@geni.net" description="OF Experiment" ref="http://www.geni.net">
     501      <openflow:controller url="tcp:example.geni.net:9933" type="primary" />
     502
     503        <!-- RSpec details from Step 2 here -->
     504
     505    </openflow:sliver>
     506</rspec>
     507}}}
     508
     509For the above template you must modify the following settings:
     510
     511 * In the "openflow:sliver" line, replace the "user@geni.net" with your valid email address, and update the sliver description.
     512 * In the "openflow:controller" line, include your !OpenFlow controller name and port information.
     513
     514''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 [http://groups.geni.net/geni/wiki/OpenFlow/GeniBackboneTest#SetupyourOpenFlowcontroller Setup an OpenFlow Controller].  Also, attached to this page is a [http://groups.geni.net/geni/attachment/wiki/GENIExperimenter/ExperimentExample-OF/nox-install.txt capture] of the !OpenFlow Controller software installation, and runtime commands used to run the experiment in this page.
     515
     516The modified !OpenFlow V3 Rspec template is shown below with the setting changes specific to our experiment:
     517{{{
     518#!xml
     519<?xml version="1.1" encoding="UTF-8"?>
     520<rspec  xmlns="http://www.geni.net/resources/rspec/3"
     521        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
     522        xmlns:openflow="http://www.geni.net/resources/rspec/ext/openflow/3"
     523        xs:schemaLocation="http://www.geni.net/resources/rspec/3
     524              http://www.geni.net/resources/rspec/3/request.xsd
     525              http://www.geni.net/resources/rspec/ext/openflow/3
     526              http://www.geni.net/resources/rspec/ext/openflow/3/of-resv.xsd"
     527    type="request">
     528   
     529    <openflow:sliver email="lnevers@geni.net" description="OF Experiment" ref="http://www.geni.net">
     530     <openflow:controller url="tcp:navis.gpolab.bbn.com:33017" type="primary" />
     531
     532        <!-- RSpec details from Step 2 here -->
     533
     534    </openflow:sliver>
     535</rspec>
     536}}}
     537
     538Using the modified !OpenFlow V3 RSpec template we generate the 3 site !OpenFlow Rspecs by combining details from [wiki:GENIExperimenter/ExperimentExample-OF#Step2:DeterminesitespecificOpenFlowdetails Step 2] with the modified template. Following are the completed site !OpenFlow RSpecs for the 3 sites in this experiment:
     539
     540==== BBN !OpenFlow RSpec ====
     541
     542{{{
     543#!xml
     544<?xml version="1.1" encoding="UTF-8"?>
     545<rspec  xmlns="http://www.geni.net/resources/rspec/3"
     546        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
     547        xmlns:openflow="http://www.geni.net/resources/rspec/ext/openflow/3"
     548        xs:schemaLocation="http://www.geni.net/resources/rspec/3
     549              http://www.geni.net/resources/rspec/3/request.xsd
     550              http://www.geni.net/resources/rspec/ext/openflow/3
     551              http://www.geni.net/resources/rspec/ext/openflow/3/of-resv.xsd"
     552    type="request">
     553 
     554<openflow:sliver email="lnevers@geni.net" description="OF Experiment" ref="http://www.geni.net">
     555   <openflow:controller url="tcp:navis.gpolab.bbn.com:33017" type="primary" />
     556
     557   <openflow:group name="bbn-1750-nodes">
     558     <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.gpolab.bbn.com+datapath+06:d6:00:24:a8:c4:b9:00"     
     559                       component_manager_id="urn:publicid:IDN+openflow:foam:foam.gpolab.bbn.com+authority+am"
     560                       dpid="06:d6:00:24:a8:c4:b9:00">
     561      <openflow:port name="32" num="56"/>
     562      <openflow:port name="47" num="71"/>
     563    </openflow:datapath>
     564  </openflow:group>
     565
     566  <openflow:group name="bbn-1750-3715">
     567      <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.gpolab.bbn.com+datapath+06:d6:00:12:e2:b8:a5:d0"
     568                        component_manager_id="urn:publicid:IDN+openflow:foam:foam.gpolab.bbn.com+authority+am"
     569                        dpid="06:d6:00:12:e2:b8:a5:d0">
     570        <openflow:port num="3"/>
     571        <openflow:port num="20"/>
     572       </openflow:datapath>
     573  </openflow:group>
     574
     575  <openflow:match>
     576
     577      <openflow:use-group name="bbn-1750-nodes" />
     578      <openflow:use-group name="bbn-1750-3715" />
     579
     580      <openflow:packet>
     581        <openflow:dl_type value="0x800,0x806"/>
     582        <openflow:nw_dst value="10.42.11.0/24"/>
     583        <openflow:nw_src value="10.42.11.0/24"/>
     584      </openflow:packet>
     585
     586   </openflow:match>
     587
     588 </openflow:sliver>
     589</rspec>
     590}}}
     591
     592
     593==== Clemson !OpenFlow RSpec ====
     594
     595
     596{{{
     597#!xml
     598<?xml version="1.1" encoding="UTF-8"?>
     599<rspec  xmlns="http://www.geni.net/resources/rspec/3"
     600        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
     601        xmlns:openflow="http://www.geni.net/resources/rspec/ext/openflow/3"
     602        xs:schemaLocation="http://www.geni.net/resources/rspec/3
     603              http://www.geni.net/resources/rspec/3/request.xsd
     604              http://www.geni.net/resources/rspec/ext/openflow/3
     605              http://www.geni.net/resources/rspec/ext/openflow/3/of-resv.xsd"
     606    type="request">
     607   
     608<openflow:sliver email="lnevers@geni.net" description="OF Experiment" ref="http://www.geni.net">
     609  <openflow:controller url="tcp:navis.gpolab.bbn.com:33017" type="primary" />
     610
     611  <openflow:group name="clemson-1750-3715">
     612     <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam+datapath+06:d6:00:26:f1:3f:e4:80"
     613                    component_manager_id="urn:publicid:IDN+openflow:foam:foam+authority+am" dpid="06:d6:00:26:f1:3f:e4:80">
     614        <openflow:port name="39" num="39"/>
     615        <openflow:port name="43" num="43"/>
     616      </openflow:datapath>
     617  </openflow:group>
     618
     619  <openflow:match>
     620      <openflow:use-group name="clemson-1750-3715" />
     621      <openflow:packet>
     622        <openflow:dl_type value="0x800,0x806"/>
     623        <openflow:nw_dst value="10.42.11.0/24"/>
     624        <openflow:nw_src value="10.42.11.0/24"/>
     625      </openflow:packet>
     626    </openflow:match>
     627
     628</openflow:sliver>
     629</rspec>
     630}}}
     631
     632==== Wisconsin !OpenFlow RSpec ====
     633
     634
     635{{{
     636#!xml
     637<?xml version="1.1" encoding="UTF-8"?>
     638<rspec  xmlns="http://www.geni.net/resources/rspec/3"
     639        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
     640        xmlns:openflow="http://www.geni.net/resources/rspec/ext/openflow/3"
     641        xs:schemaLocation="http://www.geni.net/resources/rspec/3
     642              http://www.geni.net/resources/rspec/3/request.xsd
     643              http://www.geni.net/resources/rspec/ext/openflow/3
     644              http://www.geni.net/resources/rspec/ext/openflow/3/of-resv.xsd"
     645    type="request">
     646   
     647<openflow:sliver email="lnevers@geni.net" description="OF Experiment" ref="http://www.geni.net">
     648  <openflow:controller url="tcp:navis.gpolab.bbn.com:33017" type="primary" />
     649
     650   <openflow:group name="wisconsin-nodes-1750">
     651      <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.wail.wisc.edu+datapath+0
     6526:d6:00:23:47:cc:44:00"
     653                         component_manager_id="urn:publicid:IDN+openflow:foam:foam.wail.wisc.edu+au
     654thority+am">
     655        <openflow:port num="1"/>
     656        <openflow:port num="22"/>
     657      </openflow:datapath>
     658   </openflow:group>
     659
     660   <openflow:group name="wisconsin-1750-3715">
     661      <openflow:datapath component_id="urn:publicid:IDN+openflow:foam:foam.wail.wisc.edu+datapath+0
     6626:d6:00:21:f7:be:8d:00"
     663                         component_manager_id="urn:publicid:IDN+openflow:foam:foam.wail.wisc.edu+au
     664thority+am">
     665        <openflow:port num="3"/>
     666        <openflow:port num="51"/>
     667      </openflow:datapath>
     668   </openflow:group>
     669
     670   <openflow:match>
     671      <openflow:use-group name="wisconsin-nodes-1750" />
     672      <openflow:use-group name="wisconsin-1750-3715" />
     673      <openflow:packet>
     674        <openflow:dl_type value="0x800,0x806"/>
     675        <openflow:nw_dst value="10.42.11.0/24"/>
     676        <openflow:nw_src value="10.42.11.0/24"/>
     677      </openflow:packet>
     678    </openflow:match>
     679
     680
     681</openflow:sliver>
     682</rspec>
     683
     684}}}
     685
     686==== NLR !OpenFlow RSpec ====
     687
     688{{{
     689#!xml
     690<?xml version="1.1" encoding="UTF-8"?>
     691<rspec  xmlns="http://www.geni.net/resources/rspec/3"
     692        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
     693        xmlns:openflow="http://www.geni.net/resources/rspec/ext/openflow/3"
     694        xs:schemaLocation="http://www.geni.net/resources/rspec/3
     695              http://www.geni.net/resources/rspec/3/request.xsd
     696              http://www.geni.net/resources/rspec/ext/openflow/3
     697              http://www.geni.net/resources/rspec/ext/openflow/3/of-resv.xsd"
     698    type="request">
     699   
     700<openflow:sliver email="lnevers@geni.net" description="OF Experiment" ref="http://www.geni.net">
     701  <openflow:controller url="tcp:navis.gpolab.bbn.com:33017" type="primary" />
     702
     703   <openflow:group name="nlr-3715">
     704     <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" />
     705     <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" />
     706     <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" />
     707     <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" />
     708     <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" />
     709   </openflow:group>
     710
     711   <openflow:match>
     712      <openflow:use-group name="nlr-3715" />
     713      <openflow:packet>
     714        <openflow:dl_type value="0x800,0x806"/>
     715        <openflow:nw_dst value="10.42.11.0/24"/>
     716        <openflow:nw_src value="10.42.11.0/24"/>
     717      </openflow:packet>
     718   </openflow:match>
     719</openflow:sliver>
     720</rspec>
     721
     722}}}
     723
     724
     725== 6. Setup Experiment ==
     726
     727Using 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 [wiki:GENIExperimenter/ExperimentExample-OF#AuthenticationandOmnitoolsconfiguration 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: 
     728{{{
     729 $ cd gcf-1.6.1
     730 $ ./src/omni.py createslice 3sites-OF
     731 $ ./src/omni.py -a of-bbn createsliver 3sites-OF openflow-bbn.rspec
     732 $ ./src/omni.py -a of-clemson createsliver 3sites-OF openflow-clemson.rspec   
     733 $ ./src/omni.py -a of-wisconsin createsliver 3sites-OF openflow-wisconsin.rspec
     734 $ ./src/omni.py -a of-nlr createsliver 3sites-OF openflow-nlr.rspec
     735 $ ./src/omni.py -a plc-bbn createsliver 3sites-OF myplc-bbn.rspec
     736 $ ./src/omni.py -a plc-clemson createsliver  3sites-OF  myplc-clemson.rspec
     737 $ ./src/omni.py -a plc-wisconsin createsliver 3sites-OF myplc-wisconsin.rspec
     738                   
     739}}}
     740
     741The output for running each of the above commands is attached [http://groups.geni.net/geni/attachment/wiki/GENIExperimenter/ExperimentExample-OF/openflow-foam-example.txt here]. Also each of the RSpecs used to create slivers are also attached to this page.
     742
     743Remember, 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:
     744{{{
     745 $ ./src/omni.py -a of-bbn sliverstatus 3sites-OF
     746 $ ./src/omni.py -a of-clemson sliverstatus 3sites-OF
     747 $ ./src/omni.py -a of-wisconsin sliverstatus 3sites-OF
     748 $ ./src/omni.py -a of-nlr sliverstatus 3sites-OF
     749 $ ./src/omni.py -a plc-clemson sliverstatus 3sites-OF
     750 $ ./src/omni.py -a plc-wisconsin  sliverstatus 3sites-OF
     751 $ ./src/omni.py -a plc-bbn sliverstatus 3sites-OF
     752}}}
     753The output for running each of the above commands is attached [http://groups.geni.net/geni/attachment/wiki/GENIExperimenter/ExperimentExample-OF/openflow-foam-sliverstatus.txt here].
     754
     755
     756You can now renew the slice and slivers. Following are the commands to extend the reservation for the resources:
     757{{{
     758 $ ./src/omni.py renewslice  3sites-OF 2012-04-30
     759 $ ./src/omni.py -a of-bbn renewsliver 3sites-OF 2012-04-30
     760 $ ./src/omni.py -a of-clemson renewsliver 3sites-OF 2012-04-30
     761 $ ./src/omni.py -a of-wisconsin renewsliver 3sites-OF 2012-04-30
     762 $ ./src/omni.py -a of-nlr renewsliver 3sites-OF 2012-04-30
     763 $ ./src/omni.py -a of-clemson renewsliver 3sites-OF 2012-04-30
     764 $ ./src/omni.py -a of-wisconsin  renewsliver 3sites-OF 2012-04-30
     765 $ ./src/omni.py -a of-bbn renewsliver 3sites-OF 2012-04-30
     766}}}
     767
     768The output for running each of the above renew commands is attached [http://groups.geni.net/geni/attachment/wiki/GENIExperimenter/ExperimentExample-OF/openflow-foam-renew.txt here].
     769
     770
     771=== FOAM sliver approval ===
     772
     773Each 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:
     774
     775[[Image(FOAM-sliver-approve.jpg)]] 
     776
     777In the scenario captured in this page, there are 4 sliver approval notifications, one from each of the FOAM aggregates (BBN, Clemson, NLR and Wisconsin).
     778
     779== 7. Run Experiment ==
     780
     781Once your flowspace has been approved, 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 [mailto:help@geni.net].
     782
     783=== Login to a MyPLC host ===
     784
     785To 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:
     786{{{
     787 $ ./src/omni.py -a plc-clemson sliverstatus 3sites-OF
     788 $ ./src/omni.py -a plc-bbn sliverstatus 3sites-OF
     789 $ ./src/omni.py -a plc-wisconsin sliverstatus 3sites-OF
     790}}}
     791
     792The output for running each of the above sliverstatus commands is attached [http://groups.geni.net/geni/attachment/wiki/GENIExperimenter/ExperimentExample-OF/sliverstatus-3sites-OF-exp.txt here].
     793
     794From 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:
     795
     796|| MyPLC Site || Login (pl_login)           || MyPLC Host (pl_hostname) || Command to connect ||
     797|| ||
     798||BBN      || pgenigpolabbbncom_3sitesOF || navis.gpolab.bbn.com  || ssh pgenigpolabbbncom_3sitesOF@navis.gpolab.bbn.com
     799||||
     800||Clemson  || pgenigpolabbbncom_3sitesOF || planetlab4.clemson.edu|| ssh pgenigpolabbbncom_3sitesOF@planetlab4.clemson.edu ||
     801|| ||
     802||Wisconsin|| pgenigpolabbbncom_3sitesOF || wings-openflow-2.wail.wisc.edu|| ssh pgenigpolabbbncom_3sitesOF@wings-openflow-2.wail.wisc.edu ||
     803
     804
     805Login 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:
     806{{{
     807$ ssh pgenigpolabbbncom_3sitesOF@navis.gpolab.bbn.com
     808Last login: Fri Apr 20 15:22:13 2012 from sendaria.gpolab.bbn.com
     809[pgenigpolabbbncom_3sitesOF@navis ~]$ /sbin/ifconfig |egrep "10.42.11\." -A 1 -B 1
     810eth1.1750:42011 Link encap:Ethernet  HWaddr 00:1B:21:5A:E6:A9 
     811          inet addr:10.42.11.55  Bcast:10.42.11.255  Mask:255.255.255.0
     812          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
     813}}}
     814
     815You should verify connectivity between the MyPLC hosts before running your experiment. The following example show connectivity from BBN host navis to Clemson host planetlab4:
     816{{{
     817[pgenigpolabbbncom_3sitesOF@navis ~]$ ping 10.42.11.104 -c 3
     818PING 10.42.11.104 (10.42.11.104) 56(84) bytes of data.
     81964 bytes from 10.42.11.104: icmp_seq=1 ttl=64 time=59.3 ms
     82064 bytes from 10.42.11.104: icmp_seq=2 ttl=64 time=59.3 ms
     82164 bytes from 10.42.11.104: icmp_seq=3 ttl=64 time=59.3 ms
     822
     823--- 10.42.11.104 ping statistics ---
     8243 packets transmitted, 3 received, 0% packet loss, time 2006ms
     825rtt min/avg/max/mdev = 59.327/59.337/59.354/0.199 ms
     826[pgenigpolabbbncom_3sitesOF@navis ~]$
     827}}}
     828
     829and from Wisconsin host wings-openflow-2 to Clemson host planetlab4:
     830{{{
     831[pgenigpolabbbncom_3sitesOF@wings-openflow-2 ~]$ ping 10.42.11.104 -c 3
     832PING 10.42.11.104 (10.42.11.104) 56(84) bytes of data.
     83364 bytes from 10.42.11.104: icmp_seq=1 ttl=64 time=40.6 ms
     83464 bytes from 10.42.11.104: icmp_seq=2 ttl=64 time=40.6 ms
     83564 bytes from 10.42.11.104: icmp_seq=3 ttl=64 time=40.6 ms
     836
     837--- 10.42.11.104 ping statistics ---
     8383 packets transmitted, 3 received, 0% packet loss, time 2044ms
     839rtt min/avg/max/mdev = 40.610/40.652/40.699/0.168 ms
     840}}}
     841
     842You can now run an experiment!
     843
     844== 8. Release Resources ==
     845
     846When 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:
     847{{{
     848./src/omni.py -a of-bbn deletesliver 3sites-OF
     849./src/omni.py -a of-clemson deletesliver 3sites-OF
     850./src/omni.py -a of-wisconsin deletesliver 3sites-OF
     851./src/omni.py -a of-nlr deletesliver 3sites-OF
     852./src/omni.py -a plc-clemson deletesliver  3sites-OF
     853./src/omni.py -a plc-wisconsin deletesliver 3sites-OF
     854./src/omni.py -a plc-bbn deletesliver 3sites-OF
     855
     856}}}
     857
     858
    216859
    217860----
    218861{{{
    219862#!html
    220 <a href="mailto:luisa.nevers@bbn.com">Email us</a> with any questions and feedback on this page!
    221 }}}
     863Email <a href="mailto:help@geni.net"> help@geni.net </a> for GENI support or email <a href="mailto:luisa.nevers@bbn.com">me</a> with feedback on this page!
     864}}}