[[PageOutline(1-2)]] = GENI !OpenFlow Experiment Example 2 = This 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]. The experiment in this page uses Omni to reserve resources. If you are using gcf 2.0 or higher, you '''must''' specify the AM API version option ''' ''-V 1'' ''' for all Omni commands that are executed at !OpenFlow and MyPLC aggregates, these aggregates support AM API V1. If you are using gcf 1.X you do not need to specify ''' ''-V 1'' ''', as the AM API version 1.0 is the default for gcf 1.x packages. If you are using gcf 2.2 or higher, then you do not need to worry about specifying a version, omni will determine the version to use for the aggregate. The example in this page uses credentials from the GPO ProtoGENI Clearinghouse (pgeni.gpolab.bbn.com) to set up a 3 meso-scale sites !OpenFlow experiment that includes GPO InstaGENI (IG), Utah ProtoGENI (PG), and RENCI ExoGENI (EG). [[Image(OF-ExperimentExample.jpg)]] Omni tools are used to reserve resources in this experiment for 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: 1. [wiki:GENIExperimenter/ExperimentExample-OF#a1.AuthenticationandOmnitoolsconfiguration Authentication and Omni tools configuration] 2. [wiki:GENIExperimenter/ExperimentExample-OF#a2.ReserveGENIIPsubnet Reserve IP Subnet] 3. [wiki:GENIExperimenter/ExperimentExample-OF#a3.DetermineResourcesAvailability Determine Resources Availability] 4. [wiki:GENIExperimenter/ExperimentExample-OF#a4.DefineComputeResourcesRSpecs Define Compute Resources RSpecs] 5. [wiki:GENIExperimenter/ExperimentExample-OF#a5.DefineOpenFlowNetworkResourcesRSpecs Define OpenFlow Network Resources RSpecs] 6. [wiki:GENIExperimenter/ExperimentExample-OF#a6.SetupExperiment Setup Experiment] 7. [wiki:GENIExperimenter/ExperimentExample-OF#a7.RunExperiment Run Experiment] 8. [wiki:GENIExperimenter/ExperimentExample-OF#a8.ReleaseResources Release Resources] The IP Subnet reservation is required for use by the resources allocated in this experiment. 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. == 1. Authentication and Omni tools configuration == This 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. This example uses Omni ''aggregate_nicknames'' which simplify command arguments, so that '' "-a !https://www.emulab.net:12369/protogeni/xmlrpc/am/2.0" '' is simply replaced by '' "-a pg-utah" ''. Known aggregates have ''aggregate_nicknames'' delivered in the omni_configuration file. A list of aggregate managers is found at [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 [mailto:help@geni.net]. == 2. 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 [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. == 3. 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 and Internet2 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 the list of Compute and FOAM aggregates that are used in this example: ||'''Site'''|| '''Compute Resource Aggregate URL''' || '''Compute Resource Aggregate Nickname''' || ''' FOAM Aggregate URL ''' ||''' FOAM Aggregate Nickname ''' || ||GPO IG || !http://instageni.gpolab.bbn.com/protogeni/xmlrpc/am/2.0 || ig-gpo || !https://foam.instageni.gpolab.bbn.com:3626/foam/gapi/1|| ig-of-gpo || ||GPO Site || || || !https://foam.gpolab.bbn.com:3626/foam/gapi/1 || of-gpo || ||UEN Regional|| || || !https://foamyflow.chpc.utah.edu:3626/foam/gapi/1 || of-uen || ||Utah/UEN Regional|| !https://www.emulab.net:12369/protogeni/xmlrpc/am/2.0|| pg-utah || !https://foam.utah.geniracks.net:3626/foam/gapi/1 || of-uen || ||NLR || || || !https://foam.nlr.net:3626/foam/gapi/1 || of-nlr || ||Internet2 || || || !https://foam.net.internet2.edu:3626/foam/gapi/1 || of-i2 || ||RENCI EG ||!https://rci-hn.exogeni.net:11443/orca/xmlrpc || eg-renci || !https://rci-hn.exogeni.net:3626/foam/gapi/1 || eg-of-renci || 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. == 4. Define Compute Resources RSpecs == If you are interested in finding out available resources, you can execute the following commands at the each of the compute aggregates : {{{ $ omni.py -a ig-gpo listresources -o # generates rspec-instageni-gpolab-bbn-com-protogeniv2.xml $ omni.py -a pg-utah listresources -o # generates rspec-www-emulab-net-protogeniv2.xml $ omni.py -a eg-renci listresources -o # generates rspec-rci-hn-exogeni-net-11443-orca.xml }}} Note the ''-o'' option sends the Advertisement RSpec output to a file. This experiment requests VM compute resources that are not tied to any specific compute component in the aggregate (aka un-bound). Requests for un-bound resources are not tied to any specific component at the aggregate. The aggregate decides which compute component to use for the compute resource request. No checking of resources is needed, whatever resources are available will be assigned. Following are the three Compute Resource RSpecs used: - GPO IG request RSpec: [http://groups.geni.net/geni/browser/trunk/of-example/compute-ig-gpo.rspec compute-ig-gpo.rspec] - Utah PG request RSpec: [http://groups.geni.net/geni/browser/trunk/of-example/compute-pg-utah.rspec compute-pg-utah.rspec] - RENCI EG request RSpec: [http://groups.geni.net/geni/browser/trunk/of-example/compute-eg-renci.rspec compute-eg-renci.rspec] == 5. Define !OpenFlow Network Resources RSpecs == To 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: - 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. - Determine addresses and ports, and define site specific !OpenFlow packet filter rules. - 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 FOAM request RSpecs. Each of the above steps is covered in detail below: === Collect listresources from all FOAM Aggregate === To determine the resource definitions to use in this experiment, we check resources on each FOAM aggregates in the experiment. The GPO Site uses 2 FOAM aggregates in the experiment, the Site's FOAM aggregate and the InstaGENI FOAM aggregates: {{{ $ omni.py -a of-gpo -V 1 listresources -o # generates rspec-foam-gpolab-bbn-com.xml $ omni.py -a ig-of-gpo -V 1 listresources -o # generates spec-foam-instageni-gpolab-bbn-com.xml }}} The NLR Core FOAM aggregate: {{{ $ omni.py -a of-nlr -V 1 listresources -o # generates rspec-foam-nlr-net.xml }}} The Internet2 Core FOAM aggregate: {{{ $ omni.py -a of-i2 -V 1 listresources -o # generates rspec-foam-net-internet2-edu.xml }}} The Utah PG site uses the UEN FOAM aggregates: {{{ $ omni.py -a of-uen -V 1 listresources -o # generates rspec-foamyflow-chpc-utah-edu.xml }}} The RENCI FOAM Aggregate: {{{ $ omni.py -a eg-of-renci -V 1 listresources -o # rspec-rci-hn-exogeni-net.xml }}} The output Advertisement RSpec files generated by the ''-o'' capture the switch and the port information to be used in the FOAM request RSpec. === 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 [http://groups.geni.net/geni/wiki/GeniAggregate GeniAggregate] page and select the !OpenFlow Aggregate links for GPO Lab, PG Utah, and RENCI ExoGENI. 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. Now, let's map the nodes in the compute resource RSpecs to the appropriate !OpenFlow switch ports and determine how they connect to the GENI CORE network VLAN 3715. ==== GPO !OpenFlow Aggregates ==== To define the !OpenFlow request RSpec for the GPO site we need to consider the compute resource we selected, one InstaGENI Node. We then determine how the InstaGENI !OpenFlow switch is connected to the GPO site !OpenFlow switch, then we find the Data Path IDentifier (DPID) for the switch VLAN 1750 which is used at every meso-scale site for InstaGENI 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/GpoLabInstaGENIOpenFlow GPOLab InstaGENI OpenFlow Aggregate] page. Below is a diagram of the GPO Site FOAMs with the relevant request RSpec details highlighted: [[Image(GPOLab-OF-InstaGENI.jpg)]] The GPO !OpenFlow Aggregate image above shows some the information required for the !OpenFlow RSpec such as the ports assignments: * The InstaGENI rack is connected to port name 16 of the !OpenFlow switch named ''poblano'' * The InstaGENI VM servers are on ports 1 and 4. * The GPO Site OF switch poblano uses port 3 to map the shared meso-scale VLAN 1750 to the Backbone OF VLAN 3715. The [http://groups.geni.net/geni/wiki/GeniAggregate/GpoLabInstaGENIOpenFlow GPOLab InstaGENI !OpenFlow Aggregate] page also shown the DPIDs for the two GPO !OpenFlow switches. DPIDs are also listed in the listresource output. * !OpenFlow switch ''poblano'' has a DPID of ''06:d6:00:12:e2:b8:a5:d0'' for VLAN 1750. * !OpenFlow switch for InstaGENI has DPID of ''06:d6:84:34:97:c6:c9:00'' for VLAN 1750. Now we know the site specific information and can start to define the GPO !OpenFlow resource request RSpecs. ''' GPO Site !OpenFlow RSpec''': These are the RSpec lines that define the datapath on poblano, the GPO site !OpenFlow site switch: {{{ }}} The GPO Site !OpenFlow request RSpec will 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: {{{ }}} ''Note:'' The ''openflow:use-group'' section of the !OpenFlow RSpec defines the traffic characteristics allowed for the experiment. [[BR]] ''Note:'' The ''group-name'' should match the ''openflow:group'' specific to the !OpenFlow switch [[BR]] ''Note:'' The address ''10.42.11.0/24'' was requested as described in the section [wiki:GENIExperimenter/ExperimentExample-OF#a2.ReserveGENIIPsubnet above]. Your RSpec will use the subnet you reserved. For 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. ''' GPO InstaGENI !OpenFlow RSpec''': These are the RSpec lines that define the datapath for the GPO InstaGENI !OpenFlow switch: {{{ }}} The GPO InstaGENI !OpenFlow RSpec also includes a packet filter definition for traffic characteristics allowed: {{{ }}} The GPO !OpenFlow request RSpecs will be completed in [wiki:GENIExperimenter/ExperimentExample-OF#Step3:GenerateOpenFlowV3RSpec Step 3]. ==== PG Utah !OpenFlow Aggregate ==== To define the !OpenFlow RSpec for the PG Utah site review the information in the [http://groups.geni.net/geni/wiki/GeniAggregate/UtahUEN-OpenFlow Utah UEN OF Aggregate] page. This experiment uses 1 one PG VM on the Meso-scale shared-vlan 1750. The PG Node will use the UEN FOAM aggregate to connect to the GENI network. As detailed in the [http://groups.geni.net/geni/wiki/GeniAggregate/UtahUEN-OpenFlow#UENOpenFlowSwitchPortList UEN OpenFlow Switch Port List] section, the UEN !OpenFlow switch only uses two ports: * Port 21 connect to the PG aggregation switch which connects both Utah PG and Utah InstaGENI * Port 22 connects to the Internet2 !OpenFlow Switch in Los Angeles. This very simple topology is captured in the diagram below which illustrates the ports and !OpenFlow datapath: [[Image(UEN-OF-PG-Aggregate.jpg)]] The UEN !OpenFlow switch DPID can be found by executing an omni listresources; DPID is ''06:d6:ac:16:2d:f5:2d:00''. These are the settings for the datapath in the UEN OpenFlow request RSpec: {{{ }}} This is the packet filter definitions for the IP subnet range reserved for this experiment: {{{ }}} The Utah UEN !OpenFlow request RSpec will be completed in [wiki:GENIExperimenter/ExperimentExample-OF#Step3:GenerateOpenFlowV3RSpec Step 3]. ==== RENCI !OpenFlow Aggregate ==== To define the !OpenFlow RSpec for the RENCI ExoGENI site we review the omni listresources which shows that 51 ports are connected to support the sites VM Servers, in order to simplify this experiment RSpec we will simply request all ports even though we will only use one compute resource on shared-vlan 1750. From the omni listresources we find that the RENCI !OpenFlow switch DPID is ''00:01:08:17:f4:b3:5b:00'' and we will not specify ports to simply RSpec. Additionally RENCI is directly connected to NLR Atlanta. These are the lines from the RENCI ExoGENI !OpenFlow Advertisement that should be used in the !OpenFlow request RSpec: {{{ }}} In 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 RENCI ExoGENI !OpenFlow resources: {{{ }}} The RENCI ExoGENI !OpenFlow request RSpec will be completed in [wiki:GENIExperimenter/ExperimentExample-OF#Step3:GenerateOpenFlowV3RSpec Step 3]. ==== NLR !OpenFlow Aggregate ==== To define the NLR !OpenFlow RSpec we must first decide which path we will choose from the available GENI backbone VLANs. See the [http://groups.geni.net/geni/wiki/NetworkCore GENI Network Core] page for all available VLANs. For this example, we will use [http://groups.geni.net/geni/wiki/NetworkCore#VLAN3715 VLAN 3715 to provide the path for our experiment. The following diagram shows which network core path and the switches that will be used to connect the 3 meso-scale sites in this experiment: [[Image(OF-Example-VLAN-3715.jpg)]] From the network core path diagram we determined that we will use 2 NLR switches (NLR Chicago and NLR Atlanta) and 3 Internet2 switches (I2 Atlanta, I2 Houston, and I2 Los Angeles). These 5 core switches will be in the !OpenFlow RSpecs for NLR and Internet2. '''Define Experiment NLR Sites Details''': The GPO site is connected to the GENI Network core at NLR Chicago, and the RENCI ExoGENI site is connected to NLR Atlanta. We need to figure out the ports used for the 2 NLR experiment sites (IG GPO and EG RENCI). Review the [http://groups.geni.net/geni/wiki/GeniAggregate/NLROpenFlow NLR !OpenFlow Aggregate] page and look for the NLR tables for VLAN 1750 or DPIDs starting with '' ''' "06:d6" ''' '' (hex equivalent of 1750). We will need the following port information from the NLR tables: __[http://groups.geni.net/geni/wiki/GeniAggregate/NLROpenFlow#NLRCHIC175006:d6:00:23:47:c8:bc:00 NLR CHIC 1750 (06:d6:00:23:47:c8:bc:00)]__: - Port Name = 3; Port Number = 3; Connects to = NLR CHIC 3715 - Port Name = 9; Port Number = 9; Connects to = GPO 1750 [[BR]] __[http://groups.geni.net/geni/wiki/GeniAggregate/NLROpenFlow#NLRATLA175006:d6:00:24:a8:d2:b8:40 NLR ATLA 1750 (06:d6:00:24:a8:d2:b8:40)]__: - Port Name = 3; Port Number = 3; Connects to = NLR ATLA 3715 - Port Name = 25; Port Number = 49; Connects to = RENCI 1750 Note that you may choose to use only the core sites that are required for the three experiment sites to communicate, but you can also choose to define all DPIDs in the NLR Core for VLAN 3715. Although this example only defines the core switches used, it is possible to define all GENI backbone switches available at the time of this experiment. Now back to our RSpec definition, first we define the experiment site and ports information. First we define the site-specific ports for VLAN 1750 and map them to VLAN 3715: {{{ }}} '''Define Network Core VLAN 3715 Details''': Then we review the [http://groups.geni.net/geni/wiki/GeniAggregate/NLROpenFlow NLR !OpenFlow Aggregate] page and look for the NLR tables for VLAN 3715 for DPIDs starting with ''' "0e:83" ''' (hex equivalent of 3715) for the two switches (Chicago and Atlanta) that we will be using in the NLR core VLAN 3715: [[BR]] __[http://groups.geni.net/geni/wiki/GeniAggregate/NLROpenFlow#NLRCHIC37150e:83:00:23:47:c8:bc:00 NLR CHIC 3715 (0e:83:00:23:47:c8:bc:00)]__ [[BR]] __[http://groups.geni.net/geni/wiki/GeniAggregate/NLROpenFlow#NLRATLA37150e:83:00:24:a8:d2:b8:40 NLR ATLA 3715 (0e:83:00:24:a8:d2:b8:40)]__ and we define the NLR 3715 datapath for NLR Chicago and Atlanta: {{{ }}} As with all RSpecs, we define the packet filtering for the subnet used in the experiment: {{{ }}} The NLR !OpenFlow request RSpec will be completed in [wiki:GENIExperimenter/ExperimentExample-OF#Step3:GenerateOpenFlowV3RSpec Step 3]. ==== Internet2 !OpenFlow Aggregate ==== From the network core path diagram we see that we are using 3 Internet2 switches (I2 Atlanta, I2 Houston, and I2 Los Angeles). You may choose to use only the core sites that are required for the three experiment sites to communicate, but you can also choose to define all DPIDs in the Internet2 Core for VLAN 3715. This example only defines the core switches used in the diagram above, but an RSpeccan be defined to include all GENI backbone switches. We now proceed to define the RSpec that only defines the minimum set of configuration for this experiment. '''Define Experiment Site Details:''' There is only one site in this experiment that is connected to the Los Angeles Internet2 switch. We need to figure out the ports used for the site connection. Review the [http://groups.geni.net/geni/wiki/GeniAggregate/I2OpenFlow Internet2 !OpenFlow Aggregate] page and look for the Internet2 tables for 1750 or DPIDs starting with '' ''' "06:d6" ''' ''(hex equivalent of 1750). The information for the PG Utah connection: [[BR]] __[http://groups.geni.net/geni/wiki/GeniAggregate/I2OpenFlow#I2LOSA175006:d6:00:12:e2:22:63:38 I2 LOSA 1750 (06:d6:00:12:e2:22:63:38) ]__: - Port Name = 12; Port Number = 12; Connects to = I2 UEN 1750 - Port Name = 13; Port Number = 13; Connects to = I2 Los Angeles 3715 We use this information to define the site specific portion of the RSpec that maps VLAN 1750 to VLAN 3715: {{{ }}} '''Define Network Core VLAN 3715 Details''': Then we review the [http://groups.geni.net/geni/wiki/GeniAggregate/I2OpenFlow Internet2 !OpenFlow Aggregate] page and look for the Internet2 tables for VLAN 3715 for DPIDs starting with ''' "0e:83" ''' (hex equivalent of 3715) for the three switches (Atlanta, Houston and Los Angeles) that we will be using in the Internet2 core VLAN 3715: [[BR]] __[http://groups.geni.net/geni/wiki/GeniAggregate/I2OpenFlow#I2ATLA37150e:83:00:12:e2:22:63:6e I2 ATLA 3715 (0e:83:00:12:e2:22:63:6e)]__ [[BR]] __[http://groups.geni.net/geni/wiki/GeniAggregate/I2OpenFlow#I2HOUS37150e:83:00:12:e2:22:81:42 I2 HOUS 3715 (0e:83:00:12:e2:22:81:42)]__ [[BR]] __[http://groups.geni.net/geni/wiki/GeniAggregate/I2OpenFlow#I2LOSA37150e:83:00:12:e2:22:63:38 I2 LOSA 3715 (0e:83:00:12:e2:22:63:38)]__ [[BR]] Now we define the RSpec entries for the path: {{{ }}} We than add the packet filter to allow our subnet range: {{{ }}} The Internet2 !OpenFlow request RSpec will be completed in [wiki:GENIExperimenter/ExperimentExample-OF#Step3:GenerateOpenFlowV3RSpec Step 3]. === Generate OpenFlow V3 RSpec === This 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. The following !OpenFlow V3 RSpec template is used to start each RSpec: {{{ #!xml }}} 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 [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. The modified !OpenFlow V3 RSpec template is shown below with the setting changes specific to our experiment: {{{ #!xml }}} Using the modified !OpenFlow V3 RSpec template we generate the 3 Meso-scale sites !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: ==== GPO !OpenFlow RSpecs ==== The following is the !OpenFlow request RSpec for the GPO Site's FOAM aggregate [http://groups.geni.net/geni/browser/trunk/RSpecExamples/ExperimentExample-OF/openflow-ig-gpo.rspec openflow-ig-gpo.rspec]: {{{ #!xml }}} The following request RSpec is for the GPO InstaGENI FOAM Aggregate [http://groups.geni.net/geni/browser/trunk/RSpecExamples/ExperimentExample-OF/openflow-ig-gpo.rspec openflow-ig-gpo.rspec] : {{{ #!xml }}} ==== PG Utah !OpenFlow RSpecs ==== The following request RSpec is for the PG Utah FOAM aggregate which is the Regional UEN FOAM aggregate [http://groups.geni.net/geni/browser/trunk/RSpecExamples/ExperimentExample-OF/openflow-uen.rspec openflow-uen.rspec]: {{{ #!xml }}} ==== RENCI !OpenFlow RSpec ==== The following request RSpec is for the RENCI ExoGENI FOAM aggregate [http://groups.geni.net/geni/browser/trunk/RSpecExamples/ExperimentExample-OF/openflow-eg-renci.rspec openflow-eg-renci.rspec]: {{{ #!xml }}} ==== NLR !OpenFlow RSpec ==== The following request RSpec is for the NLR FOAM aggregate [http://groups.geni.net/geni/browser/trunk/RSpecExamples/ExperimentExample-OF/openflow-nlr.rspec openflow-nlr.rspec]: {{{ #!xml }}} ==== Internet2 !OpenFlow RSpec ==== The following request RSpec is for the Internet2 FOAM aggregate [http://groups.geni.net/geni/browser/trunk/RSpecExamples/ExperimentExample-OF/openflow-internet2.rspec openflow-internet2.rspec]: {{{ #!xml }}} All !OpenFlow request RSpecs used in this examples can also be found [http://groups.geni.net/geni/browser/trunk/of-example here]. == 6. 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 [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 6 !OpenFlow aggregates and 3 compute resource aggregates (1 ProtoGENI, 1 ExoGENI, and 1 InstaGENI), which maps to creating 9 slivers. The following commands are executed to set up the experiment: {{{ $ omni.py createslice 3sites-OF }}} Create slivers at each compute resource aggregate (GPO IG, RENCI EG, Utah PG): {{{ $ omni.py -a ig-gpo createsliver 3sites-OF compute-ig-gpo.rspec $ omni.py -a eg-renci createsliver 3sites-OF compute-eg-renci.rspec $ omni.py -a pg-utah createsliver 3sites-OF compute-pg-utah.rspec }}} Create a slivers for each of the FOAM aggregate: {{{ $ omni.py -a of-gpo -V1 createsliver 3sites-OF openflow-gpo.rspec $ omni.py -a of-nlr -V1 createsliver 3sites-OF openflow-nlr.rspec $ omni.py -a of-i2 -V1 createsliver 3sites-OF openflow-internet2.rspec $ omni.py -a of-uen -V1 createsliver 3sites-OF openflow-uen.rspec $ omni.py -a eg-of-renci -V1 createsliver 3sites-OF openflow-eg-renci.rspec $ omni.py -a ig-of-gpo -V1 createsliver 3sites-OF openflow-ig-gpo.rspec }}} The output for running each of the above commands is attached [http://groups.geni.net/syseng/attachment/wiki/LuisaSandbox/ExperimentExample-OF/openflow-foam-example.txt here]. The RSpecs used can be found [http://groups.geni.net/geni/browser/trunk/RSpecExamples/ExperimentExample-OF/ 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 print_slice_expiration commands. {{{ $ omni.py print_slice_expiration 3sites-OF INFO:omni:Loading config file /home/lnevers/.gcf/omni_config INFO:omni:Using control framework pg INFO:omni:Slice urn:publicid:IDN+pgeni.gpolab.bbn.com+slice+3sites-OF expires on 2013-03-01 21:30:06 UTC INFO:omni: ------------------------------------------------------------ INFO:omni: Completed print_slice_expiration: Options as run: framework: pg Args: print_slice_expiration 3sites-OF Result Summary: Slice urn:publicid:IDN+pgeni.gpolab.bbn.com+slice+3sites-OF expires on 2013-03-01 21:30:06 UTC INFO:omni: ============================================================ }}} You can now renew the slice and slivers. Following are the commands to extend the reservation for the compute and network resources: {{{ $ omni.py renewslice 3sites-OF 2013-03-13 $ omni.py -a of-gpo -V 1 renewsliver 3sites-OF 2013-03-03 $ omni.py -a of-nlr -V 1 renewsliver 3sites-OF 2013-03-03 $ omni.py -a of-i2 -V 1 renewsliver 3sites-OF 2013-03-03 $ omni.py -a of-uen -V 1 renewsliver 3sites-OF 2013-03-03 $ omni.py -a eg-of-renci -V 1 renewsliver 3sites-OF 2013-03-03 $ omni.py -a ig-of-gpo -V 1 renewsliver 3sites-OF 2013-03-03 $ omni.py -a pg-utah -V 1 renewsliver 3sites-OF 2013-03-03 $ omni.py -a ig-gpo renewsliver 3sites-OF 2013-03-03 }}} '' Note: The sliver for RENCI resources is not renewed, as the feature is currently not supported, default sliver is 2 weeks for ExoGENI''. The output for running each of the above renew commands is attached [http://groups.geni.net/syseng/attachment/wiki/LuisaSandbox/ExperimentExample-OF/openflow-example-renew.txt here]. === FOAM slivers approval === SOme 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: {{{ (This is an automated message from FOAM.) Your FOAM sliver at foam.gpolab.bbn.com has been automatically approved, and is now in the FlowVisor: Sliver URN: urn:publicid:IDN+pgeni.gpolab.bbn.com+slice+3sites-OF:6454a7b0-f4cf-4c98-863e-2f1db3a4613c Owner URN: urn:publicid:IDN+pgeni.gpolab.bbn.com+user+lnevers Owner e-mail: lnevers@bbn.com If this is unexpected, please contact foam-admin@gpolab.bbn.com for further assistance. }}} In the scenario captured in this page, there are 6 sliver approval notifications, one from each of the FOAM aggregates (GPO, NLR, I2, UEN, IG, and EG). == 7. Run Experiment == Once your flowspace has been approved, you can determine the login information for each compute resource host as follows: {{{ $ readyToLogin.py -a ig-gpo 3sites-OF <....> ================================================================================ LOGIN INFO for AM: https://instageni.gpolab.bbn.com:12369/protogeni/xmlrpc/am/2.0 ================================================================================ gpo-ig's geni_status is: ready (am_status:ready) User lnevers logins to gpo-ig using: xterm -e ssh -p 30522 -i /home/lnevers/.ssh/id_rsa lnevers@pc1.instageni.gpolab.bbn.com & $ readyToLogin.py -a pg-utah 3sites-OF <..> ================================================================================ LOGIN INFO for AM: https://www.emulab.net:12369/protogeni/xmlrpc/am/2.0 ================================================================================ utah-pg's geni_status is: ready (am_status:ready) User lnevers logins to utah-pg using: xterm -e ssh -p 32570 -i /home/lnevers/.ssh/id_rsa lnevers@pc423.emulab.net & $ readyToLogin.py -a eg-renci 3sites-OF <...> ================================================================================ LOGIN INFO for AM: https://rci-hn.exogeni.net:11443/orca/xmlrpc ================================================================================ User root logins to renci-eg using: xterm -e ssh -i /home/lnevers/.ssh/id_rsa root@152.54.14.17 & }}} You can now simply SSH into one of the hosts and ping any of the other site's 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]. In our example, we login to the hosts at each site and ping a remote host. On the GPO InstaGENI host ping the RENCI ExoGENI host and the ProtoGENI host: {{{ $ ssh -p 30522 -i /home/lnevers/.ssh/id_rsa lnevers@pc1.instageni.gpolab.bbn.com [lnevers@gpo-ig ~]$ /sbin/ifconfig |egrep 10.42 inet addr:10.42.11.65 Bcast:10.42.11.255 Mask:255.255.255.0 [lnevers@gpo-ig ~]$ ping 10.42.11.205 -c 5 PING 10.42.11.205 (10.42.11.205) 56(84) bytes of data. 64 bytes from 10.42.11.205: icmp_req=1 ttl=64 time=1676 ms 64 bytes from 10.42.11.205: icmp_req=2 ttl=64 time=779 ms 64 bytes from 10.42.11.205: icmp_req=3 ttl=64 time=66.4 ms 64 bytes from 10.42.11.205: icmp_req=4 ttl=64 time=66.3 ms 64 bytes from 10.42.11.205: icmp_req=5 ttl=64 time=66.3 ms --- 10.42.11.205 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4003ms rtt min/avg/max/mdev = 66.332/530.917/1676.312/635.755 ms, pipe 2 [lnevers@gpo-ig ~]$ ping 10.42.11.134 -c 5 PING 10.42.11.134 (10.42.11.134) 56(84) bytes of data. 64 bytes from 10.42.11.134: icmp_req=1 ttl=64 time=138 ms 64 bytes from 10.42.11.134: icmp_req=2 ttl=64 time=138 ms 64 bytes from 10.42.11.134: icmp_req=3 ttl=64 time=138 ms 64 bytes from 10.42.11.134: icmp_req=4 ttl=64 time=138 ms 64 bytes from 10.42.11.134: icmp_req=5 ttl=64 time=138 ms --- 10.42.11.134 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4006ms rtt min/avg/max/mdev = 138.567/138.595/138.619/0.408 ms }}} On the ProtoGENI Utah host ping the RENCI ExoGENI host and the GPO InstaGENI host: {{{ $ ssh -p 32570 -i /home/lnevers/.ssh/id_rsa lnevers@pc423.emulab.net [lnevers@utah-pg ~]$ /sbin/ifconfig |egrep 10.42 inet addr:10.42.11.134 Bcast:10.42.11.255 Mask:255.255.255.0 [lnevers@utah-pg ~]$ ping 10.42.11.205 -c 5 PING 10.42.11.205 (10.42.11.205) 56(84) bytes of data. 64 bytes from 10.42.11.205: icmp_req=1 ttl=64 time=1692 ms 64 bytes from 10.42.11.205: icmp_req=2 ttl=64 time=710 ms 64 bytes from 10.42.11.205: icmp_req=3 ttl=64 time=92.4 ms 64 bytes from 10.42.11.205: icmp_req=4 ttl=64 time=92.5 ms 64 bytes from 10.42.11.205: icmp_req=5 ttl=64 time=92.5 ms --- 10.42.11.205 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4003ms rtt min/avg/max/mdev = 92.416/536.194/1692.752/625.889 ms, pipe 2 [lnevers@utah-pg ~]$ /sbin/ifconfig |egrep 10.42 inet addr:10.42.11.134 Bcast:10.42.11.255 Mask:255.255.255.0 [lnevers@utah-pg ~]$ ping 10.42.11.65 -c 5 PING 10.42.11.65 (10.42.11.65) 56(84) bytes of data. 64 bytes from 10.42.11.65: icmp_req=1 ttl=64 time=2103 ms 64 bytes from 10.42.11.65: icmp_req=2 ttl=64 time=1121 ms 64 bytes from 10.42.11.65: icmp_req=3 ttl=64 time=138 ms 64 bytes from 10.42.11.65: icmp_req=4 ttl=64 time=138 ms 64 bytes from 10.42.11.65: icmp_req=5 ttl=64 time=138 ms --- 10.42.11.65 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4003ms rtt min/avg/max/mdev = 138.555/728.028/2103.317/785.896 ms, pipe 3 }}} On RENCI ExoGENI host ping the PG Utah host and the GPO InstaGENI host: {{{ $ ssh -i /home/lnevers/.ssh/id_rsa root@152.54.14.17 root@VM1:~# /sbin/ifconfig |grep 10.42 inet addr:10.42.11.205 Bcast:10.42.11.255 Mask:255.255.255.0 root@VM1:~# ping 10.42.11.134 -c 5 PING 10.42.11.134 (10.42.11.134) 56(84) bytes of data. 64 bytes from 10.42.11.134: icmp_req=1 ttl=64 time=3707 ms 64 bytes from 10.42.11.134: icmp_req=2 ttl=64 time=2714 ms 64 bytes from 10.42.11.134: icmp_req=3 ttl=64 time=1711 ms 64 bytes from 10.42.11.134: icmp_req=4 ttl=64 time=726 ms 64 bytes from 10.42.11.134: icmp_req=5 ttl=64 time=92.4 ms --- 10.42.11.134 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4022ms rtt min/avg/max/mdev = 92.433/1790.207/3707.214/1307.640 ms, pipe 4 root@VM1:~# ping 10.42.11.65 -c 5 PING 10.42.11.65 (10.42.11.65) 56(84) bytes of data. 64 bytes from 10.42.11.65: icmp_req=1 ttl=64 time=3389 ms 64 bytes from 10.42.11.65: icmp_req=2 ttl=64 time=2408 ms 64 bytes from 10.42.11.65: icmp_req=3 ttl=64 time=1405 ms 64 bytes from 10.42.11.65: icmp_req=4 ttl=64 time=435 ms 64 bytes from 10.42.11.65: icmp_req=5 ttl=64 time=66.2 ms --- 10.42.11.65 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4017ms rtt min/avg/max/mdev = 66.212/1540.944/3389.023/1231.504 ms, pipe 4 }}} You can now run an experiment! == 8. 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: {{{ $ omni.py -a ig-gpo deletesliver 3sites-OF $ omni.py -a ig-of-gpo -V1 deletesliver 3sites-OF $ omni.py -a of-gpo -V1 deletesliver 3sites-OF $ omni.py -a of-nlr -V1 deletesliver 3sites-OF $ omni.py -a of-i2 -V1 deletesliver 3sites-OF $ omni.py -a of-uen -V1 deletesliver 3sites-OF $ omni.py -a pg-utah deletesliver 3sites-OF $ omni.py -a eg-renci deletesliver 3sites-OF $ omni.py -a eg-of-renci -V1 deletesliver 3sites-OF }}} ---- {{{ #!html Email help@geni.net for GENI support or email me with feedback on this page! }}}